Fixed subtle bug in expr().
[rmac] / error.c
diff --git a/error.c b/error.c
index 26f82b7ad02396350493f10532b7148730e4a7ec..4f65cc42c50abc9601a051d688b508d51a99553e 100644 (file)
--- a/error.c
+++ b/error.c
 #include "token.h"
 #include "listing.h"
 
-int errcnt;                                                 // Error count
-char *err_fname;                                            // Name of error message file
+int errcnt;                                            // Error count
+char * err_fname;                              // Name of error message file
+
+static const char nl[] = "\n";
+static long unused;                            // For supressing 'write' warnings
 
-static char nl[] = "\n";
 
 //
-// --- Report error if not at EOL ------------------------------------------------------------------
+// Report error if not at EOL
 //
-
-int at_eol(void) {
-   if(*tok != EOL)
-      error("syntax error");
-   return(0);
+int at_eol(void)
+{
+       char msg[256];
+
+       if (*tok != EOL)
+       {
+//             error("syntax error");
+               sprintf(msg, "syntax error. expected EOL, found $%X ('%c')", *tok, *tok);
+               error(msg);
+       }
+
+       return 0;
 }
 
+
 //
-// --- Cannot Create a File ------------------------------------------------------------------------
+// Cannot Create a File
 //
-
-void cantcreat(char *fn) {
-   printf("cannot create: '%s'\n", fn);
-   exit(1);
+void cantcreat(const char * fn)
+{
+       printf("cannot create: '%s'\n", fn);
+       exit(1);
 }
 
+
 //
-// --- Setup for Error Message ---------------------------------------------------------------------
+// Setup for Error Message
 // o  Create error listing file (if necessary)
 // o  Set current filename
 //
+void err_setup(void)
+{
+       char fnbuf[FNSIZ];
+
+// This seems like it's unnecessary, as token.c seems to take care of this all by itself.
+// Can restore if it's really needed. If not, into the bit bucket it goes. :-)
+//     setfnum(cfileno);
 
-void err_setup(void) {
-   char fnbuf[FNSIZ];
-
-   setfnum(cfileno);
-   if(err_fname != NULL) {
-      strcpy(fnbuf, err_fname);
-      if(*fnbuf == EOS) {
-         strcpy(fnbuf, firstfname);
-      }
-      err_fname = NULL;
-
-      if((err_fd = open(fnbuf, _OPEN_FLAGS, _PERM_MODE)) < 0)
-         cantcreat(fnbuf);
-      err_flag = 1;
-   }
+       if (err_fname != NULL)
+       {
+               strcpy(fnbuf, err_fname);
+
+               if (*fnbuf == EOS)
+                       strcpy(fnbuf, firstfname);
+
+               err_fname = NULL;
+
+               if ((err_fd = open(fnbuf, _OPEN_FLAGS, _PERM_MODE)) < 0)
+                       cantcreat(fnbuf);
+
+               err_flag = 1;
+       }
 }
 
+
 //
-// --- Display Error Message -----------------------------------------------------------------------
+// Display Error Message
 //
+int error(const char * s)
+{
+       char buf[EBUFSIZ];
+       unsigned int length;
 
-int error(char *s) {
-   char buf[EBUFSIZ];
-   unsigned int length;
+       err_setup();
 
-   err_setup();
-   if(listing > 0) ship_ln(s);
-   sprintf(buf, "%s[%d]: Error: %s%s", curfname, curlineno, s, nl);
-   length = strlen(buf);
-   if(err_flag) write(err_fd, buf, length);
-   else printf("%s", buf);
-   taglist('E');
-   ++errcnt;
+       if (listing > 0)
+               ship_ln(s);
 
-   return(ERROR);
+       sprintf(buf, "%s %d: Error: %s%s", curfname, curlineno, s, nl);
+       length = strlen(buf);
+
+       if (err_flag)
+               unused = write(err_fd, buf, length);
+       else
+               printf("%s", buf);
+
+       taglist('E');
+       errcnt++;
+
+       return ERROR;
 }
 
-int errors(char *s, char *s1) {
-   char buf[EBUFSIZ];
-   char buf1[EBUFSIZ];
 
-   err_setup();
-   sprintf(buf, s, s1);
-   if(listing > 0) ship_ln(buf);
-   sprintf(buf1, "%s[%d]: Error: %s%s", curfname, curlineno, buf, nl);
-   if(err_flag) write(err_fd, buf1, (LONG)strlen(buf1));
-   else printf("%s", buf1);
-   taglist('E');
-   ++errcnt;
+int errors(const char * s, char * s1)
+{
+       char buf[EBUFSIZ];
+       char buf1[EBUFSIZ];
+
+       err_setup();
+       sprintf(buf, s, s1);
+
+       if (listing > 0)
+               ship_ln(buf);
 
-   return(ERROR);
+       sprintf(buf1, "%s %d: Error: %s%s", curfname, curlineno, buf, nl);
+
+       if (err_flag)
+               unused = write(err_fd, buf1, (LONG)strlen(buf1));
+       else
+               printf("%s", buf1);
+
+       taglist('E');
+       ++errcnt;
+
+       return ERROR;
 }
 
-int warn(char *s) {
-   char buf[EBUFSIZ];
 
-   err_setup();
-   if(listing > 0) ship_ln(s);
-   sprintf(buf, "%s[%d]: Warning: %s%s", curfname, curlineno, s, nl);
-   if(err_flag) write(err_fd, buf, (LONG)strlen(buf));
-   else printf("%s", buf);
-   taglist('W');
+int warn(const char * s)
+{
+       char buf[EBUFSIZ];
+
+       err_setup();
+
+       if (listing > 0)
+               ship_ln(s);
 
-   return(OK);
+       sprintf(buf, "%s %d: Warning: %s%s", curfname, curlineno, s, nl);
+
+       if (err_flag)
+               unused = write(err_fd, buf, (LONG)strlen(buf));
+       else
+               printf("%s", buf);
+
+       taglist('W');
+
+       return OK;
 }
 
-int warns(char *s, char *s1) {
-   char buf[EBUFSIZ];
-   char buf1[EBUFSIZ];
 
-   err_setup();
-   sprintf(buf, s, s1);
-   if(listing > 0) ship_ln(s);
-   sprintf(buf1, "%s[%d]: Warning: %s%s", curfname, curlineno, buf, nl);
-   if(err_flag) write(err_fd, buf1, (LONG)strlen(buf1));
-   else printf("%s", buf1);
-   taglist('W');
+int warns(const char * s, char * s1)
+{
+       char buf[EBUFSIZ];
+       char buf1[EBUFSIZ];
+
+       err_setup();
+       sprintf(buf, s, s1);
+
+       if (listing > 0)
+               ship_ln(s);
+
+       sprintf(buf1, "%s %d: Warning: %s%s", curfname, curlineno, buf, nl);
 
-   return(OK);
+       if (err_flag)
+               unused = write(err_fd, buf1, (LONG)strlen(buf1));
+       else
+               printf("%s", buf1);
+
+       taglist('W');
+
+       return OK;
 }
 
-int warni(char *s, unsigned i) {
-   char buf[EBUFSIZ];
-   char buf1[EBUFSIZ];
 
-   err_setup();
-   sprintf(buf, s, i);
-   if(listing > 0) ship_ln(buf);
-   sprintf(buf1, "%s[%d]: Warning: %s%s", curfname, curlineno, buf, nl);
-   if(err_flag) write(err_fd, buf1, (LONG)strlen(buf1));
-   else printf("%s", buf1);
-   taglist('W');
+int warni(const char * s, unsigned i)
+{
+       char buf[EBUFSIZ];
+       char buf1[EBUFSIZ];
+
+       err_setup();
+       sprintf(buf, s, i);
+
+       if (listing > 0)
+               ship_ln(buf);
+
+       sprintf(buf1, "%s %d: Warning: %s%s", curfname, curlineno, buf, nl);
 
-   return(OK);
+       if (err_flag)
+               unused = write(err_fd, buf1, (LONG)strlen(buf1));
+       else
+               printf("%s", buf1);
+
+       taglist('W');
+
+       return OK;
 }
 
-int fatal(char *s) {
-   char buf[EBUFSIZ];
 
-   err_setup();
-   if(listing > 0) ship_ln(s);
-   sprintf(buf, "%s[%d]: Fatal: %s%s", curfname, curlineno, s, nl);
-   if(err_flag) write(err_fd, buf, (LONG)strlen(buf));
-   else printf("%s", buf);
+int fatal(const char * s)
+{
+       char buf[EBUFSIZ];
+
+       err_setup();
+
+       if (listing > 0)
+               ship_ln(s);
+
+       sprintf(buf, "%s %d: Fatal: %s%s", curfname, curlineno, s, nl);
 
-   exit(1);
+       if (err_flag)
+               unused = write(err_fd, buf, (LONG)strlen(buf));
+       else
+               printf("%s", buf);
+
+       exit(1);
 }
 
-int interror(int n) {
-   char buf[EBUFSIZ];
 
-   err_setup();
-   sprintf(buf, "%s[%d]: Internal Error Number %d%s", curfname, curlineno, n, nl);
-   if(listing > 0) ship_ln(buf);
-   if(err_flag) write(err_fd, buf, (LONG)strlen(buf));
-   else printf("%s", buf);
+int interror(int n)
+{
+       char buf[EBUFSIZ];
+
+       err_setup();
+       sprintf(buf, "%s %d: Internal Error Number %d%s", curfname, curlineno, n, nl);
+
+       if (listing > 0)
+               ship_ln(buf);
 
-   exit(1);
+       if (err_flag)
+               unused = write(err_fd, buf, (LONG)strlen(buf));
+       else
+               printf("%s", buf);
+
+       exit(1);
 }
+