source: trunk/dll/inis.c@ 1454

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

Add submenu to view ini that includes fm3.ini, the user ini and the system ini as open choices (ticket 366)

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