Annotation of dgamelaunch-openbsd/config.l, Revision 1.1.1.1
1.1 rubenllo 1: /* Lexical analyzer for dgamelaunch's configuration file. */
2:
3: %{
4:
5: #include <stdio.h>
6: #include <string.h>
7: #include <errno.h>
8:
9: #include "y.tab.h"
10: #include "dgamelaunch.h"
11:
12: unsigned int line = 1, col = 0;
13:
14: #define YY_USER_ACTION col += yyleng;
15:
16: %}
17:
18: NEGNUMBER -[0-9]+
19: NUMBER [0-9]+
20: VALUE \"[^"]*\"
21: MALSTRING \"[^\"\n]*\n
22: COMMENT ^[\t ]*#.*
23: WHITE [\t ]*
24:
25: %%
26:
27: {NEGNUMBER} {
28: fprintf(stderr,"%s:%d: negative value not accepted! Fix it now!\n",
29: config, line);
30: graceful_exit(13);
31: }
32:
33: {NUMBER} {
34: yylval.i = strtoul(yytext, NULL, 10);
35: return TYPE_NUMBER;
36: }
37:
38: {VALUE} {
39: yytext[yyleng - 1] = '\0'; /* Kill the trailing quote */
40: yylval.s = strdup(yytext + 1); /* kill leading quote */
41: return TYPE_VALUE;
42: }
43:
44: {MALSTRING} {
45: yytext[yyleng - 1] = '\0'; /* remove trailing newline */
46: fprintf(stderr, "%s:%d:%d: unterminated string constant: %s\n", config, line, (int)(col - yyleng + 1), yytext);
47: return TYPE_MALSTRING;
48: }
49:
50: {WHITE} { }
51: {COMMENT} { }
52:
53: "=" { return '='; }
54: "," { return ','; }
55: "[" { return '['; }
56: "]" { return ']'; }
57: "{" { return '{'; }
58: "}" { return '}'; }
59: "(" { return '('; }
60: ")" { return ')'; }
61: "shed_user" { return TYPE_SUSER; }
62: "shed_group" { return TYPE_SGROUP; }
63: "shed_uid" { return TYPE_SUID; }
64: "shed_gid" { return TYPE_SGID; }
65: "maxusers" { return TYPE_MAX; }
66: "maxnicklen" { return TYPE_MAXNICKLEN; }
67: "allow_new_nicks" { return TYPE_ALLOW_REGISTRATION; }
68: "menu_max_idle_time" { return TYPE_MENU_MAX_IDLE_TIME; }
69:
70:
71: menu { return TYPE_DEFINE_MENU; }
72: bannerfile { return TYPE_BANNER_FILE; }
73: cursor { return TYPE_CURSOR; }
74: "chroot_path" { return TYPE_PATH_CHROOT; }
75: "game_name" { return TYPE_NAME_GAME; }
76: "short_name" { return TYPE_GAME_SHORT_NAME; }
77: "game_id" { return TYPE_GAME_ID; }
78: "game_path" { return TYPE_PATH_GAME; }
79: "dglroot" { return TYPE_PATH_DGLDIR; }
80: "spooldir" { return TYPE_PATH_SPOOL; }
81: "banner" { return TYPE_PATH_BANNER; }
82: "rc_template" { return TYPE_PATH_CANNED; }
83: "passwd" { return TYPE_PATH_PASSWD; }
84: "lockfile" { return TYPE_PATH_LOCKFILE; }
85: "inprogressdir" { return TYPE_PATH_INPROGRESS; }
86: "game_args" { return TYPE_GAME_ARGS; }
87: extra_info_file { return TYPE_EXTRA_INFO_FILE; }
88: "max_idle_time" { return TYPE_MAX_IDLE_TIME; }
89: "rc_fmt" { return TYPE_RC_FMT; }
90: "ttyrecdir" { return TYPE_PATH_TTYREC; }
91: bannervars { return TYPE_BANNERVARS; }
92: timeformat { return TYPE_TIMEFORMAT; }
93: sortmode { return TYPE_WATCH_SORTMODE; }
94: watch_columns { return TYPE_WATCH_COLUMNS; }
95: commands { return TYPE_CMDQUEUE; }
96: postcommands { return TYPE_POSTCMDQUEUE; }
97: encoding { return TYPE_ENCODING; }
98: locale { return TYPE_LOCALE; }
99: default_term { return TYPE_DEFTERM; }
100: utf8esc { return TYPE_UTF8ESC; }
101: flowcontrol { return TYPE_FLOWCTRL; }
102: filemode { return TYPE_FILEMODE; }
103: yes { yylval.i = 1; return TYPE_BOOL; }
104: no { yylval.i = 0; return TYPE_BOOL; }
105: dglstart { yylval.i = DGLTIME_DGLSTART; return TYPE_CMDQUEUENAME; }
106: login { yylval.i = DGLTIME_LOGIN; return TYPE_CMDQUEUENAME; }
107: register { yylval.i = DGLTIME_REGISTER; return TYPE_CMDQUEUENAME; }
108: gamestart { yylval.i = DGLTIME_GAMESTART; return TYPE_CMDQUEUENAME; }
109: gameend { yylval.i = DGLTIME_GAMEEND; return TYPE_CMDQUEUENAME; }
110: mkdir { yylval.i = DGLCMD_MKDIR; return TYPE_DGLCMD1; }
111: chdir { yylval.i = DGLCMD_CHDIR; return TYPE_DGLCMD1; }
112: cp { yylval.i = DGLCMD_CP; return TYPE_DGLCMD2; }
113: ifnxcp { yylval.i = DGLCMD_IF_NX_CP; return TYPE_DGLCMD2; }
114: unlink { yylval.i = DGLCMD_UNLINK; return TYPE_DGLCMD1; }
115: setenv { yylval.i = DGLCMD_SETENV; return TYPE_DGLCMD2; }
116: exec { yylval.i = DGLCMD_EXEC; return TYPE_DGLCMD2; }
117: chpasswd { yylval.i = DGLCMD_CHPASSWD; return TYPE_DGLCMD0; }
118: chmail { yylval.i = DGLCMD_CHMAIL; return TYPE_DGLCMD0; }
119: watch_menu { yylval.i = DGLCMD_WATCH_MENU; return TYPE_DGLCMD0; }
120: ask_login { yylval.i = DGLCMD_LOGIN; return TYPE_DGLCMD0; }
121: ask_register { yylval.i = DGLCMD_REGISTER; return TYPE_DGLCMD0; }
122: quit { yylval.i = DGLCMD_QUIT; return TYPE_DGLCMD0; }
123: play_game { yylval.i = DGLCMD_PLAYGAME; return TYPE_DGLCMD1; }
124: play_if_exist { yylval.i = DGLCMD_PLAY_IF_EXIST; return TYPE_DGLCMD2; }
125: submenu { yylval.i = DGLCMD_SUBMENU; return TYPE_DGLCMD1; }
126: return { yylval.i = DGLCMD_RETURN; return TYPE_DGLCMD0; }
127: rawprint { yylval.i = DGLCMD_RAWPRINT; return TYPE_DGLCMD1; }
128: DEFINE { return TYPE_DEFINE_GAME; }
129:
130:
131: \n { line++; col = 0; }
132:
133: [0-9a-zA-Z_]+ {
134: fprintf(stderr, "%s:%d:%d unrecognized token \"%s\"\n", config, line, col, yytext);
135: graceful_exit(12);
136: }
137:
138: %%
CVSweb