$(eval DRIVER_DBGTARG := $(DRIVER_TARG_DIR)$(basename $(notdir $(DRIVER_TARG)))-d$($2_OUT))
$(eval SCRUB_TARGETS += $(DRIVER_DBGTARG))
$(eval MAKE_DIRS += $(DRIVER_TARG_DIR).$($2_DBG)/)
-$(DRIVER_DBGTARG): $(DRIVER_DBGDEPS) | $(DRIVER_TARG_DIR).$($2_DBG)/
+$(DRIVER_DBGTARG): $(DRIVER_DBGDEPS) | $(DRIVER_TARG_DIR)
$($2_C) $($2_FLAGS) $(DRIVER_DBGSRC) -o $$@
# Make a rule to run this driver after building
$(DRIVER_NAME)-run: $(DRIVER_TARG)
#include <stdlib.h> //exit
#include <unistd.h> //chdir
#include <dirent.h> //opendir
+
+#include "parser.tab.h"
/* Public */
int scanner_init(void);
int scanner(void);
int dredge_current_depth(void);
extern //lexer.c
struct dirent* lexer_direntpa[];
-extern //main.c
+extern //SRC_DIR/bin/tools/apc.c
const char* cargs['Z'];
struct dirlist
Returns the number of elements added to the lexer's file array.
*/
int scanner
-#define S(S)#S //stringifier
-#define ERR_CHILD "Fatal: Maximum of " S(DL_CD_STACKSIZE) \
+#define $($)#$ //stringifier
+#define ERR_CHILD "Fatal: Maximum of " $(DL_CD_STACKSIZE) \
" child directories exceeded for directory at depth %i\n" \
,DL_LEN()
-#define ERR_DEPTH "Fatal: Maximum directory depth of " S(DL_STACKSIZE) \
+#define ERR_DEPTH "Fatal: Maximum directory depth of " $(DL_STACKSIZE) \
" exceeded during directory scan\n"
#define ERR_DL "Fatal: Directory List Stack Corruption %x\n", DL_LEN()
#define TOK_CLOPEN 0x55, 0 //TODO
#define TOK_CLCLOSE 0x56, 0 //TODO
()
{ struct dirent* direntp;
+ struct DIR* DIRp;
parse:
if (DL_CD_LEN() >= DL_CD_STACKSIZE)//fail if maxchildren exceeded
{ fprintf(stderr, ERR_CHILD);
goto fail;
}
if (DL_CD_LEN() > 0) //There are entities to process at this depth
- { if (direntp = DL_CD_POP()) //If the dirent is null, the library
+ { if ((direntp = DL_CD_POP()) == NULL) //If the dirent is null, the library
goto libfail; //function in dirent has failed
lexer_lex(direntp->d_name); //lex the directory name
if (DL_LEN() >= DL_STACKSIZE) //fail if maxdepth exceeded
}
if (chdir(direntp->d_name)) //move into the new directory
goto libfail;
- if (DL_PUSH(opendir(CWDSTR))) //open the cwd
- goto libfail;
+ DL_PUSH(opendir(CWDSTR));
+ if (DL_CURDIR() == NULL) //open the cwd
+ { printf("DL_PUSH(opendir failed.\n");
+ goto libfail;
+ }
lexer_pushtok(TOK_CLOPEN); //Push "Open Directory" token
return dredge_current_depth(); //Filter and sort the current depth
}
/* Posix */
#include <stdlib.h> //exit
#include <unistd.h> //getopt
+/* Internal */
+#include <apc/parser.tab.h> //bison
const char* cargs['Z'] = {0};
int main(int, char*[]);
extern //bison
-void yyparse(void);
+int yyparse(void);
extern //lexer.c
int lexer_init(void);
+extern //apc/parser.tab.c
+YYSTYPE yylval;
+extern //lexer.c
+int lexer(void);
+
/* Main entry from terminal
parses the command line and kicks off recursive scanning
*/
( int argc,
char* argv[]
)
-#define S(S)#S //stringifier
+#define $($)#$ //stringifier
#define MAXSTR 255
-#define MAXERR "-%c allows at most " S(MAXSTR) " input characters\n", opt
+#define MAXERR "-%c allows at most " $(MAXSTR) " input characters\n", opt
#define USAGE "Usage: %s [-r root]\n", argv[0]
#define DONE -1
{ int opt;