Annotation of dgamelaunch-openbsd/config.l, Revision 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