/* * File I/O for ToolAlias. * Reads (and writes?) configuration files. * * mws, 4 February 1993 */ /* * structure of .config file (assg. line 0 is first line): * * line 2n: oldtool * line 2n+1: newtool * * with no leading spaces. MUST be valid format!!! * (Will be machine-generated in some future version). */ #include #include #include "list.h" #ifdef TEST #define Msg(s) printf("error: %s\n", s) #else extern void EasyEasyRequest(char *); #define Msg(s) EasyEasyRequest(s); #endif /* write a string to a file (in binary format) */ /* '\n' is appended */ void FWriteString(BPTR fh, char *buf) { FPuts(fh, buf); FPutC(fh, '\n'); } /* read a string to a file (in binary format) - returns success */ /* '\n' is stripped and buf null-terminated; assumes dest large enough */ BOOL FReadString(BPTR fh, char *buf, LONG bufsiz) { UWORD len; if (FGets(fh, buf, bufsiz)) { len = strlen(buf); if (buf[len-1] = '\n') buf[len-1] = '\0'; /* '\n' --> '\0' */ return TRUE; } return FALSE; } BOOL get_config(char *name) { static BOOL firsttime = TRUE; char oldname[256], newname[256]; BPTR fh; TOOL *tool; BOOL rc = TRUE; if (fh = Open(name, MODE_OLDFILE)) { free_list(); /* clear old list */ tool = get_head(); while (FReadString(fh, oldname, 256)) { if (FReadString(fh, newname, 256)) { if (!((tool = add_tool(tool)) && set_oldname(tool, oldname) && set_newname(tool, newname))) { if (tool) rem_tool(tool); Msg("Memory allocation failed"); rc = FALSE; break; } } else /* invalid file format */ { Msg("Invalid config file"); rc = FALSE; break; } } Close(fh); } else if (firsttime) /* failed first time - no worries */ firsttime = FALSE; else /* failed on reload - warn user */ Msg("Couldn't open config file"); if (!rc) free_list(); return rc; } /* save current config to named file */ BOOL write_config(char *name) { TOOL *tool; BPTR fh; if (fh = Open(name, MODE_NEWFILE)) { tool = get_head(); while (tool) { FWriteString(fh, tool->oldname); FWriteString(fh, tool->newname); tool = tool->next; } Close(fh); return TRUE; } Msg("Couldn't open config file"); return FALSE; } /******************************************************************************/ #ifdef TEST #include void main(int argc, char **argv) { if (get_config("test.config")) { TOOL *tool = get_head(); while (tool) { printf("%s -> %s\n", tool->oldname, tool->newname); tool = tool->next; } free_list(); } else Msg("Couldn't get test.config"); } /* main */ #endif TEST