source: trunk/dll/inis.c@ 1505

Last change on this file since 1505 was 1498, checked in by Gregg Young, 16 years ago

Changes to get FM2 to compile with the latest watcom 1.9 beta (mostly type casts of CHAR CONSTANT * to CHAR *). Changes to get the environment settings working everywhere again (broken by the change that moved commands to the INI); Added an environment size variable (set to 2048 which was the largest I found hard coded). Still need to find everywhere the environment size is set and use this variable.

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