source: trunk/dll/inis.c@ 689

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

Commit OpenWatcom compatibility updates

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