source: trunk/dll/inis.c@ 1303

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

Ticket 187: Moved typedef's and some #define's from fm3dll.h

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