diff options
Diffstat (limited to 'config/config.c')
| -rw-r--r-- | config/config.c | 55 |
1 files changed, 39 insertions, 16 deletions
diff --git a/config/config.c b/config/config.c index d48f54a..64924f0 100644 --- a/config/config.c +++ b/config/config.c @@ -45,6 +45,24 @@ char numbuf[4]; char server[101]; char port[6]; +char lcgetc(void) { + char c; + + c = cgetc(); + if(c == 0x03) exit(0); + return c; +} + +char *lgets(char *buf) { + while(OS.ch == 0xff) + /* NOP */; + + if(OS.ch == 0x92) + lcgetc(); + + return gets(buf); +} + void detect_dos(void) { char i, j, h, d; @@ -70,7 +88,7 @@ void prompt(const char *text, char *p, char limit) { print(" ["); print(p); print("]? "); - gets(buf); + lgets(buf); if(buf[0]) strncpy(p, buf, limit); } @@ -86,7 +104,7 @@ char yn(const char *text, char dflt) { do { bad = 1; - c = tolower(cgetc()); + c = tolower(lcgetc()); if(c == '\n') c = dflt ? 'y' : 'n'; if(c == 'y' || c == 'n') @@ -150,7 +168,7 @@ void prompt_alert_type(void) { putchar(d); print("]? "); - c = cgetc(); + c = lcgetc(); if(c == '\n') c = d; putchar(c); @@ -312,8 +330,8 @@ char prompt_main(void) { print("[L]oad [S]ave [1-9H]Directory\n"); print("[E]dit [C]onnect [C]? "); - c = tolower(cgetc()); - if(c == 0x03) { + c = tolower(lcgetc()); + if(c == 0x15) { /* super-secret Urchlay mode... */ strcpy(conf->nick, "Urch600XL"); c = 'c'; @@ -352,7 +370,7 @@ char prompt_main(void) { void keyclick(void) { OS.ch = 0; - cgetc(); + lcgetc(); } void list_chans(void) { @@ -387,7 +405,7 @@ void prompt_channels(void) { print("3-7=change C=clear L=list Return=done\n"); do { ok = 1; - c = cgetc(); + c = lcgetc(); if(c == '\n') return; if(c == 'l') @@ -420,7 +438,7 @@ void prompt_channels(void) { print(" unchanged.\n"); keyclick(); } else { - gets(buf); + lgets(buf); if(*buf) strncpy(conf->channels[c], buf, 25); } @@ -443,7 +461,7 @@ void prompt_extra_channels(void) { putchar(CH_CURS_RIGHT); putchar(CH_CURS_LEFT); - gets(buf); + lgets(buf); strncpy(conf->extra_channels, buf, 128); done = yn("OK", 1); @@ -465,7 +483,7 @@ void prompt_server_list(void) { print("Server [1]? "); do { - c = cgetc(); + c = lcgetc(); if(c == '\n') c = '1'; } while(!(c > '0' && c < count)); c -= '1'; @@ -475,7 +493,7 @@ void prompt_server_list(void) { } void prompt_server() { - print("\nPress Escape for server list.\n"); + print("** Press Escape for server list.\n"); print("Server ["); print(server); print("]? "); @@ -486,7 +504,7 @@ void prompt_server() { keyclick(); prompt_server_list(); } else { - gets(buf); + lgets(buf); if(*buf) strncpy(server, buf, 100); } } @@ -518,11 +536,17 @@ void main(void) { if(prompt_main()) break; - if(yn("\nUse defaults", 0)) - set_default_config(); + print("\nAt any time, press Ctrl-C to skip the\n"); + print("remaining questions.\n\n"); + + if(memcmp(&defaults, conf, sizeof(defaults)) != 0) + if(yn("\nReset to defaults", 0)) + set_default_config(); parse_url(); + prompt("Nick", conf->nick, 25); + prompt_server(); do { @@ -534,7 +558,6 @@ void main(void) { } } while(bad); - prompt("Nick ", conf->nick, 25); prompt("Name ", conf->real_name, 25); prompt_colors(); prompt_alert_type(); @@ -553,7 +576,7 @@ void main(void) { } /* GRR! When the client loads, somehow, wherever the cursor is according - to the E: device, gets a 0 byte written to its screen address. + to the E: device, lgets a 0 byte written to its screen address. Clearing the screen here band-aids it: a byte of the client's screen memory is getting zeroed out, but it's a byte that was already zero... */ print("\x7d"); |
