diff options
| -rw-r--r-- | config/config.c | 183 |
1 files changed, 124 insertions, 59 deletions
diff --git a/config/config.c b/config/config.c index d0a20ff..c0cccc3 100644 --- a/config/config.c +++ b/config/config.c @@ -5,6 +5,7 @@ #include <stdlib.h> #include <atari.h> #include <conio.h> +#include <ctype.h> #include "../src/config.h" @@ -14,10 +15,10 @@ conf_t defaults = { "FujiNetChat User", { 0xc0, 0x0c }, { "#testari8", { 0 }, { 0 }, { 0 }, { 0 } }, - 3, - 1, - 0, - 1 + 3, /* alert_type, default = both */ + 0, /* show_ping, default = N */ + 1, /* hide_motd, default = Y */ + 1 /* atract_away, default = Y */ }; char have_dos = 0; @@ -34,9 +35,9 @@ void detect_dos(void) { for(i = 0; i < 11; i++) { j = OS.hatabs[i].id; if(j == 'D') - h = 1; - if(j == 'H') d = 1; + if(j == 'H') + h = 1; } if(h && !d) filename[0] = 'H'; @@ -68,17 +69,17 @@ char yn(const char *text, char dflt) { do { bad = 1; - c = cgetc(); + c = tolower(cgetc()); if(c == '\n') - c = dflt ? 'Y' : 'N'; - if(c == 'Y' || c == 'N' || c == 'y' || c == 'n') + c = dflt ? 'y' : 'n'; + if(c == 'y' || c == 'n') bad = 0; } while(bad); putchar(c); putchar('\n'); - return (c == 'Y' || c == 'y'); + return (c == 'y'); } void prompt_config_file(void) { @@ -137,12 +138,37 @@ void prompt_alert_type(void) { conf->alert_type = c - '0'; } +void no_dos(void) { + print("No DOS booted\n"); +} + +char want_overwrite() { + int fh; + + if((fh = open(filename, O_RDONLY)) < 0) + return 0; + + close(fh); + + return yn("File exists, overwrite [y/N]? ", 0); +} + void save(void) { int fh, bad; + if(!have_dos) { + no_dos(); + return; + } + do { bad = 0; prompt_config_file(); + + if(!want_overwrite()) { + return; + } + if((fh = open(filename, O_WRONLY | O_CREAT)) < 0) { print("!! I/O error (open)\n"); bad = 1; @@ -155,39 +181,40 @@ void save(void) { if(bad) { if(!yn("Retry", 1)) break; + } else { + print("Saved config "); + print(filename); + putchar('\n'); } } while(bad); } -void load(void) { - int fh, bad = 0; +char load(char prompt) { + int fh, loaded; - if(have_dos) { - if(!yn("Load Config", 1)) { - bad = 1; - print("OK"); - } else { - prompt_config_file(); + if(!have_dos) { + no_dos(); + return 0; + } - if((fh = open(filename, O_RDONLY)) < 0) { - print("Not found"); - bad = 1; - } else if((read(fh, conf, sizeof(conf_t))) != sizeof(conf_t)) { - print("Invalid"); - bad = 1; - } + if(prompt) prompt_config_file(); - if(fh >= 0) close(fh); - } - } else { - print("No DOS booted"); - bad = 1; - } + print("Loading config "); + print(filename); + putchar('\n'); - if(bad) { - print(", using built-in defaults\n"); - memcpy(conf, &defaults, sizeof(conf_t)); + loaded = 1; + if((fh = open(filename, O_RDONLY)) < 0) { + print("Not found\n"); + loaded = 0; + } else if((read(fh, conf, sizeof(conf_t))) != sizeof(conf_t)) { + print("Invalid\n"); + loaded = 0; } + + if(fh >= 0) close(fh); + + return loaded; } void make_url(void) { @@ -197,21 +224,8 @@ void make_url(void) { strcat(conf->url, port); } -void main(void) { +void parse_url(void) { char *p, *q; - - OS.color2 = defaults.colors[0]; - OS.color1 = defaults.colors[1]; - - cursor(1); - print("\x7d" "FujiNetChat Setup\n\n"); - - detect_dos(); - load(); - - OS.color2 = conf->colors[0]; - OS.color1 = conf->colors[1]; - q = server; p = conf->url + 8; /* skip N:TCP:// */ while(*p) { @@ -223,8 +237,69 @@ void main(void) { p++; q = port; strcpy(port, p); +} + +char prompt_main(void) { + char bad, c; + + do { + bad = 0; + putchar('\n'); + if(have_dos) print("[L]oad [S]ave "); + print("[E]dit [C]onnect [C]? "); + + c = tolower(cgetc()); + if(c == '\n') c = 'c'; + putchar(c); + putchar('\n'); + + switch(c) { + case 'c': + return 1; + case 'l': + if(have_dos) load(1); + bad = 1; + break; + case 's': + if(have_dos) save(); + bad = 1; + break; + case 'e': + return 0; + default: + bad = 1; + break; + } + } while(bad); + return 0; +} + +void set_default_config(void) { + memcpy(conf, &defaults, sizeof(conf_t)); +} + +void main(void) { + set_default_config(); + + OS.color2 = conf->colors[0]; + OS.color1 = conf->colors[1]; + + cursor(1); + print("\x7d" "FujiNetChat Setup\n\n"); + + detect_dos(); + if(!load(0)) + print("Using built-in default config.\n"); while(1) { + if(prompt_main()) + break; + + if(yn("\nUse defaults", 0)) + set_default_config(); + + parse_url(); + prompt("\nServer", server, 100); prompt("Port ", port, 5); prompt("Nick ", conf->nick, 25); @@ -236,19 +311,9 @@ void main(void) { conf->hide_motd = yn("Hide MOTD", conf->hide_motd); make_url(); + print("\nURL: "); print(conf->url); putchar('\n'); - - if(yn("Settings OK", 1)) - break; - } - - if(have_dos) { - if(yn("Save to disk", 1)) - save(); } - - print("\nPress any key to load the client..."); - cgetc(); } |
