aboutsummaryrefslogtreecommitdiff
path: root/config/config.c
diff options
context:
space:
mode:
Diffstat (limited to 'config/config.c')
-rw-r--r--config/config.c183
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();
}