home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / telecomm / terms / term-4.1-source.lha / Extras / Source / term-Source.lha / ASCIIPanel.c next >
Encoding:
C/C++ Source or Header  |  1994-07-31  |  9.0 KB  |  445 lines

  1. /*
  2. **    ASCIIPanel.c
  3. **
  4. **    User interface for built-in ASCII transfer routines
  5. **
  6. **    Copyright © 1990-1994 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_BYTES=1000,GAD_INFORMATION,GAD_CHARDELAY,GAD_LINEDELAY,
  13.         GAD_PACING,GAD_QUIET_TRANSFER,GAD_SKIP,GAD_ABORT
  14.     };
  15.  
  16. STATIC struct LayoutHandle    *ASCIIHandle;
  17. STATIC struct List         MessageList;
  18. STATIC LONG             MessageCount;
  19.  
  20. STATIC STRPTR __saveds
  21. ShowTime(struct Gadget *SomeGadget,WORD Level)
  22. {
  23.     return(LocaleSeconds(Level));
  24. }
  25.  
  26. struct Window * __regargs
  27. CreateASCIIWindow(BYTE Send)
  28. {
  29.     NewList(&MessageList);
  30.  
  31.     MessageCount = 0;
  32.  
  33.     if(ASCIIHandle = LT_CreateHandleTags(Window -> WScreen,
  34.         LH_LocaleHook,    &LocaleHook,
  35.     TAG_DONE))
  36.     {
  37.         struct Window *PanelWindow;
  38.  
  39.         LT_New(ASCIIHandle,
  40.             LA_Type,    VERTICAL_KIND,
  41.         TAG_DONE);
  42.         {
  43.             LT_New(ASCIIHandle,
  44.                 LA_Type,    VERTICAL_KIND,
  45.                 LA_LabelID,    MSG_V36_0000,
  46.             TAG_DONE);
  47.             {
  48.                 LT_New(ASCIIHandle,
  49.                     LA_Type,        BOX_KIND,
  50.                     LA_ID,            GAD_BYTES,
  51.                     LABX_FirstLabel,    MSG_ASCIIPANEL_BYTES_GAD,
  52.                     LABX_LastLabel,        MSG_ASCIIPANEL_LINES_GAD,
  53.                     LABX_ReserveSpace,    TRUE,
  54.                     LA_Chars,        50,
  55.                 TAG_DONE);
  56.  
  57.                 LT_New(ASCIIHandle,
  58.                     LA_Type,        LISTVIEW_KIND,
  59.                     LA_LabelID,        MSG_ASCIIPANEL_INFORMATION_GAD,
  60.                     LA_LabelPlace,        PLACE_LEFT,
  61.                     LA_ID,            GAD_INFORMATION,
  62.                     LA_Lines,        2,
  63.                     LALV_MaxGrowX,        70,
  64.                     LALV_MaxGrowY,        10,
  65.                     LALV_CursorKey,        TRUE,
  66.                     GTLV_ReadOnly,        TRUE,
  67.                     GTLV_Labels,        &MessageList,
  68.                 TAG_DONE);
  69.  
  70.                 LT_EndGroup(ASCIIHandle);
  71.             }
  72.  
  73.             if(Send)
  74.             {
  75.                 LT_New(ASCIIHandle,
  76.                     LA_Type,        VERTICAL_KIND,
  77.                     LA_LabelID,        MSG_V36_0003,
  78.                     LAGR_LastAttributes,    TRUE,
  79.                 TAG_DONE);
  80.                 {
  81.                     LT_New(ASCIIHandle,
  82.                         LA_Type,        SLIDER_KIND,
  83.                         LA_LabelID,        MSG_ASCIIPANEL_CHAR_DELAY_GAD,
  84.                         LA_ID,            GAD_CHARDELAY,
  85.                         GTSL_Min,        0,
  86.                         GTSL_Max,        10 * 100,
  87.                         LA_WORD,        &Config -> TransferConfig -> CharDelay,
  88.                         GTSL_LevelFormat,    "%s s",
  89.                         GTSL_DispFunc,        ShowTime,
  90.                     TAG_DONE);
  91.  
  92.                     LT_New(ASCIIHandle,
  93.                         LA_Type,        SLIDER_KIND,
  94.                         LA_LabelID,        MSG_ASCIIPANEL_LINE_DELAY_GAD,
  95.                         LA_ID,            GAD_LINEDELAY,
  96.                         GTSL_Min,        0,
  97.                         GTSL_Max,        10 * 100,
  98.                         LA_WORD,        &Config -> TransferConfig -> LineDelay,
  99.                         GTSL_LevelFormat,    "%s s",
  100.                         GTSL_DispFunc,        ShowTime,
  101.                     TAG_DONE);
  102.  
  103.                     LT_New(ASCIIHandle,
  104.                         LA_Type,        CYCLE_KIND,
  105.                         LA_LabelID,        MSG_ASCIIPANEL_TEXT_PACING_GAD,
  106.                         LA_ID,            GAD_PACING,
  107.                         LA_UBYTE,        &Config -> TransferConfig -> PacingMode,
  108.                         LACY_FirstLabel,    MSG_ASCIIPANEL_DIRECT_TXT,
  109.                         LACY_LastLabel,        MSG_ASCIIPANEL_KEYDELAY_TXT,
  110.                     TAG_DONE);
  111.  
  112.                     LT_New(ASCIIHandle,
  113.                         LA_Type,        CHECKBOX_KIND,
  114.                         LA_LabelID,        MSG_ASCIIPANEL_QUIET_TRANSFER_GAD,
  115.                         LA_ID,            GAD_QUIET_TRANSFER,
  116.                         LA_BYTE,        &Config -> TransferConfig -> QuietTransfer,
  117.                     TAG_DONE);
  118.  
  119.                     LT_EndGroup(ASCIIHandle);
  120.                 }
  121.  
  122.                 LT_New(ASCIIHandle,
  123.                     LA_Type,VERTICAL_KIND,
  124.                 TAG_DONE);
  125.                 {
  126.                     LT_New(ASCIIHandle,
  127.                         LA_Type,    XBAR_KIND,
  128.                         LAXB_FullSize,    TRUE,
  129.                     TAG_DONE);
  130.     
  131.                     LT_EndGroup(ASCIIHandle);
  132.                 }
  133.  
  134.                 LT_New(ASCIIHandle,LA_Type,HORIZONTAL_KIND,
  135.                     LAGR_SameSize,    TRUE,
  136.                     LAGR_Spread,    TRUE,
  137.                 TAG_DONE);
  138.                 {
  139.                     LT_New(ASCIIHandle,
  140.                         LA_Type,    BUTTON_KIND,
  141.                         LA_LabelID,    MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD,
  142.                         LA_ID,        GAD_SKIP,
  143.                         LABT_ExtraFat,    TRUE,
  144.                     TAG_DONE);
  145.     
  146.                     LT_New(ASCIIHandle,
  147.                         LA_Type,    BUTTON_KIND,
  148.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  149.                         LA_ID,        GAD_ABORT,
  150.                         LABT_ExtraFat,    TRUE,
  151.                     TAG_DONE);
  152.     
  153.                     LT_EndGroup(ASCIIHandle);
  154.                 }
  155.             }
  156.             else
  157.             {
  158.                 LT_New(ASCIIHandle,
  159.                     LA_Type,    VERTICAL_KIND,
  160.                 TAG_DONE);
  161.                 {
  162.                     LT_New(ASCIIHandle,LA_Type,XBAR_KIND,LAXB_FullSize,TRUE,TAG_DONE);
  163.  
  164.                     LT_EndGroup(ASCIIHandle);
  165.                 }
  166.  
  167.                 LT_New(ASCIIHandle,
  168.                     LA_Type,    HORIZONTAL_KIND,
  169.                 TAG_DONE);
  170.                 {
  171.                     LT_New(ASCIIHandle,
  172.                         LA_Type,    BUTTON_KIND,
  173.                         LA_LabelID,    MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD,
  174.                         LA_ID,        GAD_ABORT,
  175.                         LABT_ExtraFat,    TRUE,
  176.                     TAG_DONE);
  177.  
  178.                     LT_EndGroup(ASCIIHandle);
  179.                 }
  180.             }
  181.  
  182.             LT_EndGroup(ASCIIHandle);
  183.         }
  184.  
  185.         if(PanelWindow = LT_Layout(ASCIIHandle,Send ? LocaleString(MSG_ASCIIPANEL_SENDING_TXT) : LocaleString(MSG_ASCIIPANEL_RECEIVING_TXT),NULL,0,0,IDCMP_CLOSEWINDOW,0,
  186.             LAWN_HelpHook,        &GuideHook,
  187.             LAWN_Parent,        Window,
  188.             WA_DepthGadget,        TRUE,
  189.             WA_CloseGadget,        TRUE,
  190.             WA_DragBar,        TRUE,
  191.             WA_RMBTrap,        TRUE,
  192.         TAG_DONE))
  193.         {
  194.             ULONG    IntuiLock = LockIBase(NULL);
  195.             BYTE    Activate,Move;
  196.  
  197.             GuideContext(CONTEXT_ASCII);
  198.  
  199.             if(Config -> TerminalConfig -> AlertMode == ALERT_SCREEN || Config -> TerminalConfig -> AlertMode == ALERT_BEEP_SCREEN)
  200.                 Move = Activate = TRUE;
  201.             else
  202.             {
  203.                 if(IntuitionBase -> ActiveScreen == PanelWindow -> WScreen)
  204.                     Activate = TRUE;
  205.                 else
  206.                     Activate = FALSE;
  207.             }
  208.  
  209.             UnlockIBase(IntuiLock);
  210.  
  211.             if(Move)
  212.             {
  213.                 if(PanelWindow -> WScreen -> LeftEdge > 0)
  214.                 {
  215.                     if(PanelWindow -> WScreen -> TopEdge > 0)
  216.                         MoveScreen(PanelWindow -> WScreen,-PanelWindow -> WScreen -> LeftEdge,-PanelWindow -> WScreen -> TopEdge);
  217.                     else
  218.                         MoveScreen(PanelWindow -> WScreen,-PanelWindow -> WScreen -> LeftEdge,0);
  219.                 }
  220.                 else
  221.                 {
  222.                     if(PanelWindow -> WScreen -> TopEdge > 0)
  223.                         MoveScreen(PanelWindow -> WScreen,0,-PanelWindow -> WScreen -> TopEdge);
  224.                 }
  225.  
  226.                 WindowToFront(PanelWindow);
  227.  
  228.                 ScreenToFront(PanelWindow -> WScreen);
  229.             }
  230.  
  231.             if(Activate)
  232.                 ActivateWindow(PanelWindow);
  233.  
  234.             PushWindow(PanelWindow);
  235.  
  236.             return(PanelWindow);
  237.         }
  238.  
  239.         LT_DeleteHandle(ASCIIHandle);
  240.  
  241.         ASCIIHandle = NULL;
  242.     }
  243.  
  244.     return(NULL);
  245. }
  246.  
  247. VOID __regargs
  248. DeleteASCIIWindow(struct Window *Window,BYTE WaitForIt)
  249. {
  250.     if(WaitForIt && Window && ASCIIHandle)
  251.     {
  252.         struct IntuiMessage    *Message;
  253.         BOOLEAN             Done = FALSE;
  254.         ULONG             MsgClass,
  255.                      MsgQualifier;
  256.         UWORD             MsgCode;
  257.         struct Gadget        *MsgGadget;
  258.         WORD             i;
  259.  
  260.         for(i = GAD_CHARDELAY ; i <= GAD_SKIP ; i++)
  261.             LT_SetAttributes(ASCIIHandle,i,GA_Disabled,TRUE,TAG_DONE);
  262.  
  263.         do
  264.         {
  265.             if(Wait(PORTMASK(Window -> UserPort) | SIG_BREAK) & SIG_BREAK)
  266.                 break;
  267.  
  268.             while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  269.             {
  270.                 MsgClass    = Message -> Class;
  271.                 MsgQualifier    = Message -> Qualifier;
  272.                 MsgCode        = Message -> Code;
  273.                 MsgGadget    = (struct Gadget *)Message -> IAddress;
  274.  
  275.                 GT_ReplyIMsg(Message);
  276.  
  277.                 LT_HandleInput(ASCIIHandle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  278.  
  279.                 if(MsgClass == IDCMP_CLOSEWINDOW || (MsgClass == IDCMP_GADGETUP && MsgGadget -> GadgetID == GAD_ABORT))
  280.                     Done = TRUE;
  281.             }
  282.         }
  283.         while(!Done);
  284.     }
  285.  
  286.     if(Window && ASCIIHandle)
  287.         PopWindow();
  288.  
  289.     if(ASCIIHandle)
  290.     {
  291.         LT_DeleteHandle(ASCIIHandle);
  292.  
  293.         ASCIIHandle = NULL;
  294.     }
  295.  
  296.     if(MessageCount)
  297.     {
  298.         FreeList(&MessageList);
  299.  
  300.         MessageCount = 0;
  301.     }
  302. }
  303.  
  304. VOID __stdargs
  305. AddASCIIMessage(struct Window *Window,STRPTR Message,...)
  306. {
  307.     STATIC UBYTE __far TempBuffer[256];
  308.  
  309.     struct Node    *Node;
  310.     va_list         VarArgs;
  311.  
  312.     va_start(VarArgs,Message);
  313.     VSPrintf(TempBuffer,Message,VarArgs);
  314.     va_end(VarArgs);
  315.  
  316.     if(Node = CreateNode(TempBuffer))
  317.     {
  318.         if(MessageCount == 100)
  319.         {
  320.             FreeVecPooled(RemHead(&MessageList));
  321.  
  322.             MessageCount = 99;
  323.         }
  324.  
  325.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  326.             GTLV_Labels,~0,
  327.         TAG_DONE);
  328.  
  329.         AddTail(&MessageList,Node);
  330.  
  331.         LT_SetAttributes(ASCIIHandle,GAD_INFORMATION,
  332.             GTLV_Labels,        &MessageList,
  333.             GTLV_Top,        MessageCount,
  334.             GTLV_MakeVisible,    MessageCount,
  335.         TAG_DONE);
  336.  
  337.         MessageCount++;
  338.     }
  339. }
  340.  
  341. VOID __regargs
  342. UpdateASCIIWindow(struct Window *Window,LONG Bytes,LONG MaxBytes,LONG Lines)
  343. {
  344.     if(Bytes != -1)
  345.     {
  346.         UBYTE LocalBuffer[40];
  347.  
  348.         if(MaxBytes)
  349.         {
  350.             LONG Percent = (100 * Bytes) / MaxBytes;
  351.  
  352.             if(Percent > 100)
  353.                 Percent = 100;
  354.  
  355.             if(LocaleBase)
  356.                 SPrintf(LocalBuffer,"%lD (%ld%%)",Bytes,Percent);
  357.             else
  358.                 SPrintf(LocalBuffer,"%ld (%ld%%)",Bytes,Percent);
  359.         }
  360.         else
  361.             SPrintf(LocalBuffer,ConvNumber,Bytes);
  362.  
  363.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  364.             LABX_Index,    0,
  365.             LABX_Text,    LocalBuffer,
  366.         TAG_DONE);
  367.     }
  368.  
  369.     if(Lines != -1)
  370.     {
  371.         UBYTE LocalBuffer[40];
  372.  
  373.         SPrintf(LocalBuffer,ConvNumber,Lines);
  374.  
  375.         LT_SetAttributes(ASCIIHandle,GAD_BYTES,
  376.             LABX_Index,    1,
  377.             LABX_Text,    LocalBuffer,
  378.         TAG_DONE);
  379.     }
  380. }
  381.  
  382. BYTE __regargs
  383. HandleASCIIWindow(struct Window *Window)
  384. {
  385.     struct IntuiMessage    *Message;
  386.     ULONG             MsgClass,
  387.                  MsgQualifier;
  388.     UWORD             MsgCode;
  389.     struct Gadget        *MsgGadget;
  390.  
  391.     while(Message = (struct IntuiMessage *)GT_GetIMsg(Window -> UserPort))
  392.     {
  393.         MsgClass    = Message -> Class;
  394.         MsgQualifier    = Message -> Qualifier;
  395.         MsgCode        = Message -> Code;
  396.         MsgGadget    = (struct Gadget *)Message -> IAddress;
  397.  
  398.         GT_ReplyIMsg(Message);
  399.  
  400.         LT_HandleInput(ASCIIHandle,MsgQualifier,&MsgClass,&MsgCode,&MsgGadget);
  401.  
  402.         if(MsgClass == IDCMP_CLOSEWINDOW)
  403.             return(1);
  404.  
  405.         if(MsgClass == IDCMP_MOUSEMOVE)
  406.         {
  407.             SendSetup();
  408.  
  409.             ConfigChanged = TRUE;
  410.         }
  411.  
  412.         if(MsgClass == IDCMP_GADGETUP)
  413.         {
  414.             switch(MsgGadget -> GadgetID)
  415.             {
  416.                 case GAD_PACING:
  417.                 case GAD_CHARDELAY:
  418.                 case GAD_LINEDELAY:
  419.  
  420.                     ASCIISendSetup();
  421.  
  422.                     ConfigChanged = TRUE;
  423.  
  424.                     break;
  425.  
  426.                 case GAD_QUIET_TRANSFER:
  427.  
  428.                     ConfigChanged = TRUE;
  429.  
  430.                     break;
  431.  
  432.                 case GAD_ABORT:
  433.  
  434.                     return(1);
  435.  
  436.                 case GAD_SKIP:
  437.  
  438.                     return(2);
  439.             }
  440.         }
  441.     }
  442.  
  443.     return(0);
  444. }
  445.