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