Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1251 lines
31 KiB

  1. /***
  2. *apglobal.cpp - Ffile for the C/C++ version of the apglobal functions
  3. *
  4. * Copyright (C) 1992, Microsoft Corporation. All Rights Reserved.
  5. * Information Contained Herein Is Proprietary and Confidential.
  6. *
  7. *Purpose: This allows tests written in C to write debug info in the same manner
  8. * as our Basic tests.
  9. *
  10. *Revision History:
  11. *
  12. * [00] 25-Nov-92 chriskau : created
  13. * [01] 13-Dec-92 Brandonb : changed to DLL, added apLogExtra
  14. * [02] 26-Jan-93 ChrisK : added exe.don support to apEndTest
  15. * [03] 23-Feb-93 ChrisK : reset iFailFlag and icErrorCount on apInitTest
  16. * [04] 14-Jan-94 Mesfink : Modified to enable 32bit compilation & unicode
  17. *Implementation Notes:
  18. *
  19. *****************************************************************************/
  20. #include "hostenv.h"
  21. #define _APGLOBAL_
  22. #include "apglobal.h"
  23. #define wcsicmp _wcsicmp
  24. #define APLOGFAIL_MAX 254
  25. #define AMAX 255
  26. #define RESULTS_TXT "results.txt"
  27. #define RESULTS_LOG "results.log"
  28. #define OLEAUTO_PRF "oleauto.prf"
  29. #define RESULTS_TXTX SYSSTR("results.txt")
  30. #define RESULTS_LOGX SYSSTR("results.log")
  31. #define OLEAUTO_PRFX SYSSTR("oleauto.prf")
  32. #define RESULTS_DEB "results.deb"
  33. #define RESULTS_DON "exe.don"
  34. #define RES_PATH "c:\\school\\"
  35. #define PASS_STR SYSSTR("PASSED ")
  36. #define FAIL_STR SYSSTR("FAILED ***** ")
  37. #define RUN_STR SYSSTR("RUNNING **** ")
  38. // vars for output of testing/failure info
  39. SYSCHAR szTest[255];
  40. SYSCHAR szScenario[255];
  41. SYSCHAR szLastTest[255] = SYSSTR("");
  42. SYSCHAR szLastScen[255] = SYSSTR("");
  43. SYSCHAR szBugNumber[255];
  44. int iFailFlag;
  45. // vars for bookkeeping
  46. int icErrorCount;
  47. long icLogFileLocation;
  48. long icPrfFileLocation;
  49. int fInTest;
  50. // vars for thread and process syncronization on win95/NT
  51. #if defined(_MT)
  52. HANDLE hmutexTxt;
  53. HANDLE hmutexLog;
  54. HANDLE hmutexPrf;
  55. #endif
  56. /* -------------------------------------------------------------------------
  57. NAME: Unicode2Ansi lWriteAnsi lOpenAnsi lCreatAnsi
  58. Revision:
  59. [0] 19-01-94 MesfinK: Created
  60. -------------------------------------------------------------------------*/
  61. /*LPSTR Unicode2Ansi(SYSCHAR FAR * szString)
  62. {
  63. #if defined(UNICODE)
  64. char AnsiBuffer[AMAX];
  65. int iCount;
  66. iCount=lstrlen(szString);
  67. if(WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK, szString,iCount+1,(LPSTR)
  68. AnsiBuffer,AMAX,NULL,NULL))
  69. return (LPSTR)AnsiBuffer;
  70. else
  71. return NULL;
  72. #else
  73. return (LPSTR)szString;
  74. #endif
  75. }*/
  76. SIZE_T lWriteAnsi(FILETHING hfile, SYSCHAR FAR *szString, int iCount)
  77. {
  78. #if defined(UNICODE)
  79. char AnsiBuffer[AMAX];
  80. if(!WideCharToMultiByte(CP_ACP,WC_COMPOSITECHECK, szString, iCount+1, (LPSTR)
  81. AnsiBuffer, AMAX, NULL, NULL))
  82. return (SIZE_T)HFILE_ERROR;
  83. else
  84. return fwrite(AnsiBuffer, 1, (short)iCount, hfile);
  85. #elif defined(WIN16)
  86. return _lwrite(hfile,(LPSTR)szString,(short)iCount);
  87. #else
  88. return fwrite(szString, 1, (short)iCount, hfile);
  89. #endif
  90. }
  91. FILETHING lOpenAnsi(char FAR *szFileName)
  92. {
  93. FILETHING hfTemp;
  94. #if defined(WIN16)
  95. hfTemp = _lopen(szFileName, WRITE);
  96. if (hfTemp == HFILE_ERROR)
  97. hfTemp = _lcreat(szFileName, 0);
  98. else
  99. _llseek(hfTemp, 0, 2);
  100. return hfTemp;
  101. #else
  102. hfTemp = fopen(szFileName, "r+b");
  103. if (hfTemp == NULL)
  104. hfTemp = fopen(szFileName, "wb");
  105. else
  106. fseek(hfTemp, 0, SEEK_END);
  107. return hfTemp;
  108. #endif
  109. }
  110. int lCloseAnsi(FILETHING f)
  111. {
  112. #if defined(WIN16)
  113. return _lclose(f);
  114. #else
  115. return fclose(f);
  116. #endif
  117. }
  118. /* -------------------------------------------------------------------------
  119. NAME: FilePrintf
  120. Revision:
  121. [0] 12-07-92 BrandonB Created
  122. -------------------------------------------------------------------------*/
  123. int _cdecl
  124. FilePrintf(FILETHING hfile, SYSCHAR FAR * szFormat, ...)
  125. {
  126. int x;
  127. SYSCHAR szBuf[1024];
  128. #if defined(WIN16)
  129. char szLocal[256];
  130. #endif
  131. #if defined(_ALPHA_)
  132. va_list args;
  133. args.offset=4;
  134. #else
  135. char FAR *args;
  136. #endif
  137. if (szFormat != NULL)
  138. {
  139. #if defined(_ALPHA_)
  140. args.a0 = ((char FAR *)(&szFormat))+4;
  141. #else
  142. args =((char FAR *)(&szFormat))+4;
  143. #endif
  144. #if defined(_NTWIN)
  145. x = vswprintf(szBuf, szFormat, args);
  146. #else
  147. #if defined(WIN16)
  148. x = wvsprintf(szBuf, szFormat, args);
  149. #else
  150. x = vsprintf(szBuf, szFormat, args);
  151. #endif
  152. #endif
  153. if (lWriteAnsi(hfile, szBuf, lstrlen(szBuf)) == NULL)
  154. return(-1);
  155. }
  156. return (0);
  157. }
  158. #if 0
  159. /* -------------------------------------------------------------------------
  160. NAME: apInitTest
  161. Description: This function initializes a testcase. The name of the
  162. testcase is written to results.txt and a global variable
  163. is set to the same value.
  164. Input: szTestName - char * pointing to the name of the testcase
  165. Output: (return) - 0 if no error, -1 if there was an error
  166. Revision:
  167. [0] 11-24-92 ChrisKau Created
  168. [1] 12-04-92 BrandonB changed to use only windows call
  169. -------------------------------------------------------------------------*/
  170. extern "C" int FAR PASCAL
  171. apInitTestCore (SYSCHAR FAR * szTestName)
  172. {
  173. FILETHING hfResultsTxt;
  174. char szFullFileName[255];
  175. if (fInTest == TRUE)
  176. {
  177. // log error information
  178. FILETHING hfResultsLog;
  179. lstrcpyA(szFullFileName, RES_PATH);
  180. lstrcatA(szFullFileName, RESULTS_LOG);
  181. #if defined(_MT)
  182. WaitForSingleObject(hmutexLog, INFINITE);
  183. #endif
  184. hfResultsLog = lOpenAnsi(szFullFileName);
  185. if (hfResultsLog == NULL)
  186. goto Done;
  187. FilePrintf(hfResultsLog, SYSSTR("\r\n========================================\r\n") );
  188. FilePrintf(hfResultsLog, SYSSTR(" Begin: %s\r\n\r\n"), (LPSYSSTR )szTest);
  189. FilePrintf(hfResultsLog, SYSSTR("\r\n ________________\r\n %s\r\n"), (LPSYSSTR )szScenario);
  190. FilePrintf (hfResultsLog, SYSSTR(" !!! apInitTest called before previous test ended!\r\n"));
  191. iFailFlag++;
  192. FilePrintf (hfResultsLog, SYSSTR(" ________________\r\n"));
  193. lCloseAnsi(hfResultsLog);
  194. Done:;
  195. #if defined(_MT)
  196. ReleaseMutex(hmutexLog);
  197. #endif
  198. apEndTest();
  199. return(-1);
  200. }
  201. else fInTest = TRUE;
  202. iFailFlag = 0;
  203. icErrorCount = 0;
  204. szBugNumber[0] = 0;
  205. wsprintf( szTest, SYSSTR("%-20s") , szTestName);
  206. if (!(szTestName))
  207. return(-1);
  208. lstrcpyA(szFullFileName, RES_PATH);
  209. lstrcatA(szFullFileName, RESULTS_TXT);
  210. #if defined(_MT)
  211. WaitForSingleObject(hmutexTxt, INFINITE);
  212. #endif
  213. hfResultsTxt = lOpenAnsi(szFullFileName);
  214. if (hfResultsTxt == NULL)
  215. {
  216. #if defined(_MT)
  217. ReleaseMutex(hmutexTxt);
  218. #endif
  219. return(-1);
  220. }
  221. if (lWriteAnsi(hfResultsTxt, (SYSCHAR FAR * )szTest, lstrlen(szTest)) == NULL)
  222. {
  223. #if defined(_MT)
  224. ReleaseMutex(hmutexTxt);
  225. #endif
  226. return(-1);
  227. }
  228. #if defined(WIN32)
  229. if ((icLogFileLocation = ftell(hfResultsTxt)) == -1)
  230. {
  231. #if defined(_MT)
  232. ReleaseMutex(hmutexTxt);
  233. #endif
  234. lCloseAnsi(hfResultsTxt);
  235. return(-1);
  236. }
  237. #else // win16
  238. if ((icLogFileLocation = _llseek(hfResultsTxt, 0, 1)) == HFILE_ERROR)
  239. {
  240. lCloseAnsi(hfResultsTxt);
  241. return(-1);
  242. }
  243. #endif
  244. else FilePrintf(hfResultsTxt,SYSSTR("%-70s\r\n") , RUN_STR);
  245. lCloseAnsi(hfResultsTxt);
  246. #if defined(_MT)
  247. ReleaseMutex(hmutexTxt);
  248. #endif
  249. apWriteDebugCore(SYSSTR("%s\n") , (SYSCHAR FAR * )szTest);
  250. return(0);
  251. }
  252. /* -------------------------------------------------------------------------
  253. NAME: apInitScenario
  254. Description: This function initializes a scenario. The name of the
  255. scenario is written to the debug window and a global
  256. variable is set to the same value.
  257. Input: szScenarioName - SYSCHAR * pointing to the name of the scenario
  258. Output: (return) - 0 if no error, -1 if there was an error
  259. Revision:
  260. [0] 11-24-92 ChrisKau Created
  261. [1] 12-04-92 BrandonB changed to use only windows calls etc.
  262. [2] 01-28-94 MesfinK added API & NLS information.
  263. -------------------------------------------------------------------------*/
  264. extern "C" int FAR PASCAL
  265. apInitScenarioCore (SYSCHAR FAR * szScenarioName)
  266. {
  267. lstrcpy((SYSCHAR FAR * )szScenario, (SYSCHAR FAR * )szScenarioName);
  268. szLastScen[0] = 0;
  269. apWriteDebugCore(SYSSTR("%s\n") , (SYSCHAR FAR * )szScenarioName);
  270. return(0);
  271. }
  272. #endif //0
  273. /* -------------------------------------------------------------------------
  274. NAME: apLogFailInfo
  275. Description: This call takes four strings, and writes out the error
  276. information to results.txt and results.log files.
  277. Input: szDescription - SYSCHAR * describing what went wrong
  278. szExpected - SYSCHAR * expected value of testcase
  279. szActual - SYSCHAR * actual value of testcase
  280. szBugNum - SYSCHAR * bug number in RAID data base
  281. Output: (return) - 0 if no error, -1 if there was an error
  282. Revision:
  283. [0] 11-24-92 ChrisKau Created
  284. [1] 12-04-92 BrandonB changed to use only windows call
  285. [2] 02-03-94 ChrisK Change to handle WIN16/WIN32/UNICODE
  286. -------------------------------------------------------------------------*/
  287. extern "C" int FAR PASCAL
  288. apLogFailInfoCore (LPSYSSTR szDescription, LPSYSSTR szExpected, LPSYSSTR szActual, LPSYSSTR szBugNum)
  289. {
  290. FILETHING hfResultsLog;
  291. char szFullFileName[255];
  292. lstrcpyA(szFullFileName, RES_PATH);
  293. lstrcatA(szFullFileName, RESULTS_LOG);
  294. #if defined(_MT)
  295. WaitForSingleObject(hmutexLog, INFINITE);
  296. #endif
  297. hfResultsLog = lOpenAnsi((char FAR *)szFullFileName);
  298. if (hfResultsLog == NULL)
  299. {
  300. #if defined(_MT)
  301. ReleaseMutex(hmutexLog);
  302. #endif // _MT
  303. return(-1);
  304. }
  305. if (fInTest != TRUE)
  306. {
  307. // log failure info or warn of mem leak
  308. }
  309. if (lstrcmp(szTest, szLastTest))
  310. {
  311. FilePrintf(hfResultsLog, SYSSTR("\r\n========================================\r\n") );
  312. FilePrintf(hfResultsLog, SYSSTR(" Begin: %s\r\n\r\n"), (LPSYSSTR)szTest);
  313. apWriteDebugCore(SYSSTR("\n========================================\n\n"));
  314. apWriteDebugCore(SYSSTR(" Begin: %s\n\n"), (LPSYSSTR)szTest);
  315. lstrcpy(szLastTest, szTest);
  316. }
  317. if (lstrcmp(szScenario, szLastScen))
  318. {
  319. FilePrintf(hfResultsLog, SYSSTR("\r\n ________________\r\n %s\r\n"), (LPSYSSTR)szScenario);
  320. apWriteDebugCore(SYSSTR("\n ________________\n %s\n"), (LPSYSSTR)szScenario);
  321. lstrcpy(szLastScen, szScenario);
  322. }
  323. iFailFlag++;
  324. if (lstrlen(szDescription))
  325. {
  326. FilePrintf (hfResultsLog, SYSSTR(" !!! %s\r\n"), (LPSYSSTR)szDescription);
  327. apWriteDebugCore (SYSSTR(" !!! %s\n"), (LPSYSSTR)szDescription);
  328. }
  329. if (lstrlen(szExpected)+lstrlen(szActual))
  330. {
  331. FilePrintf(hfResultsLog, SYSSTR(" Expected: %s\r\n"), (LPSYSSTR)szExpected);
  332. FilePrintf(hfResultsLog, SYSSTR(" Actuals : %s\r\n"), (LPSYSSTR)szActual);
  333. apWriteDebugCore(SYSSTR(" Expected: %s\n"), (LPSYSSTR)szExpected);
  334. apWriteDebugCore(SYSSTR(" Actuals : %s\n"), (LPSYSSTR)szActual);
  335. }
  336. if (lstrlen(szBugNum))
  337. {
  338. FilePrintf(hfResultsLog, SYSSTR(" BugNum : %s\r\n"), (LPSYSSTR)szBugNum);
  339. apWriteDebugCore(SYSSTR(" BugNum : %s\n"), (LPSYSSTR)szBugNum);
  340. lstrcpy(szBugNumber, szBugNum);
  341. }
  342. FilePrintf (hfResultsLog, SYSSTR(" ________________\r\n"));
  343. apWriteDebugCore( SYSSTR(" ________________\n"));
  344. lCloseAnsi(hfResultsLog);
  345. #if defined(_MT)
  346. ReleaseMutex(hmutexLog);
  347. #endif
  348. return(0);
  349. }
  350. /* -------------------------------------------------------------------------
  351. NAME: apEndTest
  352. Description: This function writes out the final passed or failed for
  353. a particular testcase.
  354. Input: (none)
  355. Output: (none) - if there is an error we are already quitting
  356. Revision
  357. [0] 11-24-92 ChrisKau Created
  358. [1] 12-04-92 BrandonB changed to use only windows call
  359. -------------------------------------------------------------------------*/
  360. extern "C" void FAR PASCAL
  361. apEndTest()
  362. {
  363. SYSCHAR szMessage[25];
  364. SYSCHAR szMTOut[255];
  365. FILETHING hfResultsTxt;
  366. char szFullFileName[255];
  367. if (iFailFlag)
  368. {
  369. lstrcpy(szMessage, FAIL_STR);
  370. }
  371. else
  372. {
  373. lstrcpy(szMessage, PASS_STR);
  374. }
  375. fInTest = FALSE;
  376. lstrcpyA(szFullFileName, RES_PATH);
  377. lstrcatA(szFullFileName, RESULTS_TXT);
  378. #if defined(_MT)
  379. WaitForSingleObject(hmutexTxt, INFINITE);
  380. #endif
  381. hfResultsTxt = lOpenAnsi(szFullFileName);
  382. if (hfResultsTxt == NULL)
  383. {
  384. #if defined(_MT)
  385. ReleaseMutex(hmutexTxt);
  386. #endif
  387. return;
  388. }
  389. // #if defined(_MT)
  390. if (!lstrlen(szBugNumber))
  391. wsprintf(szMTOut, SYSSTR("%s\t%d"), (SYSCHAR FAR * )szMessage, iFailFlag);
  392. else
  393. wsprintf(szMTOut, SYSSTR("%s\t%d Bug(s): %s"), (SYSCHAR FAR * )szMessage, iFailFlag, (SYSCHAR FAR * )szBugNumber);
  394. #if defined(WIN32)
  395. fseek(hfResultsTxt, icLogFileLocation, SEEK_SET);
  396. #else // win16
  397. _llseek(hfResultsTxt, icLogFileLocation, 0);
  398. #endif
  399. FilePrintf(hfResultsTxt,SYSSTR("%-70s\r\n") , (SYSCHAR FAR * )szMTOut);
  400. apWriteDebugCore(SYSSTR("%-70s\r\n") , (SYSCHAR FAR * )szMTOut);
  401. lCloseAnsi(hfResultsTxt);
  402. #if defined(_MT)
  403. ReleaseMutex(hmutexTxt);
  404. #endif
  405. lstrcpyA(szFullFileName, RES_PATH);
  406. lstrcatA(szFullFileName, RESULTS_DON);
  407. hfResultsTxt = lOpenAnsi(szFullFileName);
  408. lCloseAnsi(hfResultsTxt);
  409. return;
  410. }
  411. #if 0
  412. extern "C" int FAR PASCAL
  413. apInitPerfCore(SYSCHAR FAR * szServerType, SYSCHAR FAR * szProcType, int bitness, int server_bitness)
  414. {
  415. FILETHING hfResultsPrf;
  416. char szFullFileName[255];
  417. SYSCHAR szMTOut[255];
  418. wsprintf(szMTOut, SYSSTR("*%-30s, %-8s, %d, %d\r\n"), szServerType, szProcType, bitness, server_bitness);
  419. lstrcpyA(szFullFileName, RES_PATH);
  420. lstrcatA(szFullFileName, OLEAUTO_PRF);
  421. #if defined(_MT)
  422. WaitForSingleObject(hmutexPrf, INFINITE);
  423. #endif
  424. hfResultsPrf = lOpenAnsi(szFullFileName);
  425. if (hfResultsPrf == NULL)
  426. {
  427. #if defined(_MT)
  428. ReleaseMutex(hmutexPrf);
  429. #endif
  430. return(-1);
  431. }
  432. if (lWriteAnsi(hfResultsPrf, szMTOut, lstrlen(szMTOut)) == NULL)
  433. {
  434. #if defined(_MT)
  435. ReleaseMutex(hmutexPrf);
  436. #endif
  437. return(-1);
  438. }
  439. #if defined(WIN32)
  440. if ((icPrfFileLocation = ftell(hfResultsPrf)) == -1)
  441. {
  442. #if defined(_MT)
  443. ReleaseMutex(hmutexPrf);
  444. #endif
  445. lCloseAnsi(hfResultsPrf);
  446. return(-1);
  447. }
  448. #else // win16
  449. if ((icPrfFileLocation = _llseek(hfResultsPrf, 0, 1)) == HFILE_ERROR)
  450. {
  451. lCloseAnsi(hfResultsPrf);
  452. return(-1);
  453. }
  454. #endif
  455. else FilePrintf(hfResultsPrf, SYSSTR("%-31s, %8ld, %6.2f\r\n"), SYSSTR("UNKNOWN"), 0, 0.00);
  456. lCloseAnsi(hfResultsPrf);
  457. #if defined(_MT)
  458. ReleaseMutex(hmutexPrf);
  459. #endif
  460. return(0);
  461. }
  462. extern "C" int FAR PASCAL
  463. apLogPerfCore(SYSCHAR FAR *szTestType, DWORD microsecs, float std_deviation)
  464. {
  465. FILETHING hfResultsPrf;
  466. char szFullFileName[255];
  467. lstrcpyA(szFullFileName, RES_PATH);
  468. lstrcatA(szFullFileName, OLEAUTO_PRF);
  469. #if defined(_MT)
  470. WaitForSingleObject(hmutexPrf, INFINITE);
  471. #endif
  472. hfResultsPrf = lOpenAnsi(szFullFileName);
  473. if (hfResultsPrf == NULL)
  474. {
  475. #if defined(_MT)
  476. ReleaseMutex(hmutexPrf);
  477. #endif
  478. return(-1);
  479. }
  480. #if defined(WIN32)
  481. fseek(hfResultsPrf, icPrfFileLocation, SEEK_SET);
  482. #else // win16
  483. _llseek(hfResultsPrf, icPrfFileLocation, 0);
  484. #endif
  485. FilePrintf(hfResultsPrf, SYSSTR("%-31s, %8ld, %6.2f\r\n"), szTestType, microsecs, std_deviation);
  486. #if defined(WIN32)
  487. if ((icPrfFileLocation = ftell(hfResultsPrf)) == -1)
  488. {
  489. #if defined(_MT)
  490. ReleaseMutex(hmutexPrf);
  491. #endif
  492. lCloseAnsi(hfResultsPrf);
  493. return(-1);
  494. }
  495. #else // win16
  496. if ((icPrfFileLocation = _llseek(hfResultsPrf, 0, 1)) == HFILE_ERROR)
  497. {
  498. lCloseAnsi(hfResultsPrf);
  499. return(-1);
  500. }
  501. #endif
  502. lCloseAnsi(hfResultsPrf);
  503. #if defined(_MT)
  504. ReleaseMutex(hmutexPrf);
  505. #endif
  506. return(0);
  507. }
  508. #endif //0
  509. /* -------------------------------------------------------------------------
  510. NAME: apWriteDebugCore
  511. Description: This function writes a string to the debug window or
  512. monochrome monitor or to the results.deb file or to both
  513. Input: a format sting and a variable number of arguments
  514. Output: 0 if sucessful, -1 if not
  515. Revision:
  516. [0] 12-07-92 BrandonB Created
  517. -------------------------------------------------------------------------*/
  518. int FAR _cdecl
  519. apWriteDebugCore(SYSCHAR FAR * szFormat, ...)
  520. {
  521. int x;
  522. SYSCHAR szBuf[1024];
  523. // char szFullFileName[255];
  524. // FILETHING hfResultsExtra;
  525. #if defined(_ALPHA_)
  526. va_list args;
  527. args.offset=4;
  528. #else
  529. char FAR *args;
  530. #endif
  531. if (szFormat != NULL)
  532. {
  533. #if defined(_ALPHA_)
  534. args.a0 = ((char FAR *)(&szFormat))+4;
  535. #else
  536. args =((char FAR *)(&szFormat))+4;
  537. #endif
  538. x = wvsprintf(szBuf, szFormat, args);
  539. }
  540. else return (-1);
  541. // if (fDebTrace == TRUE)
  542. OutputDebugString(szBuf);
  543. /*
  544. if (fFileTrace == TRUE)
  545. {
  546. lstrcpyA(szFullFileName, RES_PATH); // create full path name
  547. lstrcatA(szFullFileName, RESULTS_DEB);
  548. hfResultsExtra = lOpenAnsi(szFullFileName);
  549. if (hfResultsExtra == NULL)
  550. return(-1);
  551. if (lWriteAnsi(hfResultsExtra, szBuf, lstrlen(szBuf)) == NULL)
  552. return(-1);
  553. lCloseAnsi(hfResultsExtra); // close results file
  554. }
  555. */
  556. Yield();
  557. return(0);
  558. }
  559. #if 0
  560. #if defined(UNICODE)
  561. extern "C" int FAR PASCAL
  562. apInitTestA (LPSTR szTestName)
  563. {
  564. SYSCHAR szTestNameW[255];
  565. if (lstrlenA(szTestName) <= 126)
  566. {
  567. MultiByteToWideChar(CP_ACP,
  568. MB_PRECOMPOSED,
  569. szTestName,
  570. -1,
  571. szTestNameW,
  572. 255);
  573. return apInitTestCore (szTestNameW);
  574. }
  575. else
  576. {
  577. return -1;
  578. }
  579. }
  580. extern "C" int FAR PASCAL
  581. apInitScenarioA (LPSTR szScenarioName)
  582. {
  583. SYSCHAR szScenarioNameW[255];
  584. if (lstrlenA(szScenarioName) <= 126)
  585. {
  586. MultiByteToWideChar(CP_ACP,
  587. MB_PRECOMPOSED,
  588. szScenarioName,
  589. -1,
  590. szScenarioNameW,
  591. 255);
  592. return apInitScenarioCore(szScenarioNameW);
  593. }
  594. else
  595. {
  596. return -1;
  597. }
  598. }
  599. // ANSI version that is exposed when the system is unicode version
  600. /* -------------------------------------------------------------------------
  601. NAME: apLogFailInfoA
  602. Description: This call takes four ansi strings, converts them to
  603. unicode and calls the wide version of apLogFailInfo.
  604. Input: szDescription - LPSTR describing what went wrong
  605. szExpected - LPSTR expected value of testcase
  606. szActual - LPSTR actual value of testcase
  607. szBugNum - LPSTR bug number in RAID data base
  608. Output: (return) - 0 if no error, -1 if there was an error
  609. Revision:
  610. [0] 11-24-92 ChrisKau Created
  611. [1] 12-04-92 BrandonB changed to use only windows call
  612. [2] 01-18-94 Mesfink modified to enable UNICODE.
  613. [3] 02-03-94 ChrisK Made apLogFailInfoA out of everything else
  614. -------------------------------------------------------------------------*/
  615. // this should be an even number for 'nice' reasons
  616. extern "C" int FAR PASCAL
  617. apLogFailInfoA (LPSTR szDescription, LPSTR szExpected,
  618. LPSTR szActual, LPSTR szBugNum)
  619. {
  620. SYSCHAR szDescriptionW[APLOGFAIL_MAX];
  621. SYSCHAR szExpectedW[APLOGFAIL_MAX];
  622. SYSCHAR szActualW[APLOGFAIL_MAX];
  623. SYSCHAR szBugNumW[APLOGFAIL_MAX];
  624. if (lstrlenA(szDescription) <= (APLOGFAIL_MAX))
  625. if (lstrlenA(szExpected) <= (APLOGFAIL_MAX))
  626. if (lstrlenA(szActual) <= (APLOGFAIL_MAX))
  627. if (lstrlenA(szBugNum) <= (APLOGFAIL_MAX)) {
  628. MultiByteToWideChar(CP_ACP,
  629. MB_PRECOMPOSED,
  630. szDescription,
  631. -1,
  632. szDescriptionW,
  633. APLOGFAIL_MAX);
  634. MultiByteToWideChar(CP_ACP,
  635. MB_PRECOMPOSED,
  636. szExpected,
  637. -1,
  638. szExpectedW,
  639. APLOGFAIL_MAX);
  640. MultiByteToWideChar(CP_ACP,
  641. MB_PRECOMPOSED,
  642. szActual,
  643. -1,
  644. szActualW,
  645. APLOGFAIL_MAX);
  646. MultiByteToWideChar(CP_ACP,
  647. MB_PRECOMPOSED,
  648. szBugNum,
  649. -1,
  650. szBugNumW,
  651. APLOGFAIL_MAX);
  652. return (apLogFailInfoCore(szDescriptionW, szExpectedW, szActualW, szBugNumW));
  653. }
  654. else
  655. {
  656. return (-1);
  657. }
  658. else
  659. {
  660. return (-1);
  661. }
  662. else
  663. {
  664. return (-1);
  665. }
  666. else
  667. {
  668. return (-1);
  669. }
  670. }
  671. /* -------------------------------------------------------------------------
  672. NAME: apWriteDebugA
  673. Description: This function writes a string to the debug window or
  674. monochrome monitor or to the results.deb file or to both
  675. Input: a format sting and a variable number of arguments
  676. Output: 0 if sucessful, -1 if not
  677. Revision:
  678. [0] 02-04-94 BrandonB Created
  679. -------------------------------------------------------------------------*/
  680. extern "C" int FAR _cdecl
  681. apWriteDebugA(char FAR * szFormat, ...)
  682. {
  683. int x;
  684. char szANSIBuf[1024];
  685. // FILETHING hfResultsExtra;
  686. // char szFullFileName[255];
  687. #if defined(_ALPHA_)
  688. va_list args;
  689. args.offset=4;
  690. #else
  691. char FAR *args;
  692. #endif
  693. if (szFormat != NULL)
  694. {
  695. #if defined(_ALPHA_)
  696. args.a0 = ((char FAR *)(&szFormat))+4;
  697. #else
  698. args =((char FAR *)(&szFormat))+4;
  699. #endif
  700. x = wvsprintfA(szANSIBuf, szFormat, args);
  701. }
  702. else return (-1);
  703. // if (fDebTrace == TRUE)
  704. OutputDebugStringA(szANSIBuf);
  705. /*
  706. if (fFileTrace == TRUE)
  707. {
  708. lstrcpyA((char FAR * )szFullFileName, (char FAR * )RES_PATH);
  709. lstrcatA((char FAR * )szFullFileName, (char FAR * )RESULTS_DEB);
  710. hfResultsExtra = lOpenAnsi(szFullFileName);
  711. if (hfResultsExtra == NULL)
  712. return(-1);
  713. fwrite( (LPSTR)szANSIBuf, 1, lstrlenA(szANSIBuf), hfResultsExtra);
  714. lCloseAnsi(hfResultsExtra);
  715. }
  716. */
  717. Yield();
  718. return(0);
  719. }
  720. extern "C" int FAR PASCAL
  721. apInitPerfA(char * szServerType, char * szProcType, int bitness, int server_bitness)
  722. {
  723. SYSCHAR szServerTypeW[255];
  724. SYSCHAR szProcTypeW[255];
  725. if ((lstrlenA(szServerType) <= 254) && (lstrlenA(szProcType) <= 254))
  726. {
  727. MultiByteToWideChar(CP_ACP,
  728. MB_PRECOMPOSED,
  729. szServerType,
  730. -1,
  731. szServerTypeW,
  732. 255);
  733. MultiByteToWideChar(CP_ACP,
  734. MB_PRECOMPOSED,
  735. szProcType,
  736. -1,
  737. szProcTypeW,
  738. 255);
  739. return apInitPerfCore(szServerTypeW, szProcTypeW, bitness, server_bitness);
  740. }
  741. else
  742. {
  743. return(-1);
  744. }
  745. }
  746. extern "C" int FAR PASCAL
  747. apLogPerfA(char *szTestType, DWORD microsecs, float std_deviation)
  748. {
  749. SYSCHAR szTestTypeW[255];
  750. if (lstrlenA(szTestType) <= 254)
  751. {
  752. MultiByteToWideChar(CP_ACP,
  753. MB_PRECOMPOSED,
  754. szTestType,
  755. -1,
  756. szTestTypeW,
  757. 255);
  758. return apLogPerfCore(szTestTypeW, microsecs, std_deviation);
  759. }
  760. else
  761. {
  762. return(-1);
  763. }
  764. }
  765. #endif // UNICODE
  766. #endif //0
  767. #if defined(WIN32) && !defined(UNICODE) // chicago and win32s
  768. #include <wchar.h>
  769. LPWSTR FAR PASCAL lstrcatWrap(LPWSTR sz1, LPWSTR sz2)
  770. {
  771. return wcscat(sz1, sz2);
  772. }
  773. LPWSTR FAR PASCAL lstrcpyWrap(LPWSTR sz1, LPWSTR sz2)
  774. {
  775. return wcscpy(sz1, sz2);
  776. }
  777. int FAR PASCAL lstrcmpWrap(LPWSTR sz1, LPWSTR sz2)
  778. {
  779. return wcscmp(sz1, sz2);
  780. }
  781. int FAR PASCAL lstrcmpiWrap(LPWSTR sz1, LPWSTR sz2)
  782. {
  783. return wcsicmp(sz1, sz2);
  784. }
  785. //int FAR __cdecl wsprintfWrap(LPWSTR szDest, WCHAR FAR *szFormat, ...)
  786. //{
  787. // return vswprintf(szDest, szFormat, ((char far *)(&szFormat))+4);
  788. //}
  789. SIZE_T FAR PASCAL lstrlenWrap(LPWSTR sz1)
  790. {
  791. return wcslen(sz1);
  792. }
  793. #if 0
  794. extern "C" int FAR PASCAL
  795. apInitTestW (LPWSTR szTestName)
  796. {
  797. SYSCHAR szTestNameA[255];
  798. if (lstrlenWrap(szTestName) <= 126)
  799. {
  800. WideCharToMultiByte(CP_ACP,
  801. NULL,
  802. szTestName,
  803. -1,
  804. szTestNameA,
  805. 255, NULL, NULL);
  806. return apInitTestCore(szTestNameA);
  807. }
  808. else
  809. {
  810. return -1;
  811. }
  812. }
  813. int FAR PASCAL apLogFailInfoW (LPWSTR szDescription, LPWSTR szExpected, LPWSTR szActual, LPWSTR szBugNum);
  814. extern "C" int FAR PASCAL
  815. apLogFailInfoW (LPWSTR szDescription, LPWSTR szExpected,
  816. LPWSTR szActual, LPWSTR szBugNum)
  817. {
  818. SYSCHAR szDescriptionA[APLOGFAIL_MAX];
  819. SYSCHAR szExpectedA[APLOGFAIL_MAX];
  820. SYSCHAR szActualA[APLOGFAIL_MAX];
  821. SYSCHAR szBugNumA[APLOGFAIL_MAX];
  822. if (lstrlenWrap(szDescription) <= (APLOGFAIL_MAX))
  823. if (lstrlenWrap(szExpected) <= (APLOGFAIL_MAX))
  824. if (lstrlenWrap(szActual) <= (APLOGFAIL_MAX))
  825. if (lstrlenWrap(szBugNum) <= (APLOGFAIL_MAX))
  826. {
  827. WideCharToMultiByte(CP_ACP,
  828. NULL,
  829. szDescription,
  830. -1,
  831. szDescriptionA,
  832. APLOGFAIL_MAX, NULL, NULL);
  833. WideCharToMultiByte(CP_ACP,
  834. NULL,
  835. szExpected,
  836. -1,
  837. szExpectedA,
  838. APLOGFAIL_MAX, NULL, NULL);
  839. WideCharToMultiByte(CP_ACP,
  840. NULL,
  841. szActual,
  842. -1,
  843. szActualA,
  844. APLOGFAIL_MAX, NULL, NULL);
  845. WideCharToMultiByte(CP_ACP,
  846. NULL,
  847. szBugNum,
  848. -1,
  849. szBugNumA,
  850. APLOGFAIL_MAX, NULL, NULL);
  851. return (apLogFailInfoCore(szDescriptionA, szExpectedA, szActualA, szBugNumA));
  852. }
  853. else
  854. {
  855. return (-1);
  856. }
  857. else
  858. {
  859. return (-1);
  860. }
  861. else
  862. {
  863. return (-1);
  864. }
  865. else
  866. {
  867. return (-1);
  868. }
  869. }
  870. extern "C" int FAR PASCAL
  871. apInitScenarioW (LPWSTR szScenarioName)
  872. {
  873. SYSCHAR szScenarioNameA[255];
  874. if (lstrlenWrap(szScenarioName) <= 126)
  875. {
  876. WideCharToMultiByte(CP_ACP,
  877. NULL,
  878. szScenarioName,
  879. -1,
  880. szScenarioNameA,
  881. 255, NULL, NULL);
  882. return apInitScenarioCore(szScenarioNameA);
  883. }
  884. else
  885. {
  886. return -1;
  887. }
  888. }
  889. extern "C" int FAR _cdecl
  890. apWriteDebugW(WCHAR FAR * szFormat, ...)
  891. {
  892. int x;
  893. SYSCHAR szBuf[1024];
  894. char szANSIBuf[1024];
  895. char FAR *args;
  896. // FILETHING hfResultsExtra;
  897. // char szFullFileName[255];
  898. if (szFormat != NULL)
  899. {
  900. args =((char FAR *)(&szFormat))+4;
  901. x = vswprintf((unsigned short *)szBuf, szFormat, args);
  902. }
  903. else return (-1);
  904. WideCharToMultiByte(CP_ACP,
  905. NULL,
  906. (unsigned short *)szBuf,
  907. -1,
  908. szANSIBuf,
  909. 1024, NULL, NULL);
  910. // if (fDebTrace == TRUE)
  911. OutputDebugString(szANSIBuf);
  912. /*
  913. if (fFileTrace == TRUE)
  914. {
  915. lstrcpyA(szFullFileName, RES_PATH);
  916. lstrcatA(szFullFileName, RESULTS_DEB);
  917. hfResultsExtra = lOpenAnsi(szFullFileName);
  918. return(-1);
  919. if (lWriteAnsi(hfResultsExtra, szANSIBuf, lstrlen(szANSIBuf)) == NULL)
  920. return(-1);
  921. lCloseAnsi(hfResultsExtra);
  922. }
  923. */
  924. Yield();
  925. return(0);
  926. }
  927. extern "C" int FAR PASCAL
  928. apInitPerfW (LPWSTR szServerType, LPWSTR szProcType, int bitness, int server_bitness)
  929. {
  930. SYSCHAR szProcTypeA[255];
  931. SYSCHAR szServerTypeA[255];
  932. WideCharToMultiByte(CP_ACP,
  933. NULL,
  934. szServerType,
  935. -1,
  936. szServerTypeA,
  937. 255, NULL, NULL);
  938. WideCharToMultiByte(CP_ACP,
  939. NULL,
  940. szProcType,
  941. -1,
  942. szProcTypeA,
  943. 255, NULL, NULL);
  944. return apInitPerfCore(szServerTypeA, szProcTypeA, bitness, server_bitness);
  945. }
  946. extern "C" int FAR PASCAL
  947. apLogPerfW (LPWSTR szTestType, DWORD microsecs, float std_deviation)
  948. {
  949. SYSCHAR szTestTypeA[255];
  950. WideCharToMultiByte(CP_ACP,
  951. NULL,
  952. szTestType,
  953. -1,
  954. szTestTypeA,
  955. 255, NULL, NULL);
  956. return apLogPerfCore(szTestTypeA, microsecs, std_deviation);
  957. }
  958. #endif //chicago or win32s
  959. #if defined(WIN16)
  960. extern "C" DATE FAR PASCAL
  961. apDateFromStr(char FAR *str, LCID lcid)
  962. {
  963. DATE date;
  964. HRESULT hr;
  965. hr = VarDateFromStr(str, lcid, 0, &date);
  966. if (hr != NOERROR) return -1;
  967. else return date;
  968. }
  969. #endif
  970. #endif //0