4 * Copyright 1998 Bertho A. Stultiens
21 #define WANT_NEAR_INDICATION
24 #ifdef WANT_NEAR_INDICATION
25 void make_print(char *str
)
36 int yyerror(const char *s
, ...)
40 fprintf(stderr
, "Error %s: %d, %d: ", input_name
? input_name
: "stdin", line_number
, char_number
);
41 vfprintf(stderr
, s
, ap
);
42 #ifdef WANT_NEAR_INDICATION
44 char *cpy
= xstrdup(yytext
);
46 fprintf(stderr
, " near '%s'\n", cpy
);
50 fprintf(stderr
, "\n");
57 int yywarning(const char *s
, ...)
61 fprintf(stderr
, "Warning %s: %d, %d: ", input_name
? input_name
: "stdin", line_number
, char_number
);
62 vfprintf(stderr
, s
, ap
);
63 #ifdef WANT_NEAR_INDICATION
65 char *cpy
= xstrdup(yytext
);
67 fprintf(stderr
, " near '%s'\n", cpy
);
71 fprintf(stderr
, "\n");
77 void internal_error(const char *file
, int line
, const char *s
, ...)
81 fprintf(stderr
, "Internal error (please report) %s %d: ", file
, line
);
82 vfprintf(stderr
, s
, ap
);
83 fprintf(stderr
, "\n");
88 void error(const char *s
, ...)
92 fprintf(stderr
, "Error: ");
93 vfprintf(stderr
, s
, ap
);
94 fprintf(stderr
, "\n");
99 void warning(const char *s
, ...)
103 fprintf(stderr
, "Warning: ");
104 vfprintf(stderr
, s
, ap
);
105 fprintf(stderr
, "\n");
109 void chat(const char *s
, ...)
111 if(debuglevel
& DEBUGLEVEL_CHAT
)
115 fprintf(stderr
, "FYI: ");
116 vfprintf(stderr
, s
, ap
);
117 fprintf(stderr
, "\n");
122 char *dup_basename(const char *name
, const char *ext
)
125 int extlen
= strlen(ext
);
132 slash
= strrchr(name
, '/');
136 namelen
= strlen(name
);
138 /* +4 for later extension and +1 for '\0' */
139 base
= (char *)xmalloc(namelen
+4 +1);
141 if(!strcasecmp(name
+ namelen
-extlen
, ext
))
143 base
[namelen
- extlen
] = '\0';
148 void *xmalloc(size_t size
)
153 assert(size
< 102400);
157 error("Virtual memory exhausted.\n");
159 memset(res
, 0, size
);
164 void *xrealloc(void *p
, size_t size
)
169 assert(size
< 102400);
170 res
= realloc(p
, size
);
173 error("Virtual memory exhausted.\n");
178 char *xstrdup(const char *str
)
180 char *s
= (char *)xmalloc(strlen(str
)+1);
181 return strcpy(s
, str
);
184 int string_compare(const string_t
*s1
, const string_t
*s2
)
186 if(s1
->type
== str_char
&& s2
->type
== str_char
)
188 return strcasecmp(s1
->str
.cstr
, s2
->str
.cstr
);
192 internal_error(__FILE__
, __LINE__
, "Cannot yet compare unicode strings");
197 int wstrlen(const short *s
)
205 short *wstrcpy(short *dst
, const short *src
)
213 int wstricmp(const short *s1
, const short *s2
)
215 char *cs1
= dupwstr2cstr(s1
);
216 char *cs2
= dupwstr2cstr(s2
);
217 int retval
= strcasecmp(cs1
, cs2
);
220 warning("Comparing unicode strings without case -> converting to ascii");
224 short *dupcstr2wstr(const char *str
)
226 int len
= strlen(str
) + 1;
227 short *ws
= (short *)xmalloc(len
*2);
231 /* FIXME: codepage translation */
233 *wptr
++ = (short)(*str
++ & 0xff);
238 char *dupwstr2cstr(const short *str
)
240 int len
= wstrlen(str
) + 1;
241 char *cs
= (char *)xmalloc(len
);
245 /* FIXME: codepage translation */
247 *cptr
++ = (char)*str
++;