source: trunk/dll/inis.c@ 838

Last change on this file since 838 was 838, checked in by Gregg Young, 18 years ago

Remainder of changes for xDosFindFirst/Next wrapper performance test

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