home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 292.lha / TinyTerm / termfile.c < prev    next >
C/C++ Source or Header  |  1992-09-02  |  5KB  |  332 lines

  1. #include <intuition/intuition.h>
  2. #include <proto/intuition.h>
  3. #include "term.h"
  4.  
  5. #define REQWIDTH  440
  6. #define REQHEIGHT 100
  7.  
  8. USHORT chip RadioOnData[] = {
  9.  
  10.     /* Plane 0 */
  11.     0xf81f, 
  12.     0xc7e3, 
  13.     0xbc3d, 
  14.     0x700e, 
  15.     0x700e, 
  16.     0x700e, 
  17.     0xbc3d, 
  18.     0xc7e3, 
  19.     0xf81f, 
  20.  
  21.     0 };
  22.  
  23. USHORT chip RadioOffData[] = {
  24.  
  25.     /* Plane 0 */
  26.     0xf81f, 
  27.     0xc7e3, 
  28.     0xbffd, 
  29.     0x7ffe, 
  30.     0x7ffe, 
  31.     0x7ffe, 
  32.     0xbffd, 
  33.     0xc7e7, 
  34.     0xf81f, 
  35.  
  36.     0 };
  37.  
  38. struct Image RadioOff =
  39. {
  40.     0,-1,16,9,1,RadioOffData,1,0,NULL
  41. };
  42.  
  43. struct Image RadioOn = 
  44. {
  45.     0,-1,16,9,1,RadioOnData,1,0,NULL
  46. };
  47.  
  48. struct IntuiText ReqText =
  49. {
  50.     2,1,JAM2,160,10,NULL,"Enter File",NULL, 
  51. };
  52.  
  53. struct IntuiText TextOK =
  54. {
  55.     2,1,JAM2,0,0,NULL,"OK",NULL, 
  56. };
  57.  
  58. struct IntuiText TextProto[] =
  59. {
  60.     {2,1,JAM2,18,0,NULL,"Xmodem",NULL}, 
  61.     {2,1,JAM2,18,0,NULL,"Xmodem-CRC",NULL}, 
  62.     {2,1,JAM2,18,0,NULL,"WXmodem",NULL}, 
  63.     {2,1,JAM2,18,0,NULL,"Zmodem",NULL}, 
  64. };
  65.  
  66. struct Gadget GadgetOK =
  67. {
  68.     NULL,                    /* Next Gadget */
  69.     200, 80, 40, 10,
  70.     GADGHNONE,
  71.     RELVERIFY|ENDGADGET,
  72.     BOOLGADGET|REQGADGET,
  73.     NULL, NULL,
  74.     &TextOK,
  75.     NULL,
  76.     NULL,
  77.     1000,
  78.     NULL,
  79. };
  80.  
  81. struct Gadget GadgetXModem =
  82. {
  83.     &GadgetOK,                /* Next Gadget */
  84.     10, 20, 16, 9,
  85.     GADGHIMAGE|GADGIMAGE,
  86.     GADGIMMEDIATE|TOGGLESELECT,
  87.     BOOLGADGET|REQGADGET,
  88.     (APTR)&RadioOff, (APTR)&RadioOn,
  89.     &TextProto[0],
  90.     1,
  91.     NULL,
  92.     1002,
  93.     NULL,
  94. };
  95.  
  96. struct Gadget GadgetXModemCRC =
  97. {
  98.     &GadgetXModem,                /* Next Gadget */
  99.     10, 30, 16, 9,
  100.     GADGHIMAGE|GADGIMAGE,
  101.     GADGIMMEDIATE|TOGGLESELECT,
  102.     BOOLGADGET|REQGADGET,
  103.     (APTR)&RadioOff, (APTR)&RadioOn,
  104.     &TextProto[1],
  105.     1,
  106.     NULL,
  107.     1003,
  108.     NULL,
  109. };
  110.  
  111. struct Gadget GadgetWXModem =
  112. {
  113.     &GadgetXModemCRC,            /* Next Gadget */
  114.     10, 40, 16, 9,
  115.     GADGHIMAGE|GADGIMAGE|SELECTED,
  116.     GADGIMMEDIATE|TOGGLESELECT,
  117.     BOOLGADGET|REQGADGET,
  118.     (APTR)&RadioOff, (APTR)&RadioOn,
  119.     &TextProto[2],
  120.     1,
  121.     NULL,
  122.     1004,
  123.     NULL,
  124. };
  125.  
  126. struct Gadget GadgetZModem =
  127. {
  128.     &GadgetWXModem,                /* Next Gadget */
  129.     10, 50, 16, 9,
  130.     GADGHIMAGE|GADGIMAGE|GADGDISABLED,
  131.     GADGIMMEDIATE|TOGGLESELECT,
  132.     BOOLGADGET|REQGADGET,
  133.     (APTR)&RadioOff, (APTR)&RadioOn,
  134.     &TextProto[3],
  135.     1,
  136.     NULL,
  137.     1005,
  138.     NULL,
  139. };
  140.  
  141. char FileBuffer[32];
  142. struct StringInfo InfoFileName = 
  143. {
  144.     FileBuffer,
  145.     NULL,
  146.     0,
  147.     sizeof(FileBuffer),
  148.     0,
  149.     
  150.     0, 0, 0, 0, 0,                /* Intuition managed */
  151.     NULL,
  152.     0,
  153.     NULL,
  154. };
  155.  
  156. struct Gadget GadgetFileName =
  157. {
  158.     &GadgetOK,                /* Next Gadget */
  159.     100, 40, 200, 10,
  160.     GADGHCOMP,
  161.     GADGIMMEDIATE,
  162.     STRGADGET|REQGADGET,
  163.     NULL, NULL,
  164.     NULL,
  165.     NULL,
  166.     (APTR)&InfoFileName,
  167.     1001,
  168.     NULL,
  169. };
  170.  
  171. SHORT BorderCoords[2][5] = 
  172. {
  173.     5,5, 
  174.     REQWIDTH-5, 5,
  175.     REQWIDTH-5, REQHEIGHT-5,
  176.     5, REQHEIGHT-5,
  177.     5,5,
  178. };
  179.  
  180. struct Border ReqBorder =
  181. {
  182.     0,0,
  183.     0,0,JAM1,
  184.     5, &BorderCoords[0][0],
  185.     NULL,
  186. };
  187.  
  188. struct Requester FileReq =
  189. {
  190.     NULL,
  191.     100, 50, REQWIDTH, REQHEIGHT,
  192.     0, 0,
  193.     &GadgetOK,
  194.     &ReqBorder,
  195.     &ReqText,
  196.     NULL,
  197.     1,
  198.     NULL,
  199.     {NULL},
  200.     NULL,
  201.     NULL,
  202.     {NULL},
  203. };
  204.  
  205. void Exclude(struct Gadget *MyGadget, struct Requester *MyRequest
  206.             , struct Window *w)
  207. {
  208.     struct Gadget *GadgetList;
  209.     int cSelected;
  210.     
  211.     if (MyGadget->MutualExclude == 0)
  212.         return;
  213.     cSelected = 0;
  214.     GadgetList = MyRequest->ReqGadget;
  215.     while (GadgetList)
  216.     {
  217.         if ((GadgetList != MyGadget) &&
  218.             (MyGadget->MutualExclude == GadgetList->MutualExclude) &&
  219.             (GadgetList->Flags & SELECTED))
  220.         {
  221.             GadgetList->Flags &= ~SELECTED;
  222.             cSelected++;
  223.         }
  224.         GadgetList = GadgetList->NextGadget;
  225.     }
  226.     /* If nobody was selected then he must have turned off the only
  227.      * Selected gadget....Thats a nono
  228.      */
  229.     if (cSelected == 0)
  230.         MyGadget->Flags |= SELECTED;
  231.     RefreshGadgets(MyRequest->ReqGadget, w, MyRequest);
  232. }
  233.  
  234. int GetFile(struct Window *w, char **FileName)
  235. {
  236.     int Result, DoRequest;
  237.     struct Gadget *MyGadget;
  238.     struct IntuiMessage *message;
  239.     ULONG  class;
  240.     
  241.     Result = TRUE;
  242.     FileReq.ReqGadget = &GadgetFileName;
  243.     Request(&FileReq, w);
  244.     DoRequest = TRUE;
  245.     while (DoRequest)
  246.     {
  247.         Wait(1L << w->UserPort->mp_SigBit);
  248.         while (message = (struct IntuiMessage *)GetMsg(w->UserPort))
  249.         {
  250.             class = message->Class;
  251.             MyGadget = (struct Gadget *)message->IAddress;
  252.             ReplyMsg((struct Message *)message);
  253.             switch (class)
  254.             {
  255.                 case GADGETUP:
  256.                 case GADGETDOWN:
  257.                 Exclude(MyGadget, &FileReq, w);
  258.                 switch (MyGadget->GadgetID)
  259.                 {
  260.                     case 1000:   /* OK */
  261.                     DoRequest = FALSE;
  262.                     break;
  263.                 }
  264.                 break;
  265.                 
  266.                 case REQSET:
  267.                 ActivateGadget(&GadgetFileName, w, &FileReq);
  268.                 break;
  269.             }
  270.         }
  271.     }
  272.     *FileName = FileBuffer;
  273.     return Result;
  274. }
  275.  
  276. int Config(struct Window *w)
  277. {
  278.     int Result, DoRequest;
  279.     struct Gadget *MyGadget;
  280.     struct IntuiMessage *message;
  281.     ULONG  class;
  282.     
  283.     Result = TRUE;
  284.     FileReq.ReqGadget = &GadgetZModem;
  285.     Request(&FileReq, w);
  286.     DoRequest = TRUE;
  287.     while (DoRequest)
  288.     {
  289.         Wait(1L << w->UserPort->mp_SigBit);
  290.         while (message = (struct IntuiMessage *)GetMsg(w->UserPort))
  291.         {
  292.             class = message->Class;
  293.             MyGadget = (struct Gadget *)message->IAddress;
  294.             ReplyMsg((struct Message *)message);
  295.             switch (class)
  296.             {
  297.                 case GADGETUP:
  298.                 case GADGETDOWN:
  299.                 Exclude(MyGadget, &FileReq, w);
  300.                 switch (MyGadget->GadgetID)
  301.                 {
  302.                     case 1000:   /* OK */
  303.                     DoRequest = FALSE;
  304.                     break;
  305.                     
  306.                     case 1002:   /* X */
  307.                     ProtoInit = NAK;
  308.                     break;
  309.                     
  310.                     case 1003:   /* X-CRC */
  311.                     ProtoInit = 'C';
  312.                     break;
  313.                     
  314.                     case 1004:   /* WX */
  315.                     ProtoInit = 'W';
  316.                     break;
  317.                     
  318.                     case 1005:   /* Z */
  319.                     ProtoInit = 'Z';
  320.                     break;
  321.                 }
  322.                 break;
  323.                 
  324.                 case REQSET:
  325.                 break;
  326.             }
  327.         }
  328.     }
  329.     return Result;
  330. }
  331.  
  332.