/* * MAIN.C * * FILES * * A file catalog program by Matthew Dillon. * * (c)Copyright 1987 Matthew Dillon, All Rights Reserved. * */ #include "files.h" #include short Deemu[] = { 'ST','RT', 0, 0, 'NW',' ', 0, 8, -16, -8, 320, 100, 'TE','XT', 0,42, 'De','fa','ul','t\0','s:','ca','ta','lo','g.','db',0,0,0,0,0,0,0,0,0,0,0, 'EN','D ', 0, 0 }; #define NWOFF 8 #define DEFFILE 16 NW Nw = { 0, 0, 0, 0, -1, -1, NEWSIZE|MOUSEBUTTONS|MOUSEMOVE|GADGETDOWN|GADGETUP|MENUPICK|CLOSEWINDOW, WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|NOCAREREFRESH|ACTIVATE, NULL, NULL, (ubyte *)"V1.2 by Matthew Dillon, Catalog Utility.", NULL, NULL, 182, 66, -1, -1, WBENCHSCREEN }; WIN *Win; RP *Rp; char FileName[128]; main() { char resized = 0; char notdone = 1; char movebox = 0; char moveslider = 0; char addactive = 0; char noload = 1; char dontquit = 0; char mmove = 0; short mmy; IMESS *im; SCR Scr; openlibs(INTUITION_LIB|GRAPHICS_LIB); GetScreenData(&Scr, sizeof(Scr), WBENCHSCREEN, NULL); initslider(&Nw); Nw.LeftEdge = Deemu[NWOFF+0]; Nw.TopEdge = Deemu[NWOFF+1]; Nw.Width = Deemu[NWOFF+2]; Nw.Height = Deemu[NWOFF+3]; if (Nw.Width <= 0) Nw.Width += Scr.Width; if (Nw.Height <= 0) Nw.Height += Scr.Height; if (Nw.LeftEdge < 0) Nw.LeftEdge += Scr.Width - Nw.Width; if (Nw.TopEdge < 0) Nw.TopEdge += Scr.Height- Nw.Height; if (Nw.LeftEdge < 0 || Nw.TopEdge < 0 || Nw.LeftEdge + Nw.Width > Scr.Width || Nw.TopEdge + Nw.Height > Scr.Height) { Nw.LeftEdge = Nw.TopEdge = 0; Nw.Width = 320; Nw.Height= 100; } { register char *ptr = (char *)(Deemu + DEFFILE); strcpy(FileName, ptr + strlen(ptr) + 1); } Win = OpenWindow(&Nw); failfalse(Win, "Unable to open window"); Rp = Win->RPort; addmenus(); addgadgets(); again: for (; notdone || dontquit;) { if (dontquit) notdone = 1; dontquit = 0; WaitPort(Win->UserPort); while (im = GetMsg(Win->UserPort)) { switch(im->Class) { case NEWSIZE: resized = 1; break; case MOUSEBUTTONS: break; case MOUSEMOVE: mmove = 1; mmy = im->MouseY; break; case GADGETDOWN: { char *str = NULL; short sel; switch(getgadget(im, &sel, &str)) { case GAD_SLIDER: moveslider = 1; movebox = 0; sliderhit(); break; case GAD_BIGBOX: moveslider = 0; movebox = 1; bigboxhit(im->MouseY, 0); break; } } break; case GADGETUP: { char *str = NULL; short sel; switch(getgadget(im, &sel, &str)) { case GAD_INFO: { long fh = Open("raw:10/24/600/150/INFO", 1006); if (fh) { char buf[8]; fhprintf(fh, "\n\r\n\rVersion 1.1 Written by Matthew Dillon\n\r"); fhprintf(fh, "(c)Copyright 1987 Matthew Dillon, All Rights Reserved.\n\n\r"); fhprintf(fh, " dillon@ucbvax.berkeley.edu (ARPANET)\n\r"); fhprintf(fh, " ...!ihnp4!ucbvax!dillon (USENET)\n\r"); fhprintf(fh, "Matthew Dillon, 891 Regal Rd. Berkeley, Ca. 94708\n\n\r"); fhprintf(fh, "This software is freely redistributable only. This\n\r"); fhprintf(fh, "software is NOT shareware\n\n\r"); fhprintf(fh, "Thanks to Peter Da Silva for providing the filerequestor\n\r"); fhprintf(fh, "\n\n Any key to continue\n\r"); Read(fh, buf, 1); Close(fh); } } break; case GAD_DEL: rem_selected(Highlighted, 0); break; case GAD_UNDO: undo(); break; case GAD_ALL: selectall(); redisplay(0); break; case GAD_VOLUME: if (str[0]) add_volume(str); activate_vol(); break; case GAD_PATTERN: if (str[0]) { title("Wait"); select_pattern(str, 0); } activate_pat(); break; case GAD_COMMENT: mod_comment(str); break; case GAD_SLIDER: moveslider = 0; sliderhit(); break; case GAD_BIGBOX: movebox = 0; bigboxhit(im->MouseY, 1); break; } } break; case MENUPICK: switch(getmenu(im)) { case MEN_SAVE: { FILE *fi; if (noload && NumEntries == 0) { title("Did I just save you from making a mistake?"); break; } fi = fopen(FileName, "w"); if (fi) { save_database(fi); if (ferror(fi)) { title("File Error"); dontquit = 1; } else { title("Saved ok"); Modified = 0; } fclose(fi); } else { title("Unable to open file for write"); } } break; case MEN_SAVEAS: { FILE *fi; if (stdfile("SAVE DATABASE", FileName, "", FileName)) { noload = 0; if (fi = fopen(FileName, "w")) { save_database(fi); if (ferror(fi)) { title("File Error"); dontquit = 1; } else { title("Saved ok"); Modified = 0; } fclose(fi); } else { title("Unable to open file for write"); } } } break; case MEN_LOADEF: { FILE *fi = fopen(FileName, "r"); long entries = NumEntries; if (fi) { noload = 0; load_database(fi); if (!entries) Modified = 0; fclose(fi); } else { title("Unable to open file for read"); } } break; case MEN_LOAD: { FILE *fi; long entries = NumEntries; if (stdfile("LOAD DATABASE", FileName, "", FileName)) { noload = 0; if (fi = fopen(FileName, "r")) { load_database(fi); if (!entries) Modified = 0; fclose(fi); } else { title("Unable to open file for read"); } } } break; case MEN_QUIT: notdone = 0; break; case MEN_KILLPAT: resetsort(); addentry(KILLNAME, "", 0); select_pattern(KILLNAME, 0); break; } break; case CLOSEWINDOW: notdone = 0; break; } ReplyMsg(im); if (resized) { fixgadgets(); redisplay(0); } resized = 0; } if (mmove) { if (moveslider) sliderhit(); if (movebox) bigboxhit(mmy, 0); mmove = 0; } } if (Modified) { title("MODIFICATIONS MADE! HIT CLOSE-BOX AGAIN TO VERIFY"); Modified = 0; notdone = 1; goto again; } failfalse(NULL, NULL); } failfalse(val, str) long val; char *str; { if (val == NULL) { if (str) puts(str); if (Win) { remmenus(); remgadgets(); CloseWindow(Win); Win = NULL; } closelibs(-1); exit((str)? 1 : 0); } } failtrue(val, str) long val; char *str; { if (val) failfalse(NULL, str); }