home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / comm / term33so.lha / termStatusWindow.c < prev    next >
C/C++ Source or Header  |  1993-04-30  |  9KB  |  382 lines

  1. /*
  2. **    termStatusWindow.c
  3. **
  4. **    Status information window support routines
  5. **
  6. **    Copyright © 1990-1993 by Olaf `Olsen' Barthel & MXM
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_SESSION,GAD_BYTES_IN,GAD_BYTES_OUT,GAD_CONNECT_STRING,GAD_BBS_NAME,GAD_BBS_NUMBER,
  13.         GAD_BBS_COMMENT,GAD_BBS_USER,GAD_SCREEN_SIZE,GAD_PORT_NAME,GAD_BUFFER_SIZE,GAD_MEMORY };
  14.  
  15. STATIC struct Gadget    *InfoGadgetArray[GAD_MEMORY + 1];
  16. STATIC struct Gadget    *InfoGadgetList;
  17. STATIC LONG         InfoWindowLeft    = -1,
  18.              InfoWindowTop    = -1;
  19.  
  20. STATIC struct Gadget *
  21. CreateAllGadgets(struct Gadget **GadgetArray,struct Gadget **GadgetList)
  22. {
  23.     struct Gadget        *Gadget;
  24.     struct NewGadget     NewGadget;
  25.     UWORD             Counter = 0;
  26.  
  27.     SZ_SizeSetup(Window -> WScreen,&UserFont,TRUE);
  28.  
  29.     memset(&NewGadget,0,sizeof(struct NewGadget));
  30.  
  31.     if(Gadget = CreateContext(GadgetList))
  32.     {
  33.         UBYTE        DummyBuffer[256],
  34.                 Time[30],
  35.                 Date[30];
  36.         struct DateTime    DateTime;
  37.         LONG        Width,DummyWidth;
  38.  
  39.         DateTime . dat_Stamp    = SessionStart;
  40.         DateTime . dat_Format    = FORMAT_DOS;
  41.         DateTime . dat_Flags    = 0;
  42.         DateTime . dat_StrDay    = NULL;
  43.         DateTime . dat_StrDate    = Date;
  44.         DateTime . dat_StrTime    = Time;
  45.  
  46.         if(DateToStr(&DateTime))
  47.             SPrintf(DummyBuffer,"%s %s",Date,Time);
  48.         else
  49.             strcpy(DummyBuffer,"-");
  50.  
  51.         SZ_AddLeftOffset(SZ_LeftOffsetDelta(MSG_INFOWINDOW_SESSION_START_GAD,MSG_INFOWINDOW_FREE_MEMORY_GAD));
  52.  
  53.         Width = strlen(BaudBuffer);
  54.  
  55.         if(Width > 60)
  56.             Width = 60;
  57.  
  58.         DummyWidth = strlen(DummyBuffer);
  59.  
  60.         if(DummyWidth > Width)
  61.             Width = DummyWidth;
  62.  
  63.         SZ_SetWidth(SZ_Width(TEXT_KIND,NULL,Width,NULL));
  64.  
  65.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_SESSION_START_GAD);
  66.         NewGadget . ng_GadgetID        = Counter;
  67.         NewGadget . ng_Flags        = 0;
  68.  
  69.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  70.             SZ_Adjust,        TRUE,
  71.             SZ_AutoWidth,        TRUE,
  72.  
  73.             GTTX_Text,        DummyBuffer,
  74.             GTTX_CopyText,        TRUE,
  75.             GTTX_Border,        TRUE,
  76.         TAG_DONE);
  77.  
  78.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BYTES_RECEIVED_GAD);
  79.         NewGadget . ng_GadgetID        = Counter;
  80.  
  81.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  82.             SZ_Adjust,        TRUE,
  83.             SZ_AutoWidth,        TRUE,
  84.             SZ_AlignExtra,        TRUE,
  85.  
  86.             GTTX_Border,        TRUE,
  87.         TAG_DONE);
  88.  
  89.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BYTES_SENT_GAD);
  90.         NewGadget . ng_GadgetID        = Counter;
  91.  
  92.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  93.             SZ_Adjust,        TRUE,
  94.             SZ_AutoWidth,        TRUE,
  95.  
  96.             GTTX_Border,        TRUE,
  97.         TAG_DONE);
  98.  
  99.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_CONNECTION_MESSAGE_GAD);
  100.         NewGadget . ng_GadgetID        = Counter;
  101.  
  102.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  103.             SZ_Adjust,        TRUE,
  104.             SZ_AutoWidth,        TRUE,
  105.  
  106.             GTTX_Text,        BaudBuffer[0] ? BaudBuffer : (STRPTR)"-",
  107.             GTTX_CopyText,        TRUE,
  108.             GTTX_Border,        TRUE,
  109.         TAG_DONE);
  110.  
  111.  
  112.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BBS_NAME_GAD);
  113.         NewGadget . ng_GadgetID        = Counter;
  114.  
  115.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  116.             SZ_Adjust,        TRUE,
  117.             SZ_AutoWidth,        TRUE,
  118.             SZ_AlignExtra,        TRUE,
  119.  
  120.             GTTX_Text,        CurrentBBSName[0] ? CurrentBBSName : (STRPTR)"-",
  121.             GTTX_CopyText,        TRUE,
  122.             GTTX_Border,        TRUE,
  123.         TAG_DONE);
  124.  
  125.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BBS_PHONE_NUMBER_GAD);
  126.         NewGadget . ng_GadgetID        = Counter;
  127.  
  128.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  129.             SZ_Adjust,        TRUE,
  130.             SZ_AutoWidth,        TRUE,
  131.  
  132.             GTTX_Text,        CurrentBBSNumber[0] ? CurrentBBSNumber : (STRPTR)"-",
  133.             GTTX_CopyText,        TRUE,
  134.             GTTX_Border,        TRUE,
  135.         TAG_DONE);
  136.  
  137.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BBS_COMMENT_GAD);
  138.         NewGadget . ng_GadgetID        = Counter;
  139.  
  140.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  141.             SZ_Adjust,        TRUE,
  142.             SZ_AutoWidth,        TRUE,
  143.  
  144.             GTTX_Text,        CurrentBBSComment[0] ? CurrentBBSComment : (STRPTR)"-",
  145.             GTTX_CopyText,        TRUE,
  146.             GTTX_Border,        TRUE,
  147.         TAG_DONE);
  148.  
  149.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BBS_USER_NAME_GAD);
  150.         NewGadget . ng_GadgetID        = Counter;
  151.  
  152.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  153.             SZ_Adjust,        TRUE,
  154.             SZ_AutoWidth,        TRUE,
  155.  
  156.             GTTX_Text,        UserName[0] ? UserName : (STRPTR)"-",
  157.             GTTX_CopyText,        TRUE,
  158.             GTTX_Border,        TRUE,
  159.         TAG_DONE);
  160.  
  161.  
  162.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_SCREEN_SIZE_GAD);
  163.         NewGadget . ng_GadgetID        = Counter;
  164.  
  165.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  166.             SZ_Adjust,        TRUE,
  167.             SZ_AutoWidth,        TRUE,
  168.             SZ_AlignExtra,        TRUE,
  169.  
  170.             GTTX_Border,        TRUE,
  171.         TAG_DONE);
  172.  
  173.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_AREXX_PORT_NAME_GAD);
  174.         NewGadget . ng_GadgetID        = Counter;
  175.  
  176.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  177.             SZ_Adjust,        TRUE,
  178.             SZ_AutoWidth,        TRUE,
  179.             SZ_AlignExtra,        TRUE,
  180.  
  181. #ifdef USE_AREXX
  182.             GTTX_Text,        RexxPortName,
  183. #else
  184.             GTTX_Text,        "-",
  185. #endif    /* USE_AREXX */
  186.             GTTX_Border,        TRUE,
  187.         TAG_DONE);
  188.  
  189.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_BUFFER_SIZE_GAD);
  190.         NewGadget . ng_GadgetID        = Counter;
  191.  
  192.         GadgetArray[Counter++] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  193.             SZ_Adjust,        TRUE,
  194.             SZ_AutoWidth,        TRUE,
  195.             SZ_AlignExtra,        TRUE,
  196.  
  197.             GTTX_Border,        TRUE,
  198.         TAG_DONE);
  199.  
  200.         NewGadget . ng_GadgetText    = LocaleString(MSG_INFOWINDOW_FREE_MEMORY_GAD);
  201.         NewGadget . ng_GadgetID        = Counter;
  202.  
  203.         GadgetArray[Counter] = Gadget = CreateGadget(TEXT_KIND,Gadget,&NewGadget,
  204.             SZ_Adjust,        TRUE,
  205.             SZ_AutoWidth,        TRUE,
  206.  
  207.             GTTX_Border,        TRUE,
  208.         TAG_DONE);
  209.     }
  210.  
  211.     return(Gadget);
  212. }
  213.  
  214.     /* RefreshInfoWindow():
  215.      *
  216.      *    Refresh, i.e. redraw, the contents of the info window.
  217.      */
  218.  
  219. VOID
  220. RefreshInfoWindow()
  221. {
  222.     if(InfoWindow)
  223.     {
  224.         UBYTE DummyBuffer[256];
  225.  
  226.         if(LocaleBase)
  227.             SPrintf(DummyBuffer,"%lD",BytesIn);
  228.         else
  229.             SPrintf(DummyBuffer,"%ld",BytesIn);
  230.  
  231.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BYTES_IN],InfoWindow,NULL,
  232.             GTTX_Text,    DummyBuffer,
  233.         TAG_DONE);
  234.  
  235.         if(LocaleBase)
  236.             SPrintf(DummyBuffer,"%lD",BytesOut);
  237.         else
  238.             SPrintf(DummyBuffer,"%ld",BytesOut);
  239.  
  240.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BYTES_OUT],InfoWindow,NULL,
  241.             GTTX_Text,    DummyBuffer,
  242.         TAG_DONE);
  243.  
  244.         if(XEmulatorBase && XEM_IO)
  245.         {
  246.             if(XEmulatorBase -> lib_Version >= 4)
  247.             {
  248.                 ULONG Result = XEmulatorInfo(XEM_IO,XEMI_CONSOLE_DIMENSIONS);
  249.  
  250.                 SPrintf(DummyBuffer,"%ld × %ld",XEMI_EXTRACT_COLUMNS(Result),XEMI_EXTRACT_LINES(Result));
  251.             }
  252.             else
  253.                 strcpy(DummyBuffer,"???");
  254.         }
  255.         else
  256.             SPrintf(DummyBuffer,"%ld × %ld",LastColumn + 1,LastLine + 1);
  257.  
  258.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_SCREEN_SIZE],InfoWindow,NULL,
  259.             GTTX_Text,    DummyBuffer,
  260.         TAG_DONE);
  261.  
  262.         if(LocaleBase)
  263.             SPrintf(DummyBuffer,"%lD",BufferSpace);
  264.         else
  265.             SPrintf(DummyBuffer,"%ld",BufferSpace);
  266.  
  267.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BUFFER_SIZE],InfoWindow,NULL,
  268.             GTTX_Text,    DummyBuffer,
  269.         TAG_DONE);
  270.  
  271.         if(LocaleBase)
  272.             SPrintf(DummyBuffer,"%lD",AvailMem(MEMF_ANY));
  273.         else
  274.             SPrintf(DummyBuffer,"%ld",AvailMem(MEMF_ANY));
  275.  
  276.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_MEMORY],InfoWindow,NULL,
  277.             GTTX_Text,    DummyBuffer,
  278.         TAG_DONE);
  279.  
  280.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_NAME],InfoWindow,NULL,
  281.             GTTX_Text,    CurrentBBSName[0] ? CurrentBBSName : (STRPTR)"-",
  282.         TAG_DONE);
  283.  
  284.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_NUMBER],InfoWindow,NULL,
  285.             GTTX_Text,    CurrentBBSNumber[0] ? CurrentBBSNumber : (STRPTR)"-",
  286.         TAG_DONE);
  287.  
  288.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_COMMENT],InfoWindow,NULL,
  289.             GTTX_Text,    CurrentBBSComment[0] ? CurrentBBSComment : (STRPTR)"-",
  290.         TAG_DONE);
  291.  
  292.         GT_SetGadgetAttrs(InfoGadgetArray[GAD_BBS_USER],InfoWindow,NULL,
  293.             GTTX_Text,    UserName[0] ? UserName : (STRPTR)"-",
  294.         TAG_DONE);
  295.     }
  296. }
  297.  
  298.     /* CloseInfoWindow():
  299.      *
  300.      *    Close the info window.
  301.      */
  302.  
  303. VOID
  304. CloseInfoWindow()
  305. {
  306.     CheckItem(MEN_STATUS_WINDOW,FALSE);
  307.  
  308.     if(InfoWindow)
  309.     {
  310.         InfoWindowLeft    = InfoWindow -> LeftEdge;
  311.         InfoWindowTop    = InfoWindow -> TopEdge;
  312.  
  313.         ClearMenuStrip(InfoWindow);
  314.  
  315.         CloseWindowSafely(InfoWindow);
  316.  
  317.         InfoWindow = NULL;
  318.     }
  319.  
  320.     if(InfoGadgetList)
  321.     {
  322.         FreeGadgets(InfoGadgetList);
  323.  
  324.         InfoGadgetList = NULL;
  325.     }
  326. }
  327.  
  328.     /* OpenInfoWindow():
  329.      *
  330.      *    Open the info window.
  331.      */
  332.  
  333. VOID
  334. OpenInfoWindow()
  335. {
  336.     if(!InfoWindow)
  337.     {
  338.         if(CreateAllGadgets(InfoGadgetArray,&InfoGadgetList))
  339.         {
  340.             if(InfoWindowLeft == -1)
  341.             {
  342.                 InfoWindowLeft    = Window -> LeftEdge + Window -> Width - SZ_GetWindowWidth();
  343.                 InfoWindowTop    = Window -> TopEdge + (Window -> Height - SZ_GetWindowHeight()) / 2;
  344.             }
  345.  
  346.             if(InfoWindow = OpenWindowTags(NULL,
  347.                 WA_Left,        InfoWindowLeft,
  348.                 WA_Top,            InfoWindowTop,
  349.                 WA_Width,        SZ_GetWindowWidth(),
  350.                 WA_Height,        SZ_GetWindowHeight(),
  351.  
  352.                 WA_DragBar,        TRUE,
  353.                 WA_DepthGadget,        TRUE,
  354.                 WA_CloseGadget,        TRUE,
  355.                 WA_RMBTrap,        TRUE,
  356.                 WA_DepthGadget,        TRUE,
  357.                 WA_CustomScreen,    Window -> WScreen,
  358.                 WA_NewLookMenus,    TRUE,
  359.  
  360.                 WA_Title,        LocaleString(MSG_INFOWINDOW_STATUS_INFORMATION_TXT),
  361.             TAG_DONE))
  362.             {
  363.                 AddGList(InfoWindow,InfoGadgetList,(UWORD)-1,(UWORD)-1,NULL);
  364.                 RefreshGList(InfoGadgetList,InfoWindow,NULL,(UWORD)-1);
  365.                 GT_RefreshWindow(InfoWindow,NULL);
  366.  
  367.                 InfoWindow -> UserPort = Window -> UserPort;
  368.  
  369.                 ModifyIDCMP(InfoWindow,Window -> IDCMPFlags);
  370.  
  371.                 SetMenuStrip(InfoWindow,Menu);
  372.  
  373.                 CheckItem(MEN_STATUS_WINDOW,TRUE);
  374.  
  375.                 InfoWindow -> Flags &= ~WFLG_RMBTRAP;
  376.  
  377.                 RefreshInfoWindow();
  378.             }
  379.         }
  380.     }
  381. }
  382.