diff options
Diffstat (limited to '')
-rw-r--r-- | private/nw/convert/logview/fvfile.c | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/private/nw/convert/logview/fvfile.c b/private/nw/convert/logview/fvfile.c new file mode 100644 index 000000000..466ec9c4c --- /dev/null +++ b/private/nw/convert/logview/fvfile.c @@ -0,0 +1,231 @@ +/* + +-------------------------------------------------------------------------+ + | MDI Text File Viewer - File IO Routines | + +-------------------------------------------------------------------------+ + | (c) Copyright 1994 | + | Microsoft Corp. | + | All rights reserved | + | | + | Program : [mpfile.c] | + | Programmer : Arthur Hanson | + | Original Program Date : [Jul 27, 1993 | + | Last Update : [Jul 30, 1993] Time : 18:30 | + | | + | Version: 0.10 | + | | + | Description: | + | | + | History: | + | arth Jul 27, 1993 0.10 Original Version. | + | | + +-------------------------------------------------------------------------+ +*/ + +#include "LogView.h" +#include <fcntl.h> +#include <SYS\types.h> +#include <SYS\stat.h> +#include <io.h> +#include <string.h> + +VOID APIENTRY GetFileName(HWND hwnd, PSTR); + +OFSTRUCT of; + + +/*+-------------------------------------------------------------------------+ + | AlreadyOpen() | + | | + | Checks to see if a file is already opened. Returns a handle to | + | the file's window if it is opened, otherwise NULL. | + | | + +-------------------------------------------------------------------------+*/ +HWND AlreadyOpen(CHAR *szFile) { + INT iDiff; + HWND hwndCheck; + CHAR szChild[64]; + LPSTR lpChild, lpFile; + HFILE wFileTemp; + + // Open the file with the OF_PARSE flag to obtain the fully qualified + // pathname in the OFSTRUCT structure. + wFileTemp = OpenFile((LPSTR)szFile, (LPOFSTRUCT)&of, OF_PARSE); + if (! wFileTemp) + return(NULL); + _lclose(wFileTemp); + + // Check each MDI child window in LogView + for ( hwndCheck = GetWindow(hwndMDIClient, GW_CHILD); + hwndCheck; + hwndCheck = GetWindow(hwndCheck, GW_HWNDNEXT) ) { + // Initialization for comparison + lpChild = szChild; + lpFile = (LPSTR)AnsiUpper((LPSTR) of.szPathName); + iDiff = 0; + + // Skip icon title windows + if (GetWindow(hwndCheck, GW_OWNER)) + continue; + + // Get current child window's name + GetWindowText(hwndCheck, lpChild, 64); + + // Compare window name with given name + while ((*lpChild) && (*lpFile) && (!iDiff)) { + if (*lpChild++ != *lpFile++) + iDiff = 1; + } + + // If the two names matched, the file is already open - return handle to matching + // child window. + if (!iDiff) + return(hwndCheck); + } + + // No match found -- file is not open -- return NULL handle + return(NULL); + +} // AlreadyOpen + + +/*+-------------------------------------------------------------------------+ + | AddFile() | + | | + | Create a new MDI Window, and loads specified file into Window. | + | | + +-------------------------------------------------------------------------+*/ +HWND APIENTRY AddFile(CHAR * pName) { + HWND hwnd; + + CHAR sz[160]; + MDICREATESTRUCT mcs; + + if (!pName) { + // The pName parameter is NULL -- load the "Untitled" string from STRINGTABLE + // and set the title field of the MDI CreateStruct. + LoadString (hInst, IDS_UNTITLED, sz, sizeof(sz)); + mcs.szTitle = (LPSTR)sz; + } + else + // Title the window with the fully qualified pathname obtained by calling + // OpenFile() with the OF_PARSE flag (in function AlreadyOpen(), which is called + // before AddFile(). + mcs.szTitle = pName; + + mcs.szClass = szChild; + mcs.hOwner = hInst; + + // Use the default size for the window + mcs.x = mcs.cx = CW_USEDEFAULT; + mcs.y = mcs.cy = CW_USEDEFAULT; + + // Set the style DWORD of the window to default + mcs.style = 0L; + + // tell the MDI Client to create the child + hwnd = (HWND)SendMessage (hwndMDIClient, + WM_MDICREATE, + 0, + (LONG)(LPMDICREATESTRUCT)&mcs); + + // Did we get a file? Read it into the window + if (pName){ + if (!LoadFile(hwnd, pName)){ + // File couldn't be loaded -- close window + SendMessage(hwndMDIClient, WM_MDIDESTROY, (DWORD) hwnd, 0L); + } + } + + return hwnd; + +} // AddFile + + +/*+-------------------------------------------------------------------------+ + | LoadFile() | + | | + | Loads file into specified MDI window's edit control. | + | | + +-------------------------------------------------------------------------+*/ +INT APIENTRY LoadFile ( HWND hwnd, CHAR * pName) { + LONG wLength; + HANDLE hT; + LPSTR lpB; + HWND hwndEdit; + HFILE fh; + OFSTRUCT of; + + hwndEdit = (HWND)GetWindowLong (hwnd, GWL_HWNDEDIT); + + // The file has a title, so reset the UNTITLED flag. + SetWindowWord(hwnd, GWW_UNTITLED, FALSE); + + fh = OpenFile(pName, &of, OF_READ); // JAP was 0, which is OF_READ) + + // Make sure file has been opened correctly + if ( fh < 0 ) + goto error; + + // Find the length of the file + wLength = (DWORD)_llseek(fh, 0L, 2); + _llseek(fh, 0L, 0); + + // Attempt to reallocate the edit control's buffer to the file size + hT = (HANDLE)SendMessage (hwndEdit, EM_GETHANDLE, 0, 0L); + if (LocalReAlloc(hT, wLength+1, LHND) == NULL) { + // Couldn't reallocate to new size -- error + _lclose(fh); + goto error; + } + + // read the file into the buffer + if (wLength != (LONG)_lread(fh, (lpB = (LPSTR)LocalLock (hT)), (UINT)wLength)) + MPError (hwnd, MB_OK|MB_ICONHAND, IDS_CANTREAD, (LPSTR)pName); + + // Zero terminate the edit buffer + lpB[wLength] = 0; + LocalUnlock (hT); + + SendMessage (hwndEdit, EM_SETHANDLE, (UINT)hT, 0L); + _lclose(fh); + + return TRUE; + +error: + // Report the error and quit + MPError(hwnd, MB_OK | MB_ICONHAND, IDS_CANTOPEN, (LPSTR)pName); + return FALSE; + +} // LoadFile + + +/*+-------------------------------------------------------------------------+ + | MyReadFile() | + | | + | Asks user for a filename. | + | | + +-------------------------------------------------------------------------+*/ +VOID APIENTRY MyReadFile(HWND hwnd) { + CHAR szFile[128]; + HWND hwndFile; + + GetFileName (hwnd, szFile); + + // If the result is not the empty string -- take appropriate action + if (*szFile) { + // Is file already open?? + if (hwndFile = AlreadyOpen(szFile)) { + // Yes -- bring the file's window to the top + BringWindowToTop(hwndFile); + } + else { + // No -- make a new window and load file into it + AddFile(szFile); + } + } + UNREFERENCED_PARAMETER(hwnd); + +} // MyReadFile + + + |