home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ibmtool.zip / help.c < prev    next >
Text File  |  1997-11-07  |  15KB  |  365 lines

  1. /******************************************************************************/
  2. /*                                                                            */
  3. /*      FILE: HELP.C                                                          */
  4. /*                                                                            */
  5. /*   PURPOSE: This file contains the Help command code.                       */
  6. /*                                                                            */
  7. /* FUNCTIONS: InitHelp                                                        */
  8. /*            Help                                                            */
  9. /*            DoIHelp                                                         */
  10. /*                                                                            */
  11. /* GLOBAL DATA ACCESSED                                                       */
  12. /*      char    HelpCmd                                                       */
  13. /*      int     PrevMenuOpt                                                   */
  14. /*      int     CurrMenuOpt                                                   */
  15. /*      BOOLEAN CmdFromHelp                                                   */
  16. /*      int  HelpMode                                                         */
  17. /*                                                                            */
  18. /******************************************************************************/
  19.  
  20. #define INCL_SUB
  21. #define INCL_BASE
  22. #define INCL_DOS
  23. #include <os2.h>
  24. #include <stdio.h>
  25. #include <stdarg.h>
  26. #include <malloc.h>
  27. #include <stdlib.h>
  28. #include <string.h>
  29. #include <ctype.h>
  30. #include "ndis.h"
  31. #include "ibmtool.h"
  32. #include "ioctl.h"
  33. #include "intrface.h"
  34. #include "ihelp.h"
  35.  
  36. int  CurrHelpSel = 0;
  37. int  LastHelpSel;
  38.  
  39. WINDOW HelpSel = {  2,  1, 11, 11, 10, 0x1F, 0x0E, 0x1E },
  40.        HelpBox = {  2, 13, 11, 78, 10, 0x1F, 0x0E, 0x1E };
  41.  
  42. void InitHelp ()
  43. {
  44.   int i;
  45.  
  46.   for (i=0; ; ++i)
  47.      if (!strcmp (IHelp[i].cmd, "END"))
  48.         break;
  49.   LastHelpSel = --i;
  50. }
  51.  
  52. int Help ()
  53. {
  54.   PCH            ScrSave;
  55.   USHORT         i, colsize, rowsize, SaveLines;
  56.   KBDKEYINFO     KbdInfo;
  57.   VIOMODEINFO    ModeInfo;
  58.   VIOCURSORINFO  OldCursor, NewCursor;
  59.  
  60.   HelpMode = TRUE;
  61.   ModeInfo.cb = sizeof (VIOMODEINFO);
  62.   VioGetMode (&ModeInfo, 0);
  63.   colsize = 2 * ModeInfo.col;
  64.   rowsize = 2 * ModeInfo.row;
  65.  
  66.   ScrSave = (PCH) malloc (colsize * rowsize);
  67.  
  68.   VioGetCurType (&OldCursor, 0);
  69.   NewCursor = OldCursor;
  70.   NewCursor.attr = 0xFFFF;
  71.   VioSetCurType (&NewCursor, 0);
  72.  
  73.   SaveLines = 25;
  74.  
  75.   for (i=1; i<SaveLines; ++i)
  76.      VioReadCellStr (ScrSave + i * colsize, &colsize, i, 0, 0);
  77.  
  78.   if (Debug)
  79.     {
  80.      aprintf ( 1, 0, 0x50, "~ADDMC    - <NetAddr>                   RXBUF    - Display Receive Buffer       ");
  81.      aprintf ( 2, 0, 0x50, "~CLOSE    - Close Adapter               RXCHAIN  - [Type] [FrameLength]         ");
  82.      aprintf ( 3, 0, 0x50, "~CSTAT    - Clear Statistics                          [PassFrameLength] [Handle]");
  83.      aprintf ( 4, 0, 0x50, "~DELMC    - <NetAddr>                   RXLOOK   - [Type] [FrameLength]         ");
  84.      aprintf ( 5, 0, 0x50, " ECHO     - Toggle Echo Mode                          [PassFrameLength]         ");
  85.      aprintf ( 6, 0, 0x50, " EDITBUF  - <I | #> <HexData>                         [LookaheadLength]         ");
  86.      aprintf ( 7, 0, 0x50, "~FILTER   - <Filter Value>              RXRLS    - ReceiveRelease               ");
  87.      aprintf ( 8, 0, 0x50, "~FUNADR   - <ShortNetAddr>              RXSIZE   - [BufferSize(s)]              ");
  88.      aprintf ( 9, 0, 0x50, " INDCOMP  - Indication Complete         RXWAIT   - Set ReceiveChain             ");
  89.      aprintf (10, 0, 0x50, "~INDICOFF - Indications Off                           WAIT_FOR_RELEASE          ");
  90.      aprintf (11, 0, 0x50, "~INDICON  - Indications On              SERVER   - Set Server Mode              ");
  91.      aprintf (12, 0, 0x50, "~INITDIAG - Initiate Diagnostics       ~SETLOOK  - <Lookahead Length>           ");
  92.      aprintf (13, 0, 0x50, "~INTREQ   - Interrupt Request          ~SETSTN   - <NetAddr>                    ");
  93.      aprintf (14, 0, 0x50, " LOG      - <Filename>                  STATIND  - <OpCode> <Param>             ");
  94.      aprintf (15, 0, 0x50, " MODOPEN  - <OpenOptions>               STRESS   - [Cnt] [Tol] [NOSTOP] [NOCHK] ");
  95.      aprintf (16, 0, 0x50, " MONITOR  - Set Monitor Mode            TRAN     - Transmit Current Tx Buffer   ");
  96.      aprintf (17, 0, 0x50, " MULTRAN  - [Cnt] [<Min> <Max>] [Typ]   TXBUF    - Display Current Tx Buffer    ");
  97.      aprintf (18, 0, 0x50, "~OPEN     - <OpenOpt> [ExtRet]          TXCONF   - <Handle> <Status>            ");
  98.      aprintf (19, 0, 0x50, "~READLOG  - <LogLen>                    TXSIZE   - [BufferSize(s)]              ");
  99.      aprintf (20, 0, 0x50, " READMAC  - <TableId> <ByteOffset>      USEGDT   - Toggle GDT Usage             ");
  100.      aprintf (21, 0, 0x50, "               [<Op> <Value>]          ~USTAT    - Update Statistics            ");
  101.      aprintf (22, 0, 0x50, " REQCONF  - <Handle> <Cmd> <Status>     WKSTA    - Set Workstation Mode         ");
  102.      aprintf (23, 0, 0x50, "~RESET    - ResetMAC                    XFERDATA - TransferData                 ");
  103.      aprintf (24, 0, 0x50, "          ~ Command takes <Result> | REQUEST_QUEUED <Result>                    ");
  104.     }
  105.   else
  106.     {
  107.      aprintf ( 1, 0, 0x50, " ADDMC    - <NetAddr>                   MONITOR  - Set Monitor Mode             ");
  108.      aprintf ( 2, 0, 0x50, " CHKDATA  - {ON | OFF} {STOP | NOSTOP}  MULTRAN  - [Cnt] [<Min> <Max>] [Type]   ");
  109.      aprintf ( 3, 0, 0x50, " CHKIND   - [<Count>] [<Type>]          OPEN    - <OpenOpt> [ExtRet]            ");
  110.      aprintf ( 4, 0, 0x50, " CHKLK    - <Length>                    READLOG - <LogLen>                      ");
  111.      aprintf ( 5, 0, 0x50, " CHKSTAT  - <Value>                     READMAC - <TableId> <ByteOffset>        ");
  112.      aprintf ( 6, 0, 0x50, " CLOSE    - Close Adapter                            [<Operator> <TestValue>]   ");
  113.      aprintf ( 7, 0, 0x50, " CSTAT    - Clear Statistics            RESET   - ResetMAC                      ");
  114.      aprintf ( 8, 0, 0x50, " DELMC    - <NetAddr>                   RXBUF   - Display Receive Buffer        ");
  115.      aprintf ( 9, 0, 0x50, " ECHO     - Toggle Echo Mode            SERVER  - Set Server Mode               ");
  116.      aprintf (10, 0, 0x50, " EDITBUF  - <I | #> <HexData>           SETLOOK - <Lookahead Length>            ");
  117.      aprintf (11, 0, 0x50, " FILTER   - <Filter Value>              SETSTN  - <NetAddr>                     ");
  118.      aprintf (12, 0, 0x50, " FUNADR   - <ShortNetAddr>              STRESS  - [Cnt] [Tol] [NOSTOP] [NOCHK]  ");
  119.      aprintf (13, 0, 0x50, " INDICOFF - Indications Off             TRAN    - Transmit Current Tx Buffer    ");
  120.      aprintf (14, 0, 0x50, " INDICON  - Indications On              TXBUF   - Display Current Tx Buffer     ");
  121.      aprintf (15, 0, 0x50, " INITDIAG - Initiate Diagnostics        TXSIZE  - [BufferSize(s)]               ");
  122.      aprintf (16, 0, 0x50, " INTREQ   - Interrupt Request           USEGDT  - Toggle GDT Usage              ");
  123.      aprintf (17, 0, 0x50, " LOG      - <Filename>                  USTAT   - Update Statistics             ");
  124.      aprintf (18, 0, 0x50, " MODOPEN  - <OpenOptions>               WKSTA   - Set Workstation Mode          ");
  125.     } /* endif */
  126.  
  127.  
  128.   KbdCharIn (&KbdInfo, IO_WAIT, 0);
  129.  
  130.   for (i=1; i<SaveLines; ++i)
  131.      VioWrtCellStr (ScrSave + i * colsize, colsize, i, 0, 0);
  132.  
  133.   VioSetCurType (&OldCursor, 0);
  134.  
  135.   SelectMenuOpt (PrevMenuOpt);
  136.  
  137.   HelpMode = FALSE;
  138.  
  139.   return SUCCESS;
  140. }
  141.  
  142. int DoIHelp ()
  143. {
  144.   char       *p;
  145.   int         i,
  146.               done = 0,
  147.               start;
  148.   BYTE        bAttr[2] = " ";
  149.   USHORT      row, col;
  150.   KBDKEYINFO  kbdInfo;
  151.  
  152.   ClearWindow (HelpSel);
  153.   ClearWindow (HelpBox);
  154.  
  155.   Box (HelpSel.Top - 1, HelpSel.Left - 1,
  156.        HelpSel.Bottom + 1, HelpSel.Right + 1, HelpSel.Attr);
  157.   Box (HelpBox.Top - 1, HelpBox.Left - 1,
  158.        HelpBox.Bottom + 1, HelpBox.Right + 1, HelpBox.Attr);
  159.   for (i=HelpSel.Top; i<HelpSel.Bottom + 1; ++i)
  160.      VioWrtCharStrAtt ("║", 1, i, HelpSel.Right + 1, &HelpSel.Attr, 0);
  161.   VioWrtCharStrAtt ("╥", 1, HelpSel.Top - 1, HelpSel.Right + 1,
  162.                     &HelpSel.Attr, 0);
  163.   VioWrtCharStrAtt ("╨", 1, HelpSel.Bottom + 1, HelpSel.Right + 1,
  164.                     &HelpSel.Attr, 0);
  165.  
  166.   row = HelpSel.Top + (CurrHelpSel % 10);
  167.   start = -(CurrHelpSel % 10);
  168.  
  169.   for (i=0; i<10; ++i)
  170.      VioWrtCharStrAtt (IHelp[CurrHelpSel + start + i].cmd, 11,
  171.                        HelpSel.Top + i, HelpSel.Left,
  172.                        &HelpSel.Attr, 0);
  173.  
  174.   VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  175.                     HelpSel.Top + (CurrHelpSel % 10),
  176.                     HelpSel.Left, &HelpSel.HighAttr, 0);
  177.  
  178.   for (i=0; i<10; ++i)
  179.      VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  180.                        strlen (IHelp[CurrHelpSel].syntax[i]),
  181.                        HelpBox.Top + i, HelpBox.Left,
  182.                        &HelpBox.Attr, 0);
  183.  
  184.   VioSetCurPos (row, HelpSel.Left, 0);
  185.  
  186.   while (!done)
  187.     {
  188.      KbdCharIn (&kbdInfo, IO_WAIT, 0);
  189.      VioGetCurPos (&row, &col, 0);
  190.      switch (kbdInfo.chScan)
  191.        {
  192.         case ENTER:
  193.           CmdFromHelp = TRUE;
  194.           strcpy (HelpCmd, IHelp[CurrHelpSel].cmd + 1);
  195.           p = HelpCmd;
  196.           while (*p++ != ' ');
  197.           *p = '\0';
  198.           done = 1;
  199.           break;
  200.  
  201.         case TAB:
  202.           done = 1;
  203.           break;
  204.  
  205.         case UP:
  206.           if (row > HelpSel.Top)
  207.             {
  208.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  209.                                row, HelpSel.Left, &HelpSel.Attr, 0);
  210.  
  211.              VioSetCurPos (row - 1, col, 0);
  212.  
  213.              --CurrHelpSel;
  214.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  215.                                row - 1, HelpSel.Left, &HelpSel.HighAttr, 0);
  216.  
  217.              ClearWindow (HelpBox);
  218.  
  219.              for (i=0; i<10; ++i)
  220.                 VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  221.                                   strlen (IHelp[CurrHelpSel].syntax[i]),
  222.                                   HelpBox.Top + i, HelpBox.Left,
  223.                                   &HelpBox.Attr, 0);
  224.             }
  225.           else if (CurrHelpSel != 0)
  226.             {
  227.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  228.                                HelpSel.Top, HelpSel.Left,
  229.                                &HelpSel.Attr, 0);
  230.  
  231.              bAttr[1] = HelpSel.Attr;
  232.              VioScrollDn (HelpSel.Top, HelpSel.Left,
  233.                           HelpSel.Bottom, HelpSel.Right,
  234.                           1, bAttr, 0);
  235.  
  236.              --CurrHelpSel;
  237.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  238.                                HelpSel.Top, HelpSel.Left,
  239.                                &HelpSel.HighAttr, 0);
  240.  
  241.              ClearWindow (HelpBox);
  242.  
  243.              for (i=0; i<10; ++i)
  244.                 VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  245.                                   strlen (IHelp[CurrHelpSel].syntax[i]),
  246.                                   HelpBox.Top + i, HelpBox.Left,
  247.                                   &HelpBox.Attr, 0);
  248.             }
  249.           break;
  250.  
  251.         case DOWN:
  252.           if (row < HelpSel.Bottom)
  253.             {
  254.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  255.                                row, HelpSel.Left, &HelpSel.Attr, 0);
  256.  
  257.              VioSetCurPos (row + 1, col, 0);
  258.  
  259.              ++CurrHelpSel;
  260.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  261.                                row + 1, HelpSel.Left, &HelpSel.HighAttr, 0);
  262.  
  263.              ClearWindow (HelpBox);
  264.  
  265.              for (i=0; i<10; ++i)
  266.                 VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  267.                                   strlen (IHelp[CurrHelpSel].syntax[i]),
  268.                                   HelpBox.Top + i, HelpBox.Left,
  269.                                   &HelpBox.Attr, 0);
  270.             }
  271.           else if (strcmp (IHelp[CurrHelpSel + 1].cmd, "END"))
  272.             {
  273.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  274.                                HelpSel.Bottom, HelpSel.Left,
  275.                                &HelpSel.Attr, 0);
  276.  
  277.              bAttr[1] = HelpSel.Attr;
  278.              VioScrollUp (HelpSel.Top, HelpSel.Left,
  279.                           HelpSel.Bottom, HelpSel.Right,
  280.                           1, bAttr, 0);
  281.  
  282.              ++CurrHelpSel;
  283.              VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  284.                                HelpSel.Bottom, HelpSel.Left,
  285.                                &HelpSel.HighAttr, 0);
  286.  
  287.              ClearWindow (HelpBox);
  288.  
  289.              for (i=0; i<10; ++i)
  290.                 VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  291.                                   strlen (IHelp[CurrHelpSel].syntax[i]),
  292.                                   HelpBox.Top + i, HelpBox.Left,
  293.                                   &HelpBox.Attr, 0);
  294.             }
  295.           break;
  296.  
  297.         case PGUP:
  298.           CurrHelpSel -= 10;
  299.           if (CurrHelpSel < 0) CurrHelpSel = 0;
  300.  
  301.           row = HelpSel.Top + (CurrHelpSel % 10);
  302.           start = -(CurrHelpSel % 10);
  303.  
  304.           for (i=0; i<10; ++i)
  305.              VioWrtCharStrAtt (IHelp[CurrHelpSel + start + i].cmd, 11,
  306.                                HelpSel.Top + i, HelpSel.Left,
  307.                                &HelpSel.Attr, 0);
  308.  
  309.           VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
  310.                             HelpSel.Top + (CurrHelpSel % 10),
  311.                             HelpSel.Left, &HelpSel.HighAttr, 0);
  312.  
  313.           ClearWindow (HelpBox);
  314.  
  315.           for (i=0; i<10; ++i)
  316.              VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  317.                                strlen (IHelp[CurrHelpSel].syntax[i]),
  318.                                HelpBox.Top + i, HelpBox.Left,
  319.                                &HelpBox.Attr, 0);
  320.  
  321.           VioSetCurPos (row, HelpSel.Left, 0);
  322.  
  323.           break;
  324.  
  325.         case PGDN:
  326.           CurrHelpSel += 10;
  327.           if (CurrHelpSel > LastHelpSel) CurrHelpSel = LastHelpSel;
  328.  
  329.           row = HelpSel.Top + (CurrHelpSel % 10);
  330.           start = -(CurrHelpSel % 10);
  331.           if (CurrHelpSel == LastHelpSel)
  332.             {
  333.              row = HelpSel.Bottom;
  334.              start -= 10;
  335.             }
  336.  
  337.           for (i=0; i<10; ++i)
  338.              VioWrtCharStrAtt (IHelp[CurrHelpSel + start + i].cmd, 11,
  339.                                HelpSel.Top + i, HelpSel.Left,
  340.                                &HelpSel.Attr, 0);
  341.  
  342.           VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11, row,
  343.                             HelpSel.Left, &HelpSel.HighAttr, 0);
  344.  
  345.           ClearWindow (HelpBox);
  346.  
  347.           for (i=0; i<10; ++i)
  348.              VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
  349.                                strlen (IHelp[CurrHelpSel].syntax[i]),
  350.                                HelpBox.Top + i, HelpBox.Left,
  351.                                &HelpBox.Attr, 0);
  352.  
  353.           VioSetCurPos (row, HelpSel.Left, 0);
  354.  
  355.           break;
  356.        } /* endswitch */
  357.     } /* endwhile */
  358.  
  359.   PrevMenuOpt = CurrMenuOpt;
  360.   CurrMenuOpt = -1;
  361.  
  362.   return SUCCESS;
  363. }
  364.  
  365.