source: trunk/dll/inis.c@ 1209

Last change on this file since 1209 was 1209, checked in by John Small, 17 years ago

Ticket 187: Move data declarations/definitions out of fm3dll.h

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 93.5 KB
Line 
1
2/***********************************************************************
3
4 $Id: inis.c 1209 2008-09-13 06:51:06Z jbs $
5
6 Copyright (c) 1993-98 M. Kimes
7 Copyright (c) 2004, 2008 Steven H. Levine
8
9 01 Aug 04 SHL Rework lstrip/rstrip usage
10 01 Aug 04 SHL Rework fixup usage
11 24 May 05 SHL Rework Win_Error usage
12 05 Jun 05 SHL Use QWL_USER
13 17 Jul 06 SHL Use Runtime_Error
14 03 Nov 06 SHL Renames
15 03 Nov 06 SHL Count thread usage
16 22 Mar 07 GKY Use QWL_USER
17 30 Mar 07 GKY Remove GetPString for window class names
18 06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
19 06 Apr 07 GKY Add some error checking in drag/drop
20 19 Apr 07 SHL Use FreeDragInfoData. Add more drag/drop error checks.
21 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
22 16 Nov 07 SHL Ensure fixup buffer sufficiently large
23 09 Jan 08 SHL Avoid closing INI more times than opened
24 09 Jan 08 SHL Add some missing error reporting
25 09 Jan 08 SHL Standardize PrfOpenProfile return checks
26 09 Jan 08 SHL Use CloseProfile to avoid spurious system INI closes
27 29 Feb 08 GKY Use xfree where appropriate
28 19 Jul 08 GKY Replace save_dir2(dir) with pFM2SaveDirectory or pTmpDir and use BldFullPathName
29
30***********************************************************************/
31
32#include <stdlib.h>
33#include <string.h>
34#include <ctype.h>
35#include <share.h>
36#include <process.h> // _beginthread
37
38#define INCL_DOS
39#define INCL_DOSERRORS
40#define INCL_WIN
41#define INCL_GPI
42#define INCL_LONGLONG // dircnrs.h
43
44#include "fm3dll.h"
45#include "mainwnd2.h" // Data declaration(s)
46#include "collect.h" // Data declaration(s)
47#include "grep.h" // Data declaration(s)
48#include "notebook.h" // Data declaration(s)
49#include "init.h" // Data declaration(s)
50#include "fm3dlg.h"
51#include "fm3str.h"
52#include "mle.h"
53#include "errutil.h" // Dos_Error...
54#include "strutil.h" // GetPString
55#include "pathutil.h" // BldFullPathName
56#include "mainwnd.h" // FillClient
57#include "droplist.h" // FullDrgName
58#include "inis.h"
59#include "literal.h" // fixup
60#include "common.h" // DecrThreadUsage, IncrThreadUsage
61#include "draglist.h" // FreeDragInfoData
62#include "input.h" // InputDlgProc
63#include "valid.h" // MakeFullName
64#include "notify.h" // Notify
65#include "presparm.h" // PresParamChanged
66#include "getnames.h" // export_filename
67#include "copyf.h" // unlinkf
68#include "eas.h" // HexDump
69#include "strips.h" // bstrip
70#include "misc.h" // BoxWindow
71#include "dirs.h" // save_dir2
72#include "wrappers.h" // xfopen
73#include "fortify.h"
74
75// Data definitions
76#pragma data_seg(GLOBAL1)
77HELPINIT hini;
78
79#pragma data_seg(GLOBAL2)
80CHAR *DRF_FM2INI;
81CHAR *DRM_FM2INIRECORD;
82RGB2 RGBBLACK;
83
84#pragma data_seg(DATA2)
85
86static PSZ pszSrcFile = __FILE__;
87
88typedef struct
89{
90 USHORT size;
91 CHAR ininame[CCHMAXPATH]; // Must be null string if user or system ini
92 HINI hini;
93 BOOL working;
94 BOOL edit;
95 BOOL confirm;
96 HWND hwndMenu;
97 CHAR applname[CCHMAXPATH];
98 CHAR keyname[CCHMAXPATH];
99 CHAR *data;
100 ULONG datalen;
101 SHORT appindex;
102 SHORT keyindex;
103 BOOL dontclose;
104 USHORT currid;
105 BOOL isbinary;
106 HWND hwndIni;
107 HWND hwndApp;
108 HWND hwndKey;
109 HWND hwndData;
110 HWND hwndPopup;
111 HWND hwndCurrent;
112}
113INIDATA;
114
115typedef struct
116{
117 USHORT size;
118 USHORT action;
119 CHAR filename1[CCHMAXPATH];
120 CHAR filename2[CCHMAXPATH];
121 CHAR app[CCHMAXPATH];
122 CHAR key[CCHMAXPATH];
123 CHAR app2[CCHMAXPATH];
124 CHAR key2[CCHMAXPATH];
125 HWND hwndDlg;
126 HWND hwndSource;
127 BOOL confirm;
128}
129INIREC;
130
131/**
132 * Close profile unless it is user or system INI
133 * @param hini is profile handle
134 * @param fSkipIfSystem bypasses close for system INIs
135 */
136
137static VOID CloseProfile(HINI hini, BOOL fSkipIfSystem)
138{
139 BOOL ok = fSkipIfSystem &&
140 (hini == HINI_USERPROFILE || hini == HINI_SYSTEMPROFILE);
141
142 if (!ok) {
143 ok = PrfCloseProfile(hini);
144 if (!ok) {
145 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
146 "PrfCloseProfile failed for handle 0x%x", hini);
147 }
148 }
149}
150
151VOID CopyIniThread(VOID * args)
152{
153 INIREC *inirec = (INIREC *) args;
154 HAB hab2;
155 HMQ hmq2;
156 HINI hiniFrom = NULLHANDLE;
157 HINI hiniTo = NULLHANDLE;
158 PRFPROFILE cprfp;
159 CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
160
161 if (inirec) {
162# ifdef FORTIFY
163 Fortify_EnterScope();
164# endif
165 hab2 = WinInitialize(0);
166 if (hab2) {
167 hmq2 = WinCreateMsgQueue(hab2, 0);
168 if (hmq2) {
169 WinCancelShutdown(hmq2, TRUE);
170 IncrThreadUsage();
171 *userini = *sysini = 0;
172 memset(&cprfp, 0, sizeof(PRFPROFILE));
173 cprfp.cchUserName = CCHMAXPATH;
174 cprfp.cchSysName = CCHMAXPATH;
175 cprfp.pszUserName = (PSZ) userini;
176 cprfp.pszSysName = (PSZ) sysini;
177 if (PrfQueryProfile(hab2, &cprfp)) {
178 if (!stricmp(cprfp.pszUserName, inirec->filename1))
179 hiniFrom = HINI_USERPROFILE;
180 else if (!stricmp(cprfp.pszSysName, inirec->filename1))
181 hiniFrom = HINI_SYSTEMPROFILE;
182 if (!stricmp(cprfp.pszUserName, inirec->filename2))
183 hiniTo = HINI_USERPROFILE;
184 else if (!stricmp(cprfp.pszSysName, inirec->filename2))
185 hiniTo = HINI_SYSTEMPROFILE;
186 }
187 if (hiniFrom == NULLHANDLE) {
188 hiniFrom = PrfOpenProfile(hab2, inirec->filename1);
189 if (hiniFrom == NULLHANDLE) {
190 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
191 "PrfOpenProfile failed for %s", inirec->filename1);
192 }
193 }
194 if (hiniTo == NULLHANDLE) {
195 if (!stricmp(inirec->filename1, inirec->filename2))
196 hiniTo = hiniFrom;
197 else {
198 hiniTo = PrfOpenProfile(hab2, inirec->filename2);
199 if (hiniTo == NULLHANDLE) {
200 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
201 "PrfOpenProfile failed for %s", inirec->filename2);
202 }
203 }
204 }
205 if (hiniFrom && hiniTo && (*inirec->app2 || hiniFrom != hiniTo)) {
206
207 PVOID pDataK, pData;
208 PBYTE pCurrentK;
209 ULONG ulSize = 0L;
210
211 if (inirec->action == IDM_MOVE || inirec->action == IDM_COPY) {
212 if (!*inirec->key) {
213 if (inirec->confirm &&
214 PrfQueryProfileSize(hiniFrom, (PSZ) ((*inirec->app2) ?
215 inirec->app2 : inirec->
216 app), NULL,
217 (PULONG) & ulSize) && ulSize) {
218 if (saymsg
219 (MB_YESNOCANCEL, HWND_DESKTOP,
220 GetPString(IDS_CONFIRMTEXT),
221 GetPString(IDS_INIOVERAPPNAMETEXT),
222 ((*inirec->app2) ? inirec->app2 : inirec->app),
223 inirec->filename1) != MBID_YES)
224 goto Abort;
225 }
226 if (PrfQueryProfileSize(hiniTo,
227 (PSZ) inirec->app,
228 NULL, (PULONG) & ulSize) && ulSize) {
229 pDataK = xmalloc(ulSize, pszSrcFile, __LINE__); /* allocate space for keynames */
230 if (pDataK) {
231 /* get keynames */
232 if (PrfQueryProfileString(hiniTo,
233 (PSZ) inirec->app,
234 NULL, "\0", pDataK, ulSize)) {
235 pCurrentK = pDataK;
236 /* step through keynames */
237 while (*pCurrentK) {
238 if (PrfQueryProfileSize(hiniTo, inirec->app,
239 pCurrentK,
240 (PULONG) & ulSize) && ulSize) {
241 pData = xmalloc(ulSize, pszSrcFile, __LINE__);
242 if (pData) {
243 /* get data */
244 if (PrfQueryProfileData(hiniTo, inirec->app,
245 pCurrentK,
246 pData, (PULONG) & ulSize))
247 /* write data to new ini file */
248 PrfWriteProfileData(hiniFrom, ((*inirec->app2) ?
249 inirec->
250 app2 : inirec->app),
251 pCurrentK, pData, ulSize);
252 free(pData); /* free data */
253 }
254 }
255 while (*pCurrentK) /* next keyname */
256 pCurrentK++;
257 pCurrentK++;
258 }
259 }
260 free(pDataK); /* free keynames */
261 }
262 }
263 }
264 else {
265 if (inirec->confirm &&
266 PrfQueryProfileSize(hiniFrom, (PSZ) ((*inirec->app2) ?
267 inirec->app2 : inirec->
268 app),
269 ((*inirec->key2) ? inirec->
270 key2 : inirec->key), (PULONG) & ulSize)
271 && ulSize) {
272 if (saymsg
273 (MB_YESNOCANCEL, HWND_DESKTOP,
274 GetPString(IDS_CONFIRMTEXT),
275 GetPString(IDS_INIOVERAPPKEYNAMETEXT),
276 ((*inirec->app2) ? inirec->app2 : inirec->app),
277 ((*inirec->key2) ? inirec->key2 : inirec->key),
278 inirec->filename1) != MBID_YES)
279 goto Abort;
280 }
281 if (PrfQueryProfileSize(hiniTo, inirec->app,
282 inirec->key,
283 (PULONG) & ulSize) && ulSize) {
284 pData = xmalloc(ulSize, pszSrcFile, __LINE__);
285 if (pData) {
286 /* get data */
287 if (PrfQueryProfileData(hiniTo, inirec->app,
288 inirec->key,
289 pData, (PULONG) & ulSize))
290 /* write data to new ini file */
291 PrfWriteProfileData(hiniFrom, ((*inirec->app2) ?
292 inirec->app2 : inirec->app),
293 ((*inirec->key2) ?
294 inirec->key2 : inirec->key),
295 pData, ulSize);
296 free(pData); /* free data */
297 }
298 }
299 }
300 if (inirec->action == IDM_MOVE) {
301 if (inirec->confirm &&
302 saymsg(MB_YESNOCANCEL,
303 HWND_DESKTOP,
304 GetPString(IDS_CONFIRMTEXT),
305 GetPString(IDS_INIDELETEMOVEDTEXT),
306 inirec->filename2) != MBID_YES)
307 goto Abort;
308 PrfWriteProfileData(hiniTo,
309 inirec->app,
310 ((*inirec->key) ? inirec->key : NULL),
311 NULL, 0L);
312 }
313 }
314 }
315 Abort:
316 if (hiniFrom)
317 CloseProfile(hiniFrom, TRUE);
318 if (hiniTo && hiniTo != hiniFrom)
319 CloseProfile(hiniTo, FALSE);
320 WinDestroyMsgQueue(hmq2);
321 }
322 DecrThreadUsage();
323 WinTerminate(hab2);
324 }
325 PostMsg(inirec->hwndDlg, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0),
326 MPVOID);
327 if (inirec->action == IDM_MOVE && inirec->hwndSource &&
328 inirec->hwndSource != inirec->hwndDlg)
329 PostMsg(inirec->hwndSource, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0),
330 MPVOID);
331 free(inirec);
332# ifdef FORTIFY
333 Fortify_LeaveScope();
334# endif
335 }
336}
337
338static VOID CompareIniThread(VOID * args)
339{
340 INIREC *inirec = (INIREC *) args;
341 HAB hab2;
342 HMQ hmq2;
343
344 if (inirec) {
345 hab2 = WinInitialize(0);
346 if (hab2) {
347 hmq2 = WinCreateMsgQueue(hab2, 0);
348 if (hmq2) {
349 WinCancelShutdown(hmq2, TRUE);
350 IncrThreadUsage();
351
352 // fixme to do something?
353
354 WinDestroyMsgQueue(hmq2);
355 }
356 DecrThreadUsage();
357 WinTerminate(hab2);
358 }
359 free(inirec);
360 }
361}
362
363static VOID BackupIniThread(VOID * args)
364{
365 PPRFPROFILE prfp = (PPRFPROFILE)args;
366 HAB hab2;
367 HMQ hmq2;
368 HINI orig = NULLHANDLE;
369 HINI new;
370 PVOID pDataA, pDataK, pData;
371 PBYTE pCurrentA, pCurrentK;
372 ULONG ulSize;
373 PRFPROFILE cprfp;
374 CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
375
376 if (prfp) {
377# ifdef FORTIFY
378 Fortify_EnterScope();
379# endif
380 hab2 = WinInitialize(0);
381 if (hab2) {
382 hmq2 = WinCreateMsgQueue(hab2, 0);
383 if (hmq2) {
384 WinCancelShutdown(hmq2, TRUE);
385 IncrThreadUsage();
386 *userini = *sysini = 0;
387 memset(&cprfp, 0, sizeof(PRFPROFILE));
388 cprfp.cchUserName = CCHMAXPATH;
389 cprfp.cchSysName = CCHMAXPATH;
390 cprfp.pszUserName = (PSZ) userini;
391 cprfp.pszSysName = (PSZ) sysini;
392 if (PrfQueryProfile(hab2, &cprfp)) {
393 if (!stricmp(cprfp.pszUserName, prfp->pszUserName))
394 orig = HINI_USERPROFILE;
395 else if (!stricmp(cprfp.pszSysName, prfp->pszUserName))
396 orig = HINI_SYSTEMPROFILE;
397 }
398 if (orig == NULLHANDLE)
399 orig = PrfOpenProfile(hab2, prfp->pszUserName);
400 if (orig == NULLHANDLE) {
401 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
402 "PrfOpenProfile failed for %s", prfp->pszUserName);
403 }
404 else {
405 new = PrfOpenProfile(hab2, prfp->pszSysName);
406 if (new == NULLHANDLE) {
407 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
408 "PrfOpenProfile failed for %s", prfp->pszSysName);
409 }
410 else {
411 ulSize = 0;
412 if (PrfQueryProfileSize(orig, NULL, NULL, (PULONG) & ulSize)
413 && ulSize) {
414 pDataA = xmalloc(ulSize, pszSrcFile, __LINE__); /* allocate space for applnames */
415 if (pDataA) {
416 /* get applnames */
417 if (PrfQueryProfileString
418 (orig, NULL, NULL, "\0", pDataA, ulSize)) {
419 pCurrentA = pDataA;
420 /* step through applnames */
421 while (*pCurrentA) {
422 /* now keynames for this applname */
423 if (PrfQueryProfileSize(orig, (PSZ) pCurrentA, NULL,
424 (PULONG) & ulSize) && ulSize) {
425 pDataK = xmalloc(ulSize, pszSrcFile, __LINE__); /* allocate space for keynames */
426 if (pDataK) {
427 /* get keynames */
428 if (PrfQueryProfileString(orig, (PSZ) pCurrentA, NULL,
429 "\0", pDataK, ulSize)) {
430 pCurrentK = pDataK;
431 /* step through keynames */
432 while (*pCurrentK) {
433 if (PrfQueryProfileSize(orig, pCurrentA,
434 pCurrentK,
435 (PULONG) & ulSize) &&
436 ulSize) {
437 pData = xmalloc(ulSize, pszSrcFile, __LINE__);
438 if (pData) {
439 /* get data */
440 if (PrfQueryProfileData(orig, pCurrentA,
441 pCurrentK,
442 pData,
443 (PULONG) & ulSize))
444 /* write data to new ini file */
445 PrfWriteProfileData(new, pCurrentA,
446 pCurrentK, pData,
447 ulSize);
448 free(pData); /* free data */
449 }
450 }
451 while (*pCurrentK) /* next keyname */
452 pCurrentK++;
453 pCurrentK++;
454 }
455 }
456 free(pDataK); /* free keynames */
457 }
458 }
459 while (*pCurrentA) /* next applname */
460 pCurrentA++;
461 pCurrentA++;
462 }
463 }
464 free(pDataA); /* free applnames */
465 }
466 }
467 CloseProfile(new, FALSE);
468 }
469 CloseProfile(orig, TRUE);
470 }
471 WinDestroyMsgQueue(hmq2);
472 }
473 DecrThreadUsage();
474 WinTerminate(hab2);
475 }
476 xfree(prfp->pszUserName, pszSrcFile, __LINE__);
477 xfree(prfp->pszSysName, pszSrcFile, __LINE__);
478 free(prfp);
479# ifdef FORTIFY
480 Fortify_LeaveScope();
481# endif
482 }
483}
484
485static VOID EnumAppNames(HWND hwndList, HINI hini)
486{
487 PVOID pData;
488 PBYTE pCurrent;
489 ULONG ulSize = 0;
490
491 WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
492 if (!PrfQueryProfileSize(hini, NULL, NULL, (PULONG) & ulSize))
493 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
494 "PrfQueryProfileSize");
495 else if (!ulSize)
496 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
497 else {
498 pData = xmalloc(ulSize, pszSrcFile, __LINE__);
499 if (pData) {
500 if (PrfQueryProfileString(hini, NULL, NULL, "\0", pData, ulSize)) {
501 pCurrent = pData;
502 WinEnableWindowUpdate(hwndList, FALSE);
503 while (*pCurrent) {
504 WinSendMsg(hwndList, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING),
505 MPFROMP(pCurrent));
506 while (*pCurrent)
507 pCurrent++;
508 pCurrent++;
509 }
510 WinSendMsg(hwndList, LM_SELECTITEM, MPFROMSHORT(0),
511 MPFROMSHORT(TRUE));
512 WinEnableWindowUpdate(hwndList, TRUE);
513 }
514 free(pData);
515 }
516 }
517}
518
519static CHAR *GetKeyData(HWND hwndList, HINI hini, PSZ pAppName,
520 PSZ pKeyName, PULONG datalen)
521{
522 ULONG ulKeySize = 0L;
523 PVOID pKeyData = NULL;
524
525 *datalen = 0L;
526 if (!PrfQueryProfileSize(hini, pAppName, pKeyName, (PULONG) & ulKeySize))
527 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
528 "PrfQueryProfileSize");
529 else {
530 pKeyData = xmalloc(ulKeySize + 1L, pszSrcFile, __LINE__);
531 if (pKeyData) {
532 if (!PrfQueryProfileData
533 (hini, pAppName, pKeyName, pKeyData, (PULONG) & ulKeySize))
534 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
535 "PrfQueryProfileData");
536 else {
537 HexDump(hwndList, pKeyData, ulKeySize);
538 {
539 CHAR s[81];
540
541 sprintf(s,
542 GetPString(IDS_INIBYTESTEXT),
543 ulKeySize, &"s"[ulKeySize == 1]);
544 WinSetDlgItemText(WinQueryWindow(hwndList, QW_PARENT),
545 INI_NUMDATA, s);
546 }
547 *datalen = ulKeySize;
548 return (CHAR *)pKeyData;
549 }
550 }
551 }
552 return NULL;
553}
554
555static BOOL EnumKeyNames(HWND hwndList, HINI hini, PSZ pAppName)
556{
557 PVOID pData;
558 PBYTE pCurrent;
559 ULONG ulSize = 0;
560
561 WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
562 if (!PrfQueryProfileSize(hini, pAppName, NULL, (PULONG) & ulSize))
563 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
564 "PrfQueryProfileSize");
565 else {
566 if (!ulSize)
567 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
568 pData = xmalloc(ulSize + 1L, pszSrcFile, __LINE__);
569 if (pData) {
570 if (!PrfQueryProfileString(hini, pAppName, NULL, "\0", pData, ulSize)) {
571 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
572 "PrfQueryProfileString");
573 free(pData);
574 }
575 else {
576 pCurrent = pData;
577 WinEnableWindowUpdate(hwndList, FALSE);
578 while (*pCurrent) {
579 WinSendMsg(hwndList, LM_INSERTITEM, MPFROMSHORT(LIT_SORTASCENDING),
580 MPFROMP(pCurrent));
581 while (*pCurrent)
582 pCurrent++;
583 pCurrent++;
584 }
585 WinSendMsg(hwndList, LM_SELECTITEM, MPFROMSHORT(0),
586 MPFROMSHORT(TRUE));
587 WinEnableWindowUpdate(hwndList, TRUE);
588 free(pData);
589 return TRUE;
590 }
591 }
592 }
593 return FALSE;
594}
595
596#define hwndMLE WinWindowFromID(hwnd,IAF_MLE)
597
598MRESULT EXPENTRY FilterIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
599{
600 INIDATA *inidata;
601 static CHAR lasttext[8192] = "";
602
603 switch (msg) {
604 case WM_INITDLG:
605 WinSetWindowPtr(hwnd, QWL_USER, mp2);
606 inidata = (INIDATA *) mp2;
607 WinSendDlgItemMsg(hwnd, IAF_SAVENAME, EM_SETTEXTLIMIT,
608 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
609 MLEsetformat(hwndMLE, MLFIE_NOTRANS);
610 MLEsetlimit(hwndMLE, 8192);
611 WinSetWindowText(hwndMLE, lasttext);
612 {
613 FILEFINDBUF3 ffb;
614 ULONG nm;
615 HDIR hdir;
616
617 hdir = HDIR_CREATE;
618 nm = 1;
619 DosError(FERR_DISABLEHARDERR);
620 if (!DosFindFirst("*.IST",
621 &hdir,
622 FILE_NORMAL | FILE_ARCHIVED,
623 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) {
624 do {
625 priority_bumped();
626 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_INSERTITEM,
627 MPFROMSHORT(LIT_SORTASCENDING),
628 MPFROMP(ffb.achName));
629 nm = 1;
630 } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm));
631 DosFindClose(hdir);
632 priority_bumped();
633 }
634 }
635 break;
636
637 case WM_ADJUSTWINDOWPOS:
638 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
639 break;
640
641 case UM_SETDIR:
642 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_HELP), (HPS) 0, FALSE,
643 TRUE);
644 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_SAVENAME), (HPS) 0, FALSE,
645 FALSE);
646 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_LISTBOX), (HPS) 0, FALSE,
647 FALSE);
648 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_MLE), (HPS) 0, FALSE,
649 FALSE);
650 return 0;
651
652 case WM_CONTROL:
653 switch (SHORT1FROMMP(mp1)) {
654 case IAF_SAVENAME:
655 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
656 WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
657 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
658 WinSetDlgItemText(hwnd,
659 IAF_HELP, GetPString(IDS_MASKLISTNAMEHELPTEXT));
660 break;
661
662 case IAF_LISTBOX:
663 if (SHORT2FROMMP(mp1) == LN_KILLFOCUS)
664 WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
665 if (SHORT2FROMMP(mp1) == LN_SETFOCUS)
666 WinSetDlgItemText(hwnd,
667 IAF_HELP, GetPString(IDS_MASKLISTFILESHELPTEXT));
668 else if (SHORT2FROMMP(mp1) == LN_ENTER)
669 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IAF_LOAD, 0), MPVOID);
670 break;
671
672 case IAF_MLE:
673 if (SHORT2FROMMP(mp1) == MLN_KILLFOCUS)
674 WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
675 if (SHORT2FROMMP(mp1) == MLN_SETFOCUS)
676 WinSetDlgItemText(hwnd,
677 IAF_HELP, GetPString(IDS_MASKLISTMASKSHELPTEXT));
678 break;
679 }
680 return 0;
681
682 case WM_COMMAND:
683 switch (SHORT1FROMMP(mp1)) {
684 case DID_OK:
685 inidata = INSTDATA(hwnd);
686 if (!inidata)
687 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
688 else {
689 CHAR s[8193], app[1024];
690 register CHAR *p;
691 SHORT sSelect, numitems;
692 BOOL match;
693
694 *s = 0;
695 WinQueryWindowText(hwndMLE, 8192, s);
696 if (!*s) {
697 DosBeep(250, 100);
698 break;
699 }
700 else {
701 strcpy(lasttext, s);
702 p = s;
703 while (*p) {
704 if (*p == '\r') {
705 memmove(p, p + 1, strlen(p));
706 continue;
707 }
708 if (*p == '\n')
709 *p = 0;
710 p++;
711 }
712 p++;
713 *p = 0;
714 }
715 numitems = (SHORT) WinSendMsg(inidata->hwndApp,
716 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
717 if (!numitems) {
718 DosBeep(250, 100);
719 break;
720 }
721 else {
722 WinSetPointer(HWND_DESKTOP, hptrBusy);
723 WinSetDlgItemText(hwnd, IAF_HELP, GetPString(IDS_FILTERINGTEXT));
724 sSelect = 0;
725 while (numitems) {
726 *app = 0;
727 WinSendMsg(inidata->hwndApp,
728 LM_QUERYITEMTEXT,
729 MPFROM2SHORT(sSelect, 1024), MPFROMP(app));
730 match = FALSE;
731 if (*app) {
732 p = s;
733 while (*p) {
734 if (*p != '/') {
735 if (wildcard(app, p, TRUE))
736 match = TRUE;
737 }
738 else if (wildcard(app, p + 1, TRUE)) {
739 match = FALSE;
740 break;
741 }
742 while (*p)
743 p++;
744 p++;
745 }
746 }
747 if (!match)
748 WinSendMsg(inidata->hwndApp, LM_DELETEITEM,
749 MPFROMSHORT(sSelect), MPVOID);
750 else
751 sSelect++;
752 numitems--;
753 }
754 WinSetPointer(HWND_DESKTOP, hptrArrow);
755 }
756 }
757 WinDismissDlg(hwnd, 1);
758 break;
759
760 case IAF_LOAD:
761 {
762 CHAR s[8193];
763 FILE *fp;
764 INT len;
765 SHORT sSelect;
766
767 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
768 LM_QUERYSELECTION,
769 MPFROM2SHORT(LIT_FIRST, 0),
770 MPVOID);
771 if (sSelect < 0)
772 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
773 else {
774 *s = 0;
775 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
776 MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
777 bstrip(s);
778 if (*s) {
779 fp = _fsopen(s, "r", SH_DENYWR);
780 if (fp) {
781 len = fread(s, 1, 8192, fp);
782 s[len] = 0;
783 WinSetWindowText(hwndMLE, s);
784 fclose(fp);
785 }
786 }
787 }
788 }
789 break;
790
791 case IAF_SAVE:
792 {
793 CHAR s[8193], filename[CCHMAXPATH], *p;
794 FILE *fp;
795
796 *filename = 0;
797 WinQueryDlgItemText(hwnd, IAF_SAVENAME, CCHMAXPATH, filename);
798 bstrip(filename);
799 if (*filename) {
800 p = strchr(filename, '.');
801 if (p) {
802 strcpy(p, ".IST");
803 WinSetDlgItemText(hwnd, IAF_SAVENAME, filename);
804 }
805 *s = 0;
806 WinQueryWindowText(hwndMLE, 8192, s);
807 if (!*s)
808 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
809 else {
810 fp = xfopen(filename, "w", pszSrcFile, __LINE__);
811 if (fp) {
812 fwrite(s, 1, strlen(s), fp);
813 fclose(fp);
814 WinSendDlgItemMsg(hwnd,
815 IAF_LISTBOX,
816 LM_INSERTITEM,
817 MPFROMSHORT(LIT_SORTASCENDING),
818 MPFROMP(filename));
819 }
820 }
821 }
822 }
823 break;
824
825 case IAF_DELETE:
826 {
827 CHAR s[CCHMAXPATH];
828 SHORT sSelect;
829
830 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
831 LM_QUERYSELECTION,
832 MPFROM2SHORT(LIT_FIRST, 0),
833 MPVOID);
834 if (sSelect >= 0) {
835 *s = 0;
836 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
837 MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
838 bstrip(s);
839 if (*s) {
840 unlinkf(s);
841 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_DELETEITEM,
842 MPFROMSHORT(sSelect), MPVOID);
843 }
844 }
845 }
846 break;
847
848 case DID_CANCEL:
849 WinDismissDlg(hwnd, 0);
850 break;
851
852 case IDM_HELP:
853 if (hwndHelp)
854 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
855 MPFROM2SHORT(HELP_FILTERINI, 0),
856 MPFROMSHORT(HM_RESOURCEID));
857 break;
858 }
859 return 0;
860 }
861 return WinDefDlgProc(hwnd, msg, mp1, mp2);
862}
863
864MRESULT EXPENTRY IntraIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
865{
866 INIREC *inirec;
867
868 switch (msg) {
869 case WM_INITDLG:
870 WinSetWindowPtr(hwnd, QWL_USER, mp2);
871 inirec = (INIREC *) mp2;
872 WinSendDlgItemMsg(hwnd,
873 INII_NEWAPP,
874 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
875 WinSendDlgItemMsg(hwnd,
876 INII_NEWKEY,
877 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
878 {
879 CHAR s[CCHMAXPATH + 34];
880
881 sprintf(s, GetPString(IDS_INIWASTEXT), inirec->app);
882 WinSetDlgItemText(hwnd, INII_OLDAPP, s);
883 }
884 if (!*inirec->key) {
885 WinEnableWindow(WinWindowFromID(hwnd, INII_NEWKEY), FALSE);
886 WinEnableWindow(WinWindowFromID(hwnd, INII_NEWKEYHDR), FALSE);
887 switch (inirec->action) {
888 case IDM_MOVE:
889 WinSetWindowText(hwnd, GetPString(IDS_INIRENAMEAPPTITLETEXT));
890 break;
891 case IDM_COPY:
892 WinSetWindowText(hwnd, GetPString(IDS_INICOPYAPPTITLETEXT));
893 break;
894 }
895 }
896 else {
897 {
898 CHAR s[CCHMAXPATH + 34];
899
900 sprintf(s, GetPString(IDS_INIWASTEXT), inirec->key);
901 WinSetDlgItemText(hwnd, INII_OLDKEY, s);
902 }
903 WinSetDlgItemText(hwnd, INII_NEWAPP, inirec->app);
904 WinSendDlgItemMsg(hwnd,
905 INII_NEWAPP,
906 EM_SETSEL, MPFROM2SHORT(0, CCHMAXPATH), MPVOID);
907 switch (inirec->action) {
908 case IDM_MOVE:
909 WinSetWindowText(hwnd, GetPString(IDS_INIRENAMEKEYTITLETEXT));
910 break;
911 case IDM_COPY:
912 WinSetWindowText(hwnd, GetPString(IDS_INICOPYKEYTITLETEXT));
913 break;
914 }
915 }
916 break;
917
918 case WM_COMMAND:
919 switch (SHORT1FROMMP(mp1)) {
920 case DID_OK:
921 inirec = (INIREC *) WinQueryWindowPtr(hwnd, QWL_USER);
922 if (inirec) {
923 WinQueryDlgItemText(hwnd, INII_NEWAPP, CCHMAXPATH, inirec->app2);
924 bstrip(inirec->app2);
925 if (!*inirec->app2) {
926 DosBeep(50, 100);
927 break;
928 }
929 if (*inirec->key) {
930 WinQueryDlgItemText(hwnd, INII_NEWKEY, CCHMAXPATH, inirec->key2);
931 bstrip(inirec->key2);
932 if (!*inirec->key2) {
933 DosBeep(50, 100);
934 break;
935 }
936 }
937 WinDismissDlg(hwnd, 1);
938 }
939 break;
940
941 case DID_CANCEL:
942 WinDismissDlg(hwnd, 0);
943 break;
944
945 case IDM_HELP:
946 if (hwndHelp)
947 WinSendMsg(hwndHelp,
948 HM_DISPLAY_HELP,
949 MPFROM2SHORT(HELP_INTRAINI, 0),
950 MPFROMSHORT(HM_RESOURCEID));
951 break;
952 }
953 return 0;
954 }
955 return WinDefDlgProc(hwnd, msg, mp1, mp2);
956}
957
958MRESULT EXPENTRY ChangeIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
959{
960 switch (msg) {
961 case WM_INITDLG:
962 WinSetWindowPtr(hwnd, QWL_USER, mp2);
963 WinSendDlgItemMsg(hwnd, INIR_USERPROFILE, EM_SETTEXTLIMIT,
964 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
965 WinSendDlgItemMsg(hwnd, INIR_SYSTEMPROFILE, EM_SETTEXTLIMIT,
966 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
967 break;
968
969 case WM_COMMAND:
970 switch (SHORT1FROMMP(mp1)) {
971 case INIR_FIND:
972 {
973 CHAR filename[CCHMAXPATH], *p, *ininame;
974 USHORT id = 0;
975 HWND hwndFocus;
976
977 hwndFocus = WinQueryFocus(HWND_DESKTOP);
978 if (hwndFocus)
979 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
980 if (id != INIR_SYSTEMPROFILE)
981 id = INIR_USERPROFILE;
982 ininame = INSTDATA(hwnd);
983 if (ininame && *ininame) {
984 strcpy(filename, ininame);
985 p = filename;
986 while (*p) {
987 if (*p == '/')
988 *p = '\\';
989 p++;
990 }
991 p = strrchr(filename, '\\');
992 if (p) {
993 p++;
994 *p = 0;
995 }
996 else
997 *filename = 0;
998 }
999 else
1000 *filename = 0;
1001 strcat(filename, "*.INI");
1002 if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
1003 WinSetDlgItemText(hwnd, id, filename);
1004 }
1005 break;
1006
1007 case DID_OK:
1008 {
1009 HINI testini;
1010 PRFPROFILE prfp;
1011 CHAR sysini[CCHMAXPATH];
1012 CHAR userini[CCHMAXPATH];
1013
1014 WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
1015 WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
1016 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
1017 if (testini == NULLHANDLE) {
1018 saymsg(MB_CANCEL,
1019 hwnd,
1020 GetPString(IDS_ERRORTEXT),
1021 GetPString(IDS_INICANTOPENUSERTEXT), userini);
1022 break;
1023 }
1024 CloseProfile(testini, FALSE);
1025 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
1026 if (testini == NULLHANDLE) {
1027 saymsg(MB_CANCEL,
1028 hwnd,
1029 GetPString(IDS_ERRORTEXT),
1030 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
1031 break;
1032 }
1033 CloseProfile(testini, FALSE);
1034 memset(&prfp, 0, sizeof(PRFPROFILE));
1035 prfp.cchUserName = strlen(sysini);
1036 prfp.cchSysName = strlen(userini);
1037 prfp.pszUserName = (PSZ) userini;
1038 prfp.pszSysName = (PSZ) sysini;
1039 if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
1040 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1041 GetPString(IDS_INIPRFRESETFAILEDTEXT));
1042 }
1043 else
1044 WinDismissDlg(hwnd, 1);
1045 }
1046 break;
1047
1048 case DID_CANCEL:
1049 WinDismissDlg(hwnd, 0);
1050 break;
1051
1052 case IDM_HELP:
1053 if (hwndHelp)
1054 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1055 MPFROM2SHORT(HELP_CHANGEINI, 0),
1056 MPFROMSHORT(HM_RESOURCEID));
1057 break;
1058 }
1059 return 0;
1060 }
1061 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1062}
1063
1064MRESULT EXPENTRY SwapIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1065{
1066 switch (msg) {
1067 case WM_INITDLG:
1068 WinSetWindowPtr(hwnd, QWL_USER, mp2);
1069 WinSendDlgItemMsg(hwnd,
1070 INIR_USERPROFILE,
1071 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1072 WinSendDlgItemMsg(hwnd,
1073 INIR_SYSTEMPROFILE,
1074 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1075 WinSetWindowText(hwnd, GetPString(IDS_INISWAPOS2INISTITLETEXT));
1076 break;
1077
1078 case WM_COMMAND:
1079 switch (SHORT1FROMMP(mp1)) {
1080 case INIR_FIND:
1081 {
1082 CHAR filename[CCHMAXPATH], *p, *ininame;
1083 USHORT id = 0;
1084 HWND hwndFocus;
1085
1086 hwndFocus = WinQueryFocus(HWND_DESKTOP);
1087 if (hwndFocus)
1088 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
1089 if (id != INIR_SYSTEMPROFILE)
1090 id = INIR_USERPROFILE;
1091 ininame = INSTDATA(hwnd);
1092 if (ininame && *ininame) {
1093 strcpy(filename, ininame);
1094 p = filename;
1095 while (*p) {
1096 if (*p == '/')
1097 *p = '\\';
1098 p++;
1099 }
1100 p = strrchr(filename, '\\');
1101 if (p) {
1102 p++;
1103 *p = 0;
1104 }
1105 else
1106 *filename = 0;
1107 }
1108 else
1109 *filename = 0;
1110 strcat(filename, "*.INI");
1111 if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
1112 WinSetDlgItemText(hwnd, id, filename);
1113 }
1114 break;
1115
1116 case DID_OK:
1117 {
1118 HINI testini;
1119 PRFPROFILE prfp;
1120 CHAR sysini[CCHMAXPATH];
1121 CHAR userini[CCHMAXPATH];
1122 CHAR oldsysini[CCHMAXPATH];
1123 CHAR olduserini[CCHMAXPATH];
1124 CHAR tempsysini[CCHMAXPATH];
1125 CHAR tempuserini[CCHMAXPATH];
1126 CHAR tempsysini2[CCHMAXPATH];
1127 CHAR tempuserini2[CCHMAXPATH];
1128 CHAR *p;
1129 APIRET rc;
1130
1131 *tempuserini = 0;
1132 *tempsysini = 0;
1133 *tempuserini2 = 0;
1134 *tempsysini2 = 0;
1135 memset(&prfp, 0, sizeof(PRFPROFILE));
1136 prfp.cchUserName = CCHMAXPATH;
1137 prfp.cchSysName = CCHMAXPATH;
1138 prfp.pszUserName = (PSZ) olduserini;
1139 prfp.pszSysName = (PSZ) oldsysini;
1140 if (!PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
1141 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1142 GetPString(IDS_INIQUERYPRFFAILEDTEXT));
1143 break;
1144 }
1145 WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
1146 WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
1147 MakeFullName(userini);
1148 MakeFullName(sysini);
1149 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
1150 if (testini == NULLHANDLE) {
1151 saymsg(MB_CANCEL,
1152 hwnd,
1153 GetPString(IDS_ERRORTEXT),
1154 GetPString(IDS_INICANTOPENUSERTEXT), userini);
1155 break;
1156 }
1157 CloseProfile(testini, FALSE);
1158 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
1159 if (testini == NULLHANDLE) {
1160 saymsg(MB_CANCEL,
1161 hwnd,
1162 GetPString(IDS_ERRORTEXT),
1163 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
1164 break;
1165 }
1166 CloseProfile(testini, FALSE);
1167 /* make copies of new inis */
1168 *tempuserini = 0;
1169 *tempsysini = 0;
1170 BldFullPathName(tempuserini, pTmpDir ? pTmpDir : pFM2SaveDirectory, "TEMPUSER.INI");
1171 rc = DosCopy(userini, tempuserini, DCPY_EXISTING);
1172 if (rc) {
1173 Dos_Error(MB_CANCEL,
1174 rc,
1175 hwnd,
1176 __FILE__,
1177 __LINE__,
1178 GetPString(IDS_COMPCOPYFAILEDTEXT), userini, tempuserini);
1179 break;
1180 }
1181 BldFullPathName(tempsysini, pTmpDir ? pTmpDir : pFM2SaveDirectory, "TEMPSYS.INI");
1182 rc = DosCopy(sysini, tempsysini, DCPY_EXISTING);
1183 if (rc) {
1184 Dos_Error(MB_CANCEL,
1185 rc,
1186 hwnd,
1187 __FILE__,
1188 __LINE__,
1189 GetPString(IDS_COMPCOPYFAILEDTEXT), sysini, tempsysini);
1190 break;
1191 }
1192 memset(&prfp, 0, sizeof(PRFPROFILE));
1193 prfp.cchUserName = strlen(tempuserini);
1194 prfp.cchSysName = strlen(tempsysini);
1195 prfp.pszUserName = (PSZ) tempuserini;
1196 prfp.pszSysName = (PSZ) tempsysini;
1197 if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
1198 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1199 GetPString(IDS_INIPRFRESETFAILEDTEXT));
1200 }
1201 else {
1202 /* backup old inis */
1203 strcpy(tempuserini2, olduserini);
1204 p = strrchr(tempuserini2, '\\');
1205 if (!p)
1206 *tempuserini2 = 0;
1207 else {
1208 p++;
1209 *p = 0;
1210 }
1211 strcat(tempuserini2, "OS2INI.BAK");
1212 rc = DosCopy(olduserini, tempuserini2, DCPY_EXISTING);
1213 if (rc) {
1214 Dos_Error(MB_CANCEL,
1215 rc,
1216 hwnd,
1217 __FILE__,
1218 __LINE__,
1219 GetPString(IDS_COMPCOPYFAILEDTEXT),
1220 olduserini, tempuserini2);
1221 WinDismissDlg(hwnd, 1);
1222 break;
1223 }
1224 strcpy(tempsysini2, oldsysini);
1225 p = strrchr(tempsysini2, '\\');
1226 if (!p)
1227 *tempsysini2 = 0;
1228 else {
1229 p++;
1230 *p = 0;
1231 }
1232 strcat(tempsysini2, "OS2SYINI.BAK");
1233 rc = DosCopy(oldsysini, tempsysini2, DCPY_EXISTING);
1234 if (rc) {
1235 Dos_Error(MB_CANCEL,
1236 rc,
1237 hwnd,
1238 __FILE__,
1239 __LINE__,
1240 GetPString(IDS_COMPCOPYFAILEDTEXT),
1241 oldsysini, tempsysini2);
1242 WinDismissDlg(hwnd, 1);
1243 break;
1244 }
1245 /* copy new inis to old ini names */
1246 rc = DosCopy(userini, olduserini, DCPY_EXISTING);
1247 if (rc) {
1248 Dos_Error(MB_CANCEL,
1249 rc,
1250 hwnd,
1251 __FILE__,
1252 __LINE__,
1253 GetPString(IDS_COMPCOPYFAILEDTEXT),
1254 userini, olduserini);
1255 WinDismissDlg(hwnd, 1);
1256 break;
1257 }
1258 rc = DosCopy(sysini, oldsysini, DCPY_EXISTING);
1259 if (rc) {
1260 Dos_Error(MB_CANCEL,
1261 rc,
1262 hwnd,
1263 __FILE__,
1264 __LINE__,
1265 GetPString(IDS_COMPCOPYFAILEDTEXT),
1266 userini, olduserini);
1267 WinDismissDlg(hwnd, 1);
1268 break;
1269 }
1270 /* replace temp inis with new permanent inis */
1271 memset(&prfp, 0, sizeof(PRFPROFILE));
1272 prfp.cchUserName = strlen(oldsysini);
1273 prfp.cchSysName = strlen(olduserini);
1274 prfp.pszUserName = (PSZ) olduserini;
1275 prfp.pszSysName = (PSZ) oldsysini;
1276 if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
1277 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1278 GetPString(IDS_INIPRFRESETFAILEDTEXT));
1279 }
1280 else {
1281 Notify(GetPString(IDS_SUCCESSTEXT));
1282 unlinkf(tempuserini);
1283 unlinkf(tempsysini);
1284 }
1285 WinDismissDlg(hwnd, 1);
1286 }
1287 }
1288 break;
1289
1290 case DID_CANCEL:
1291 WinDismissDlg(hwnd, 0);
1292 break;
1293
1294 case IDM_HELP:
1295 if (hwndHelp)
1296 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1297 MPFROM2SHORT(HELP_SWAPINI, 0), MPFROMSHORT(HM_RESOURCEID));
1298 break;
1299 }
1300 return 0;
1301 }
1302 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1303}
1304
1305MRESULT EXPENTRY AddIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1306{
1307 INIDATA *inidata = INSTDATA(hwnd);
1308 size_t l;
1309
1310 switch (msg) {
1311 case WM_INITDLG:
1312 if (!mp2) {
1313 WinDismissDlg(hwnd, 0);
1314 break;
1315 }
1316 inidata = (INIDATA *) mp2;
1317 if (inidata->edit)
1318 WinSetWindowText(hwnd, GetPString(IDS_INIEDITINITITLETEXT));
1319 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) mp2);
1320 WinSendDlgItemMsg(hwnd,
1321 IAD_APPNAME,
1322 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1323 WinSendDlgItemMsg(hwnd,
1324 IAD_KEYNAME,
1325 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1326 WinSendDlgItemMsg(hwnd,
1327 IAD_DATA,
1328 EM_SETTEXTLIMIT, MPFROM2SHORT(32767, 0), MPVOID);
1329 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1330 WinSetDlgItemText(hwnd, IAD_APPNAME, inidata->applname);
1331 if (inidata->edit) {
1332 WinSetDlgItemText(hwnd, IAD_KEYNAME, inidata->keyname);
1333 if (inidata->data && inidata->datalen) {
1334
1335 CHAR *p;
1336
1337 inidata->isbinary = FALSE;
1338 p = inidata->data;
1339 while ((p - inidata->data) < inidata->datalen - 1) {
1340 if (*p < ' ' || !isprint(*p)) {
1341 inidata->isbinary = TRUE;
1342 break;
1343 }
1344 p++;
1345 }
1346 if (inidata->isbinary) {
1347 inidata->isbinary = TRUE;
1348 WinCheckButton(hwnd, IAD_ISBINARY, TRUE);
1349 if (saymsg(MB_ENTERCANCEL | MB_ICONEXCLAMATION,
1350 hwnd,
1351 GetPString(IDS_WARNINGTEXT),
1352 GetPString(IDS_INIBINARYDATASKIPTEXT)) == MBID_CANCEL)
1353 WinDismissDlg(hwnd, 0);
1354 l = inidata->datalen * 4 + 1;
1355 p = xmallocz(l, pszSrcFile, __LINE__);
1356 if (p) {
1357 fixup(inidata->data, p, l, inidata->datalen);
1358 WinSetDlgItemText(hwnd, IAD_DATA, p);
1359 free(p);
1360 }
1361 }
1362 else
1363 WinSetDlgItemText(hwnd, IAD_DATA, inidata->data);
1364 }
1365 PostMsg(hwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
1366 }
1367 else
1368 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
1369 {
1370 CHAR s[32];
1371
1372 *s = 0;
1373 WinQueryDlgItemText(hwnd, IAD_DATA, 32, s);
1374 if (*s)
1375 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), TRUE);
1376 }
1377 WinSendDlgItemMsg(hwnd, IAD_APPNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
1378 WinSendDlgItemMsg(hwnd, IAD_KEYNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
1379 WinSendDlgItemMsg(hwnd, IAD_DATA, EM_QUERYCHANGED, MPVOID, MPVOID);
1380 break;
1381
1382 case UM_SETDIR:
1383 if (mp1)
1384 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_DATA));
1385 else
1386 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_KEYNAME));
1387 return 0;
1388
1389 case UM_SETUP:
1390 saymsg(MB_ENTER | MB_ICONASTERISK,
1391 hwnd,
1392 GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIAPPKEYEXISTSTEXT));
1393 return 0;
1394
1395 case WM_CONTROL:
1396 switch (SHORT2FROMMP(mp1)) {
1397 case EN_KILLFOCUS:
1398 inidata = INSTDATA(hwnd);
1399 if (!inidata)
1400 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
1401 else {
1402 CHAR s[CCHMAXPATH], applname[CCHMAXPATH];
1403 BOOL appchanged = FALSE, keychanged = FALSE;
1404
1405 *applname = 0;
1406 WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
1407 bstrip(applname);
1408 if (*applname) {
1409 *s = 0;
1410 WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, s);
1411 bstrip(s);
1412 if (*s) {
1413 appchanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_APPNAME,
1414 EM_QUERYCHANGED,
1415 MPVOID, MPVOID);
1416 keychanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_KEYNAME,
1417 EM_QUERYCHANGED,
1418 MPVOID, MPVOID);
1419 if (appchanged || keychanged) {
1420
1421 ULONG size = 0L;
1422
1423 if (PrfQueryProfileSize(inidata->hini, applname, s, &size))
1424 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1425 }
1426 *s = 0;
1427 WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, s);
1428 bstrip(s);
1429 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), (*s != 0));
1430 }
1431 else
1432 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1433 }
1434 else
1435 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1436 }
1437 break;
1438 }
1439 return 0;
1440
1441 case WM_COMMAND:
1442 switch (SHORT1FROMMP(mp1)) {
1443 case DID_OK:
1444 {
1445 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH], data[CCHMAXPATH];
1446 INT len;
1447
1448 inidata = INSTDATA(hwnd);
1449 if (!inidata) {
1450 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
1451 break;
1452 }
1453 inidata->isbinary = WinQueryButtonCheckstate(hwnd, IAD_ISBINARY);
1454 *applname = 0;
1455 WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
1456 bstrip(applname);
1457 if (*applname) {
1458 *keyname = 0;
1459 WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, keyname);
1460 bstrip(keyname);
1461 if (*keyname) {
1462 *data = 0;
1463 WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, data);
1464 if (*data) {
1465 if (inidata->isbinary)
1466 len = literal(data);
1467 else
1468 len = strlen(data) + 1;
1469 PrfWriteProfileData(inidata->hini, applname, keyname, data,
1470 (ULONG) len);
1471 WinSendMsg(inidata->hwndIni, UM_RESCAN,
1472 MPFROMP(applname), MPFROMP(keyname));
1473 WinDismissDlg(hwnd, 1);
1474 }
1475 }
1476 }
1477 }
1478 break;
1479
1480 case DID_CANCEL:
1481 WinDismissDlg(hwnd, 0);
1482 break;
1483
1484 case IDM_HELP:
1485 if (hwndHelp)
1486 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1487 MPFROM2SHORT(HELP_INIADD, 0), MPFROMSHORT(HM_RESOURCEID));
1488 break;
1489 }
1490 return 0;
1491 }
1492 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1493}
1494
1495static ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
1496 FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
1497
1498HWND StartIniEditor(HWND hwnd, CHAR * fname, INT flags)
1499{
1500 /*
1501 * create an ini editor window
1502 * bitmapped flags:
1503 * 2 = don't position window for non-desktop client
1504 * 4 = don't kill proc when closed
1505 */
1506
1507 HWND hwndFrame, hwndClient;
1508 HINI hINI;
1509 HAB useHab = (HAB) 0;
1510 CHAR *filename = NULL;
1511
1512 if (fExternalINIs || strcmp(realappname, FM3Str))
1513 hwnd = HWND_DESKTOP;
1514 if (hwnd != HWND_DESKTOP)
1515 useHab = WinQueryAnchorBlock(hwnd);
1516 if (fname && *fname) {
1517 filename = xstrdup(fname, pszSrcFile, __LINE__);
1518 if (!filename)
1519 return (HWND) 0;
1520 hINI = PrfOpenProfile(useHab, filename);
1521 if (hINI == NULLHANDLE) {
1522 free(filename);
1523 return (HWND) 0;
1524 }
1525 else
1526 CloseProfile(hINI, FALSE);
1527 }
1528
1529 if (ParentIsDesktop(hwnd, hwnd))
1530 flFrameFlags |= FCF_TASKLIST;
1531 hwndFrame = WinCreateStdWindow(hwnd,
1532 0,
1533 &flFrameFlags,
1534 WC_INIEDITOR,
1535 NullStr,
1536 fwsAnimate,
1537 FM3ModHandle, INI_FRAME, &hwndClient);
1538 if (hwndFrame) {
1539 WinSetWindowUShort(hwndFrame, QWS_ID, INI_FRAME);
1540 if (!ParentIsDesktop(hwndFrame, hwnd) && !(flags & 2)) {
1541
1542 SWP swp;
1543
1544 FillClient(hwnd, &swp, NULL, FALSE);
1545 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1546 SWP_SIZE | SWP_MOVE);
1547 }
1548 else if (ParentIsDesktop(hwndFrame, hwnd)) {
1549 if (!WinRestoreWindowPos(FM2Str, "INIWindowPos", hwndFrame)) {
1550
1551 ULONG fl = SWP_MOVE | SWP_SIZE;
1552 SWP swp;
1553
1554 WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame), 0L, &swp);
1555 if (swp.fl & (SWP_MINIMIZE | SWP_HIDE))
1556 fl = swp.fl;
1557 else if (swp.fl & SWP_ACTIVATE)
1558 fl |= SWP_ACTIVATE;
1559 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1560 fl);
1561 }
1562 }
1563 PostMsg(hwndClient, UM_SELECT, MPVOID, MPVOID);
1564 PostMsg(hwndClient, UM_ACTION, MPVOID, MPVOID);
1565 if (!PostMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1566 filename : NULL)), MPVOID))
1567 WinSendMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1568 filename : NULL)), MPVOID);
1569 if (flags & 4)
1570 PostMsg(hwndClient, UM_INITIALSIZE, MPVOID, MPVOID);
1571 }
1572 else
1573 free(filename);
1574 return hwndFrame;
1575}
1576
1577MRESULT EXPENTRY IniLBSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1578{
1579 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1580 static HWND hwndPopup = (HWND) 0;
1581
1582 switch (msg) {
1583 case WM_SETFOCUS:
1584 if (mp2)
1585 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1586 break;
1587
1588 case WM_MENUEND:
1589 if (hwndPopup == (HWND) mp2) {
1590 WinDestroyWindow(hwndPopup);
1591 hwndPopup = (HWND) 0;
1592 }
1593 break;
1594
1595 case WM_CONTEXTMENU:
1596 {
1597 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
1598
1599 switch (id) {
1600 case INI_APPLIST:
1601 id = INI_APPMENU;
1602 break;
1603 case INI_KEYLIST:
1604 id = INI_KEYMENU;
1605 break;
1606 default:
1607 id = 0;
1608 break;
1609 }
1610 if (id) {
1611 if (hwndPopup)
1612 WinDestroyWindow(hwndPopup);
1613 hwndPopup = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
1614 if (hwndPopup)
1615 WinPopupMenu(hwnd, WinQueryWindow(hwnd, QW_PARENT),
1616 hwndPopup, 8, 8, 0,
1617 PU_HCONSTRAIN | PU_VCONSTRAIN |
1618 PU_KEYBOARD | PU_MOUSEBUTTON1);
1619 }
1620 }
1621 break;
1622
1623 case WM_BEGINDRAG:
1624 {
1625 PDRAGINFO pDInfo;
1626 DRAGITEM DItem;
1627 DRAGIMAGE DIcon;
1628 INIDATA *inidata;
1629 HPOINTER hptrINI;
1630 USHORT id;
1631 HWND hDrop = 0;
1632
1633 id = WinQueryWindowUShort(hwnd, QWS_ID);
1634 inidata = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
1635 if (!inidata || !*inidata->ininame || !*inidata->applname ||
1636 !inidata->keyname) {
1637 DosBeep(50, 100);
1638 break;
1639 }
1640 hptrINI = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, INI_FRAME);
1641 memset(&DItem, 0, sizeof(DItem));
1642 memset(&DIcon, 0, sizeof(DIcon));
1643 DIcon.cb = sizeof(DIcon);
1644 DIcon.cptl = 0;
1645 DIcon.hImage = hptrINI;
1646 DIcon.fl = DRG_ICON;
1647 DIcon.sizlStretch.cx = 32;
1648 DIcon.sizlStretch.cy = 32;
1649 DIcon.cxOffset = -16;
1650 DIcon.cyOffset = 0;
1651 DItem.hwndItem = hwnd;
1652 DItem.ulItemID = 0L;
1653 DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
1654 DItem.hstrRMF = DrgAddStrHandle("<DRM_FM2INIRECORD,DRF_FM2INI>");
1655 DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame);
1656 DItem.hstrSourceName = DrgAddStrHandle(inidata->applname);
1657 if (id == INI_APPLIST)
1658 DItem.hstrTargetName = DrgAddStrHandle(NullStr);
1659 else
1660 DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
1661 DItem.fsControl = 0;
1662 DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
1663 pDInfo = DrgAllocDraginfo(1L);
1664 DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
1665 hDrop = DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
1666 if (hDrop == NULLHANDLE)
1667 FreeDragInfoData(hwnd, pDInfo);
1668 WinDestroyPointer(hptrINI);
1669 }
1670 break;
1671
1672 case DM_DRAGOVER:
1673 {
1674 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1675 PDRAGITEM pDItem;
1676
1677 if (!DrgAccessDraginfo(pDInfo)) {
1678 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1679 "DrgAccessDraginfo");
1680 }
1681 else {
1682 pDItem = DrgQueryDragitemPtr(pDInfo,0);
1683 /* Check valid rendering mechanisms and data */
1684 if (DrgVerifyRMF(pDItem, DRM_OS2FILE, NULL)) {
1685 DrgFreeDraginfo(pDInfo);
1686 return (MRFROM2SHORT(DOR_DROP, DO_LINK)); /* OK to drop */
1687 }
1688 else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
1689 if (WinQueryWindow(pDInfo->hwndSource, QW_PARENT) !=
1690 WinQueryWindow(hwnd, QW_PARENT))
1691 {
1692 DrgFreeDraginfo(pDInfo);
1693 return (MRFROM2SHORT(DOR_DROP, ((fCopyDefault) ? DO_COPY : DO_MOVE)));
1694 }
1695 }
1696 DrgFreeDraginfo(pDInfo);
1697 }
1698 }
1699 return MRFROM2SHORT(DOR_NEVERDROP, 0);
1700
1701 case DM_DRAGLEAVE:
1702
1703 break;
1704
1705 case DM_DROP:
1706 {
1707 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1708 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
1709 ULONG numitems, curitem, len;
1710 USHORT action;
1711 CHAR szFrom[CCHMAXPATH + 2], szDir[CCHMAXPATH + 1],
1712 szTemp[CCHMAXPATH + 2];
1713 FILESTATUS3 fsa;
1714 INIREC inirec;
1715
1716 if (!DrgAccessDraginfo(pDInfo)) {
1717 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1718 "DrgAccessDraginfo");
1719 return 0;
1720 }
1721 numitems = DrgQueryDragitemCount(pDInfo);
1722 for (curitem = 0; curitem < numitems; curitem++) {
1723 pDItem = DrgQueryDragitemPtr(pDInfo, curitem);
1724 if (DrgVerifyRMF(pDItem, DRM_OS2FILE, NULL)) {
1725 if (pDItem->fsControl & DC_PREPARE)
1726 DrgSendTransferMsg(pDItem->hwndItem,
1727 DM_ENDCONVERSATION,
1728 MPFROMLONG(pDItem->ulItemID),
1729 MPFROMLONG(DMFL_TARGETFAIL));
1730 else {
1731 if (FullDrgName(pDItem, szFrom, sizeof(szFrom)) &&
1732 !DosQueryPathInfo(szFrom, FIL_STANDARD, &fsa, sizeof(fsa)))
1733 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1734 MPFROM2SHORT(IDM_COMPARE, 0), MPFROMP(szFrom));
1735 DrgSendTransferMsg(pDItem->hwndItem,
1736 DM_ENDCONVERSATION,
1737 MPFROMLONG(pDItem->ulItemID),
1738 MPFROMLONG(DMFL_TARGETFAIL));
1739 }
1740 }
1741 else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
1742 *szDir = *szFrom = *szTemp = 0;
1743 len = DrgQueryStrName(pDItem->hstrContainerName, CCHMAXPATH, szDir);
1744 szDir[len] = 0;
1745 len = DrgQueryStrName(pDItem->hstrSourceName, CCHMAXPATH, szFrom);
1746 szFrom[len] = 0;
1747 len = DrgQueryStrName(pDItem->hstrTargetName, CCHMAXPATH, szTemp);
1748 szTemp[len] = 0;
1749 switch (pDInfo->usOperation) {
1750 case DO_MOVE:
1751 action = IDM_MOVE;
1752 break;
1753 case DO_COPY:
1754 action = IDM_COPY;
1755 break;
1756 default:
1757 action = IDM_INFO;
1758 break;
1759 }
1760 memset(&inirec, 0, sizeof(inirec));
1761 inirec.size = sizeof(inirec);
1762 strcpy(inirec.filename2, szDir);
1763 strcpy(inirec.app, szFrom);
1764 strcpy(inirec.key, szTemp);
1765 inirec.action = action;
1766 inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource, QW_PARENT);
1767 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1768 MPFROM2SHORT(action, 0), MPFROMP(&inirec));
1769 DrgSendTransferMsg(pDItem->hwndItem,
1770 DM_ENDCONVERSATION,
1771 MPFROMLONG(pDItem->ulItemID),
1772 MPFROMLONG(DMFL_TARGETFAIL));
1773 }
1774 } // for
1775 FreeDragInfoData(hwnd, pDInfo);
1776 }
1777 return 0;
1778
1779 case WM_DESTROY:
1780 if (hwndPopup)
1781 WinDestroyWindow(hwndPopup);
1782 hwndPopup = (HWND) 0;
1783 break;
1784 } // switch
1785 if (oldproc)
1786 return oldproc(hwnd, msg, mp1, mp2);
1787 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1788}
1789
1790MRESULT EXPENTRY IniLBSubProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1791{
1792 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1793
1794 switch (msg) {
1795 case WM_SETFOCUS:
1796 if (mp2)
1797 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1798 break;
1799 }
1800 if (oldproc)
1801 return oldproc(hwnd, msg, mp1, mp2);
1802 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1803}
1804
1805MRESULT EXPENTRY IniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1806{
1807 INIDATA *inidata;
1808 SHORT sSel;
1809 PFNWP oldproc;
1810
1811 switch (msg) {
1812 case WM_CREATE:
1813 inidata = xmallocz(sizeof(INIDATA), pszSrcFile, __LINE__);
1814 if (!inidata) {
1815 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1816 break;
1817 }
1818 inidata->size = sizeof(INIDATA);
1819 inidata->confirm = TRUE;
1820 inidata->currid = INI_APPLIST;
1821 inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1822 FID_MENU);
1823 inidata->hwndIni = hwnd;
1824 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) inidata);
1825 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
1826
1827 if (!WinCreateWindow
1828 (hwnd, WC_LISTBOX, (PSZ) NULL,
1829 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1830 HWND_TOP, INI_APPLIST, NULL, NULL)) {
1831 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1832 }
1833 if (!WinCreateWindow
1834 (hwnd, WC_LISTBOX, (PSZ) NULL,
1835 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1836 HWND_TOP, INI_KEYLIST, NULL, NULL)) {
1837 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1838 }
1839 if (!WinCreateWindow
1840 (hwnd, WC_LISTBOX, (PSZ) NULL,
1841 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1842 HWND_TOP, INI_DATALIST, NULL, NULL)) {
1843 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1844 }
1845 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1846 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1847 INI_NUMAPPS, NULL, NULL)) {
1848 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1849 }
1850 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1851 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1852 INI_NUMKEYS, NULL, NULL)) {
1853 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1854 }
1855 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1856 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1857 INI_NUMDATA, NULL, NULL)) {
1858 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1859 }
1860 if (!WinCreateWindow(hwnd,
1861 WC_STATIC,
1862 GetPString(IDS_APPLICATIONSTITLETEXT),
1863 WS_VISIBLE | SS_TEXT |
1864 DT_CENTER | DT_VCENTER,
1865 0,
1866 0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL)) {
1867 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1868 }
1869 if (!WinCreateWindow(hwnd,
1870 WC_STATIC,
1871 GetPString(IDS_KEYWORDSTITLETEXT),
1872 WS_VISIBLE | SS_TEXT |
1873 DT_CENTER | DT_VCENTER,
1874 0,
1875 0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL)) {
1876 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1877 }
1878 if (!WinCreateWindow(hwnd,
1879 WC_STATIC,
1880 GetPString(IDS_DATABYTESTITLETEXT),
1881 WS_VISIBLE | SS_TEXT |
1882 DT_CENTER | DT_VCENTER,
1883 0,
1884 0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL)) {
1885 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1886 }
1887
1888 inidata->hwndApp = WinWindowFromID(hwnd, INI_APPLIST);
1889 inidata->hwndKey = WinWindowFromID(hwnd, INI_KEYLIST);
1890 inidata->hwndData = WinWindowFromID(hwnd, INI_DATALIST);
1891
1892 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_APPLIST),
1893 IniLBSubProc);
1894 WinSetWindowPtr(WinWindowFromID(hwnd, INI_APPLIST),
1895 QWL_USER, (PVOID) oldproc);
1896 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_KEYLIST),
1897 IniLBSubProc);
1898 WinSetWindowPtr(WinWindowFromID(hwnd, INI_KEYLIST),
1899 QWL_USER, (PVOID) oldproc);
1900 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_DATALIST),
1901 IniLBSubProc2);
1902 WinSetWindowPtr(WinWindowFromID(hwnd, INI_DATALIST),
1903 QWL_USER, (PVOID) oldproc);
1904 break;
1905
1906 case UM_FOCUSME:
1907 case WM_SETFOCUS:
1908 if (mp2) {
1909 if (hwndMain && fAutoView)
1910 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1911 inidata = INSTDATA(hwnd);
1912 if (!inidata)
1913 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
1914 else if (hwndStatus) {
1915 if (*inidata->ininame) {
1916 WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT));
1917 if (hwndStatus2)
1918 WinSetWindowText(hwndStatus2, inidata->ininame);
1919 }
1920 else
1921 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1922 }
1923 }
1924 if (msg == WM_SETFOCUS)
1925 break;
1926 return 0;
1927
1928 case UM_SELECT:
1929 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, INI_APPLIST));
1930 break;
1931
1932 case UM_ACTION:
1933 SetPresParams(WinWindowFromID(hwnd, INI_APPHDR),
1934 &RGBGREY,
1935 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1936 SetPresParams(WinWindowFromID(hwnd, INI_KEYHDR),
1937 &RGBGREY,
1938 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1939 SetPresParams(WinWindowFromID(hwnd, INI_DATAHDR),
1940 &RGBGREY,
1941 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1942 SetPresParams(WinWindowFromID(hwnd, INI_NUMAPPS),
1943 &RGBGREY,
1944 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1945 SetPresParams(WinWindowFromID(hwnd, INI_NUMKEYS),
1946 &RGBGREY,
1947 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1948 SetPresParams(WinWindowFromID(hwnd, INI_NUMDATA),
1949 &RGBGREY,
1950 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1951 if (!WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1952 PP_FONTNAMESIZE,
1953 (ULONG) strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1,
1954 (PVOID) GetPString(IDS_5SYSTEMVIOTEXT)))
1955 WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1956 PP_FONTNAMESIZE,
1957 (ULONG) strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
1958 (PVOID) GetPString(IDS_10SYSTEMMONOTEXT));
1959 RestorePresParams(hwnd, "IniUtil");
1960 return 0;
1961
1962 case WM_PRESPARAMCHANGED:
1963 PresParamChanged(hwnd, "IniUtil", mp1, mp2);
1964 break;
1965
1966 case UM_RESCAN:
1967 inidata = INSTDATA(hwnd);
1968 if (!inidata)
1969 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
1970 else if (mp1) {
1971 SHORT sSelect;
1972 BOOL inprofile;
1973 ULONG size;
1974 SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
1975 INI_APPLIST,
1976 LM_QUERYITEMCOUNT,
1977 MPVOID, MPVOID);
1978 if (!numitems) {
1979 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
1980 return 0;
1981 }
1982 size = 0;
1983 if (PrfQueryProfileSize(inidata->hini,
1984 (CHAR *)mp1, NULL, (PULONG) & size) && size)
1985 inprofile = TRUE;
1986 else
1987 inprofile = FALSE;
1988 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
1989 INI_APPLIST,
1990 LM_SEARCHSTRING,
1991 MPFROM2SHORT(LSS_CASESENSITIVE,
1992 LIT_FIRST),
1993 MPFROMP((CHAR *)mp1));
1994 if (sSelect >= 0) {
1995 if (!inprofile)
1996 WinSendDlgItemMsg(hwnd,
1997 INI_APPLIST,
1998 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
1999 else if (!strcmp(inidata->applname, (CHAR *)mp1))
2000 PostMsg(hwnd,
2001 WM_CONTROL,
2002 MPFROM2SHORT(INI_APPLIST, LN_SELECT),
2003 MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
2004 }
2005 else if (inprofile)
2006 WinSendDlgItemMsg(hwnd,
2007 INI_APPLIST,
2008 LM_INSERTITEM,
2009 MPFROM2SHORT(LIT_SORTASCENDING, 0),
2010 MPFROMP((CHAR *)mp1));
2011 if (mp2 && inidata->applname) {
2012 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2013 inidata->hini, inidata->applname))
2014 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2015 }
2016 }
2017 return 0;
2018
2019 case UM_INITIALSIZE: /* kludge */
2020 inidata = INSTDATA(hwnd);
2021 if (!inidata)
2022 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2023 else
2024 inidata->dontclose = TRUE;
2025 return 0;
2026
2027 case WM_SIZE:
2028 {
2029 SHORT cx = SHORT1FROMMP(mp2);
2030 SHORT cy = SHORT2FROMMP(mp2);
2031
2032 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPHDR), HWND_TOP,
2033 2, cy - 22, (cx / 4) - 4, 20, SWP_MOVE | SWP_SIZE);
2034 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMAPPS), HWND_TOP,
2035 (cx / 4) + 2, cy - 22, (cx / 4) - 4, 20,
2036 SWP_MOVE | SWP_SIZE);
2037 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPLIST), HWND_TOP,
2038 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
2039 SWP_MOVE | SWP_SIZE);
2040 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYHDR), HWND_TOP,
2041 (cx / 2) + 2, cy - 22, (cx / 4) - 4, 20,
2042 SWP_MOVE | SWP_SIZE);
2043 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMKEYS), HWND_TOP,
2044 (cx - (cx / 4)) + 2, cy - 22, (cx / 4) - 4, 20,
2045 SWP_MOVE | SWP_SIZE);
2046 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYLIST), HWND_TOP,
2047 (cx / 2) + 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
2048 SWP_MOVE | SWP_SIZE);
2049 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATAHDR), HWND_TOP,
2050 2, (cy / 2) - 22, (cx / 2) - 4, 20,
2051 SWP_MOVE | SWP_SIZE);
2052 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMDATA), HWND_TOP,
2053 (cx / 2) + 2, (cy / 2) - 22, (cx / 2) - 4, 20,
2054 SWP_MOVE | SWP_SIZE);
2055 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATALIST), HWND_TOP,
2056 2, 2, cx - 4, (cy / 2) - 28, SWP_MOVE | SWP_SIZE);
2057 }
2058 break;
2059
2060 case UM_LOADFILE:
2061 /* load initial file */
2062 inidata = INSTDATA(hwnd);
2063 if (!inidata)
2064 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2065 else {
2066 if (mp1) {
2067 strcpy(inidata->ininame, (CHAR *)mp1);
2068 inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
2069 inidata->ininame);
2070 free(mp1);
2071 }
2072 else
2073 inidata->hini = HINI_USERPROFILE;
2074 if (inidata->hini == NULLHANDLE) {
2075 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
2076 "PrfOpenProfile failed for %s", inidata->ininame);
2077 }
2078 else {
2079 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2080 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2081 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
2082 HWND_TOP,
2083 0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
2084 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2085 return 0;
2086 }
2087 }
2088 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2089 return 0;
2090
2091 case WM_ERASEBACKGROUND:
2092 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
2093 return 0;
2094
2095 case WM_PAINT:
2096 {
2097 HPS hps;
2098 RECTL rcl;
2099
2100 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2101 if (hps) {
2102 WinQueryWindowRect(hwnd, &rcl);
2103 WinFillRect(hps, &rcl, CLR_PALEGRAY);
2104 WinEndPaint(hps);
2105 /*
2106 * tell status window to paint its box
2107 */
2108 PaintRecessedWindow(WinWindowFromID(hwnd, INI_APPHDR),
2109 (HPS) 0, FALSE, FALSE);
2110 PaintRecessedWindow(WinWindowFromID(hwnd, INI_KEYHDR),
2111 (HPS) 0, FALSE, FALSE);
2112 PaintRecessedWindow(WinWindowFromID(hwnd, INI_DATAHDR),
2113 (HPS) 0, FALSE, FALSE);
2114 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMAPPS),
2115 (HPS) 0, FALSE, FALSE);
2116 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMKEYS),
2117 (HPS) 0, FALSE, FALSE);
2118 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMDATA),
2119 (HPS) 0, FALSE, FALSE);
2120 inidata = INSTDATA(hwnd);
2121 if (!inidata)
2122 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2123 else if (inidata->hwndCurrent)
2124 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
2125 }
2126 }
2127 break;
2128
2129 case WM_CONTROL:
2130 switch (SHORT1FROMMP(mp1)) {
2131 case INI_KEYLIST:
2132 case INI_APPLIST:
2133 case INI_DATALIST:
2134 switch (SHORT2FROMMP(mp1)) {
2135 case LN_SETFOCUS:
2136 inidata = INSTDATA(hwnd);
2137 if (!inidata)
2138 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2139 else {
2140 if (inidata->hwndCurrent)
2141 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
2142 inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1));
2143 BoxWindow(WinWindowFromID(hwnd,
2144 SHORT1FROMMP(mp1)), (HPS) 0, CLR_RED);
2145 }
2146 break;
2147
2148 case LN_ENTER:
2149 case LN_SELECT:
2150 {
2151 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
2152 SHORT sSelect;
2153
2154 if (SHORT1FROMMP(mp1) == INI_DATALIST)
2155 break;
2156
2157 inidata = INSTDATA(hwnd);
2158 if (!inidata || !inidata->hini) {
2159 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2160 break;
2161 }
2162 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2163 inidata->keyindex = inidata->appindex = 0;
2164 *applname = *keyname = *inidata->applname = *inidata->keyname = 0;
2165 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2166 INI_APPLIST,
2167 LM_QUERYSELECTION,
2168 MPFROM2SHORT(LIT_FIRST, 0),
2169 MPVOID);
2170 if (sSelect < 0)
2171 break;
2172 inidata->appindex = sSelect;
2173 WinSendDlgItemMsg(hwnd,
2174 INI_APPLIST,
2175 LM_QUERYITEMTEXT,
2176 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2177 MPFROMP(applname));
2178 if (SHORT1FROMMP(mp1) == INI_APPLIST) {
2179 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2180 inidata->hini, applname))
2181 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2182 }
2183 else {
2184 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, INI_KEYLIST,
2185 LM_QUERYSELECTION,
2186 MPFROM2SHORT(LIT_FIRST, 0),
2187 MPVOID);
2188 if (sSelect < 0)
2189 break;
2190 inidata->keyindex = sSelect;
2191 WinSendDlgItemMsg(hwnd,
2192 INI_KEYLIST,
2193 LM_QUERYITEMTEXT,
2194 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2195 MPFROMP(keyname));
2196 if (!*keyname || !*applname)
2197 break;
2198 strcpy(inidata->keyname, keyname);
2199 strcpy(inidata->applname, applname);
2200 xfree(inidata->data, pszSrcFile, __LINE__);
2201 inidata->data = GetKeyData(WinWindowFromID(hwnd,
2202 INI_DATALIST),
2203 inidata->hini,
2204 applname, keyname, &inidata->datalen);
2205 if (!inidata->data)
2206 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2207 }
2208 }
2209 break;
2210 }
2211 break;
2212 }
2213 return 0;
2214
2215 case UM_SETDIR:
2216 {
2217 SHORT num;
2218 CHAR s[81];
2219
2220 num = (SHORT) WinSendDlgItemMsg(hwnd,
2221 INI_APPLIST,
2222 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2223 sprintf(s, "%u", num);
2224 WinSetDlgItemText(hwnd, INI_NUMAPPS, s);
2225 num = (SHORT) WinSendDlgItemMsg(hwnd,
2226 INI_KEYLIST,
2227 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2228 sprintf(s, "%u", num);
2229 WinSetDlgItemText(hwnd, INI_NUMKEYS, s);
2230 WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
2231 WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
2232 // inidata = WinQueryWindowPtr(hwnd, QWL_USER); // 09 Jan 08 SHL
2233 }
2234 return 0;
2235
2236 case UM_SETUP:
2237 inidata = INSTDATA(hwnd);
2238 if (!inidata)
2239 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2240 else {
2241 PRFPROFILE prfp;
2242 CHAR sysini[CCHMAXPATH + 81];
2243 CHAR userini[CCHMAXPATH];
2244
2245 memset(&prfp, 0, sizeof(PRFPROFILE));
2246 prfp.cchUserName = CCHMAXPATH;
2247 prfp.cchSysName = CCHMAXPATH;
2248 prfp.pszUserName = (PSZ) userini;
2249 prfp.pszSysName = (PSZ) sysini;
2250 if (PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
2251 if (inidata->hini == HINI_SYSTEMPROFILE)
2252 strcpy(inidata->ininame, sysini);
2253 else if (inidata->hini == HINI_USERPROFILE)
2254 strcpy(inidata->ininame, userini);
2255 sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame);
2256 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), sysini);
2257 if (WinQueryWindow(hwnd, QW_PARENT) ==
2258 WinQueryActiveWindow(WinQueryWindow
2259 (WinQueryWindow(hwnd, QW_PARENT),
2260 QW_PARENT))) {
2261 if (hwndStatus)
2262 WinSetWindowText(hwndStatus,
2263 GetPString(IDS_INTERNALINIVIEWERTEXT));
2264 if (hwndStatus2)
2265 WinSetWindowText(hwndStatus2, inidata->ininame);
2266 }
2267 }
2268 else
2269 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT),
2270 GetPString(IDS_INIQUERYPRFFAILEDTEXT));
2271 return 0;
2272 }
2273
2274 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2275 return 0;
2276
2277 case WM_CHAR:
2278 if (!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
2279 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
2280 switch (SHORT2FROMMP(mp2)) {
2281 case VK_DELETE:
2282 inidata = INSTDATA(hwnd);
2283 if (!inidata)
2284 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2285 else {
2286 SHORT cmd = inidata->hwndCurrent &&
2287 WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
2288 INI_APPLIST ?
2289 INI_DELETEAPP :INI_DELETEKEY;
2290 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
2291 }
2292 break;
2293 }
2294 }
2295 }
2296 break;
2297
2298 case WM_COMMAND:
2299 switch (SHORT1FROMMP(mp1)) {
2300 case IDM_FINDNEXT:
2301 case IDM_FINDFIRST:
2302 inidata = INSTDATA(hwnd);
2303 if (!inidata)
2304 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2305 else if (inidata->hwndCurrent) {
2306 STRINGINPARMS sip;
2307 static CHAR tofind[258] = "";
2308 SHORT x, z;
2309
2310 if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
2311 z = LIT_FIRST;
2312 memset(&sip, 0, sizeof(sip));
2313 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
2314 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
2315 sip.inputlen = 257;
2316 sip.ret = tofind;
2317 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
2318 if (WinDlgBox(HWND_DESKTOP,
2319 hwnd,
2320 InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
2321 rstrip(tofind);
2322 if (!*tofind) {
2323 DosBeep(50, 100);
2324 break;
2325 }
2326 }
2327 else
2328 break;
2329 }
2330 else {
2331 z = (SHORT) WinSendMsg(inidata->hwndCurrent,
2332 LM_QUERYSELECTION,
2333 MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
2334 if (z < 0)
2335 z = LIT_FIRST;
2336 }
2337 x = (SHORT) WinSendMsg(inidata->hwndCurrent,
2338 LM_SEARCHSTRING,
2339 MPFROM2SHORT(LSS_SUBSTRING, z),
2340 MPFROMP(tofind));
2341 if (x >= 0 && x > z) {
2342 WinSendMsg(inidata->hwndCurrent,
2343 LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
2344 WinSendMsg(inidata->hwndCurrent,
2345 LM_SELECTITEM,
2346 MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
2347 }
2348 else
2349 DosBeep(250, 100);
2350 }
2351 break;
2352
2353 case IDM_FILTER:
2354 inidata = INSTDATA(hwnd);
2355 if (!inidata)
2356 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2357 else {
2358 SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2359 INI_APPLIST,
2360 LM_QUERYITEMCOUNT,
2361 MPVOID, MPVOID);
2362 if (numitems)
2363 WinDlgBox(HWND_DESKTOP,
2364 hwnd,
2365 FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID) inidata);
2366 else
2367 DosBeep(50, 100);
2368 }
2369 break;
2370
2371 case IDM_COPY:
2372 case IDM_INFO:
2373 case IDM_MOVE:
2374 inidata = INSTDATA(hwnd);
2375 if (!inidata || !*inidata->ininame)
2376 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2377 else if (mp2) {
2378 INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2379 if (inirec) {
2380 *inirec = *(INIREC *) mp2;
2381 inirec->hwndDlg = hwnd;
2382 inirec->confirm = inidata->confirm;
2383 strcpy(inirec->filename1, inidata->ininame);
2384 if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
2385 Runtime_Error(pszSrcFile, __LINE__,
2386 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2387 free(inirec);
2388 }
2389 }
2390 }
2391 break;
2392
2393 case IDM_COMPARE:
2394 inidata = INSTDATA(hwnd);
2395 if (!inidata || !*inidata->ininame)
2396 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2397 else if (mp2) {
2398 INIREC *inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
2399 if (inirec) {
2400 strcpy(inirec->filename2, (CHAR *)(mp2));
2401 strcpy(inirec->filename1, inidata->ininame);
2402 inirec->hwndDlg = hwnd;
2403 if (_beginthread(CompareIniThread, NULL, 122880, (PVOID) inirec) ==
2404 -1) {
2405 Runtime_Error(pszSrcFile, __LINE__,
2406 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2407 free(inirec);
2408 }
2409 }
2410 }
2411 break;
2412
2413 case INI_COPYAPP:
2414 case INI_COPYKEY:
2415 case INI_RENAMEAPP:
2416 case INI_RENAMEKEY:
2417 inidata = INSTDATA(hwnd);
2418 if (!inidata) {
2419 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2420 break;
2421 }
2422 if (!*inidata->ininame ||
2423 !*inidata->applname ||
2424 (!*inidata->keyname &&
2425 (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
2426 SHORT1FROMMP(mp1) == INI_COPYKEY)))
2427 break;
2428 {
2429 INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2430 if (inirec) {
2431 inirec->size = sizeof(INIREC);
2432 inirec->hwndDlg = hwnd;
2433 inirec->confirm = inidata->confirm;
2434 inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
2435 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
2436 IDM_COPY : IDM_MOVE;
2437 strcpy(inirec->filename1, inidata->ininame);
2438 strcpy(inirec->filename2, inidata->ininame);
2439 if (SHORT1FROMMP(mp1) == INI_COPYKEY ||
2440 SHORT1FROMMP(mp1) == INI_RENAMEKEY)
2441 strcpy(inirec->key, inidata->keyname);
2442 strcpy(inirec->app, inidata->applname);
2443 if (!WinDlgBox(HWND_DESKTOP,
2444 hwnd,
2445 IntraIniProc,
2446 FM3ModHandle, INII_FRAME, (PVOID) inirec)) {
2447 free(inirec);
2448 break;
2449 }
2450 if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
2451 Runtime_Error(pszSrcFile, __LINE__,
2452 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2453 free(inirec);
2454 }
2455 }
2456 }
2457 break;
2458
2459 case INI_BACKUPINI:
2460 inidata = INSTDATA(hwnd);
2461 if (!inidata)
2462 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2463 else if (*inidata->ininame) {
2464 // 09 Jan 08 SHL fixme to complain
2465 CHAR filename[CCHMAXPATH], *p;
2466
2467 strcpy(filename, inidata->ininame);
2468 p = filename;
2469 while (*p) {
2470 if (*p == '/')
2471 *p = '\\';
2472 p++;
2473 }
2474 p = strrchr(filename, '\\');
2475 if (p) {
2476 p++;
2477 *p = 0;
2478 }
2479 else
2480 *filename = 0;
2481 strcat(filename, "*.INI");
2482 if (export_filename(hwnd, filename, TRUE)) {
2483
2484 PPRFPROFILE prfp;
2485
2486 prfp = xmallocz(sizeof(PRFPROFILE), pszSrcFile, __LINE__);
2487 if (prfp) {
2488 prfp->pszUserName =
2489 xstrdup(inidata->ininame, pszSrcFile, __LINE__);
2490 if (!prfp->pszUserName)
2491 free(prfp);
2492 else {
2493 prfp->cchUserName = strlen(prfp->pszUserName);
2494 prfp->pszSysName = xstrdup(filename, pszSrcFile, __LINE__);
2495 if (!prfp->pszSysName) {
2496 free(prfp->pszUserName);
2497 free(prfp);
2498 }
2499 else {
2500 prfp->cchSysName = strlen(prfp->pszSysName);
2501 if (_beginthread(BackupIniThread, NULL, 122880, (PVOID) prfp)
2502 == -1) {
2503 Runtime_Error(pszSrcFile, __LINE__,
2504 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2505 free(prfp->pszSysName);
2506 free(prfp->pszUserName);
2507 free(prfp);
2508 }
2509 else
2510 DosSleep(100); //05 Aug 07 GKY 250
2511 }
2512 }
2513 }
2514 }
2515 }
2516 break;
2517
2518 case INI_CHANGEINI:
2519 inidata = INSTDATA(hwnd);
2520 if (!inidata)
2521 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2522 else {
2523 if (WinDlgBox(HWND_DESKTOP,
2524 hwnd,
2525 ChangeIniProc,
2526 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2527 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2528 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2529 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2530 }
2531 }
2532 break;
2533
2534 case INI_SWAPINI:
2535 inidata = INSTDATA(hwnd);
2536 if (!inidata)
2537 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2538 else {
2539 if (WinDlgBox(HWND_DESKTOP,
2540 hwnd,
2541 SwapIniProc,
2542 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2543 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2544 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2545 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2546 }
2547 }
2548 break;
2549
2550 case IDM_NEXTWINDOW:
2551 inidata = INSTDATA(hwnd);
2552 if (!inidata)
2553 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2554 else {
2555 inidata->currid++;
2556 if (inidata->currid > INI_DATALIST)
2557 inidata->currid = INI_APPLIST;
2558 }
2559 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2560 break;
2561
2562 case IDM_PREVWINDOW:
2563 inidata = INSTDATA(hwnd);
2564 if (!inidata)
2565 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2566 else {
2567 inidata->currid--;
2568 if (inidata->currid < INI_APPLIST)
2569 inidata->currid = INI_DATALIST;
2570 }
2571 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2572 break;
2573
2574 case INI_CONFIRM:
2575 inidata = INSTDATA(hwnd);
2576 if (!inidata)
2577 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2578 else {
2579 inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
2580 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
2581
2582 }
2583 break;
2584
2585 case INI_EDITENTRY:
2586 case INI_ADDENTRY:
2587 inidata = INSTDATA(hwnd);
2588 if (!inidata)
2589 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2590 else {
2591 inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
2592 WinDlgBox(HWND_DESKTOP,
2593 hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID) inidata);
2594 }
2595 break;
2596
2597 case INI_OTHERPROFILE:
2598 inidata = INSTDATA(hwnd);
2599 if (!inidata)
2600 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2601 else {
2602 CHAR filename[CCHMAXPATH + 81], *p;
2603 FILESTATUS3 fsa;
2604 HINI hINI;
2605
2606 strcpy(filename, inidata->ininame);
2607 p = filename;
2608 while (*p) {
2609 if (*p == '/')
2610 *p = '\\';
2611 p++;
2612 }
2613 p = strrchr(filename, '\\');
2614 if (p) {
2615 p++;
2616 *p = 0;
2617 }
2618 else
2619 *filename = 0;
2620 strcat(filename, "*.INI");
2621 if (insert_filename(hwnd,
2622 filename,
2623 TRUE,
2624 TRUE) &&
2625 *filename &&
2626 !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
2627 hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename);
2628 if (hINI == NULLHANDLE) {
2629 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
2630 GetPString(IDS_INICANTOPENINITEXT), filename);
2631 }
2632 else {
2633 if (*inidata->ininame) {
2634 if (inidata->hini)
2635 CloseProfile(inidata->hini, FALSE);
2636 *inidata->ininame = 0;
2637 }
2638 inidata->hini = hINI;
2639 strcpy(inidata->ininame, filename);
2640 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2641 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2642 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2643 }
2644 }
2645 }
2646 break;
2647
2648 case INI_USERPROFILE:
2649 inidata = INSTDATA(hwnd);
2650 if (!inidata)
2651 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2652 else {
2653 if (inidata->hini && *inidata->ininame)
2654 CloseProfile(inidata->hini, FALSE);
2655 *inidata->ininame = 0;
2656 inidata->hini = HINI_USERPROFILE;
2657 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2658 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2659 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2660 }
2661 break;
2662
2663 case INI_SYSTEMPROFILE:
2664 inidata = INSTDATA(hwnd);
2665 if (!inidata)
2666 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2667 else {
2668 if (inidata->hini && *inidata->ininame)
2669 CloseProfile(inidata->hini, FALSE);
2670 *inidata->ininame = 0;
2671 inidata->hini = HINI_SYSTEMPROFILE;
2672 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2673 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2674 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2675 }
2676 break;
2677
2678 case INI_REFRESH:
2679 inidata = INSTDATA(hwnd);
2680 if (!inidata)
2681 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2682 else {
2683 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2684 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2685 }
2686 break;
2687
2688 case INI_DELETEKEY:
2689 inidata = INSTDATA(hwnd);
2690 if (!inidata)
2691 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2692 else if (*inidata->applname && *inidata->keyname) {
2693
2694 SHORT keyindex = inidata->keyindex;
2695
2696 if (inidata->confirm && saymsg(MB_YESNO,
2697 hwnd,
2698 GetPString(IDS_CONFIRMTEXT),
2699 GetPString(IDS_INIDELETEKEYTEXT),
2700 inidata->keyname) == MBID_NO)
2701 break;
2702 PrfWriteProfileData(inidata->hini,
2703 inidata->applname, inidata->keyname, NULL, 0L);
2704 *inidata->keyname = 0;
2705 WinSendDlgItemMsg(hwnd,
2706 INI_KEYLIST,
2707 LM_DELETEITEM, MPFROM2SHORT(keyindex, 0), MPVOID);
2708 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2709 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2710 INI_KEYLIST,
2711 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2712 if (!sSel)
2713 WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID);
2714 else {
2715 sSel = min(keyindex, sSel - 1);
2716 WinSendDlgItemMsg(hwnd,
2717 INI_KEYLIST,
2718 LM_SELECTITEM,
2719 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2720 }
2721 }
2722 break;
2723
2724 case INI_DELETEAPP:
2725 inidata = INSTDATA(hwnd);
2726 if (!inidata)
2727 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2728 // 09 Jan 08 SHL fixme to complain?
2729 else if (*inidata->applname) {
2730
2731 SHORT appindex = inidata->appindex;
2732
2733 if (inidata->confirm && saymsg(MB_YESNO,
2734 hwnd,
2735 GetPString(IDS_CONFIRMTEXT),
2736 GetPString(IDS_INIDELETEAPPTEXT),
2737 inidata->applname) == MBID_NO)
2738 break;
2739 PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L);
2740 *inidata->applname = *inidata->keyname = 0;
2741 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2742 WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID);
2743 WinSendDlgItemMsg(hwnd,
2744 INI_APPLIST,
2745 LM_DELETEITEM, MPFROM2SHORT(appindex, 0), MPVOID);
2746 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2747 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2748 INI_APPLIST,
2749 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2750 if (sSel) {
2751 sSel = min(appindex, sSel - 1);
2752 WinSendDlgItemMsg(hwnd,
2753 INI_APPLIST,
2754 LM_SELECTITEM,
2755 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2756 }
2757 }
2758 break;
2759
2760 case DID_OK:
2761 case DID_CANCEL:
2762 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2763 break;
2764
2765 case IDM_HELP:
2766 if (hwndHelp)
2767 WinSendMsg(hwndHelp,
2768 HM_DISPLAY_HELP,
2769 MPFROM2SHORT(HELP_INI, 0), MPFROMSHORT(HM_RESOURCEID));
2770 break;
2771
2772 case IDM_ABOUT:
2773 saymsg(MB_ENTER | MB_ICONASTERISK,
2774 hwnd,
2775 GetPString(IDS_VIEWABOUTTITLETEXT),
2776 GetPString(IDS_INIABOUTTEXT));
2777 break;
2778 }
2779 return 0;
2780
2781 case WM_CLOSE:
2782 if (ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
2783
2784 SWP swp;
2785
2786 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
2787 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
2788 WinStoreWindowPos(FM2Str,
2789 "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
2790 // inidata = WinQueryWindowPtr(hwnd, QWL_USER); // 09 Jan 08 SHL
2791 }
2792 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
2793 return 0;
2794
2795 case WM_DESTROY:
2796 {
2797 BOOL dontclose = FALSE;
2798
2799 inidata = INSTDATA(hwnd);
2800 if (!inidata)
2801 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
2802 else {
2803 dontclose = inidata->dontclose;
2804 if (inidata->hini != NULLHANDLE && *inidata->ininame)
2805 CloseProfile(inidata->hini, FALSE);
2806 free(inidata->data);
2807 if (inidata->hwndPopup)
2808 WinDestroyWindow(inidata->hwndPopup);
2809 free(inidata);
2810 }
2811 if (!dontclose &&
2812 ParentIsDesktop(hwnd, WinQueryWindow(WinQueryWindow(hwnd,
2813 QW_PARENT),
2814 QW_PARENT))) {
2815 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
2816 DosExit(EXIT_PROCESS, 1);
2817 }
2818 }
2819 break;
2820 }
2821 return WinDefWindowProc(hwnd, msg, mp1, mp2);
2822}
2823
2824#pragma alloc_text(INIS,EnumAppNames,GetKeyData,EnumKeyNames,AddIniProc,IniProc,BackupIniThread)
2825#pragma alloc_text(INIS,ChangeIniProc,SwapIniProc,IniLBSubProc,IniLBSubProc2,CopyIniThread)
2826#pragma alloc_text(INIS,IntraIniProc,FilterIniProc)
2827#pragma alloc_text(STARTUP,StartIniEditor)
Note: See TracBrowser for help on using the repository browser.