|
|
/***
*apglobal.cpp - Ffile for the C/C++ version of the apglobal functions * * Copyright (C) 1992, Microsoft Corporation. All Rights Reserved. * Information Contained Herein Is Proprietary and Confidential. * *Purpose: This allows tests written in C to write debug info in the same manner * as our Basic tests. * *Revision History: * * [00] 25-Nov-92 chriskau : created * [01] 13-Dec-92 Brandonb : changed to DLL, added apLogExtra * [02] 26-Jan-93 ChrisK : added exe.don support to apEndTest * [03] 23-Feb-93 ChrisK : reset iFailFlag and icErrorCount on apInitTest * [04] 14-Jan-94 Mesfink : Modified to enable 32bit compilation & unicode *Implementation Notes: * *****************************************************************************/ #include "hostenv.h"
#define _APGLOBAL_
#include "apglobal.h"
#define wcsicmp _wcsicmp
#define APLOGFAIL_MAX 254
#define AMAX 255
#define RESULTS_TXT "results.txt"
#define RESULTS_LOG "results.log"
#define OLEAUTO_PRF "oleauto.prf"
#define RESULTS_TXTX SYSSTR("results.txt")
#define RESULTS_LOGX SYSSTR("results.log")
#define OLEAUTO_PRFX SYSSTR("oleauto.prf")
#define RESULTS_DEB "results.deb"
#define RESULTS_DON "exe.don"
#define RES_PATH "c:\\school\\"
#define PASS_STR SYSSTR("PASSED ")
#define FAIL_STR SYSSTR("FAILED ***** ")
#define RUN_STR SYSSTR("RUNNING **** ")
// vars for output of testing/failure info
SYSCHAR szTest[255]; SYSCHAR szScenario[255]; SYSCHAR szLastTest[255] = SYSSTR(""); SYSCHAR szLastScen[255] = SYSSTR(""); SYSCHAR szBugNumber[255]; int iFailFlag;
// vars for bookkeeping
int icErrorCount; long icLogFileLocation; long icPrfFileLocation; int fInTest;
// vars for thread and process syncronization on win95/NT
#if defined(_MT)
HANDLE hmutexTxt; HANDLE hmutexLog; HANDLE hmutexPrf; #endif
/* -------------------------------------------------------------------------
NAME: Unicode2Ansi lWriteAnsi lOpenAnsi lCreatAnsi
Revision:
[0] 19-01-94 MesfinK: Created -------------------------------------------------------------------------*/
/*LPSTR Unicode2Ansi(SYSCHAR FAR * szString)
{ #if defined(UNICODE)
char AnsiBuffer[AMAX]; int iCount;
iCount=lstrlen(szString); if(WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK, szString,iCount+1,(LPSTR) AnsiBuffer,AMAX,NULL,NULL)) return (LPSTR)AnsiBuffer; else return NULL; #else
return (LPSTR)szString; #endif
}*/
SIZE_T lWriteAnsi(FILETHING hfile, SYSCHAR FAR *szString, int iCount) { #if defined(UNICODE)
char AnsiBuffer[AMAX]; if(!WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK, szString, iCount+1, (LPSTR) AnsiBuffer, AMAX, NULL, NULL)) return (SIZE_T)HFILE_ERROR; else return fwrite(AnsiBuffer, 1, (short)iCount, hfile); #elif defined(WIN16)
return _lwrite(hfile,(LPSTR)szString,(short)iCount); #else
return fwrite(szString, 1, (short)iCount, hfile); #endif
}
FILETHING lOpenAnsi(char FAR *szFileName) { FILETHING hfTemp; #if defined(WIN16)
hfTemp = _lopen(szFileName, WRITE);
if (hfTemp == HFILE_ERROR) hfTemp = _lcreat(szFileName, 0); else _llseek(hfTemp, 0, 2);
return hfTemp; #else
hfTemp = fopen(szFileName, "r+b"); if (hfTemp == NULL) hfTemp = fopen(szFileName, "wb"); else fseek(hfTemp, 0, SEEK_END); return hfTemp; #endif
}
int lCloseAnsi(FILETHING f) { #if defined(WIN16)
return _lclose(f); #else
return fclose(f); #endif
}
/* -------------------------------------------------------------------------
NAME: FilePrintf
Revision:
[0] 12-07-92 BrandonB Created -------------------------------------------------------------------------*/ int _cdecl FilePrintf(FILETHING hfile, SYSCHAR FAR * szFormat, ...) { int x; SYSCHAR szBuf[1024]; #if defined(WIN16)
char szLocal[256]; #endif
#if defined(_ALPHA_)
va_list args; args.offset=4; #else
char FAR *args; #endif
if (szFormat != NULL) { #if defined(_ALPHA_)
args.a0 = ((char FAR *)(&szFormat))+4; #else
args =((char FAR *)(&szFormat))+4; #endif
#if defined(_NTWIN)
x = vswprintf(szBuf, szFormat, args); #else
#if defined(WIN16)
x = wvsprintf(szBuf, szFormat, args); #else
x = vsprintf(szBuf, szFormat, args); #endif
#endif
if (lWriteAnsi(hfile, szBuf, lstrlen(szBuf)) == NULL) return(-1); } return (0); }
#if 0
/* -------------------------------------------------------------------------
NAME: apInitTest
Description: This function initializes a testcase. The name of the testcase is written to results.txt and a global variable is set to the same value.
Input: szTestName - char * pointing to the name of the testcase
Output: (return) - 0 if no error, -1 if there was an error
Revision:
[0] 11-24-92 ChrisKau Created [1] 12-04-92 BrandonB changed to use only windows call
-------------------------------------------------------------------------*/ extern "C" int FAR PASCAL apInitTestCore (SYSCHAR FAR * szTestName) { FILETHING hfResultsTxt; char szFullFileName[255];
if (fInTest == TRUE) { // log error information
FILETHING hfResultsLog; lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, RESULTS_LOG);
#if defined(_MT)
WaitForSingleObject(hmutexLog, INFINITE); #endif
hfResultsLog = lOpenAnsi(szFullFileName);
if (hfResultsLog == NULL) goto Done;
FilePrintf(hfResultsLog, SYSSTR("\r\n========================================\r\n") ); FilePrintf(hfResultsLog, SYSSTR(" Begin: %s\r\n\r\n"), (LPSYSSTR )szTest); FilePrintf(hfResultsLog, SYSSTR("\r\n ________________\r\n %s\r\n"), (LPSYSSTR )szScenario); FilePrintf (hfResultsLog, SYSSTR(" !!! apInitTest called before previous test ended!\r\n")); iFailFlag++; FilePrintf (hfResultsLog, SYSSTR(" ________________\r\n")); lCloseAnsi(hfResultsLog); Done:; #if defined(_MT)
ReleaseMutex(hmutexLog); #endif
apEndTest(); return(-1); } else fInTest = TRUE;
iFailFlag = 0; icErrorCount = 0; szBugNumber[0] = 0; wsprintf( szTest, SYSSTR("%-20s") , szTestName); if (!(szTestName)) return(-1);
lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, RESULTS_TXT);
#if defined(_MT)
WaitForSingleObject(hmutexTxt, INFINITE); #endif
hfResultsTxt = lOpenAnsi(szFullFileName);
if (hfResultsTxt == NULL) { #if defined(_MT)
ReleaseMutex(hmutexTxt); #endif
return(-1); } if (lWriteAnsi(hfResultsTxt, (SYSCHAR FAR * )szTest, lstrlen(szTest)) == NULL) { #if defined(_MT)
ReleaseMutex(hmutexTxt); #endif
return(-1); }
#if defined(WIN32)
if ((icLogFileLocation = ftell(hfResultsTxt)) == -1) { #if defined(_MT)
ReleaseMutex(hmutexTxt); #endif
lCloseAnsi(hfResultsTxt); return(-1); } #else // win16
if ((icLogFileLocation = _llseek(hfResultsTxt, 0, 1)) == HFILE_ERROR) { lCloseAnsi(hfResultsTxt); return(-1); } #endif
else FilePrintf(hfResultsTxt,SYSSTR("%-70s\r\n") , RUN_STR);
lCloseAnsi(hfResultsTxt); #if defined(_MT)
ReleaseMutex(hmutexTxt); #endif
apWriteDebugCore(SYSSTR("%s\n") , (SYSCHAR FAR * )szTest); return(0); }
/* -------------------------------------------------------------------------
NAME: apInitScenario
Description: This function initializes a scenario. The name of the scenario is written to the debug window and a global variable is set to the same value.
Input: szScenarioName - SYSCHAR * pointing to the name of the scenario
Output: (return) - 0 if no error, -1 if there was an error
Revision:
[0] 11-24-92 ChrisKau Created [1] 12-04-92 BrandonB changed to use only windows calls etc. [2] 01-28-94 MesfinK added API & NLS information. -------------------------------------------------------------------------*/ extern "C" int FAR PASCAL apInitScenarioCore (SYSCHAR FAR * szScenarioName) { lstrcpy((SYSCHAR FAR * )szScenario, (SYSCHAR FAR * )szScenarioName); szLastScen[0] = 0;
apWriteDebugCore(SYSSTR("%s\n") , (SYSCHAR FAR * )szScenarioName); return(0); }
#endif //0
/* -------------------------------------------------------------------------
NAME: apLogFailInfo
Description: This call takes four strings, and writes out the error information to results.txt and results.log files.
Input: szDescription - SYSCHAR * describing what went wrong szExpected - SYSCHAR * expected value of testcase szActual - SYSCHAR * actual value of testcase szBugNum - SYSCHAR * bug number in RAID data base
Output: (return) - 0 if no error, -1 if there was an error
Revision:
[0] 11-24-92 ChrisKau Created [1] 12-04-92 BrandonB changed to use only windows call [2] 02-03-94 ChrisK Change to handle WIN16/WIN32/UNICODE -------------------------------------------------------------------------*/ extern "C" int FAR PASCAL apLogFailInfoCore (LPSYSSTR szDescription, LPSYSSTR szExpected, LPSYSSTR szActual, LPSYSSTR szBugNum) { FILETHING hfResultsLog; char szFullFileName[255]; lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, RESULTS_LOG);
#if defined(_MT)
WaitForSingleObject(hmutexLog, INFINITE); #endif
hfResultsLog = lOpenAnsi((char FAR *)szFullFileName);
if (hfResultsLog == NULL) { #if defined(_MT)
ReleaseMutex(hmutexLog); #endif // _MT
return(-1); }
if (fInTest != TRUE) { // log failure info or warn of mem leak
}
if (lstrcmp(szTest, szLastTest)) { FilePrintf(hfResultsLog, SYSSTR("\r\n========================================\r\n") ); FilePrintf(hfResultsLog, SYSSTR(" Begin: %s\r\n\r\n"), (LPSYSSTR)szTest); apWriteDebugCore(SYSSTR("\n========================================\n\n")); apWriteDebugCore(SYSSTR(" Begin: %s\n\n"), (LPSYSSTR)szTest); lstrcpy(szLastTest, szTest); }
if (lstrcmp(szScenario, szLastScen)) { FilePrintf(hfResultsLog, SYSSTR("\r\n ________________\r\n %s\r\n"), (LPSYSSTR)szScenario); apWriteDebugCore(SYSSTR("\n ________________\n %s\n"), (LPSYSSTR)szScenario); lstrcpy(szLastScen, szScenario); }
iFailFlag++;
if (lstrlen(szDescription)) { FilePrintf (hfResultsLog, SYSSTR(" !!! %s\r\n"), (LPSYSSTR)szDescription); apWriteDebugCore (SYSSTR(" !!! %s\n"), (LPSYSSTR)szDescription); }
if (lstrlen(szExpected)+lstrlen(szActual)) { FilePrintf(hfResultsLog, SYSSTR(" Expected: %s\r\n"), (LPSYSSTR)szExpected); FilePrintf(hfResultsLog, SYSSTR(" Actuals : %s\r\n"), (LPSYSSTR)szActual); apWriteDebugCore(SYSSTR(" Expected: %s\n"), (LPSYSSTR)szExpected); apWriteDebugCore(SYSSTR(" Actuals : %s\n"), (LPSYSSTR)szActual); }
if (lstrlen(szBugNum)) { FilePrintf(hfResultsLog, SYSSTR(" BugNum : %s\r\n"), (LPSYSSTR)szBugNum); apWriteDebugCore(SYSSTR(" BugNum : %s\n"), (LPSYSSTR)szBugNum); lstrcpy(szBugNumber, szBugNum); }
FilePrintf (hfResultsLog, SYSSTR(" ________________\r\n")); apWriteDebugCore( SYSSTR(" ________________\n"));
lCloseAnsi(hfResultsLog); #if defined(_MT)
ReleaseMutex(hmutexLog); #endif
return(0); }
/* -------------------------------------------------------------------------
NAME: apEndTest
Description: This function writes out the final passed or failed for a particular testcase.
Input: (none)
Output: (none) - if there is an error we are already quitting
Revision
[0] 11-24-92 ChrisKau Created [1] 12-04-92 BrandonB changed to use only windows call -------------------------------------------------------------------------*/ extern "C" void FAR PASCAL apEndTest() { SYSCHAR szMessage[25]; SYSCHAR szMTOut[255]; FILETHING hfResultsTxt; char szFullFileName[255]; if (iFailFlag) { lstrcpy(szMessage, FAIL_STR); } else { lstrcpy(szMessage, PASS_STR); } fInTest = FALSE; lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, RESULTS_TXT);
#if defined(_MT)
WaitForSingleObject(hmutexTxt, INFINITE); #endif
hfResultsTxt = lOpenAnsi(szFullFileName);
if (hfResultsTxt == NULL) { #if defined(_MT)
ReleaseMutex(hmutexTxt); #endif
return; }
// #if defined(_MT)
if (!lstrlen(szBugNumber)) wsprintf(szMTOut, SYSSTR("%s\t%d"), (SYSCHAR FAR * )szMessage, iFailFlag); else wsprintf(szMTOut, SYSSTR("%s\t%d Bug(s): %s"), (SYSCHAR FAR * )szMessage, iFailFlag, (SYSCHAR FAR * )szBugNumber);
#if defined(WIN32)
fseek(hfResultsTxt, icLogFileLocation, SEEK_SET); #else // win16
_llseek(hfResultsTxt, icLogFileLocation, 0); #endif
FilePrintf(hfResultsTxt,SYSSTR("%-70s\r\n") , (SYSCHAR FAR * )szMTOut); apWriteDebugCore(SYSSTR("%-70s\r\n") , (SYSCHAR FAR * )szMTOut); lCloseAnsi(hfResultsTxt); #if defined(_MT)
ReleaseMutex(hmutexTxt); #endif
lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, RESULTS_DON);
hfResultsTxt = lOpenAnsi(szFullFileName); lCloseAnsi(hfResultsTxt);
return; }
#if 0
extern "C" int FAR PASCAL apInitPerfCore(SYSCHAR FAR * szServerType, SYSCHAR FAR * szProcType, int bitness, int server_bitness) { FILETHING hfResultsPrf; char szFullFileName[255]; SYSCHAR szMTOut[255];
wsprintf(szMTOut, SYSSTR("*%-30s, %-8s, %d, %d\r\n"), szServerType, szProcType, bitness, server_bitness);
lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, OLEAUTO_PRF);
#if defined(_MT)
WaitForSingleObject(hmutexPrf, INFINITE); #endif
hfResultsPrf = lOpenAnsi(szFullFileName);
if (hfResultsPrf == NULL) { #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
return(-1); } if (lWriteAnsi(hfResultsPrf, szMTOut, lstrlen(szMTOut)) == NULL) { #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
return(-1); }
#if defined(WIN32)
if ((icPrfFileLocation = ftell(hfResultsPrf)) == -1) { #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
lCloseAnsi(hfResultsPrf); return(-1); } #else // win16
if ((icPrfFileLocation = _llseek(hfResultsPrf, 0, 1)) == HFILE_ERROR) { lCloseAnsi(hfResultsPrf); return(-1); } #endif
else FilePrintf(hfResultsPrf, SYSSTR("%-31s, %8ld, %6.2f\r\n"), SYSSTR("UNKNOWN"), 0, 0.00);
lCloseAnsi(hfResultsPrf); #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
return(0); }
extern "C" int FAR PASCAL apLogPerfCore(SYSCHAR FAR *szTestType, DWORD microsecs, float std_deviation) { FILETHING hfResultsPrf; char szFullFileName[255]; lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, OLEAUTO_PRF);
#if defined(_MT)
WaitForSingleObject(hmutexPrf, INFINITE); #endif
hfResultsPrf = lOpenAnsi(szFullFileName);
if (hfResultsPrf == NULL) { #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
return(-1); }
#if defined(WIN32)
fseek(hfResultsPrf, icPrfFileLocation, SEEK_SET); #else // win16
_llseek(hfResultsPrf, icPrfFileLocation, 0); #endif
FilePrintf(hfResultsPrf, SYSSTR("%-31s, %8ld, %6.2f\r\n"), szTestType, microsecs, std_deviation); #if defined(WIN32)
if ((icPrfFileLocation = ftell(hfResultsPrf)) == -1) { #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
lCloseAnsi(hfResultsPrf); return(-1); } #else // win16
if ((icPrfFileLocation = _llseek(hfResultsPrf, 0, 1)) == HFILE_ERROR) { lCloseAnsi(hfResultsPrf); return(-1); } #endif
lCloseAnsi(hfResultsPrf); #if defined(_MT)
ReleaseMutex(hmutexPrf); #endif
return(0); }
#endif //0
/* -------------------------------------------------------------------------
NAME: apWriteDebugCore
Description: This function writes a string to the debug window or monochrome monitor or to the results.deb file or to both
Input: a format sting and a variable number of arguments
Output: 0 if sucessful, -1 if not
Revision:
[0] 12-07-92 BrandonB Created -------------------------------------------------------------------------*/ int FAR _cdecl apWriteDebugCore(SYSCHAR FAR * szFormat, ...) { int x; SYSCHAR szBuf[1024]; // char szFullFileName[255];
// FILETHING hfResultsExtra;
#if defined(_ALPHA_)
va_list args; args.offset=4; #else
char FAR *args; #endif
if (szFormat != NULL) { #if defined(_ALPHA_)
args.a0 = ((char FAR *)(&szFormat))+4; #else
args =((char FAR *)(&szFormat))+4; #endif
x = wvsprintf(szBuf, szFormat, args); } else return (-1);
// if (fDebTrace == TRUE)
OutputDebugString(szBuf); /*
if (fFileTrace == TRUE) { lstrcpyA(szFullFileName, RES_PATH); // create full path name
lstrcatA(szFullFileName, RESULTS_DEB);
hfResultsExtra = lOpenAnsi(szFullFileName);
if (hfResultsExtra == NULL) return(-1); if (lWriteAnsi(hfResultsExtra, szBuf, lstrlen(szBuf)) == NULL) return(-1);
lCloseAnsi(hfResultsExtra); // close results file
} */ Yield(); return(0); }
#if 0
#if defined(UNICODE)
extern "C" int FAR PASCAL apInitTestA (LPSTR szTestName) { SYSCHAR szTestNameW[255];
if (lstrlenA(szTestName) <= 126) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szTestName, -1, szTestNameW, 255);
return apInitTestCore (szTestNameW); } else { return -1; } }
extern "C" int FAR PASCAL apInitScenarioA (LPSTR szScenarioName) { SYSCHAR szScenarioNameW[255];
if (lstrlenA(szScenarioName) <= 126) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szScenarioName, -1, szScenarioNameW, 255);
return apInitScenarioCore(szScenarioNameW); } else { return -1; } }
// ANSI version that is exposed when the system is unicode version
/* -------------------------------------------------------------------------
NAME: apLogFailInfoA
Description: This call takes four ansi strings, converts them to unicode and calls the wide version of apLogFailInfo.
Input: szDescription - LPSTR describing what went wrong szExpected - LPSTR expected value of testcase szActual - LPSTR actual value of testcase szBugNum - LPSTR bug number in RAID data base
Output: (return) - 0 if no error, -1 if there was an error
Revision:
[0] 11-24-92 ChrisKau Created [1] 12-04-92 BrandonB changed to use only windows call [2] 01-18-94 Mesfink modified to enable UNICODE. [3] 02-03-94 ChrisK Made apLogFailInfoA out of everything else -------------------------------------------------------------------------*/ // this should be an even number for 'nice' reasons
extern "C" int FAR PASCAL apLogFailInfoA (LPSTR szDescription, LPSTR szExpected, LPSTR szActual, LPSTR szBugNum) { SYSCHAR szDescriptionW[APLOGFAIL_MAX]; SYSCHAR szExpectedW[APLOGFAIL_MAX]; SYSCHAR szActualW[APLOGFAIL_MAX]; SYSCHAR szBugNumW[APLOGFAIL_MAX];
if (lstrlenA(szDescription) <= (APLOGFAIL_MAX)) if (lstrlenA(szExpected) <= (APLOGFAIL_MAX)) if (lstrlenA(szActual) <= (APLOGFAIL_MAX)) if (lstrlenA(szBugNum) <= (APLOGFAIL_MAX)) {
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szDescription, -1, szDescriptionW, APLOGFAIL_MAX);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szExpected, -1, szExpectedW, APLOGFAIL_MAX);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szActual, -1, szActualW, APLOGFAIL_MAX);
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szBugNum, -1, szBugNumW, APLOGFAIL_MAX);
return (apLogFailInfoCore(szDescriptionW, szExpectedW, szActualW, szBugNumW)); } else { return (-1); } else { return (-1); } else { return (-1); } else { return (-1); }
}
/* -------------------------------------------------------------------------
NAME: apWriteDebugA
Description: This function writes a string to the debug window or monochrome monitor or to the results.deb file or to both
Input: a format sting and a variable number of arguments
Output: 0 if sucessful, -1 if not
Revision:
[0] 02-04-94 BrandonB Created -------------------------------------------------------------------------*/ extern "C" int FAR _cdecl apWriteDebugA(char FAR * szFormat, ...) { int x; char szANSIBuf[1024]; // FILETHING hfResultsExtra;
// char szFullFileName[255];
#if defined(_ALPHA_)
va_list args; args.offset=4; #else
char FAR *args; #endif
if (szFormat != NULL) { #if defined(_ALPHA_)
args.a0 = ((char FAR *)(&szFormat))+4; #else
args =((char FAR *)(&szFormat))+4; #endif
x = wvsprintfA(szANSIBuf, szFormat, args); } else return (-1);
// if (fDebTrace == TRUE)
OutputDebugStringA(szANSIBuf); /*
if (fFileTrace == TRUE) { lstrcpyA((char FAR * )szFullFileName, (char FAR * )RES_PATH); lstrcatA((char FAR * )szFullFileName, (char FAR * )RESULTS_DEB);
hfResultsExtra = lOpenAnsi(szFullFileName);
if (hfResultsExtra == NULL) return(-1); fwrite( (LPSTR)szANSIBuf, 1, lstrlenA(szANSIBuf), hfResultsExtra);
lCloseAnsi(hfResultsExtra); } */ Yield(); return(0); }
extern "C" int FAR PASCAL apInitPerfA(char * szServerType, char * szProcType, int bitness, int server_bitness) { SYSCHAR szServerTypeW[255]; SYSCHAR szProcTypeW[255];
if ((lstrlenA(szServerType) <= 254) && (lstrlenA(szProcType) <= 254)) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szServerType, -1, szServerTypeW, 255); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szProcType, -1, szProcTypeW, 255);
return apInitPerfCore(szServerTypeW, szProcTypeW, bitness, server_bitness); } else { return(-1); } }
extern "C" int FAR PASCAL apLogPerfA(char *szTestType, DWORD microsecs, float std_deviation) { SYSCHAR szTestTypeW[255];
if (lstrlenA(szTestType) <= 254) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szTestType, -1, szTestTypeW, 255);
return apLogPerfCore(szTestTypeW, microsecs, std_deviation); } else { return(-1); } }
#endif // UNICODE
#endif //0
#if defined(WIN32) && !defined(UNICODE) // chicago and win32s
#include <wchar.h>
LPWSTR FAR PASCAL lstrcatWrap(LPWSTR sz1, LPWSTR sz2) { return wcscat(sz1, sz2); }
LPWSTR FAR PASCAL lstrcpyWrap(LPWSTR sz1, LPWSTR sz2) { return wcscpy(sz1, sz2); }
int FAR PASCAL lstrcmpWrap(LPWSTR sz1, LPWSTR sz2) { return wcscmp(sz1, sz2); }
int FAR PASCAL lstrcmpiWrap(LPWSTR sz1, LPWSTR sz2) { return wcsicmp(sz1, sz2); }
//int FAR __cdecl wsprintfWrap(LPWSTR szDest, WCHAR FAR *szFormat, ...)
//{
// return vswprintf(szDest, szFormat, ((char far *)(&szFormat))+4);
//}
SIZE_T FAR PASCAL lstrlenWrap(LPWSTR sz1) { return wcslen(sz1); }
#if 0
extern "C" int FAR PASCAL apInitTestW (LPWSTR szTestName) { SYSCHAR szTestNameA[255];
if (lstrlenWrap(szTestName) <= 126) { WideCharToMultiByte(CP_ACP, NULL, szTestName, -1, szTestNameA, 255, NULL, NULL);
return apInitTestCore(szTestNameA); } else { return -1; } }
int FAR PASCAL apLogFailInfoW (LPWSTR szDescription, LPWSTR szExpected, LPWSTR szActual, LPWSTR szBugNum); extern "C" int FAR PASCAL apLogFailInfoW (LPWSTR szDescription, LPWSTR szExpected, LPWSTR szActual, LPWSTR szBugNum) { SYSCHAR szDescriptionA[APLOGFAIL_MAX]; SYSCHAR szExpectedA[APLOGFAIL_MAX]; SYSCHAR szActualA[APLOGFAIL_MAX]; SYSCHAR szBugNumA[APLOGFAIL_MAX];
if (lstrlenWrap(szDescription) <= (APLOGFAIL_MAX)) if (lstrlenWrap(szExpected) <= (APLOGFAIL_MAX)) if (lstrlenWrap(szActual) <= (APLOGFAIL_MAX)) if (lstrlenWrap(szBugNum) <= (APLOGFAIL_MAX)) {
WideCharToMultiByte(CP_ACP, NULL, szDescription, -1, szDescriptionA, APLOGFAIL_MAX, NULL, NULL);
WideCharToMultiByte(CP_ACP, NULL, szExpected, -1, szExpectedA, APLOGFAIL_MAX, NULL, NULL);
WideCharToMultiByte(CP_ACP, NULL, szActual, -1, szActualA, APLOGFAIL_MAX, NULL, NULL);
WideCharToMultiByte(CP_ACP, NULL, szBugNum, -1, szBugNumA, APLOGFAIL_MAX, NULL, NULL);
return (apLogFailInfoCore(szDescriptionA, szExpectedA, szActualA, szBugNumA)); } else { return (-1); } else { return (-1); } else { return (-1); } else { return (-1); }
}
extern "C" int FAR PASCAL apInitScenarioW (LPWSTR szScenarioName) { SYSCHAR szScenarioNameA[255];
if (lstrlenWrap(szScenarioName) <= 126) { WideCharToMultiByte(CP_ACP, NULL, szScenarioName, -1, szScenarioNameA, 255, NULL, NULL);
return apInitScenarioCore(szScenarioNameA); } else { return -1; } }
extern "C" int FAR _cdecl apWriteDebugW(WCHAR FAR * szFormat, ...) { int x; SYSCHAR szBuf[1024]; char szANSIBuf[1024]; char FAR *args; // FILETHING hfResultsExtra;
// char szFullFileName[255];
if (szFormat != NULL) { args =((char FAR *)(&szFormat))+4; x = vswprintf((unsigned short *)szBuf, szFormat, args); } else return (-1);
WideCharToMultiByte(CP_ACP, NULL, (unsigned short *)szBuf, -1, szANSIBuf, 1024, NULL, NULL);
// if (fDebTrace == TRUE)
OutputDebugString(szANSIBuf); /*
if (fFileTrace == TRUE) { lstrcpyA(szFullFileName, RES_PATH); lstrcatA(szFullFileName, RESULTS_DEB);
hfResultsExtra = lOpenAnsi(szFullFileName); return(-1); if (lWriteAnsi(hfResultsExtra, szANSIBuf, lstrlen(szANSIBuf)) == NULL) return(-1);
lCloseAnsi(hfResultsExtra); } */ Yield(); return(0); }
extern "C" int FAR PASCAL apInitPerfW (LPWSTR szServerType, LPWSTR szProcType, int bitness, int server_bitness) { SYSCHAR szProcTypeA[255]; SYSCHAR szServerTypeA[255];
WideCharToMultiByte(CP_ACP, NULL, szServerType, -1, szServerTypeA, 255, NULL, NULL);
WideCharToMultiByte(CP_ACP, NULL, szProcType, -1, szProcTypeA, 255, NULL, NULL);
return apInitPerfCore(szServerTypeA, szProcTypeA, bitness, server_bitness); }
extern "C" int FAR PASCAL apLogPerfW (LPWSTR szTestType, DWORD microsecs, float std_deviation) { SYSCHAR szTestTypeA[255];
WideCharToMultiByte(CP_ACP, NULL, szTestType, -1, szTestTypeA, 255, NULL, NULL);
return apLogPerfCore(szTestTypeA, microsecs, std_deviation); }
#endif //chicago or win32s
#if defined(WIN16)
extern "C" DATE FAR PASCAL apDateFromStr(char FAR *str, LCID lcid) { DATE date; HRESULT hr; hr = VarDateFromStr(str, lcid, 0, &date); if (hr != NOERROR) return -1; else return date; } #endif
#endif //0
|