source: trunk/dll/inis.c@ 1570

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

Check that pTmpDir IsValid and recreate if not found; Fixes hangs caused by temp file creation failures. (Ticket 440)

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