home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 180.lha / Files_v1.2 / src / main.c < prev    next >
C/C++ Source or Header  |  1988-04-28  |  7KB  |  326 lines

  1.  
  2. /*
  3.  *  MAIN.C
  4.  *
  5.  *  FILES
  6.  *
  7.  *  A file catalog program by Matthew Dillon.
  8.  *
  9.  *  (c)Copyright 1987 Matthew Dillon, All Rights Reserved.
  10.  *
  11.  */
  12.  
  13. #include "files.h"
  14. #include <local/xmisc.h>
  15.  
  16. short Deemu[] = {
  17.     'ST','RT', 0, 0,
  18.     'NW','  ', 0, 8, -16, -8, 320, 100,
  19.     '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,
  20.     'EN','D ', 0, 0
  21. };
  22.  
  23. #define NWOFF    8
  24. #define DEFFILE 16
  25.  
  26. NW Nw = {
  27.     0, 0, 0, 0, -1, -1,
  28.     NEWSIZE|MOUSEBUTTONS|MOUSEMOVE|GADGETDOWN|GADGETUP|MENUPICK|CLOSEWINDOW,
  29.     WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|NOCAREREFRESH|ACTIVATE,
  30.     NULL, NULL, (ubyte *)"V1.2 by Matthew Dillon, Catalog Utility.", NULL,
  31.     NULL, 182, 66, -1, -1, WBENCHSCREEN
  32. };
  33.  
  34. WIN *Win;
  35. RP  *Rp;
  36.  
  37. char FileName[128];
  38.  
  39. main()
  40. {
  41.     char resized = 0;
  42.     char notdone = 1;
  43.     char movebox = 0;
  44.     char moveslider = 0;
  45.     char addactive = 0;
  46.     char noload = 1;
  47.     char dontquit = 0;
  48.  
  49.     char mmove = 0;
  50.     short mmy;
  51.  
  52.     IMESS *im;
  53.     SCR   Scr;
  54.  
  55.     openlibs(INTUITION_LIB|GRAPHICS_LIB);
  56.  
  57.     GetScreenData(&Scr, sizeof(Scr), WBENCHSCREEN, NULL);
  58.  
  59.     initslider(&Nw);
  60.  
  61.     Nw.LeftEdge = Deemu[NWOFF+0];
  62.     Nw.TopEdge    = Deemu[NWOFF+1];
  63.     Nw.Width    = Deemu[NWOFF+2];
  64.     Nw.Height    = Deemu[NWOFF+3];
  65.     if (Nw.Width <= 0)
  66.     Nw.Width += Scr.Width;
  67.     if (Nw.Height <= 0)
  68.     Nw.Height += Scr.Height;
  69.     if (Nw.LeftEdge < 0)
  70.     Nw.LeftEdge += Scr.Width - Nw.Width;
  71.     if (Nw.TopEdge < 0)
  72.     Nw.TopEdge  += Scr.Height- Nw.Height;
  73.     if (Nw.LeftEdge < 0 || Nw.TopEdge < 0 || Nw.LeftEdge + Nw.Width > Scr.Width || Nw.TopEdge + Nw.Height > Scr.Height) {
  74.     Nw.LeftEdge = Nw.TopEdge = 0;
  75.     Nw.Width = 320;
  76.     Nw.Height= 100;
  77.     }
  78.     {
  79.     register char *ptr = (char *)(Deemu + DEFFILE);
  80.     strcpy(FileName, ptr + strlen(ptr) + 1);
  81.     }
  82.  
  83.     Win = OpenWindow(&Nw);
  84.     failfalse(Win, "Unable to open window");
  85.     Rp = Win->RPort;
  86.  
  87.     addmenus();
  88.     addgadgets();
  89. again:
  90.     for (; notdone || dontquit;) {
  91.     if (dontquit)
  92.         notdone = 1;
  93.     dontquit = 0;
  94.     WaitPort(Win->UserPort);
  95.     while (im = GetMsg(Win->UserPort)) {
  96.         switch(im->Class) {
  97.         case NEWSIZE:
  98.         resized = 1;
  99.         break;
  100.         case MOUSEBUTTONS:
  101.         break;
  102.         case MOUSEMOVE:
  103.         mmove = 1;
  104.         mmy = im->MouseY;
  105.         break;
  106.         case GADGETDOWN:
  107.         {
  108.             char *str = NULL;
  109.             short sel;
  110.             switch(getgadget(im, &sel, &str)) {
  111.             case GAD_SLIDER:
  112.             moveslider = 1;
  113.             movebox = 0;
  114.             sliderhit();
  115.             break;
  116.             case GAD_BIGBOX:
  117.             moveslider = 0;
  118.             movebox = 1;
  119.             bigboxhit(im->MouseY, 0);
  120.             break;
  121.             }
  122.         }
  123.         break;
  124.         case GADGETUP:
  125.         {
  126.             char *str = NULL;
  127.             short sel;
  128.             switch(getgadget(im, &sel, &str)) {
  129.             case GAD_INFO:
  130.             {
  131.                 long fh = Open("raw:10/24/600/150/INFO", 1006);
  132.                 if (fh) {
  133.                 char buf[8];
  134.                 fhprintf(fh, "\n\r\n\rVersion 1.1  Written by Matthew Dillon\n\r");
  135.                 fhprintf(fh, "(c)Copyright 1987 Matthew Dillon, All Rights Reserved.\n\n\r");
  136.                 fhprintf(fh, "    dillon@ucbvax.berkeley.edu     (ARPANET)\n\r");
  137.                 fhprintf(fh, "    ...!ihnp4!ucbvax!dillon        (USENET)\n\r");
  138.                 fhprintf(fh, "Matthew Dillon, 891 Regal Rd. Berkeley, Ca. 94708\n\n\r");
  139.                 fhprintf(fh, "This software is freely redistributable only.  This\n\r");
  140.                 fhprintf(fh, "software is NOT shareware\n\n\r");
  141.                 fhprintf(fh, "Thanks to Peter Da Silva for providing the filerequestor\n\r");
  142.                 fhprintf(fh, "\n\n    Any key to continue\n\r");
  143.                 Read(fh, buf, 1);
  144.                 Close(fh);
  145.                 }
  146.             }
  147.             break;
  148.             case GAD_DEL:
  149.             rem_selected(Highlighted, 0);
  150.             break;
  151.             case GAD_UNDO:
  152.             undo();
  153.             break;
  154.             case GAD_ALL:
  155.             selectall();
  156.             redisplay(0);
  157.             break;
  158.             case GAD_VOLUME:
  159.             if (str[0])
  160.                 add_volume(str);
  161.             activate_vol();
  162.             break;
  163.             case GAD_PATTERN:
  164.             if (str[0]) {
  165.                 title("Wait");
  166.                 select_pattern(str, 0);
  167.             }
  168.             activate_pat();
  169.             break;
  170.             case GAD_COMMENT:
  171.             mod_comment(str);
  172.             break;
  173.             case GAD_SLIDER:
  174.             moveslider = 0;
  175.             sliderhit();
  176.             break;
  177.             case GAD_BIGBOX:
  178.             movebox = 0;
  179.             bigboxhit(im->MouseY, 1);
  180.             break;
  181.             }
  182.         }
  183.         break;
  184.         case MENUPICK:
  185.         switch(getmenu(im)) {
  186.         case MEN_SAVE:
  187.             {
  188.             FILE *fi;
  189.             if (noload && NumEntries == 0) {
  190.                 title("Did I just save you from making a mistake?");
  191.                 break;
  192.             }
  193.             fi = fopen(FileName, "w");
  194.             if (fi) {
  195.                 save_database(fi);
  196.                 if (ferror(fi)) {
  197.                 title("File Error");
  198.                 dontquit = 1;
  199.                 } else {
  200.                 title("Saved ok");
  201.                 Modified = 0;
  202.                 }
  203.                 fclose(fi);
  204.             } else {
  205.                 title("Unable to open file for write");
  206.             }
  207.             }
  208.             break;
  209.         case MEN_SAVEAS:
  210.             {
  211.             FILE *fi;
  212.             if (stdfile("SAVE DATABASE", FileName, "", FileName)) {
  213.                 noload = 0;
  214.                 if (fi = fopen(FileName, "w")) {
  215.                 save_database(fi);
  216.                 if (ferror(fi)) {
  217.                     title("File Error");
  218.                     dontquit = 1;
  219.                 } else {
  220.                     title("Saved ok");
  221.                     Modified = 0;
  222.                 }
  223.                 fclose(fi);
  224.                 } else {
  225.                 title("Unable to open file for write");
  226.                 }
  227.             }
  228.             }
  229.             break;
  230.         case MEN_LOADEF:
  231.             {
  232.             FILE *fi = fopen(FileName, "r");
  233.             long entries = NumEntries;
  234.             if (fi) {
  235.                 noload = 0;
  236.                 load_database(fi);
  237.                 if (!entries)
  238.                 Modified = 0;
  239.                 fclose(fi);
  240.             } else {
  241.                 title("Unable to open file for read");
  242.             }
  243.             }
  244.             break;
  245.         case MEN_LOAD:
  246.             {
  247.             FILE *fi;
  248.             long entries = NumEntries;
  249.             if (stdfile("LOAD DATABASE", FileName, "", FileName)) {
  250.                 noload = 0;
  251.                 if (fi = fopen(FileName, "r")) {
  252.                 load_database(fi);
  253.                 if (!entries)
  254.                     Modified = 0;
  255.                 fclose(fi);
  256.                 } else {
  257.                 title("Unable to open file for read");
  258.                 }
  259.             }
  260.             }
  261.             break;
  262.         case MEN_QUIT:
  263.             notdone = 0;
  264.             break;
  265.         case MEN_KILLPAT:
  266.             resetsort();
  267.             addentry(KILLNAME, "", 0);
  268.             select_pattern(KILLNAME, 0);
  269.             break;
  270.         }
  271.         break;
  272.         case CLOSEWINDOW:
  273.         notdone = 0;
  274.         break;
  275.         }
  276.         ReplyMsg(im);
  277.         if (resized) {
  278.         fixgadgets();
  279.         redisplay(0);
  280.         }
  281.         resized = 0;
  282.     }
  283.     if (mmove) {
  284.         if (moveslider)
  285.         sliderhit();
  286.         if (movebox)
  287.         bigboxhit(mmy, 0);
  288.         mmove = 0;
  289.     }
  290.     }
  291.     if (Modified) {
  292.     title("MODIFICATIONS MADE!  HIT CLOSE-BOX AGAIN TO VERIFY");
  293.     Modified = 0;
  294.     notdone = 1;
  295.     goto again;
  296.     }
  297.     failfalse(NULL, NULL);
  298. }
  299.  
  300. failfalse(val, str)
  301. long val;
  302. char *str;
  303. {
  304.     if (val == NULL) {
  305.     if (str)
  306.         puts(str);
  307.     if (Win) {
  308.         remmenus();
  309.         remgadgets();
  310.         CloseWindow(Win);
  311.         Win = NULL;
  312.     }
  313.     closelibs(-1);
  314.     exit((str)? 1 : 0);
  315.     }
  316. }
  317.  
  318. failtrue(val, str)
  319. long val;
  320. char *str;
  321. {
  322.     if (val)
  323.     failfalse(NULL, str);
  324. }
  325.  
  326.