home *** CD-ROM | disk | FTP | other *** search
- /* mrcv.h */
- /* (C) COPYRIGHT DATA CONNECTION LIMITED 1994 */
-
- /*****************************************************************************/
- /* Change History */
- /* */
- /* 11/01/94 DK Created */
- /* 14/04/94 DK Name table added for tracing */
- /*****************************************************************************/
-
- /*****************************************************************************/
- /* static configuration constants */
- /* Note that MAX_RCV_PER_SERVICE cannot exceed 63, because we cannot wait */
- /* on more than 64 events (and one extra event is needed for receive) */
- /*****************************************************************************/
- #define MAX_RCV_PER_THREAD 63
- #define MAX_RECEIVE_THREADS 64
-
- /*****************************************************************************/
- /* global critical section */
- /*****************************************************************************/
- CRITICAL_SECTION runsem;
-
- /*****************************************************************************/
- /* APPC verb control block and macros for manipulation of vcb */
- /*****************************************************************************/
- #define CLEARVCB memset(vcbptr,0,sizeof(VCB));
- #define P_TPE(X) ((struct tp_ended *)X)
- #define P_RAL(X) ((struct receive_allocate *)X)
-
- #define P_M_CFD(X) ((struct mc_confirmed *)X)
- #define P_M_DAL(X) ((struct mc_deallocate *)X)
- #define P_M_RAW(X) ((struct mc_receive_and_wait *)X)
-
- typedef struct vcb
- {
- union
- {
- struct appc_hdr hdr;
- struct receive_allocate rcvalloc;
- struct tp_ended tpend;
- struct mc_confirmed confirmed;
- struct mc_deallocate deallocate;
- struct mc_receive_and_wait rcvwait;
- } U_VCB;
- } VCB;
-
- /*****************************************************************************/
- /* structures for convert verb */
- /*****************************************************************************/
- struct convert cnvt;
- char * cnvtptr;
-
- /*****************************************************************************/
- /* for outputting results */
- /*****************************************************************************/
- typedef unsigned long RESULT;
- RESULT * ResultPtr;
- RESULT * ResultBuf;
- short NumResults;
-
- /*****************************************************************************/
- /* conversation control block - one per conversation */
- /*****************************************************************************/
- typedef struct convcb
- {
- char TPid[8];
- char type[8];
- unsigned long Convid;
- HANDLE async_corr;
- char * DataPtr;
- unsigned short thread;
- unsigned short conv;
- unsigned short RcvCount;
- BOOL TPEnded;
- BOOL Deallocated;
- RESULT ConvStarted;
- HANDLE hEvent;
- VCB vcb;
- } CONVCB;
-
- /*****************************************************************************/
- /* structures for receive threads */
- /*****************************************************************************/
- typedef struct rcv_thread
- {
- HANDLE event1;
- HANDLE event2;
- CONVCB * convptr;
- } RCV_THREAD;
-
- RCV_THREAD RcvThreadArray [MAX_RECEIVE_THREADS];
-
- /*****************************************************************************/
- /* File Names and handle for trace file */
- /*****************************************************************************/
- char FileName [60];
- char TraceFile[60];
- FILE *t = NULL;
-
- /*****************************************************************************/
- /* APPC Names from configuration file */
- /*****************************************************************************/
- char TPName[64];
- char LocalTPName[64];
- char LocalLUAlias[8];
- char RemoteLUAlias[8];
- char ModeName[8];
- char RemoteTPName[64];
-
- /*****************************************************************************/
- /* Global Variables from configuration file */
- /*****************************************************************************/
- unsigned short NumRcvThreads;
- unsigned short NumRcvConvs;
- unsigned short RcvSize;
-
- /*****************************************************************************/
- /* Global Variables */
- /*****************************************************************************/
- unsigned short NumRalcs; /* number of receive_allocs issued */
- unsigned short RcvConvs; /* number of conversations completed */
- unsigned short ThreadCount; /* total thread count */
- unsigned short RcvThreads; /* count of receive threads */
- unsigned short SimRcvConvs; /* number of simultaneous rcv convs */
-
- /*****************************************************************************/
- /* Names of verbs for tracing */
- /*****************************************************************************/
- char *VerbName[] =
- {
- "UNKNOWN_VERB", /* 0x0000 */
- "MC_ALLOCATE", /* 0x0001 */
- "UNKNOWN_VERB", /* 0x0002 */
- "MC_CONFIRM", /* 0x0003 */
- "MC_CONFIRMED", /* 0x0004 */
- "MC_DEALLOCATE", /* 0x0005 */
- "MC_FLUSH", /* 0x0006 */
- "MC_GET_ATTRIBUTES", /* 0x0007 */
- "UNKNOWN_VERB", /* 0x0008 */
- "UNKNOWN_VERB", /* 0x0009 */
- "MC_PREPARE_TO_RECEIVE", /* 0x000a */
- "MC_RECEIVE_AND_WAIT", /* 0x000b */
- "MC_RECEIVE_IMMEDIATE", /* 0x000c */
- "MC_RECEIVE_AND_POST", /* 0x000d */
- "MC_REQUEST_TO_SEND", /* 0x000e */
- "MC_SEND_DATA", /* 0x000f */
- "MC_SEND_ERROR", /* 0x0010 */
- "UNKNOWN_VERB", /* 0x0011 */
- "MC_TEST_RTS", /* 0x0012 */
- "TP_ENDED", /* 0x0013 */
- "TP_STARTED", /* 0x0014 */
- "UNKNOWN_VERB", /* 0x0015 */
- "RECEIVE_ALLOCATE", /* 0x0016 */
- "UNKNOWN_VERB", /* 0x0017 */
- "MC_SEND_CONVERSATION" /* 0x0018 */
- };
-
- /*****************************************************************************/
- /* Windows stuff */
- /*****************************************************************************/
- HWND hWndMain;
- char title[30]={'\0'};
- #define OUTPUTNUMBER sprintf(title,"thrd simR done %d %d %d", \
- ThreadCount,SimRcvConvs,RcvConvs); \
- SetWindowText(hWndMain,title);
-
- /*****************************************************************************/
- /* Function Prototypes */
- /*****************************************************************************/
- int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
- LPSTR lpCmdLine, int nCmdShow);
- BOOL InitializeWinMain(HINSTANCE hInstance);
- LONG PASCAL TPWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
- void InitializeMain(void);
- BOOL IssueRcvVerb(CONVCB * convptr);
- BOOL ProcessReturns(CONVCB * convptr);
- void ReadConfig(void);
- void CONV_A_TO_E(char * string,int length);
- void CONV_E_TO_A(char * string,int length);
- void StartConversation(CONVCB * convptr);
- void EndConversation(CONVCB * convptr);
- int ReadString(char * lpValueName, char FAR * lpData, int maxlen);
- void PadString(char * string, int length);
- void OutputResults(void);
- void Build_RECEIVE_ALLOCATE(CONVCB * convptr);
- void Build_TP_ENDED(CONVCB * convptr);
- void Build_MC_CONFIRMED(CONVCB * convptr);
- void Build_MC_DEALLOCATE(CONVCB * convptr);
- void Build_MC_RECEIVE_AND_WAIT(CONVCB * convptr);
- DWORD WINAPI RcvAllocThread();
- DWORD WINAPI ReceiveThread(DWORD k);
-