home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d8xx / d832 / term.lha / Term / term-3.1-Source.lha / TransferPanel.c < prev    next >
C/C++ Source or Header  |  1993-02-18  |  16KB  |  628 lines

  1. /*
  2. **    TransferPanel.c
  3. **
  4. **    File transfer control panel support routines
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. STATIC struct Gadget    *GadgetList;
  13. STATIC BYTE         LastStatus = -1;
  14.  
  15. STATIC struct IBox     TransferBox = { -1, -1, -1, -1 };
  16.  
  17. STATIC struct Gadget *
  18. CreateAllGadgets(struct TextBox **BoxArray,struct TextBox **BoxList,struct Gadget **GadgetArray,struct Gadget **GadgetList)
  19. {
  20.     struct Gadget        *Gadget;
  21.     struct NewGadget     NewGadget;
  22.     UWORD             Counter,
  23.                  BoxCounter;
  24.     struct TextBox        *Box;
  25.     LONG             TotalLines = 10;
  26.  
  27.     FOREVER
  28.     {
  29.         SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  30.  
  31.         *GadgetList    = NULL;
  32.         *BoxList    = NULL;
  33.  
  34.         Counter        = 0;
  35.         BoxCounter    = 0;
  36.  
  37.         memset(&NewGadget,0,sizeof(struct NewGadget));
  38.  
  39.         if(Gadget = CreateContext(GadgetList))
  40.         {
  41.             LONG Width,Left;
  42.  
  43.             SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_TRANSFERPANEL_PROTOCOL_TXT,MSG_TRANSFERPANEL_ELAPSED_TIME_TXT));
  44.  
  45.             Width = SZ_BoxWidth(16) + INTERWIDTH + SZ_LeftOffsetDelta(MSG_TRANSFERPANEL_CHARACTERS_PER_SECOND_TXT,MSG_TRANSFERPANEL_NUMBER_OF_TIMEOUTS_TXT) + SZ_BoxWidth(16);
  46.  
  47.             if(Width > SZ_BoxWidth(50))
  48.                 SZ_SetWidth(Width);
  49.             else
  50.                 SZ_BoxWidth(50);
  51.  
  52.             BoxArray[BoxCounter++] = Box = SZ_CreateTextBox(BoxList,
  53.                 SZ_Lines,    1,
  54.                 SZ_AutoWidth,    TRUE,
  55.             TAG_DONE);
  56.  
  57.             SZ_SetBoxTitles(Box,LocaleString(MSG_TRANSFERPANEL_PROTOCOL_TXT),NULL);
  58.  
  59.             NewGadget . ng_GadgetText    = LocaleString(MSG_TRANSFERPANEL_INFORMATION_GAD);
  60.             NewGadget . ng_GadgetID        = Counter;
  61.             NewGadget . ng_Flags        = PLACETEXT_LEFT;
  62.  
  63.             GadgetArray[Counter++] = Gadget = CreateGadget(LISTVIEW_KIND,Gadget,&NewGadget,
  64.                 SZ_Adjust,    TRUE,
  65.                 SZ_AutoWidth,    TRUE,
  66.                 SZ_Lines,    TotalLines,
  67.  
  68.                 GTLV_ReadOnly,    TRUE,
  69.             TAG_DONE);
  70.  
  71.             BoxArray[BoxCounter++] = Box = SZ_CreateTextBox(BoxList,
  72.                 SZ_Lines,    3,
  73.                 SZ_AutoWidth,    TRUE,
  74.             TAG_DONE);
  75.  
  76.             SZ_SetBoxTitles(Box,LocaleString(MSG_TRANSFERPANEL_FILE_TXT),LocaleString(MSG_TRANSFERPANEL_NEXT_FILE_TXT),LocaleString(MSG_TRANSFERPANEL_SPACE_LEFT_TXT),NULL);
  77.  
  78.             BoxArray[BoxCounter++] = Box = SZ_CreateTextBox(BoxList,
  79.                 SZ_Lines,    6,
  80.                 SZ_Chars,    16,
  81.                 SZ_SaveY,    TRUE,
  82.             TAG_DONE);
  83.  
  84.             SZ_SetBoxTitles(Box,LocaleString(MSG_TRANSFERPANEL_FILE_SIZE_TXT),LocaleString(MSG_TRANSFERPANEL_FILE_SIZE_TRANSFERRED_TXT),LocaleString(MSG_TRANSFERPANEL_TOTAL_SIZE_TXT),LocaleString(MSG_TRANSFERPANEL_TOTAL_SIZE_TRANSFERRED_TXT),LocaleString(MSG_TRANSFERPANEL_FILES_TRANSFERRED_TXT),LocaleString(MSG_TRANSFERPANEL_BLOCKS_TRANSFERRED_TXT),NULL);
  85.  
  86.             Left = SZ_GetLeftEdge();
  87.  
  88.             BoxArray[BoxCounter++] = Box = SZ_CreateTextBox(BoxList,
  89.                 SZ_Lines,    6,
  90.                 SZ_Chars,    16,
  91.                 SZ_AlignRight,    TRUE,
  92.             TAG_DONE);
  93.  
  94.             SZ_SetBoxTitles(Box,LocaleString(MSG_TRANSFERPANEL_CHARACTERS_PER_SECOND_TXT),LocaleString(MSG_TRANSFERPANEL_CHARACTER_DELAY_TXT),LocaleString(MSG_TRANSFERPANEL_PACKET_DELAY_TXT),LocaleString(MSG_TRANSFERPANEL_PACKET_TYPE_TXT),LocaleString(MSG_TRANSFERPANEL_BLOCK_CHECK_TYPE_TXT),LocaleString(MSG_TRANSFERPANEL_BLOCK_SIZE_TXT),NULL);
  95.  
  96.             BoxArray[BoxCounter++] = Box = SZ_CreateTextBox(BoxList,
  97.                 SZ_Lines,    2,
  98.                 SZ_Chars,    16,
  99.                 SZ_UseLeft,    Left,
  100.                 SZ_AlignBottom,    TRUE,
  101.                 SZ_SaveY,    TRUE,
  102.             TAG_DONE);
  103.  
  104.             SZ_SetBoxTitles(Box,LocaleString(MSG_TRANSFERPANEL_ESTIMATED_TIME_TXT),LocaleString(MSG_TRANSFERPANEL_ELAPSED_TIME_TXT),NULL);
  105.  
  106.             BoxArray[BoxCounter] = Box = SZ_CreateTextBox(BoxList,
  107.                 SZ_Lines,    2,
  108.                 SZ_Chars,    16,
  109.                 SZ_AlignRight,    TRUE,
  110.             TAG_DONE);
  111.  
  112.             SZ_SetBoxTitles(Box,LocaleString(MSG_TRANSFERPANEL_NUMBER_OF_ERRORS_TXT),LocaleString(MSG_TRANSFERPANEL_NUMBER_OF_TIMEOUTS_TXT),NULL);
  113.  
  114.             SZ_SetWidth((SZ_GetWindowWidth() - 3 * InterWidth) / 2);
  115.  
  116.             NewGadget . ng_GadgetText    = LocaleString(MSG_TRANSFERPANEL_DATA_TRANSFERRED_GAD);
  117.             NewGadget . ng_GadgetID        = Counter;
  118.             NewGadget . ng_Flags        = PLACETEXT_ABOVE;
  119.  
  120.             GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  121.                 SZ_Adjust,    TRUE,
  122.                 SZ_AutoWidth,    TRUE,
  123.                 SZ_AlignLeft,    TRUE,
  124.                 SZ_AlignBottom,    TRUE,
  125.  
  126.                 GTTX_Border,    TRUE,
  127.             TAG_DONE);
  128.  
  129.             NewGadget . ng_GadgetText    = LocaleString(MSG_TRANSFERPANEL_TIME_TO_GO_GAD);
  130.             NewGadget . ng_GadgetID        = Counter;
  131.  
  132.             GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  133.                 SZ_Adjust,    TRUE,
  134.                 SZ_AutoWidth,    TRUE,
  135.                 SZ_AlignRight,    TRUE,
  136.                 SZ_UseTop,    SZ_GetTopEdge(),
  137.  
  138.                 GTTX_Border,    TRUE,
  139.             TAG_DONE);
  140.  
  141.             NewGadget . ng_GadgetText    = LocaleString(MSG_TRANSFERPANEL_ABORT_ENTIRE_TRANSFER_GAD);
  142.             NewGadget . ng_GadgetID        = Counter;
  143.             NewGadget . ng_Flags        = 0;
  144.  
  145.             GadgetArray[Counter++] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  146.                 SZ_AlignExtra,    TRUE,
  147.                 SZ_Adjust,    TRUE,
  148.                 SZ_AutoWidth,    TRUE,
  149.                 SZ_AlignLeft,    TRUE,
  150.                 SZ_AlignBottom,    TRUE,
  151.             TAG_DONE);
  152.  
  153.             NewGadget . ng_GadgetText    = LocaleString(MSG_TRANSFERPANEL_SKIP_CURRENT_FILE_GAD);
  154.             NewGadget . ng_GadgetID        = Counter;
  155.  
  156.             GadgetArray[Counter] = Gadget = CreateGadget(BUTTON_KIND,Gadget,&NewGadget,
  157.                 SZ_Adjust,    TRUE,
  158.                 SZ_AutoWidth,    TRUE,
  159.                 SZ_AlignRight,    TRUE,
  160.             TAG_DONE);
  161.         }
  162.         else
  163.             return(Gadget);
  164.  
  165.         if(SZ_GetWindowHeight() > Window -> Height - (Window -> BorderTop + Window -> BorderBottom) && TotalLines > 2)
  166.         {
  167.             TotalLines--;
  168.  
  169.             if(*GadgetList)
  170.             {
  171.                 FreeGadgets(*GadgetList);
  172.  
  173.                 *GadgetList = NULL;
  174.             }
  175.  
  176.             if(*BoxList)
  177.             {
  178.                 SZ_FreeBoxes(*BoxList);
  179.  
  180.                 *BoxList = NULL;
  181.             }
  182.  
  183.             SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  184.         }
  185.         else
  186.             return(Gadget);
  187.     }
  188. }
  189.  
  190.     /* GhostStats(struct Gadget *Gadget):
  191.      *
  192.      *    Ghost the percentage bars.
  193.      */
  194.  
  195. VOID
  196. GhostStats(struct Gadget *Gadget)
  197. {
  198.     struct RastPort    *RPort = TransferWindow -> RPort;
  199.     BYTE         FgPen = ReadAPen(RPort);
  200.  
  201.     SetAPen(RPort,RenderPens[1]);
  202.  
  203.     SetAfPt(RPort,(UWORD *)&Crosshatch,1);
  204.  
  205.     RectFill(RPort,Gadget -> LeftEdge + 2,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Gadget -> Width - 3,Gadget -> TopEdge + Gadget -> Height - 2);
  206.  
  207.     SetAPen(RPort,FgPen);
  208.  
  209.     SetAfPt(RPort,NULL,0);
  210. }
  211.  
  212.     /* ShowStats(struct Gadget *Gadget,LONG Value,LONG Max):
  213.      *
  214.      *    Show the percentage bars.
  215.      */
  216.  
  217. VOID
  218. ShowStats(struct Gadget *Gadget,LONG Value,LONG Max)
  219. {
  220.     if(TransferWindow)
  221.     {
  222.         struct RastPort    *RPort = TransferWindow -> RPort;
  223.         LONG         MaxWidth = Gadget -> Width - 4,Width;
  224.  
  225.         if(Max < 1)
  226.             Max = 0;
  227.  
  228.         if(Value > Max)
  229.             Value = Max;
  230.  
  231.         if((Width = (MaxWidth * Value) / Max) > 0)
  232.         {
  233.             BYTE FgPen = ReadAPen(RPort);
  234.  
  235.             if(Width != MaxWidth)
  236.             {
  237.                 SetAPen(RPort,0);
  238.  
  239.                 RectFill(RPort,Gadget -> LeftEdge + 2 + Width - 1,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Gadget -> Width - 3,Gadget -> TopEdge + Gadget -> Height - 2);
  240.             }
  241.  
  242.             SetAPen(RPort,RenderPens[3]);
  243.  
  244.             RectFill(RPort,Gadget -> LeftEdge + 2,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Width + 1,Gadget -> TopEdge + Gadget -> Height - 2);
  245.  
  246.             SetAPen(RPort,FgPen);
  247.         }
  248.         else
  249.         {
  250.             BYTE FgPen = ReadAPen(RPort);
  251.  
  252.             SetAPen(RPort,0);
  253.  
  254.             RectFill(RPort,Gadget -> LeftEdge + 2,Gadget -> TopEdge + 1,Gadget -> LeftEdge + Gadget -> Width - 3,Gadget -> TopEdge + Gadget -> Height - 2);
  255.  
  256.             SetAPen(RPort,FgPen);
  257.         }
  258.     }
  259. }
  260.  
  261.     /* ShowString(struct Gadget *Gadget,STRPTR String,...):
  262.      *
  263.      *    Display percentage information.
  264.      */
  265.  
  266. VOID __stdargs
  267. ShowString(struct Gadget *Gadget,STRPTR String,...)
  268. {
  269.     if(TransferWindow)
  270.     {
  271.         va_list         VarArgs;
  272.         WORD         Len;
  273.         UWORD         Width;
  274.         struct RastPort    *RPort = TransferWindow -> RPort;
  275.         LONG         FgPen = ReadAPen(RPort),
  276.                  DrawMode = ReadDrMd(RPort);
  277.         struct TextFont    *Font;
  278.  
  279.         RPort        = TransferWindow -> RPort;
  280.         FgPen        = ReadAPen(RPort),
  281.         DrawMode    = ReadDrMd(RPort);
  282.         Font        = RPort -> Font;
  283.  
  284.         if(Font != UserTextFont);
  285.             SetFont(RPort,UserTextFont);
  286.  
  287.         va_start(VarArgs,String);
  288.         VSPrintf(SharedBuffer,String,VarArgs);
  289.         va_end(VarArgs);
  290.  
  291.         Len    = strlen(SharedBuffer);
  292.         Width    = TextLength(RPort,SharedBuffer,Len);
  293.  
  294.         Move(RPort,Gadget -> LeftEdge + 2 + (Gadget -> Width - 4 - Width) / 2,Gadget -> TopEdge + 1 + (Gadget -> Height - 2 - UserFontHeight) / 2 + UserFontBase);
  295.  
  296.         SetAPen(RPort,DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN]);
  297.  
  298.         if(RenderPens[3] == DrawInfo -> dri_Pens[HIGHLIGHTTEXTPEN])
  299.             SetDrMd(RPort,JAM1 | COMPLEMENT);
  300.         else
  301.             SetDrMd(RPort,JAM1);
  302.  
  303.         Text(RPort,SharedBuffer,Len);
  304.  
  305.         SetAPen(RPort,FgPen);
  306.         SetDrMd(RPort,DrawMode);
  307.  
  308.         if(Font != UserTextFont);
  309.             SetFont(RPort,Font);
  310.     }
  311. }
  312.  
  313.     /* AddTransferInfo(STRPTR Message,...):
  314.      *
  315.      *    Add another entry to the transfer information list.
  316.      */
  317.  
  318. VOID __stdargs
  319. AddTransferInfo(STRPTR Message,...)
  320. {
  321.     struct Node *Node;
  322.  
  323.     if(Node = AllocVec(sizeof(struct Node) + strlen(Message) + 51,MEMF_ANY|MEMF_CLEAR))
  324.     {
  325.         va_list VarArgs;
  326.  
  327.         Node -> ln_Name = (STRPTR)(Node + 1);
  328.  
  329.         va_start(VarArgs,Message);
  330.         VSPrintf(Node -> ln_Name,Message,VarArgs);
  331.         va_end(VarArgs);
  332.  
  333.         GT_SetGadgetAttrs(TransferGadgetArray[GAD_TRANSFER_INFORMATION_LIST],TransferWindow,NULL,
  334.             GTLV_Labels,    ~0,
  335.         TAG_DONE);
  336.  
  337.         AddHead(&TransferInfoList,Node);
  338.  
  339.         GT_SetGadgetAttrs(TransferGadgetArray[GAD_TRANSFER_INFORMATION_LIST],TransferWindow,NULL,
  340.             GTLV_Labels,    &TransferInfoList,
  341.         TAG_DONE);
  342.     }
  343. }
  344.  
  345.     /* RefreshTransferWindow():
  346.      *
  347.      *    Refresh the entire transfer window.
  348.      */
  349.  
  350. VOID
  351. RefreshTransferWindow()
  352. {
  353.     SZ_DrawBoxes(TransferWindow -> RPort,TransferBoxList);
  354.  
  355.     GT_RefreshWindow(TransferWindow,NULL);
  356.  
  357.     GhostStats(TransferGadgetArray[GAD_TRANSFER_PERCENT]);
  358.     GhostStats(TransferGadgetArray[GAD_TRANSFER_TIME]);
  359. }
  360.  
  361.     /* TransferPanel(STRPTR Title):
  362.      *
  363.      *    Open the transfer window.
  364.      */
  365.  
  366. BYTE
  367. TransferPanel(STRPTR Title)
  368. {
  369.     if(TransferWindow)
  370.         return(TRUE);
  371.     else
  372.     {
  373.         TransferFailed = TransferAborted = FALSE;
  374.  
  375.         if(Status != STATUS_DOWNLOAD && Status != STATUS_UPLOAD)
  376.         {
  377.             LastStatus = Status;
  378.  
  379.             Status = STATUS_DOWNLOAD;
  380.         }
  381.         else
  382.             LastStatus = -1;
  383.  
  384.         if(CreateAllGadgets(TransferBoxArray,&TransferBoxList,TransferGadgetArray,&GadgetList))
  385.         {
  386.             TransferBox . Width    = SZ_GetWindowWidth();
  387.             TransferBox . Height    = Window -> WScreen -> WBorTop + Window -> WScreen -> Font -> ta_YSize + 1;
  388.  
  389.             TransferBox . Left    = GetScreenLeft(Window) + (GetScreenWidth(Window) - SZ_GetWindowWidth()) / 2;
  390.             TransferBox . Top    = GetScreenTop(Window) + (GetScreenHeight(Window) - SZ_GetWindowHeight()) / 2;
  391.  
  392.             if(TransferWindow = OpenWindowTags(NULL,
  393.                 WA_Left,        TransferBox . Left,
  394.                 WA_Top,            TransferBox . Top,
  395.                 WA_Width,        SZ_GetWindowWidth(),
  396.                 WA_Height,        SZ_GetWindowHeight(),
  397.  
  398.                 WA_DragBar,        TRUE,
  399.                 WA_DepthGadget,        TRUE,
  400.                 WA_CloseGadget,        TRUE,
  401.                 WA_RMBTrap,        TRUE,
  402.                 WA_NoCareRefresh,    TRUE,
  403.                 WA_SmartRefresh,    TRUE,
  404.                 WA_Zoom,        &TransferBox,
  405.  
  406.                 WA_CustomScreen,    Window -> WScreen,
  407.  
  408.                 WA_IDCMP,        IDCMP_CLOSEWINDOW | IDCMP_RAWKEY | IDCMP_VANILLAKEY | IDCMP_NEWSIZE | BUTTONIDCMP | LISTVIEWIDCMP | TEXTIDCMP,
  409.  
  410.                 WA_Title,        Title,
  411.             TAG_DONE))
  412.             {
  413.                 ULONG    IntuiLock = LockIBase(NULL);
  414.                 BYTE    Activate,Move;
  415.  
  416.                 GuideContext(CONTEXT_TRANSFER);
  417.  
  418.                 if(Config -> TerminalConfig -> AlertMode == ALERT_SCREEN || Config -> TerminalConfig -> AlertMode == ALERT_BEEP_SCREEN)
  419.                     Move = Activate = TRUE;
  420.                 else
  421.                 {
  422.                     if(IntuitionBase -> ActiveScreen == TransferWindow -> WScreen)
  423.                         Activate = TRUE;
  424.                     else
  425.                         Activate = FALSE;
  426.                 }
  427.  
  428.                 UnlockIBase(IntuiLock);
  429.  
  430.                 if(Move)
  431.                 {
  432.                     if(TransferWindow -> WScreen -> LeftEdge > 0)
  433.                     {
  434.                         if(TransferWindow -> WScreen -> TopEdge > 0)
  435.                             MoveScreen(TransferWindow -> WScreen,-TransferWindow -> WScreen -> LeftEdge,-TransferWindow -> WScreen -> TopEdge);
  436.                         else
  437.                             MoveScreen(TransferWindow -> WScreen,-TransferWindow -> WScreen -> LeftEdge,0);
  438.                     }
  439.                     else
  440.                     {
  441.                         if(TransferWindow -> WScreen -> TopEdge > 0)
  442.                             MoveScreen(TransferWindow -> WScreen,0,-TransferWindow -> WScreen -> TopEdge);
  443.                     }
  444.  
  445.                     WindowToFront(TransferWindow);
  446.  
  447.                     ScreenToFront(TransferWindow -> WScreen);
  448.                 }
  449.  
  450.                 if(Activate)
  451.                     ActivateWindow(TransferWindow);
  452.  
  453.                 PushWindow(TransferWindow);
  454.  
  455.                 AddGList(TransferWindow,GadgetList,(UWORD)-1,(UWORD)-1,NULL);
  456.                 RefreshGList(GadgetList,TransferWindow,NULL,(UWORD)-1);
  457.  
  458.                 RefreshTransferWindow();
  459.  
  460.                     /* Protocol */
  461.  
  462.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_1],        0,LocaleString(MSG_GLOBAL_UNKNOWN_TXT));
  463.  
  464.                     /* File, Next file, Space left */
  465.  
  466.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_2],        0,"-");
  467.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_2],        1,"-");
  468.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_2],        2,"-");
  469.  
  470.                     /* File size, Transferred, Total size, Transferred, Files transferred, Blocks transferred */
  471.  
  472.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT1],    0,"-");
  473.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT1],    1,"-");
  474.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT1],    2,"-");
  475.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT1],    3,"-");
  476.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT1],    4,"-");
  477.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT1],    5,"-");
  478.  
  479.                     /* Characters per second, Character delay, Packet delay, Packet type, Block check type, Block size */
  480.  
  481.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT1],    0,"-");
  482.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT1],    1,"-");
  483.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT1],    2,"-");
  484.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT1],    3,"-");
  485.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT1],    4,"-");
  486.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT1],    5,"-");
  487.  
  488.                     /* Estimated time, Elapsed time. */
  489.  
  490.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT2],    0,"-");
  491.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_LEFT2],    1,"-");
  492.  
  493.                     /* Number of errors, Number of timeouts. */
  494.  
  495.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT2],    0,"-");
  496.                 SZ_PrintLine(TransferWindow -> RPort,TransferBoxArray[BOX_TRANSFER_RIGHT2],    1,"-");
  497.  
  498.                 return(TRUE);
  499.             }
  500.         }
  501.  
  502.         return(FALSE);
  503.     }
  504. }
  505.  
  506.     /* DeleteTransferPanel(BYTE WaitForPrompt):
  507.      *
  508.      *    Close the transfer window.
  509.      */
  510.  
  511. VOID
  512. DeleteTransferPanel(BYTE WaitForPrompt)
  513. {
  514.         /* Wait for user to close the window? */
  515.  
  516.     if(WaitForPrompt && TransferWindow && GadgetList)
  517.     {
  518.         struct IntuiMessage    *Message;
  519.         ULONG             IClass,
  520.                      ICode;
  521.         struct Gadget        *IGadget;
  522.         BYTE             Done = FALSE;
  523.  
  524.         GT_SetGadgetAttrs(TransferGadgetArray[GAD_TRANSFER_SKIP],TransferWindow,NULL,
  525.             GA_Disabled,    TRUE,
  526.         TAG_DONE);
  527.  
  528.         WakeUp(TransferWindow);
  529.  
  530.         do
  531.         {
  532.             WaitPort(TransferWindow -> UserPort);
  533.  
  534.             while(Message = GT_GetIMsg(TransferWindow -> UserPort))
  535.             {
  536.                 IClass    = Message -> Class;
  537.                 ICode    = Message -> Code;
  538.                 IGadget    = Message -> IAddress;
  539.  
  540.                 GT_ReplyIMsg(Message);
  541.  
  542.                 KeySelect(TransferGadgetArray,4,ICode,TransferWindow,&IGadget,&IClass,&ICode);
  543.  
  544.                 switch(IClass)
  545.                 {
  546.                     case IDCMP_NEWSIZE:
  547.  
  548.                         if(!(TransferWindow -> Flags & WFLG_ZOOMED))
  549.                             RefreshTransferWindow();
  550.  
  551.                         break;
  552.  
  553.                     case IDCMP_CLOSEWINDOW:
  554.  
  555.                         Done = TRUE;
  556.  
  557.                         break;
  558.  
  559.                     case IDCMP_VANILLAKEY:
  560.  
  561.                         if(ICode == ESC)
  562.                             Done = TRUE;
  563.  
  564.                         break;
  565.  
  566.                     case IDCMP_GADGETUP:
  567.  
  568.                         if(IGadget -> GadgetID == GAD_TRANSFER_ABORT)
  569.                             Done = TRUE;
  570.  
  571.                         break;
  572.                 }
  573.             }
  574.         }
  575.         while(!Done);
  576.     }
  577.  
  578.     if(FileTransferInfo)
  579.     {
  580.         FreeFileTransferInfo(FileTransferInfo);
  581.  
  582.         FileTransferInfo = NULL;
  583.     }
  584.  
  585.     if(LastStatus != -1)
  586.         Status = LastStatus;
  587.  
  588.     LastStatus = -1;
  589.  
  590.     if(TransferWindow)
  591.     {
  592.         PopWindow();
  593.  
  594.         CloseWindow(TransferWindow);
  595.  
  596.         TransferWindow = NULL;
  597.     }
  598.  
  599.     if(GadgetList)
  600.     {
  601.         FreeGadgets(GadgetList);
  602.  
  603.         GadgetList = NULL;
  604.     }
  605.  
  606.     if(TransferBoxList)
  607.     {
  608.         SZ_FreeBoxes(TransferBoxList);
  609.  
  610.         TransferBoxList = NULL;
  611.     }
  612.  
  613.     if(TransferInfoList . lh_Head -> ln_Succ)
  614.     {
  615.         struct Node    *Node = TransferInfoList . lh_Head,
  616.                 *NextNode;
  617.  
  618.         while(NextNode = Node -> ln_Succ)
  619.         {
  620.             Remove(Node);
  621.  
  622.             FreeVec(Node);
  623.  
  624.             Node = NextNode;
  625.         }
  626.     }
  627. }
  628.