source: trunk/dll/inis.c@ 843

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

Revert to standard APIs where large file support not required by ticket #41

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