]> Shamusworld >> Repos - rmac/blob - error.c
Fix for USP token, submitted by ggn.
[rmac] / error.c
1 //
2 // RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
3 // ERROR.C - Error Handling
4 // Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
5 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
6 // Source Utilised with the Kind Permission of Landon Dyer
7 //
8
9 #include "error.h"
10 #include "token.h"
11 #include "listing.h"
12
13 int errcnt;                                                 // Error count
14 char *err_fname;                                            // Name of error message file
15
16 static char nl[] = "\n";
17
18 //
19 // --- Report error if not at EOL ------------------------------------------------------------------
20 //
21
22 int at_eol(void) {
23    if(*tok != EOL)
24       error("syntax error");
25    return(0);
26 }
27
28 //
29 // --- Cannot Create a File ------------------------------------------------------------------------
30 //
31
32 void cantcreat(char *fn) {
33    printf("cannot create: '%s'\n", fn);
34    exit(1);
35 }
36
37 //
38 // --- Setup for Error Message ---------------------------------------------------------------------
39 // o  Create error listing file (if necessary)
40 // o  Set current filename
41 //
42
43 void err_setup(void) {
44    char fnbuf[FNSIZ];
45
46    setfnum(cfileno);
47    if(err_fname != NULL) {
48       strcpy(fnbuf, err_fname);
49       if(*fnbuf == EOS) {
50          strcpy(fnbuf, firstfname);
51       }
52       err_fname = NULL;
53
54       if((err_fd = open(fnbuf, _OPEN_FLAGS, _PERM_MODE)) < 0)
55          cantcreat(fnbuf);
56       err_flag = 1;
57    }
58 }
59
60 //
61 // --- Display Error Message -----------------------------------------------------------------------
62 //
63
64 int error(char *s) {
65    char buf[EBUFSIZ];
66    unsigned int length;
67
68    err_setup();
69    if(listing > 0) ship_ln(s);
70    sprintf(buf, "%s[%d]: Error: %s%s", curfname, curlineno, s, nl);
71    length = strlen(buf);
72    if(err_flag) write(err_fd, buf, length);
73    else printf("%s", buf);
74    taglist('E');
75    ++errcnt;
76
77    return(ERROR);
78 }
79
80 int errors(char *s, char *s1) {
81    char buf[EBUFSIZ];
82    char buf1[EBUFSIZ];
83
84    err_setup();
85    sprintf(buf, s, s1);
86    if(listing > 0) ship_ln(buf);
87    sprintf(buf1, "%s[%d]: Error: %s%s", curfname, curlineno, buf, nl);
88    if(err_flag) write(err_fd, buf1, (LONG)strlen(buf1));
89    else printf("%s", buf1);
90    taglist('E');
91    ++errcnt;
92
93    return(ERROR);
94 }
95
96 int warn(char *s) {
97    char buf[EBUFSIZ];
98
99    err_setup();
100    if(listing > 0) ship_ln(s);
101    sprintf(buf, "%s[%d]: Warning: %s%s", curfname, curlineno, s, nl);
102    if(err_flag) write(err_fd, buf, (LONG)strlen(buf));
103    else printf("%s", buf);
104    taglist('W');
105
106    return(OK);
107 }
108
109 int warns(char *s, char *s1) {
110    char buf[EBUFSIZ];
111    char buf1[EBUFSIZ];
112
113    err_setup();
114    sprintf(buf, s, s1);
115    if(listing > 0) ship_ln(s);
116    sprintf(buf1, "%s[%d]: Warning: %s%s", curfname, curlineno, buf, nl);
117    if(err_flag) write(err_fd, buf1, (LONG)strlen(buf1));
118    else printf("%s", buf1);
119    taglist('W');
120
121    return(OK);
122 }
123
124 int warni(char *s, unsigned i) {
125    char buf[EBUFSIZ];
126    char buf1[EBUFSIZ];
127
128    err_setup();
129    sprintf(buf, s, i);
130    if(listing > 0) ship_ln(buf);
131    sprintf(buf1, "%s[%d]: Warning: %s%s", curfname, curlineno, buf, nl);
132    if(err_flag) write(err_fd, buf1, (LONG)strlen(buf1));
133    else printf("%s", buf1);
134    taglist('W');
135
136    return(OK);
137 }
138
139 int fatal(char *s) {
140    char buf[EBUFSIZ];
141
142    err_setup();
143    if(listing > 0) ship_ln(s);
144    sprintf(buf, "%s[%d]: Fatal: %s%s", curfname, curlineno, s, nl);
145    if(err_flag) write(err_fd, buf, (LONG)strlen(buf));
146    else printf("%s", buf);
147
148    exit(1);
149 }
150
151 int interror(int n) {
152    char buf[EBUFSIZ];
153
154    err_setup();
155    sprintf(buf, "%s[%d]: Internal Error Number %d%s", curfname, curlineno, n, nl);
156    if(listing > 0) ship_ln(buf);
157    if(err_flag) write(err_fd, buf, (LONG)strlen(buf));
158    else printf("%s", buf);
159
160    exit(1);
161 }