mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
10 KiB
302 lines
10 KiB
//*-----------------------------------------------------------------------
|
|
//| MODULE: FLEDIT.C
|
|
//| PROJECT: Windows Comparison Tool
|
|
//|
|
|
//| PURPOSE: This module contains code to handle the "fledit" window.
|
|
//| The "Fledit" window is the VIEW RESULTS window, which the
|
|
//| user can use to view the results of the last compare.
|
|
//|
|
|
//| The "fledit" window is simply an edit controls with scroll
|
|
//| bars, which comes up exactly the same size as the compare
|
|
//| dialog.
|
|
//|
|
|
//| REVISION HISTORY:
|
|
//| 10-16-90 randyki Moved to UI (new tree structure)
|
|
//| 10-10-90 garysp Created file
|
|
//*-----------------------------------------------------------------------
|
|
#include "uihdr.h"
|
|
#ifndef WIN32
|
|
#pragma hdrstop ("uipch.pch")
|
|
#endif
|
|
|
|
//*------------------------------------------------------------------------
|
|
//| Function prototypes
|
|
//*------------------------------------------------------------------------
|
|
VOID SetStartPos(LPSTR lpFileName);
|
|
VOID DoFledit (HWND hWnd, LPSTR lpFileName);
|
|
|
|
//*------------------------------------------------------------------------
|
|
// Global variables
|
|
//*------------------------------------------------------------------------
|
|
static LONG sp = 0;
|
|
|
|
//*------------------------------------------------------------------------
|
|
//| FileLength
|
|
//|
|
|
//| PURPOSE: Determine the length of a file
|
|
//|
|
|
//| ENTRY: hFile - Handle of file to determine size of
|
|
//|
|
|
//| EXIT: Returns the file size (LONG)
|
|
//*------------------------------------------------------------------------
|
|
LONG FileLength(HFILE hFile)
|
|
{
|
|
LONG lCurPos;
|
|
LONG lFileLen;
|
|
|
|
lCurPos = M_llseek(hFile, 0L, 1);
|
|
lFileLen = M_llseek(hFile, 0L, 2);
|
|
M_llseek(hFile, lCurPos, 0);
|
|
|
|
return ( lFileLen );
|
|
}
|
|
|
|
//*------------------------------------------------------------------------
|
|
//| SetStartPos
|
|
//|
|
|
//| PURPOSE: Sets sp to the end of the file. Use this to initialize
|
|
//| before doing comparisons - that way if the file existed
|
|
//| before, you only get the dump information from this
|
|
//| comparison.
|
|
//|
|
|
//| ENTRY: lpFileName - Name of file
|
|
//|
|
|
//| EXIT: None (sp set to length of file)
|
|
//*------------------------------------------------------------------------
|
|
VOID SetStartPos(LPSTR lpFileName)
|
|
{
|
|
HFILE hFile;
|
|
if (-1 != (hFile = M_lopen(lpFileName, OF_READ)))
|
|
{
|
|
sp = FileLength(hFile);
|
|
M_lclose(hFile);
|
|
}
|
|
|
|
}
|
|
|
|
//*------------------------------------------------------------------------
|
|
//| WctReadFile
|
|
//|
|
|
//| PURPOSE: Allocates a buffer and reads the file information into that
|
|
//| buffer from the given file
|
|
//|
|
|
//| ENTRY: lpFileName - ASCIIZ filename to read
|
|
//| StartPos - Offset at which point to begin read
|
|
//|
|
|
//| EXIT: Returns a handle to the allocated block, or NULL if failed.
|
|
//*------------------------------------------------------------------------
|
|
HANDLE WctReadFile(LPSTR lpFileName, LONG StartPos)
|
|
{
|
|
HFILE hFile;
|
|
HANDLE hTxtBuf = NULL;
|
|
LONG dwLength;
|
|
LPSTR lpTxtBuf;
|
|
|
|
if (-1 == (hFile = M_lopen(lpFileName, OF_READ)))
|
|
return (NULL);
|
|
|
|
if ( (dwLength = FileLength(hFile)) >= (65535+StartPos) )
|
|
{
|
|
M_lclose(hFile);
|
|
return (NULL);
|
|
}
|
|
|
|
if ( NULL == (hTxtBuf = GlobalAlloc(GHND, dwLength + 1 - StartPos)) )
|
|
{
|
|
M_lclose(hFile);
|
|
return (NULL);
|
|
}
|
|
|
|
/* Have all valid handles */
|
|
lpTxtBuf = GlobalLock(hTxtBuf);
|
|
|
|
M_llseek(hFile, StartPos, 0);
|
|
M_lread(hFile, lpTxtBuf, (WORD)(dwLength-StartPos));
|
|
M_lclose(hFile);
|
|
lpTxtBuf[(WORD)dwLength-StartPos] = '\0';
|
|
GlobalUnlock(hTxtBuf);
|
|
|
|
return ( hTxtBuf );
|
|
}
|
|
|
|
|
|
//*------------------------------------------------------------------------
|
|
//| WctFleditWndProc
|
|
//|
|
|
//| PURPOSE: Window procedure for the Fledit window.
|
|
//|
|
|
//| ENTRY/EXIT: Per Windows convention
|
|
//*------------------------------------------------------------------------
|
|
LONG APIENTRY WctFleditWndProc(HWND hWnd, UINT wMsgID,
|
|
WPARAM wParam, LPARAM lParam )
|
|
{
|
|
HANDLE hBuffer;
|
|
LPSTR lpBuffer, lpFNameTemp;
|
|
RECT rect;
|
|
HDC hdc;
|
|
static HWND hWndEdit;
|
|
static TEXTMETRIC tm;
|
|
static CHAR szFileName[80];
|
|
HFONT hFont;
|
|
|
|
switch( wMsgID ) {
|
|
case WM_CREATE:
|
|
GetClientRect (hWnd, &rect);
|
|
|
|
hdc = GetDC(hWnd);
|
|
GetTextMetrics(hdc, (LPTEXTMETRIC)&tm);
|
|
|
|
hWndEdit = CreateWindow("EDIT", "",
|
|
WS_CHILD | WS_VSCROLL | WS_HSCROLL | ES_AUTOVSCROLL |
|
|
ES_AUTOHSCROLL | WS_BORDER | WS_VISIBLE | ES_MULTILINE,
|
|
0, tm.tmHeight,rect.right, rect.bottom - tm.tmHeight,
|
|
hWnd, NULL, hgInstWct, 0L);
|
|
|
|
ReleaseDC(hWnd, hdc);
|
|
|
|
lpFNameTemp = (LPSTR)(((LPCREATESTRUCT)lParam)->lpszName);
|
|
|
|
// Use lParam as LPSTR to file to load.
|
|
//--------------------------------------------------------
|
|
if ( lpFNameTemp != NULL)
|
|
if ((hBuffer = WctReadFile(lpFNameTemp, sp)) != NULL)
|
|
{
|
|
lpBuffer = (LPSTR)GlobalLock(hBuffer);
|
|
if (lpBuffer != NULL)
|
|
{
|
|
SetWindowText(hWndEdit, lpBuffer);
|
|
GlobalUnlock(hBuffer);
|
|
}
|
|
GlobalFree(hBuffer);
|
|
}
|
|
|
|
// After reading in file NULL terminate text if too Long.
|
|
//--------------------------------------------------------
|
|
if ( lstrlen(lpFNameTemp) > 72)
|
|
*(lpFNameTemp+72) = '\0';
|
|
|
|
wsprintf(szFileName, "FILE: %s", (LPSTR)lpFNameTemp);
|
|
|
|
hdc = GetDC(hWnd);
|
|
GetTextMetrics(hdc, (LPTEXTMETRIC)&tm);
|
|
hFont = GetStockObject(ANSI_VAR_FONT);
|
|
SelectObject(hdc, hFont);
|
|
DeleteObject(SelectObject(hdc, GetStockObject(BLACK_PEN)));
|
|
TextOut(hdc, 0, 0, (LPSTR)szFileName,
|
|
lstrlen((LPSTR)szFileName));
|
|
DeleteObject(SelectObject(hdc, hFont));
|
|
ReleaseDC(hWnd, hdc);
|
|
|
|
SetWindowText(hWnd, "Compare Results");
|
|
break;
|
|
|
|
case WM_SIZE:
|
|
GetClientRect (hWnd, (LPRECT)&rect);
|
|
SetWindowPos (hWndEdit, NULL, 0, 0, rect.right,
|
|
rect.bottom - tm.tmHeight, SWP_NOMOVE);
|
|
break;
|
|
|
|
case WM_SETFOCUS:
|
|
SetFocus(hWndEdit);
|
|
break;
|
|
|
|
case WM_PAINT:
|
|
ValidateRect (hWnd, (LPRECT)NULL);
|
|
hdc = GetDC(hWnd);
|
|
DeleteObject(SelectObject(hdc, GetStockObject(BLACK_PEN)));
|
|
hFont = GetStockObject(ANSI_VAR_FONT);
|
|
SelectObject(hdc, hFont);
|
|
TextOut(hdc, 0, 0, (LPSTR)szFileName,
|
|
lstrlen((LPSTR)szFileName));
|
|
DeleteObject(SelectObject(hdc, hFont));
|
|
ReleaseDC(hWnd, hdc);
|
|
break;
|
|
|
|
case WM_CHAR:
|
|
if (wParam == VK_ESCAPE)
|
|
{
|
|
DestroyWindow (hWndEdit);
|
|
DestroyWindow (hWnd);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
return ( DefWindowProc(hWnd, wMsgID, wParam, lParam));
|
|
}
|
|
|
|
return (0L);
|
|
}
|
|
|
|
//*------------------------------------------------------------------------
|
|
//| DoFledit
|
|
//|
|
|
//| PURPOSE: Initialize and bring up the fledit. If it already exists,
|
|
//| destroy it and bring it up again. Assumes filename is
|
|
//| valid and has data...
|
|
//|
|
|
//| ENTRY: hWnd - Handle of window to place fledit over
|
|
//| lpFileName - Name of file to display in fledit window
|
|
//|
|
|
//| EXIT: None
|
|
//*------------------------------------------------------------------------
|
|
VOID DoFledit (HWND hWnd, LPSTR lpFileName)
|
|
{
|
|
WNDCLASS rClass;
|
|
RECT tRect;
|
|
static INT fReged = 0;
|
|
static HWND hWndFled;
|
|
|
|
if (!IsWindow (hWnd))
|
|
return;
|
|
|
|
if (!fReged)
|
|
{
|
|
rClass.style = CS_VREDRAW | CS_HREDRAW;
|
|
rClass.lpfnWndProc = WctFleditWndProc;
|
|
rClass.cbClsExtra = 0;
|
|
rClass.cbWndExtra = 0;
|
|
#ifdef WIN32
|
|
rClass.hInstance = (HANDLE) GetWindowLong (hWnd, GWL_HINSTANCE);
|
|
#else
|
|
rClass.hInstance = GetWindowWord (hWnd, GWW_HINSTANCE);
|
|
#endif
|
|
rClass.hIcon = NULL;
|
|
rClass.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
rClass.hbrBackground = GetStockObject (WHITE_BRUSH);
|
|
rClass.lpszMenuName = NULL;
|
|
rClass.lpszClassName = (LPSTR)"FleditWin";
|
|
|
|
if ( !RegisterClass(&rClass) )
|
|
return;
|
|
else
|
|
fReged = -1;
|
|
}
|
|
|
|
if (IsWindow(hWndFled))
|
|
{
|
|
DestroyWindow(hWndFled);
|
|
hWndFled = NULL;
|
|
}
|
|
|
|
GetWindowRect(hWnd, &tRect);
|
|
|
|
#ifdef WIN32
|
|
hWndFled = CreateWindow( (LPSTR)"FleditWin", lpFileName,
|
|
WS_VISIBLE | WS_POPUPWINDOW | WS_CLIPCHILDREN |
|
|
WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CAPTION,
|
|
tRect.left,tRect.top, tRect.right - tRect.left,
|
|
tRect.bottom - tRect.top,
|
|
hWnd, NULL,
|
|
(HANDLE) GetWindowLong (hWnd, GWL_HINSTANCE),
|
|
0L);
|
|
#else
|
|
hWndFled = CreateWindow( (LPSTR)"FleditWin", lpFileName,
|
|
WS_VISIBLE | WS_POPUPWINDOW | WS_CLIPCHILDREN |
|
|
WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CAPTION,
|
|
tRect.left,tRect.top, tRect.right - tRect.left,
|
|
tRect.bottom - tRect.top,
|
|
hWnd, NULL,
|
|
GetWindowWord (hWnd, GWW_HINSTANCE),
|
|
0L);
|
|
#endif
|
|
}
|