convert line ends
[canaan.git] / prj / cam / src / framewrk / cfgtool.c
blobd3c80083df40ab5a07224464aff56e5d3f83c68d
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 // $header: $
7 #include <lg.h>
8 #include <cfgtool.h>
10 #include <ctype.h>
11 #include <string.h>
12 #include <stdio.h>
14 #include <config.h>
15 #include <cfg.h>
16 #include <mprintf.h>
18 #include <command.h>
19 #include <status.h>
20 #include <scrnmode.h>
21 #include <scrnman.h>
23 #include <datapath.h>
24 #include <memall.h>
25 #include <dbmem.h> // must be last header!
27 void set_config_cmd(char* arg)
29 int n;
30 char var[64],*val;
31 sscanf(arg,"%s %n",var,&n);
32 if (n >= 0 && n < strlen(arg))
33 for (val = arg + n; *val != '\0' && isspace(*val); val++)
35 else
36 val = "";
37 mprintf("setting '%s' to '%s'\n",var,val);
38 config_set_string(var,val);
39 config_set_priority(var,PRIORITY_TRANSIENT);
40 Status("Config variable set.");
44 void get_config_cmd(char* arg)
46 char var[64];
47 char buf[80];
49 sscanf(arg,"%s ",var);
50 mprintf("getting '%s'\n",var);
51 if (config_get_raw(var,buf,sizeof(buf)))
53 char outbuf[90];
54 sprintf(outbuf,"Value: %s",buf);
55 Status(outbuf);
57 else
58 Status("No such config var");
62 void eval_config_cmd(char* arg)
64 ulong n;
65 char var[64],*val;
66 char valbuf[80] = "";
67 char cmdbuf[256];
69 sscanf(arg,"%s %n",var,&n);
70 for (val = arg + n; *val != '\0' && isspace(*val); val++)
72 config_get_raw(var,valbuf,sizeof(valbuf));
73 sprintf(cmdbuf,val,valbuf);
74 if (CommandExecute(cmdbuf))
75 Status("No such command.");
79 void ifdef_config_cmd(char* arg)
81 ulong n;
82 char var[64],*cmd;
83 sscanf(arg,"%s %n",var,&n);
84 for (cmd = arg + n; *cmd != '\0' && isspace(*cmd); cmd++)
86 if (config_is_defined(var))
87 if (CommandExecute(cmd))
88 Status("No such command.");
92 void ifndef_config_cmd(char* arg)
94 ulong n;
95 char var[64],*cmd;
96 sscanf(arg,"%s %n",var,&n);
97 for (cmd = arg + n; *cmd != '\0' && isspace(*cmd); cmd++)
99 if (!config_is_defined(var))
100 if (CommandExecute(cmd))
101 Status("No such command.");
105 void undef_config_cmd(char* arg)
107 ulong n = 0;
108 char var[64], *cmd;
109 sscanf(arg,"%s %n", var, &n);
110 for (cmd = arg + n; *cmd != '\0' && isspace(*cmd); cmd++)
112 config_unset(var);
118 ////////////////////////////////////////
121 static const char* iter_prefix;
122 static char* iter_val;
124 #define INCLUDE_PATH "include_path"
126 // @TODO: lift this cap
127 #define MAX_FILES 64
128 static char (*include_files)[80];
129 static int files_found;
131 static bool include_iter(char* var)
133 if (strnicmp(iter_prefix,var,strlen(iter_prefix)) == 0
134 && files_found < MAX_FILES)
137 int i = files_found++;
138 strncpy(include_files[i],iter_val,sizeof(include_files[i]));
140 return FALSE;
143 void process_config_includes(const char* prefix)
145 int i;
146 char buf[80];
148 iter_val = buf;
149 iter_prefix = prefix;
150 files_found = 0;
151 include_files = Malloc(sizeof(*include_files)*MAX_FILES);
153 config_get_raw_all(include_iter,buf,sizeof(buf));
155 for (i = 0; i < files_found; i++)
157 char fbuf[256];
158 find_file_in_config_path(fbuf,include_files[i],INCLUDE_PATH);
159 config_load(fbuf);
161 Free(include_files);
162 include_files = NULL;
165 ////////////////////////////////////////
168 #define SCRIPT_PATH "script_path"
170 static bool script_iter(char* var)
172 if (strnicmp(iter_prefix,var,strlen(iter_prefix)) == 0)
174 char buf[80];
175 find_file_in_config_path(buf,iter_val,SCRIPT_PATH);
176 CommandRunScript(buf);
178 return FALSE;
181 void process_config_scripts(const char* prefix)
183 char buf[80];
184 iter_val = buf;
185 iter_prefix = prefix;
186 config_get_raw_all(script_iter,buf,sizeof(buf));
190 ////////////////////////////////////////////////////////////
192 // @ROBUSTIFY: make args const.
193 BOOL find_file_in_config_path(char* targ, char* filename, char* path_var)
195 Datapath path;
196 char pathbuf[256] = "";
197 BOOL result;
198 DatapathClear(&path);
199 config_get_raw(path_var,pathbuf,sizeof(pathbuf));
200 DatapathAdd(&path,pathbuf);
201 result = DatapathFind(&path,filename,targ,80);
202 DatapathFree(&path);
203 return result;