home *** CD-ROM | disk | FTP | other *** search
- /***************************************************************************
- * *
- * MODULE : MpFile.c *
- * *
- * PURPOSE : Contains the code for File I/O for Multipad. *
- * *
- * FUNCTIONS : AlreadyOpen - Determines if a file is already open. *
- * *
- * AddFile - Creates a new MDI window and, if specified,*
- * loads a file into it. *
- * *
- * LoadFile - Loads a file into a MDI window. *
- * *
- * ReadFile - Calls File/Open dialog and appropriately *
- * responds to the user's input. *
- * *
- * SaveFile - Saves the contents of a MDI window's edit *
- * control to a file. *
- * *
- * SetSaveFrom - Formats the "Save 'file' to" string. *
- * *
- * SaveAsDlgProc - Dialog function for the File/SaveAs dialog.*
- * *
- * ChangeFile - Calls File/SaveAs dialog. *
- * *
- ***************************************************************************/
- // COPYRIGHT:
- //
- // (C) Copyright Microsoft Corp. 1992. All rights reserved.
- //
- // You have a royalty-free right to use, modify, reproduce and
- // distribute the Sample Files (and/or any modified version) in
- // any way you find useful, provided that you agree that
- // Microsoft has no warranty obligations or liability for any
- // Sample Application Files which are modified.
-
- #include "multipad.h"
- #include "commdlg.h"
-
- OFSTRUCT of;
- /****************************************************************************
- * *
- * FUNCTION : AlreadyOpen(szFile) *
- * *
- * PURPOSE : Checks to see if the file described by the string pointed *
- * to by 'szFile' is already open. *
- * *
- * RETURNS : a handle to the described file's window if that file is *
- * already open; NULL otherwise. *
- * *
- ****************************************************************************/
-
- HWND AlreadyOpen(char *szFile)
- {
- int iDiff;
- HWND hwndCheck;
- char szChild[64];
- LPSTR lpChild, lpFile;
- int 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 Multipad */
- for ( hwndCheck = GetWindow(hwndMDIClient, GW_CHILD);
- hwndCheck;
- hwndCheck = GetWindow(hwndCheck, GW_HWNDNEXT) ) {
- /* Initialization for comparison */
- lpChild = szChild;
- lpFile = 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);
- }
-
- /****************************************************************************
- * *
- * FUNCTION : AddFile (lpName) *
- * *
- * PURPOSE : Creates a new MDI window. If the lpName parameter is not *
- * NULL, it loads a file into the window. *
- * *
- * RETURNS : HWND - A handle to the new window. *
- * *
- ****************************************************************************/
-
- HWND FAR PASCAL AddFile(pName)
- 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 = of.szPathName;
-
- 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 = styleDefault;
-
- /* tell the MDI Client to create the child */
- hwnd = (WORD)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, (WORD) hwnd, 0L);
- }
- }
-
- return hwnd;
- }
-
- /****************************************************************************
- * *
- * FUNCTION : LoadFile (lpName) *
- * *
- * PURPOSE : Given the handle to a MDI window and a filename, reads the *
- * file into the window's edit control child. *
- * *
- * RETURNS : TRUE - If file is sucessfully loaded. *
- * FALSE - Otherwise. *
- * *
- ****************************************************************************/
-
- int FAR PASCAL LoadFile (hwnd, pName)
- HWND hwnd;
- char * pName;
- {
- WORD wLength;
- HANDLE hT;
- LPSTR lpB;
- HWND hwndEdit;
- int fh;
-
- hwndEdit = GetWindowWord (hwnd, GWW_HWNDEDIT);
-
- /* The file has a title, so reset the UNTITLED flag. */
- SetWindowWord(hwnd, GWW_UNTITLED, FALSE);
-
- fh = _lopen (pName, 0);
-
- /* Make sure file has been opened correctly */
- if ( fh < 0 )
- goto error;
-
- /* Find the length of the file */
- wLength = (WORD)_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 != _lread (fh, (lpB = (LPSTR)LocalLock (hT)), 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, hT, 0L);
- _lclose (fh);
-
- return TRUE;
-
- error:
- /* Report the error and quit */
- MPError(hwnd, MB_OK | MB_ICONHAND, IDS_CANTOPEN, (LPSTR)pName);
- return FALSE;
- }
-
- /****************************************************************************
- * *
- * FUNCTION : ReadFile(hwnd) *
- * *
- * PURPOSE : Called in response to a File/Open menu selection. It asks *
- * the user for a file name and responds appropriately. *
- * *
- ****************************************************************************/
-
- VOID FAR PASCAL ReadFile(HWND hwnd)
- {
- char szFile[128];
- HWND hwndFile;
- OPENFILENAME of;
-
- lstrcpy(szFile, "*.TXT");
-
- of.lStructSize = sizeof(OPENFILENAME);
- of.hwndOwner =(HWND) hwnd;
- of.hInstance = (HANDLE)NULL;
- of.lpstrFilter = (LPSTR)"Text Files (*.TXT)\0*.TXT\0";
- of.lpstrCustomFilter = (LPSTR)NULL;
- of.nMaxCustFilter = 0L;
- of.nFilterIndex = 1;
- of.lpstrFile = (LPSTR)szFile;
- of.nMaxFile = 128;
- of.lpstrFileTitle = (LPSTR)NULL;
- of.nMaxFileTitle = 0;
- of.lpstrInitialDir = (LPSTR)NULL;
- of.lpstrTitle = NULL;
- of.Flags = OFN_HIDEREADONLY|OFN_FILEMUSTEXIST;
- of.lpstrDefExt = NULL;
- of.nFileOffset = 0;
- of.nFileExtension = 0;
- of.lpstrDefExt = (LPSTR)NULL;
- of.lCustData = 0L;
- of.lpTemplateName = (LPSTR)NULL;
-
- if(!GetOpenFileName(&of))
- return;
-
- /* 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);
- }
- }
- }
-
- /****************************************************************************
- * *
- * FUNCTION : SaveFile (hwnd) *
- * *
- * PURPOSE : Saves contents of current edit control to disk. *
- * *
- ****************************************************************************/
-
- VOID FAR PASCAL SaveFile( hwnd )
-
- HWND hwnd;
- {
- HANDLE hT;
- LPSTR lpT;
- char szFile[128];
- WORD cch;
- int fh;
- OFSTRUCT of;
- HWND hwndEdit;
-
- hwndEdit = GetWindowWord ( hwnd, GWW_HWNDEDIT);
- GetWindowText (hwnd, szFile, sizeof(szFile));
-
- /* If there is no extension (control is 'Untitled') add .TXT as extension */
- for (cch = FALSE, lpT = szFile; *lpT; lpT++)
- switch (*lpT){
- case '.':
- cch = TRUE;
- break;
-
- case '\\':
- case ':' :
- cch = FALSE;
- break;
- }
- if (!cch)
- LoadString (hInst, IDS_ADDEXT, lpT, lpT - (LPSTR)szFile);
-
- fh = OpenFile (szFile, &of, OF_WRITE | OF_CREATE);
-
- /* If file could not be opened, quit */
- if (fh < 0){
- MPError (hwnd, MB_OK | MB_ICONHAND, IDS_CANTCREATE, (LPSTR)szFile);
- return;
- }
-
- /* Find out the length of the text in the edit control */
- cch = GetWindowTextLength (hwndEdit);
-
- /* Obtain a handle to the text buffer */
- hT = (HANDLE)SendMessage (hwndEdit, EM_GETHANDLE, 0, 0L);
- lpT = (LPSTR)LocalLock (hT);
-
- /* Write out the contents of the buffer to the file. */
- if (cch != _lwrite (fh, lpT, cch))
- MPError (hwnd, MB_OK | MB_ICONHAND, IDS_CANTWRITE, (LPSTR)szFile);
-
- /* Clean up */
- LocalUnlock (hT);
- SendMessage (hwndEdit, EM_SETHANDLE, hT, 0L);
-
- _lclose (fh);
-
- return;
- }
-
-
- /****************************************************************************
- * *
- * FUNCTION : ChangeFile (hwnd) *
- * *
- * PURPOSE : Invokes the File/SaveAs dialog. *
- * *
- * RETURNS : TRUE - if user selected OK or NO. *
- * FALSE - otherwise. *
- * *
- ****************************************************************************/
-
- BOOL FAR PASCAL ChangeFile (hwnd)
- HWND hwnd;
- {
- char szFile[128];
- OPENFILENAME of;
-
- if (GetWindowWord(hwnd, GWW_UNTITLED))
- lstrcpy(szFile, "*.TXT");
- else
- GetWindowText(hwnd, szFile, 128);
-
- of.lStructSize = sizeof(OPENFILENAME);
- of.hwndOwner =(HWND) hwnd;
- of.hInstance = (HANDLE)NULL;
- of.lpstrFilter = (LPSTR)"Text Files (*.TXT)\0*.TXT\0";
- of.lpstrCustomFilter = (LPSTR)NULL;
- of.nMaxCustFilter = 0L;
- of.nFilterIndex = 1;
- of.lpstrFile = (LPSTR)szFile;
- of.nMaxFile = 128;
- of.lpstrFileTitle = (LPSTR)NULL;
- of.nMaxFileTitle = 0;
- of.lpstrInitialDir = (LPSTR)NULL;
- of.lpstrTitle = NULL;
- of.Flags = OFN_HIDEREADONLY;
- of.lpstrDefExt = NULL;
- of.nFileOffset = 0;
- of.nFileExtension = 0;
- of.lpstrDefExt = (LPSTR)NULL;
- of.lCustData = 0L;
- of.lpTemplateName = (LPSTR)NULL;
-
- if(!GetSaveFileName(&of))
- return(FALSE);
-
- SetWindowWord(hwnd, GWW_UNTITLED, 0);
- SetWindowText(hwnd, szFile);
- return(TRUE);
- }
-