source: trunk/dll/inis.c@ 1331

Last change on this file since 1331 was 1321, checked in by Steven Levine, 17 years ago

Rework casts variable types for OpenWatcom 1.8 compatibility
Add more FORTIFY support

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