//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: tsupp.cxx // // Contents: Test support routines // // History: 03-Sep-93 DrewB Created // //---------------------------------------------------------------------------- #include "pch.cxx" #pragma hdrstop DWORD dwTransacted = STGM_DIRECT, dwRootDenyWrite = STGM_SHARE_EXCLUSIVE; BOOL fVerbose = FALSE; #define START_MEMORY_NOT_SET 0x7fffffff static LONG cbStartMemory = START_MEMORY_NOT_SET; static char *types[3] = { "", "storage", "stream" }; static char testname[256]; void StartTest(char *test) { SCODE sc; strcpy(testname, test); #if WIN32 == 300 if (FAILED(sc = GetScode(CoInitializeEx(NULL, COINIT_MULTITHREADED)))) #else if (FAILED(sc = GetScode(CoInitialize(NULL)))) #endif { fprintf(stderr, "CoInitialize failed with sc = %lX\n", sc); exit(1); } #if DBG == 1 cbStartMemory = DfGetMemAlloced(); #endif } void EndTest(int code) { if (code == 0) CheckMemory(); CoUninitialize(); if (code == 0) printf("%s SUCCEEDED\n", testname); else printf("%s FAILED\n", testname); exit(code); } void printstat(STATSTG *psstg, BOOL verbose) { char szName[NAMELEN]; #ifndef WIN32 time_t tm; #endif TTOA(psstg->pwcsName, szName, CWCSTORAGENAME); if (verbose) { printf("%s:%s =>\n", szName, types[psstg->type]); if (psstg->grfMode != 0) printf(" Mode: 0x%lX\n", psstg->grfMode); if (psstg->type == STGTY_STREAM) { printf(" Size: %lu:%lu\n", ULIGetHigh(psstg->cbSize), ULIGetLow(psstg->cbSize)); if (psstg->grfLocksSupported & LOCK_WRITE) printf(" Supports write locks\n"); if (psstg->grfLocksSupported & LOCK_EXCLUSIVE) printf(" Supports exclusive locks\n"); if (psstg->grfLocksSupported & LOCK_ONLYONCE) printf(" Supports only-once locking\n"); } else { #ifndef WIN32 tm = psstg->ctime.dwLowDateTime; if (tm != 0) printf(" Created : %s", ctime(&tm)); tm = psstg->mtime.dwLowDateTime; if (tm != 0) printf(" Modified: %s", ctime(&tm)); tm = psstg->atime.dwLowDateTime; if (tm != 0) printf(" Accessed: %s", ctime(&tm)); #else printf(" Created : %s\n", FileTimeText(&psstg->ctime)); printf(" Modified: %s\n", FileTimeText(&psstg->mtime)); printf(" Accessed: %s\n", FileTimeText(&psstg->atime)); #endif printf(" Class ID: %s\n", GuidText(&psstg->clsid)); printf(" State bits: 0x%lX\n", psstg->grfStateBits); } } else printf("%s:%lu\n", szName, psstg->type); } void c_contents(IStorage *pdf, int level, BOOL recurse, BOOL verbose) { IEnumSTATSTG *pdfi; ULONG ulRet; IStorage *pdfChild; int i; STATSTG sstg; SCODE sc; if (FAILED(sc = GetScode(pdf->EnumElements(0, NULL, 0, &pdfi)))) { printf("Unable to create iterator, error %lX\n", sc); return; } for (;;) { ulRet = GetScode(pdfi->Next(1, &sstg, NULL)); if (ulRet != S_OK) break; if (!verbose) for (i = 0; iOpenStorage(sstg.pwcsName, NULL, STGP(STGM_READ), NULL, 0, &pdfChild)))) { c_contents(pdfChild, level+2, recurse, verbose); pdfChild->Release(); } else printf("Unable to recurse, error %lX\n", sc); } CoMemFree(sstg.pwcsName); } pdfi->Release(); } static void GetDbgValues(char *psz, DWORD *pdwDf, DWORD *pdwMs) { switch(psz[0]) { case 'a': *pdwDf = 0xfdffffdf; *pdwMs = 0xfdffffdf; break; case 'd': *pdwDf = 0xfdffffdf; *pdwMs = 0x101; break; case 'G': *pdwDf = 0x02000000; *pdwMs = 0; break; case 'i': *pdwDf = 0x101; *pdwMs = 0x101; break; case 'm': *pdwDf = 0x101; *pdwMs = 0xfdffff2f; break; case 'M': *pdwDf = 0x01100000; *pdwMs = 0; break; case 'L': *pdwDf = 0x00100000; *pdwMs = 0; break; case ':': sscanf(psz+1, "%lx,%lx", pdwDf, pdwMs); break; default: *pdwDf = 0; *pdwMs = 0; break; } } void CmdArgs(int argc, char *argv[]) { int i; ULONG dbD = 0, dbM = 0, dbtD, dbtM; for (i = 1; i