source: branches/ticket_150/dll/inis.c@ 1036

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

Removed large file APIs from code where hey are not needed.

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