#include #include #include #include #include "wrapper.h" #include "ddestrs.h" extern INT iAvailFormats[]; extern BOOL UpdateCount(HWND,INT,INT); extern HANDLE hmemNet; void CALLBACK TimerFunc( HWND hwnd, UINT msg, UINT id, DWORD dwTime) { HCONV hConv; HCONVLIST hConvList; LONG lflags; switch (id%2) { case 1: hConv = 0; hConvList=(HCONVLIST)GetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST); while (hConv = DdeQueryNextServer(hConvList, hConv)) { // POKE CHANGES #if 0 idI=GetThreadLong(GETCURRENTTHREADID(),OFFSET_IDINST); if(DdeClientTransaction("Poke Transaction", strlen("Poke Transaction")+1, hConv, DdeCreateStringHandle(idI,"TestItem",CP_WINANSI), CF_TEXT, XTYP_POKE, TIMEOUT_ASYNC, NULL)==0){ DDEMLERROR("DdeStrs.Exe -- DdeClientTransaction failed:XTYP_POKE\r\n"); } #endif // END OF POKE CHANGES // Allow 'Pause' functionality -p on command line. lflags=GetWindowLong(hwndMain,OFFSET_FLAGS); if((lflags&FLAG_PAUSE)!=FLAG_PAUSE) { if(DdeClientTransaction(szExecRefresh, strlen(szExecRefresh) + 1, hConv, 0, 0, XTYP_EXECUTE, TIMEOUT_ASYNC, NULL)==0){ DDEMLERROR("DdeStrs.Exe -- DdeClientTransaction failed:XTYP_EXECUTE\r\n"); } } } } return; } BOOL InitClient() { UINT uid; ReconnectList(); uid = SetTimer( hwndMain, (UINT)GetThreadLong(GETCURRENTTHREADID(),OFFSET_CLIENTTIMER), (UINT)(GetWindowLong(hwndMain,OFFSET_DELAY)), TimerFunc); // This starts the test immidiatly. No delay waiting for the first // WM_TIMER call. TimerFunc(hwndMain,WM_TIMER,uid,0); return(TRUE); } VOID CloseClient() { HCONVLIST hConvList; hConvList=(HCONVLIST)GetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST); KillTimer(hwndMain,(UINT)GetThreadLong(GETCURRENTTHREADID(),OFFSET_CLIENTTIMER)); if (!DdeDisconnectList(hConvList)) { DDEMLERROR("DdeStrs.Exe -- DdeDisconnectList failed\r\n"); } } VOID ReconnectList() { HCONV hConv; HCONVLIST hConvList=0; LONG cClienthConvs; INT i; DWORD dwid; dwid=GetThreadLong(GETCURRENTTHREADID(),OFFSET_IDINST); if(dwid==0) { DDEMLERROR("DdeStrs.Exe -- Null IdInst, aborting Connect!\r\n"); return; } hConvList = DdeConnectList(dwid, ServiceInfoTable[0].hszService, Topics[0].hszTopic, GetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST), NULL); if (hConvList == 0) { // This call is expected to fail in the case of a client // starting when there is no available server. Just return // from the routine and continue. return; } SetThreadLong(GETCURRENTTHREADID(),OFFSET_HCONVLIST,hConvList); hConv = 0; cClienthConvs = 0L; while (hConv = DdeQueryNextServer(hConvList, hConv)) { for (i=0; i<(int)Items[0].cFormats; i++) { if (iAvailFormats[i]) { if (!DdeClientTransaction( NULL, 0, hConv, Items[0].hszItem, TestItemFormats[i].wFmt, XTYP_ADVSTART|XTYPF_ACKREQ, TIMEOUT_ASYNC, NULL)){ DDEMLERROR("DdeStrs.Exe -- Error DdeClientTransaction failed\r\n"); return; } // if } // if } // for cClienthConvs++; } // while // Update the client count for the current thread. dwid=GETCURRENTTHREADID(); SetThreadLong(dwid,OFFSET_CCLIENTCONVS,cClienthConvs); UpdateCount(hwndMain,OFFSET_CLIENT_CONNECT,PNT); }