source: trunk/dll/inis.c@ 1402

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

Remove variable aurgs from docopy & unlinkf (not used); Move more strings to PCSZs and string table; Move PCSZs to compile time initialization; Fix hang on startup caused by a drive scan and a dircnr scan trying to update a drive in the tree at the same time (related to the "treeswitch options); Code cleanup mainly removal of old printfs, SayMsgs, DbgMsg and unneeded %s.

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