source: trunk/dll/inis.c@ 1545

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

Added ForwardslashToBackslash function to streamline code.

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