source: trunk/dll/inis.c@ 377

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

Validate WinCreateWindow

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 102.1 KB
Line 
1
2/***********************************************************************
3
4 $Id: inis.c 377 2006-07-27 06:28:31Z 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_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
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_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
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_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
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_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
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_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
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 PFNWP oldproc;
1847
1848 switch(msg) {
1849 case WM_CREATE:
1850 inidata = xmallocz(sizeof(INIDATA),pszSrcFile,__LINE__);
1851 if(!inidata) {
1852 PostMsg(hwnd,WM_CLOSE,MPVOID,MPVOID);
1853 break;
1854 }
1855 inidata->size = sizeof(INIDATA);
1856 inidata->confirm = TRUE;
1857 inidata->currid = INI_APPLIST;
1858 inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd,QW_PARENT),
1859 FID_MENU);
1860 inidata->hwndIni = hwnd;
1861 WinSetWindowPtr(hwnd,0,(PVOID)inidata);
1862 WinCheckMenuItem(inidata->hwndMenu,INI_CONFIRM,inidata->confirm);
1863
1864 if (!WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL |
1865 LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP,
1866 INI_APPLIST,NULL,NULL))
1867 {
1868 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1869 }
1870 if (!WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL |
1871 LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP,
1872 INI_KEYLIST,NULL,NULL))
1873 {
1874 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1875 }
1876 if (!WinCreateWindow(hwnd,WC_LISTBOX,(PSZ)NULL,WS_VISIBLE | LS_HORZSCROLL |
1877 LS_NOADJUSTPOS, 0,0,0,0,hwnd,HWND_TOP,
1878 INI_DATALIST,NULL,NULL))
1879 {
1880 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1881 }
1882 if (!WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT |
1883 DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP,
1884 INI_NUMAPPS,NULL,NULL))
1885 {
1886 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1887 }
1888 if (!WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT |
1889 DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP,
1890 INI_NUMKEYS,NULL,NULL))
1891 {
1892 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1893 }
1894 if (!WinCreateWindow(hwnd,WC_STATIC,(PSZ)NULL,WS_VISIBLE | SS_TEXT |
1895 DT_CENTER | DT_VCENTER,0,0,0,0,hwnd,HWND_TOP,
1896 INI_NUMDATA,NULL,NULL))
1897 {
1898 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1899 }
1900 if (!WinCreateWindow(hwnd,
1901 WC_STATIC,
1902 GetPString(IDS_APPLICATIONSTITLETEXT),
1903 WS_VISIBLE | SS_TEXT |
1904 DT_CENTER | DT_VCENTER,
1905 0,
1906 0,
1907 0,
1908 0,
1909 hwnd,
1910 HWND_TOP,
1911 INI_APPHDR,
1912 NULL,
1913 NULL))
1914 {
1915 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1916 }
1917 if (!WinCreateWindow(hwnd,
1918 WC_STATIC,
1919 GetPString(IDS_KEYWORDSTITLETEXT),
1920 WS_VISIBLE | SS_TEXT |
1921 DT_CENTER | DT_VCENTER,
1922 0,
1923 0,
1924 0,
1925 0,
1926 hwnd,
1927 HWND_TOP,
1928 INI_KEYHDR,
1929 NULL,
1930 NULL))
1931 {
1932 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1933 }
1934 if (!WinCreateWindow(hwnd,
1935 WC_STATIC,
1936 GetPString(IDS_DATABYTESTITLETEXT),
1937 WS_VISIBLE | SS_TEXT |
1938 DT_CENTER | DT_VCENTER,
1939 0,
1940 0,
1941 0,
1942 0,
1943 hwnd,
1944 HWND_TOP,
1945 INI_DATAHDR,
1946 NULL,
1947 NULL))
1948 {
1949 Win_Error2(hwnd,hwnd,pszSrcFile,__LINE__,IDS_WINCREATEWINDOW);
1950 }
1951
1952 inidata->hwndApp = WinWindowFromID(hwnd,INI_APPLIST);
1953 inidata->hwndKey = WinWindowFromID(hwnd,INI_KEYLIST);
1954 inidata->hwndData = WinWindowFromID(hwnd,INI_DATALIST);
1955
1956 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_APPLIST),
1957 IniLBSubProc);
1958 WinSetWindowPtr(WinWindowFromID(hwnd,INI_APPLIST),
1959 QWL_USER,
1960 (PVOID)oldproc);
1961 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_KEYLIST),
1962 IniLBSubProc);
1963 WinSetWindowPtr(WinWindowFromID(hwnd,INI_KEYLIST),
1964 QWL_USER,
1965 (PVOID)oldproc);
1966 oldproc = WinSubclassWindow(WinWindowFromID(hwnd,INI_DATALIST),
1967 IniLBSubProc2);
1968 WinSetWindowPtr(WinWindowFromID(hwnd,INI_DATALIST),
1969 QWL_USER,
1970 (PVOID)oldproc);
1971 break;
1972
1973 case UM_FOCUSME:
1974 case WM_SETFOCUS:
1975 if(mp2) {
1976 if(hwndMain && fAutoView)
1977 PostMsg(hwndMain,
1978 UM_LOADFILE,
1979 MPVOID,
1980 MPVOID);
1981 inidata = WinQueryWindowPtr(hwnd,0);
1982 if(inidata && hwndStatus) {
1983 if(*inidata->ininame) {
1984 WinSetWindowText(hwndStatus,
1985 GetPString(IDS_INTERNALINIVIEWERTEXT));
1986 if(hwndStatus2)
1987 WinSetWindowText(hwndStatus2,
1988 inidata->ininame);
1989 }
1990 else
1991 PostMsg(hwnd,
1992 UM_SETUP,
1993 MPVOID,
1994 MPVOID);
1995 }
1996 }
1997 if(msg == WM_SETFOCUS)
1998 break;
1999 return 0;
2000
2001 case UM_SELECT:
2002 WinSetFocus(HWND_DESKTOP,
2003 WinWindowFromID(hwnd,INI_APPLIST));
2004 break;
2005
2006 case UM_ACTION:
2007 SetPresParams(WinWindowFromID(hwnd,INI_APPHDR),
2008 &RGBGREY,
2009 &RGBBLACK,
2010 &RGBBLACK,
2011 GetPString(IDS_8HELVBOLDTEXT));
2012 SetPresParams(WinWindowFromID(hwnd,INI_KEYHDR),
2013 &RGBGREY,
2014 &RGBBLACK,
2015 &RGBBLACK,
2016 GetPString(IDS_8HELVBOLDTEXT));
2017 SetPresParams(WinWindowFromID(hwnd,INI_DATAHDR),
2018 &RGBGREY,
2019 &RGBBLACK,
2020 &RGBBLACK,
2021 GetPString(IDS_8HELVBOLDTEXT));
2022 SetPresParams(WinWindowFromID(hwnd,INI_NUMAPPS),
2023 &RGBGREY,
2024 &RGBBLACK,
2025 &RGBBLACK,
2026 GetPString(IDS_8HELVBOLDTEXT));
2027 SetPresParams(WinWindowFromID(hwnd,INI_NUMKEYS),
2028 &RGBGREY,
2029 &RGBBLACK,
2030 &RGBBLACK,
2031 GetPString(IDS_8HELVBOLDTEXT));
2032 SetPresParams(WinWindowFromID(hwnd,INI_NUMDATA),
2033 &RGBGREY,
2034 &RGBBLACK,
2035 &RGBBLACK,
2036 GetPString(IDS_8HELVBOLDTEXT));
2037 if(!WinSetPresParam(WinWindowFromID(hwnd,INI_DATALIST),
2038 PP_FONTNAMESIZE,
2039 (ULONG)strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1,
2040 (PVOID)GetPString(IDS_5SYSTEMVIOTEXT)))
2041 WinSetPresParam(WinWindowFromID(hwnd,INI_DATALIST),
2042 PP_FONTNAMESIZE,
2043 (ULONG)strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
2044 (PVOID)GetPString(IDS_10SYSTEMMONOTEXT));
2045 RestorePresParams(hwnd,
2046 "IniUtil");
2047 return 0;
2048
2049 case WM_PRESPARAMCHANGED:
2050 PresParamChanged(hwnd,
2051 "IniUtil",
2052 mp1,
2053 mp2);
2054 break;
2055
2056 case UM_RESCAN:
2057 inidata = INSTDATA(hwnd);
2058 if(inidata) {
2059 if(mp1) {
2060
2061 SHORT numitems,sSelect;
2062 BOOL inprofile;
2063 ULONG size = 0L;
2064
2065 numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2066 INI_APPLIST,
2067 LM_QUERYITEMCOUNT,
2068 MPVOID,
2069 MPVOID);
2070 if(!numitems) {
2071 PostMsg(hwnd,
2072 WM_COMMAND,
2073 MPFROM2SHORT(INI_REFRESH,0),
2074 MPVOID);
2075 return 0;
2076 }
2077 size = 0L;
2078 if(PrfQueryProfileSize(inidata->hini,
2079 (CHAR *)mp1,
2080 NULL,
2081 (PULONG)&size) &&
2082 size)
2083 inprofile = TRUE;
2084 else
2085 inprofile = FALSE;
2086 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
2087 INI_APPLIST,
2088 LM_SEARCHSTRING,
2089 MPFROM2SHORT(LSS_CASESENSITIVE,
2090 LIT_FIRST),
2091 MPFROMP((CHAR *)mp1));
2092 if(sSelect >= 0) {
2093 if(!inprofile)
2094 WinSendDlgItemMsg(hwnd,
2095 INI_APPLIST,
2096 LM_DELETEITEM,
2097 MPFROMSHORT(sSelect),
2098 MPVOID);
2099 else if(!strcmp(inidata->applname,(CHAR *)mp1))
2100 PostMsg(hwnd,
2101 WM_CONTROL,
2102 MPFROM2SHORT(INI_APPLIST,LN_SELECT),
2103 MPFROMLONG(WinWindowFromID(hwnd,INI_APPLIST)));
2104 }
2105 else if(inprofile)
2106 WinSendDlgItemMsg(hwnd,
2107 INI_APPLIST,
2108 LM_INSERTITEM,
2109 MPFROM2SHORT(LIT_SORTASCENDING,0),
2110 MPFROMP((CHAR *)mp1));
2111 if(mp2 && inidata->applname) {
2112 if(!EnumKeyNames(WinWindowFromID(hwnd,INI_KEYLIST),
2113 inidata->hini,inidata->applname))
2114 PostMsg(hwnd,
2115 WM_COMMAND,
2116 MPFROM2SHORT(INI_REFRESH,0),
2117 MPVOID);
2118 }
2119 }
2120 }
2121 return 0;
2122
2123 case UM_INITIALSIZE: /* kludge */
2124 inidata = WinQueryWindowPtr(hwnd,0);
2125 if(inidata)
2126 inidata->dontclose = TRUE;
2127 return 0;
2128
2129 case WM_SIZE:
2130 {
2131 SHORT cx = SHORT1FROMMP(mp2);
2132 SHORT cy = SHORT2FROMMP(mp2);
2133
2134 WinSetWindowPos(WinWindowFromID(hwnd,INI_APPHDR),HWND_TOP,
2135 2,cy - 22,(cx / 4) - 4,20,
2136 SWP_MOVE | SWP_SIZE);
2137 WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMAPPS),HWND_TOP,
2138 (cx / 4) + 2,cy - 22,(cx / 4) - 4,20,
2139 SWP_MOVE | SWP_SIZE);
2140 WinSetWindowPos(WinWindowFromID(hwnd,INI_APPLIST),HWND_TOP,
2141 2,(cy / 2) + 2,(cx / 2) - 4,(cy / 2) - 28,
2142 SWP_MOVE | SWP_SIZE);
2143 WinSetWindowPos(WinWindowFromID(hwnd,INI_KEYHDR),HWND_TOP,
2144 (cx / 2) + 2,cy - 22,(cx / 4) - 4,20,
2145 SWP_MOVE | SWP_SIZE);
2146 WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMKEYS),HWND_TOP,
2147 (cx - (cx / 4)) + 2,cy - 22,(cx / 4) - 4,20,
2148 SWP_MOVE | SWP_SIZE);
2149 WinSetWindowPos(WinWindowFromID(hwnd,INI_KEYLIST),HWND_TOP,
2150 (cx / 2) + 2,(cy / 2) + 2,(cx / 2) - 4,(cy / 2) - 28,
2151 SWP_MOVE | SWP_SIZE);
2152 WinSetWindowPos(WinWindowFromID(hwnd,INI_DATAHDR),HWND_TOP,
2153 2,(cy / 2) - 22,(cx / 2) - 4,20,
2154 SWP_MOVE | SWP_SIZE);
2155 WinSetWindowPos(WinWindowFromID(hwnd,INI_NUMDATA),HWND_TOP,
2156 (cx / 2) + 2,(cy / 2) - 22,(cx / 2) - 4,20,
2157 SWP_MOVE | SWP_SIZE);
2158 WinSetWindowPos(WinWindowFromID(hwnd,INI_DATALIST),HWND_TOP,
2159 2,2,cx - 4,(cy / 2) - 28,
2160 SWP_MOVE | SWP_SIZE);
2161 }
2162 break;
2163
2164 case UM_LOADFILE:
2165 /* load initial file */
2166 inidata = WinQueryWindowPtr(hwnd,0);
2167 if(inidata) {
2168 if(mp1) {
2169 strcpy(inidata->ininame,(CHAR *)mp1);
2170 inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
2171 inidata->ininame);
2172 free(mp1);
2173 }
2174 else
2175 inidata->hini = HINI_USERPROFILE;
2176 if(!inidata->hini) {
2177 PostMsg(hwnd,
2178 WM_CLOSE,
2179 MPVOID,
2180 MPVOID);
2181 break;
2182 }
2183 WinSendMsg(hwnd,
2184 UM_SETUP,
2185 MPVOID,
2186 MPVOID);
2187 WinSendMsg(hwnd,
2188 UM_SETDIR,
2189 MPVOID,
2190 MPVOID);
2191 WinSetWindowPos(WinQueryWindow(hwnd,QW_PARENT),
2192 HWND_TOP,
2193 0,
2194 0,
2195 0,
2196 0,
2197 SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
2198 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
2199 inidata->hini);
2200 }
2201 else
2202 PostMsg(hwnd,
2203 WM_CLOSE,
2204 MPVOID,
2205 MPVOID);
2206 return 0;
2207
2208 case WM_ERASEBACKGROUND:
2209 WinFillRect((HPS)mp1,
2210 (PRECTL)mp2,
2211 0x00d0d0d0);
2212 return 0;
2213
2214 case WM_PAINT:
2215 {
2216 HPS hps;
2217 RECTL rcl;
2218
2219 hps = WinBeginPaint(hwnd,(HPS)0,NULL);
2220 if(hps) {
2221 WinQueryWindowRect(hwnd,&rcl);
2222 WinFillRect(hps,
2223 &rcl,
2224 CLR_PALEGRAY);
2225 WinEndPaint(hps);
2226 /*
2227 * tell status window to paint its box
2228 */
2229 PaintRecessedWindow(WinWindowFromID(hwnd,INI_APPHDR),
2230 (HPS)0,
2231 FALSE,
2232 FALSE);
2233 PaintRecessedWindow(WinWindowFromID(hwnd,INI_KEYHDR),
2234 (HPS)0,
2235 FALSE,
2236 FALSE);
2237 PaintRecessedWindow(WinWindowFromID(hwnd,INI_DATAHDR),
2238 (HPS)0,
2239 FALSE,
2240 FALSE);
2241 PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMAPPS),
2242 (HPS)0,
2243 FALSE,
2244 FALSE);
2245 PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMKEYS),
2246 (HPS)0,
2247 FALSE,
2248 FALSE);
2249 PaintRecessedWindow(WinWindowFromID(hwnd,INI_NUMDATA),
2250 (HPS)0,
2251 FALSE,
2252 FALSE);
2253 inidata = INSTDATA(hwnd);
2254 if(inidata && inidata->hwndCurrent)
2255 BoxWindow(inidata->hwndCurrent,(HPS)0,CLR_RED);
2256 }
2257 }
2258 break;
2259
2260 case WM_CONTROL:
2261 switch(SHORT1FROMMP(mp1)) {
2262 case INI_KEYLIST:
2263 case INI_APPLIST:
2264 case INI_DATALIST:
2265 switch(SHORT2FROMMP(mp1)) {
2266 case LN_SETFOCUS:
2267 inidata = INSTDATA(hwnd);
2268 if(inidata) {
2269 if(inidata->hwndCurrent)
2270 BoxWindow(inidata->hwndCurrent,
2271 (HPS)0,
2272 CLR_PALEGRAY);
2273 inidata->hwndCurrent = WinWindowFromID(hwnd,
2274 SHORT1FROMMP(mp1));
2275 BoxWindow(WinWindowFromID(hwnd,
2276 SHORT1FROMMP(mp1)),
2277 (HPS)0,
2278 CLR_RED);
2279 }
2280 break;
2281
2282 case LN_ENTER:
2283 case LN_SELECT:
2284 if(SHORT1FROMMP(mp1) == INI_DATALIST)
2285 break;
2286 {
2287 CHAR applname[CCHMAXPATH],keyname[CCHMAXPATH];
2288 SHORT sSelect;
2289
2290 inidata = INSTDATA(hwnd);
2291 if(!inidata || !inidata->hini)
2292 break;
2293 WinSendMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
2294 inidata->keyindex = inidata->appindex = 0;
2295 *applname = *keyname = *inidata->applname =
2296 *inidata->keyname = 0;
2297 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
2298 INI_APPLIST,
2299 LM_QUERYSELECTION,
2300 MPFROM2SHORT(LIT_FIRST,0),
2301 MPVOID);
2302 if(sSelect < 0)
2303 break;
2304 inidata->appindex = sSelect;
2305 WinSendDlgItemMsg(hwnd,
2306 INI_APPLIST,
2307 LM_QUERYITEMTEXT,
2308 MPFROM2SHORT(sSelect,CCHMAXPATH - 1),
2309 MPFROMP(applname));
2310 if(SHORT1FROMMP(mp1) == INI_APPLIST) {
2311 if(!EnumKeyNames(WinWindowFromID(hwnd,INI_KEYLIST),
2312 inidata->hini,
2313 applname))
2314 PostMsg(hwnd,
2315 WM_COMMAND,
2316 MPFROM2SHORT(INI_REFRESH,0),
2317 MPVOID);
2318 }
2319 else {
2320 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,INI_KEYLIST,
2321 LM_QUERYSELECTION,
2322 MPFROM2SHORT(LIT_FIRST,0),
2323 MPVOID);
2324 if(sSelect < 0)
2325 break;
2326 inidata->keyindex = sSelect;
2327 WinSendDlgItemMsg(hwnd,
2328 INI_KEYLIST,
2329 LM_QUERYITEMTEXT,
2330 MPFROM2SHORT(sSelect,CCHMAXPATH - 1),
2331 MPFROMP(keyname));
2332 if(!*keyname || !*applname)
2333 break;
2334 strcpy(inidata->keyname,keyname);
2335 strcpy(inidata->applname,applname);
2336 if(inidata->data)
2337 free(inidata->data);
2338 inidata->data = GetKeyData(WinWindowFromID(hwnd,
2339 INI_DATALIST),
2340 inidata->hini,
2341 applname,
2342 keyname,
2343 &inidata->datalen);
2344 if(!inidata->data)
2345 PostMsg(hwnd,
2346 WM_COMMAND,
2347 MPFROM2SHORT(INI_REFRESH,0),
2348 MPVOID);
2349 }
2350 }
2351 break;
2352 }
2353 break;
2354 }
2355 return 0;
2356
2357 case UM_SETDIR:
2358 {
2359 SHORT num;
2360 CHAR s[81];
2361
2362 num = (SHORT)WinSendDlgItemMsg(hwnd,
2363 INI_APPLIST,
2364 LM_QUERYITEMCOUNT,
2365 MPVOID,
2366 MPVOID);
2367 sprintf(s,"%d",num);
2368 WinSetDlgItemText(hwnd,INI_NUMAPPS,s);
2369 num = (SHORT)WinSendDlgItemMsg(hwnd,
2370 INI_KEYLIST,
2371 LM_QUERYITEMCOUNT,
2372 MPVOID,
2373 MPVOID);
2374 sprintf(s,"%d",num);
2375 WinSetDlgItemText(hwnd,
2376 INI_NUMKEYS,
2377 s);
2378 WinSetDlgItemText(hwnd,
2379 INI_NUMDATA,
2380 "0");
2381 WinSendDlgItemMsg(hwnd,
2382 INI_DATALIST,
2383 LM_DELETEALL,
2384 MPVOID,
2385 MPVOID);
2386 inidata = WinQueryWindowPtr(hwnd,0);
2387 }
2388 return 0;
2389
2390 case UM_SETUP:
2391 inidata = INSTDATA(hwnd);
2392 if(inidata) {
2393
2394 PRFPROFILE prfp;
2395 CHAR sysini[CCHMAXPATH + 81];
2396 CHAR userini[CCHMAXPATH];
2397
2398 memset(&prfp,0,sizeof(PRFPROFILE));
2399 prfp.cchUserName = CCHMAXPATH;
2400 prfp.cchSysName = CCHMAXPATH;
2401 prfp.pszUserName = (PSZ)userini;
2402 prfp.pszSysName = (PSZ)sysini;
2403 if(PrfQueryProfile(WinQueryAnchorBlock(hwnd),&prfp)) {
2404 if(inidata->hini == HINI_SYSTEMPROFILE)
2405 strcpy(inidata->ininame,sysini);
2406 else if(inidata->hini == HINI_USERPROFILE)
2407 strcpy(inidata->ininame,userini);
2408 sprintf(sysini,
2409 GetPString(IDS_INITITLETEXT),
2410 inidata->ininame);
2411 WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT),
2412 sysini);
2413 if(WinQueryWindow(hwnd,QW_PARENT) ==
2414 WinQueryActiveWindow(WinQueryWindow(WinQueryWindow(hwnd,QW_PARENT),
2415 QW_PARENT))) {
2416 if(hwndStatus)
2417 WinSetWindowText(hwndStatus,
2418 GetPString(IDS_INTERNALINIVIEWERTEXT));
2419 if(hwndStatus2)
2420 WinSetWindowText(hwndStatus2,
2421 inidata->ininame);
2422 }
2423 }
2424 else
2425 WinSetWindowText(WinQueryWindow(hwnd,QW_PARENT),
2426 GetPString(IDS_INIQUERYPRFFAILEDTEXT));
2427 }
2428 else
2429 PostMsg(hwnd,
2430 WM_CLOSE,
2431 MPVOID,
2432 MPVOID);
2433 return 0;
2434
2435 case WM_CHAR:
2436 if(!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
2437 if(SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
2438 switch(SHORT2FROMMP(mp2)) {
2439 case VK_DELETE:
2440 inidata = INSTDATA(hwnd);
2441 if(inidata) {
2442
2443 SHORT cmd;
2444
2445 cmd = (inidata->hwndCurrent &&
2446 WinQueryWindowUShort(inidata->hwndCurrent,QWS_ID) ==
2447 INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY;
2448 PostMsg(hwnd,
2449 WM_COMMAND,
2450 MPFROM2SHORT(cmd,0),
2451 MPVOID);
2452 }
2453 break;
2454 }
2455 }
2456 }
2457 break;
2458
2459 case WM_COMMAND:
2460 switch(SHORT1FROMMP(mp1)) {
2461 case IDM_FINDNEXT:
2462 case IDM_FINDFIRST:
2463 inidata = INSTDATA(hwnd);
2464 if(inidata) {
2465 if(inidata->hwndCurrent) {
2466
2467 STRINGINPARMS sip;
2468 static CHAR tofind[258] = "";
2469 SHORT x,z;
2470
2471 if(SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
2472 z = LIT_FIRST;
2473 memset(&sip,0,sizeof(sip));
2474 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
2475 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
2476 sip.inputlen = 257;
2477 sip.ret = tofind;
2478 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
2479 if(WinDlgBox(HWND_DESKTOP,
2480 hwnd,
2481 InputDlgProc,
2482 FM3ModHandle,
2483 STR_FRAME,
2484 &sip)) {
2485 rstrip(tofind);
2486 if (!*tofind) {
2487 DosBeep(50,100);
2488 break;
2489 }
2490 }
2491 else
2492 break;
2493 }
2494 else {
2495 z = (SHORT)WinSendMsg(inidata->hwndCurrent,
2496 LM_QUERYSELECTION,
2497 MPFROM2SHORT(LIT_CURSOR,0),
2498 MPVOID);
2499 if(z < 0)
2500 z = LIT_FIRST;
2501 }
2502 x = (SHORT)WinSendMsg(inidata->hwndCurrent,
2503 LM_SEARCHSTRING,
2504 MPFROM2SHORT(LSS_SUBSTRING,z),
2505 MPFROMP(tofind));
2506 if(x >= 0 && x > z) {
2507 WinSendMsg(inidata->hwndCurrent,
2508 LM_SETTOPINDEX,
2509 MPFROM2SHORT(x,0),
2510 MPVOID);
2511 WinSendMsg(inidata->hwndCurrent,
2512 LM_SELECTITEM,
2513 MPFROM2SHORT(x,0),
2514 MPFROM2SHORT(TRUE,0));
2515 }
2516 else
2517 DosBeep(250,100);
2518 }
2519 }
2520 break;
2521
2522 case IDM_FILTER:
2523 inidata = INSTDATA(hwnd);
2524 if(inidata) {
2525
2526 SHORT numitems;
2527
2528 numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2529 INI_APPLIST,
2530 LM_QUERYITEMCOUNT,
2531 MPVOID,
2532 MPVOID);
2533 if(numitems)
2534 WinDlgBox(HWND_DESKTOP,
2535 hwnd,
2536 FilterIniProc,
2537 FM3ModHandle,
2538 IAF_FRAME,
2539 (PVOID)inidata);
2540 else
2541 DosBeep(50,100);
2542 }
2543 break;
2544
2545 case IDM_COPY:
2546 case IDM_INFO:
2547 case IDM_MOVE:
2548 inidata = WinQueryWindowPtr(hwnd,0);
2549 if(!inidata || !*inidata->ininame)
2550 break;
2551 if(mp2) {
2552
2553 INIREC *inirec;
2554
2555 inirec = xmallocz(sizeof(INIREC),pszSrcFile,__LINE__);
2556 if(inirec) {
2557 *inirec = *(INIREC *)mp2;
2558 inirec->hwndDlg = hwnd;
2559 inirec->confirm = inidata->confirm;
2560 strcpy(inirec->filename1,inidata->ininame);
2561 if (_beginthread(CopyIni,NULL,122880,(PVOID)inirec) == -1) {
2562 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
2563 free(inirec);
2564 }
2565 }
2566 }
2567 break;
2568
2569 case IDM_COMPARE:
2570 inidata = WinQueryWindowPtr(hwnd,0);
2571 if(!inidata || !*inidata->ininame)
2572 break;
2573 if(mp2) {
2574
2575 INIREC *inirec;
2576
2577 inirec = xmalloc(sizeof(INIREC),pszSrcFile,__LINE__);
2578 if (inirec) {
2579 strcpy(inirec->filename2,(CHAR *)(mp2));
2580 strcpy(inirec->filename1,inidata->ininame);
2581 inirec->hwndDlg = hwnd;
2582 if (_beginthread(CompareIni,NULL,122880,(PVOID)inirec) == -1) {
2583 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
2584 free(inirec);
2585 }
2586 }
2587 }
2588 break;
2589
2590 case INI_COPYAPP:
2591 case INI_COPYKEY:
2592 case INI_RENAMEAPP:
2593 case INI_RENAMEKEY:
2594 inidata = WinQueryWindowPtr(hwnd,0);
2595 if(!inidata ||
2596 !*inidata->ininame ||
2597 !*inidata->applname ||
2598 (!*inidata->keyname &&
2599 (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
2600 SHORT1FROMMP(mp1) == INI_COPYKEY)))
2601 break;
2602 {
2603 INIREC *inirec;
2604
2605 inirec = xmallocz(sizeof(INIREC),pszSrcFile,__LINE__);
2606 if (inirec) {
2607 inirec->size = sizeof(INIREC);
2608 inirec->hwndDlg = hwnd;
2609 inirec->confirm = inidata->confirm;
2610 inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
2611 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
2612 IDM_COPY : IDM_MOVE;
2613 strcpy(inirec->filename1,inidata->ininame);
2614 strcpy(inirec->filename2,inidata->ininame);
2615 if(SHORT1FROMMP(mp1) == INI_COPYKEY ||
2616 SHORT1FROMMP(mp1) == INI_RENAMEKEY)
2617 strcpy(inirec->key,inidata->keyname);
2618 strcpy(inirec->app,inidata->applname);
2619 if(!WinDlgBox(HWND_DESKTOP,
2620 hwnd,
2621 IntraIniProc,
2622 FM3ModHandle,
2623 INII_FRAME,
2624 (PVOID)inirec)) {
2625 free(inirec);
2626 break;
2627 }
2628 if (_beginthread(CopyIni,NULL,122880,(PVOID)inirec) == -1) {
2629 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
2630 free(inirec);
2631 }
2632 }
2633 }
2634 break;
2635
2636 case INI_BACKUPINI:
2637 inidata = INSTDATA(hwnd);
2638 if(inidata && *inidata->ininame) {
2639
2640 CHAR filename[CCHMAXPATH],*p;
2641
2642 strcpy(filename,inidata->ininame);
2643 p = filename;
2644 while(*p) {
2645 if(*p == '/')
2646 *p = '\\';
2647 p++;
2648 }
2649 p = strrchr(filename,'\\');
2650 if(p) {
2651 p++;
2652 *p = 0;
2653 }
2654 else
2655 *filename = 0;
2656 strcat(filename,"*.INI");
2657 if(export_filename(hwnd,filename,TRUE)) {
2658
2659 PPRFPROFILE prfp;
2660
2661 prfp = xmallocz(sizeof(PRFPROFILE),pszSrcFile,__LINE__);
2662 if (prfp) {
2663 prfp->pszUserName = xstrdup(inidata->ininame,pszSrcFile,__LINE__);
2664 if (!prfp->pszUserName)
2665 free(prfp);
2666 else {
2667 prfp->cchUserName = strlen(prfp->pszUserName);
2668 prfp->pszSysName = xstrdup(filename,pszSrcFile,__LINE__);
2669 if (!prfp->pszSysName) {
2670 free(prfp->pszUserName);
2671 free(prfp);
2672 }
2673 else {
2674 prfp->cchSysName = strlen(prfp->pszSysName);
2675 if (_beginthread(BackupIni,NULL,122880,(PVOID)prfp) == -1) {
2676 Runtime_Error(pszSrcFile, __LINE__, GetPString(IDS_COULDNTSTARTTHREADTEXT));
2677 free(prfp->pszSysName);
2678 free(prfp->pszUserName);
2679 free(prfp);
2680 }
2681 else
2682 DosSleep(250L);
2683 }
2684 }
2685 }
2686 }
2687 }
2688 break;
2689
2690 case INI_CHANGEINI:
2691 inidata = INSTDATA(hwnd);
2692 if(inidata) {
2693 if(WinDlgBox(HWND_DESKTOP,
2694 hwnd,
2695 ChangeIniProc,
2696 FM3ModHandle,
2697 INIR_FRAME,
2698 (PVOID)inidata->ininame)) {
2699 WinSendMsg(hwnd,
2700 UM_SETUP,
2701 MPVOID,
2702 MPVOID);
2703 WinSendMsg(hwnd,
2704 UM_SETDIR,
2705 MPVOID,
2706 MPVOID);
2707 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
2708 inidata->hini);
2709 }
2710 }
2711 break;
2712
2713 case INI_SWAPINI:
2714 inidata = INSTDATA(hwnd);
2715 if(inidata) {
2716 if(WinDlgBox(HWND_DESKTOP,
2717 hwnd,
2718 SwapIniProc,
2719 FM3ModHandle,
2720 INIR_FRAME,
2721 (PVOID)inidata->ininame)) {
2722 WinSendMsg(hwnd,
2723 UM_SETUP,
2724 MPVOID,
2725 MPVOID);
2726 WinSendMsg(hwnd,
2727 UM_SETDIR,
2728 MPVOID,
2729 MPVOID);
2730 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
2731 inidata->hini);
2732 }
2733 }
2734 break;
2735
2736 case IDM_NEXTWINDOW:
2737 inidata = INSTDATA(hwnd);
2738 if(inidata) {
2739 inidata->currid++;
2740 if(inidata->currid > INI_DATALIST)
2741 inidata->currid = INI_APPLIST;
2742 }
2743 WinSetFocus(HWND_DESKTOP,
2744 WinWindowFromID(hwnd,inidata->currid));
2745 break;
2746
2747 case IDM_PREVWINDOW:
2748 inidata = INSTDATA(hwnd);
2749 if(inidata) {
2750 inidata->currid--;
2751 if(inidata->currid < INI_APPLIST)
2752 inidata->currid = INI_DATALIST;
2753 }
2754 WinSetFocus(HWND_DESKTOP,
2755 WinWindowFromID(hwnd,
2756 inidata->currid));
2757 break;
2758
2759 case INI_CONFIRM:
2760 inidata = INSTDATA(hwnd);
2761 if(inidata) {
2762 inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
2763 WinCheckMenuItem(inidata->hwndMenu,
2764 INI_CONFIRM,
2765 inidata->confirm);
2766
2767 }
2768 break;
2769
2770 case INI_EDITENTRY:
2771 case INI_ADDENTRY:
2772 inidata = INSTDATA(hwnd);
2773 if(inidata) {
2774 inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
2775 WinDlgBox(HWND_DESKTOP,
2776 hwnd,
2777 AddIniProc,
2778 FM3ModHandle,
2779 IAD_FRAME,
2780 (PVOID)inidata);
2781 }
2782 break;
2783
2784 case INI_OTHERPROFILE:
2785 inidata = INSTDATA(hwnd);
2786 if(inidata) {
2787
2788 CHAR filename[CCHMAXPATH + 81],*p;
2789 FILESTATUS3 fsa;
2790 HINI hINI;
2791
2792 strcpy(filename,inidata->ininame);
2793 p = filename;
2794 while(*p) {
2795 if(*p == '/')
2796 *p = '\\';
2797 p++;
2798 }
2799 p = strrchr(filename,'\\');
2800 if(p) {
2801 p++;
2802 *p = 0;
2803 }
2804 else
2805 *filename = 0;
2806 strcat(filename,"*.INI");
2807 if(insert_filename(hwnd,
2808 filename,
2809 TRUE,
2810 TRUE) &&
2811 *filename &&
2812 !DosQueryPathInfo(filename,
2813 FIL_STANDARD,
2814 &fsa,
2815 sizeof(fsa))) {
2816 hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
2817 filename);
2818 if(!hINI) {
2819 Win_Error(hwnd,hwnd,__FILE__,__LINE__,
2820 GetPString(IDS_INICANTOPENINITEXT),
2821 filename);
2822 }
2823 else {
2824 if(*inidata->ininame) {
2825 if(inidata->hini)
2826 PrfCloseProfile(inidata->hini);
2827 *inidata->ininame = 0;
2828 }
2829 inidata->hini = hINI;
2830 strcpy(inidata->ininame,filename);
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 }
2843 }
2844 break;
2845
2846 case INI_USERPROFILE:
2847 inidata = INSTDATA(hwnd);
2848 if(inidata) {
2849 if(inidata->hini &&
2850 inidata->hini != HINI_SYSTEMPROFILE &&
2851 inidata->hini != HINI_USERPROFILE)
2852 PrfCloseProfile(inidata->hini);
2853 *inidata->ininame = 0;
2854 inidata->hini = HINI_USERPROFILE;
2855 WinSendMsg(hwnd,
2856 UM_SETUP,
2857 MPVOID,
2858 MPVOID);
2859 WinSendMsg(hwnd,
2860 UM_SETDIR,
2861 MPVOID,
2862 MPVOID);
2863 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
2864 inidata->hini);
2865 }
2866 break;
2867
2868 case INI_SYSTEMPROFILE:
2869 inidata = INSTDATA(hwnd);
2870 if(inidata) {
2871 if(inidata->hini &&
2872 inidata->hini != HINI_SYSTEMPROFILE &&
2873 inidata->hini != HINI_USERPROFILE)
2874 PrfCloseProfile(inidata->hini);
2875 *inidata->ininame = 0;
2876 inidata->hini = HINI_SYSTEMPROFILE;
2877 WinSendMsg(hwnd,
2878 UM_SETUP,
2879 MPVOID,
2880 MPVOID);
2881 WinSendMsg(hwnd,
2882 UM_SETDIR,
2883 MPVOID,
2884 MPVOID);
2885 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
2886 inidata->hini);
2887 }
2888 break;
2889
2890 case INI_REFRESH:
2891 inidata = INSTDATA(hwnd);
2892 if(inidata) {
2893 WinSendMsg(hwnd,
2894 UM_SETDIR,
2895 MPVOID,
2896 MPVOID);
2897 EnumAppNames(WinWindowFromID(hwnd,INI_APPLIST),
2898 inidata->hini);
2899 }
2900 break;
2901
2902 case INI_DELETEKEY:
2903 inidata = INSTDATA(hwnd);
2904 if(inidata && *inidata->applname &&
2905 *inidata->keyname) {
2906
2907 SHORT keyindex = inidata->keyindex;
2908
2909 if(inidata->confirm && saymsg(MB_YESNO,
2910 hwnd,
2911 GetPString(IDS_CONFIRMTEXT),
2912 GetPString(IDS_INIDELETEKEYTEXT),
2913 inidata->keyname) ==
2914 MBID_NO)
2915 break;
2916 PrfWriteProfileData(inidata->hini,
2917 inidata->applname,
2918 inidata->keyname,
2919 NULL,
2920 0L);
2921 *inidata->keyname = 0;
2922 WinSendDlgItemMsg(hwnd,
2923 INI_KEYLIST,
2924 LM_DELETEITEM,
2925 MPFROM2SHORT(keyindex,0),
2926 MPVOID);
2927 WinSendMsg(hwnd,UM_SETDIR,MPVOID,MPVOID);
2928 sSel = (SHORT)WinSendDlgItemMsg(hwnd,
2929 INI_KEYLIST,
2930 LM_QUERYITEMCOUNT,
2931 MPVOID,
2932 MPVOID);
2933 if(!sSel)
2934 WinSendMsg(hwnd,
2935 INI_DELETEAPP,
2936 MPVOID,
2937 MPVOID);
2938 else {
2939 sSel = min(keyindex,sSel - 1);
2940 WinSendDlgItemMsg(hwnd,
2941 INI_KEYLIST,
2942 LM_SELECTITEM,
2943 MPFROMSHORT(sSel),
2944 MPFROMSHORT(TRUE));
2945 }
2946 }
2947 break;
2948
2949 case INI_DELETEAPP:
2950 inidata = INSTDATA(hwnd);
2951 if(inidata && *inidata->applname) {
2952
2953 SHORT appindex = inidata->appindex;
2954
2955 if(inidata->confirm && saymsg(MB_YESNO,
2956 hwnd,
2957 GetPString(IDS_CONFIRMTEXT),
2958 GetPString(IDS_INIDELETEAPPTEXT),
2959 inidata->applname) ==
2960 MBID_NO)
2961 break;
2962 PrfWriteProfileData(inidata->hini,
2963 inidata->applname,
2964 NULL,
2965 NULL,
2966 0L);
2967 *inidata->applname = *inidata->keyname = 0;
2968 WinSendMsg(hwnd,
2969 UM_SETDIR,
2970 MPVOID,
2971 MPVOID);
2972 WinSendDlgItemMsg(hwnd,
2973 INI_KEYLIST,
2974 LM_DELETEALL,
2975 MPVOID,
2976 MPVOID);
2977 WinSendDlgItemMsg(hwnd,
2978 INI_APPLIST,
2979 LM_DELETEITEM,
2980 MPFROM2SHORT(appindex,0),
2981 MPVOID);
2982 WinSendMsg(hwnd,
2983 UM_SETDIR,
2984 MPVOID,
2985 MPVOID);
2986 sSel = (SHORT)WinSendDlgItemMsg(hwnd,
2987 INI_APPLIST,
2988 LM_QUERYITEMCOUNT,
2989 MPVOID,
2990 MPVOID);
2991 if(sSel) {
2992 sSel = min(appindex,sSel - 1);
2993 WinSendDlgItemMsg(hwnd,
2994 INI_APPLIST,
2995 LM_SELECTITEM,
2996 MPFROMSHORT(sSel),
2997 MPFROMSHORT(TRUE));
2998 }
2999 }
3000 break;
3001
3002 case DID_OK:
3003 case DID_CANCEL:
3004 PostMsg(hwnd,
3005 WM_CLOSE,
3006 MPVOID,
3007 MPVOID);
3008 break;
3009
3010 case IDM_HELP:
3011 if(hwndHelp)
3012 WinSendMsg(hwndHelp,
3013 HM_DISPLAY_HELP,
3014 MPFROM2SHORT(HELP_INI,0),
3015 MPFROMSHORT(HM_RESOURCEID));
3016 break;
3017
3018 case IDM_ABOUT:
3019 saymsg(MB_ENTER | MB_ICONASTERISK,
3020 hwnd,
3021 GetPString(IDS_VIEWABOUTTITLETEXT),
3022 GetPString(IDS_INIABOUTTEXT));
3023 break;
3024 }
3025 return 0;
3026
3027 case WM_CLOSE:
3028 if(ParentIsDesktop(WinQueryWindow(hwnd,QW_PARENT),(HWND)0)) {
3029
3030 SWP swp;
3031
3032 WinQueryWindowPos(WinQueryWindow(hwnd,QW_PARENT),&swp);
3033 if(!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
3034 WinStoreWindowPos(FM2Str,
3035 "INIWindowPos",
3036 WinQueryWindow(hwnd,QW_PARENT));
3037 inidata = WinQueryWindowPtr(hwnd,0);
3038 }
3039 WinDestroyWindow(WinQueryWindow(hwnd,QW_PARENT));
3040 return 0;
3041
3042 case WM_DESTROY:
3043 inidata = INSTDATA(hwnd);
3044 {
3045 BOOL dontclose = FALSE;
3046
3047 if(inidata) {
3048 dontclose = inidata->dontclose;
3049 if(inidata->hini)
3050 PrfCloseProfile(inidata->hini);
3051 if(inidata->data)
3052 free(inidata->data);
3053 if(inidata->hwndPopup)
3054 WinDestroyWindow(inidata->hwndPopup);
3055 free(inidata);
3056 }
3057 if(!dontclose &&
3058 ParentIsDesktop(hwnd,WinQueryWindow(WinQueryWindow(hwnd,
3059 QW_PARENT),
3060 QW_PARENT))) {
3061 if(!PostMsg((HWND)0,
3062 WM_QUIT,
3063 MPVOID,
3064 MPVOID))
3065 DosExit(EXIT_PROCESS,1);
3066 }
3067 }
3068 break;
3069 }
3070 return WinDefWindowProc(hwnd,msg,mp1,mp2);
3071}
3072
Note: See TracBrowser for help on using the repository browser.