source: trunk/dll/inis.c@ 574

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

Use QWL_USER; Replace doesn't move the command and Okay on cmd dialog removed error on unchanged command

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