source: trunk/dll/inis.c@ 1395

Last change on this file since 1395 was 1395, checked in by Gregg Young, 17 years ago

Allow user to turn off alert and/or error beeps in settings notebook. Ticket 341 Move repeated strings to PCSZs. Ticket 6 Add *DateFormat functions to format dates based on locale Ticket 28 Eliminate Win_Error2 by moving function names to PCSZs used in Win_Error Ticket 6

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