2 Copyright (C) 1998 BJ Eirich (aka vecna)
\r
3 This program is free software; you can redistribute it and/or
\r
4 modify it under the terms of the GNU General Public License
\r
5 as published by the Free Software Foundation; either version 2
\r
6 of the License, or (at your option) any later version.
\r
7 This program is distributed in the hope that it will be useful,
\r
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
\r
10 See the GNU General Public Lic
\r
11 See the GNU General Public License for more details.
\r
12 You should have received a copy of the GNU General Public License
\r
13 along with this program; if not, write to the Free Software
\r
14 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\r
17 #include <stdarg.h> // va_*
\r
21 // ================================= Data ====================================
\r
23 // declared in VDRIVER.C
\r
24 extern byte* translucency_table;
\r
26 char *strbuf=0; // Universal temporary string buffer. :)
\r
28 int vidxres=0,vidyres=0; // Joystick on/off | Video mode to use
\r
29 char logoutput=0; // Verbose debugging startup mode
\r
30 char nocdaudio=0; // do not use CD audio
\r
31 char startmap[80]; // startup map
\r
32 FILE *logf=0; // logfile file handle
\r
34 // ================================= Code ====================================
\r
36 void InitializeDefaults()
\r
38 kb1=28; kb2=56; kb3=1; kb4=57; // default keyboard controls
\r
39 jb1=1; jb2=2; jb3=3; jb4=4; // default joystick controls
\r
40 joyflag=0; // joystick defaults to disabled
\r
41 vidxres=320; vidyres=200;
\r
42 logoutput=0; // Don't be annoyingly verbose
\r
43 strbuf=(char *) valloc(2000, "strbuf", OID_TEMP);
\r
44 memcpy(startmap,"test.map\0",9);
\r
48 md_mode=DMODE_16BITS|DMODE_STEREO;
\r
52 static VFILE *user_cfg_file=0;
\r
53 static char parse_str[256];
\r
55 static char *parse_cfg_token()
\r
57 vscanf(user_cfg_file, "%s", parse_str);
\r
61 // compares string against parse_str (grabbed by parse_cfg_token)
\r
62 // 0=mismatch, 1=match
\r
63 static int parse_match(char *str)
\r
65 return !strcmp(parse_str, str);
\r
68 void ParseStartupFiles()
\r
70 user_cfg_file = vopen("user.cfg");
\r
73 printf("Could not open user.cfg. \n");
\r
81 // mounts a pack file; up to 3? (perhaps gaurd against more?)
\r
82 if (parse_match("mount"))
\r
83 { MountVFile(parse_cfg_token()); continue; }
\r
84 // set video resolution
\r
85 else if (parse_match("vidmode"))
\r
87 vidxres = atoi(parse_cfg_token());
\r
88 vidyres = atoi(parse_cfg_token());
\r
91 if (vidxres != 256 && vidxres != 320
\r
92 && vidxres != 360 && vidxres != 640)
\r
94 Log("user.cfg: invalid resolution width %i passed to vidmode",
\r
97 if (vidyres != 200 && vidyres != 240
\r
98 && vidyres != 256 && vidyres != 480)
\r
100 Log("user.cfg: invalid resolution height %i passed to vidmode",
\r
106 // log to VERGE.LOG
\r
107 else if (parse_match("log"))
\r
112 // disable CD playing
\r
113 else if (parse_match("nocdaudio"))
\r
118 // map VERGE.EXE will run first when executed
\r
119 else if (parse_match("startmap"))
\r
121 strcpy(startmap, parse_cfg_token());
\r
124 // 0=auto detect, 1=???, 2=???, 3=nosound
\r
125 else if (parse_match("sound_device"))
\r
127 md_device = atoi(parse_cfg_token());
\r
130 // sound lib setting
\r
131 else if (parse_match("mixrate"))
\r
133 md_mixfreq = atoi(parse_cfg_token());
\r
136 // sound lib setting
\r
137 else if (parse_match("dmabufsize"))
\r
139 md_dmabufsize = atoi(parse_cfg_token());
\r
142 // sound lib setting
\r
143 else if (parse_match("force8bit"))
\r
147 // sound lib setting
\r
148 else if (parse_match("forcemono"))
\r
153 // unknown command, assume end
\r
157 // done parsing config
\r
158 vclose(user_cfg_file);
\r
161 void ParseAutoCFG()
\r
165 if (!(f=vopen("auto.cfg"))) return;
\r
169 vgets((char *) cmd, 40, f);
\r
170 for (i=0; i<(signed) strlen((char *) cmd); i++)
\r
171 if (cmd[i]==10 || cmd[i]==13) cmd[i]=0;
\r
172 if (strlen((char*) cmd)<2) break;
\r
182 remove("verge.log");
\r
186 void Log(char *message, ...)
\r
191 if (!logoutput) return;
\r
193 va_start(lst, message);
\r
194 vsprintf(tempbuf, message, lst);
\r
197 logf = fopen("verge.log", "aw");
\r
198 if (!logf) err("unable to log to verge.log");
\r
200 fprintf(logf, "%s \n", tempbuf);
\r
206 // used in conjunction with LogDone()
\r
207 void Logp(char *message, ...)
\r
212 if (!logoutput) return;
\r
214 va_start(lst, message);
\r
215 vsprintf(tempbuf, message, lst);
\r
218 logf = fopen("verge.log", "aw");
\r
219 if (!logf) err("unable to log to verge.log");
\r
221 fprintf(logf, "%s", tempbuf);
\r
229 if (!logoutput) return;
\r
231 logf = fopen("verge.log", "aw");
\r
232 if (!logf) err("unable to log to verge.log");
\r
234 fprintf(logf, "... OK \n");
\r
243 Log("V2 startup. Logfile initialized.");
\r
244 Logp("Sys: Initializing keyboard handler.");
\r
250 Logp("Sys: Initializing timer. Set 100hz.");
\r
255 Logp("Sys: Initializing CD Audio.");
\r
260 Logp("Sys: Initializing music system.");
\r
264 InitVideo(vidxres, vidyres);
\r
267 void LoadTransTable()
\r
271 if (translucency_table)
\r
272 { free(translucency_table); translucency_table=0; }
\r
273 translucency_table=(byte *)valloc(65536, "translucency_table", OID_MISC);
\r
275 fp = fopen("trans.tbl", "rb");
\r
276 if (!fp) err("Could not open trans.tbl.");
\r
278 fread(translucency_table, 65536, 1, fp);
\r
283 void vmain(int argc, char *argv[])
\r
287 InitializeDefaults();
\r
288 ParseStartupFiles();
\r
292 memcpy(startmap, argv[1], strlen(argv[1]));
\r
296 sprintf(temp,"VERGE System Version %s", VERSION);
\r
298 Con_Printf("Copyright (C)1998 vecna");
\r
307 while (timer_count!=0)
\r