File: | xkbscan.c |
Location: | line 457, column 25 |
Description: | Value stored to 'stop' is never read |
1 | /************************************************************ |
2 | Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc. |
3 | |
4 | Permission to use, copy, modify, and distribute this |
5 | software and its documentation for any purpose and without |
6 | fee is hereby granted, provided that the above copyright |
7 | notice appear in all copies and that both that copyright |
8 | notice and this permission notice appear in supporting |
9 | documentation, and that the name of Silicon Graphics not be |
10 | used in advertising or publicity pertaining to distribution |
11 | of the software without specific prior written permission. |
12 | Silicon Graphics makes no representation about the suitability |
13 | of this software for any purpose. It is provided "as is" |
14 | without any express or implied warranty. |
15 | |
16 | SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS |
17 | SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
18 | AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON |
19 | GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
20 | DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, |
21 | DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE |
22 | OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH |
23 | THE USE OR PERFORMANCE OF THIS SOFTWARE. |
24 | |
25 | ********************************************************/ |
26 | |
27 | #include <stdlib.h> |
28 | #include <stdio.h> |
29 | #include <ctype.h> |
30 | #include <X11/Xos.h> |
31 | #include <X11/Xlib.h> |
32 | #include <X11/XKBlib.h> |
33 | |
34 | #include "tokens.h" |
35 | #define DEBUG_VARscanDebug scanDebug |
36 | #include "utils.h" |
37 | #include "parseutils.h" |
38 | |
39 | unsigned int scanDebug; |
40 | |
41 | static FILE *yyin; |
42 | |
43 | static char scanFileBuf[1024] = {0}; |
44 | char *scanFile = scanFileBuf; |
45 | int lineNum = 0; |
46 | |
47 | int scanInt; |
48 | |
49 | char scanBuf[1024]; |
50 | static int scanStrLine = 0; |
51 | |
52 | #define BUFSIZE4096 4096 |
53 | static char readBuf[BUFSIZE4096]; |
54 | static int readBufPos = 0; |
55 | static int readBufLen = 0; |
56 | |
57 | #ifdef DEBUG |
58 | extern int debugFlags; |
59 | |
60 | static char * |
61 | tokText(int tok) |
62 | { |
63 | static char buf[32]; |
64 | |
65 | switch (tok) |
66 | { |
67 | case END_OF_FILE0: |
68 | snprintf(buf, sizeof(buf), "END_OF_FILE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "END_OF_FILE"); |
69 | break; |
70 | case ERROR_TOK255: |
71 | snprintf(buf, sizeof(buf), "ERROR")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ERROR"); |
72 | break; |
73 | |
74 | case XKB_KEYMAP1: |
75 | snprintf(buf, sizeof(buf), "XKB_KEYMAP")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_KEYMAP"); |
76 | break; |
77 | case XKB_KEYCODES2: |
78 | snprintf(buf, sizeof(buf), "XKB_KEYCODES")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_KEYCODES"); |
79 | break; |
80 | case XKB_TYPES3: |
81 | snprintf(buf, sizeof(buf), "XKB_TYPES")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_TYPES"); |
82 | break; |
83 | case XKB_SYMBOLS4: |
84 | snprintf(buf, sizeof(buf), "XKB_SYMBOLS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_SYMBOLS"); |
85 | break; |
86 | case XKB_COMPATMAP5: |
87 | snprintf(buf, sizeof(buf), "XKB_COMPATMAP")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_COMPATMAP"); |
88 | break; |
89 | case XKB_GEOMETRY6: |
90 | snprintf(buf, sizeof(buf), "XKB_GEOMETRY")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_GEOMETRY"); |
91 | break; |
92 | case XKB_SEMANTICS7: |
93 | snprintf(buf, sizeof(buf), "XKB_SEMANTICS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_SEMANTICS"); |
94 | break; |
95 | case XKB_LAYOUT8: |
96 | snprintf(buf, sizeof(buf), "XKB_LAYOUT")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "XKB_LAYOUT"); |
97 | break; |
98 | |
99 | case INCLUDE10: |
100 | snprintf(buf, sizeof(buf), "INCLUDE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "INCLUDE"); |
101 | break; |
102 | case OVERRIDE11: |
103 | snprintf(buf, sizeof(buf), "OVERRIDE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "OVERRIDE"); |
104 | break; |
105 | case AUGMENT12: |
106 | snprintf(buf, sizeof(buf), "AUGMENT")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "AUGMENT"); |
107 | break; |
108 | case REPLACE13: |
109 | snprintf(buf, sizeof(buf), "REPLACE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "REPLACE"); |
110 | break; |
111 | case ALTERNATE14: |
112 | snprintf(buf, sizeof(buf), "ALTERNATE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ALTERNATE"); |
113 | break; |
114 | |
115 | case VIRTUAL_MODS20: |
116 | snprintf(buf, sizeof(buf), "VIRTUAL_MODS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "VIRTUAL_MODS"); |
117 | break; |
118 | case TYPE21: |
119 | snprintf(buf, sizeof(buf), "TYPE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "TYPE"); |
120 | break; |
121 | case INTERPRET22: |
122 | snprintf(buf, sizeof(buf), "INTERPRET")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "INTERPRET"); |
123 | break; |
124 | case ACTION_TOK23: |
125 | snprintf(buf, sizeof(buf), "ACTION")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ACTION"); |
126 | break; |
127 | case KEY24: |
128 | snprintf(buf, sizeof(buf), "KEY")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "KEY"); |
129 | break; |
130 | case ALIAS25: |
131 | snprintf(buf, sizeof(buf), "ALIAS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ALIAS"); |
132 | break; |
133 | case GROUP26: |
134 | snprintf(buf, sizeof(buf), "GROUP")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "GROUP"); |
135 | break; |
136 | case MODIFIER_MAP27: |
137 | snprintf(buf, sizeof(buf), "MODIFIER_MAP")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "MODIFIER_MAP"); |
138 | break; |
139 | case INDICATOR28: |
140 | snprintf(buf, sizeof(buf), "INDICATOR")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "INDICATOR"); |
141 | break; |
142 | case SHAPE29: |
143 | snprintf(buf, sizeof(buf), "SHAPE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "SHAPE"); |
144 | break; |
145 | case KEYS30: |
146 | snprintf(buf, sizeof(buf), "KEYS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "KEYS"); |
147 | break; |
148 | case ROW31: |
149 | snprintf(buf, sizeof(buf), "ROW")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ROW"); |
150 | break; |
151 | case SECTION32: |
152 | snprintf(buf, sizeof(buf), "SECTION")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "SECTION"); |
153 | break; |
154 | case OVERLAY33: |
155 | snprintf(buf, sizeof(buf), "OVERLAY")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "OVERLAY"); |
156 | break; |
157 | case TEXT34: |
158 | snprintf(buf, sizeof(buf), "TEXT")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "TEXT"); |
159 | break; |
160 | case OUTLINE35: |
161 | snprintf(buf, sizeof(buf), "OUTLINE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "OUTLINE"); |
162 | break; |
163 | case SOLID36: |
164 | snprintf(buf, sizeof(buf), "SOLID")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "SOLID"); |
165 | break; |
166 | case LOGO37: |
167 | snprintf(buf, sizeof(buf), "LOGO")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "LOGO"); |
168 | break; |
169 | case VIRTUAL38: |
170 | snprintf(buf, sizeof(buf), "VIRTUAL")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "VIRTUAL"); |
171 | break; |
172 | |
173 | case EQUALS40: |
174 | snprintf(buf, sizeof(buf), "EQUALS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "EQUALS"); |
175 | break; |
176 | case PLUS41: |
177 | snprintf(buf, sizeof(buf), "PLUS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "PLUS"); |
178 | break; |
179 | case MINUS42: |
180 | snprintf(buf, sizeof(buf), "MINUS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "MINUS"); |
181 | break; |
182 | case DIVIDE43: |
183 | snprintf(buf, sizeof(buf), "DIVIDE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "DIVIDE"); |
184 | break; |
185 | case TIMES44: |
186 | snprintf(buf, sizeof(buf), "TIMES")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "TIMES"); |
187 | break; |
188 | case OBRACE45: |
189 | snprintf(buf, sizeof(buf), "OBRACE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "OBRACE"); |
190 | break; |
191 | case CBRACE46: |
192 | snprintf(buf, sizeof(buf), "CBRACE")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "CBRACE"); |
193 | break; |
194 | case OPAREN47: |
195 | snprintf(buf, sizeof(buf), "OPAREN")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "OPAREN"); |
196 | break; |
197 | case CPAREN48: |
198 | snprintf(buf, sizeof(buf), "CPAREN")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "CPAREN"); |
199 | break; |
200 | case OBRACKET49: |
201 | snprintf(buf, sizeof(buf), "OBRACKET")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "OBRACKET"); |
202 | break; |
203 | case CBRACKET50: |
204 | snprintf(buf, sizeof(buf), "CBRACKET")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "CBRACKET"); |
205 | break; |
206 | case DOT51: |
207 | snprintf(buf, sizeof(buf), "DOT")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "DOT"); |
208 | break; |
209 | case COMMA52: |
210 | snprintf(buf, sizeof(buf), "COMMA")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "COMMA"); |
211 | break; |
212 | case SEMI53: |
213 | snprintf(buf, sizeof(buf), "SEMI")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "SEMI"); |
214 | break; |
215 | case EXCLAM54: |
216 | snprintf(buf, sizeof(buf), "EXCLAM")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "EXCLAM"); |
217 | break; |
218 | case INVERT55: |
219 | snprintf(buf, sizeof(buf), "INVERT")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "INVERT"); |
220 | break; |
221 | |
222 | case STRING60: |
223 | snprintf(buf, sizeof(buf), "STRING (%s)", scanBuf)__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "STRING (%s)", scanBuf); |
224 | break; |
225 | case INTEGER61: |
226 | snprintf(buf, sizeof(buf), "INTEGER (0x%x)", scanInt)__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "INTEGER (0x%x)", scanInt); |
227 | break; |
228 | case FLOAT62: |
229 | snprintf(buf, sizeof(buf), "FLOAT (%d.%d)",__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "FLOAT (%d.%d)", scanInt / 10, scanInt % 10) |
230 | scanInt / XkbGeomPtsPerMM, scanInt % XkbGeomPtsPerMM)__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "FLOAT (%d.%d)", scanInt / 10, scanInt % 10); |
231 | break; |
232 | case IDENT63: |
233 | snprintf(buf, sizeof(buf), "IDENT (%s)", scanBuf)__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "IDENT (%s)", scanBuf); |
234 | break; |
235 | case KEYNAME64: |
236 | snprintf(buf, sizeof(buf), "KEYNAME (%s)", scanBuf)__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "KEYNAME (%s)", scanBuf); |
237 | break; |
238 | |
239 | case PARTIAL70: |
240 | snprintf(buf, sizeof(buf), "PARTIAL")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "PARTIAL"); |
241 | break; |
242 | case DEFAULT71: |
243 | snprintf(buf, sizeof(buf), "DEFAULT")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "DEFAULT"); |
244 | break; |
245 | case HIDDEN72: |
246 | snprintf(buf, sizeof(buf), "HIDDEN")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "HIDDEN"); |
247 | break; |
248 | |
249 | case ALPHANUMERIC_KEYS73: |
250 | snprintf(buf, sizeof(buf), "ALPHANUMERIC_KEYS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ALPHANUMERIC_KEYS"); |
251 | break; |
252 | case MODIFIER_KEYS74: |
253 | snprintf(buf, sizeof(buf), "MODIFIER_KEYS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "MODIFIER_KEYS"); |
254 | break; |
255 | case KEYPAD_KEYS75: |
256 | snprintf(buf, sizeof(buf), "KEYPAD_KEYS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "KEYPAD_KEYS"); |
257 | break; |
258 | case FUNCTION_KEYS76: |
259 | snprintf(buf, sizeof(buf), "FUNCTION_KEYS")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "FUNCTION_KEYS"); |
260 | break; |
261 | case ALTERNATE_GROUP77: |
262 | snprintf(buf, sizeof(buf), "ALTERNATE_GROUP")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "ALTERNATE_GROUP"); |
263 | break; |
264 | |
265 | default: |
266 | snprintf(buf, sizeof(buf), "UNKNOWN")__builtin___snprintf_chk (buf, sizeof(buf), 0, __builtin_object_size (buf, 2 > 1 ? 1 : 0), "UNKNOWN"); |
267 | break; |
268 | } |
269 | return buf; |
270 | } |
271 | #endif |
272 | |
273 | void |
274 | scan_set_file(FILE *file) |
275 | { |
276 | readBufLen = 0; |
277 | readBufPos = 0; |
278 | yyin = file; |
279 | } |
280 | |
281 | static int |
282 | scanchar(void) |
283 | { |
284 | if (readBufPos >= readBufLen) { |
285 | readBufLen = fread(readBuf, 1, BUFSIZE4096, yyin); |
286 | readBufPos = 0; |
287 | if (!readBufLen) |
288 | return EOF(-1); |
289 | if (feof(yyin)) |
290 | readBuf[readBufLen] = EOF(-1); |
291 | } |
292 | |
293 | return readBuf[readBufPos++]; |
294 | } |
295 | |
296 | static void |
297 | unscanchar(int c) |
298 | { |
299 | if (readBuf[--readBufPos] != c) { |
300 | fprintf(stderr__stderrp, "UNGETCHAR FAILED! Put back %c, was expecting %c at " |
301 | "position %d, buf is '%s'\n", c, readBuf[readBufPos], |
302 | readBufPos, readBuf); |
303 | _exit(94); |
304 | } |
305 | } |
306 | |
307 | int |
308 | setScanState(char *file, int line) |
309 | { |
310 | if (file != NULL((void*)0)) |
311 | strncpy(scanFile, file, 1024)__builtin___strncpy_chk (scanFile, file, 1024, __builtin_object_size (scanFile, 2 > 1 ? 1 : 0)); |
312 | if (line >= 0) |
313 | lineNum = line; |
314 | return 1; |
315 | } |
316 | |
317 | static int |
318 | yyGetString(void) |
319 | { |
320 | int ch, i; |
321 | |
322 | i = 0; |
323 | while (((ch = scanchar()) != EOF(-1)) && (ch != '"')) |
324 | { |
325 | if (ch == '\\') |
326 | { |
327 | if ((ch = scanchar()) != EOF(-1)) |
328 | { |
329 | if (ch == 'n') |
330 | ch = '\n'; |
331 | else if (ch == 't') |
332 | ch = '\t'; |
333 | else if (ch == 'v') |
334 | ch = '\v'; |
335 | else if (ch == 'b') |
336 | ch = '\b'; |
337 | else if (ch == 'r') |
338 | ch = '\r'; |
339 | else if (ch == 'f') |
340 | ch = '\f'; |
341 | else if (ch == 'e') |
342 | ch = '\033'; |
343 | else if (ch == '0') |
344 | { |
345 | int tmp, stop; |
346 | ch = stop = 0; |
347 | if (((tmp = scanchar()) != EOF(-1)) && (isdigit(tmp)) |
348 | && (tmp != '8') && (tmp != '9')) |
349 | { |
350 | ch = (ch * 8) + (tmp - '0'); |
351 | } |
352 | else |
353 | { |
354 | stop = 1; |
355 | unscanchar(tmp); |
356 | } |
357 | if (!stop) |
358 | { |
359 | if (((tmp = scanchar()) != EOF(-1)) |
360 | && (isdigit(tmp)) && (tmp != '8') && (tmp != '9')) |
361 | { |
362 | ch = (ch * 8) + (tmp - '0'); |
363 | } |
364 | else |
365 | { |
366 | stop = 1; |
367 | unscanchar(tmp); |
368 | } |
369 | } |
370 | if (!stop) |
371 | { |
372 | if (((tmp = scanchar()) != EOF(-1)) |
373 | && (isdigit(tmp)) && (tmp != '8') && (tmp != '9')) |
374 | { |
375 | ch = (ch * 8) + (tmp - '0'); |
376 | } |
377 | else |
378 | { |
379 | stop = 1; |
380 | unscanchar(tmp); |
381 | } |
382 | } |
383 | } |
384 | } |
385 | else |
386 | return ERROR_TOK255; |
387 | } |
388 | if (i < sizeof(scanBuf) - 1) |
389 | scanBuf[i++] = ch; |
390 | } |
391 | scanBuf[i] = '\0'; |
392 | if (ch == '"') |
393 | { |
394 | scanStrLine = lineNum; |
395 | return STRING60; |
396 | } |
397 | return ERROR_TOK255; |
398 | } |
399 | |
400 | static int |
401 | yyGetKeyName(void) |
402 | { |
403 | int ch, i; |
404 | |
405 | i = 0; |
406 | while (((ch = scanchar()) != EOF(-1)) && (ch != '>')) |
407 | { |
408 | if (ch == '\\') |
409 | { |
410 | if ((ch = scanchar()) != EOF(-1)) |
411 | { |
412 | if (ch == 'n') |
413 | ch = '\n'; |
414 | else if (ch == 't') |
415 | ch = '\t'; |
416 | else if (ch == 'v') |
417 | ch = '\v'; |
418 | else if (ch == 'b') |
419 | ch = '\b'; |
420 | else if (ch == 'r') |
421 | ch = '\r'; |
422 | else if (ch == 'f') |
423 | ch = '\f'; |
424 | else if (ch == 'e') |
425 | ch = '\033'; |
426 | else if (ch == '0') |
427 | { |
428 | int tmp, stop; |
429 | ch = stop = 0; |
430 | if (((tmp = scanchar()) != EOF(-1)) && (isdigit(tmp)) |
431 | && (tmp != '8') && (tmp != '9')) |
432 | { |
433 | ch = (ch * 8) + (tmp - '0'); |
434 | } |
435 | else |
436 | { |
437 | stop = 1; |
438 | unscanchar(tmp); |
439 | } |
440 | if ((!stop) && ((tmp = scanchar()) != EOF(-1)) |
441 | && (isdigit(tmp)) && (tmp != '8') && (tmp != '9')) |
442 | { |
443 | ch = (ch * 8) + (tmp - '0'); |
444 | } |
445 | else |
446 | { |
447 | stop = 1; |
448 | unscanchar(tmp); |
449 | } |
450 | if ((!stop) && ((tmp = scanchar()) != EOF(-1)) |
451 | && (isdigit(tmp)) && (tmp != '8') && (tmp != '9')) |
452 | { |
453 | ch = (ch * 8) + (tmp - '0'); |
454 | } |
455 | else |
456 | { |
457 | stop = 1; |
Value stored to 'stop' is never read | |
458 | unscanchar(tmp); |
459 | } |
460 | } |
461 | } |
462 | else |
463 | return ERROR_TOK255; |
464 | } |
465 | if (i < sizeof(scanBuf) - 1) |
466 | scanBuf[i++] = ch; |
467 | } |
468 | scanBuf[i] = '\0'; |
469 | if ((ch == '>') && (i < 5)) |
470 | { |
471 | scanStrLine = lineNum; |
472 | return KEYNAME64; |
473 | } |
474 | return ERROR_TOK255; |
475 | } |
476 | |
477 | static struct _Keyword |
478 | { |
479 | const char *keyword; |
480 | int token; |
481 | } keywords[] = |
482 | { |
483 | { |
484 | "xkb_keymap", XKB_KEYMAP1}, |
485 | { |
486 | "xkb_keycodes", XKB_KEYCODES2}, |
487 | { |
488 | "xkb_types", XKB_TYPES3}, |
489 | { |
490 | "xkb_symbols", XKB_SYMBOLS4}, |
491 | { |
492 | "xkb_compat", XKB_COMPATMAP5}, |
493 | { |
494 | "xkb_compat_map", XKB_COMPATMAP5}, |
495 | { |
496 | "xkb_compatibility", XKB_COMPATMAP5}, |
497 | { |
498 | "xkb_compatibility_map", XKB_COMPATMAP5}, |
499 | { |
500 | "xkb_geometry", XKB_GEOMETRY6}, |
501 | { |
502 | "xkb_semantics", XKB_SEMANTICS7}, |
503 | { |
504 | "xkb_layout", XKB_LAYOUT8}, |
505 | { |
506 | "include", INCLUDE10}, |
507 | { |
508 | "override", OVERRIDE11}, |
509 | { |
510 | "augment", AUGMENT12}, |
511 | { |
512 | "replace", REPLACE13}, |
513 | { |
514 | "alternate", ALTERNATE14}, |
515 | { |
516 | "partial", PARTIAL70}, |
517 | { |
518 | "default", DEFAULT71}, |
519 | { |
520 | "hidden", HIDDEN72}, |
521 | { |
522 | "virtual_modifiers", VIRTUAL_MODS20}, |
523 | { |
524 | "type", TYPE21}, |
525 | { |
526 | "interpret", INTERPRET22}, |
527 | { |
528 | "action", ACTION_TOK23}, |
529 | { |
530 | "key", KEY24}, |
531 | { |
532 | "alias", ALIAS25}, |
533 | { |
534 | "group", GROUP26}, |
535 | { |
536 | "modmap", MODIFIER_MAP27}, |
537 | { |
538 | "mod_map", MODIFIER_MAP27}, |
539 | { |
540 | "modifier_map", MODIFIER_MAP27}, |
541 | { |
542 | "indicator", INDICATOR28}, |
543 | { |
544 | "shape", SHAPE29}, |
545 | { |
546 | "row", ROW31}, |
547 | { |
548 | "keys", KEYS30}, |
549 | { |
550 | "section", SECTION32}, |
551 | { |
552 | "overlay", OVERLAY33}, |
553 | { |
554 | "text", TEXT34}, |
555 | { |
556 | "outline", OUTLINE35}, |
557 | { |
558 | "solid", SOLID36}, |
559 | { |
560 | "logo", LOGO37}, |
561 | { |
562 | "virtual", VIRTUAL38}, |
563 | { |
564 | "alphanumeric_keys", ALPHANUMERIC_KEYS73}, |
565 | { |
566 | "modifier_keys", MODIFIER_KEYS74}, |
567 | { |
568 | "keypad_keys", KEYPAD_KEYS75}, |
569 | { |
570 | "function_keys", FUNCTION_KEYS76}, |
571 | { |
572 | "alternate_group", ALTERNATE_GROUP77} |
573 | }; |
574 | static int numKeywords = sizeof(keywords) / sizeof(struct _Keyword); |
575 | |
576 | static int |
577 | yyGetIdent(int first) |
578 | { |
579 | int ch, i, j, found; |
580 | int rtrn = IDENT63; |
581 | |
582 | scanBuf[0] = first; |
583 | j = 1; |
584 | while (((ch = scanchar()) != EOF(-1)) && (isalnum(ch) || (ch == '_'))) |
585 | { |
586 | if (j < sizeof(scanBuf) - 1) |
587 | scanBuf[j++] = ch; |
588 | } |
589 | scanBuf[j++] = '\0'; |
590 | found = 0; |
591 | |
592 | for (i = 0; (!found) && (i < numKeywords); i++) |
593 | { |
594 | if (uStrCaseCmp(scanBuf, keywords[i].keyword)(strcasecmp(scanBuf,keywords[i].keyword)) == 0) |
595 | { |
596 | rtrn = keywords[i].token; |
597 | found = 1; |
598 | } |
599 | } |
600 | if (!found) |
601 | { |
602 | scanStrLine = lineNum; |
603 | rtrn = IDENT63; |
604 | } |
605 | |
606 | if ((ch != EOF(-1)) && (!isspace(ch))) |
607 | unscanchar(ch); |
608 | else if (ch == '\n') |
609 | lineNum++; |
610 | |
611 | return rtrn; |
612 | } |
613 | |
614 | static int |
615 | yyGetNumber(int ch) |
616 | { |
617 | const int nMaxBuffSize = 1024; |
618 | int isFloat = 0; |
619 | char buf[nMaxBuffSize]; |
620 | int nInBuf = 0; |
621 | |
622 | buf[0] = ch; |
623 | nInBuf = 1; |
624 | while (((ch = scanchar()) != EOF(-1)) |
625 | && (isxdigit(ch) || ((nInBuf == 1) && (ch == 'x'))) |
626 | && nInBuf < (nMaxBuffSize - 1)) |
627 | { |
628 | buf[nInBuf++] = ch; |
629 | } |
630 | if ((ch == '.') && (nInBuf < (nMaxBuffSize - 1))) |
631 | { |
632 | isFloat = 1; |
633 | buf[nInBuf++] = ch; |
634 | while (((ch = scanchar()) != EOF(-1)) && (isxdigit(ch)) |
635 | && nInBuf < (nMaxBuffSize - 1)) |
636 | { |
637 | buf[nInBuf++] = ch; |
638 | } |
639 | } |
640 | buf[nInBuf++] = '\0'; |
641 | if ((ch != EOF(-1)) && (!isspace(ch))) |
642 | unscanchar(ch); |
643 | |
644 | if (isFloat) |
645 | { |
646 | float tmp; |
647 | if (sscanf(buf, "%g", &tmp) == 1) |
648 | { |
649 | scanInt = tmp * XkbGeomPtsPerMM10; |
650 | return FLOAT62; |
651 | } |
652 | } |
653 | else if (sscanf(buf, "%i", &scanInt) == 1) |
654 | return INTEGER61; |
655 | fprintf(stderr__stderrp, "Malformed number %s\n", buf); |
656 | return ERROR_TOK255; |
657 | } |
658 | |
659 | int |
660 | yylex(void) |
661 | { |
662 | int ch; |
663 | int rtrn; |
664 | |
665 | do |
666 | { |
667 | ch = scanchar(); |
668 | if (ch == '\n') |
669 | { |
670 | lineNum++; |
671 | } |
672 | else if (ch == '#') |
673 | { /* handle shell style '#' comments */ |
674 | do |
675 | { |
676 | ch = scanchar(); |
677 | } |
678 | while ((ch != '\n') && (ch != EOF(-1))); |
679 | lineNum++; |
680 | } |
681 | else if (ch == '/') |
682 | { /* handle C++ style double-/ comments */ |
683 | int newch = scanchar(); |
684 | if (newch == '/') |
685 | { |
686 | do |
687 | { |
688 | ch = scanchar(); |
689 | } |
690 | while ((ch != '\n') && (ch != EOF(-1))); |
691 | lineNum++; |
692 | } |
693 | else if (newch != EOF(-1)) |
694 | { |
695 | unscanchar(newch); |
696 | } |
697 | } |
698 | } |
699 | while ((ch != EOF(-1)) && (isspace(ch))); |
700 | if (ch == '=') |
701 | rtrn = EQUALS40; |
702 | else if (ch == '+') |
703 | rtrn = PLUS41; |
704 | else if (ch == '-') |
705 | rtrn = MINUS42; |
706 | else if (ch == '/') |
707 | rtrn = DIVIDE43; |
708 | else if (ch == '*') |
709 | rtrn = TIMES44; |
710 | else if (ch == '{') |
711 | rtrn = OBRACE45; |
712 | else if (ch == '}') |
713 | rtrn = CBRACE46; |
714 | else if (ch == '(') |
715 | rtrn = OPAREN47; |
716 | else if (ch == ')') |
717 | rtrn = CPAREN48; |
718 | else if (ch == '[') |
719 | rtrn = OBRACKET49; |
720 | else if (ch == ']') |
721 | rtrn = CBRACKET50; |
722 | else if (ch == '.') |
723 | rtrn = DOT51; |
724 | else if (ch == ',') |
725 | rtrn = COMMA52; |
726 | else if (ch == ';') |
727 | rtrn = SEMI53; |
728 | else if (ch == '!') |
729 | rtrn = EXCLAM54; |
730 | else if (ch == '~') |
731 | rtrn = INVERT55; |
732 | else if (ch == '"') |
733 | rtrn = yyGetString(); |
734 | else if (ch == '<') |
735 | rtrn = yyGetKeyName(); |
736 | else if (isalpha(ch) || (ch == '_')) |
737 | rtrn = yyGetIdent(ch); |
738 | else if (isdigit(ch)) |
739 | rtrn = yyGetNumber(ch); |
740 | else if (ch == EOF(-1)) |
741 | rtrn = END_OF_FILE0; |
742 | else |
743 | { |
744 | #ifdef DEBUG |
745 | if (debugFlags) |
746 | fprintf(stderr__stderrp, |
747 | "Unexpected character %c (%d) in input stream\n", ch, ch); |
748 | #endif |
749 | rtrn = ERROR_TOK255; |
750 | } |
751 | #ifdef DEBUG |
752 | if (debugFlags & 0x2) |
753 | fprintf(stderr__stderrp, "scan: %s\n", tokText(rtrn)); |
754 | #endif |
755 | return rtrn; |
756 | } |