source: trunk/dll/inis.c@ 912

Last change on this file since 912 was 912, checked in by Steven Levine, 18 years ago

Avoid closing INI more times than opened
Add some missing error reporting
Standardize PrfOpenProfile return checks

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