source: trunk/dll/inis.c@ 551

Last change on this file since 551 was 551, checked in by Gregg Young, 19 years ago

Indentation cleanup

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