xkbevd should not try to build into a pure wayland platform.
[platform/upstream/xkbevd.git] / utils.c
1
2   /*\
3    *
4    *                          COPYRIGHT 1990
5    *                    DIGITAL EQUIPMENT CORPORATION
6    *                       MAYNARD, MASSACHUSETTS
7    *                        ALL RIGHTS RESERVED.
8    *
9    * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
10    * SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
11    * DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE
12    * FOR ANY PURPOSE.  IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED
13    * WARRANTY.
14    *
15    * IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT
16    * RIGHTS, APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN
17    * ADDITION TO THAT SET FORTH ABOVE.
18    *
19    * Permission to use, copy, modify, and distribute this software and its
20    * documentation for any purpose and without fee is hereby granted, provided
21    * that the above copyright notice appear in all copies and that both that
22    * copyright notice and this permission notice appear in supporting
23    * documentation, and that the name of Digital Equipment Corporation not be
24    * used in advertising or publicity pertaining to distribution of the
25    * software without specific, written prior permission.
26   \*/
27
28 #define DEBUG_VAR_LOCAL
29 #include        "utils.h"
30 #include        <ctype.h>
31 #include        <stdlib.h>
32
33 unsigned int DEBUG_VAR;
34
35 /***====================================================================***/
36 /***                  FUNCTION ENTRY TRACKING                           ***/
37 /***====================================================================***/
38
39 static  FILE    *entryFile=     NULL;
40 static  int      uEntryLevel;
41
42 Boolean
43 uSetEntryFile(const char *name)
44 {
45     if ((entryFile!=NULL)&&(entryFile!=stderr)) {
46         fprintf(entryFile,"switching to %s\n",name?name:"stderr");
47         fclose(entryFile);
48     }
49     if (name!=NullString)       entryFile=      fopen(name,"w");
50     else                        entryFile=      stderr;
51     if (entryFile==NULL) {
52         entryFile=      stderr;
53         return(False);
54     }
55     return(True);
56 }
57
58 void
59 uEntry(int l, const char *s,...)
60 {
61 int     i;
62 va_list ap;
63
64     va_start(ap, s);
65     for (i=0;i<uEntryLevel;i++) {
66         putc(' ',entryFile);
67     }
68     vfprintf(entryFile,s,ap);
69     uEntryLevel+= l;
70     va_end(ap);
71     return;
72 }
73
74 void
75 uExit(int l, const char *rtVal)
76 {
77 int     i;
78
79     uEntryLevel-= l;
80     if (uEntryLevel<0)  uEntryLevel=    0;
81     for (i=0;i<uEntryLevel;i++) {
82         putc(' ',entryFile);
83     }
84     fprintf(entryFile,"---> 0x%p\n",rtVal);
85     return;
86 }
87
88 /***====================================================================***/
89 /***                    PRINT FUNCTIONS                                 ***/
90 /***====================================================================***/
91
92         FILE    *uDebugFile=            NULL;
93         int      uDebugIndentLevel=     0;
94         int      uDebugIndentSize=      4;
95
96 Boolean
97 uSetDebugFile(const char *name)
98 {
99     if ((uDebugFile!=NULL)&&(uDebugFile!=stderr)) {
100         fprintf(uDebugFile,"switching to %s\n",name?name:"stderr");
101         fclose(uDebugFile);
102     }
103     if (name!=NullString)       uDebugFile=     fopen(name,"w");
104     else                        uDebugFile=     stderr;
105     if (uDebugFile==NULL) {
106         uDebugFile=     stderr;
107         return(False);
108     }
109     return(True);
110 }
111
112 void
113 uDebug(const char *s,...)
114 {
115 int     i;
116 va_list ap;
117
118     va_start(ap, s);
119     for (i=(uDebugIndentLevel*uDebugIndentSize);i>0;i--) {
120         putc(' ',uDebugFile);
121     }
122     vfprintf(uDebugFile,s,ap);
123     fflush(uDebugFile);
124     va_end(ap);
125     return;
126 }
127
128 void
129 uDebugNOI(const char *s,...)
130 {
131 va_list ap;
132
133     va_start(ap, s);
134     vfprintf(uDebugFile,s,ap);
135     fflush(uDebugFile);
136     va_end(ap);
137     return;
138 }
139
140 /***====================================================================***/
141
142 static  FILE    *errorFile=     NULL;
143
144 Boolean
145 uSetErrorFile(const char *name)
146 {
147     if ((errorFile!=NULL)&&(errorFile!=stderr)) {
148         fprintf(errorFile,"switching to %s\n",name?name:"stderr");
149         fclose(errorFile);
150     }
151     if (name!=NullString)       errorFile=      fopen(name,"w");
152     else                        errorFile=      stderr;
153     if (errorFile==NULL) {
154         errorFile=      stderr;
155         return(False);
156     }
157     return(True);
158 }
159
160 void
161 uInformation(const char *s,...)
162 {
163     va_list ap;
164
165     va_start(ap, s);
166     vfprintf(errorFile,s,ap);
167     fflush(errorFile);
168     va_end(ap);
169     return;
170 }
171
172 /***====================================================================***/
173
174 void
175 uAction(const char *s,...)
176 {
177     va_list ap;
178
179     va_start(ap, s);
180     fprintf(errorFile,"                  ");
181     vfprintf(errorFile,s,ap);
182     fflush(errorFile);
183     va_end(ap);
184     return;
185 }
186
187 /***====================================================================***/
188
189 void
190 uWarning(const char *s,...)
191 {
192     va_list ap;
193
194     va_start(ap, s);
195     fprintf(errorFile,"Warning:          ");
196     vfprintf(errorFile,s,ap);
197     fflush(errorFile);
198     va_end(ap);
199     return;
200 }
201
202 /***====================================================================***/
203
204 void
205 uError(const char *s,...)
206 {
207     va_list ap;
208
209     va_start(ap, s);
210     fprintf(errorFile,"Error:            ");
211     vfprintf(errorFile,s,ap);
212     fflush(errorFile);
213     va_end(ap);
214     return;
215 }
216
217 /***====================================================================***/
218
219 void
220 uInternalError(const char *s,...)
221 {
222     va_list ap;
223
224     va_start(ap, s);
225     fprintf(errorFile,"Internal error:   ");
226     vfprintf(errorFile,s,ap);
227     fflush(errorFile);
228     va_end(ap);
229     return;
230 }
231
232 /***====================================================================***/
233
234 #ifndef HAVE_STRCASECMP
235 int
236 uStrCaseCmp(const char *str1, const char *str2)
237 {
238     char buf1[512],buf2[512];
239     char c, *s;
240     register int n;
241
242     for (n=0, s = buf1; (c = *str1++); n++) {
243         if (isupper(c))
244             c = tolower(c);
245         if (n>510)
246             break;
247         *s++ = c;
248     }
249     *s = '\0';
250     for (n=0, s = buf2; (c = *str2++); n++) {
251         if (isupper(c))
252             c = tolower(c);
253         if (n>510)
254             break;
255         *s++ = c;
256     }
257     *s = '\0';
258     return (strcmp(buf1, buf2));
259 }
260
261 int
262 uStrCasePrefix(const char *prefix, const char *str)
263 {
264     char c1;
265     char c2;
266     while (((c1=*prefix)!='\0')&&((c2=*str)!='\0')) {
267         if (isupper(c1))        c1= tolower(c1);
268         if (isupper(c2))        c2= tolower(c2);
269         if (c1!=c2)
270             return 0;
271         prefix++; str++;
272     }
273     if (c1!='\0')
274         return 0;
275     return 1;
276 }
277
278 #endif