source: trunk/dll/inis.c@ 689

Last change on this file since 689 was 689, checked in by Steven Levine, 18 years ago

Commit OpenWatcom compatibility updates

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