//+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 1993. // // File: output.cpp // // Contents: String output functions for displaying text on the main // edit window // // Classes: // // Functions: OutputString // SaveToFile // // History: dd-mmm-yy Author Comment // 22-Mar-94 alexgo author // //-------------------------------------------------------------------------- #include "oletest.h" #include #ifndef WIN32 #include #endif // // handle to memory where the text is stored // // Please note this is really burfy (having all these globals). But for // the purposes of a simple driver app, it is the easiest. // static HGLOBAL hText; // handle to the Text static ULONG cbText; static ULONG iText; //+------------------------------------------------------------------------- // // Function: OutputString // // Synopsis: Dumps the string in printf format to the screen // // Effects: // // Arguments: [szFormat] -- the format string // [...] -- variable arguments // // Requires: // // Returns: int, the number of characters written (returned by sprintf) // // Signals: // // Modifies: // // Algorithm: // // History: dd-mmm-yy Author Comment // // Notes: // //-------------------------------------------------------------------------- int OutputString( char *szFormat, ... ) { LPSTR psz; va_list ap; int cbWritten; va_start(ap, szFormat); if( !hText ) { hText = GlobalAlloc( GMEM_MOVEABLE , 2048 ); assert(hText); cbText = 2048; } // double the size of the array if we need to if( iText > cbText / 2 ) { hText = GlobalReAlloc(hText, cbText * 2, GMEM_MOVEABLE ); assert(hText); cbText *= 2; } psz = (LPSTR)GlobalLock(hText); assert(psz); cbWritten = wvsprintf( psz + iText, szFormat, ap); iText += cbWritten; va_end(ap); SetWindowText(vApp.m_hwndEdit, psz); GlobalUnlock(hText); return cbWritten; } //+------------------------------------------------------------------------- // // Function: SaveToFile // // Synopsis: Gets a filename from the user and save the text buffer into it // // Effects: // // Arguments: void // // Requires: // // Returns: void // // Signals: // // Modifies: // // Algorithm: // // History: dd-mmm-yy Author Comment // 24-Mar-94 alexgo author // // Notes: // //-------------------------------------------------------------------------- void SaveToFile( void ) { char szFileName[MAX_PATH]; OPENFILENAME ofn; static char * szFilter[] = { "Log Files (*.log)", "*.log", "All Files (*.*)", "*.*", ""}; FILE * fp; LPSTR psz; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = vApp.m_hwndMain; ofn.lpstrFilter = szFilter[0]; ofn.nFilterIndex = 0; szFileName[0] = '\0'; ofn.lpstrFile = szFileName; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT; // // Get the file // if (GetSaveFileName(&ofn) == FALSE) { // user hit cancel return; } // the 'b' specifies binary mode, so \n --> \r\n translations are // not done. if( !(fp = fopen( szFileName, "wb")) ) { MessageBox( NULL, "Can't open file!", "OleTest Driver", MB_ICONEXCLAMATION ); return; } psz = (LPSTR)GlobalLock(hText); assert(psz); fwrite(psz, iText, sizeof(char), fp); fclose(fp); GlobalUnlock(hText); return; }