Git init
[framework/uifw/xorg/util/x11-xkb-utils.git] / xkbprint / utils.c
1
2   /*\
3    * $Xorg: utils.c,v 1.5 2000/08/17 19:54:50 cpqbld Exp $
4    *
5    *                          COPYRIGHT 1990
6    *                    DIGITAL EQUIPMENT CORPORATION
7    *                       MAYNARD, MASSACHUSETTS
8    *                        ALL RIGHTS RESERVED.
9    *
10    * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
11    * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
12    * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE 
13    * FOR ANY PURPOSE.  IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED 
14    * WARRANTY.
15    *
16    * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT
17    * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN
18    * ADDITION TO THAT SET FORTH ABOVE.
19    *
20    * Permission to use, copy, modify, and distribute this software and its
21    * documentation for any purpose and without fee is hereby granted, provided
22    * that the above copyright notice appear in all copies and that both that
23    * copyright notice and this permission notice appear in supporting
24    * documentation, and that the name of Digital Equipment Corporation not be
25    * used in advertising or publicity pertaining to distribution of the 
26    * software without specific, written prior permission.
27   \*/
28 /* $XFree86: xc/programs/xkbprint/utils.c,v 3.4 2001/01/17 23:46:11 dawes Exp $ */
29
30 #include        "utils.h"
31 #include        <ctype.h>
32 #include        <stdlib.h>
33
34 unsigned int debugFlags;
35
36
37 /***====================================================================***/
38
39 Opaque
40 uAlloc(unsigned size)
41 {
42     return((Opaque)malloc(size));
43 }
44
45 /***====================================================================***/
46
47 Opaque
48 uCalloc(unsigned n, unsigned size)
49 {
50     return((Opaque)calloc(n,size));
51 }
52
53 /***====================================================================***/
54
55 Opaque
56 uRealloc(Opaque old, unsigned newSize)
57 {
58     if (old==NULL)
59          return((Opaque)malloc(newSize));
60     else return((Opaque)realloc((char *)old,newSize));
61 }
62
63 /***====================================================================***/
64
65 Opaque
66 uRecalloc(Opaque old, unsigned nOld, unsigned nNew, unsigned itemSize)
67 {
68 char *rtrn;
69
70     if (old==NULL)
71          rtrn= (char *)calloc(nNew,itemSize);
72     else {
73         rtrn= (char *)realloc((char *)old,nNew*itemSize);
74         if ((rtrn)&&(nNew>nOld)) {
75             bzero(&rtrn[nOld*itemSize],(nNew-nOld)*itemSize);
76         }
77     }
78     return (Opaque)rtrn;
79 }
80
81 /***====================================================================***/
82
83 void
84 uFree(Opaque ptr)
85 {
86     if (ptr!=(Opaque)NULL)
87         free((char *)ptr);
88     return;
89 }
90
91 /***====================================================================***/
92 /***                  FUNCTION ENTRY TRACKING                           ***/
93 /***====================================================================***/
94
95 static  FILE    *entryFile=     NULL;
96 static  int      uEntryLevel;
97
98 Boolean
99 uSetEntryFile(char *name)
100 {
101     if ((entryFile!=NULL)&&(entryFile!=stderr)) {
102         fprintf(entryFile,"switching to %s\n",name?name:"stderr");
103         fclose(entryFile);
104     }
105     if (name!=NullString)       entryFile=      fopen(name,"w");
106     else                        entryFile=      stderr;
107     if (entryFile==NULL) {
108         entryFile=      stderr;
109         return(False);
110     }
111     return(True);
112 }
113
114 void
115 uEntry(int l, char *s,...)
116 {
117 int     i;
118 va_list ap;
119
120     va_start(ap, s);
121     for (i=0;i<uEntryLevel;i++) {
122         putc(' ',entryFile);
123     }
124     vfprintf(entryFile,s,ap);
125     uEntryLevel+= l;
126     va_end(ap);
127     return;
128 }
129
130 void
131 uExit(int l, char *rtVal)
132 {
133 int     i;
134
135     uEntryLevel-= l;
136     if (uEntryLevel<0)  uEntryLevel=    0;
137     for (i=0;i<uEntryLevel;i++) {
138         putc(' ',entryFile);
139     }
140     fprintf(entryFile,"---> 0x%p\n",rtVal);
141     return;
142 }
143
144 /***====================================================================***/
145 /***                    PRINT FUNCTIONS                                 ***/
146 /***====================================================================***/
147
148         FILE    *uDebugFile=            NULL;
149         int      uDebugIndentLevel=     0;
150         int      uDebugIndentSize=      4;
151
152 Boolean
153 uSetDebugFile(char *name)
154 {
155     if ((uDebugFile!=NULL)&&(uDebugFile!=stderr)) {
156         fprintf(uDebugFile,"switching to %s\n",name?name:"stderr");
157         fclose(uDebugFile);
158     }
159     if (name!=NullString)       uDebugFile=     fopen(name,"w");
160     else                        uDebugFile=     stderr;
161     if (uDebugFile==NULL) {
162         uDebugFile=     stderr;
163         return(False);
164     }
165     return(True);
166 }
167
168 void
169 uDebug(char *s,...)
170 {
171 int     i;
172 va_list ap;
173
174     va_start(ap, s);
175     for (i=(uDebugIndentLevel*uDebugIndentSize);i>0;i--) {
176         putc(' ',uDebugFile);
177     }
178     vfprintf(uDebugFile,s,ap);
179     fflush(uDebugFile);
180     va_end(ap);
181     return;
182 }
183
184 void
185 uDebugNOI(char *s,...)
186 {
187 va_list ap;
188
189     va_start(ap, s);
190     vfprintf(uDebugFile,s,ap);
191     fflush(uDebugFile);
192     va_end(ap);
193     return;
194 }
195
196 /***====================================================================***/
197
198 static  FILE    *errorFile=     NULL;
199
200 Boolean
201 uSetErrorFile(char *name)
202 {
203     if ((errorFile!=NULL)&&(errorFile!=stderr)) {
204         fprintf(errorFile,"switching to %s\n",name?name:"stderr");
205         fclose(errorFile);
206     }
207     if (name!=NullString)       errorFile=      fopen(name,"w");
208     else                        errorFile=      stderr;
209     if (errorFile==NULL) {
210         errorFile=      stderr;
211         return(False);
212     }
213     return(True);
214 }
215
216 void
217 uInformation(char *s,...)
218 {
219     va_list ap;
220
221     va_start(ap, s);
222     vfprintf(errorFile,s,ap);
223     fflush(errorFile);
224     va_end(ap);
225     return;
226 }
227
228 /***====================================================================***/
229
230 void
231 uAction(char *s,...)
232 {
233     va_list ap;
234
235     va_start(ap, s);
236     fprintf(errorFile,"                  ");
237     vfprintf(errorFile,s,ap);
238     fflush(errorFile);
239     va_end(ap);
240     return;
241 }
242
243 /***====================================================================***/
244
245 void
246 uWarning(char *s,...)
247 {
248     va_list ap;
249
250     va_start(ap, s);
251     fprintf(errorFile,"Warning:          ");
252     vfprintf(errorFile,s,ap);
253     fflush(errorFile);
254     va_end(ap);
255     return;
256 }
257
258 /***====================================================================***/
259
260 void
261 uError(char *s,...)
262 {
263     va_list ap;
264
265     va_start(ap, s);
266     fprintf(errorFile,"Error:            ");
267     vfprintf(errorFile,s,ap);
268     fflush(errorFile);
269     va_end(ap);
270     return;
271 }
272
273 /***====================================================================***/
274
275 void
276 uFatalError(char *s,...)
277 {
278     va_list ap;
279
280     va_start(ap, s);
281     fprintf(errorFile,"Fatal Error:      ");
282     vfprintf(errorFile,s,ap);
283     fprintf(errorFile,"                  Exiting\n");
284     fflush(errorFile);
285     va_end(ap);
286     exit(1);
287     /* NOTREACHED */
288 }
289
290 /***====================================================================***/
291
292 void
293 uInternalError(char *s,...)
294 {
295     va_list ap;
296
297     va_start(ap, s);
298     fprintf(errorFile,"Internal error:   ");
299     vfprintf(errorFile,s,ap);
300     fflush(errorFile);
301     va_end(ap);
302     return;
303 }
304
305 /***====================================================================***/
306
307 #ifndef HAVE_STRDUP
308 char *
309 uStringDup(char *str)
310 {
311 char *rtrn;
312
313     if (str==NULL)
314         return NULL;
315     rtrn= (char *)uAlloc(strlen(str)+1);
316     strcpy(rtrn,str);
317     return rtrn;
318 }
319 #endif
320
321 #ifndef HAVE_STRCASECMP
322 int
323 uStrCaseCmp(char *str1, char *str2)
324 {
325     char buf1[512],buf2[512];
326     char c, *s;
327     register int n;
328
329     for (n=0, s = buf1; (c = *str1++); n++) {
330         if (isupper(c))
331             c = tolower(c);
332         if (n>510)
333             break;
334         *s++ = c;
335     }
336     *s = '\0';
337     for (n=0, s = buf2; (c = *str2++); n++) {
338         if (isupper(c))
339             c = tolower(c);
340         if (n>510)
341             break;
342         *s++ = c;
343     }
344     *s = '\0';
345     return (strcmp(buf1, buf2));
346 }
347
348 int
349 uStrCasePrefix(char *prefix, char *str)
350 {
351     char c1;
352     char c2;
353     while (((c1=*prefix)!='\0')&&((c2=*str)!='\0')) {
354         if (isupper(c1))        c1= tolower(c1);
355         if (isupper(c2))        c2= tolower(c2);
356         if (c1!=c2)
357             return 0;
358         prefix++; str++;
359     }
360     if (c1!='\0')
361         return 0;
362     return 1;
363 }
364
365 #endif