197 lines
3.4 KiB
C++
197 lines
3.4 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|