]> icculus.org git repositories - btb/d2x.git/blob - misc/args.c
move old per-file change logs into new file ChangeLog-old
[btb/d2x.git] / misc / args.c
1 /* $Id: args.c,v 1.14 2004-08-28 23:17:45 schaffner Exp $ */
2 /*
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
13 */
14
15 /*
16  *
17  * Functions for accessing arguments.
18  *
19  */
20
21 #ifdef HAVE_CONFIG_H
22 #include <conf.h>
23 #endif
24
25 #ifdef RCS
26 static char rcsid[] = "$Id: args.c,v 1.14 2004-08-28 23:17:45 schaffner Exp $";
27 #endif
28
29 #include <stdlib.h>
30 #include <string.h>
31
32 #include "cfile.h"
33 #include "u_mem.h"
34 #include "strio.h"
35 #include "strutil.h"
36
37 int Num_args=0;
38 char * Args[100];
39
40 int FindArg(char *s)
41 {
42         int i;
43
44         for (i=0; i<Num_args; i++ )
45                 if (! stricmp( Args[i], s))
46                         return i;
47
48         return 0;
49 }
50
51 int FindResArg(char *prefix, int *sw, int *sh)
52 {
53         int i;
54         int w, h;
55         char *endptr;
56         int prefixlen = strlen(prefix);
57
58         for (i = 0; i < Num_args; ++i)
59                 if (Args[i][0] == '-' && !strnicmp(Args[i] + 1, prefix, prefixlen))
60                 {
61                         w = strtol(Args[i] + 1 + prefixlen, &endptr, 10);
62                         if (w > 0 && endptr && endptr[0] == 'x')
63                         {
64                                 h = strtol(endptr + 1, &endptr, 10);
65                                 if (h > 0 && endptr[0] == '\0')
66                                 {
67                                         *sw = w;
68                                         *sh = h;
69                                         return i;
70                                 }
71                         }
72                 }
73
74         return 0;
75
76 }
77
78 void args_exit(void)
79 {
80         int i;
81         for (i=0; i< Num_args; i++ )
82                 d_free(Args[i]);
83 }
84
85 void InitArgs( int argc,char **argv )
86 {
87         int i;
88         CFILE *f;
89         char *line,*word;
90         
91         Num_args=0;
92         
93         for (i=0; i<argc; i++ )
94                 Args[Num_args++] = d_strdup( argv[i] );
95         
96         
97         for (i=0; i< Num_args; i++ ) {
98                 if ( Args[i][0] == '-' )
99                         strlwr( Args[i]  );  // Convert all args to lowercase
100         }
101         if((i=FindArg("-ini")))
102                 f = cfopen(Args[i+1], "rt");
103         else
104                 f = cfopen("d2x.ini", "rt");
105         
106         if(f) {
107                 while(!cfeof(f))
108                 {
109                         line=fgets_unlimited(f);
110                         word=splitword(line,' ');
111                         
112                         Args[Num_args++] = d_strdup(word);
113                         
114                         if(line)
115                                 Args[Num_args++] = d_strdup(line);
116                         
117                         d_free(line); d_free(word);
118                 }
119                 cfclose(f);
120         }
121         
122         atexit(args_exit);
123 }