home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
ibmtool.zip
/
tmac.c
< prev
next >
Wrap
Text File
|
1997-11-07
|
11KB
|
429 lines
/******************************************************************************/
/* */
/* FILE: TMAC.C */
/* */
/* PURPOSE: This file contains the TestMAC driver specific functions. */
/* */
/* FUNCTIONS: OpenTestMAC */
/* TTEditTMBuffer */
/* TTIndComp */
/* TTRxLook */
/* TTRxChain */
/* TTTxConf */
/* TTReqConf */
/* TTStatInd */
/* TTReceiveRelease */
/* TTRxWait */
/* TMIndComp */
/* TMRxLook */
/* TMRxChain */
/* TMTxConf */
/* TMReqConf */
/* TMStatInd */
/* TMSetResult */
/* TTSetRxBuffSize */
/* */
/******************************************************************************/
#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"
BYTE far *TMRcvBuff;
RXBUFDESC RxBuffDesc;
int OpenTestMAC ()
{
char *DriverName = "TESTMAC$";
int rc;
USHORT DHandle = (USHORT) hTestMAC, apiAction;
// Open TESTMAC
if (rc = DosOpen (DriverName, // char * to device driver to open=TESTMAC$
&DHandle, // address of file handle
&apiAction, // action taken by the DosOpen API function
0L, // file size
FILE_NORMAL, // file attribute
FILE_OPEN, // open flag - file must exist already
OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, //open mode
0L) //reserved
)
{
PrintMsg (RED, "Failure opening TESTMAC");
}
hTestMAC = (USHORT) DHandle;
// Allocate the ReceiveLookahead buffer for TestMAC
TMRcvBuff = (BYTE far *) calloc (MACMSC.MscMaxFrame, sizeof (BYTE));
return rc;
}
int TTEditTMBuffer ()
{
char *token, *s;
USHORT i, j, cnt, data, max;
if (!Debug) return TT_NO_DEBUG;
while ((token = strtok (NULL, "\n\t ")) != NULL)
{
if ((s = strstr (token, "*")))
{
*s++ = '\0';
if (sscanf (token, "%d", &cnt) != 1)
return TT_INVALID_PARAMETER;
if (sscanf (s, "%02X", &data) != 1)
return TT_INVALID_PARAMETER;
max = (cnt > MACMSC.MscMaxFrame) ? MACMSC.MscMaxFrame : cnt;
for (j=0; j<max; ++j)
TMRcvBuff[i++] = data;
}
else
{
if (sscanf (token, "%02X", &data) != 1)
return TT_INVALID_PARAMETER;
TMRcvBuff[i++] = data;
}
}
return SUCCESS;
}
int TTIndComp ()
{
// INDCOMP
TMAC TMac;
if (!Debug) return TT_NO_DEBUG;
TMac.EventCmd = INDCOMP;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTRxLook ()
{
// RXLOOK [Type] [FrameLength] [PassFrameLength] [LookaheadLength]
char *token;
int i = 0, RxType = 0;
TMAC TMac;
if (!Debug) return TT_NO_DEBUG;
TMac.EventCmd = RXLOOK;
TMac.Parm[0] = 64;
TMac.Parm[1] = 64;
TMac.Parm[2] = 0;
while ((token = strtok (NULL, "\n\t ")))
sscanf (token, "%d", &TMac.Parm[i++]);
TMac.DataPtr = (void far *) TMRcvBuff;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTRxChain ()
{
// RXCHAIN [Type [NetAddr]] [FrameLength] [PassFrameLength] [Handle]
char *token;
int i = 0, RxType = 0;
TMAC TMac;
if (!Debug) return TT_NO_DEBUG;
TMac.EventCmd = RXCHAIN;
TMac.Parm[0] = 64;
TMac.Parm[1] = 64;
TMac.Parm[2] = 0;
if ((token = strtok (NULL, "\n\t ")))
if ((RxType = (int) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
while ((token = strtok (NULL, "\n\t ")))
if ((TMac.Parm[i++] = (int) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
TMac.DataPtr = (void far *) &RxBuffDesc;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTTxConf ()
{
// TXCONF <Handle> <Status>
char *token;
int status;
TMAC TMac;
if (!Debug) return TT_NO_DEBUG;
TMac.EventCmd = TXCONF;
// get the handle
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((TMac.Parm[0] = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
// get the status
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((status = GetRCInt (token)) < 0)
return TT_INVALID_PARAMETER;
TMac.Parm[1] = (WORD) status;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTReqConf ()
{
// REQCONF <Handle> <OriginalCommand> <Status>
char *token;
int status;
WORD orgcmd;
TMAC TMac;
if (!Debug) return TT_NO_DEBUG;
TMac.EventCmd = REQCONF;
// get the handle
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((TMac.Parm[0] = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
// get the original_command
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
for (orgcmd=0; *GenReqStr[orgcmd]; ++orgcmd)
if (!stricmp (token, GenReqStr[orgcmd])) break;
if (!*GenReqStr[orgcmd]) return TT_INVALID_PARAMETER;
TMac.Parm[1] = orgcmd + 1;
// get the status
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((status = GetRCInt (token)) < 0)
return TT_INVALID_PARAMETER;
TMac.Parm[2] = (WORD) status;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTStatInd ()
{
// STATIND <Opcode> <Param>
char *token;
int i;
TMAC TMac;
if (!Debug) return TT_NO_DEBUG;
TMac.EventCmd = STATIND;
for (i=0; i<2; ++i)
{
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((TMac.Parm[i] = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
}
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTReceiveRelease ()
{
// RXRLS <Handle>
char *token;
WORD Handle;
IOCTLDATA IOData;
IOCTLDATA far *IODataPtr = &IOData;
if (!(token = strtok (NULL, "\n\t ")))
return TT_INVALID_PARAMETER;
if ((Handle = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
IOData.ReqCode = MACCMD;
IOData.Length = RECEIVERELEASE;
IOData.SrcDataPtr = (void far *) &Handle;
IOData.DestDataPtr = NULL;
GenIoctl ((void far *) IODataPtr, hWedge);
LastStatus = IOData.ReqCode;
return SUCCESS;
}
int TTRxWait ()
{
// RXWAIT
WedgeCommon->RxWait = ~WedgeCommon->RxWait;
if (WedgeCommon->RxWait)
aprintf (0, 73, 0x74, "R");
else
aprintf (0, 73, 0x70, " ");
return SUCCESS;
}
int TMIndComp ()
{
TMAC TMac;
TMac.EventCmd = INDCOMP;
GenIoctl ((void far *) &TMac, hTestMAC);
}
int TMRxLook (int Type, WORD FrameLen, WORD PassLen, WORD Lookahead)
{
int RxType = Type;
TMAC TMac;
TMac.EventCmd = RXLOOK;
TMac.Parm[0] = FrameLen;
TMac.Parm[1] = PassLen;
TMac.Parm[2] = Lookahead;
TMac.DataPtr = TMRcvBuff;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TMRxChain (int Type, WORD FrameLen, WORD PassLen, WORD Handle)
{
int RxType = Type;
TMAC TMac;
TMac.EventCmd = RXCHAIN;
TMac.Parm[0] = FrameLen;
TMac.Parm[1] = PassLen;
TMac.Parm[2] = Handle;
TMac.DataPtr = TMRcvBuff;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TMTxConf (WORD Handle, WORD Status)
{
TMAC TMac;
TMac.EventCmd = TXCONF;
TMac.Parm[0] = Handle;
TMac.Parm[1] = Status;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TMReqConf (WORD Handle, WORD Command, WORD Status)
{
TMAC TMac;
TMac.EventCmd = REQCONF;
TMac.Parm[0] = Handle;
TMac.Parm[1] = Command;
TMac.Parm[2] = Status;
GenIoctl ((void far *) &TMac, hTestMAC);
return TMac.Parm[2];
return SUCCESS;
}
int TMStatInd (WORD OpCode, WORD Param)
{
TMAC TMac;
TMac.EventCmd = STATIND;
TMac.Parm[0] = OpCode;
TMac.Parm[1] = Param;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TMSetResult (WORD Result)
{
TMAC TMac;
TMac.EventCmd = SETRESULT;
TMac.Parm[0] = Result;
GenIoctl ((void far *) &TMac, hTestMAC);
return SUCCESS;
}
int TTSetRxBuffSize ()
{
// RXSIZE [BufferSize(s)]
// if no parameters given, then display buffer sizes
char *token;
int i, offset = 0;
WORD BlkCnt = 0, BlkSize;
while (((token = strtok (NULL, "\n\t ")) != NULL) &&
(BlkCnt < MACMSC.MscMaxDataBlocks))
{
RxBuffDesc.RxDataBlk[BlkCnt].RxDataPtr = TMRcvBuff + offset;
if ((BlkSize = (WORD) GetNumericParm (token)) < 0)
return TT_INVALID_PARAMETER;
RxBuffDesc.RxDataBlk[BlkCnt].RxDataLen = BlkSize;
offset += BlkSize;
BlkCnt = ++RxBuffDesc.RxDataCnt;
}
if (!offset)
{
for (i=0; i<RxBuffDesc.RxDataCnt; ++i)
PrintMsg (0, "Rx Data Block %d Length: %d",
i, RxBuffDesc.RxDataBlk[i].RxDataLen);
}
return SUCCESS;
}