windows-nt/Source/XPSP1/NT/com/oleutest/oletest/output.cpp

197 lines
3.4 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------------
//
// 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;
}