added .cvsignore files
[btb/d2x.git] / misc / args.c
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13 /*
14  * $Source: /cvs/cvsroot/d2x/misc/args.c,v $
15  * $Revision: 1.7 $
16  * $Author: bradleyb $
17  * $Date: 2002-02-11 07:36:23 $
18  * 
19  * Functions for accessing arguments.
20  * 
21  * $Log: not supported by cvs2svn $
22  * Revision 1.6  2002/01/18 07:02:23  bradleyb
23  * formatting
24  *
25  * Revision 1.5  2001/11/09 06:57:27  bradleyb
26  * use d2x.ini for option file
27  *
28  * Revision 1.4  2001/11/05 07:39:26  bradleyb
29  * Change args_init back to InitArgs
30  *
31  * Revision 1.3  2001/01/31 15:18:04  bradleyb
32  * Makefile and conf.h fixes
33  *
34  * Revision 1.2  2001/01/24 04:29:48  bradleyb
35  * changed args_find to FindArg
36  *
37  * Revision 1.1.1.1  2001/01/19 03:30:14  bradleyb
38  * Import of d2x-0.0.8
39  *
40  * Revision 1.3  1999/08/05 22:53:41  sekmu
41  *
42  * D3D patch(es) from ADB
43  *
44  * Revision 1.2  1999/06/14 23:44:11  donut
45  * Orulz' svgalib/ggi/noerror patches.
46  *
47  * Revision 1.1.1.1  1999/06/14 22:05:15  donut
48  * Import of d1x 1.37 source.
49  *
50  * Revision 2.0  1995/02/27  11:31:22  john
51  * New version 2.0, which has no anonymous unions, builds with
52  * Watcom 10.0, and doesn't require parsing BITMAPS.TBL.
53  * 
54  * Revision 1.9  1994/11/29  01:07:57  john
55  * Took out some unused vars.
56  * 
57  * Revision 1.8  1994/11/29  01:04:30  john
58  * Took out descent.ini stuff.
59  * 
60  * Revision 1.7  1994/09/20  19:29:15  matt
61  * Made args require exact (not substring), though still case insensitive.
62  * 
63  * Revision 1.6  1994/07/25  12:33:11  john
64  * Network "pinging" in.
65  * 
66  * Revision 1.5  1994/06/17  18:07:50  matt
67  * Took out printf
68  * 
69  * Revision 1.4  1994/05/11  19:45:33  john
70  * *** empty log message ***
71  * 
72  * Revision 1.3  1994/05/11  18:42:11  john
73  * Added Descent.ini config file.
74  * 
75  * Revision 1.2  1994/05/09  17:03:30  john
76  * Split command line parameters into arg.c and arg.h.
77  * Also added /dma, /port, /irq to digi.c
78  * 
79  * Revision 1.1  1994/05/09  16:49:11  john
80  * Initial revision
81  * 
82  * 
83  */
84
85 #ifdef HAVE_CONFIG_H
86 #include <conf.h>
87 #endif
88
89 #ifdef RCS
90 static char rcsid[] = "$Id: args.c,v 1.7 2002-02-11 07:36:23 bradleyb Exp $";
91 #endif
92
93 #include <stdio.h>
94 #include <stdlib.h>
95 #include <string.h>
96 #include "u_mem.h"
97 #include "strio.h"
98 #include "strutil.h"
99
100 int Num_args=0;
101 char * Args[100];
102
103 int FindArg( char * s ) {
104         int i;
105
106         for (i=0; i<Num_args; i++ )
107                 if (! strcasecmp( Args[i], s))
108                         return i;
109
110         return 0;
111 }
112
113 void args_exit(void)
114 {
115         int i;
116         for (i=0; i< Num_args; i++ )
117                 d_free(Args[i]);
118 }
119
120 void InitArgs( int argc,char **argv )
121 {
122         int i;
123         FILE *f;
124         char *line,*word;
125         
126         Num_args=0;
127         
128         for (i=0; i<argc; i++ )
129                 Args[Num_args++] = d_strdup( argv[i] );
130         
131         
132         for (i=0; i< Num_args; i++ ) {
133                 if ( Args[i][0] == '-' )
134                         strlwr( Args[i]  );  // Convert all args to lowercase
135         }
136         if((i=FindArg("-ini")))
137                 f=fopen(Args[i+1],"rt");
138         else
139                 f=fopen("d2x.ini","rt");
140         
141         if(f) {
142                 while(!feof(f)) {
143                         line=fsplitword(f,'\n');
144                         word=splitword(line,' ');
145                         
146                         Args[Num_args++] = d_strdup(word);
147                         
148                         if(line)
149                                 Args[Num_args++] = d_strdup(line);
150                         
151                         d_free(line); d_free(word);
152                 }
153                 fclose(f);
154         }
155         
156         atexit(args_exit);
157 }