source: trunk/dll/inis.c@ 603

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

Work around for PM drag/drop limit; more drag/drop error checking

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 71.2 KB
Line 
1
2/***********************************************************************
3
4 $Id: inis.c 603 2007-04-06 21:57:45Z 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
21***********************************************************************/
22
23#define INCL_WIN
24#define INCL_GPI
25#define INCL_DOS
26#define INCL_DOSERRORS
27#include <os2.h>
28
29#include <stdlib.h>
30#include <stdio.h>
31#include <string.h>
32#include <ctype.h>
33#include <share.h>
34
35#include "fm3dll.h"
36#include "fm3dlg.h"
37#include "fm3str.h"
38#include "mle.h"
39
40#pragma data_seg(DATA2)
41
42static PSZ pszSrcFile = __FILE__;
43
44#pragma alloc_text(INIS,EnumAppNames,GetKeyData,EnumKeyNames,AddIniProc,IniProc,BackupIniThread,ChangeIniProc,SwapIniProc,IniLBSubProc,IniLBSubProc2,CopyIniThread,CompareIniThread,IntraIniProc,FilterIniProc)
45#pragma alloc_text(STARTUP,StartIniEditor)
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 = 1L;
524 DosError(FERR_DISABLEHARDERR);
525 if (!DosFindFirst("*.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 = 1L;
535 } while (!DosFindNext(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 APIRET rc;
1489
1490 switch (msg) {
1491 case WM_SETFOCUS:
1492 if (mp2)
1493 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1494 break;
1495
1496 case WM_MENUEND:
1497 if (hwndPopup == (HWND) mp2) {
1498 WinDestroyWindow(hwndPopup);
1499 hwndPopup = (HWND) 0;
1500 }
1501 break;
1502
1503 case WM_CONTEXTMENU:
1504 {
1505 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
1506
1507 switch (id) {
1508 case INI_APPLIST:
1509 id = INI_APPMENU;
1510 break;
1511 case INI_KEYLIST:
1512 id = INI_KEYMENU;
1513 break;
1514 default:
1515 id = 0;
1516 break;
1517 }
1518 if (id) {
1519 if (hwndPopup)
1520 WinDestroyWindow(hwndPopup);
1521 hwndPopup = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
1522 if (hwndPopup)
1523 WinPopupMenu(hwnd, WinQueryWindow(hwnd, QW_PARENT),
1524 hwndPopup, 8, 8, 0,
1525 PU_HCONSTRAIN | PU_VCONSTRAIN |
1526 PU_KEYBOARD | PU_MOUSEBUTTON1);
1527 }
1528 }
1529 break;
1530
1531 case WM_BEGINDRAG:
1532 {
1533 PDRAGINFO pDInfo;
1534 DRAGITEM DItem;
1535 DRAGIMAGE DIcon;
1536 INIDATA *inidata;
1537 HPOINTER hptrINI;
1538 USHORT id;
1539 HWND hDrop = 0;
1540
1541 id = WinQueryWindowUShort(hwnd, QWS_ID);
1542 inidata = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
1543 if (!inidata || !*inidata->ininame || !*inidata->applname ||
1544 !inidata->keyname) {
1545 DosBeep(50, 100);
1546 break;
1547 }
1548 hptrINI = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, INI_FRAME);
1549 memset(&DItem, 0, sizeof(DItem));
1550 memset(&DIcon, 0, sizeof(DIcon));
1551 DIcon.cb = sizeof(DIcon);
1552 DIcon.cptl = 0;
1553 DIcon.hImage = hptrINI;
1554 DIcon.fl = DRG_ICON;
1555 DIcon.sizlStretch.cx = 32;
1556 DIcon.sizlStretch.cy = 32;
1557 DIcon.cxOffset = -16;
1558 DIcon.cyOffset = 0;
1559 DItem.hwndItem = hwnd;
1560 DItem.ulItemID = 0L;
1561 DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
1562 DItem.hstrRMF = DrgAddStrHandle("<DRM_FM2INIRECORD,DRF_FM2INI>");
1563 DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame);
1564 DItem.hstrSourceName = DrgAddStrHandle(inidata->applname);
1565 if (id == INI_APPLIST)
1566 DItem.hstrTargetName = DrgAddStrHandle(NullStr);
1567 else
1568 DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
1569 DItem.fsControl = 0;
1570 DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
1571 pDInfo = DrgAllocDraginfo(1L);
1572 DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
1573 hDrop = DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
1574 DeleteDragitemStrHandles(pDInfo); //
1575 DrgDeleteDraginfoStrHandles (pDInfo);
1576 DrgFreeDraginfo(pDInfo);
1577 WinDestroyPointer(hptrINI);
1578 }
1579 break;
1580
1581 case DM_DRAGOVER:
1582 {
1583 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1584 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
1585
1586 DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */
1587 pDItem = DrgQueryDragitemPtr(pDInfo, /* Access DRAGITEM */
1588 0); /* Index to DRAGITEM */
1589 if (DrgVerifyRMF(pDItem, /* Check valid rendering */
1590 DRM_OS2FILE, /* mechanisms and data */
1591 NULL)) {
1592 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */
1593 return (MRFROM2SHORT(DOR_DROP, /* Return okay to drop */
1594 DO_LINK));
1595 }
1596 else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
1597 if (WinQueryWindow(pDInfo->hwndSource, QW_PARENT) ==
1598 WinQueryWindow(hwnd, QW_PARENT)) {
1599 DrgFreeDraginfo(pDInfo);
1600 return MRFROM2SHORT(DOR_NEVERDROP, 0);
1601 }
1602 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */
1603 return (MRFROM2SHORT(DOR_DROP, ((fCopyDefault) ? DO_COPY : DO_MOVE)));
1604 }
1605 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */
1606 return MRFROM2SHORT(DOR_NEVERDROP, 0);
1607 }
1608
1609 case DM_DRAGLEAVE:
1610
1611 break;
1612
1613 case DM_DROP:
1614 {
1615 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1616 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
1617 ULONG numitems, curitem = 0L, len;
1618 USHORT action;
1619 CHAR szFrom[CCHMAXPATH + 2], szDir[CCHMAXPATH + 1],
1620 szTemp[CCHMAXPATH + 2];
1621 FILESTATUS3 fsa;
1622 INIREC inirec;
1623
1624 DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */
1625 numitems = DrgQueryDragitemCount(pDInfo);
1626 while (curitem < numitems) {
1627 pDItem = DrgQueryDragitemPtr(pDInfo, curitem);
1628 if (DrgVerifyRMF(pDItem, DRM_OS2FILE, NULL)) {
1629 if (pDItem->fsControl & DC_PREPARE)
1630 DrgSendTransferMsg(pDItem->hwndItem,
1631 DM_ENDCONVERSATION,
1632 MPFROMLONG(pDItem->ulItemID),
1633 MPFROMLONG(DMFL_TARGETFAIL));
1634 else {
1635 if (FullDrgName(pDItem, szFrom, sizeof(szFrom)) &&
1636 !DosQueryPathInfo(szFrom, FIL_STANDARD, &fsa,
1637 (ULONG) sizeof(FILESTATUS3)))
1638 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1639 MPFROM2SHORT(IDM_COMPARE, 0), MPFROMP(szFrom));
1640 DrgSendTransferMsg(pDItem->hwndItem,
1641 DM_ENDCONVERSATION,
1642 MPFROMLONG(pDItem->ulItemID),
1643 MPFROMLONG(DMFL_TARGETFAIL));
1644 }
1645 }
1646 else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
1647 *szDir = *szFrom = *szTemp = 0;
1648 len = DrgQueryStrName(pDItem->hstrContainerName, CCHMAXPATH, szDir);
1649 szDir[len] = 0;
1650 len = DrgQueryStrName(pDItem->hstrSourceName, CCHMAXPATH, szFrom);
1651 szFrom[len] = 0;
1652 len = DrgQueryStrName(pDItem->hstrTargetName, CCHMAXPATH, szTemp);
1653 szTemp[len] = 0;
1654 switch (pDInfo->usOperation) {
1655 case DO_MOVE:
1656 action = IDM_MOVE;
1657 break;
1658 case DO_COPY:
1659 action = IDM_COPY;
1660 break;
1661 default:
1662 action = IDM_INFO;
1663 break;
1664 }
1665 memset(&inirec, 0, sizeof(inirec));
1666 inirec.size = sizeof(inirec);
1667 strcpy(inirec.filename2, szDir);
1668 strcpy(inirec.app, szFrom);
1669 strcpy(inirec.key, szTemp);
1670 inirec.action = action;
1671 inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource, QW_PARENT);
1672 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1673 MPFROM2SHORT(action, 0), MPFROMP(&inirec));
1674 DrgSendTransferMsg(pDItem->hwndItem,
1675 DM_ENDCONVERSATION,
1676 MPFROMLONG(pDItem->ulItemID),
1677 MPFROMLONG(DMFL_TARGETFAIL));
1678 }
1679 curitem++;
1680 }
1681 rc = DeleteDragitemStrHandles(pDInfo); //
1682
1683 if(!rc)
1684 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1685 "DrgDeleteDraginfoStrHandles");
1686 DrgDeleteDraginfoStrHandles(pDInfo);
1687 rc = DrgFreeDraginfo(pDInfo);
1688 if(!rc)
1689 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1690 "DrgFreeDraginfo");
1691 }
1692 return 0;
1693
1694 case WM_DESTROY:
1695 if (hwndPopup)
1696 WinDestroyWindow(hwndPopup);
1697 hwndPopup = (HWND) 0;
1698 break;
1699 }
1700 if (oldproc)
1701 return oldproc(hwnd, msg, mp1, mp2);
1702 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1703}
1704
1705MRESULT EXPENTRY IniLBSubProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1706{
1707 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1708
1709 switch (msg) {
1710 case WM_SETFOCUS:
1711 if (mp2)
1712 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1713 break;
1714 }
1715 if (oldproc)
1716 return oldproc(hwnd, msg, mp1, mp2);
1717 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1718}
1719
1720MRESULT EXPENTRY IniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1721{
1722 INIDATA *inidata;
1723 SHORT sSel;
1724 PFNWP oldproc;
1725
1726 switch (msg) {
1727 case WM_CREATE:
1728 inidata = xmallocz(sizeof(INIDATA), pszSrcFile, __LINE__);
1729 if (!inidata) {
1730 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1731 break;
1732 }
1733 inidata->size = sizeof(INIDATA);
1734 inidata->confirm = TRUE;
1735 inidata->currid = INI_APPLIST;
1736 inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1737 FID_MENU);
1738 inidata->hwndIni = hwnd;
1739 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) inidata);
1740 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
1741
1742 if (!WinCreateWindow
1743 (hwnd, WC_LISTBOX, (PSZ) NULL,
1744 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1745 HWND_TOP, INI_APPLIST, NULL, NULL)) {
1746 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1747 }
1748 if (!WinCreateWindow
1749 (hwnd, WC_LISTBOX, (PSZ) NULL,
1750 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1751 HWND_TOP, INI_KEYLIST, NULL, NULL)) {
1752 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1753 }
1754 if (!WinCreateWindow
1755 (hwnd, WC_LISTBOX, (PSZ) NULL,
1756 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1757 HWND_TOP, INI_DATALIST, NULL, NULL)) {
1758 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1759 }
1760 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1761 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1762 INI_NUMAPPS, NULL, NULL)) {
1763 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1764 }
1765 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1766 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1767 INI_NUMKEYS, NULL, NULL)) {
1768 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1769 }
1770 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1771 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1772 INI_NUMDATA, NULL, NULL)) {
1773 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1774 }
1775 if (!WinCreateWindow(hwnd,
1776 WC_STATIC,
1777 GetPString(IDS_APPLICATIONSTITLETEXT),
1778 WS_VISIBLE | SS_TEXT |
1779 DT_CENTER | DT_VCENTER,
1780 0,
1781 0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL)) {
1782 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1783 }
1784 if (!WinCreateWindow(hwnd,
1785 WC_STATIC,
1786 GetPString(IDS_KEYWORDSTITLETEXT),
1787 WS_VISIBLE | SS_TEXT |
1788 DT_CENTER | DT_VCENTER,
1789 0,
1790 0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL)) {
1791 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1792 }
1793 if (!WinCreateWindow(hwnd,
1794 WC_STATIC,
1795 GetPString(IDS_DATABYTESTITLETEXT),
1796 WS_VISIBLE | SS_TEXT |
1797 DT_CENTER | DT_VCENTER,
1798 0,
1799 0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL)) {
1800 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1801 }
1802
1803 inidata->hwndApp = WinWindowFromID(hwnd, INI_APPLIST);
1804 inidata->hwndKey = WinWindowFromID(hwnd, INI_KEYLIST);
1805 inidata->hwndData = WinWindowFromID(hwnd, INI_DATALIST);
1806
1807 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_APPLIST),
1808 IniLBSubProc);
1809 WinSetWindowPtr(WinWindowFromID(hwnd, INI_APPLIST),
1810 QWL_USER, (PVOID) oldproc);
1811 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_KEYLIST),
1812 IniLBSubProc);
1813 WinSetWindowPtr(WinWindowFromID(hwnd, INI_KEYLIST),
1814 QWL_USER, (PVOID) oldproc);
1815 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_DATALIST),
1816 IniLBSubProc2);
1817 WinSetWindowPtr(WinWindowFromID(hwnd, INI_DATALIST),
1818 QWL_USER, (PVOID) oldproc);
1819 break;
1820
1821 case UM_FOCUSME:
1822 case WM_SETFOCUS:
1823 if (mp2) {
1824 if (hwndMain && fAutoView)
1825 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1826 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
1827 if (inidata && hwndStatus) {
1828 if (*inidata->ininame) {
1829 WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT));
1830 if (hwndStatus2)
1831 WinSetWindowText(hwndStatus2, inidata->ininame);
1832 }
1833 else
1834 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1835 }
1836 }
1837 if (msg == WM_SETFOCUS)
1838 break;
1839 return 0;
1840
1841 case UM_SELECT:
1842 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, INI_APPLIST));
1843 break;
1844
1845 case UM_ACTION:
1846 SetPresParams(WinWindowFromID(hwnd, INI_APPHDR),
1847 &RGBGREY,
1848 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1849 SetPresParams(WinWindowFromID(hwnd, INI_KEYHDR),
1850 &RGBGREY,
1851 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1852 SetPresParams(WinWindowFromID(hwnd, INI_DATAHDR),
1853 &RGBGREY,
1854 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1855 SetPresParams(WinWindowFromID(hwnd, INI_NUMAPPS),
1856 &RGBGREY,
1857 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1858 SetPresParams(WinWindowFromID(hwnd, INI_NUMKEYS),
1859 &RGBGREY,
1860 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1861 SetPresParams(WinWindowFromID(hwnd, INI_NUMDATA),
1862 &RGBGREY,
1863 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1864 if (!WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1865 PP_FONTNAMESIZE,
1866 (ULONG) strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1,
1867 (PVOID) GetPString(IDS_5SYSTEMVIOTEXT)))
1868 WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1869 PP_FONTNAMESIZE,
1870 (ULONG) strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
1871 (PVOID) GetPString(IDS_10SYSTEMMONOTEXT));
1872 RestorePresParams(hwnd, "IniUtil");
1873 return 0;
1874
1875 case WM_PRESPARAMCHANGED:
1876 PresParamChanged(hwnd, "IniUtil", mp1, mp2);
1877 break;
1878
1879 case UM_RESCAN:
1880 inidata = INSTDATA(hwnd);
1881 if (inidata) {
1882 if (mp1) {
1883
1884 SHORT numitems, sSelect;
1885 BOOL inprofile;
1886 ULONG size = 0L;
1887
1888 numitems = (SHORT) WinSendDlgItemMsg(hwnd,
1889 INI_APPLIST,
1890 LM_QUERYITEMCOUNT,
1891 MPVOID, MPVOID);
1892 if (!numitems) {
1893 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
1894 return 0;
1895 }
1896 size = 0L;
1897 if (PrfQueryProfileSize(inidata->hini,
1898 (CHAR *) mp1, NULL, (PULONG) & size) && size)
1899 inprofile = TRUE;
1900 else
1901 inprofile = FALSE;
1902 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
1903 INI_APPLIST,
1904 LM_SEARCHSTRING,
1905 MPFROM2SHORT(LSS_CASESENSITIVE,
1906 LIT_FIRST),
1907 MPFROMP((CHAR *) mp1));
1908 if (sSelect >= 0) {
1909 if (!inprofile)
1910 WinSendDlgItemMsg(hwnd,
1911 INI_APPLIST,
1912 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
1913 else if (!strcmp(inidata->applname, (CHAR *) mp1))
1914 PostMsg(hwnd,
1915 WM_CONTROL,
1916 MPFROM2SHORT(INI_APPLIST, LN_SELECT),
1917 MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
1918 }
1919 else if (inprofile)
1920 WinSendDlgItemMsg(hwnd,
1921 INI_APPLIST,
1922 LM_INSERTITEM,
1923 MPFROM2SHORT(LIT_SORTASCENDING, 0),
1924 MPFROMP((CHAR *) mp1));
1925 if (mp2 && inidata->applname) {
1926 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
1927 inidata->hini, inidata->applname))
1928 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
1929 }
1930 }
1931 }
1932 return 0;
1933
1934 case UM_INITIALSIZE: /* kludge */
1935 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
1936 if (inidata)
1937 inidata->dontclose = TRUE;
1938 return 0;
1939
1940 case WM_SIZE:
1941 {
1942 SHORT cx = SHORT1FROMMP(mp2);
1943 SHORT cy = SHORT2FROMMP(mp2);
1944
1945 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPHDR), HWND_TOP,
1946 2, cy - 22, (cx / 4) - 4, 20, SWP_MOVE | SWP_SIZE);
1947 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMAPPS), HWND_TOP,
1948 (cx / 4) + 2, cy - 22, (cx / 4) - 4, 20,
1949 SWP_MOVE | SWP_SIZE);
1950 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPLIST), HWND_TOP,
1951 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
1952 SWP_MOVE | SWP_SIZE);
1953 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYHDR), HWND_TOP,
1954 (cx / 2) + 2, cy - 22, (cx / 4) - 4, 20,
1955 SWP_MOVE | SWP_SIZE);
1956 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMKEYS), HWND_TOP,
1957 (cx - (cx / 4)) + 2, cy - 22, (cx / 4) - 4, 20,
1958 SWP_MOVE | SWP_SIZE);
1959 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYLIST), HWND_TOP,
1960 (cx / 2) + 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
1961 SWP_MOVE | SWP_SIZE);
1962 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATAHDR), HWND_TOP,
1963 2, (cy / 2) - 22, (cx / 2) - 4, 20,
1964 SWP_MOVE | SWP_SIZE);
1965 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMDATA), HWND_TOP,
1966 (cx / 2) + 2, (cy / 2) - 22, (cx / 2) - 4, 20,
1967 SWP_MOVE | SWP_SIZE);
1968 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATALIST), HWND_TOP,
1969 2, 2, cx - 4, (cy / 2) - 28, SWP_MOVE | SWP_SIZE);
1970 }
1971 break;
1972
1973 case UM_LOADFILE:
1974 /* load initial file */
1975 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
1976 if (inidata) {
1977 if (mp1) {
1978 strcpy(inidata->ininame, (CHAR *) mp1);
1979 inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
1980 inidata->ininame);
1981 free(mp1);
1982 }
1983 else
1984 inidata->hini = HINI_USERPROFILE;
1985 if (!inidata->hini) {
1986 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1987 break;
1988 }
1989 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1990 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
1991 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
1992 HWND_TOP,
1993 0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
1994 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
1995 }
1996 else
1997 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1998 return 0;
1999
2000 case WM_ERASEBACKGROUND:
2001 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
2002 return 0;
2003
2004 case WM_PAINT:
2005 {
2006 HPS hps;
2007 RECTL rcl;
2008
2009 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2010 if (hps) {
2011 WinQueryWindowRect(hwnd, &rcl);
2012 WinFillRect(hps, &rcl, CLR_PALEGRAY);
2013 WinEndPaint(hps);
2014 /*
2015 * tell status window to paint its box
2016 */
2017 PaintRecessedWindow(WinWindowFromID(hwnd, INI_APPHDR),
2018 (HPS) 0, FALSE, FALSE);
2019 PaintRecessedWindow(WinWindowFromID(hwnd, INI_KEYHDR),
2020 (HPS) 0, FALSE, FALSE);
2021 PaintRecessedWindow(WinWindowFromID(hwnd, INI_DATAHDR),
2022 (HPS) 0, FALSE, FALSE);
2023 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMAPPS),
2024 (HPS) 0, FALSE, FALSE);
2025 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMKEYS),
2026 (HPS) 0, FALSE, FALSE);
2027 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMDATA),
2028 (HPS) 0, FALSE, FALSE);
2029 inidata = INSTDATA(hwnd);
2030 if (inidata && inidata->hwndCurrent)
2031 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
2032 }
2033 }
2034 break;
2035
2036 case WM_CONTROL:
2037 switch (SHORT1FROMMP(mp1)) {
2038 case INI_KEYLIST:
2039 case INI_APPLIST:
2040 case INI_DATALIST:
2041 switch (SHORT2FROMMP(mp1)) {
2042 case LN_SETFOCUS:
2043 inidata = INSTDATA(hwnd);
2044 if (inidata) {
2045 if (inidata->hwndCurrent)
2046 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
2047 inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1));
2048 BoxWindow(WinWindowFromID(hwnd,
2049 SHORT1FROMMP(mp1)), (HPS) 0, CLR_RED);
2050 }
2051 break;
2052
2053 case LN_ENTER:
2054 case LN_SELECT:
2055 if (SHORT1FROMMP(mp1) == INI_DATALIST)
2056 break;
2057 {
2058 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
2059 SHORT sSelect;
2060
2061 inidata = INSTDATA(hwnd);
2062 if (!inidata || !inidata->hini)
2063 break;
2064 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2065 inidata->keyindex = inidata->appindex = 0;
2066 *applname = *keyname = *inidata->applname = *inidata->keyname = 0;
2067 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2068 INI_APPLIST,
2069 LM_QUERYSELECTION,
2070 MPFROM2SHORT(LIT_FIRST, 0),
2071 MPVOID);
2072 if (sSelect < 0)
2073 break;
2074 inidata->appindex = sSelect;
2075 WinSendDlgItemMsg(hwnd,
2076 INI_APPLIST,
2077 LM_QUERYITEMTEXT,
2078 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2079 MPFROMP(applname));
2080 if (SHORT1FROMMP(mp1) == INI_APPLIST) {
2081 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2082 inidata->hini, applname))
2083 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2084 }
2085 else {
2086 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, INI_KEYLIST,
2087 LM_QUERYSELECTION,
2088 MPFROM2SHORT(LIT_FIRST, 0),
2089 MPVOID);
2090 if (sSelect < 0)
2091 break;
2092 inidata->keyindex = sSelect;
2093 WinSendDlgItemMsg(hwnd,
2094 INI_KEYLIST,
2095 LM_QUERYITEMTEXT,
2096 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2097 MPFROMP(keyname));
2098 if (!*keyname || !*applname)
2099 break;
2100 strcpy(inidata->keyname, keyname);
2101 strcpy(inidata->applname, applname);
2102 if (inidata->data)
2103 free(inidata->data);
2104 inidata->data = GetKeyData(WinWindowFromID(hwnd,
2105 INI_DATALIST),
2106 inidata->hini,
2107 applname, keyname, &inidata->datalen);
2108 if (!inidata->data)
2109 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2110 }
2111 }
2112 break;
2113 }
2114 break;
2115 }
2116 return 0;
2117
2118 case UM_SETDIR:
2119 {
2120 SHORT num;
2121 CHAR s[81];
2122
2123 num = (SHORT) WinSendDlgItemMsg(hwnd,
2124 INI_APPLIST,
2125 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2126 sprintf(s, "%d", num);
2127 WinSetDlgItemText(hwnd, INI_NUMAPPS, s);
2128 num = (SHORT) WinSendDlgItemMsg(hwnd,
2129 INI_KEYLIST,
2130 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2131 sprintf(s, "%d", num);
2132 WinSetDlgItemText(hwnd, INI_NUMKEYS, s);
2133 WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
2134 WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
2135 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
2136 }
2137 return 0;
2138
2139 case UM_SETUP:
2140 inidata = INSTDATA(hwnd);
2141 if (inidata) {
2142
2143 PRFPROFILE prfp;
2144 CHAR sysini[CCHMAXPATH + 81];
2145 CHAR userini[CCHMAXPATH];
2146
2147 memset(&prfp, 0, sizeof(PRFPROFILE));
2148 prfp.cchUserName = CCHMAXPATH;
2149 prfp.cchSysName = CCHMAXPATH;
2150 prfp.pszUserName = (PSZ) userini;
2151 prfp.pszSysName = (PSZ) sysini;
2152 if (PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
2153 if (inidata->hini == HINI_SYSTEMPROFILE)
2154 strcpy(inidata->ininame, sysini);
2155 else if (inidata->hini == HINI_USERPROFILE)
2156 strcpy(inidata->ininame, userini);
2157 sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame);
2158 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), sysini);
2159 if (WinQueryWindow(hwnd, QW_PARENT) ==
2160 WinQueryActiveWindow(WinQueryWindow
2161 (WinQueryWindow(hwnd, QW_PARENT),
2162 QW_PARENT))) {
2163 if (hwndStatus)
2164 WinSetWindowText(hwndStatus,
2165 GetPString(IDS_INTERNALINIVIEWERTEXT));
2166 if (hwndStatus2)
2167 WinSetWindowText(hwndStatus2, inidata->ininame);
2168 }
2169 }
2170 else
2171 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT),
2172 GetPString(IDS_INIQUERYPRFFAILEDTEXT));
2173 }
2174 else
2175 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2176 return 0;
2177
2178 case WM_CHAR:
2179 if (!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
2180 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
2181 switch (SHORT2FROMMP(mp2)) {
2182 case VK_DELETE:
2183 inidata = INSTDATA(hwnd);
2184 if (inidata) {
2185
2186 SHORT cmd;
2187
2188 cmd = (inidata->hwndCurrent &&
2189 WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
2190 INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY;
2191 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
2192 }
2193 break;
2194 }
2195 }
2196 }
2197 break;
2198
2199 case WM_COMMAND:
2200 switch (SHORT1FROMMP(mp1)) {
2201 case IDM_FINDNEXT:
2202 case IDM_FINDFIRST:
2203 inidata = INSTDATA(hwnd);
2204 if (inidata) {
2205 if (inidata->hwndCurrent) {
2206
2207 STRINGINPARMS sip;
2208 static CHAR tofind[258] = "";
2209 SHORT x, z;
2210
2211 if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
2212 z = LIT_FIRST;
2213 memset(&sip, 0, sizeof(sip));
2214 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
2215 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
2216 sip.inputlen = 257;
2217 sip.ret = tofind;
2218 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
2219 if (WinDlgBox(HWND_DESKTOP,
2220 hwnd,
2221 InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
2222 rstrip(tofind);
2223 if (!*tofind) {
2224 DosBeep(50, 100);
2225 break;
2226 }
2227 }
2228 else
2229 break;
2230 }
2231 else {
2232 z = (SHORT) WinSendMsg(inidata->hwndCurrent,
2233 LM_QUERYSELECTION,
2234 MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
2235 if (z < 0)
2236 z = LIT_FIRST;
2237 }
2238 x = (SHORT) WinSendMsg(inidata->hwndCurrent,
2239 LM_SEARCHSTRING,
2240 MPFROM2SHORT(LSS_SUBSTRING, z),
2241 MPFROMP(tofind));
2242 if (x >= 0 && x > z) {
2243 WinSendMsg(inidata->hwndCurrent,
2244 LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
2245 WinSendMsg(inidata->hwndCurrent,
2246 LM_SELECTITEM,
2247 MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
2248 }
2249 else
2250 DosBeep(250, 100);
2251 }
2252 }
2253 break;
2254
2255 case IDM_FILTER:
2256 inidata = INSTDATA(hwnd);
2257 if (inidata) {
2258
2259 SHORT numitems;
2260
2261 numitems = (SHORT) WinSendDlgItemMsg(hwnd,
2262 INI_APPLIST,
2263 LM_QUERYITEMCOUNT,
2264 MPVOID, MPVOID);
2265 if (numitems)
2266 WinDlgBox(HWND_DESKTOP,
2267 hwnd,
2268 FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID) inidata);
2269 else
2270 DosBeep(50, 100);
2271 }
2272 break;
2273
2274 case IDM_COPY:
2275 case IDM_INFO:
2276 case IDM_MOVE:
2277 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
2278 if (!inidata || !*inidata->ininame)
2279 break;
2280 if (mp2) {
2281
2282 INIREC *inirec;
2283
2284 inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2285 if (inirec) {
2286 *inirec = *(INIREC *) mp2;
2287 inirec->hwndDlg = hwnd;
2288 inirec->confirm = inidata->confirm;
2289 strcpy(inirec->filename1, inidata->ininame);
2290 if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
2291 Runtime_Error(pszSrcFile, __LINE__,
2292 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2293 free(inirec);
2294 }
2295 }
2296 }
2297 break;
2298
2299 case IDM_COMPARE:
2300 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
2301 if (!inidata || !*inidata->ininame)
2302 break;
2303 if (mp2) {
2304
2305 INIREC *inirec;
2306
2307 inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
2308 if (inirec) {
2309 strcpy(inirec->filename2, (CHAR *) (mp2));
2310 strcpy(inirec->filename1, inidata->ininame);
2311 inirec->hwndDlg = hwnd;
2312 if (_beginthread(CompareIniThread, NULL, 122880, (PVOID) inirec) ==
2313 -1) {
2314 Runtime_Error(pszSrcFile, __LINE__,
2315 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2316 free(inirec);
2317 }
2318 }
2319 }
2320 break;
2321
2322 case INI_COPYAPP:
2323 case INI_COPYKEY:
2324 case INI_RENAMEAPP:
2325 case INI_RENAMEKEY:
2326 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
2327 if (!inidata ||
2328 !*inidata->ininame ||
2329 !*inidata->applname ||
2330 (!*inidata->keyname &&
2331 (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
2332 SHORT1FROMMP(mp1) == INI_COPYKEY)))
2333 break;
2334 {
2335 INIREC *inirec;
2336
2337 inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2338 if (inirec) {
2339 inirec->size = sizeof(INIREC);
2340 inirec->hwndDlg = hwnd;
2341 inirec->confirm = inidata->confirm;
2342 inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
2343 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
2344 IDM_COPY : IDM_MOVE;
2345 strcpy(inirec->filename1, inidata->ininame);
2346 strcpy(inirec->filename2, inidata->ininame);
2347 if (SHORT1FROMMP(mp1) == INI_COPYKEY ||
2348 SHORT1FROMMP(mp1) == INI_RENAMEKEY)
2349 strcpy(inirec->key, inidata->keyname);
2350 strcpy(inirec->app, inidata->applname);
2351 if (!WinDlgBox(HWND_DESKTOP,
2352 hwnd,
2353 IntraIniProc,
2354 FM3ModHandle, INII_FRAME, (PVOID) inirec)) {
2355 free(inirec);
2356 break;
2357 }
2358 if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
2359 Runtime_Error(pszSrcFile, __LINE__,
2360 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2361 free(inirec);
2362 }
2363 }
2364 }
2365 break;
2366
2367 case INI_BACKUPINI:
2368 inidata = INSTDATA(hwnd);
2369 if (inidata && *inidata->ininame) {
2370
2371 CHAR filename[CCHMAXPATH], *p;
2372
2373 strcpy(filename, inidata->ininame);
2374 p = filename;
2375 while (*p) {
2376 if (*p == '/')
2377 *p = '\\';
2378 p++;
2379 }
2380 p = strrchr(filename, '\\');
2381 if (p) {
2382 p++;
2383 *p = 0;
2384 }
2385 else
2386 *filename = 0;
2387 strcat(filename, "*.INI");
2388 if (export_filename(hwnd, filename, TRUE)) {
2389
2390 PPRFPROFILE prfp;
2391
2392 prfp = xmallocz(sizeof(PRFPROFILE), pszSrcFile, __LINE__);
2393 if (prfp) {
2394 prfp->pszUserName =
2395 xstrdup(inidata->ininame, pszSrcFile, __LINE__);
2396 if (!prfp->pszUserName)
2397 free(prfp);
2398 else {
2399 prfp->cchUserName = strlen(prfp->pszUserName);
2400 prfp->pszSysName = xstrdup(filename, pszSrcFile, __LINE__);
2401 if (!prfp->pszSysName) {
2402 free(prfp->pszUserName);
2403 free(prfp);
2404 }
2405 else {
2406 prfp->cchSysName = strlen(prfp->pszSysName);
2407 if (_beginthread(BackupIniThread, NULL, 122880, (PVOID) prfp)
2408 == -1) {
2409 Runtime_Error(pszSrcFile, __LINE__,
2410 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2411 free(prfp->pszSysName);
2412 free(prfp->pszUserName);
2413 free(prfp);
2414 }
2415 else
2416 DosSleep(250L);
2417 }
2418 }
2419 }
2420 }
2421 }
2422 break;
2423
2424 case INI_CHANGEINI:
2425 inidata = INSTDATA(hwnd);
2426 if (inidata) {
2427 if (WinDlgBox(HWND_DESKTOP,
2428 hwnd,
2429 ChangeIniProc,
2430 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2431 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2432 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2433 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2434 }
2435 }
2436 break;
2437
2438 case INI_SWAPINI:
2439 inidata = INSTDATA(hwnd);
2440 if (inidata) {
2441 if (WinDlgBox(HWND_DESKTOP,
2442 hwnd,
2443 SwapIniProc,
2444 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2445 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2446 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2447 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2448 }
2449 }
2450 break;
2451
2452 case IDM_NEXTWINDOW:
2453 inidata = INSTDATA(hwnd);
2454 if (inidata) {
2455 inidata->currid++;
2456 if (inidata->currid > INI_DATALIST)
2457 inidata->currid = INI_APPLIST;
2458 }
2459 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2460 break;
2461
2462 case IDM_PREVWINDOW:
2463 inidata = INSTDATA(hwnd);
2464 if (inidata) {
2465 inidata->currid--;
2466 if (inidata->currid < INI_APPLIST)
2467 inidata->currid = INI_DATALIST;
2468 }
2469 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2470 break;
2471
2472 case INI_CONFIRM:
2473 inidata = INSTDATA(hwnd);
2474 if (inidata) {
2475 inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
2476 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
2477
2478 }
2479 break;
2480
2481 case INI_EDITENTRY:
2482 case INI_ADDENTRY:
2483 inidata = INSTDATA(hwnd);
2484 if (inidata) {
2485 inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
2486 WinDlgBox(HWND_DESKTOP,
2487 hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID) inidata);
2488 }
2489 break;
2490
2491 case INI_OTHERPROFILE:
2492 inidata = INSTDATA(hwnd);
2493 if (inidata) {
2494
2495 CHAR filename[CCHMAXPATH + 81], *p;
2496 FILESTATUS3 fsa;
2497 HINI hINI;
2498
2499 strcpy(filename, inidata->ininame);
2500 p = filename;
2501 while (*p) {
2502 if (*p == '/')
2503 *p = '\\';
2504 p++;
2505 }
2506 p = strrchr(filename, '\\');
2507 if (p) {
2508 p++;
2509 *p = 0;
2510 }
2511 else
2512 *filename = 0;
2513 strcat(filename, "*.INI");
2514 if (insert_filename(hwnd,
2515 filename,
2516 TRUE,
2517 TRUE) &&
2518 *filename &&
2519 !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
2520 hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename);
2521 if (!hINI) {
2522 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
2523 GetPString(IDS_INICANTOPENINITEXT), filename);
2524 }
2525 else {
2526 if (*inidata->ininame) {
2527 if (inidata->hini)
2528 PrfCloseProfile(inidata->hini);
2529 *inidata->ininame = 0;
2530 }
2531 inidata->hini = hINI;
2532 strcpy(inidata->ininame, filename);
2533 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2534 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2535 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2536 }
2537 }
2538 }
2539 break;
2540
2541 case INI_USERPROFILE:
2542 inidata = INSTDATA(hwnd);
2543 if (inidata) {
2544 if (inidata->hini &&
2545 inidata->hini != HINI_SYSTEMPROFILE &&
2546 inidata->hini != HINI_USERPROFILE)
2547 PrfCloseProfile(inidata->hini);
2548 *inidata->ininame = 0;
2549 inidata->hini = HINI_USERPROFILE;
2550 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2551 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2552 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2553 }
2554 break;
2555
2556 case INI_SYSTEMPROFILE:
2557 inidata = INSTDATA(hwnd);
2558 if (inidata) {
2559 if (inidata->hini &&
2560 inidata->hini != HINI_SYSTEMPROFILE &&
2561 inidata->hini != HINI_USERPROFILE)
2562 PrfCloseProfile(inidata->hini);
2563 *inidata->ininame = 0;
2564 inidata->hini = HINI_SYSTEMPROFILE;
2565 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2566 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2567 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2568 }
2569 break;
2570
2571 case INI_REFRESH:
2572 inidata = INSTDATA(hwnd);
2573 if (inidata) {
2574 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2575 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2576 }
2577 break;
2578
2579 case INI_DELETEKEY:
2580 inidata = INSTDATA(hwnd);
2581 if (inidata && *inidata->applname && *inidata->keyname) {
2582
2583 SHORT keyindex = inidata->keyindex;
2584
2585 if (inidata->confirm && saymsg(MB_YESNO,
2586 hwnd,
2587 GetPString(IDS_CONFIRMTEXT),
2588 GetPString(IDS_INIDELETEKEYTEXT),
2589 inidata->keyname) == MBID_NO)
2590 break;
2591 PrfWriteProfileData(inidata->hini,
2592 inidata->applname, inidata->keyname, NULL, 0L);
2593 *inidata->keyname = 0;
2594 WinSendDlgItemMsg(hwnd,
2595 INI_KEYLIST,
2596 LM_DELETEITEM, MPFROM2SHORT(keyindex, 0), MPVOID);
2597 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2598 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2599 INI_KEYLIST,
2600 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2601 if (!sSel)
2602 WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID);
2603 else {
2604 sSel = min(keyindex, sSel - 1);
2605 WinSendDlgItemMsg(hwnd,
2606 INI_KEYLIST,
2607 LM_SELECTITEM,
2608 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2609 }
2610 }
2611 break;
2612
2613 case INI_DELETEAPP:
2614 inidata = INSTDATA(hwnd);
2615 if (inidata && *inidata->applname) {
2616
2617 SHORT appindex = inidata->appindex;
2618
2619 if (inidata->confirm && saymsg(MB_YESNO,
2620 hwnd,
2621 GetPString(IDS_CONFIRMTEXT),
2622 GetPString(IDS_INIDELETEAPPTEXT),
2623 inidata->applname) == MBID_NO)
2624 break;
2625 PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L);
2626 *inidata->applname = *inidata->keyname = 0;
2627 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2628 WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID);
2629 WinSendDlgItemMsg(hwnd,
2630 INI_APPLIST,
2631 LM_DELETEITEM, MPFROM2SHORT(appindex, 0), MPVOID);
2632 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2633 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2634 INI_APPLIST,
2635 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2636 if (sSel) {
2637 sSel = min(appindex, sSel - 1);
2638 WinSendDlgItemMsg(hwnd,
2639 INI_APPLIST,
2640 LM_SELECTITEM,
2641 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2642 }
2643 }
2644 break;
2645
2646 case DID_OK:
2647 case DID_CANCEL:
2648 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2649 break;
2650
2651 case IDM_HELP:
2652 if (hwndHelp)
2653 WinSendMsg(hwndHelp,
2654 HM_DISPLAY_HELP,
2655 MPFROM2SHORT(HELP_INI, 0), MPFROMSHORT(HM_RESOURCEID));
2656 break;
2657
2658 case IDM_ABOUT:
2659 saymsg(MB_ENTER | MB_ICONASTERISK,
2660 hwnd,
2661 GetPString(IDS_VIEWABOUTTITLETEXT),
2662 GetPString(IDS_INIABOUTTEXT));
2663 break;
2664 }
2665 return 0;
2666
2667 case WM_CLOSE:
2668 if (ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
2669
2670 SWP swp;
2671
2672 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
2673 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
2674 WinStoreWindowPos(FM2Str,
2675 "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
2676 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
2677 }
2678 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
2679 return 0;
2680
2681 case WM_DESTROY:
2682 inidata = INSTDATA(hwnd);
2683 {
2684 BOOL dontclose = FALSE;
2685
2686 if (inidata) {
2687 dontclose = inidata->dontclose;
2688 if (inidata->hini)
2689 PrfCloseProfile(inidata->hini);
2690 if (inidata->data)
2691 free(inidata->data);
2692 if (inidata->hwndPopup)
2693 WinDestroyWindow(inidata->hwndPopup);
2694 free(inidata);
2695 }
2696 if (!dontclose &&
2697 ParentIsDesktop(hwnd, WinQueryWindow(WinQueryWindow(hwnd,
2698 QW_PARENT),
2699 QW_PARENT))) {
2700 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
2701 DosExit(EXIT_PROCESS, 1);
2702 }
2703 }
2704 break;
2705 }
2706 return WinDefWindowProc(hwnd, msg, mp1, mp2);
2707}
Note: See TracBrowser for help on using the repository browser.