source: trunk/dll/inis.c@ 336

Last change on this file since 336 was 336, checked in by root, 19 years ago

Use Runtime_Error

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