char lntag; // Line tag
char * curfname; // Current filename
char tolowertab[128]; // Uppercase ==> lowercase
-char hextab[128]; // Table of hex values
+int8_t hextab[128]; // Table of hex values
char dotxtab[128]; // Table for ".b", ".s", etc.
char irbuf[LNSIZ]; // Text for .rept block line
char lnbuf[LNSIZ]; // Text of current line
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.
+ int numUnmatched = 0;
+
while (ifent != inobj->in_ifent)
{
- if (d_endif() != 0) // Something bad happened during endif parsing?
- return -1; // If yes, bail instead of getting stuck in a loop
+ if (d_endif() != 0) // Something bad happened during endif parsing?
+ return -1; // If yes, bail instead of getting stuck in a loop
+
+ numUnmatched++;
}
- tok = inobj->in_otok; // Restore tok and otok
+ // Give a warning to the user that we had to wipe their bum for them
+ if (numUnmatched > 0)
+ warni("missing %d .endif(s)", numUnmatched);
+
+ 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)
+ case SRC_IFILE: // Pop and release an IFILE
+ 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");
+if (debug) printf("TokenizeLine: Calling fpop() from SRC_IFILE...\n");
if (fpop() == 0) // Pop input level
goto retry; // Try for more lines
else
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;
}
*p++ = EOS;
continue;
case '$': // $, hex constant
- if ((int)chrtab[*ln] & HDIGIT)
+ if (chrtab[*ln] & HDIGIT)
{
v = 0;
// Parse the hex value
- while ((int)hextab[*ln] >= 0)
+ while (hextab[*ln] >= 0)
v = (v << 4) + (int)hextab[*ln++];
// ggn: Okay, some comments here are in order I think....