]> git.sur5r.net Git - cc65/blob - src/ca65/error.c
Fixes for the watcom makefiles:
[cc65] / src / ca65 / error.c
1 /*****************************************************************************/
2 /*                                                                           */
3 /*                                  error.c                                  */
4 /*                                                                           */
5 /*                Error handling for the ca65 macroassembler                 */
6 /*                                                                           */
7 /*                                                                           */
8 /*                                                                           */
9 /* (C) 1998-2008 Ullrich von Bassewitz                                       */
10 /*               Roemerstrasse 52                                            */
11 /*               D-70794 Filderstadt                                         */
12 /* EMail:        uz@cc65.org                                                 */
13 /*                                                                           */
14 /*                                                                           */
15 /* This software is provided 'as-is', without any expressed or implied       */
16 /* warranty.  In no event will the authors be held liable for any damages    */
17 /* arising from the use of this software.                                    */
18 /*                                                                           */
19 /* Permission is granted to anyone to use this software for any purpose,     */
20 /* including commercial applications, and to alter it and redistribute it    */
21 /* freely, subject to the following restrictions:                            */
22 /*                                                                           */
23 /* 1. The origin of this software must not be misrepresented; you must not   */
24 /*    claim that you wrote the original software. If you use this software   */
25 /*    in a product, an acknowledgment in the product documentation would be  */
26 /*    appreciated but is not required.                                       */
27 /* 2. Altered source versions must be plainly marked as such, and must not   */
28 /*    be misrepresented as being the original software.                      */
29 /* 3. This notice may not be removed or altered from any source              */
30 /*    distribution.                                                          */
31 /*                                                                           */
32 /*****************************************************************************/
33
34
35
36 #include <stdio.h>
37 #include <stdlib.h>
38 #include <stdarg.h>
39
40 /* common */
41 #include "strbuf.h"
42
43 /* ca65 */
44 #include "error.h"
45 #include "filetab.h"
46 #include "nexttok.h"
47
48
49
50 /*****************************************************************************/
51 /*                                   Data                                    */
52 /*****************************************************************************/
53
54
55
56 /* Warning level */
57 unsigned WarnLevel      = 1;
58
59 /* Statistics */
60 unsigned ErrorCount     = 0;
61 unsigned WarningCount   = 0;
62
63
64
65 /*****************************************************************************/
66 /*                                 Warnings                                  */
67 /*****************************************************************************/
68
69
70
71 void WarningMsg (const FilePos* Pos, unsigned Level, const char* Format, va_list ap)
72 /* Print warning message. */
73 {
74     if (Level <= WarnLevel) {
75
76         StrBuf S = STATIC_STRBUF_INITIALIZER;
77         SB_VPrintf (&S, Format, ap);
78         SB_Terminate (&S);
79
80         fprintf (stderr, "%s(%lu): Warning: %s\n",
81                  SB_GetConstBuf (GetFileName (Pos->Name)),
82                  Pos->Line,
83                  SB_GetConstBuf (&S));
84         ++WarningCount;
85
86         SB_Done (&S);
87     }
88 }
89
90
91
92 void Warning (unsigned Level, const char* Format, ...)
93 /* Print warning message. */
94 {
95     va_list ap;
96     va_start (ap, Format);
97     WarningMsg (&CurPos, Level, Format, ap);
98     va_end (ap);
99 }
100
101
102
103 void PWarning (const FilePos* Pos, unsigned Level, const char* Format, ...)
104 /* Print warning message giving an explicit file and position. */
105 {
106     va_list ap;
107     va_start (ap, Format);
108     WarningMsg (Pos, Level, Format, ap);
109     va_end (ap);
110 }
111
112
113
114 /*****************************************************************************/
115 /*                                  Errors                                   */
116 /*****************************************************************************/
117
118
119
120 void ErrorMsg (const FilePos* Pos, const char* Format, va_list ap)
121 /* Print an error message */
122 {
123     StrBuf S = STATIC_STRBUF_INITIALIZER;
124     SB_VPrintf (&S, Format, ap);
125     SB_Terminate (&S);
126
127     fprintf (stderr, "%s(%lu): Error: %s\n",
128              SB_GetConstBuf (GetFileName (Pos->Name)),
129              Pos->Line,
130              SB_GetConstBuf (&S));
131     ++ErrorCount;
132
133     SB_Done (&S);
134 }
135
136
137
138 void Error (const char* Format, ...)
139 /* Print an error message */
140 {
141     va_list ap;
142     va_start (ap, Format);
143     ErrorMsg (&CurPos, Format, ap);
144     va_end (ap);
145 }
146
147
148
149 void PError (const FilePos* Pos, const char* Format, ...)
150 /* Print an error message giving an explicit file and position. */
151 {
152     va_list ap;
153     va_start (ap, Format);
154     ErrorMsg (Pos, Format, ap);
155     va_end (ap);
156 }
157
158
159
160 void ErrorSkip (const char* Format, ...)
161 /* Print an error message and skip the rest of the line */
162 {
163     va_list ap;
164     va_start (ap, Format);
165     ErrorMsg (&CurPos, Format, ap);
166     va_end (ap);
167
168     SkipUntilSep ();
169 }
170
171
172
173 /*****************************************************************************/
174 /*                                   Code                                    */
175 /*****************************************************************************/
176
177
178
179 void Fatal (const char* Format, ...)
180 /* Print a message about a fatal error and die */
181 {
182     va_list ap;
183     StrBuf S = STATIC_STRBUF_INITIALIZER;
184
185     va_start (ap, Format);
186     SB_VPrintf (&S, Format, ap);
187     SB_Terminate (&S);
188     va_end (ap);
189
190     fprintf (stderr, "Fatal error: %s\n", SB_GetConstBuf (&S));
191
192     SB_Done (&S);
193
194     /* And die... */
195     exit (EXIT_FAILURE);
196 }
197
198
199
200 void Internal (const char* Format, ...)
201 /* Print a message about an internal assembler error and die. */
202 {
203     va_list ap;
204     StrBuf S = STATIC_STRBUF_INITIALIZER;
205
206     va_start (ap, Format);
207     SB_VPrintf (&S, Format, ap);
208     SB_Terminate (&S);
209     va_end (ap);
210
211     fprintf (stderr, "Internal assembler error: %s\n", SB_GetConstBuf (&S));
212
213     SB_Done (&S);
214
215     exit (EXIT_FAILURE);
216 }
217
218
219