source: trunk/dll/inis.c@ 1401

Last change on this file since 1401 was 1400, checked in by Gregg Young, 17 years ago

Remainder of changes to rename commafmt.h/c (Ticket 28, 82); Additional strings moved to PCSZs in init.c (Ticket 6); Added WriteDetailsSwitches used it and LoadDetailsSwitches to consolidate inline code (Ticket 343, 344)

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