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