|
|
1.1 ! root 1: ! 2: /******************************************************************************\ ! 3: * This is a part of the Microsoft Source Code Samples. ! 4: * Copyright (C) 1993 Microsoft Corporation. ! 5: * All rights reserved. ! 6: * This source code is only intended as a supplement to ! 7: * Microsoft Development Tools and/or WinHelp documentation. ! 8: * See these sources for detailed information regarding the ! 9: * Microsoft samples programs. ! 10: \******************************************************************************/ ! 11: ! 12: #include "PortTool.h" ! 13: #include <string.h> ! 14: ! 15: /* global file name variables */ ! 16: char lpszFilePath[MAX_PATH]; ! 17: char lpszFilterSpec[128] = /* load here since resource compiler hoses it */ ! 18: "C Source Files (*.C)\0*.C\0C Header Files (*.H)\0*.H\0All Files (*.*)\0*.*\0"; ! 19: ! 20: ! 21: /* call the OpenFile common dialog to get a filename */ ! 22: BOOL WINAPI GetFileName ( ! 23: HWND hWnd, ! 24: char *lpszFileTitle, ! 25: char *lpszFilePath) ! 26: { ! 27: OPENFILENAME ofn; ! 28: char lpszFileOpen[25]; ! 29: char lpszExt[10]; ! 30: ! 31: strcpy (lpszFileTitle, ""); ! 32: LoadString ((HANDLE)GetModuleHandle (NULL), ! 33: IDS_DEFAULTFILEEXT, ! 34: lpszExt, ! 35: sizeof (lpszExt)); ! 36: LoadString ((HANDLE)GetModuleHandle (NULL), ! 37: IDS_FILEOPENTITLE, ! 38: lpszFileOpen, ! 39: sizeof (lpszFileOpen)); ! 40: ! 41: /* fill in non-variant fields of OPENFILENAME struct. */ ! 42: ofn.lStructSize = sizeof(OPENFILENAME); ! 43: ofn.hwndOwner = NULL; ! 44: ofn.lpstrFilter = lpszFilterSpec; ! 45: ofn.lpstrCustomFilter = NULL; ! 46: ofn.nMaxCustFilter = 0; ! 47: ofn.nFilterIndex = 0; ! 48: ofn.lpstrFile = lpszFilePath; ! 49: ofn.nMaxFile = MAX_PATH; ! 50: ofn.lpstrInitialDir = NULL; ! 51: ofn.lpstrFileTitle = lpszFileTitle; ! 52: ofn.nMaxFileTitle = MAX_PATH; ! 53: ofn.lpstrTitle = lpszFileOpen; ! 54: ofn.lpstrDefExt = lpszExt; ! 55: ofn.Flags = OFN_FILEMUSTEXIST; ! 56: ! 57: /* call common open dialog and return result */ ! 58: return (GetOpenFileName ((LPOPENFILENAME)&ofn)); ! 59: } ! 60: ! 61: ! 62: ! 63: /* function retrieves the filename from the path */ ! 64: BOOL WINAPI GetFileFromPath ( ! 65: char *lpszFullPath, ! 66: char *lpszFile) ! 67: { ! 68: char *lpPtr = lpszFullPath + strlen (lpszFullPath); ! 69: ! 70: /* file is at end of path, so search backwards to first \ or : char */ ! 71: while (lpPtr > lpszFullPath) ! 72: { ! 73: if (*lpPtr == '\\' || ! 74: *lpPtr == ':') ! 75: { ! 76: lpPtr++; ! 77: break; ! 78: } ! 79: lpPtr--; ! 80: } ! 81: ! 82: /* return filename if found, or full path passed in */ ! 83: strcpy (lpszFile, lpPtr); ! 84: ! 85: return (lpPtr > lpszFullPath); ! 86: } ! 87: ! 88: ! 89: ! 90: /* retrieve ini file and path */ ! 91: BOOL WINAPI GetIniFile ( ! 92: char *lpszFile) ! 93: { ! 94: char lpszPath[MAX_PATH]; ! 95: char *lpPath; ! 96: char lpszFileName[MAX_PATH]; ! 97: OFSTRUCT of; ! 98: ! 99: /* get module directory and path */ ! 100: GetModuleFileName (NULL, lpszPath, MAX_PATH); ! 101: lpPath = lpszPath + strlen (lpszPath); ! 102: ! 103: /* find end of path by searching backwards from end to first '\' or ':' */ ! 104: while (lpPath > lpszPath) ! 105: { ! 106: if (*lpPath == '\\' || ! 107: *lpPath == ':') ! 108: { ! 109: lpPath++; ! 110: break; ! 111: } ! 112: lpPath--; ! 113: } ! 114: ! 115: /*terminate at end of path */ ! 116: *lpPath = 0; ! 117: ! 118: /* append ini filename to path */ ! 119: LoadString (GetModuleHandle (NULL), IDS_INIFILE, lpszFileName, MAX_PATH); ! 120: strcat (lpPath, lpszFileName); ! 121: ! 122: /* test for existance */ ! 123: if (!(OpenFile (lpszPath, &of, OF_EXIST))) ! 124: { ! 125: GetWindowsDirectory (lpszPath, MAX_PATH); ! 126: strcat (lpszPath, lpszFileName); ! 127: if (!(OpenFile (lpszPath, &of, OF_EXIST))) ! 128: return FALSE; ! 129: else ! 130: { ! 131: strcpy (lpszFile, lpszPath); ! 132: return TRUE; ! 133: } ! 134: } ! 135: else ! 136: { ! 137: strcpy (lpszFile, lpszPath); ! 138: return TRUE; ! 139: } ! 140: } ! 141: ! 142: ! 143: /* open a file and load into edit control */ ! 144: int WINAPI LoadFile ( ! 145: HWND hWnd, ! 146: char *lpszName) ! 147: { ! 148: LONG lLength; ! 149: HWND hWndEdit = (HWND)GetWindowLong (hWnd, WL_HWNDEDIT); ! 150: HANDLE hEditData; ! 151: char *lpEditData; ! 152: HFILE hFile; ! 153: OFSTRUCT of; ! 154: ! 155: /* open file for read & write */ ! 156: if ((hFile = OpenFile(lpszName, &of, OF_READWRITE)) == -1) ! 157: /* return error */ ! 158: return IDS_OPENFAILED; ! 159: ! 160: /* get file length */ ! 161: if (lLength = _llseek(hFile, 0L, 2)) ! 162: _llseek(hFile, 0L, 0); ! 163: else ! 164: { ! 165: /* close file and return error */ ! 166: CloseHandle ((HANDLE)hFile); ! 167: return IDS_NOSIZE; ! 168: } ! 169: ! 170: /* get the edit control's memory handle */ ! 171: if (!(hEditData = (HANDLE)SendMessage (hWndEdit, EM_GETHANDLE, 0, 0L))) ! 172: { ! 173: /* close file and return error */ ! 174: CloseHandle ((HANDLE)hFile); ! 175: return IDS_GETHANDLEFAILED; ! 176: } ! 177: ! 178: /* realloc the memory to fit the new file size */ ! 179: if (((hEditData = LocalReAlloc(hEditData, lLength+1, LHND)) == NULL) || ! 180: (!(lpEditData = (char *)LocalLock (hEditData)))) ! 181: { ! 182: /* close file and return error */ ! 183: CloseHandle ((HANDLE)hFile); ! 184: return IDS_REALLOCFAILED; ! 185: } ! 186: ! 187: /* read the file into hEditData buffer */ ! 188: if (_lread(hFile, lpEditData, lLength) == -1) ! 189: { ! 190: /* close file and return error */ ! 191: CloseHandle ((HANDLE)hFile); ! 192: return IDS_READFAILED; ! 193: } ! 194: ! 195: /* null terminate edit buffer */ ! 196: lpEditData[lLength] = 0; ! 197: LocalUnlock (hEditData); ! 198: ! 199: /* load buffer into edit control and close file */ ! 200: SendMessage (hWndEdit, EM_SETHANDLE, (UINT)hEditData, 0L); ! 201: CloseHandle ((HANDLE)hFile); ! 202: ! 203: /* return success */ ! 204: return TRUE; ! 205: } ! 206: ! 207: ! 208: ! 209: /* save file to disk */ ! 210: int WINAPI SaveFile ( ! 211: HWND hWnd, ! 212: char *lpszFile) ! 213: { ! 214: HANDLE hEditData; ! 215: int nLength; ! 216: DWORD dwWritten; ! 217: HANDLE hFile; ! 218: HWND hWndEdit = (HWND)GetWindowLong (hWnd, WL_HWNDEDIT); ! 219: char *lpEditData; ! 220: ! 221: ! 222: /* open the file for writing */ ! 223: hFile = CreateFile (lpszFile, ! 224: GENERIC_WRITE, ! 225: 0, ! 226: NULL, ! 227: CREATE_ALWAYS, ! 228: FILE_ATTRIBUTE_NORMAL, ! 229: NULL); ! 230: ! 231: /* validate file handle */ ! 232: if (!hFile) ! 233: return IDS_WRITEOPENFAILED; ! 234: ! 235: /* find out the length of the text in the edit control */ ! 236: nLength = GetWindowTextLength (hWndEdit); ! 237: ! 238: /* get handle to Edit text and lock pointer */ ! 239: hEditData = (HANDLE)SendMessage (hWndEdit, EM_GETHANDLE, 0, 0); ! 240: lpEditData = (char *)LocalLock (hEditData); ! 241: ! 242: /* write edit data to file. */ ! 243: if (!WriteFile(hFile, lpEditData, nLength, &dwWritten, NULL)) ! 244: { ! 245: /* unlock memory, restore edit handle, close file and return error */ ! 246: LocalUnlock (hEditData); ! 247: CloseHandle (hFile); ! 248: return IDS_WRITEFAILED; ! 249: } ! 250: ! 251: /* clean up and go away */ ! 252: LocalUnlock (hEditData); ! 253: CloseHandle (hFile); ! 254: ! 255: return TRUE; ! 256: } ! 257: ! 258: ! 259: /* invokes the saveas common dialog to retrieve a file name */ ! 260: BOOL WINAPI SaveAsFileName ( ! 261: HWND hWnd, ! 262: char *lpszFileTitle, ! 263: char *lpszFilePath) ! 264: { ! 265: OPENFILENAME ofn; ! 266: char lpszSaveAs[25]; ! 267: char lpszExt[10]; ! 268: ! 269: *lpszFileTitle = 0; ! 270: *lpszFilePath = 0; ! 271: ! 272: /* load strings from resource string table */ ! 273: LoadString ((HANDLE)GetModuleHandle (NULL), ! 274: IDS_DEFAULTFILEEXT, ! 275: lpszExt, ! 276: sizeof (lpszExt)); ! 277: LoadString ((HANDLE)GetModuleHandle (NULL), ! 278: IDS_SAVEASTITLE, ! 279: lpszSaveAs, ! 280: sizeof (lpszSaveAs)); ! 281: ! 282: /* fill in non-variant fields of OPENFILENAME struct. */ ! 283: ofn.lStructSize = sizeof (OPENFILENAME); ! 284: ofn.hwndOwner = hWnd; ! 285: ofn.lpstrFilter = lpszFilterSpec; ! 286: ofn.lpstrCustomFilter = NULL; ! 287: ofn.nMaxCustFilter = 0; ! 288: ofn.nFilterIndex = 0; ! 289: ofn.lpstrFile = lpszFilePath; ! 290: ofn.nMaxFile = MAX_PATH; ! 291: ofn.lpstrInitialDir = NULL; ! 292: ofn.lpstrFileTitle = lpszFileTitle; ! 293: ofn.nMaxFileTitle = MAX_PATH; ! 294: ofn.lpstrTitle = lpszSaveAs; ! 295: ofn.lpstrDefExt = lpszExt; ! 296: ofn.Flags = 0; ! 297: ! 298: /* call common saveas dialog and return success */ ! 299: return (GetSaveFileName ((LPOPENFILENAME)&ofn)); ! 300: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.