Windows NT 4.0 source code leak
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

//*-----------------------------------------------------------------------
//| 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
}