home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************/
- /* */
- /* FILE: HELP.C */
- /* */
- /* PURPOSE: This file contains the Help command code. */
- /* */
- /* FUNCTIONS: InitHelp */
- /* Help */
- /* DoIHelp */
- /* */
- /* GLOBAL DATA ACCESSED */
- /* char HelpCmd */
- /* int PrevMenuOpt */
- /* int CurrMenuOpt */
- /* BOOLEAN CmdFromHelp */
- /* int HelpMode */
- /* */
- /******************************************************************************/
-
- #define INCL_SUB
- #define INCL_BASE
- #define INCL_DOS
- #include <os2.h>
- #include <stdio.h>
- #include <stdarg.h>
- #include <malloc.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include "ndis.h"
- #include "ibmtool.h"
- #include "ioctl.h"
- #include "intrface.h"
- #include "ihelp.h"
-
- int CurrHelpSel = 0;
- int LastHelpSel;
-
- WINDOW HelpSel = { 2, 1, 11, 11, 10, 0x1F, 0x0E, 0x1E },
- HelpBox = { 2, 13, 11, 78, 10, 0x1F, 0x0E, 0x1E };
-
- void InitHelp ()
- {
- int i;
-
- for (i=0; ; ++i)
- if (!strcmp (IHelp[i].cmd, "END"))
- break;
- LastHelpSel = --i;
- }
-
- int Help ()
- {
- PCH ScrSave;
- USHORT i, colsize, rowsize, SaveLines;
- KBDKEYINFO KbdInfo;
- VIOMODEINFO ModeInfo;
- VIOCURSORINFO OldCursor, NewCursor;
-
- HelpMode = TRUE;
- ModeInfo.cb = sizeof (VIOMODEINFO);
- VioGetMode (&ModeInfo, 0);
- colsize = 2 * ModeInfo.col;
- rowsize = 2 * ModeInfo.row;
-
- ScrSave = (PCH) malloc (colsize * rowsize);
-
- VioGetCurType (&OldCursor, 0);
- NewCursor = OldCursor;
- NewCursor.attr = 0xFFFF;
- VioSetCurType (&NewCursor, 0);
-
- SaveLines = 25;
-
- for (i=1; i<SaveLines; ++i)
- VioReadCellStr (ScrSave + i * colsize, &colsize, i, 0, 0);
-
- if (Debug)
- {
- aprintf ( 1, 0, 0x50, "~ADDMC - <NetAddr> RXBUF - Display Receive Buffer ");
- aprintf ( 2, 0, 0x50, "~CLOSE - Close Adapter RXCHAIN - [Type] [FrameLength] ");
- aprintf ( 3, 0, 0x50, "~CSTAT - Clear Statistics [PassFrameLength] [Handle]");
- aprintf ( 4, 0, 0x50, "~DELMC - <NetAddr> RXLOOK - [Type] [FrameLength] ");
- aprintf ( 5, 0, 0x50, " ECHO - Toggle Echo Mode [PassFrameLength] ");
- aprintf ( 6, 0, 0x50, " EDITBUF - <I | #> <HexData> [LookaheadLength] ");
- aprintf ( 7, 0, 0x50, "~FILTER - <Filter Value> RXRLS - ReceiveRelease ");
- aprintf ( 8, 0, 0x50, "~FUNADR - <ShortNetAddr> RXSIZE - [BufferSize(s)] ");
- aprintf ( 9, 0, 0x50, " INDCOMP - Indication Complete RXWAIT - Set ReceiveChain ");
- aprintf (10, 0, 0x50, "~INDICOFF - Indications Off WAIT_FOR_RELEASE ");
- aprintf (11, 0, 0x50, "~INDICON - Indications On SERVER - Set Server Mode ");
- aprintf (12, 0, 0x50, "~INITDIAG - Initiate Diagnostics ~SETLOOK - <Lookahead Length> ");
- aprintf (13, 0, 0x50, "~INTREQ - Interrupt Request ~SETSTN - <NetAddr> ");
- aprintf (14, 0, 0x50, " LOG - <Filename> STATIND - <OpCode> <Param> ");
- aprintf (15, 0, 0x50, " MODOPEN - <OpenOptions> STRESS - [Cnt] [Tol] [NOSTOP] [NOCHK] ");
- aprintf (16, 0, 0x50, " MONITOR - Set Monitor Mode TRAN - Transmit Current Tx Buffer ");
- aprintf (17, 0, 0x50, " MULTRAN - [Cnt] [<Min> <Max>] [Typ] TXBUF - Display Current Tx Buffer ");
- aprintf (18, 0, 0x50, "~OPEN - <OpenOpt> [ExtRet] TXCONF - <Handle> <Status> ");
- aprintf (19, 0, 0x50, "~READLOG - <LogLen> TXSIZE - [BufferSize(s)] ");
- aprintf (20, 0, 0x50, " READMAC - <TableId> <ByteOffset> USEGDT - Toggle GDT Usage ");
- aprintf (21, 0, 0x50, " [<Op> <Value>] ~USTAT - Update Statistics ");
- aprintf (22, 0, 0x50, " REQCONF - <Handle> <Cmd> <Status> WKSTA - Set Workstation Mode ");
- aprintf (23, 0, 0x50, "~RESET - ResetMAC XFERDATA - TransferData ");
- aprintf (24, 0, 0x50, " ~ Command takes <Result> | REQUEST_QUEUED <Result> ");
- }
- else
- {
- aprintf ( 1, 0, 0x50, " ADDMC - <NetAddr> MONITOR - Set Monitor Mode ");
- aprintf ( 2, 0, 0x50, " CHKDATA - {ON | OFF} {STOP | NOSTOP} MULTRAN - [Cnt] [<Min> <Max>] [Type] ");
- aprintf ( 3, 0, 0x50, " CHKIND - [<Count>] [<Type>] OPEN - <OpenOpt> [ExtRet] ");
- aprintf ( 4, 0, 0x50, " CHKLK - <Length> READLOG - <LogLen> ");
- aprintf ( 5, 0, 0x50, " CHKSTAT - <Value> READMAC - <TableId> <ByteOffset> ");
- aprintf ( 6, 0, 0x50, " CLOSE - Close Adapter [<Operator> <TestValue>] ");
- aprintf ( 7, 0, 0x50, " CSTAT - Clear Statistics RESET - ResetMAC ");
- aprintf ( 8, 0, 0x50, " DELMC - <NetAddr> RXBUF - Display Receive Buffer ");
- aprintf ( 9, 0, 0x50, " ECHO - Toggle Echo Mode SERVER - Set Server Mode ");
- aprintf (10, 0, 0x50, " EDITBUF - <I | #> <HexData> SETLOOK - <Lookahead Length> ");
- aprintf (11, 0, 0x50, " FILTER - <Filter Value> SETSTN - <NetAddr> ");
- aprintf (12, 0, 0x50, " FUNADR - <ShortNetAddr> STRESS - [Cnt] [Tol] [NOSTOP] [NOCHK] ");
- aprintf (13, 0, 0x50, " INDICOFF - Indications Off TRAN - Transmit Current Tx Buffer ");
- aprintf (14, 0, 0x50, " INDICON - Indications On TXBUF - Display Current Tx Buffer ");
- aprintf (15, 0, 0x50, " INITDIAG - Initiate Diagnostics TXSIZE - [BufferSize(s)] ");
- aprintf (16, 0, 0x50, " INTREQ - Interrupt Request USEGDT - Toggle GDT Usage ");
- aprintf (17, 0, 0x50, " LOG - <Filename> USTAT - Update Statistics ");
- aprintf (18, 0, 0x50, " MODOPEN - <OpenOptions> WKSTA - Set Workstation Mode ");
- } /* endif */
-
-
- KbdCharIn (&KbdInfo, IO_WAIT, 0);
-
- for (i=1; i<SaveLines; ++i)
- VioWrtCellStr (ScrSave + i * colsize, colsize, i, 0, 0);
-
- VioSetCurType (&OldCursor, 0);
-
- SelectMenuOpt (PrevMenuOpt);
-
- HelpMode = FALSE;
-
- return SUCCESS;
- }
-
- int DoIHelp ()
- {
- char *p;
- int i,
- done = 0,
- start;
- BYTE bAttr[2] = " ";
- USHORT row, col;
- KBDKEYINFO kbdInfo;
-
- ClearWindow (HelpSel);
- ClearWindow (HelpBox);
-
- Box (HelpSel.Top - 1, HelpSel.Left - 1,
- HelpSel.Bottom + 1, HelpSel.Right + 1, HelpSel.Attr);
- Box (HelpBox.Top - 1, HelpBox.Left - 1,
- HelpBox.Bottom + 1, HelpBox.Right + 1, HelpBox.Attr);
- for (i=HelpSel.Top; i<HelpSel.Bottom + 1; ++i)
- VioWrtCharStrAtt ("║", 1, i, HelpSel.Right + 1, &HelpSel.Attr, 0);
- VioWrtCharStrAtt ("╥", 1, HelpSel.Top - 1, HelpSel.Right + 1,
- &HelpSel.Attr, 0);
- VioWrtCharStrAtt ("╨", 1, HelpSel.Bottom + 1, HelpSel.Right + 1,
- &HelpSel.Attr, 0);
-
- row = HelpSel.Top + (CurrHelpSel % 10);
- start = -(CurrHelpSel % 10);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel + start + i].cmd, 11,
- HelpSel.Top + i, HelpSel.Left,
- &HelpSel.Attr, 0);
-
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- HelpSel.Top + (CurrHelpSel % 10),
- HelpSel.Left, &HelpSel.HighAttr, 0);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
-
- VioSetCurPos (row, HelpSel.Left, 0);
-
- while (!done)
- {
- KbdCharIn (&kbdInfo, IO_WAIT, 0);
- VioGetCurPos (&row, &col, 0);
- switch (kbdInfo.chScan)
- {
- case ENTER:
- CmdFromHelp = TRUE;
- strcpy (HelpCmd, IHelp[CurrHelpSel].cmd + 1);
- p = HelpCmd;
- while (*p++ != ' ');
- *p = '\0';
- done = 1;
- break;
-
- case TAB:
- done = 1;
- break;
-
- case UP:
- if (row > HelpSel.Top)
- {
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- row, HelpSel.Left, &HelpSel.Attr, 0);
-
- VioSetCurPos (row - 1, col, 0);
-
- --CurrHelpSel;
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- row - 1, HelpSel.Left, &HelpSel.HighAttr, 0);
-
- ClearWindow (HelpBox);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
- }
- else if (CurrHelpSel != 0)
- {
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- HelpSel.Top, HelpSel.Left,
- &HelpSel.Attr, 0);
-
- bAttr[1] = HelpSel.Attr;
- VioScrollDn (HelpSel.Top, HelpSel.Left,
- HelpSel.Bottom, HelpSel.Right,
- 1, bAttr, 0);
-
- --CurrHelpSel;
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- HelpSel.Top, HelpSel.Left,
- &HelpSel.HighAttr, 0);
-
- ClearWindow (HelpBox);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
- }
- break;
-
- case DOWN:
- if (row < HelpSel.Bottom)
- {
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- row, HelpSel.Left, &HelpSel.Attr, 0);
-
- VioSetCurPos (row + 1, col, 0);
-
- ++CurrHelpSel;
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- row + 1, HelpSel.Left, &HelpSel.HighAttr, 0);
-
- ClearWindow (HelpBox);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
- }
- else if (strcmp (IHelp[CurrHelpSel + 1].cmd, "END"))
- {
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- HelpSel.Bottom, HelpSel.Left,
- &HelpSel.Attr, 0);
-
- bAttr[1] = HelpSel.Attr;
- VioScrollUp (HelpSel.Top, HelpSel.Left,
- HelpSel.Bottom, HelpSel.Right,
- 1, bAttr, 0);
-
- ++CurrHelpSel;
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- HelpSel.Bottom, HelpSel.Left,
- &HelpSel.HighAttr, 0);
-
- ClearWindow (HelpBox);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
- }
- break;
-
- case PGUP:
- CurrHelpSel -= 10;
- if (CurrHelpSel < 0) CurrHelpSel = 0;
-
- row = HelpSel.Top + (CurrHelpSel % 10);
- start = -(CurrHelpSel % 10);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel + start + i].cmd, 11,
- HelpSel.Top + i, HelpSel.Left,
- &HelpSel.Attr, 0);
-
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11,
- HelpSel.Top + (CurrHelpSel % 10),
- HelpSel.Left, &HelpSel.HighAttr, 0);
-
- ClearWindow (HelpBox);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
-
- VioSetCurPos (row, HelpSel.Left, 0);
-
- break;
-
- case PGDN:
- CurrHelpSel += 10;
- if (CurrHelpSel > LastHelpSel) CurrHelpSel = LastHelpSel;
-
- row = HelpSel.Top + (CurrHelpSel % 10);
- start = -(CurrHelpSel % 10);
- if (CurrHelpSel == LastHelpSel)
- {
- row = HelpSel.Bottom;
- start -= 10;
- }
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel + start + i].cmd, 11,
- HelpSel.Top + i, HelpSel.Left,
- &HelpSel.Attr, 0);
-
- VioWrtCharStrAtt (IHelp[CurrHelpSel].cmd, 11, row,
- HelpSel.Left, &HelpSel.HighAttr, 0);
-
- ClearWindow (HelpBox);
-
- for (i=0; i<10; ++i)
- VioWrtCharStrAtt (IHelp[CurrHelpSel].syntax[i],
- strlen (IHelp[CurrHelpSel].syntax[i]),
- HelpBox.Top + i, HelpBox.Left,
- &HelpBox.Attr, 0);
-
- VioSetCurPos (row, HelpSel.Left, 0);
-
- break;
- } /* endswitch */
- } /* endwhile */
-
- PrevMenuOpt = CurrMenuOpt;
- CurrMenuOpt = -1;
-
- return SUCCESS;
- }
-