fork of PCE focusing on macplus, supporting DaynaPort SCSI network emulation
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

libini: Support presetting config file options

Config file entries can now be predefined before the config file
is loaded.

Hampa Hug 5efaae16 af82eae3

+191 -160
+39 -7
src/arch/ibmpc/main.c
··· 52 52 { 'c', 1, "config", "string", "Set the config file name [none]" }, 53 53 { 'd', 1, "path", "string", "Add a directory to the search path" }, 54 54 { 'g', 1, "video", "string", "Set the video device" }, 55 - { 'i', 1, "ini-string", "string", "Add an ini string" }, 55 + { 'i', 1, "ini-prefix", "string", "Add an ini string before the config file" }, 56 + { 'I', 1, "ini-append", "string", "Add an ini string after the config file" }, 56 57 { 'l', 1, "log", "string", "Set the log file name [none]" }, 57 58 { 'p', 1, "cpu", "string", "Set the CPU model" }, 58 59 { 'q', 0, "quiet", NULL, "Set the log level to error [no]" }, ··· 164 165 return (1); 165 166 } 166 167 168 + static 169 + int pce_load_config (ini_sct_t *ini, const char *fname) 170 + { 171 + if (fname == NULL) { 172 + return (0); 173 + } 174 + 175 + pce_log_tag (MSG_INF, "CONFIG:", "file=\"%s\"\n", fname); 176 + 177 + if (ini_read (par_cfg, fname)) { 178 + pce_log (MSG_ERR, "*** loading config file failed\n"); 179 + return (1); 180 + } 181 + 182 + return (0); 183 + } 184 + 167 185 int main (int argc, char *argv[]) 168 186 { 169 - int r; 170 - char **optarg; 187 + int r; 188 + char **optarg; 171 189 int run, nomon; 172 190 char *cfg; 173 191 ini_sct_t *sct; ··· 178 196 179 197 pce_log_init(); 180 198 pce_log_add_fp (stderr, 0, MSG_INF); 199 + 200 + par_cfg = ini_sct_new (NULL); 201 + 202 + if (par_cfg == NULL) { 203 + return (1); 204 + } 181 205 182 206 ini_str_init (&par_ini_str); 183 207 ··· 218 242 break; 219 243 220 244 case 'i': 245 + if (ini_read_str (par_cfg, optarg[0])) { 246 + fprintf (stderr, 247 + "%s: error parsing ini string (%s)\n", 248 + argv[0], optarg[0] 249 + ); 250 + return (1); 251 + } 252 + break; 253 + 254 + case 'I': 221 255 ini_str_add (&par_ini_str, optarg[0], "\n", NULL); 222 256 break; 223 257 ··· 270 304 271 305 pc_log_banner(); 272 306 273 - par_cfg = pce_load_config (cfg); 274 - 275 - if (par_cfg == NULL) { 276 - pce_log (MSG_ERR, "loading config file failed (%s)\n", cfg); 307 + if (pce_load_config (par_cfg, cfg)) { 277 308 return (1); 278 309 } 279 310 280 311 sct = ini_next_sct (par_cfg, NULL, "pc"); 312 + 281 313 if (sct == NULL) { 282 314 sct = par_cfg; 283 315 }
+3 -32
src/arch/ibmpc/util.c
··· 5 5 /***************************************************************************** 6 6 * File name: src/arch/ibmpc/util.c * 7 7 * Created: 2004-06-23 by Hampa Hug <hampa@hampa.ch> * 8 - * Copyright: (C) 2004-2009 Hampa Hug <hampa@hampa.ch> * 8 + * Copyright: (C) 2004-2010 Hampa Hug <hampa@hampa.ch> * 9 9 *****************************************************************************/ 10 10 11 11 /***************************************************************************** ··· 21 21 22 22 23 23 #include "main.h" 24 + 25 + #include <string.h> 24 26 25 27 26 28 int str_istail (const char *str, const char *tail) ··· 66 68 67 69 return (0); 68 70 } 69 - 70 - ini_sct_t *pce_load_config (const char *fname) 71 - { 72 - ini_sct_t *ini; 73 - char *home; 74 - char buf[1024]; 75 - 76 - if (fname != NULL) { 77 - ini = ini_read (fname); 78 - if (ini != NULL) { 79 - pce_log_tag (MSG_INF, 80 - "PCE:", "using config file \"%s\"\n", fname 81 - ); 82 - return (ini); 83 - } 84 - } 85 - 86 - home = getenv ("HOME"); 87 - if (home != NULL) { 88 - sprintf (buf, "%s/.pce.cfg", home); 89 - ini = ini_read (buf); 90 - if (ini != NULL) { 91 - pce_log_tag (MSG_INF, 92 - "PCE:", "using config file \"%s\"\n", buf 93 - ); 94 - return (ini); 95 - } 96 - } 97 - 98 - return (NULL); 99 - }
+1 -3
src/arch/ibmpc/util.h
··· 5 5 /***************************************************************************** 6 6 * File name: src/arch/ibmpc/util.h * 7 7 * Created: 2004-06-23 by Hampa Hug <hampa@hampa.ch> * 8 - * Copyright: (C) 2004-2009 Hampa Hug <hampa@hampa.ch> * 8 + * Copyright: (C) 2004-2010 Hampa Hug <hampa@hampa.ch> * 9 9 *****************************************************************************/ 10 10 11 11 /***************************************************************************** ··· 26 26 27 27 int str_istail (const char *str, const char *tail); 28 28 int str_isarg (const char *str, const char *arg1, const char *arg2); 29 - 30 - ini_sct_t *pce_load_config (const char *fname); 31 29 32 30 33 31 #endif
+35 -18
src/arch/macplus/main.c
··· 46 46 47 47 monitor_t par_mon; 48 48 49 + ini_sct_t *par_cfg = NULL; 50 + 49 51 static ini_strings_t par_ini_str; 50 52 51 53 ··· 55 57 { 'B', 2, "disk-delay", "drive delay", "Set the disk delay [30]" }, 56 58 { 'c', 1, "config", "string", "Set the config file name [none]" }, 57 59 { 'd', 1, "path", "string", "Add a directory to the search path" }, 58 - { 'i', 1, "ini-string", "string", "Add an ini string" }, 60 + { 'i', 1, "ini-prefix", "string", "Add an ini string before the config file" }, 61 + { 'I', 1, "ini-append", "string", "Add an ini string after the config file" }, 59 62 { 'l', 1, "log", "string", "Set the log file name [none]" }, 60 63 { 'p', 1, "cpu", "string", "Set the CPU model" }, 61 64 { 'q', 0, "quiet", NULL, "Set the log level to error [no]" }, ··· 174 177 } 175 178 176 179 static 177 - ini_sct_t *pce_load_config (const char *fname) 180 + int pce_load_config (ini_sct_t *ini, const char *fname) 178 181 { 179 - ini_sct_t *ini; 182 + if (fname == NULL) { 183 + return (0); 184 + } 180 185 181 - if (fname != NULL) { 182 - ini = ini_read (fname); 183 - if (ini != NULL) { 184 - pce_log_tag (MSG_INF, "PCE:", 185 - "using config file '%s'\n", fname 186 - ); 187 - return (ini); 188 - } 186 + pce_log_tag (MSG_INF, "CONFIG:", "file=\"%s\"\n", fname); 187 + 188 + if (ini_read (par_cfg, fname)) { 189 + pce_log (MSG_ERR, "*** loading config file failed\n"); 190 + return (1); 189 191 } 190 192 191 - return (NULL); 193 + return (0); 192 194 } 193 195 194 196 int main (int argc, char *argv[]) ··· 198 200 int run, nomon; 199 201 unsigned drive; 200 202 char *cfg; 201 - ini_sct_t *ini, *sct; 203 + ini_sct_t *sct; 202 204 203 205 cfg = NULL; 204 206 run = 0; ··· 206 208 207 209 pce_log_init(); 208 210 pce_log_add_fp (stderr, 0, MSG_INF); 211 + 212 + par_cfg = ini_sct_new (NULL); 213 + 214 + if (par_cfg == NULL) { 215 + return (1); 216 + } 209 217 210 218 ini_str_init (&par_ini_str); 211 219 ··· 259 267 break; 260 268 261 269 case 'i': 270 + if (ini_read_str (par_cfg, optarg[0])) { 271 + fprintf (stderr, 272 + "%s: error parsing ini string (%s)\n", 273 + argv[0], optarg[0] 274 + ); 275 + return (1); 276 + } 277 + break; 278 + 279 + case 'I': 262 280 ini_str_add (&par_ini_str, optarg[0], "\n", NULL); 263 281 break; 264 282 ··· 311 329 312 330 mac_log_banner(); 313 331 314 - ini = pce_load_config (cfg); 315 - if (ini == NULL) { 316 - pce_log (MSG_ERR, "loading config file failed\n"); 332 + if (pce_load_config (par_cfg, cfg)) { 317 333 return (1); 318 334 } 319 335 320 - sct = ini_next_sct (ini, NULL, "macplus"); 336 + sct = ini_next_sct (par_cfg, NULL, "macplus"); 337 + 321 338 if (sct == NULL) { 322 - sct = ini; 339 + sct = par_cfg; 323 340 } 324 341 325 342 if (ini_str_eval (&par_ini_str, sct, 1)) {
+27 -19
src/arch/sim405/main.c
··· 37 37 #include "main.h" 38 38 39 39 40 - char *par_cpu = NULL; 40 + char *par_cpu = NULL; 41 41 42 - unsigned par_xlat = P405_XLAT_CPU; 42 + unsigned par_xlat = P405_XLAT_CPU; 43 43 44 - sim405_t *par_sim = NULL; 44 + sim405_t *par_sim = NULL; 45 + 46 + unsigned par_sig_int = 0; 45 47 46 - unsigned par_sig_int = 0; 48 + ini_sct_t *par_cfg = NULL; 47 49 48 50 49 51 static ··· 123 125 } 124 126 125 127 static 126 - ini_sct_t *pce_load_config (const char *fname) 128 + int pce_load_config (ini_sct_t *ini, const char *fname) 127 129 { 128 - ini_sct_t *ini; 130 + if (fname == NULL) { 131 + return (0); 132 + } 129 133 130 - if (fname != NULL) { 131 - ini = ini_read (fname); 132 - if (ini != NULL) { 133 - pce_log (MSG_INF, "config: file=%s\n", fname); 134 - return (ini); 135 - } 134 + pce_log_tag (MSG_INF, "CONFIG:", "file=\"%s\"\n", fname); 135 + 136 + if (ini_read (par_cfg, fname)) { 137 + pce_log (MSG_ERR, "*** loading config file failed\n"); 138 + return (1); 136 139 } 137 140 138 - return (NULL); 141 + return (0); 139 142 } 140 143 141 144 int str_isarg1 (const char *str, const char *arg) ··· 165 168 int i; 166 169 int run; 167 170 char *cfg; 168 - ini_sct_t *ini, *sct; 171 + ini_sct_t *sct; 169 172 monitor_t mon; 170 173 171 174 if (argc == 2) { ··· 185 188 pce_log_init(); 186 189 pce_log_add_fp (stderr, 0, MSG_INF); 187 190 191 + par_cfg = ini_sct_new (NULL); 192 + 193 + if (par_cfg == NULL) { 194 + return (1); 195 + } 196 + 188 197 i = 1; 189 198 while (i < argc) { 190 199 if (str_isarg2 (argv[i], "-v", "--verbose")) { ··· 231 240 "Copyright (C) 1995-2010 Hampa Hug <hampa@hampa.ch>\n" 232 241 ); 233 242 234 - ini = pce_load_config (cfg); 235 - if (ini == NULL) { 236 - pce_log (MSG_ERR, "loading config file failed\n"); 243 + if (pce_load_config (par_cfg, cfg)) { 237 244 return (1); 238 245 } 239 246 240 - sct = ini_next_sct (ini, NULL, "sim405"); 247 + sct = ini_next_sct (par_cfg, NULL, "sim405"); 248 + 241 249 if (sct == NULL) { 242 - sct = ini; 250 + sct = par_cfg; 243 251 } 244 252 245 253 par_sim = s405_new (sct);
+19 -15
src/arch/sim6502/main.c
··· 733 733 } 734 734 735 735 static 736 - ini_sct_t *pce_load_config (const char *fname) 736 + int pce_load_config (ini_sct_t *ini, const char *fname) 737 737 { 738 - ini_sct_t *ini; 738 + if (fname == NULL) { 739 + return (0); 740 + } 739 741 740 - if (fname != NULL) { 741 - ini = ini_read (fname); 742 - if (ini != NULL) { 743 - pce_log (MSG_INF, "pce:\tusing config file '%s'\n", fname); 744 - return (ini); 745 - } 742 + pce_log_tag (MSG_INF, "CONFIG:", "file=\"%s\"\n", fname); 743 + 744 + if (ini_read (par_cfg, fname)) { 745 + pce_log (MSG_ERR, "*** loading config file failed\n"); 746 + return (1); 746 747 } 747 748 748 - return (NULL); 749 + return (0); 749 750 } 750 751 751 752 int str_isarg1 (const char *str, const char *arg) ··· 775 776 int i; 776 777 int run; 777 778 char *cfg; 778 - ini_sct_t *ini, *sct; 779 + ini_sct_t *sct; 779 780 780 781 if (argc == 2) { 781 782 if (str_isarg1 (argv[1], "--help")) { ··· 794 795 pce_log_init(); 795 796 pce_log_add_fp (stderr, 0, MSG_INF); 796 797 798 + par_cfg = ini_sct_new (NULL); 799 + 800 + if (par_cfg == NULL) { 801 + return (1); 802 + } 803 + 797 804 i = 1; 798 805 while (i < argc) { 799 806 if (str_isarg2 (argv[i], "-v", "--verbose")) { ··· 832 839 "Copyright (C) 1995-2010 Hampa Hug <hampa@hampa.ch>\n" 833 840 ); 834 841 835 - ini = pce_load_config (cfg); 836 - if (ini == NULL) { 837 - pce_log (MSG_ERR, "*** loading config file failed\n"); 842 + if (pce_load_config (par_cfg, cfg)) { 838 843 return (1); 839 844 } 840 845 841 - par_cfg = ini; 846 + sct = ini_next_sct (par_cfg, NULL, "sim6502"); 842 847 843 - sct = ini_next_sct (ini, NULL, "sim6502"); 844 848 if (sct == NULL) { 845 849 pce_log (MSG_ERR, "*** section 'sim6502' not found in config file\n"); 846 850 return (1);
+26 -21
src/arch/simarm/main.c
··· 37 37 #include "main.h" 38 38 39 39 40 - char *par_cpu = NULL; 40 + char *par_cpu = NULL; 41 41 42 - unsigned par_xlat = ARM_XLAT_CPU; 42 + unsigned par_xlat = ARM_XLAT_CPU; 43 43 44 - simarm_t *par_sim = NULL; 44 + simarm_t *par_sim = NULL; 45 45 46 - unsigned par_sig_int = 0; 46 + unsigned par_sig_int = 0; 47 47 48 + ini_sct_t *par_cfg = NULL; 48 49 49 50 static monitor_t par_mon; 50 51 ··· 157 158 } 158 159 159 160 static 160 - ini_sct_t *pce_load_config (const char *fname) 161 + int pce_load_config (ini_sct_t *ini, const char *fname) 161 162 { 162 - ini_sct_t *ini; 163 + if (fname == NULL) { 164 + return (0); 165 + } 166 + 167 + pce_log_tag (MSG_INF, "CONFIG:", "file=\"%s\"\n", fname); 163 168 164 - if (fname != NULL) { 165 - ini = ini_read (fname); 166 - if (ini != NULL) { 167 - pce_log_tag (MSG_INF, "PCE:", 168 - "using config file '%s'\n", fname 169 - ); 170 - return (ini); 171 - } 169 + if (ini_read (par_cfg, fname)) { 170 + pce_log (MSG_ERR, "*** loading config file failed\n"); 171 + return (1); 172 172 } 173 173 174 - return (NULL); 174 + return (0); 175 175 } 176 176 177 177 int str_isarg1 (const char *str, const char *arg) ··· 201 201 int i; 202 202 int run; 203 203 char *cfg; 204 - ini_sct_t *ini, *sct; 204 + ini_sct_t *sct; 205 205 206 206 if (argc == 2) { 207 207 if (str_isarg1 (argv[1], "--help")) { ··· 220 220 pce_log_init(); 221 221 pce_log_add_fp (stderr, 0, MSG_INF); 222 222 223 + par_cfg = ini_sct_new (NULL); 224 + 225 + if (par_cfg == NULL) { 226 + return (1); 227 + } 228 + 223 229 i = 1; 224 230 while (i < argc) { 225 231 if (str_isarg2 (argv[i], "-v", "--verbose")) { ··· 266 272 "Copyright (C) 1995-2010 Hampa Hug <hampa@hampa.ch>\n" 267 273 ); 268 274 269 - ini = pce_load_config (cfg); 270 - if (ini == NULL) { 271 - pce_log (MSG_ERR, "loading config file failed\n"); 275 + if (pce_load_config (par_cfg, cfg)) { 272 276 return (1); 273 277 } 274 278 275 - sct = ini_next_sct (ini, NULL, "simarm"); 279 + sct = ini_next_sct (par_cfg, NULL, "simarm"); 280 + 276 281 if (sct == NULL) { 277 - sct = ini; 282 + sct = par_cfg; 278 283 } 279 284 280 285 par_sim = sarm_new (sct);
+26 -21
src/arch/sims32/main.c
··· 31 31 #include "main.h" 32 32 33 33 34 - char *par_cpu = NULL; 34 + char *par_cpu = NULL; 35 35 36 - unsigned par_xlat = S32_XLAT_CPU; 36 + unsigned par_xlat = S32_XLAT_CPU; 37 37 38 - sims32_t *par_sim = NULL; 38 + sims32_t *par_sim = NULL; 39 39 40 - unsigned par_sig_int = 0; 40 + unsigned par_sig_int = 0; 41 41 42 + ini_sct_t *par_cfg = NULL; 42 43 43 44 static monitor_t par_mon; 44 45 ··· 142 143 } 143 144 144 145 static 145 - ini_sct_t *pce_load_config (const char *fname) 146 + int pce_load_config (ini_sct_t *ini, const char *fname) 146 147 { 147 - ini_sct_t *ini; 148 + if (fname == NULL) { 149 + return (0); 150 + } 151 + 152 + pce_log_tag (MSG_INF, "CONFIG:", "file=\"%s\"\n", fname); 148 153 149 - if (fname != NULL) { 150 - ini = ini_read (fname); 151 - if (ini != NULL) { 152 - pce_log_tag (MSG_INF, "PCE:", 153 - "using config file '%s'\n", fname 154 - ); 155 - return (ini); 156 - } 154 + if (ini_read (par_cfg, fname)) { 155 + pce_log (MSG_ERR, "*** loading config file failed\n"); 156 + return (1); 157 157 } 158 158 159 - return (NULL); 159 + return (0); 160 160 } 161 161 162 162 int str_isarg1 (const char *str, const char *arg) ··· 186 186 int i; 187 187 int run; 188 188 char *cfg; 189 - ini_sct_t *ini, *sct; 189 + ini_sct_t *sct; 190 190 191 191 if (argc == 2) { 192 192 if (str_isarg1 (argv[1], "--help")) { ··· 205 205 pce_log_init(); 206 206 pce_log_add_fp (stderr, 0, MSG_INF); 207 207 208 + par_cfg = ini_sct_new (NULL); 209 + 210 + if (par_cfg == NULL) { 211 + return (1); 212 + } 213 + 208 214 i = 1; 209 215 while (i < argc) { 210 216 if (str_isarg2 (argv[i], "-v", "--verbose")) { ··· 251 257 "Copyright (C) 1995-2010 Hampa Hug <hampa@hampa.ch>\n" 252 258 ); 253 259 254 - ini = pce_load_config (cfg); 255 - if (ini == NULL) { 256 - pce_log (MSG_ERR, "loading config file failed\n"); 260 + if (pce_load_config (par_cfg, cfg)) { 257 261 return (1); 258 262 } 259 263 260 - sct = ini_next_sct (ini, NULL, "sims32"); 264 + sct = ini_next_sct (par_cfg, NULL, "sims32"); 265 + 261 266 if (sct == NULL) { 262 - sct = ini; 267 + sct = par_cfg; 263 268 } 264 269 265 270 par_sim = ss32_new (sct);
+4 -4
src/libini/libini.h
··· 277 277 /*!*************************************************************************** 278 278 * @short Read an ini tree from a file 279 279 * @param fp A C style stream that must be open for reading 280 - * @return A pointer to the base section of the ini tree or NULL on error. 280 + * @return True on error 281 281 *****************************************************************************/ 282 - ini_sct_t *ini_read_fp (FILE *fp, const char *fname); 282 + int ini_read_fp (ini_sct_t *sct, FILE *fp, const char *fname); 283 283 284 284 /*!*************************************************************************** 285 285 * @short Read an ini tree from a file 286 286 * @param fname The file name 287 - * @return A pointer to the base section of the ini tree or NULL on error. 287 + * @return True on error 288 288 *****************************************************************************/ 289 - ini_sct_t *ini_read (const char *fname); 289 + int ini_read (ini_sct_t *sct, const char *fname); 290 290 291 291 292 292 /*!***************************************************************************
+11 -20
src/libini/read.c
··· 332 332 return (0); 333 333 } 334 334 335 - ini_sct_t *ini_read_fp (FILE *fp, const char *fname) 335 + int ini_read_fp (ini_sct_t *sct, FILE *fp, const char *fname) 336 336 { 337 - ini_sct_t *sct; 338 337 scanner_t scn; 339 338 char buf[256]; 340 339 341 - sct = ini_sct_new (NULL); 342 - 343 - if (sct == NULL) { 344 - return (NULL); 345 - } 346 - 347 340 scn_init (&scn); 348 341 349 342 if (scn_add_file (&scn, fname, fp, 0)) { 350 343 ini_sct_del (sct); 351 - return (NULL); 344 + return (1); 352 345 } 353 346 354 347 if (parse_section (&scn, sct, buf)) { 355 348 parse_error (&scn, "parse error before", 1); 356 - ini_sct_del (sct); 357 349 scn_free (&scn); 358 - return (NULL); 350 + return (1); 359 351 } 360 352 361 353 if (scn_get_chr (&scn, 0) != 0) { 362 354 parse_error (&scn, "parse error before", 1); 363 - ini_sct_del (sct); 364 355 scn_free (&scn); 365 - return (NULL); 356 + return (1); 366 357 } 367 358 368 359 scn_free (&scn); 369 360 370 - return (sct); 361 + return (0); 371 362 } 372 363 373 - ini_sct_t *ini_read (const char *fname) 364 + int ini_read (ini_sct_t *sct, const char *fname) 374 365 { 375 - FILE *fp; 376 - ini_sct_t *sct; 366 + int r; 367 + FILE *fp; 377 368 378 369 fp = fopen (fname, "rb"); 379 370 380 371 if (fp == NULL) { 381 - return (NULL); 372 + return (1); 382 373 } 383 374 384 - sct = ini_read_fp (fp, fname); 375 + r = ini_read_fp (sct, fp, fname); 385 376 386 377 fclose (fp); 387 378 388 - return (sct); 379 + return (r); 389 380 }