From bdd220fe5f4b0603b547a4370250a376f2e94c03 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Wed, 16 Nov 2022 19:03:37 -0500 Subject: dla2csv.xex: stop using atexit(), it crashes under MyDOS. --- dla2csv.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'dla2csv.c') diff --git a/dla2csv.c b/dla2csv.c index 32e673b..c04e793 100644 --- a/dla2csv.c +++ b/dla2csv.c @@ -95,8 +95,11 @@ void print_id(void) { OS.color2 = TEXT_BG_COLOR; /* Put things back the way they were, when we exit. */ + /* Nope. Using atexit() here makes MyDOS crash. Used + atari_exit() and EXIT() macro instead. atexit(restore_colors); atexit(enable_break); + */ } void print_banner(void) { @@ -156,6 +159,13 @@ void print_id(void) { if(column) putchar('\n'); } + void atari_exit(int status) { + restore_colors(); + enable_break(); + exit(0); + } + #define EXIT(x) atari_exit(x) + /* On the Atari, EOF is Ctrl-3. *Terrible* things happen if we ever get EOF on stdin on the Atari! The screen shows gibberish (display list gets mangled). Even calling exit() doesn't help. @@ -181,6 +191,7 @@ void print_id(void) { #define enable_break() noop() #define disable_break() noop() #define init_console() noop() + #define EXIT(x) exit(1) #define exit_eof_stdin() exit(1) #endif @@ -247,7 +258,7 @@ FILE *prompt_filename(const char *name, const char *mode) { stringbuf[strlen(stringbuf) - 1] = '\0'; /* kill trailing \n */ if(strlen(stringbuf) == 0) { if(prompt_yn("Exit program", 0)) { - exit(0); + EXIT(0); } continue; } @@ -468,5 +479,5 @@ int main(int argc, char **argv) { if(!prompt_yn("\nConvert another file", 1)) break; } - exit(0); + EXIT(0); } -- cgit v1.2.3