case DOTL:
d = ".l";
break;
+ case CR_ABSCOUNT:
+ d = "^^abscount";
+ break;
case CR_DATE:
d = "^^date";
break;
INOBJ * inobj;
FILEREC * fr;
- // Verbose mode
- if (verb_flag)
+ // Debug mode
+ if (debug)
printf("[include: %s, cfileno=%u]\n", fname, cfileno);
// Alloc and initialize include-descriptors
// Pop IFENT levels until we reach the conditional assembly context we
// were at when the input object was entered.
while (ifent != inobj->in_ifent)
- d_endif();
+ {
+ if (d_endif() != 0) // Something bad happened during endif parsing?
+ return -1; // If yes, bail instead of getting stuck in a loop
+ }
tok = inobj->in_otok; // Restore tok and otok
etok = inobj->in_etok;
switch (inobj->in_type)
{
case SRC_IFILE: // Pop and release an IFILE
- if (verb_flag)
+ if (debug)
printf("[Leaving: %s]\n", curfname);
ifile = inobj->inobj.ifile;
ifile->if_link = f_ifile;
f_ifile = ifile;
close(ifile->ifhandle); // Close source file
-if (verb_flag) printf("[fpop (pre): curfname=%s]\n", curfname);
+if (debug) printf("[fpop (pre): curfname=%s]\n", curfname);
curfname = ifile->ifoldfname; // Set current filename
-if (verb_flag) printf("[fpop (post): curfname=%s]\n", curfname);
-if (verb_flag) printf("[fpop: (pre) cfileno=%d ifile->ifno=%d]\n", (int)cfileno, (int)ifile->ifno);
+if (debug) printf("[fpop (post): curfname=%s]\n", curfname);
+if (debug) printf("[fpop: (pre) cfileno=%d ifile->ifno=%d]\n", (int)cfileno, (int)ifile->ifno);
curlineno = ifile->ifoldlineno; // Set current line#
DEBUG printf("cfileno=%d ifile->ifno=%d\n", (int)cfileno, (int)ifile->ifno);
cfileno = ifile->ifno; // Restore current file number
-if (verb_flag) printf("[fpop: (post) cfileno=%d ifile->ifno=%d]\n", (int)cfileno, (int)ifile->ifno);
+if (debug) printf("[fpop: (post) cfileno=%d ifile->ifno=%d]\n", (int)cfileno, (int)ifile->ifno);
break;
case SRC_IMACRO: // Pop and release an IMACRO
imacro = inobj->inobj.imacro;
case SRC_IFILE:
if ((ln = GetNextLine()) == NULL)
{
-if (verb_flag) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
- fpop(); // Pop input level
- goto retry; // Try for more lines
+if (debug) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
+ if (fpop()==0) // Pop input level
+ goto retry; // Try for more lines
+ else
+ {
+ ifent->if_prev = (IFENT *) - 1; //Signal Assemble() that we have reached EOF with unbalanced if/endifs
+ return TKEOF;
+ }
}
curlineno++; // Bump line number
case SRC_IMACRO:
if ((ln = GetNextMacroLine()) == NULL)
{
- ExitMacro(); // Exit macro (pop args, do fpop(), etc)
- goto retry; // Try for more lines...
+ if (ExitMacro() == 0) // Exit macro (pop args, do fpop(), etc)
+ goto retry; // Try for more lines...
+ else
+ return TKEOF; // Oops, we got a non zero return code, signal EOF
}
lntag = '@';
case SRC_IREPT:
if ((ln = GetNextRepeatLine()) == NULL)
{
-if (verb_flag) printf("TokenizeLine: Calling fpop() from SRC_IREPT...\n");
+if (debug) printf("TokenizeLine: Calling fpop() from SRC_IREPT...\n");
fpop();
goto retry;
}
printf("[DOTI]");
else if (*t == ENDEXPR)
printf("[ENDEXPR]");
+ else if (*t == CR_ABSCOUNT)
+ printf("[CR_ABSCOUNT]");
else if (*t == CR_DEFINED)
printf("[CR_DEFINED]");
else if (*t == CR_REFERENCED)