source: trunk/dll/inis.c@ 841

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

This implements large file support; The wrappers to allow WARP3 compatibility are not done so this will not run on Warp3or Warp 4 pre fixpack 12(?)

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