diff options
Diffstat (limited to 'private/oleutest/oletest/output.cpp')
-rw-r--r-- | private/oleutest/oletest/output.cpp | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/private/oleutest/oletest/output.cpp b/private/oleutest/oletest/output.cpp new file mode 100644 index 000000000..da9ef75a9 --- /dev/null +++ b/private/oleutest/oletest/output.cpp @@ -0,0 +1,196 @@ +//+------------------------------------------------------------------------- +// +// 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 <commdlg.h> + +#ifndef WIN32 +#include <stdarg.h> +#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; +} + + + + + + + |