source: trunk/dll/inis.c@ 1544

Last change on this file since 1544 was 1544, checked in by Gregg Young, 15 years ago

Changes to fopen and _fsopen to allow FM2 to be loaded in high memory

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 77.1 KB
Line 
1
2/***********************************************************************
3
4 $Id: inis.c 1544 2010-09-30 13:00:59Z 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 CHAR *moder = "r";
783
784 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
785 LM_QUERYSELECTION,
786 MPFROM2SHORT(LIT_FIRST, 0),
787 MPVOID);
788 if (sSelect < 0)
789 Runtime_Error(pszSrcFile, __LINE__, NULL);
790 else {
791 *s = 0;
792 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
793 MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
794 bstrip(s);
795 if (*s) {
796 fp = xfsopen(s, moder, SH_DENYWR, pszSrcFile, __LINE__, FALSE);
797 if (fp) {
798 len = fread(s, 1, 8192, fp);
799 s[len] = 0;
800 WinSetWindowText(hwndMLE, s);
801 fclose(fp);
802 }
803 }
804 }
805 }
806 break;
807
808 case IAF_SAVE:
809 {
810 CHAR s[8193], filename[CCHMAXPATH], *p;
811 FILE *fp;
812 CHAR *modew = "w";
813
814 *filename = 0;
815 WinQueryDlgItemText(hwnd, IAF_SAVENAME, CCHMAXPATH, filename);
816 bstrip(filename);
817 if (*filename) {
818 p = strchr(filename, '.');
819 if (p) {
820 strcpy(p, ".IST");
821 WinSetDlgItemText(hwnd, IAF_SAVENAME, filename);
822 }
823 *s = 0;
824 WinQueryWindowText(hwndMLE, 8192, s);
825 if (!*s)
826 Runtime_Error(pszSrcFile, __LINE__, NULL);
827 else {
828 fp = xfopen(filename, modew, pszSrcFile, __LINE__, FALSE);
829 if (fp) {
830 fwrite(s, 1, strlen(s), fp);
831 fclose(fp);
832 WinSendDlgItemMsg(hwnd,
833 IAF_LISTBOX,
834 LM_INSERTITEM,
835 MPFROMSHORT(LIT_SORTASCENDING),
836 MPFROMP(filename));
837 }
838 }
839 }
840 }
841 break;
842
843 case IAF_DELETE:
844 {
845 CHAR s[CCHMAXPATH];
846 SHORT sSelect;
847
848 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
849 LM_QUERYSELECTION,
850 MPFROM2SHORT(LIT_FIRST, 0),
851 MPVOID);
852 if (sSelect >= 0) {
853 *s = 0;
854 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
855 MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
856 bstrip(s);
857 if (*s) {
858 unlinkf(s);
859 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_DELETEITEM,
860 MPFROMSHORT(sSelect), MPVOID);
861 }
862 }
863 }
864 break;
865
866 case DID_CANCEL:
867 WinDismissDlg(hwnd, 0);
868 break;
869
870 case IDM_HELP:
871 if (hwndHelp)
872 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
873 MPFROM2SHORT(HELP_FILTERINI, 0),
874 MPFROMSHORT(HM_RESOURCEID));
875 break;
876 }
877 return 0;
878 }
879 return WinDefDlgProc(hwnd, msg, mp1, mp2);
880}
881
882MRESULT EXPENTRY IntraIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
883{
884 INIREC *inirec;
885
886 switch (msg) {
887 case WM_INITDLG:
888 WinSetWindowPtr(hwnd, QWL_USER, mp2);
889 inirec = (INIREC *) mp2;
890 WinSendDlgItemMsg(hwnd,
891 INII_NEWAPP,
892 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
893 WinSendDlgItemMsg(hwnd,
894 INII_NEWKEY,
895 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
896 {
897 CHAR s[CCHMAXPATH + 34];
898
899 sprintf(s, GetPString(IDS_INIWASTEXT), inirec->app);
900 WinSetDlgItemText(hwnd, INII_OLDAPP, s);
901 }
902 if (!*inirec->key) {
903 WinEnableWindow(WinWindowFromID(hwnd, INII_NEWKEY), FALSE);
904 WinEnableWindow(WinWindowFromID(hwnd, INII_NEWKEYHDR), FALSE);
905 switch (inirec->action) {
906 case IDM_MOVE:
907 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INIRENAMEAPPTITLETEXT));
908 break;
909 case IDM_COPY:
910 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INICOPYAPPTITLETEXT));
911 break;
912 }
913 }
914 else {
915 {
916 CHAR s[CCHMAXPATH + 34];
917
918 sprintf(s, GetPString(IDS_INIWASTEXT), inirec->key);
919 WinSetDlgItemText(hwnd, INII_OLDKEY, s);
920 }
921 WinSetDlgItemText(hwnd, INII_NEWAPP, inirec->app);
922 WinSendDlgItemMsg(hwnd,
923 INII_NEWAPP,
924 EM_SETSEL, MPFROM2SHORT(0, CCHMAXPATH), MPVOID);
925 switch (inirec->action) {
926 case IDM_MOVE:
927 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INIRENAMEKEYTITLETEXT));
928 break;
929 case IDM_COPY:
930 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INICOPYKEYTITLETEXT));
931 break;
932 }
933 }
934 break;
935
936 case WM_COMMAND:
937 switch (SHORT1FROMMP(mp1)) {
938 case DID_OK:
939 inirec = (INIREC *) WinQueryWindowPtr(hwnd, QWL_USER);
940 if (inirec) {
941 WinQueryDlgItemText(hwnd, INII_NEWAPP, CCHMAXPATH, inirec->app2);
942 bstrip(inirec->app2);
943 if (!*inirec->app2) {
944 if (!fAlertBeepOff)
945 DosBeep(50, 100);
946 break;
947 }
948 if (*inirec->key) {
949 WinQueryDlgItemText(hwnd, INII_NEWKEY, CCHMAXPATH, inirec->key2);
950 bstrip(inirec->key2);
951 if (!*inirec->key2) {
952 if (!fAlertBeepOff)
953 DosBeep(50, 100);
954 break;
955 }
956 }
957 WinDismissDlg(hwnd, 1);
958 }
959 break;
960
961 case DID_CANCEL:
962 WinDismissDlg(hwnd, 0);
963 break;
964
965 case IDM_HELP:
966 if (hwndHelp)
967 WinSendMsg(hwndHelp,
968 HM_DISPLAY_HELP,
969 MPFROM2SHORT(HELP_INTRAINI, 0),
970 MPFROMSHORT(HM_RESOURCEID));
971 break;
972 }
973 return 0;
974 }
975 return WinDefDlgProc(hwnd, msg, mp1, mp2);
976}
977
978MRESULT EXPENTRY ChangeIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
979{
980 switch (msg) {
981 case WM_INITDLG:
982 WinSetWindowPtr(hwnd, QWL_USER, mp2);
983 WinSendDlgItemMsg(hwnd, INIR_USERPROFILE, EM_SETTEXTLIMIT,
984 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
985 WinSendDlgItemMsg(hwnd, INIR_SYSTEMPROFILE, EM_SETTEXTLIMIT,
986 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
987 break;
988
989 case WM_COMMAND:
990 switch (SHORT1FROMMP(mp1)) {
991 case INIR_FIND:
992 {
993 CHAR filename[CCHMAXPATH], *p, *ininame;
994 USHORT id = 0;
995 HWND hwndFocus;
996
997 hwndFocus = WinQueryFocus(HWND_DESKTOP);
998 if (hwndFocus)
999 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
1000 if (id != INIR_SYSTEMPROFILE)
1001 id = INIR_USERPROFILE;
1002 ininame = INSTDATA(hwnd);
1003 if (ininame && *ininame) {
1004 strcpy(filename, ininame);
1005 p = filename;
1006 while (*p) {
1007 if (*p == '/')
1008 *p = '\\';
1009 p++;
1010 }
1011 p = strrchr(filename, '\\');
1012 if (p) {
1013 p++;
1014 *p = 0;
1015 }
1016 else
1017 *filename = 0;
1018 }
1019 else
1020 *filename = 0;
1021 strcat(filename, PCSZ_STARDOTINI);
1022 if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
1023 WinSetDlgItemText(hwnd, id, filename);
1024 }
1025 break;
1026
1027 case DID_OK:
1028 {
1029 HINI testini;
1030 PRFPROFILE prfp;
1031 CHAR sysini[CCHMAXPATH];
1032 CHAR userini[CCHMAXPATH];
1033
1034 WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
1035 WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
1036 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
1037 if (testini == NULLHANDLE) {
1038 saymsg(MB_CANCEL,
1039 hwnd,
1040 GetPString(IDS_ERRORTEXT),
1041 GetPString(IDS_INICANTOPENUSERTEXT), userini);
1042 break;
1043 }
1044 CloseProfile(testini, FALSE);
1045 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
1046 if (testini == NULLHANDLE) {
1047 saymsg(MB_CANCEL,
1048 hwnd,
1049 GetPString(IDS_ERRORTEXT),
1050 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
1051 break;
1052 }
1053 CloseProfile(testini, FALSE);
1054 memset(&prfp, 0, sizeof(PRFPROFILE));
1055 prfp.cchUserName = strlen(sysini);
1056 prfp.cchSysName = strlen(userini);
1057 prfp.pszUserName = (PSZ) userini;
1058 prfp.pszSysName = (PSZ) sysini;
1059 if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
1060 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1061 GetPString(IDS_INIPRFRESETFAILEDTEXT));
1062 }
1063 else
1064 WinDismissDlg(hwnd, 1);
1065 }
1066 break;
1067
1068 case DID_CANCEL:
1069 WinDismissDlg(hwnd, 0);
1070 break;
1071
1072 case IDM_HELP:
1073 if (hwndHelp)
1074 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1075 MPFROM2SHORT(HELP_CHANGEINI, 0),
1076 MPFROMSHORT(HM_RESOURCEID));
1077 break;
1078 }
1079 return 0;
1080 }
1081 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1082}
1083
1084MRESULT EXPENTRY SwapIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1085{
1086 switch (msg) {
1087 case WM_INITDLG:
1088 WinSetWindowPtr(hwnd, QWL_USER, mp2);
1089 WinSendDlgItemMsg(hwnd,
1090 INIR_USERPROFILE,
1091 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1092 WinSendDlgItemMsg(hwnd,
1093 INIR_SYSTEMPROFILE,
1094 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1095 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INISWAPOS2INISTITLETEXT));
1096 break;
1097
1098 case WM_COMMAND:
1099 switch (SHORT1FROMMP(mp1)) {
1100 case INIR_FIND:
1101 {
1102 CHAR filename[CCHMAXPATH], *p, *ininame;
1103 USHORT id = 0;
1104 HWND hwndFocus;
1105
1106 hwndFocus = WinQueryFocus(HWND_DESKTOP);
1107 if (hwndFocus)
1108 id = WinQueryWindowUShort(hwndFocus, QWS_ID);
1109 if (id != INIR_SYSTEMPROFILE)
1110 id = INIR_USERPROFILE;
1111 ininame = INSTDATA(hwnd);
1112 if (ininame && *ininame) {
1113 strcpy(filename, ininame);
1114 p = filename;
1115 while (*p) {
1116 if (*p == '/')
1117 *p = '\\';
1118 p++;
1119 }
1120 p = strrchr(filename, '\\');
1121 if (p) {
1122 p++;
1123 *p = 0;
1124 }
1125 else
1126 *filename = 0;
1127 }
1128 else
1129 *filename = 0;
1130 strcat(filename, PCSZ_STARDOTINI);
1131 if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
1132 WinSetDlgItemText(hwnd, id, filename);
1133 }
1134 break;
1135
1136 case DID_OK:
1137 {
1138 HINI testini;
1139 PRFPROFILE prfp;
1140 CHAR sysini[CCHMAXPATH];
1141 CHAR userini[CCHMAXPATH];
1142 CHAR oldsysini[CCHMAXPATH];
1143 CHAR olduserini[CCHMAXPATH];
1144 CHAR tempsysini[CCHMAXPATH];
1145 CHAR tempuserini[CCHMAXPATH];
1146 CHAR tempsysini2[CCHMAXPATH];
1147 CHAR tempuserini2[CCHMAXPATH];
1148 CHAR *p;
1149 APIRET rc;
1150
1151 *tempuserini = 0;
1152 *tempsysini = 0;
1153 *tempuserini2 = 0;
1154 *tempsysini2 = 0;
1155 memset(&prfp, 0, sizeof(PRFPROFILE));
1156 prfp.cchUserName = CCHMAXPATH;
1157 prfp.cchSysName = CCHMAXPATH;
1158 prfp.pszUserName = (PSZ) olduserini;
1159 prfp.pszSysName = (PSZ) oldsysini;
1160 if (!PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
1161 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1162 PCSZ_INIQUERYPRFTEXT);
1163 break;
1164 }
1165 WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
1166 WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
1167 MakeFullName(userini);
1168 MakeFullName(sysini);
1169 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
1170 if (testini == NULLHANDLE) {
1171 saymsg(MB_CANCEL,
1172 hwnd,
1173 GetPString(IDS_ERRORTEXT),
1174 GetPString(IDS_INICANTOPENUSERTEXT), userini);
1175 break;
1176 }
1177 CloseProfile(testini, FALSE);
1178 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
1179 if (testini == NULLHANDLE) {
1180 saymsg(MB_CANCEL,
1181 hwnd,
1182 GetPString(IDS_ERRORTEXT),
1183 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
1184 break;
1185 }
1186 CloseProfile(testini, FALSE);
1187 /* make copies of new inis */
1188 *tempuserini = 0;
1189 *tempsysini = 0;
1190 BldFullPathName(tempuserini, pTmpDir ? pTmpDir : pFM2SaveDirectory, "TEMPUSER.INI");
1191 rc = DosCopy(userini, tempuserini, DCPY_EXISTING);
1192 if (rc) {
1193 Dos_Error(MB_CANCEL,
1194 rc,
1195 hwnd,
1196 __FILE__,
1197 __LINE__,
1198 GetPString(IDS_COMPCOPYFAILEDTEXT), userini, tempuserini);
1199 break;
1200 }
1201 BldFullPathName(tempsysini, pTmpDir ? pTmpDir : pFM2SaveDirectory, "TEMPSYS.INI");
1202 rc = DosCopy(sysini, tempsysini, DCPY_EXISTING);
1203 if (rc) {
1204 Dos_Error(MB_CANCEL,
1205 rc,
1206 hwnd,
1207 __FILE__,
1208 __LINE__,
1209 GetPString(IDS_COMPCOPYFAILEDTEXT), sysini, tempsysini);
1210 break;
1211 }
1212 memset(&prfp, 0, sizeof(PRFPROFILE));
1213 prfp.cchUserName = strlen(tempuserini);
1214 prfp.cchSysName = strlen(tempsysini);
1215 prfp.pszUserName = (PSZ) tempuserini;
1216 prfp.pszSysName = (PSZ) tempsysini;
1217 if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
1218 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1219 GetPString(IDS_INIPRFRESETFAILEDTEXT));
1220 }
1221 else {
1222 /* backup old inis */
1223 strcpy(tempuserini2, olduserini);
1224 p = strrchr(tempuserini2, '\\');
1225 if (!p)
1226 *tempuserini2 = 0;
1227 else {
1228 p++;
1229 *p = 0;
1230 }
1231 strcat(tempuserini2, "OS2INI.BAK");
1232 rc = DosCopy(olduserini, tempuserini2, DCPY_EXISTING);
1233 if (rc) {
1234 Dos_Error(MB_CANCEL,
1235 rc,
1236 hwnd,
1237 __FILE__,
1238 __LINE__,
1239 GetPString(IDS_COMPCOPYFAILEDTEXT),
1240 olduserini, tempuserini2);
1241 WinDismissDlg(hwnd, 1);
1242 break;
1243 }
1244 strcpy(tempsysini2, oldsysini);
1245 p = strrchr(tempsysini2, '\\');
1246 if (!p)
1247 *tempsysini2 = 0;
1248 else {
1249 p++;
1250 *p = 0;
1251 }
1252 strcat(tempsysini2, "OS2SYINI.BAK");
1253 rc = DosCopy(oldsysini, tempsysini2, DCPY_EXISTING);
1254 if (rc) {
1255 Dos_Error(MB_CANCEL,
1256 rc,
1257 hwnd,
1258 __FILE__,
1259 __LINE__,
1260 GetPString(IDS_COMPCOPYFAILEDTEXT),
1261 oldsysini, tempsysini2);
1262 WinDismissDlg(hwnd, 1);
1263 break;
1264 }
1265 /* copy new inis to old ini names */
1266 rc = DosCopy(userini, olduserini, DCPY_EXISTING);
1267 if (rc) {
1268 Dos_Error(MB_CANCEL,
1269 rc,
1270 hwnd,
1271 __FILE__,
1272 __LINE__,
1273 GetPString(IDS_COMPCOPYFAILEDTEXT),
1274 userini, olduserini);
1275 WinDismissDlg(hwnd, 1);
1276 break;
1277 }
1278 rc = DosCopy(sysini, oldsysini, DCPY_EXISTING);
1279 if (rc) {
1280 Dos_Error(MB_CANCEL,
1281 rc,
1282 hwnd,
1283 __FILE__,
1284 __LINE__,
1285 GetPString(IDS_COMPCOPYFAILEDTEXT),
1286 userini, olduserini);
1287 WinDismissDlg(hwnd, 1);
1288 break;
1289 }
1290 /* replace temp inis with new permanent inis */
1291 memset(&prfp, 0, sizeof(PRFPROFILE));
1292 prfp.cchUserName = strlen(oldsysini);
1293 prfp.cchSysName = strlen(olduserini);
1294 prfp.pszUserName = (PSZ) olduserini;
1295 prfp.pszSysName = (PSZ) oldsysini;
1296 if (!PrfReset(WinQueryAnchorBlock(hwnd), &prfp)) {
1297 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1298 GetPString(IDS_INIPRFRESETFAILEDTEXT));
1299 }
1300 else {
1301 Notify(GetPString(IDS_SUCCESSTEXT));
1302 unlinkf(tempuserini);
1303 unlinkf(tempsysini);
1304 }
1305 WinDismissDlg(hwnd, 1);
1306 }
1307 }
1308 break;
1309
1310 case DID_CANCEL:
1311 WinDismissDlg(hwnd, 0);
1312 break;
1313
1314 case IDM_HELP:
1315 if (hwndHelp)
1316 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1317 MPFROM2SHORT(HELP_SWAPINI, 0), MPFROMSHORT(HM_RESOURCEID));
1318 break;
1319 }
1320 return 0;
1321 }
1322 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1323}
1324
1325MRESULT EXPENTRY AddIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1326{
1327 INIDATA *inidata = INSTDATA(hwnd);
1328 size_t l;
1329
1330 switch (msg) {
1331 case WM_INITDLG:
1332 if (!mp2) {
1333 WinDismissDlg(hwnd, 0);
1334 break;
1335 }
1336 inidata = (INIDATA *) mp2;
1337 if (inidata->edit)
1338 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INIEDITINITITLETEXT));
1339 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) mp2);
1340 WinSendDlgItemMsg(hwnd,
1341 IAD_APPNAME,
1342 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1343 WinSendDlgItemMsg(hwnd,
1344 IAD_KEYNAME,
1345 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1346 WinSendDlgItemMsg(hwnd,
1347 IAD_DATA,
1348 EM_SETTEXTLIMIT, MPFROM2SHORT(32767, 0), MPVOID);
1349 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1350 WinSetDlgItemText(hwnd, IAD_APPNAME, inidata->applname);
1351 if (inidata->edit) {
1352 WinSetDlgItemText(hwnd, IAD_KEYNAME, inidata->keyname);
1353 if (inidata->data && inidata->datalen) {
1354
1355 CHAR *p;
1356
1357 inidata->isbinary = FALSE;
1358 p = inidata->data;
1359 while ((p - inidata->data) < inidata->datalen - 1) {
1360 if (*p < ' ' || !isprint(*p)) {
1361 inidata->isbinary = TRUE;
1362 break;
1363 }
1364 p++;
1365 }
1366 if (inidata->isbinary) {
1367 inidata->isbinary = TRUE;
1368 WinCheckButton(hwnd, IAD_ISBINARY, TRUE);
1369 if (saymsg(MB_ENTERCANCEL | MB_ICONEXCLAMATION,
1370 hwnd,
1371 GetPString(IDS_WARNINGTEXT),
1372 GetPString(IDS_INIBINARYDATASKIPTEXT)) == MBID_CANCEL)
1373 WinDismissDlg(hwnd, 0);
1374 l = inidata->datalen * 4 + 1;
1375 p = xmallocz(l, pszSrcFile, __LINE__);
1376 if (p) {
1377 fixup(inidata->data, p, l, inidata->datalen);
1378 WinSetDlgItemText(hwnd, IAD_DATA, p);
1379 free(p);
1380 }
1381 }
1382 else
1383 WinSetDlgItemText(hwnd, IAD_DATA, inidata->data);
1384 }
1385 PostMsg(hwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
1386 }
1387 else
1388 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
1389 {
1390 CHAR s[32];
1391
1392 *s = 0;
1393 WinQueryDlgItemText(hwnd, IAD_DATA, 32, s);
1394 if (*s)
1395 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), TRUE);
1396 }
1397 WinSendDlgItemMsg(hwnd, IAD_APPNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
1398 WinSendDlgItemMsg(hwnd, IAD_KEYNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
1399 WinSendDlgItemMsg(hwnd, IAD_DATA, EM_QUERYCHANGED, MPVOID, MPVOID);
1400 break;
1401
1402 case UM_SETDIR:
1403 if (mp1)
1404 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_DATA));
1405 else
1406 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_KEYNAME));
1407 return 0;
1408
1409 case UM_SETUP:
1410 saymsg(MB_ENTER | MB_ICONASTERISK,
1411 hwnd,
1412 GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIAPPKEYEXISTSTEXT));
1413 return 0;
1414
1415 case WM_CONTROL:
1416 switch (SHORT2FROMMP(mp1)) {
1417 case EN_KILLFOCUS:
1418 inidata = INSTDATA(hwnd);
1419 if (!inidata)
1420 Runtime_Error(pszSrcFile, __LINE__, NULL);
1421 else {
1422 CHAR s[CCHMAXPATH], applname[CCHMAXPATH];
1423 BOOL appchanged = FALSE, keychanged = FALSE;
1424
1425 *applname = 0;
1426 WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
1427 bstrip(applname);
1428 if (*applname) {
1429 *s = 0;
1430 WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, s);
1431 bstrip(s);
1432 if (*s) {
1433 appchanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_APPNAME,
1434 EM_QUERYCHANGED,
1435 MPVOID, MPVOID);
1436 keychanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_KEYNAME,
1437 EM_QUERYCHANGED,
1438 MPVOID, MPVOID);
1439 if (appchanged || keychanged) {
1440
1441 ULONG size = 0L;
1442
1443 if (PrfQueryProfileSize(inidata->hini, applname, s, &size))
1444 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1445 }
1446 *s = 0;
1447 WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, s);
1448 bstrip(s);
1449 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), (*s != 0));
1450 }
1451 else
1452 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1453 }
1454 else
1455 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1456 }
1457 break;
1458 }
1459 return 0;
1460
1461 case WM_COMMAND:
1462 switch (SHORT1FROMMP(mp1)) {
1463 case DID_OK:
1464 {
1465 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH], data[CCHMAXPATH];
1466 INT len;
1467
1468 inidata = INSTDATA(hwnd);
1469 if (!inidata) {
1470 Runtime_Error(pszSrcFile, __LINE__, NULL);
1471 break;
1472 }
1473 inidata->isbinary = WinQueryButtonCheckstate(hwnd, IAD_ISBINARY);
1474 *applname = 0;
1475 WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
1476 bstrip(applname);
1477 if (*applname) {
1478 *keyname = 0;
1479 WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, keyname);
1480 bstrip(keyname);
1481 if (*keyname) {
1482 *data = 0;
1483 WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, data);
1484 if (*data) {
1485 if (inidata->isbinary)
1486 len = literal(data);
1487 else
1488 len = strlen(data) + 1;
1489 PrfWriteProfileData(inidata->hini, applname, keyname, data,
1490 (ULONG) len);
1491 WinSendMsg(inidata->hwndIni, UM_RESCAN,
1492 MPFROMP(applname), MPFROMP(keyname));
1493 WinDismissDlg(hwnd, 1);
1494 }
1495 }
1496 }
1497 }
1498 break;
1499
1500 case DID_CANCEL:
1501 WinDismissDlg(hwnd, 0);
1502 break;
1503
1504 case IDM_HELP:
1505 if (hwndHelp)
1506 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1507 MPFROM2SHORT(HELP_INIADD, 0), MPFROMSHORT(HM_RESOURCEID));
1508 break;
1509 }
1510 return 0;
1511 }
1512 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1513}
1514
1515static ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
1516 FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
1517
1518HWND StartIniEditor(HWND hwnd, CHAR *fname, INT flags)
1519{
1520 /*
1521 * create an ini editor window
1522 * bitmapped flags:
1523 * 2 = don't position window for non-desktop client
1524 * 4 = don't kill proc when closed
1525 */
1526
1527 HWND hwndFrame, hwndClient;
1528 HINI hINI;
1529 HAB useHab = (HAB) 0;
1530 CHAR *filename = NULL;
1531
1532 if (fExternalINIs || strcmp(realappname, FM3Str))
1533 hwnd = HWND_DESKTOP;
1534 if (hwnd != HWND_DESKTOP)
1535 useHab = WinQueryAnchorBlock(hwnd);
1536 if (fname && *fname) {
1537 filename = xstrdup(fname, pszSrcFile, __LINE__);
1538 if (!filename)
1539 return (HWND) 0;
1540 hINI = PrfOpenProfile(useHab, filename);
1541 if (hINI == NULLHANDLE) {
1542 free(filename);
1543 return (HWND) 0;
1544 }
1545 else
1546 CloseProfile(hINI, FALSE);
1547 }
1548
1549 if (ParentIsDesktop(hwnd, hwnd))
1550 flFrameFlags |= FCF_TASKLIST;
1551 hwndFrame = WinCreateStdWindow(hwnd,
1552 0,
1553 &flFrameFlags,
1554 (CHAR *) WC_INIEDITOR,
1555 NullStr,
1556 fwsAnimate,
1557 FM3ModHandle, INI_FRAME, &hwndClient);
1558 if (hwndFrame) {
1559 WinSetWindowUShort(hwndFrame, QWS_ID, INI_FRAME);
1560 if (!ParentIsDesktop(hwndFrame, hwnd) && !(flags & 2)) {
1561
1562 SWP swp;
1563
1564 FillClient(hwnd, &swp, NULL, FALSE);
1565 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1566 SWP_SIZE | SWP_MOVE);
1567 }
1568 else if (ParentIsDesktop(hwndFrame, hwnd)) {
1569 if (!WinRestoreWindowPos((CHAR *) FM2Str, "INIWindowPos", hwndFrame)) {
1570
1571 ULONG fl = SWP_MOVE | SWP_SIZE;
1572 SWP swp;
1573
1574 WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame), 0L, &swp);
1575 if (swp.fl & (SWP_MINIMIZE | SWP_HIDE))
1576 fl = swp.fl;
1577 else if (swp.fl & SWP_ACTIVATE)
1578 fl |= SWP_ACTIVATE;
1579 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1580 fl);
1581 }
1582 }
1583 PostMsg(hwndClient, UM_SELECT, MPVOID, MPVOID);
1584 PostMsg(hwndClient, UM_ACTION, MPVOID, MPVOID);
1585 if (!PostMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1586 filename : NULL)), MPVOID))
1587 WinSendMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1588 filename : NULL)), MPVOID);
1589 if (flags & 4)
1590 PostMsg(hwndClient, UM_INITIALSIZE, MPVOID, MPVOID);
1591 }
1592 else
1593 free(filename);
1594 return hwndFrame;
1595}
1596
1597MRESULT EXPENTRY IniLBSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1598{
1599 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1600 static HWND hwndPopup = (HWND) 0;
1601
1602 switch (msg) {
1603 case WM_SETFOCUS:
1604 if (mp2)
1605 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1606 break;
1607
1608 case WM_MENUEND:
1609 if (hwndPopup == (HWND) mp2) {
1610 WinDestroyWindow(hwndPopup);
1611 hwndPopup = (HWND) 0;
1612 }
1613 break;
1614
1615 case WM_CONTEXTMENU:
1616 {
1617 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
1618
1619 switch (id) {
1620 case INI_APPLIST:
1621 id = INI_APPMENU;
1622 break;
1623 case INI_KEYLIST:
1624 id = INI_KEYMENU;
1625 break;
1626 default:
1627 id = 0;
1628 break;
1629 }
1630 if (id) {
1631 if (hwndPopup)
1632 WinDestroyWindow(hwndPopup);
1633 hwndPopup = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
1634 if (hwndPopup)
1635 WinPopupMenu(hwnd, WinQueryWindow(hwnd, QW_PARENT),
1636 hwndPopup, 8, 8, 0,
1637 PU_HCONSTRAIN | PU_VCONSTRAIN |
1638 PU_KEYBOARD | PU_MOUSEBUTTON1);
1639 }
1640 }
1641 break;
1642
1643 case WM_BEGINDRAG:
1644 {
1645 PDRAGINFO pDInfo;
1646 DRAGITEM DItem;
1647 DRAGIMAGE DIcon;
1648 INIDATA *inidata;
1649 HPOINTER hptrINI;
1650 USHORT id;
1651 HWND hDrop = 0;
1652
1653 id = WinQueryWindowUShort(hwnd, QWS_ID);
1654 inidata = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
1655 if (!inidata || !*inidata->ininame || !*inidata->applname ||
1656 !inidata->keyname) {
1657 if (!fAlertBeepOff)
1658 DosBeep(50, 100);
1659 break;
1660 }
1661 hptrINI = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, INI_FRAME);
1662 memset(&DItem, 0, sizeof(DItem));
1663 memset(&DIcon, 0, sizeof(DIcon));
1664 DIcon.cb = sizeof(DIcon);
1665 DIcon.cptl = 0;
1666 DIcon.hImage = hptrINI;
1667 DIcon.fl = DRG_ICON;
1668 DIcon.sizlStretch.cx = 32;
1669 DIcon.sizlStretch.cy = 32;
1670 DIcon.cxOffset = -16;
1671 DIcon.cyOffset = 0;
1672 DItem.hwndItem = hwnd;
1673 DItem.ulItemID = 0L;
1674 DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
1675 DItem.hstrRMF = DrgAddStrHandle("<DRM_FM2INIRECORD,DRF_FM2INI>");
1676 DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame);
1677 DItem.hstrSourceName = DrgAddStrHandle(inidata->applname);
1678 if (id == INI_APPLIST)
1679 DItem.hstrTargetName = DrgAddStrHandle(NullStr);
1680 else
1681 DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
1682 DItem.fsControl = 0;
1683 DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
1684 pDInfo = DrgAllocDraginfo(1L);
1685 DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
1686 hDrop = DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
1687 if (hDrop == NULLHANDLE)
1688 FreeDragInfoData(hwnd, pDInfo);
1689 WinDestroyPointer(hptrINI);
1690 }
1691 break;
1692
1693 case DM_DRAGOVER:
1694 {
1695 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1696 PDRAGITEM pDItem;
1697
1698 if (!DrgAccessDraginfo(pDInfo)) {
1699 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1700 PCSZ_DRGACCESSDRAGINFO);
1701 }
1702 else {
1703 pDItem = DrgQueryDragitemPtr(pDInfo,0);
1704 /* Check valid rendering mechanisms and data */
1705 if (DrgVerifyRMF(pDItem, (CHAR *) DRM_OS2FILE, NULL)) {
1706 DrgFreeDraginfo(pDInfo);
1707 return (MRFROM2SHORT(DOR_DROP, DO_LINK)); /* OK to drop */
1708 }
1709 else if (DrgVerifyRMF(pDItem, (CHAR *) DRM_FM2INIRECORD, (CHAR *) DRF_FM2INI)) {
1710 if (WinQueryWindow(pDInfo->hwndSource, QW_PARENT) !=
1711 WinQueryWindow(hwnd, QW_PARENT))
1712 {
1713 DrgFreeDraginfo(pDInfo);
1714 return (MRFROM2SHORT(DOR_DROP, ((fCopyDefault) ? DO_COPY : DO_MOVE)));
1715 }
1716 }
1717 DrgFreeDraginfo(pDInfo);
1718 }
1719 }
1720 return MRFROM2SHORT(DOR_NEVERDROP, 0);
1721
1722 case DM_DRAGLEAVE:
1723
1724 break;
1725
1726 case DM_DROP:
1727 {
1728 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1729 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
1730 ULONG numitems, curitem, len;
1731 USHORT action;
1732 CHAR szFrom[CCHMAXPATH + 2], szDir[CCHMAXPATH + 1],
1733 szTemp[CCHMAXPATH + 2];
1734 FILESTATUS3 fsa;
1735 INIREC inirec;
1736
1737 if (!DrgAccessDraginfo(pDInfo)) {
1738 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1739 PCSZ_DRGACCESSDRAGINFO);
1740 return 0;
1741 }
1742 numitems = DrgQueryDragitemCount(pDInfo);
1743 for (curitem = 0; curitem < numitems; curitem++) {
1744 pDItem = DrgQueryDragitemPtr(pDInfo, curitem);
1745 if (DrgVerifyRMF(pDItem, (CHAR *) DRM_OS2FILE, NULL)) {
1746 if (pDItem->fsControl & DC_PREPARE)
1747 DrgSendTransferMsg(pDItem->hwndItem,
1748 DM_ENDCONVERSATION,
1749 MPFROMLONG(pDItem->ulItemID),
1750 MPFROMLONG(DMFL_TARGETFAIL));
1751 else {
1752 if (FullDrgName(pDItem, szFrom, sizeof(szFrom)) &&
1753 !DosQueryPathInfo(szFrom, FIL_STANDARD, &fsa, sizeof(fsa)))
1754 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1755 MPFROM2SHORT(IDM_COMPARE, 0), MPFROMP(szFrom));
1756 DrgSendTransferMsg(pDItem->hwndItem,
1757 DM_ENDCONVERSATION,
1758 MPFROMLONG(pDItem->ulItemID),
1759 MPFROMLONG(DMFL_TARGETFAIL));
1760 }
1761 }
1762 else if (DrgVerifyRMF(pDItem, (CHAR *) DRM_FM2INIRECORD, (CHAR *) DRF_FM2INI)) {
1763 *szDir = *szFrom = *szTemp = 0;
1764 len = DrgQueryStrName(pDItem->hstrContainerName, CCHMAXPATH, szDir);
1765 szDir[len] = 0;
1766 len = DrgQueryStrName(pDItem->hstrSourceName, CCHMAXPATH, szFrom);
1767 szFrom[len] = 0;
1768 len = DrgQueryStrName(pDItem->hstrTargetName, CCHMAXPATH, szTemp);
1769 szTemp[len] = 0;
1770 switch (pDInfo->usOperation) {
1771 case DO_MOVE:
1772 action = IDM_MOVE;
1773 break;
1774 case DO_COPY:
1775 action = IDM_COPY;
1776 break;
1777 default:
1778 action = IDM_INFO;
1779 break;
1780 }
1781 memset(&inirec, 0, sizeof(inirec));
1782 inirec.size = sizeof(inirec);
1783 strcpy(inirec.filename2, szDir);
1784 strcpy(inirec.app, szFrom);
1785 strcpy(inirec.key, szTemp);
1786 inirec.action = action;
1787 inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource, QW_PARENT);
1788 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1789 MPFROM2SHORT(action, 0), MPFROMP(&inirec));
1790 DrgSendTransferMsg(pDItem->hwndItem,
1791 DM_ENDCONVERSATION,
1792 MPFROMLONG(pDItem->ulItemID),
1793 MPFROMLONG(DMFL_TARGETFAIL));
1794 }
1795 } // for
1796 FreeDragInfoData(hwnd, pDInfo);
1797 }
1798 return 0;
1799
1800 case WM_DESTROY:
1801 if (hwndPopup)
1802 WinDestroyWindow(hwndPopup);
1803 hwndPopup = (HWND) 0;
1804 break;
1805 } // switch
1806 if (oldproc)
1807 return oldproc(hwnd, msg, mp1, mp2);
1808 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1809}
1810
1811MRESULT EXPENTRY IniLBSubProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1812{
1813 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1814
1815 switch (msg) {
1816 case WM_SETFOCUS:
1817 if (mp2)
1818 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1819 break;
1820 }
1821 if (oldproc)
1822 return oldproc(hwnd, msg, mp1, mp2);
1823 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1824}
1825
1826MRESULT EXPENTRY IniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1827{
1828 INIDATA *inidata;
1829 SHORT sSel;
1830 PFNWP oldproc;
1831
1832 switch (msg) {
1833 case WM_CREATE:
1834 inidata = xmallocz(sizeof(INIDATA), pszSrcFile, __LINE__);
1835 if (!inidata) {
1836 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1837 break;
1838 }
1839 inidata->size = sizeof(INIDATA);
1840 inidata->confirm = TRUE;
1841 inidata->currid = INI_APPLIST;
1842 inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1843 FID_MENU);
1844 inidata->hwndIni = hwnd;
1845 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) inidata);
1846 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
1847
1848 if (!WinCreateWindow
1849 (hwnd, WC_LISTBOX, (PSZ) NULL,
1850 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1851 HWND_TOP, INI_APPLIST, NULL, NULL)) {
1852 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1853 PCSZ_WINCREATEWINDOW);
1854 }
1855 if (!WinCreateWindow
1856 (hwnd, WC_LISTBOX, (PSZ) NULL,
1857 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1858 HWND_TOP, INI_KEYLIST, NULL, NULL)) {
1859 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1860 PCSZ_WINCREATEWINDOW);
1861 }
1862 if (!WinCreateWindow
1863 (hwnd, WC_LISTBOX, (PSZ) NULL,
1864 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1865 HWND_TOP, INI_DATALIST, 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_NUMAPPS, 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_NUMKEYS, NULL, NULL)) {
1878 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1879 PCSZ_WINCREATEWINDOW);
1880 }
1881 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1882 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1883 INI_NUMDATA, NULL, NULL)) {
1884 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1885 PCSZ_WINCREATEWINDOW);
1886 }
1887 if (!WinCreateWindow(hwnd,
1888 WC_STATIC,
1889 (CHAR *) GetPString(IDS_APPLICATIONSTITLETEXT),
1890 WS_VISIBLE | SS_TEXT |
1891 DT_CENTER | DT_VCENTER,
1892 0,
1893 0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL)) {
1894 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1895 PCSZ_WINCREATEWINDOW);
1896 }
1897 if (!WinCreateWindow(hwnd,
1898 WC_STATIC,
1899 (CHAR *) GetPString(IDS_KEYWORDSTITLETEXT),
1900 WS_VISIBLE | SS_TEXT |
1901 DT_CENTER | DT_VCENTER,
1902 0,
1903 0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL)) {
1904 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1905 PCSZ_WINCREATEWINDOW);
1906 }
1907 if (!WinCreateWindow(hwnd,
1908 WC_STATIC,
1909 (CHAR *) GetPString(IDS_DATABYTESTITLETEXT),
1910 WS_VISIBLE | SS_TEXT |
1911 DT_CENTER | DT_VCENTER,
1912 0,
1913 0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL)) {
1914 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1915 PCSZ_WINCREATEWINDOW);
1916 }
1917
1918 inidata->hwndApp = WinWindowFromID(hwnd, INI_APPLIST);
1919 inidata->hwndKey = WinWindowFromID(hwnd, INI_KEYLIST);
1920 inidata->hwndData = WinWindowFromID(hwnd, INI_DATALIST);
1921
1922 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_APPLIST),
1923 IniLBSubProc);
1924 WinSetWindowPtr(WinWindowFromID(hwnd, INI_APPLIST),
1925 QWL_USER, (PVOID) oldproc);
1926 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_KEYLIST),
1927 IniLBSubProc);
1928 WinSetWindowPtr(WinWindowFromID(hwnd, INI_KEYLIST),
1929 QWL_USER, (PVOID) oldproc);
1930 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_DATALIST),
1931 IniLBSubProc2);
1932 WinSetWindowPtr(WinWindowFromID(hwnd, INI_DATALIST),
1933 QWL_USER, (PVOID) oldproc);
1934 break;
1935
1936 case UM_FOCUSME:
1937 case WM_SETFOCUS:
1938 if (mp2) {
1939 if (hwndMain && fAutoView)
1940 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1941 inidata = INSTDATA(hwnd);
1942 if (!inidata)
1943 Runtime_Error(pszSrcFile, __LINE__, NULL);
1944 else if (hwndStatus) {
1945 if (*inidata->ininame) {
1946 WinSetWindowText(hwndStatus, (CHAR *) GetPString(IDS_INTERNALINIVIEWERTEXT));
1947 if (hwndStatus2)
1948 WinSetWindowText(hwndStatus2, inidata->ininame);
1949 }
1950 else
1951 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1952 }
1953 }
1954 if (msg == WM_SETFOCUS)
1955 break;
1956 return 0;
1957
1958 case UM_SELECT:
1959 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, INI_APPLIST));
1960 break;
1961
1962 case UM_ACTION:
1963 SetPresParams(WinWindowFromID(hwnd, INI_APPHDR),
1964 &RGBGREY,
1965 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1966 SetPresParams(WinWindowFromID(hwnd, INI_KEYHDR),
1967 &RGBGREY,
1968 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1969 SetPresParams(WinWindowFromID(hwnd, INI_DATAHDR),
1970 &RGBGREY,
1971 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1972 SetPresParams(WinWindowFromID(hwnd, INI_NUMAPPS),
1973 &RGBGREY,
1974 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1975 SetPresParams(WinWindowFromID(hwnd, INI_NUMKEYS),
1976 &RGBGREY,
1977 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1978 SetPresParams(WinWindowFromID(hwnd, INI_NUMDATA),
1979 &RGBGREY,
1980 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1981 if (!WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1982 PP_FONTNAMESIZE,
1983 strlen(FNT_10SYSTEMMONOTEXT) + 1,
1984 (PVOID) FNT_10SYSTEMMONOTEXT))
1985 WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1986 PP_FONTNAMESIZE,
1987 strlen(FNT_10SYSTEMMONOTEXT) + 1,
1988 (PVOID) FNT_10SYSTEMMONOTEXT);
1989 RestorePresParams(hwnd, "IniUtil");
1990 return 0;
1991
1992 case WM_PRESPARAMCHANGED:
1993 PresParamChanged(hwnd, "IniUtil", mp1, mp2);
1994 break;
1995
1996 case UM_RESCAN:
1997 inidata = INSTDATA(hwnd);
1998 if (!inidata)
1999 Runtime_Error(pszSrcFile, __LINE__, NULL);
2000 else if (mp1) {
2001 SHORT sSelect;
2002 BOOL inprofile;
2003 ULONG size;
2004 SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2005 INI_APPLIST,
2006 LM_QUERYITEMCOUNT,
2007 MPVOID, MPVOID);
2008 if (!numitems) {
2009 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2010 return 0;
2011 }
2012 size = 0;
2013 if (PrfQueryProfileSize(inidata->hini,
2014 (CHAR *)mp1, NULL, (PULONG) & size) && size)
2015 inprofile = TRUE;
2016 else
2017 inprofile = FALSE;
2018 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2019 INI_APPLIST,
2020 LM_SEARCHSTRING,
2021 MPFROM2SHORT(LSS_CASESENSITIVE,
2022 LIT_FIRST),
2023 MPFROMP((CHAR *)mp1));
2024 if (sSelect >= 0) {
2025 if (!inprofile)
2026 WinSendDlgItemMsg(hwnd,
2027 INI_APPLIST,
2028 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
2029 else if (!strcmp(inidata->applname, (CHAR *)mp1))
2030 PostMsg(hwnd,
2031 WM_CONTROL,
2032 MPFROM2SHORT(INI_APPLIST, LN_SELECT),
2033 MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
2034 }
2035 else if (inprofile)
2036 WinSendDlgItemMsg(hwnd,
2037 INI_APPLIST,
2038 LM_INSERTITEM,
2039 MPFROM2SHORT(LIT_SORTASCENDING, 0),
2040 MPFROMP((CHAR *)mp1));
2041 if (mp2 && inidata->applname) {
2042 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2043 inidata->hini, inidata->applname))
2044 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2045 }
2046 }
2047 return 0;
2048
2049 case UM_INITIALSIZE: /* kludge */
2050 inidata = INSTDATA(hwnd);
2051 if (!inidata)
2052 Runtime_Error(pszSrcFile, __LINE__, NULL);
2053 else
2054 inidata->dontclose = TRUE;
2055 return 0;
2056
2057 case WM_SIZE:
2058 {
2059 SHORT cx = SHORT1FROMMP(mp2);
2060 SHORT cy = SHORT2FROMMP(mp2);
2061
2062 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPHDR), HWND_TOP,
2063 2, cy - 22, (cx / 4) - 4, 20, SWP_MOVE | SWP_SIZE);
2064 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMAPPS), HWND_TOP,
2065 (cx / 4) + 2, cy - 22, (cx / 4) - 4, 20,
2066 SWP_MOVE | SWP_SIZE);
2067 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPLIST), HWND_TOP,
2068 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
2069 SWP_MOVE | SWP_SIZE);
2070 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYHDR), HWND_TOP,
2071 (cx / 2) + 2, cy - 22, (cx / 4) - 4, 20,
2072 SWP_MOVE | SWP_SIZE);
2073 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMKEYS), HWND_TOP,
2074 (cx - (cx / 4)) + 2, cy - 22, (cx / 4) - 4, 20,
2075 SWP_MOVE | SWP_SIZE);
2076 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYLIST), HWND_TOP,
2077 (cx / 2) + 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
2078 SWP_MOVE | SWP_SIZE);
2079 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATAHDR), HWND_TOP,
2080 2, (cy / 2) - 22, (cx / 2) - 4, 20,
2081 SWP_MOVE | SWP_SIZE);
2082 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMDATA), HWND_TOP,
2083 (cx / 2) + 2, (cy / 2) - 22, (cx / 2) - 4, 20,
2084 SWP_MOVE | SWP_SIZE);
2085 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATALIST), HWND_TOP,
2086 2, 2, cx - 4, (cy / 2) - 28, SWP_MOVE | SWP_SIZE);
2087 }
2088 break;
2089
2090 case UM_LOADFILE:
2091 /* load initial file */
2092 inidata = INSTDATA(hwnd);
2093 if (!inidata)
2094 Runtime_Error(pszSrcFile, __LINE__, NULL);
2095 else {
2096 if (mp1) {
2097 if (!strcmp((CHAR *)mp1, "SYS")) {
2098 inidata->hini = HINI_SYSTEMPROFILE;
2099 free(mp1);
2100 }
2101 else
2102 {
2103 strcpy(inidata->ininame, (CHAR *)mp1);
2104 inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
2105 inidata->ininame);
2106 free(mp1);
2107 }
2108 }
2109 else
2110 inidata->hini = HINI_USERPROFILE;
2111 if (inidata->hini == NULLHANDLE) {
2112 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
2113 PCSZ_PRFOPENPROFILEFAILED, inidata->ininame);
2114 }
2115 else {
2116 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2117 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2118 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
2119 HWND_TOP,
2120 0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
2121 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2122 return 0;
2123 }
2124 }
2125 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2126 return 0;
2127
2128 case WM_ERASEBACKGROUND:
2129 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
2130 return 0;
2131
2132 case WM_PAINT:
2133 {
2134 HPS hps;
2135 RECTL rcl;
2136
2137 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2138 if (hps) {
2139 WinQueryWindowRect(hwnd, &rcl);
2140 WinFillRect(hps, &rcl, CLR_PALEGRAY);
2141 WinEndPaint(hps);
2142 /*
2143 * tell status window to paint its box
2144 */
2145 PaintRecessedWindow(WinWindowFromID(hwnd, INI_APPHDR),
2146 (HPS) 0, FALSE, FALSE);
2147 PaintRecessedWindow(WinWindowFromID(hwnd, INI_KEYHDR),
2148 (HPS) 0, FALSE, FALSE);
2149 PaintRecessedWindow(WinWindowFromID(hwnd, INI_DATAHDR),
2150 (HPS) 0, FALSE, FALSE);
2151 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMAPPS),
2152 (HPS) 0, FALSE, FALSE);
2153 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMKEYS),
2154 (HPS) 0, FALSE, FALSE);
2155 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMDATA),
2156 (HPS) 0, FALSE, FALSE);
2157 inidata = INSTDATA(hwnd);
2158 if (!inidata)
2159 Runtime_Error(pszSrcFile, __LINE__, NULL);
2160 else if (inidata->hwndCurrent)
2161 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
2162 }
2163 }
2164 break;
2165
2166 case WM_CONTROL:
2167 switch (SHORT1FROMMP(mp1)) {
2168 case INI_KEYLIST:
2169 case INI_APPLIST:
2170 case INI_DATALIST:
2171 switch (SHORT2FROMMP(mp1)) {
2172 case LN_SETFOCUS:
2173 inidata = INSTDATA(hwnd);
2174 if (!inidata)
2175 Runtime_Error(pszSrcFile, __LINE__, NULL);
2176 else {
2177 if (inidata->hwndCurrent)
2178 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
2179 inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1));
2180 BoxWindow(WinWindowFromID(hwnd,
2181 SHORT1FROMMP(mp1)), (HPS) 0, CLR_RED);
2182 }
2183 break;
2184
2185 case LN_ENTER:
2186 case LN_SELECT:
2187 {
2188 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
2189 SHORT sSelect;
2190
2191 if (SHORT1FROMMP(mp1) == INI_DATALIST)
2192 break;
2193
2194 inidata = INSTDATA(hwnd);
2195 if (!inidata || !inidata->hini) {
2196 Runtime_Error(pszSrcFile, __LINE__, NULL);
2197 break;
2198 }
2199 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2200 inidata->keyindex = inidata->appindex = 0;
2201 *applname = *keyname = *inidata->applname = *inidata->keyname = 0;
2202 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2203 INI_APPLIST,
2204 LM_QUERYSELECTION,
2205 MPFROM2SHORT(LIT_FIRST, 0),
2206 MPVOID);
2207 if (sSelect < 0)
2208 break;
2209 inidata->appindex = sSelect;
2210 WinSendDlgItemMsg(hwnd,
2211 INI_APPLIST,
2212 LM_QUERYITEMTEXT,
2213 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2214 MPFROMP(applname));
2215 if (SHORT1FROMMP(mp1) == INI_APPLIST) {
2216 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2217 inidata->hini, applname))
2218 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2219 }
2220 else {
2221 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, INI_KEYLIST,
2222 LM_QUERYSELECTION,
2223 MPFROM2SHORT(LIT_FIRST, 0),
2224 MPVOID);
2225 if (sSelect < 0)
2226 break;
2227 inidata->keyindex = sSelect;
2228 WinSendDlgItemMsg(hwnd,
2229 INI_KEYLIST,
2230 LM_QUERYITEMTEXT,
2231 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2232 MPFROMP(keyname));
2233 if (!*keyname || !*applname)
2234 break;
2235 strcpy(inidata->keyname, keyname);
2236 strcpy(inidata->applname, applname);
2237 xfree(inidata->data, pszSrcFile, __LINE__);
2238 inidata->data = GetKeyData(WinWindowFromID(hwnd,
2239 INI_DATALIST),
2240 inidata->hini,
2241 applname, keyname, &inidata->datalen);
2242 if (!inidata->data)
2243 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2244 }
2245 }
2246 break;
2247 }
2248 break;
2249 }
2250 return 0;
2251
2252 case UM_SETDIR:
2253 {
2254 SHORT num;
2255 CHAR s[81];
2256
2257 num = (SHORT) WinSendDlgItemMsg(hwnd,
2258 INI_APPLIST,
2259 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2260 sprintf(s, "%u", num);
2261 WinSetDlgItemText(hwnd, INI_NUMAPPS, s);
2262 num = (SHORT) WinSendDlgItemMsg(hwnd,
2263 INI_KEYLIST,
2264 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2265 sprintf(s, "%u", num);
2266 WinSetDlgItemText(hwnd, INI_NUMKEYS, s);
2267 WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
2268 WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
2269 // inidata = WinQueryWindowPtr(hwnd, QWL_USER); // 09 Jan 08 SHL
2270 }
2271 return 0;
2272
2273 case UM_SETUP:
2274 inidata = INSTDATA(hwnd);
2275 if (!inidata)
2276 Runtime_Error(pszSrcFile, __LINE__, NULL);
2277 else {
2278 PRFPROFILE prfp;
2279 CHAR sysini[CCHMAXPATH + 81];
2280 CHAR userini[CCHMAXPATH];
2281
2282 memset(&prfp, 0, sizeof(PRFPROFILE));
2283 prfp.cchUserName = CCHMAXPATH;
2284 prfp.cchSysName = CCHMAXPATH;
2285 prfp.pszUserName = (PSZ) userini;
2286 prfp.pszSysName = (PSZ) sysini;
2287 if (PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
2288 if (inidata->hini == HINI_SYSTEMPROFILE)
2289 strcpy(inidata->ininame, sysini);
2290 else if (inidata->hini == HINI_USERPROFILE)
2291 strcpy(inidata->ininame, userini);
2292 sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame);
2293 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), sysini);
2294 if (WinQueryWindow(hwnd, QW_PARENT) ==
2295 WinQueryActiveWindow(WinQueryWindow
2296 (WinQueryWindow(hwnd, QW_PARENT),
2297 QW_PARENT))) {
2298 if (hwndStatus)
2299 WinSetWindowText(hwndStatus, (CHAR *) GetPString(IDS_INTERNALINIVIEWERTEXT));
2300 if (hwndStatus2)
2301 WinSetWindowText(hwndStatus2, inidata->ininame);
2302 }
2303 }
2304 else {
2305 CHAR s[100];
2306
2307 sprintf(s, PCSZ_INIQUERYPRFTEXT, GetPString(IDS_FAILEDTEXT));
2308 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), s);
2309 }
2310 return 0;
2311 }
2312
2313 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2314 return 0;
2315
2316 case WM_CHAR:
2317 if (!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
2318 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
2319 switch (SHORT2FROMMP(mp2)) {
2320 case VK_DELETE:
2321 inidata = INSTDATA(hwnd);
2322 if (!inidata)
2323 Runtime_Error(pszSrcFile, __LINE__, NULL);
2324 else {
2325 SHORT cmd = inidata->hwndCurrent &&
2326 WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
2327 INI_APPLIST ?
2328 INI_DELETEAPP :INI_DELETEKEY;
2329 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
2330 }
2331 break;
2332 }
2333 }
2334 }
2335 break;
2336
2337 case WM_COMMAND:
2338 switch (SHORT1FROMMP(mp1)) {
2339 case IDM_FINDNEXT:
2340 case IDM_FINDFIRST:
2341 inidata = INSTDATA(hwnd);
2342 if (!inidata)
2343 Runtime_Error(pszSrcFile, __LINE__, NULL);
2344 else if (inidata->hwndCurrent) {
2345 STRINGINPARMS sip;
2346 static CHAR tofind[258] = "";
2347 SHORT x, z;
2348
2349 if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
2350 z = LIT_FIRST;
2351 memset(&sip, 0, sizeof(sip));
2352 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
2353 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
2354 sip.inputlen = 257;
2355 sip.ret = tofind;
2356 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
2357 if (WinDlgBox(HWND_DESKTOP,
2358 hwnd,
2359 InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
2360 rstrip(tofind);
2361 if (!*tofind) {
2362 if (!fAlertBeepOff)
2363 DosBeep(50, 100);
2364 break;
2365 }
2366 }
2367 else
2368 break;
2369 }
2370 else {
2371 z = (SHORT) WinSendMsg(inidata->hwndCurrent,
2372 LM_QUERYSELECTION,
2373 MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
2374 if (z < 0)
2375 z = LIT_FIRST;
2376 }
2377 x = (SHORT) WinSendMsg(inidata->hwndCurrent,
2378 LM_SEARCHSTRING,
2379 MPFROM2SHORT(LSS_SUBSTRING, z),
2380 MPFROMP(tofind));
2381 if (x >= 0 && x > z) {
2382 WinSendMsg(inidata->hwndCurrent,
2383 LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
2384 WinSendMsg(inidata->hwndCurrent,
2385 LM_SELECTITEM,
2386 MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
2387 }
2388 else if (!fAlertBeepOff)
2389 DosBeep(250, 100);
2390 }
2391 break;
2392
2393 case IDM_FILTER:
2394 inidata = INSTDATA(hwnd);
2395 if (!inidata)
2396 Runtime_Error(pszSrcFile, __LINE__, NULL);
2397 else {
2398 SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2399 INI_APPLIST,
2400 LM_QUERYITEMCOUNT,
2401 MPVOID, MPVOID);
2402 if (numitems)
2403 WinDlgBox(HWND_DESKTOP,
2404 hwnd,
2405 FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID) inidata);
2406 else if (!fAlertBeepOff)
2407 DosBeep(50, 100);
2408 }
2409 break;
2410
2411 case IDM_COPY:
2412 case IDM_INFO:
2413 case IDM_MOVE:
2414 inidata = INSTDATA(hwnd);
2415 if (!inidata || !*inidata->ininame)
2416 Runtime_Error(pszSrcFile, __LINE__, NULL);
2417 else if (mp2) {
2418 INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2419 if (inirec) {
2420 *inirec = *(INIREC *) mp2;
2421 inirec->hwndDlg = hwnd;
2422 inirec->confirm = inidata->confirm;
2423 strcpy(inirec->filename1, inidata->ininame);
2424 if (xbeginthread(CopyIniThread,
2425 122880,
2426 inirec,
2427 pszSrcFile,
2428 __LINE__) == -1)
2429 {
2430 free(inirec);
2431 }
2432 }
2433 }
2434 break;
2435
2436 case IDM_COMPARE:
2437 inidata = INSTDATA(hwnd);
2438 if (!inidata || !*inidata->ininame)
2439 Runtime_Error(pszSrcFile, __LINE__, NULL);
2440 else if (mp2) {
2441 INIREC *inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
2442 if (inirec) {
2443 strcpy(inirec->filename2, (CHAR *)(mp2));
2444 strcpy(inirec->filename1, inidata->ininame);
2445 inirec->hwndDlg = hwnd;
2446 if (xbeginthread(CompareIniThread,
2447 122880,
2448 inirec,
2449 pszSrcFile,
2450 __LINE__) == -1)
2451 {
2452 free(inirec);
2453 }
2454 }
2455 }
2456 break;
2457
2458 case INI_COPYAPP:
2459 case INI_COPYKEY:
2460 case INI_RENAMEAPP:
2461 case INI_RENAMEKEY:
2462 inidata = INSTDATA(hwnd);
2463 if (!inidata) {
2464 Runtime_Error(pszSrcFile, __LINE__, NULL);
2465 break;
2466 }
2467 if (!*inidata->ininame ||
2468 !*inidata->applname ||
2469 (!*inidata->keyname &&
2470 (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
2471 SHORT1FROMMP(mp1) == INI_COPYKEY)))
2472 break;
2473 {
2474 INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2475 if (inirec) {
2476 inirec->size = sizeof(INIREC);
2477 inirec->hwndDlg = hwnd;
2478 inirec->confirm = inidata->confirm;
2479 inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
2480 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
2481 IDM_COPY : IDM_MOVE;
2482 strcpy(inirec->filename1, inidata->ininame);
2483 strcpy(inirec->filename2, inidata->ininame);
2484 if (SHORT1FROMMP(mp1) == INI_COPYKEY ||
2485 SHORT1FROMMP(mp1) == INI_RENAMEKEY)
2486 strcpy(inirec->key, inidata->keyname);
2487 strcpy(inirec->app, inidata->applname);
2488 if (!WinDlgBox(HWND_DESKTOP,
2489 hwnd,
2490 IntraIniProc,
2491 FM3ModHandle, INII_FRAME, (PVOID) inirec)) {
2492 free(inirec);
2493 break;
2494 }
2495 if (xbeginthread(CopyIniThread,
2496 122880,
2497 inirec,
2498 pszSrcFile,
2499 __LINE__) == -1)
2500 {
2501 free(inirec);
2502 }
2503 }
2504 }
2505 break;
2506
2507 case INI_BACKUPINI:
2508 inidata = INSTDATA(hwnd);
2509 if (!inidata)
2510 Runtime_Error(pszSrcFile, __LINE__, NULL);
2511 else if (*inidata->ininame) {
2512 // 09 Jan 08 SHL fixme to complain
2513 CHAR filename[CCHMAXPATH], *p;
2514
2515 strcpy(filename, inidata->ininame);
2516 p = filename;
2517 while (*p) {
2518 if (*p == '/')
2519 *p = '\\';
2520 p++;
2521 }
2522 p = strrchr(filename, '\\');
2523 if (p) {
2524 p++;
2525 *p = 0;
2526 }
2527 else
2528 *filename = 0;
2529 strcat(filename, PCSZ_STARDOTINI);
2530 if (export_filename(hwnd, filename, TRUE)) {
2531
2532 PPRFPROFILE prfp;
2533
2534 prfp = xmallocz(sizeof(PRFPROFILE), pszSrcFile, __LINE__);
2535 if (prfp) {
2536 prfp->pszUserName =
2537 xstrdup(inidata->ininame, pszSrcFile, __LINE__);
2538 if (!prfp->pszUserName)
2539 free(prfp);
2540 else {
2541 prfp->cchUserName = strlen(prfp->pszUserName);
2542 prfp->pszSysName = xstrdup(filename, pszSrcFile, __LINE__);
2543 if (!prfp->pszSysName) {
2544 free(prfp->pszUserName);
2545 free(prfp);
2546 }
2547 else {
2548 prfp->cchSysName = strlen(prfp->pszSysName);
2549 if (xbeginthread(BackupIniThread,
2550 122880,
2551 prfp,
2552 pszSrcFile,
2553 __LINE__) == -1)
2554 {
2555 free(prfp->pszSysName);
2556 free(prfp->pszUserName);
2557 free(prfp);
2558 }
2559 else
2560 DosSleep(100); //05 Aug 07 GKY 250
2561 }
2562 }
2563 }
2564 }
2565 }
2566 break;
2567
2568 case INI_CHANGEINI:
2569 inidata = INSTDATA(hwnd);
2570 if (!inidata)
2571 Runtime_Error(pszSrcFile, __LINE__, NULL);
2572 else {
2573 if (WinDlgBox(HWND_DESKTOP,
2574 hwnd,
2575 ChangeIniProc,
2576 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2577 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2578 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2579 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2580 }
2581 }
2582 break;
2583
2584 case INI_SWAPINI:
2585 inidata = INSTDATA(hwnd);
2586 if (!inidata)
2587 Runtime_Error(pszSrcFile, __LINE__, NULL);
2588 else {
2589 if (WinDlgBox(HWND_DESKTOP,
2590 hwnd,
2591 SwapIniProc,
2592 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2593 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2594 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2595 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2596 }
2597 }
2598 break;
2599
2600 case IDM_NEXTWINDOW:
2601 inidata = INSTDATA(hwnd);
2602 if (!inidata)
2603 Runtime_Error(pszSrcFile, __LINE__, NULL);
2604 else {
2605 inidata->currid++;
2606 if (inidata->currid > INI_DATALIST)
2607 inidata->currid = INI_APPLIST;
2608 }
2609 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2610 break;
2611
2612 case IDM_PREVWINDOW:
2613 inidata = INSTDATA(hwnd);
2614 if (!inidata)
2615 Runtime_Error(pszSrcFile, __LINE__, NULL);
2616 else {
2617 inidata->currid--;
2618 if (inidata->currid < INI_APPLIST)
2619 inidata->currid = INI_DATALIST;
2620 }
2621 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2622 break;
2623
2624 case INI_CONFIRM:
2625 inidata = INSTDATA(hwnd);
2626 if (!inidata)
2627 Runtime_Error(pszSrcFile, __LINE__, NULL);
2628 else {
2629 inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
2630 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
2631
2632 }
2633 break;
2634
2635 case INI_EDITENTRY:
2636 case INI_ADDENTRY:
2637 inidata = INSTDATA(hwnd);
2638 if (!inidata)
2639 Runtime_Error(pszSrcFile, __LINE__, NULL);
2640 else {
2641 inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
2642 WinDlgBox(HWND_DESKTOP,
2643 hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID) inidata);
2644 }
2645 break;
2646
2647 case INI_OTHERPROFILE:
2648 inidata = INSTDATA(hwnd);
2649 if (!inidata)
2650 Runtime_Error(pszSrcFile, __LINE__, NULL);
2651 else {
2652 CHAR filename[CCHMAXPATH + 81], *p;
2653 FILESTATUS3 fsa;
2654 HINI hINI;
2655
2656 strcpy(filename, inidata->ininame);
2657 p = filename;
2658 while (*p) {
2659 if (*p == '/')
2660 *p = '\\';
2661 p++;
2662 }
2663 p = strrchr(filename, '\\');
2664 if (p) {
2665 p++;
2666 *p = 0;
2667 }
2668 else
2669 *filename = 0;
2670 strcat(filename, PCSZ_STARDOTINI);
2671 if (insert_filename(hwnd,
2672 filename,
2673 TRUE,
2674 TRUE) &&
2675 *filename &&
2676 !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
2677 hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename);
2678 if (hINI == NULLHANDLE) {
2679 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
2680 GetPString(IDS_INICANTOPENINITEXT), filename);
2681 }
2682 else {
2683 if (*inidata->ininame) {
2684 if (inidata->hini)
2685 CloseProfile(inidata->hini, FALSE);
2686 *inidata->ininame = 0;
2687 }
2688 inidata->hini = hINI;
2689 strcpy(inidata->ininame, filename);
2690 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2691 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2692 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2693 }
2694 }
2695 }
2696 break;
2697
2698 case INI_USERPROFILE:
2699 inidata = INSTDATA(hwnd);
2700 if (!inidata)
2701 Runtime_Error(pszSrcFile, __LINE__, NULL);
2702 else {
2703 if (inidata->hini && *inidata->ininame)
2704 CloseProfile(inidata->hini, FALSE);
2705 *inidata->ininame = 0;
2706 inidata->hini = HINI_USERPROFILE;
2707 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2708 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2709 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2710 }
2711 break;
2712
2713 case INI_SYSTEMPROFILE:
2714 inidata = INSTDATA(hwnd);
2715 if (!inidata)
2716 Runtime_Error(pszSrcFile, __LINE__, NULL);
2717 else {
2718 if (inidata->hini && *inidata->ininame)
2719 CloseProfile(inidata->hini, FALSE);
2720 *inidata->ininame = 0;
2721 inidata->hini = HINI_SYSTEMPROFILE;
2722 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2723 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2724 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2725 }
2726 break;
2727
2728 case INI_REFRESH:
2729 inidata = INSTDATA(hwnd);
2730 if (!inidata)
2731 Runtime_Error(pszSrcFile, __LINE__, NULL);
2732 else {
2733 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2734 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2735 }
2736 break;
2737
2738 case INI_DELETEKEY:
2739 inidata = INSTDATA(hwnd);
2740 if (!inidata)
2741 Runtime_Error(pszSrcFile, __LINE__, NULL);
2742 else if (*inidata->applname && *inidata->keyname) {
2743
2744 SHORT keyindex = inidata->keyindex;
2745
2746 if (inidata->confirm && saymsg(MB_YESNO,
2747 hwnd,
2748 GetPString(IDS_CONFIRMTEXT),
2749 GetPString(IDS_INIDELETEKEYTEXT),
2750 inidata->keyname) == MBID_NO)
2751 break;
2752 PrfWriteProfileData(inidata->hini,
2753 inidata->applname, inidata->keyname, NULL, 0L);
2754 *inidata->keyname = 0;
2755 WinSendDlgItemMsg(hwnd,
2756 INI_KEYLIST,
2757 LM_DELETEITEM, MPFROM2SHORT(keyindex, 0), MPVOID);
2758 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2759 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2760 INI_KEYLIST,
2761 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2762 if (!sSel)
2763 WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID);
2764 else {
2765 sSel = min(keyindex, sSel - 1);
2766 WinSendDlgItemMsg(hwnd,
2767 INI_KEYLIST,
2768 LM_SELECTITEM,
2769 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2770 }
2771 }
2772 break;
2773
2774 case INI_DELETEAPP:
2775 inidata = INSTDATA(hwnd);
2776 if (!inidata)
2777 Runtime_Error(pszSrcFile, __LINE__, NULL);
2778 // 09 Jan 08 SHL fixme to complain?
2779 else if (*inidata->applname) {
2780
2781 SHORT appindex = inidata->appindex;
2782
2783 if (inidata->confirm && saymsg(MB_YESNO,
2784 hwnd,
2785 GetPString(IDS_CONFIRMTEXT),
2786 GetPString(IDS_INIDELETEAPPTEXT),
2787 inidata->applname) == MBID_NO)
2788 break;
2789 PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L);
2790 *inidata->applname = *inidata->keyname = 0;
2791 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2792 WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID);
2793 WinSendDlgItemMsg(hwnd,
2794 INI_APPLIST,
2795 LM_DELETEITEM, MPFROM2SHORT(appindex, 0), MPVOID);
2796 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2797 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2798 INI_APPLIST,
2799 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2800 if (sSel) {
2801 sSel = min(appindex, sSel - 1);
2802 WinSendDlgItemMsg(hwnd,
2803 INI_APPLIST,
2804 LM_SELECTITEM,
2805 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2806 }
2807 }
2808 break;
2809
2810 case DID_OK:
2811 case DID_CANCEL:
2812 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2813 break;
2814
2815 case IDM_HELP:
2816 if (hwndHelp)
2817 WinSendMsg(hwndHelp,
2818 HM_DISPLAY_HELP,
2819 MPFROM2SHORT(HELP_INI, 0), MPFROMSHORT(HM_RESOURCEID));
2820 break;
2821
2822 case IDM_ABOUT:
2823 saymsg(MB_ENTER | MB_ICONASTERISK,
2824 hwnd,
2825 GetPString(IDS_VIEWABOUTTITLETEXT),
2826 GetPString(IDS_INIABOUTTEXT));
2827 break;
2828 }
2829 return 0;
2830
2831 case WM_CLOSE:
2832 if (ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
2833
2834 SWP swp;
2835
2836 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
2837 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
2838 WinStoreWindowPos((CHAR *) FM2Str,
2839 "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
2840 // inidata = WinQueryWindowPtr(hwnd, QWL_USER); // 09 Jan 08 SHL
2841 }
2842 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
2843 return 0;
2844
2845 case WM_DESTROY:
2846 {
2847 BOOL dontclose = FALSE;
2848
2849 inidata = INSTDATA(hwnd);
2850 if (!inidata)
2851 Runtime_Error(pszSrcFile, __LINE__, NULL);
2852 else {
2853 dontclose = inidata->dontclose;
2854 if (inidata->hini != NULLHANDLE && *inidata->ininame)
2855 CloseProfile(inidata->hini, FALSE);
2856 free(inidata->data);
2857 if (inidata->hwndPopup)
2858 WinDestroyWindow(inidata->hwndPopup);
2859 free(inidata);
2860 }
2861 if (!dontclose &&
2862 ParentIsDesktop(hwnd, WinQueryWindow(WinQueryWindow(hwnd,
2863 QW_PARENT),
2864 QW_PARENT))) {
2865 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
2866 DosExit(EXIT_PROCESS, 1);
2867 }
2868 }
2869 break;
2870 }
2871 return WinDefWindowProc(hwnd, msg, mp1, mp2);
2872}
2873
2874#pragma alloc_text(INIS,EnumAppNames,GetKeyData,EnumKeyNames,AddIniProc,IniProc,BackupIniThread)
2875#pragma alloc_text(INIS,ChangeIniProc,SwapIniProc,IniLBSubProc,IniLBSubProc2,CopyIniThread)
2876#pragma alloc_text(INIS,IntraIniProc,FilterIniProc)
2877#pragma alloc_text(STARTUP,StartIniEditor)
Note: See TracBrowser for help on using the repository browser.