#include <unistd.h> //chdir
#include <dirent.h> //opendir
#include <unistr.h> //unicode strings
+#include <string.h> //strlen
/* Internal */
#include "parser.tab.h"
/* Public */
yypstate* apc_pstate;
yycstate* apc_cstate;
/* Private */
-extern //lexer.c
-int lexer_lexfile(uint8_t const*);
extern //lexer.rl
-int lexer_lexstring(uint8_t const*, int);
+int lexer_lexfile(uint8_t const*);
#define PUSHTOK(T,L) yypush_parse(apc_pstate, T, L, apc_cstate)
/* Init
scanner_quit();
apc_pstate = yypstate_new();
apc_cstate = yycstate_new();
- return (apc_pstate != NULL && apc_cstate != NULL);
+ return (apc_pstate == NULL || apc_cstate == NULL);
}
/* Quit
{ DIR* dirp;
errno = 0;
if ((dirp = opendir(pathname)) == NULL || errno)
- return -1;
+ { fprintf(stderr, "Path %s could not be accessed\n", pathname);
+ return -1;
+ }
if (chdir(pathname))
return -1;
return scanner_scandir(dirp);
switch (direntp->d_type)
{ case DT_REG:
printf("lexfile %s\n",direntp->d_name);
- //lexer_lexfile((uint8_t*)direntp->d_name);
+ lexer_lexfile((uint8_t*)direntp->d_name);
goto scan_next_dirent;
case DT_DIR:
- //lexer_lexstring((uint8_t*)direntp->d_name); //lex the dirname
+ lexer_lexfile((uint8_t*)direntp->d_name); //lex the dirname
printf("lexdir %s\n",direntp->d_name);
if (chdir(direntp->d_name)) //change to the specified dir
goto libfail;
errno = 0;
if ((cdirp = opendir(".")) == NULL || errno) //open it
goto libfail;
- //PUSHTOK(CLOPEN, 0); //push "Open Directory" token
+ PUSHTOK(CLOPEN, NULL); //push "Open Directory" token
printf("Scanner entered [%s]\n",direntp->d_name);
if(scanner_scandir(cdirp)) //scan the directory
goto libfail;
if (chdir("..")) //return to the parent dir
goto libfail;
- //PUSHTOK(CLCLOSE, 0); //push "Close Directory" token
+ PUSHTOK(CLCLOSE, NULL); //push "Close Directory" token
printf("Scanner returned\n");
goto scan_next_dirent; //continue scan
case DT_UNKNOWN: