source: trunk/dll/inis.c@ 593

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

Changes to remove GetPString from window class names

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