- Added `include "dinges";' command, that is aware of Scytherdirs.
This commit is contained in:
parent
db8e72f37e
commit
08f705234b
@ -7,6 +7,7 @@
|
|||||||
#include "pheading.h"
|
#include "pheading.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "tac.h"
|
#include "tac.h"
|
||||||
|
#include "switches.h"
|
||||||
|
|
||||||
/* tokens for language */
|
/* tokens for language */
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
@ -47,7 +48,38 @@ integer {digit}+
|
|||||||
text \"({ascii_char}|{escaped_char})*\"
|
text \"({ascii_char}|{escaped_char})*\"
|
||||||
id @?({letter}|{digit}|[\^\-])+
|
id @?({letter}|{digit}|[\^\-])+
|
||||||
|
|
||||||
|
/* the "incl" state is used for picking up the name of an include file
|
||||||
|
*/
|
||||||
|
%x incl inclend
|
||||||
%%
|
%%
|
||||||
|
include BEGIN(incl);
|
||||||
|
<incl>[ \t]*\" /* eat the whitespace */
|
||||||
|
<incl>[^\"]+ { /* got the include file name */
|
||||||
|
/* try to open, using scytherdirs environment variable as well. */
|
||||||
|
yyin = openFileSearch (yytext, NULL);
|
||||||
|
if (! yyin)
|
||||||
|
{
|
||||||
|
error ("Could not open include file %s.", yytext);
|
||||||
|
}
|
||||||
|
yypush_buffer_state(yy_create_buffer(yyin, YY_BUF_SIZE ));
|
||||||
|
BEGIN(INITIAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
<inclend>\";? { /* eat the closing things */
|
||||||
|
BEGIN(INITIAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
<INITIAL><<EOF>> {
|
||||||
|
yypop_buffer_state();
|
||||||
|
if (! YY_CURRENT_BUFFER )
|
||||||
|
{
|
||||||
|
yyterminate();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
BEGIN(inclend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"/*" {
|
"/*" {
|
||||||
register int c;
|
register int c;
|
||||||
|
@ -92,12 +92,14 @@ switchesDone (void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Open a (protocol) file instead of stdin
|
//! Open a (protocol) file.
|
||||||
/**
|
/**
|
||||||
* Uses the environment variable SCYTHERDIR to also search for files
|
* Uses the environment variable SCYTHERDIR to also search for files
|
||||||
|
*
|
||||||
|
* If reopener == NULL then we open a new file pointer, otherwise reopen this one.
|
||||||
*/
|
*/
|
||||||
int
|
FILE *
|
||||||
openFileStdin (char *filename)
|
openFileSearch (char *filename, FILE * reopener)
|
||||||
{
|
{
|
||||||
const char *separators = ":;\n";
|
const char *separators = ":;\n";
|
||||||
char *dirs;
|
char *dirs;
|
||||||
@ -139,10 +141,21 @@ openFileStdin (char *filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now try to open it
|
// Now try to open it
|
||||||
if (freopen (buffer, "r", stdin) != NULL)
|
if (reopener != NULL)
|
||||||
|
{
|
||||||
|
if (freopen (buffer, "r", reopener) != NULL)
|
||||||
{
|
{
|
||||||
result = true;
|
result = true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reopener = fopen (buffer, "r");
|
||||||
|
if (reopener != NULL)
|
||||||
|
{
|
||||||
|
result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
free (buffer);
|
free (buffer);
|
||||||
return result;
|
return result;
|
||||||
@ -152,7 +165,7 @@ openFileStdin (char *filename)
|
|||||||
|
|
||||||
if (try (""))
|
if (try (""))
|
||||||
{
|
{
|
||||||
return true;
|
return reopener;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now try the environment variable
|
// Now try the environment variable
|
||||||
@ -164,7 +177,7 @@ openFileStdin (char *filename)
|
|||||||
// try this one
|
// try this one
|
||||||
if (try (dirs))
|
if (try (dirs))
|
||||||
{
|
{
|
||||||
return true;
|
return reopener;
|
||||||
}
|
}
|
||||||
// skip to next
|
// skip to next
|
||||||
dirs = strpbrk (dirs, separators);
|
dirs = strpbrk (dirs, separators);
|
||||||
@ -181,8 +194,22 @@ openFileStdin (char *filename)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Nope
|
// Nope
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Open a (protocol) file instead of stdin
|
||||||
|
int
|
||||||
|
openFileStdin (char *filename)
|
||||||
|
{
|
||||||
|
if (openFileSearch (filename, stdin) == NULL)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//! Process a single switch or generate help text
|
//! Process a single switch or generate help text
|
||||||
/**
|
/**
|
||||||
|
@ -61,4 +61,6 @@ struct switchdata
|
|||||||
|
|
||||||
extern struct switchdata switches; //!< pointer to switchdata structure
|
extern struct switchdata switches; //!< pointer to switchdata structure
|
||||||
|
|
||||||
|
FILE *openFileSearch (char *filename, FILE * reopener);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user