home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term23_2.lha / Source_Code / termSource / TransferPanel.c < prev    next >
C/C++ Source or Header  |  1992-08-18  |  15KB  |  565 lines

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