-#define DL_STACK (directory_list_stack)
-#define DL_STACKP (dls)
-#define DL_STACKSIZE (DL_DEPTHMAX + 1) //+1 because push increments early
-#define DL_LEN (DL_STACKP - DL_STACK)
-#define DL_CURDEPTH (DL_LEN)
-#define DL_CD_STACK ((*DL_STACKP).child_entity_stack)
-#define DL_CD_STACKP ((*DL_STACKP).cds)
-#define DL_CD_STACKSIZE (DL_DEPTHMAX) //square tree
-#define DL_CD_LEN (DL_CD_STACKP - DL_CD_STACK)
-#define ERR_CHILD "Fatal: Maximum of " S(MAX_CHILD) \
- " child directories exceeded for directory %s at depth %i\n" \
- ,DL_STACK[DL_DEPTH()].label,DL_DEPTH()
-#define ERR_DEPTH "Fatal: Maximum directory depth of " S(DL_DEPTHMAX) \
- " exceeded during directory scan\n"
-#define DL_INIT() (DL_STACKP = DL_STACK)
-#define DL_CD_INIT() (DL_CD_STACKP = DL_CD_STACK)
-#define DL_POP() ((DIR*)(*DL_STACKP--))
-#define DL_CD_POP() (*--DL_CD_STACKP)
-#define DL_PUSH(D) (*(DIR**)(++DL_STACKP) = DIRP)
-#define DL_CD_PUSH(E) (*DL_CD_STACKP++ = E)
-#define DL_SAFEPUSH(D) \
- do { \
- if (DL_DEPTH() >= DL_DEPTHMAX) \
- { fprintf(stderr, ERR_DEPTH); \
- exit(EXIT_FAILURE); \
- } \
- if ((*(DIR**)(++DL_STACKP) = D) == NULL) \
- { perror("DL_SAFEPUSH"); \
- exit(EXIT_FAILURE); \
- } \
- } while(0)
-#define DL_CD_POPULATE() \
- do { \
- DL_CD_INIT(); \
- while ((*DL_CD_STACKP = readdir(*DL_STACKP)) != NULL) \
- { switch((*DL_CD_STACKP)->d_type) \
- { case DT_REG: \
- case DT_DIR: \
- DL_CD_STACKP++; \
- break; \
- default: \
- } \
- } \
- qsort(DL_CD_STACKP, DL_CD_LEN, sizeof *DL_CD_STACKP, qcomp); \
- } while (0)
-
+/* Public */
+int lexer_init(void);
+int lexer(void);
+int lexer_lexfile(const char*);
+void lexer_pushtok(int, YYSTYPE);
+char const* lexer_get_current_filepath(void);
+struct dirent* lexer_direntpa[DE_STACKSIZE],** lexer_direntpp,** lexer_direntpb;
+/* Private */
+extern //lexer_lex.rl
+int lexer_lex(const char*);
+extern //scanner.c
+int scanner_init(void);
+extern //scanner.c
+int scanner(void);
+static inline
+int dredge_current_depth(void);
+extern //bison
+YYSTYPE yylval;