ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/random_maps/reader.l
Revision: 1.1
Committed: Fri Feb 3 07:14:22 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Branch point for: UPSTREAM
Log Message:
Initial revision

File Contents

# User Rev Content
1 root 1.1 %{
2     /*
3     * static char *reader_l =
4     * "$Id: reader.l,v 1.9 2005/08/12 13:46:34 ryo_saeba Exp $";
5     */
6    
7     /*
8     CrossFire, A Multiplayer game for X-windows
9    
10     Copyright (C) 1994 Mark Wedel
11     Copyright (C) 1992 Frank Tore Johansen
12    
13     This program is free software; you can redistribute it and/or modify
14     it under the terms of the GNU General Public License as published by
15     the Free Software Foundation; either version 2 of the License, or
16     (at your option) any later version.
17    
18     This program is distributed in the hope that it will be useful,
19     but WITHOUT ANY WARRANTY; without even the implied warranty of
20     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     GNU General Public License for more details.
22    
23     You should have received a copy of the GNU General Public License
24     along with this program; if not, write to the Free Software
25     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
26    
27     The author can be reached via e-mail to mark@pyramid.com
28     */
29    
30    
31    
32     #include <global.h>
33     #include <loader.h>
34     #include <newserver.h>
35     #include <random_map.h>
36    
37    
38     #define YY_DECL int rmap_lex_read(RMParms *RP)
39    
40     static char *rmap_yval();
41    
42     static int rmap_lex_error;
43    
44    
45     #define IVAL atoi(rmap_yval())
46     #define FVAL atof(rmap_yval())
47    
48     %}
49    
50    
51    
52     S [ \t]+.+
53     WS [ \t]*
54    
55     %x MESSAGE
56    
57     /* Don't have to link with -lfl with this */
58     %option noyywrap
59    
60     /* need yy_push_state, yy_pop_state */
61     %option stack
62    
63     %%
64    
65     %{
66     /* Declare some local variables */
67    
68     rmap_lex_error=0;
69    
70     %}
71    
72    
73    
74    
75     ^wallstyle{S} strcpy(RP->wallstyle,rmap_yval());
76     ^floorstyle{S} strcpy(RP->floorstyle,rmap_yval());
77     ^monsterstyle{S} strcpy(RP->monsterstyle,rmap_yval());
78     ^treasurestyle{S} strcpy(RP->treasurestyle,rmap_yval());
79     ^layoutstyle{S} strcpy(RP->layoutstyle,rmap_yval());
80     ^doorstyle{S} strcpy(RP->doorstyle,rmap_yval());
81     ^decorstyle{S} strcpy(RP->decorstyle,rmap_yval());
82     ^xsize{S} RP->Xsize = IVAL;
83     ^ysize{S} RP->Ysize = IVAL;
84     ^expand2x{S} RP->expand2x = IVAL;
85     ^layoutoptions1{S} RP->layoutoptions1 = IVAL;
86     ^layoutoptions2{S} RP->layoutoptions2 = IVAL;
87     ^layoutoptions3{S} RP->layoutoptions3 = IVAL;
88     ^symmetry{S} RP->symmetry = IVAL;
89     ^difficulty{S} RP->difficulty = IVAL;
90     ^difficulty_increase{S} RP->difficulty_increase = FVAL;
91     ^decoroptions{S} RP->decoroptions = IVAL;
92     ^exitstyle{S} strcpy(RP->exitstyle,rmap_yval());
93     ^dungeon_level{S} RP->dungeon_level = IVAL;
94     ^dungeon_depth{S} RP->dungeon_depth = IVAL;
95     ^final_map{S} strcpy(RP->final_map,rmap_yval());
96     ^orientation{S} RP-> orientation = IVAL;
97     ^origin_x{S} RP->origin_x = IVAL;
98     ^origin_y{S} RP-> origin_y = IVAL;
99     ^origin_map{S} strcpy(RP->origin_map,rmap_yval());
100     ^random_seed{S} RP->random_seed = IVAL;
101     ^treasureoptions{S} RP->treasureoptions = IVAL;
102     ^exit_on_final_map{S} strcpy(RP->exit_on_final_map,rmap_yval());
103    
104     <*>(^{WS}$)|\n {/* ignore empty lines, newlines we don't do above */}
105     #.*\n {}
106    
107     <<EOF>> {/* If we got an error, return the error. Otherwise, return that we got EOF */
108     if (rmap_lex_error!=0) return rmap_lex_error; else return LL_EOF;}
109     .* { yyerror( "Unrecognized string"); rmap_lex_error= -1; }
110     %%
111    
112     /*int yyerror(char *s)
113     {
114     return -1;
115     }
116     */
117    
118     /* Our save file syntax is very simple, so we can use a very simple
119     * processing mechanism here instead using something like bison
120     * This skips over the space and returns the value, or "" if no value
121     * is found.
122     */
123     static char *rmap_yval()
124     {
125     static char *em="";
126     char *cp;
127    
128     cp=strchr(yytext,' ');
129     if (cp) return cp+1;
130     else return em;
131     }
132    
133    
134    
135    
136     int load_parameters(FILE *fp, int bufstate,RMParms *RP) {
137     int retval;
138     char inbuf[MAX_BUF];
139    
140     if (bufstate==LO_NEWFILE || bufstate==LO_NOREAD) {
141     yy_delete_buffer(YY_CURRENT_BUFFER);
142     yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));
143     if (bufstate==LO_NOREAD) return LL_NORMAL;
144     }
145     if (bufstate==LO_LINEMODE) {
146     YY_BUFFER_STATE yybufstate;
147     while (fgets(inbuf, MAX_BUF-3, fp)) {
148     yybufstate=yy_scan_string(inbuf);
149     retval=rmap_lex_read(RP);
150     yy_delete_buffer(yybufstate);
151     if (retval==LL_NORMAL) return retval;
152     }
153     return LL_EOF;
154     }
155    
156     retval=rmap_lex_read(RP);
157     /* LOG(llevDebug," load completed, object=%s\n",op->name);*/
158     return retval;
159     }
160    
161    
162     /* This takes a buffer, scans it for variables, and sets those variables
163     * as appropriate in op.
164     *
165     * This function appears to be used in only 2 places - in crossedit to
166     * override values and in c_wiz to mutate values.
167     */
168     int set_random_map_variable(RMParms *rp,const char *buf) {
169     YY_BUFFER_STATE yybufstate;
170     int retval;
171    
172     yybufstate=yy_scan_string(buf);
173     retval=rmap_lex_read(rp);
174     yy_delete_buffer(yybufstate);
175     return retval;
176     }