source: trunk/dll/inis.c@ 908

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

Avoid out of memory traps in Compare Directories
Rework Compare Directories progress display for 2 second update rate
Start refactoring to reduce dependence on fm3dll.h
Add timer services (IsITimerExpired etc.)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 71.0 KB
RevLine 
[118]1
2/***********************************************************************
3
4 $Id: inis.c 907 2008-01-06 07:26:17Z 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
[871]22 16 Nov 07 SHL Ensure fixup buffer sufficiently large
[118]23
24***********************************************************************/
25
[2]26#include <stdlib.h>
27#include <string.h>
28#include <ctype.h>
29#include <share.h>
[689]30#include <process.h> // _beginthread
[145]31
[907]32#define INCL_DOS
33#define INCL_DOSERRORS
34#define INCL_WIN
35#define INCL_GPI
36#define INCL_LONGLONG // dircnrs.h
37
[2]38#include "fm3dlg.h"
39#include "fm3str.h"
40#include "mle.h"
[907]41#include "errutil.h" // Dos_Error...
42#include "strutil.h" // GetPString
43#include "fm3dll.h"
[2]44
45#pragma data_seg(DATA2)
[336]46
47static PSZ pszSrcFile = __FILE__;
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 {
[847]520 FILEFINDBUF3 ffb;
[551]521 ULONG nm;
522 HDIR hdir;
[2]523
[551]524 hdir = HDIR_CREATE;
[761]525 nm = 1;
[551]526 DosError(FERR_DISABLEHARDERR);
[843]527 if (!DosFindFirst("*.IST",
528 &hdir,
529 FILE_NORMAL | FILE_ARCHIVED,
530 &ffb, sizeof(ffb), &nm, FIL_STANDARD)) {
[551]531 do {
532 priority_bumped();
533 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_INSERTITEM,
534 MPFROMSHORT(LIT_SORTASCENDING),
535 MPFROMP(ffb.achName));
[761]536 nm = 1;
[843]537 } while (!DosFindNext(hdir, &ffb, sizeof(ffb), &nm));
[551]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 }
[843]1182 /* replace temp inis with new permanent inis */
[551]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;
[871]1220 size_t l;
[2]1221
[551]1222 switch (msg) {
1223 case WM_INITDLG:
1224 if (!mp2) {
1225 WinDismissDlg(hwnd, 0);
1226 break;
1227 }
1228 inidata = (INIDATA *) mp2;
1229 if (inidata->edit)
1230 WinSetWindowText(hwnd, GetPString(IDS_INIEDITINITITLETEXT));
[574]1231 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) mp2);
[551]1232 WinSendDlgItemMsg(hwnd,
1233 IAD_APPNAME,
1234 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1235 WinSendDlgItemMsg(hwnd,
1236 IAD_KEYNAME,
1237 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1238 WinSendDlgItemMsg(hwnd,
1239 IAD_DATA,
1240 EM_SETTEXTLIMIT, MPFROM2SHORT(32767, 0), MPVOID);
1241 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1242 WinSetDlgItemText(hwnd, IAD_APPNAME, inidata->applname);
1243 if (inidata->edit) {
1244 WinSetDlgItemText(hwnd, IAD_KEYNAME, inidata->keyname);
1245 if (inidata->data && inidata->datalen) {
[2]1246
[551]1247 CHAR *p;
[2]1248
[551]1249 inidata->isbinary = FALSE;
1250 p = inidata->data;
1251 while ((p - inidata->data) < inidata->datalen - 1) {
1252 if (*p < ' ' || !isprint(*p)) {
1253 inidata->isbinary = TRUE;
1254 break;
1255 }
1256 p++;
1257 }
1258 if (inidata->isbinary) {
1259 inidata->isbinary = TRUE;
1260 WinCheckButton(hwnd, IAD_ISBINARY, TRUE);
1261 if (saymsg(MB_ENTERCANCEL | MB_ICONEXCLAMATION,
1262 hwnd,
1263 GetPString(IDS_WARNINGTEXT),
1264 GetPString(IDS_INIBINARYDATASKIPTEXT)) == MBID_CANCEL)
1265 WinDismissDlg(hwnd, 0);
[871]1266 l = inidata->datalen * 4 + 1;
1267 p = xmallocz(l, pszSrcFile, __LINE__);
[551]1268 if (p) {
[871]1269 fixup(inidata->data, p, l, inidata->datalen);
[551]1270 WinSetDlgItemText(hwnd, IAD_DATA, p);
1271 free(p);
1272 }
1273 }
1274 else
1275 WinSetDlgItemText(hwnd, IAD_DATA, inidata->data);
[2]1276 }
[551]1277 PostMsg(hwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
1278 }
1279 else
1280 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
1281 {
1282 CHAR s[32];
[2]1283
[551]1284 *s = 0;
1285 WinQueryDlgItemText(hwnd, IAD_DATA, 32, s);
1286 if (*s)
1287 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), TRUE);
1288 }
1289 WinSendDlgItemMsg(hwnd, IAD_APPNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
1290 WinSendDlgItemMsg(hwnd, IAD_KEYNAME, EM_QUERYCHANGED, MPVOID, MPVOID);
1291 WinSendDlgItemMsg(hwnd, IAD_DATA, EM_QUERYCHANGED, MPVOID, MPVOID);
1292 break;
[2]1293
[551]1294 case UM_SETDIR:
1295 if (mp1)
1296 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_DATA));
1297 else
1298 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, IAD_KEYNAME));
1299 return 0;
[2]1300
[551]1301 case UM_SETUP:
1302 saymsg(MB_ENTER | MB_ICONASTERISK,
1303 hwnd,
1304 GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIAPPKEYEXISTSTEXT));
1305 return 0;
[2]1306
[551]1307 case WM_CONTROL:
1308 switch (SHORT2FROMMP(mp1)) {
1309 case EN_KILLFOCUS:
1310 inidata = INSTDATA(hwnd);
1311 if (inidata) {
[2]1312
[551]1313 CHAR s[CCHMAXPATH], applname[CCHMAXPATH];
1314 BOOL appchanged = FALSE, keychanged = FALSE;
[2]1315
[551]1316 *applname = 0;
1317 WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
1318 bstrip(applname);
1319 if (*applname) {
1320 *s = 0;
1321 WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, s);
1322 bstrip(s);
1323 if (*s) {
1324 appchanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_APPNAME,
1325 EM_QUERYCHANGED,
1326 MPVOID, MPVOID);
1327 keychanged = (BOOL) WinSendDlgItemMsg(hwnd, IAD_KEYNAME,
1328 EM_QUERYCHANGED,
1329 MPVOID, MPVOID);
1330 if (appchanged || keychanged) {
[2]1331
[551]1332 ULONG size = 0L;
[2]1333
[551]1334 if (PrfQueryProfileSize(inidata->hini, applname, s, &size))
1335 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1336 }
1337 *s = 0;
1338 WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, s);
1339 bstrip(s);
1340 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), (*s != 0));
1341 }
1342 else
1343 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
1344 }
1345 else
1346 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), FALSE);
[2]1347 }
[551]1348 break;
1349 }
1350 return 0;
[2]1351
[551]1352 case WM_COMMAND:
1353 switch (SHORT1FROMMP(mp1)) {
1354 case DID_OK:
1355 {
1356 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH], data[CCHMAXPATH];
1357 INT len;
[2]1358
[551]1359 inidata = INSTDATA(hwnd);
1360 if (!inidata) {
1361 Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
1362 break;
1363 }
1364 inidata->isbinary = WinQueryButtonCheckstate(hwnd, IAD_ISBINARY);
1365 *applname = 0;
1366 WinQueryDlgItemText(hwnd, IAD_APPNAME, CCHMAXPATH, applname);
1367 bstrip(applname);
1368 if (*applname) {
1369 *keyname = 0;
1370 WinQueryDlgItemText(hwnd, IAD_KEYNAME, CCHMAXPATH, keyname);
1371 bstrip(keyname);
1372 if (*keyname) {
1373 *data = 0;
1374 WinQueryDlgItemText(hwnd, IAD_DATA, CCHMAXPATH, data);
1375 if (*data) {
1376 if (inidata->isbinary)
1377 len = literal(data);
1378 else
1379 len = strlen(data) + 1;
1380 PrfWriteProfileData(inidata->hini, applname, keyname, data,
1381 (ULONG) len);
1382 WinSendMsg(inidata->hwndIni, UM_RESCAN,
1383 MPFROMP(applname), MPFROMP(keyname));
1384 WinDismissDlg(hwnd, 1);
1385 }
1386 }
1387 }
1388 }
1389 break;
[2]1390
[551]1391 case DID_CANCEL:
1392 WinDismissDlg(hwnd, 0);
1393 break;
[2]1394
[551]1395 case IDM_HELP:
1396 if (hwndHelp)
1397 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1398 MPFROM2SHORT(HELP_INIADD, 0), MPFROMSHORT(HM_RESOURCEID));
1399 break;
1400 }
1401 return 0;
[2]1402 }
[551]1403 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]1404}
1405
[551]1406static ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
1407 FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
[2]1408
[551]1409HWND StartIniEditor(HWND hwnd, CHAR * fname, INT flags)
[336]1410{
[2]1411 /*
1412 * create an ini editor window
1413 * bitmapped flags:
1414 * 2 = don't position window for non-desktop client
1415 * 4 = don't kill proc when closed
1416 */
1417
[551]1418 HWND hwndFrame, hwndClient;
1419 HINI hINI;
1420 HAB useHab = (HAB) 0;
[2]1421 CHAR *filename = NULL;
1422
[551]1423 if (fExternalINIs || strcmp(realappname, FM3Str))
[2]1424 hwnd = HWND_DESKTOP;
[551]1425 if (hwnd != HWND_DESKTOP)
[2]1426 useHab = WinQueryAnchorBlock(hwnd);
[551]1427 if (fname && *fname) {
1428 filename = xstrdup(fname, pszSrcFile, __LINE__);
[336]1429 if (!filename)
[551]1430 return (HWND) 0;
1431 hINI = PrfOpenProfile(useHab, filename);
1432 if (!hINI) {
[2]1433 free(filename);
[551]1434 return (HWND) 0;
[2]1435 }
1436 else
1437 PrfCloseProfile(hINI);
1438 }
1439
[551]1440 if (ParentIsDesktop(hwnd, hwnd))
[2]1441 flFrameFlags |= FCF_TASKLIST;
1442 hwndFrame = WinCreateStdWindow(hwnd,
[551]1443 0,
1444 &flFrameFlags,
[593]1445 WC_INIEDITOR,
[551]1446 NullStr,
1447 fwsAnimate,
1448 FM3ModHandle, INI_FRAME, &hwndClient);
1449 if (hwndFrame) {
1450 WinSetWindowUShort(hwndFrame, QWS_ID, INI_FRAME);
1451 if (!ParentIsDesktop(hwndFrame, hwnd) && !(flags & 2)) {
[2]1452
1453 SWP swp;
1454
[551]1455 FillClient(hwnd, &swp, NULL, FALSE);
1456 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1457 SWP_SIZE | SWP_MOVE);
[2]1458 }
[551]1459 else if (ParentIsDesktop(hwndFrame, hwnd)) {
1460 if (!WinRestoreWindowPos(FM2Str, "INIWindowPos", hwndFrame)) {
[2]1461
[551]1462 ULONG fl = SWP_MOVE | SWP_SIZE;
1463 SWP swp;
[2]1464
[551]1465 WinQueryTaskSizePos(WinQueryAnchorBlock(hwndFrame), 0L, &swp);
1466 if (swp.fl & (SWP_MINIMIZE | SWP_HIDE))
1467 fl = swp.fl;
1468 else if (swp.fl & SWP_ACTIVATE)
1469 fl |= SWP_ACTIVATE;
1470 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1471 fl);
[2]1472 }
1473 }
[551]1474 PostMsg(hwndClient, UM_SELECT, MPVOID, MPVOID);
1475 PostMsg(hwndClient, UM_ACTION, MPVOID, MPVOID);
1476 if (!PostMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1477 filename : NULL)), MPVOID))
1478 WinSendMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1479 filename : NULL)), MPVOID);
1480 if (flags & 4)
1481 PostMsg(hwndClient, UM_INITIALSIZE, MPVOID, MPVOID);
[2]1482 }
[551]1483 else if (filename)
[2]1484 free(filename);
1485 return hwndFrame;
1486}
1487
[551]1488MRESULT EXPENTRY IniLBSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[336]1489{
[574]1490 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
[551]1491 static HWND hwndPopup = (HWND) 0;
[2]1492
[551]1493 switch (msg) {
1494 case WM_SETFOCUS:
1495 if (mp2)
1496 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1497 break;
[2]1498
[551]1499 case WM_MENUEND:
1500 if (hwndPopup == (HWND) mp2) {
1501 WinDestroyWindow(hwndPopup);
1502 hwndPopup = (HWND) 0;
1503 }
1504 break;
[2]1505
[551]1506 case WM_CONTEXTMENU:
1507 {
1508 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
[2]1509
[551]1510 switch (id) {
1511 case INI_APPLIST:
1512 id = INI_APPMENU;
1513 break;
1514 case INI_KEYLIST:
1515 id = INI_KEYMENU;
1516 break;
1517 default:
1518 id = 0;
1519 break;
[2]1520 }
[551]1521 if (id) {
1522 if (hwndPopup)
1523 WinDestroyWindow(hwndPopup);
1524 hwndPopup = WinLoadMenu(HWND_DESKTOP, FM3ModHandle, id);
1525 if (hwndPopup)
1526 WinPopupMenu(hwnd, WinQueryWindow(hwnd, QW_PARENT),
1527 hwndPopup, 8, 8, 0,
1528 PU_HCONSTRAIN | PU_VCONSTRAIN |
1529 PU_KEYBOARD | PU_MOUSEBUTTON1);
1530 }
1531 }
1532 break;
[2]1533
[551]1534 case WM_BEGINDRAG:
1535 {
1536 PDRAGINFO pDInfo;
1537 DRAGITEM DItem;
1538 DRAGIMAGE DIcon;
1539 INIDATA *inidata;
1540 HPOINTER hptrINI;
1541 USHORT id;
[603]1542 HWND hDrop = 0;
[2]1543
[551]1544 id = WinQueryWindowUShort(hwnd, QWS_ID);
[574]1545 inidata = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
[551]1546 if (!inidata || !*inidata->ininame || !*inidata->applname ||
1547 !inidata->keyname) {
1548 DosBeep(50, 100);
1549 break;
[2]1550 }
[551]1551 hptrINI = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, INI_FRAME);
1552 memset(&DItem, 0, sizeof(DItem));
1553 memset(&DIcon, 0, sizeof(DIcon));
1554 DIcon.cb = sizeof(DIcon);
1555 DIcon.cptl = 0;
1556 DIcon.hImage = hptrINI;
1557 DIcon.fl = DRG_ICON;
1558 DIcon.sizlStretch.cx = 32;
1559 DIcon.sizlStretch.cy = 32;
1560 DIcon.cxOffset = -16;
1561 DIcon.cyOffset = 0;
1562 DItem.hwndItem = hwnd;
1563 DItem.ulItemID = 0L;
1564 DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN);
1565 DItem.hstrRMF = DrgAddStrHandle("<DRM_FM2INIRECORD,DRF_FM2INI>");
1566 DItem.hstrContainerName = DrgAddStrHandle(inidata->ininame);
1567 DItem.hstrSourceName = DrgAddStrHandle(inidata->applname);
1568 if (id == INI_APPLIST)
1569 DItem.hstrTargetName = DrgAddStrHandle(NullStr);
1570 else
1571 DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
1572 DItem.fsControl = 0;
1573 DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
1574 pDInfo = DrgAllocDraginfo(1L);
1575 DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
[603]1576 hDrop = DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
[618]1577 if (hDrop == NULLHANDLE)
[843]1578 FreeDragInfoData(hwnd, pDInfo);
[551]1579 WinDestroyPointer(hptrINI);
1580 }
1581 break;
[2]1582
[551]1583 case DM_DRAGOVER:
1584 {
1585 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
[618]1586 PDRAGITEM pDItem;
[2]1587
[618]1588 if (!DrgAccessDraginfo(pDInfo)) {
[843]1589 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1590 "DrgAccessDraginfo");
[2]1591 }
[618]1592 else {
[843]1593 pDItem = DrgQueryDragitemPtr(pDInfo,0);
1594 /* Check valid rendering mechanisms and data */
1595 if (DrgVerifyRMF(pDItem, DRM_OS2FILE, NULL)) {
[551]1596 DrgFreeDraginfo(pDInfo);
[618]1597 return (MRFROM2SHORT(DOR_DROP, DO_LINK)); /* OK to drop */
[843]1598 }
1599 else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
[618]1600 if (WinQueryWindow(pDInfo->hwndSource, QW_PARENT) !=
1601 WinQueryWindow(hwnd, QW_PARENT))
1602 {
1603 DrgFreeDraginfo(pDInfo);
1604 return (MRFROM2SHORT(DOR_DROP, ((fCopyDefault) ? DO_COPY : DO_MOVE)));
1605 }
[843]1606 }
1607 DrgFreeDraginfo(pDInfo);
[551]1608 }
1609 }
[618]1610 return MRFROM2SHORT(DOR_NEVERDROP, 0);
[2]1611
[551]1612 case DM_DRAGLEAVE:
[2]1613
[551]1614 break;
[2]1615
[551]1616 case DM_DROP:
1617 {
1618 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
[843]1619 PDRAGITEM pDItem; /* Pointer to DRAGITEM */
[618]1620 ULONG numitems, curitem, len;
[551]1621 USHORT action;
1622 CHAR szFrom[CCHMAXPATH + 2], szDir[CCHMAXPATH + 1],
1623 szTemp[CCHMAXPATH + 2];
[847]1624 FILESTATUS3 fsa;
[551]1625 INIREC inirec;
[2]1626
[618]1627 if (!DrgAccessDraginfo(pDInfo)) {
[843]1628 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1629 "DrgAccessDraginfo");
1630 return 0;
[618]1631 }
[551]1632 numitems = DrgQueryDragitemCount(pDInfo);
[618]1633 for (curitem = 0; curitem < numitems; curitem++) {
[551]1634 pDItem = DrgQueryDragitemPtr(pDInfo, curitem);
1635 if (DrgVerifyRMF(pDItem, DRM_OS2FILE, NULL)) {
1636 if (pDItem->fsControl & DC_PREPARE)
1637 DrgSendTransferMsg(pDItem->hwndItem,
1638 DM_ENDCONVERSATION,
1639 MPFROMLONG(pDItem->ulItemID),
1640 MPFROMLONG(DMFL_TARGETFAIL));
1641 else {
1642 if (FullDrgName(pDItem, szFrom, sizeof(szFrom)) &&
[843]1643 !DosQueryPathInfo(szFrom, FIL_STANDARD, &fsa, sizeof(fsa)))
[551]1644 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1645 MPFROM2SHORT(IDM_COMPARE, 0), MPFROMP(szFrom));
1646 DrgSendTransferMsg(pDItem->hwndItem,
1647 DM_ENDCONVERSATION,
1648 MPFROMLONG(pDItem->ulItemID),
1649 MPFROMLONG(DMFL_TARGETFAIL));
1650 }
1651 }
1652 else if (DrgVerifyRMF(pDItem, DRM_FM2INIRECORD, DRF_FM2INI)) {
1653 *szDir = *szFrom = *szTemp = 0;
1654 len = DrgQueryStrName(pDItem->hstrContainerName, CCHMAXPATH, szDir);
1655 szDir[len] = 0;
1656 len = DrgQueryStrName(pDItem->hstrSourceName, CCHMAXPATH, szFrom);
1657 szFrom[len] = 0;
1658 len = DrgQueryStrName(pDItem->hstrTargetName, CCHMAXPATH, szTemp);
1659 szTemp[len] = 0;
1660 switch (pDInfo->usOperation) {
1661 case DO_MOVE:
1662 action = IDM_MOVE;
1663 break;
1664 case DO_COPY:
1665 action = IDM_COPY;
1666 break;
1667 default:
1668 action = IDM_INFO;
1669 break;
1670 }
1671 memset(&inirec, 0, sizeof(inirec));
1672 inirec.size = sizeof(inirec);
1673 strcpy(inirec.filename2, szDir);
1674 strcpy(inirec.app, szFrom);
1675 strcpy(inirec.key, szTemp);
1676 inirec.action = action;
1677 inirec.hwndSource = WinQueryWindow(pDInfo->hwndSource, QW_PARENT);
1678 WinSendMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
1679 MPFROM2SHORT(action, 0), MPFROMP(&inirec));
1680 DrgSendTransferMsg(pDItem->hwndItem,
1681 DM_ENDCONVERSATION,
1682 MPFROMLONG(pDItem->ulItemID),
1683 MPFROMLONG(DMFL_TARGETFAIL));
1684 }
[618]1685 } // for
1686 FreeDragInfoData(hwnd, pDInfo);
[551]1687 }
1688 return 0;
[2]1689
[551]1690 case WM_DESTROY:
1691 if (hwndPopup)
1692 WinDestroyWindow(hwndPopup);
1693 hwndPopup = (HWND) 0;
1694 break;
[618]1695 } // switch
[551]1696 if (oldproc)
1697 return oldproc(hwnd, msg, mp1, mp2);
1698 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]1699}
1700
[551]1701MRESULT EXPENTRY IniLBSubProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[336]1702{
[574]1703 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
[2]1704
[551]1705 switch (msg) {
1706 case WM_SETFOCUS:
1707 if (mp2)
1708 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1709 break;
[2]1710 }
[551]1711 if (oldproc)
1712 return oldproc(hwnd, msg, mp1, mp2);
1713 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]1714}
1715
[551]1716MRESULT EXPENTRY IniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
[336]1717{
[2]1718 INIDATA *inidata;
[551]1719 SHORT sSel;
[377]1720 PFNWP oldproc;
[2]1721
[551]1722 switch (msg) {
1723 case WM_CREATE:
1724 inidata = xmallocz(sizeof(INIDATA), pszSrcFile, __LINE__);
1725 if (!inidata) {
1726 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1727 break;
1728 }
1729 inidata->size = sizeof(INIDATA);
1730 inidata->confirm = TRUE;
1731 inidata->currid = INI_APPLIST;
1732 inidata->hwndMenu = WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
1733 FID_MENU);
1734 inidata->hwndIni = hwnd;
[574]1735 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) inidata);
[551]1736 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
[377]1737
[551]1738 if (!WinCreateWindow
1739 (hwnd, WC_LISTBOX, (PSZ) NULL,
1740 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1741 HWND_TOP, INI_APPLIST, NULL, NULL)) {
1742 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1743 }
1744 if (!WinCreateWindow
1745 (hwnd, WC_LISTBOX, (PSZ) NULL,
1746 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1747 HWND_TOP, INI_KEYLIST, NULL, NULL)) {
1748 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1749 }
1750 if (!WinCreateWindow
1751 (hwnd, WC_LISTBOX, (PSZ) NULL,
1752 WS_VISIBLE | LS_HORZSCROLL | LS_NOADJUSTPOS, 0, 0, 0, 0, hwnd,
1753 HWND_TOP, INI_DATALIST, NULL, NULL)) {
1754 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1755 }
1756 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1757 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1758 INI_NUMAPPS, NULL, NULL)) {
1759 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1760 }
1761 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1762 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1763 INI_NUMKEYS, NULL, NULL)) {
1764 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1765 }
1766 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1767 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1768 INI_NUMDATA, NULL, NULL)) {
1769 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1770 }
1771 if (!WinCreateWindow(hwnd,
1772 WC_STATIC,
1773 GetPString(IDS_APPLICATIONSTITLETEXT),
1774 WS_VISIBLE | SS_TEXT |
1775 DT_CENTER | DT_VCENTER,
1776 0,
1777 0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL)) {
1778 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1779 }
1780 if (!WinCreateWindow(hwnd,
1781 WC_STATIC,
1782 GetPString(IDS_KEYWORDSTITLETEXT),
1783 WS_VISIBLE | SS_TEXT |
1784 DT_CENTER | DT_VCENTER,
1785 0,
1786 0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL)) {
1787 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1788 }
1789 if (!WinCreateWindow(hwnd,
1790 WC_STATIC,
1791 GetPString(IDS_DATABYTESTITLETEXT),
1792 WS_VISIBLE | SS_TEXT |
1793 DT_CENTER | DT_VCENTER,
1794 0,
1795 0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL)) {
1796 Win_Error2(hwnd, hwnd, pszSrcFile, __LINE__, IDS_WINCREATEWINDOW);
1797 }
[377]1798
[551]1799 inidata->hwndApp = WinWindowFromID(hwnd, INI_APPLIST);
1800 inidata->hwndKey = WinWindowFromID(hwnd, INI_KEYLIST);
1801 inidata->hwndData = WinWindowFromID(hwnd, INI_DATALIST);
[2]1802
[551]1803 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_APPLIST),
1804 IniLBSubProc);
1805 WinSetWindowPtr(WinWindowFromID(hwnd, INI_APPLIST),
1806 QWL_USER, (PVOID) oldproc);
1807 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_KEYLIST),
1808 IniLBSubProc);
1809 WinSetWindowPtr(WinWindowFromID(hwnd, INI_KEYLIST),
1810 QWL_USER, (PVOID) oldproc);
1811 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_DATALIST),
1812 IniLBSubProc2);
1813 WinSetWindowPtr(WinWindowFromID(hwnd, INI_DATALIST),
1814 QWL_USER, (PVOID) oldproc);
1815 break;
[2]1816
[551]1817 case UM_FOCUSME:
1818 case WM_SETFOCUS:
1819 if (mp2) {
1820 if (hwndMain && fAutoView)
1821 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
[574]1822 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]1823 if (inidata && hwndStatus) {
1824 if (*inidata->ininame) {
1825 WinSetWindowText(hwndStatus, GetPString(IDS_INTERNALINIVIEWERTEXT));
1826 if (hwndStatus2)
1827 WinSetWindowText(hwndStatus2, inidata->ininame);
1828 }
1829 else
1830 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
[2]1831 }
[551]1832 }
1833 if (msg == WM_SETFOCUS)
[2]1834 break;
[551]1835 return 0;
[2]1836
[551]1837 case UM_SELECT:
1838 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, INI_APPLIST));
1839 break;
[2]1840
[551]1841 case UM_ACTION:
1842 SetPresParams(WinWindowFromID(hwnd, INI_APPHDR),
1843 &RGBGREY,
1844 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1845 SetPresParams(WinWindowFromID(hwnd, INI_KEYHDR),
1846 &RGBGREY,
1847 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1848 SetPresParams(WinWindowFromID(hwnd, INI_DATAHDR),
1849 &RGBGREY,
1850 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1851 SetPresParams(WinWindowFromID(hwnd, INI_NUMAPPS),
1852 &RGBGREY,
1853 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1854 SetPresParams(WinWindowFromID(hwnd, INI_NUMKEYS),
1855 &RGBGREY,
1856 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1857 SetPresParams(WinWindowFromID(hwnd, INI_NUMDATA),
1858 &RGBGREY,
1859 &RGBBLACK, &RGBBLACK, GetPString(IDS_8HELVBOLDTEXT));
1860 if (!WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1861 PP_FONTNAMESIZE,
1862 (ULONG) strlen(GetPString(IDS_5SYSTEMVIOTEXT)) + 1,
1863 (PVOID) GetPString(IDS_5SYSTEMVIOTEXT)))
1864 WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1865 PP_FONTNAMESIZE,
1866 (ULONG) strlen(GetPString(IDS_10SYSTEMMONOTEXT)) + 1,
1867 (PVOID) GetPString(IDS_10SYSTEMMONOTEXT));
1868 RestorePresParams(hwnd, "IniUtil");
1869 return 0;
[2]1870
[551]1871 case WM_PRESPARAMCHANGED:
1872 PresParamChanged(hwnd, "IniUtil", mp1, mp2);
1873 break;
[2]1874
[551]1875 case UM_RESCAN:
1876 inidata = INSTDATA(hwnd);
1877 if (inidata) {
1878 if (mp1) {
[2]1879
[551]1880 SHORT numitems, sSelect;
1881 BOOL inprofile;
1882 ULONG size = 0L;
1883
1884 numitems = (SHORT) WinSendDlgItemMsg(hwnd,
1885 INI_APPLIST,
1886 LM_QUERYITEMCOUNT,
1887 MPVOID, MPVOID);
1888 if (!numitems) {
1889 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
1890 return 0;
1891 }
1892 size = 0L;
1893 if (PrfQueryProfileSize(inidata->hini,
1894 (CHAR *) mp1, NULL, (PULONG) & size) && size)
1895 inprofile = TRUE;
1896 else
1897 inprofile = FALSE;
1898 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
1899 INI_APPLIST,
1900 LM_SEARCHSTRING,
1901 MPFROM2SHORT(LSS_CASESENSITIVE,
1902 LIT_FIRST),
1903 MPFROMP((CHAR *) mp1));
1904 if (sSelect >= 0) {
1905 if (!inprofile)
1906 WinSendDlgItemMsg(hwnd,
1907 INI_APPLIST,
1908 LM_DELETEITEM, MPFROMSHORT(sSelect), MPVOID);
1909 else if (!strcmp(inidata->applname, (CHAR *) mp1))
1910 PostMsg(hwnd,
1911 WM_CONTROL,
1912 MPFROM2SHORT(INI_APPLIST, LN_SELECT),
1913 MPFROMLONG(WinWindowFromID(hwnd, INI_APPLIST)));
1914 }
1915 else if (inprofile)
1916 WinSendDlgItemMsg(hwnd,
1917 INI_APPLIST,
1918 LM_INSERTITEM,
1919 MPFROM2SHORT(LIT_SORTASCENDING, 0),
1920 MPFROMP((CHAR *) mp1));
1921 if (mp2 && inidata->applname) {
1922 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
1923 inidata->hini, inidata->applname))
1924 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
1925 }
[2]1926 }
[551]1927 }
1928 return 0;
[2]1929
[551]1930 case UM_INITIALSIZE: /* kludge */
[574]1931 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]1932 if (inidata)
1933 inidata->dontclose = TRUE;
1934 return 0;
[2]1935
[551]1936 case WM_SIZE:
1937 {
1938 SHORT cx = SHORT1FROMMP(mp2);
1939 SHORT cy = SHORT2FROMMP(mp2);
[2]1940
[551]1941 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPHDR), HWND_TOP,
1942 2, cy - 22, (cx / 4) - 4, 20, SWP_MOVE | SWP_SIZE);
1943 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMAPPS), HWND_TOP,
1944 (cx / 4) + 2, cy - 22, (cx / 4) - 4, 20,
1945 SWP_MOVE | SWP_SIZE);
1946 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPLIST), HWND_TOP,
1947 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
1948 SWP_MOVE | SWP_SIZE);
1949 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYHDR), HWND_TOP,
1950 (cx / 2) + 2, cy - 22, (cx / 4) - 4, 20,
1951 SWP_MOVE | SWP_SIZE);
1952 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMKEYS), HWND_TOP,
1953 (cx - (cx / 4)) + 2, cy - 22, (cx / 4) - 4, 20,
1954 SWP_MOVE | SWP_SIZE);
1955 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYLIST), HWND_TOP,
1956 (cx / 2) + 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
1957 SWP_MOVE | SWP_SIZE);
1958 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATAHDR), HWND_TOP,
1959 2, (cy / 2) - 22, (cx / 2) - 4, 20,
1960 SWP_MOVE | SWP_SIZE);
1961 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMDATA), HWND_TOP,
1962 (cx / 2) + 2, (cy / 2) - 22, (cx / 2) - 4, 20,
1963 SWP_MOVE | SWP_SIZE);
1964 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATALIST), HWND_TOP,
1965 2, 2, cx - 4, (cy / 2) - 28, SWP_MOVE | SWP_SIZE);
1966 }
1967 break;
[2]1968
[551]1969 case UM_LOADFILE:
1970 /* load initial file */
[574]1971 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]1972 if (inidata) {
1973 if (mp1) {
1974 strcpy(inidata->ininame, (CHAR *) mp1);
1975 inidata->hini = PrfOpenProfile(WinQueryAnchorBlock(hwnd),
1976 inidata->ininame);
1977 free(mp1);
[2]1978 }
1979 else
[551]1980 inidata->hini = HINI_USERPROFILE;
1981 if (!inidata->hini) {
1982 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1983 break;
1984 }
1985 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1986 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
1987 WinSetWindowPos(WinQueryWindow(hwnd, QW_PARENT),
1988 HWND_TOP,
1989 0, 0, 0, 0, SWP_SHOW | SWP_ACTIVATE | SWP_ZORDER);
1990 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
1991 }
1992 else
1993 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
1994 return 0;
[2]1995
[551]1996 case WM_ERASEBACKGROUND:
1997 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
1998 return 0;
[2]1999
[551]2000 case WM_PAINT:
2001 {
2002 HPS hps;
2003 RECTL rcl;
[2]2004
[551]2005 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2006 if (hps) {
2007 WinQueryWindowRect(hwnd, &rcl);
2008 WinFillRect(hps, &rcl, CLR_PALEGRAY);
2009 WinEndPaint(hps);
2010 /*
2011 * tell status window to paint its box
2012 */
2013 PaintRecessedWindow(WinWindowFromID(hwnd, INI_APPHDR),
2014 (HPS) 0, FALSE, FALSE);
2015 PaintRecessedWindow(WinWindowFromID(hwnd, INI_KEYHDR),
2016 (HPS) 0, FALSE, FALSE);
2017 PaintRecessedWindow(WinWindowFromID(hwnd, INI_DATAHDR),
2018 (HPS) 0, FALSE, FALSE);
2019 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMAPPS),
2020 (HPS) 0, FALSE, FALSE);
2021 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMKEYS),
2022 (HPS) 0, FALSE, FALSE);
2023 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMDATA),
2024 (HPS) 0, FALSE, FALSE);
2025 inidata = INSTDATA(hwnd);
2026 if (inidata && inidata->hwndCurrent)
2027 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
[2]2028 }
[551]2029 }
2030 break;
[2]2031
[551]2032 case WM_CONTROL:
2033 switch (SHORT1FROMMP(mp1)) {
2034 case INI_KEYLIST:
2035 case INI_APPLIST:
2036 case INI_DATALIST:
2037 switch (SHORT2FROMMP(mp1)) {
2038 case LN_SETFOCUS:
2039 inidata = INSTDATA(hwnd);
2040 if (inidata) {
2041 if (inidata->hwndCurrent)
2042 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
2043 inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1));
2044 BoxWindow(WinWindowFromID(hwnd,
2045 SHORT1FROMMP(mp1)), (HPS) 0, CLR_RED);
2046 }
2047 break;
[2]2048
[551]2049 case LN_ENTER:
2050 case LN_SELECT:
2051 if (SHORT1FROMMP(mp1) == INI_DATALIST)
2052 break;
2053 {
2054 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
2055 SHORT sSelect;
[2]2056
[551]2057 inidata = INSTDATA(hwnd);
2058 if (!inidata || !inidata->hini)
2059 break;
2060 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2061 inidata->keyindex = inidata->appindex = 0;
2062 *applname = *keyname = *inidata->applname = *inidata->keyname = 0;
2063 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2064 INI_APPLIST,
2065 LM_QUERYSELECTION,
2066 MPFROM2SHORT(LIT_FIRST, 0),
2067 MPVOID);
2068 if (sSelect < 0)
2069 break;
2070 inidata->appindex = sSelect;
2071 WinSendDlgItemMsg(hwnd,
2072 INI_APPLIST,
2073 LM_QUERYITEMTEXT,
2074 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2075 MPFROMP(applname));
2076 if (SHORT1FROMMP(mp1) == INI_APPLIST) {
2077 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2078 inidata->hini, applname))
2079 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2080 }
2081 else {
2082 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, INI_KEYLIST,
2083 LM_QUERYSELECTION,
2084 MPFROM2SHORT(LIT_FIRST, 0),
2085 MPVOID);
2086 if (sSelect < 0)
2087 break;
2088 inidata->keyindex = sSelect;
2089 WinSendDlgItemMsg(hwnd,
2090 INI_KEYLIST,
2091 LM_QUERYITEMTEXT,
2092 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2093 MPFROMP(keyname));
2094 if (!*keyname || !*applname)
2095 break;
2096 strcpy(inidata->keyname, keyname);
2097 strcpy(inidata->applname, applname);
2098 if (inidata->data)
2099 free(inidata->data);
2100 inidata->data = GetKeyData(WinWindowFromID(hwnd,
2101 INI_DATALIST),
2102 inidata->hini,
2103 applname, keyname, &inidata->datalen);
2104 if (!inidata->data)
2105 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2106 }
2107 }
2108 break;
[2]2109 }
[551]2110 break;
2111 }
2112 return 0;
[2]2113
[551]2114 case UM_SETDIR:
2115 {
2116 SHORT num;
2117 CHAR s[81];
[2]2118
[551]2119 num = (SHORT) WinSendDlgItemMsg(hwnd,
2120 INI_APPLIST,
2121 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
[900]2122 sprintf(s, "%u", num);
[551]2123 WinSetDlgItemText(hwnd, INI_NUMAPPS, s);
2124 num = (SHORT) WinSendDlgItemMsg(hwnd,
2125 INI_KEYLIST,
2126 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
[900]2127 sprintf(s, "%u", num);
[551]2128 WinSetDlgItemText(hwnd, INI_NUMKEYS, s);
2129 WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
2130 WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
[574]2131 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]2132 }
2133 return 0;
[2]2134
[551]2135 case UM_SETUP:
2136 inidata = INSTDATA(hwnd);
2137 if (inidata) {
[2]2138
[551]2139 PRFPROFILE prfp;
2140 CHAR sysini[CCHMAXPATH + 81];
2141 CHAR userini[CCHMAXPATH];
[2]2142
[551]2143 memset(&prfp, 0, sizeof(PRFPROFILE));
2144 prfp.cchUserName = CCHMAXPATH;
2145 prfp.cchSysName = CCHMAXPATH;
2146 prfp.pszUserName = (PSZ) userini;
2147 prfp.pszSysName = (PSZ) sysini;
2148 if (PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
2149 if (inidata->hini == HINI_SYSTEMPROFILE)
2150 strcpy(inidata->ininame, sysini);
2151 else if (inidata->hini == HINI_USERPROFILE)
2152 strcpy(inidata->ininame, userini);
2153 sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame);
2154 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), sysini);
2155 if (WinQueryWindow(hwnd, QW_PARENT) ==
2156 WinQueryActiveWindow(WinQueryWindow
2157 (WinQueryWindow(hwnd, QW_PARENT),
2158 QW_PARENT))) {
2159 if (hwndStatus)
2160 WinSetWindowText(hwndStatus,
2161 GetPString(IDS_INTERNALINIVIEWERTEXT));
2162 if (hwndStatus2)
2163 WinSetWindowText(hwndStatus2, inidata->ininame);
2164 }
[2]2165 }
2166 else
[551]2167 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT),
2168 GetPString(IDS_INIQUERYPRFFAILEDTEXT));
2169 }
2170 else
2171 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2172 return 0;
[2]2173
[551]2174 case WM_CHAR:
2175 if (!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
2176 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
2177 switch (SHORT2FROMMP(mp2)) {
2178 case VK_DELETE:
2179 inidata = INSTDATA(hwnd);
2180 if (inidata) {
[2]2181
[551]2182 SHORT cmd;
[2]2183
[551]2184 cmd = (inidata->hwndCurrent &&
2185 WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
2186 INI_APPLIST) ? INI_DELETEAPP : INI_DELETEKEY;
2187 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
2188 }
2189 break;
2190 }
[2]2191 }
[551]2192 }
2193 break;
[2]2194
[551]2195 case WM_COMMAND:
2196 switch (SHORT1FROMMP(mp1)) {
2197 case IDM_FINDNEXT:
2198 case IDM_FINDFIRST:
2199 inidata = INSTDATA(hwnd);
2200 if (inidata) {
2201 if (inidata->hwndCurrent) {
[2]2202
[551]2203 STRINGINPARMS sip;
2204 static CHAR tofind[258] = "";
2205 SHORT x, z;
[2]2206
[551]2207 if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
2208 z = LIT_FIRST;
2209 memset(&sip, 0, sizeof(sip));
2210 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
2211 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
2212 sip.inputlen = 257;
2213 sip.ret = tofind;
2214 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
2215 if (WinDlgBox(HWND_DESKTOP,
2216 hwnd,
2217 InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
2218 rstrip(tofind);
2219 if (!*tofind) {
2220 DosBeep(50, 100);
2221 break;
2222 }
2223 }
2224 else
2225 break;
2226 }
2227 else {
2228 z = (SHORT) WinSendMsg(inidata->hwndCurrent,
2229 LM_QUERYSELECTION,
2230 MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
2231 if (z < 0)
2232 z = LIT_FIRST;
2233 }
2234 x = (SHORT) WinSendMsg(inidata->hwndCurrent,
2235 LM_SEARCHSTRING,
2236 MPFROM2SHORT(LSS_SUBSTRING, z),
2237 MPFROMP(tofind));
2238 if (x >= 0 && x > z) {
2239 WinSendMsg(inidata->hwndCurrent,
2240 LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
2241 WinSendMsg(inidata->hwndCurrent,
2242 LM_SELECTITEM,
2243 MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
2244 }
2245 else
2246 DosBeep(250, 100);
2247 }
2248 }
2249 break;
[2]2250
[551]2251 case IDM_FILTER:
2252 inidata = INSTDATA(hwnd);
2253 if (inidata) {
[2]2254
[551]2255 SHORT numitems;
[2]2256
[551]2257 numitems = (SHORT) WinSendDlgItemMsg(hwnd,
2258 INI_APPLIST,
2259 LM_QUERYITEMCOUNT,
2260 MPVOID, MPVOID);
2261 if (numitems)
2262 WinDlgBox(HWND_DESKTOP,
2263 hwnd,
2264 FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID) inidata);
2265 else
2266 DosBeep(50, 100);
2267 }
2268 break;
[2]2269
[551]2270 case IDM_COPY:
2271 case IDM_INFO:
2272 case IDM_MOVE:
[574]2273 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]2274 if (!inidata || !*inidata->ininame)
2275 break;
2276 if (mp2) {
[2]2277
[551]2278 INIREC *inirec;
[2]2279
[551]2280 inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2281 if (inirec) {
2282 *inirec = *(INIREC *) mp2;
2283 inirec->hwndDlg = hwnd;
2284 inirec->confirm = inidata->confirm;
2285 strcpy(inirec->filename1, inidata->ininame);
2286 if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
2287 Runtime_Error(pszSrcFile, __LINE__,
2288 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2289 free(inirec);
2290 }
2291 }
2292 }
2293 break;
[2]2294
[551]2295 case IDM_COMPARE:
[574]2296 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]2297 if (!inidata || !*inidata->ininame)
2298 break;
2299 if (mp2) {
[2]2300
[551]2301 INIREC *inirec;
[2]2302
[551]2303 inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
2304 if (inirec) {
2305 strcpy(inirec->filename2, (CHAR *) (mp2));
2306 strcpy(inirec->filename1, inidata->ininame);
2307 inirec->hwndDlg = hwnd;
2308 if (_beginthread(CompareIniThread, NULL, 122880, (PVOID) inirec) ==
2309 -1) {
2310 Runtime_Error(pszSrcFile, __LINE__,
2311 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2312 free(inirec);
2313 }
2314 }
2315 }
2316 break;
[2]2317
[551]2318 case INI_COPYAPP:
2319 case INI_COPYKEY:
2320 case INI_RENAMEAPP:
2321 case INI_RENAMEKEY:
[574]2322 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]2323 if (!inidata ||
2324 !*inidata->ininame ||
2325 !*inidata->applname ||
2326 (!*inidata->keyname &&
2327 (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
2328 SHORT1FROMMP(mp1) == INI_COPYKEY)))
2329 break;
2330 {
2331 INIREC *inirec;
[2]2332
[551]2333 inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2334 if (inirec) {
2335 inirec->size = sizeof(INIREC);
2336 inirec->hwndDlg = hwnd;
2337 inirec->confirm = inidata->confirm;
2338 inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
2339 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
2340 IDM_COPY : IDM_MOVE;
2341 strcpy(inirec->filename1, inidata->ininame);
2342 strcpy(inirec->filename2, inidata->ininame);
2343 if (SHORT1FROMMP(mp1) == INI_COPYKEY ||
2344 SHORT1FROMMP(mp1) == INI_RENAMEKEY)
2345 strcpy(inirec->key, inidata->keyname);
2346 strcpy(inirec->app, inidata->applname);
2347 if (!WinDlgBox(HWND_DESKTOP,
2348 hwnd,
2349 IntraIniProc,
2350 FM3ModHandle, INII_FRAME, (PVOID) inirec)) {
2351 free(inirec);
2352 break;
2353 }
2354 if (_beginthread(CopyIniThread, NULL, 122880, (PVOID) inirec) == -1) {
2355 Runtime_Error(pszSrcFile, __LINE__,
2356 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2357 free(inirec);
2358 }
2359 }
2360 }
2361 break;
[2]2362
[551]2363 case INI_BACKUPINI:
2364 inidata = INSTDATA(hwnd);
2365 if (inidata && *inidata->ininame) {
[2]2366
[551]2367 CHAR filename[CCHMAXPATH], *p;
[2]2368
[551]2369 strcpy(filename, inidata->ininame);
2370 p = filename;
2371 while (*p) {
2372 if (*p == '/')
2373 *p = '\\';
2374 p++;
2375 }
2376 p = strrchr(filename, '\\');
2377 if (p) {
2378 p++;
2379 *p = 0;
2380 }
2381 else
2382 *filename = 0;
2383 strcat(filename, "*.INI");
2384 if (export_filename(hwnd, filename, TRUE)) {
[2]2385
[551]2386 PPRFPROFILE prfp;
[2]2387
[551]2388 prfp = xmallocz(sizeof(PRFPROFILE), pszSrcFile, __LINE__);
2389 if (prfp) {
2390 prfp->pszUserName =
2391 xstrdup(inidata->ininame, pszSrcFile, __LINE__);
2392 if (!prfp->pszUserName)
2393 free(prfp);
2394 else {
2395 prfp->cchUserName = strlen(prfp->pszUserName);
2396 prfp->pszSysName = xstrdup(filename, pszSrcFile, __LINE__);
2397 if (!prfp->pszSysName) {
2398 free(prfp->pszUserName);
2399 free(prfp);
2400 }
2401 else {
2402 prfp->cchSysName = strlen(prfp->pszSysName);
2403 if (_beginthread(BackupIniThread, NULL, 122880, (PVOID) prfp)
2404 == -1) {
2405 Runtime_Error(pszSrcFile, __LINE__,
2406 GetPString(IDS_COULDNTSTARTTHREADTEXT));
2407 free(prfp->pszSysName);
2408 free(prfp->pszUserName);
2409 free(prfp);
2410 }
2411 else
[771]2412 DosSleep(100); //05 Aug 07 GKY 250
[551]2413 }
2414 }
2415 }
2416 }
2417 }
2418 break;
[2]2419
[551]2420 case INI_CHANGEINI:
2421 inidata = INSTDATA(hwnd);
2422 if (inidata) {
2423 if (WinDlgBox(HWND_DESKTOP,
2424 hwnd,
2425 ChangeIniProc,
2426 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2427 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2428 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2429 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2430 }
2431 }
2432 break;
[2]2433
[551]2434 case INI_SWAPINI:
2435 inidata = INSTDATA(hwnd);
2436 if (inidata) {
2437 if (WinDlgBox(HWND_DESKTOP,
2438 hwnd,
2439 SwapIniProc,
2440 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2441 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2442 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2443 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2444 }
2445 }
2446 break;
[2]2447
[551]2448 case IDM_NEXTWINDOW:
2449 inidata = INSTDATA(hwnd);
2450 if (inidata) {
2451 inidata->currid++;
2452 if (inidata->currid > INI_DATALIST)
2453 inidata->currid = INI_APPLIST;
2454 }
2455 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2456 break;
[2]2457
[551]2458 case IDM_PREVWINDOW:
2459 inidata = INSTDATA(hwnd);
2460 if (inidata) {
2461 inidata->currid--;
2462 if (inidata->currid < INI_APPLIST)
2463 inidata->currid = INI_DATALIST;
2464 }
2465 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2466 break;
[2]2467
[551]2468 case INI_CONFIRM:
2469 inidata = INSTDATA(hwnd);
2470 if (inidata) {
2471 inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
2472 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
[2]2473
[551]2474 }
2475 break;
[2]2476
[551]2477 case INI_EDITENTRY:
2478 case INI_ADDENTRY:
2479 inidata = INSTDATA(hwnd);
2480 if (inidata) {
2481 inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
2482 WinDlgBox(HWND_DESKTOP,
2483 hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID) inidata);
2484 }
2485 break;
[2]2486
[551]2487 case INI_OTHERPROFILE:
2488 inidata = INSTDATA(hwnd);
2489 if (inidata) {
[2]2490
[551]2491 CHAR filename[CCHMAXPATH + 81], *p;
[847]2492 FILESTATUS3 fsa;
[551]2493 HINI hINI;
[2]2494
[551]2495 strcpy(filename, inidata->ininame);
2496 p = filename;
2497 while (*p) {
2498 if (*p == '/')
2499 *p = '\\';
2500 p++;
2501 }
2502 p = strrchr(filename, '\\');
2503 if (p) {
2504 p++;
2505 *p = 0;
2506 }
2507 else
2508 *filename = 0;
2509 strcat(filename, "*.INI");
2510 if (insert_filename(hwnd,
2511 filename,
2512 TRUE,
2513 TRUE) &&
2514 *filename &&
[847]2515 !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
[551]2516 hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename);
2517 if (!hINI) {
2518 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
2519 GetPString(IDS_INICANTOPENINITEXT), filename);
2520 }
2521 else {
2522 if (*inidata->ininame) {
2523 if (inidata->hini)
2524 PrfCloseProfile(inidata->hini);
2525 *inidata->ininame = 0;
2526 }
2527 inidata->hini = hINI;
2528 strcpy(inidata->ininame, filename);
2529 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2530 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2531 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2532 }
2533 }
2534 }
2535 break;
[2]2536
[551]2537 case INI_USERPROFILE:
2538 inidata = INSTDATA(hwnd);
2539 if (inidata) {
2540 if (inidata->hini &&
2541 inidata->hini != HINI_SYSTEMPROFILE &&
2542 inidata->hini != HINI_USERPROFILE)
2543 PrfCloseProfile(inidata->hini);
2544 *inidata->ininame = 0;
2545 inidata->hini = HINI_USERPROFILE;
2546 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2547 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2548 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2549 }
2550 break;
[2]2551
[551]2552 case INI_SYSTEMPROFILE:
2553 inidata = INSTDATA(hwnd);
2554 if (inidata) {
2555 if (inidata->hini &&
2556 inidata->hini != HINI_SYSTEMPROFILE &&
2557 inidata->hini != HINI_USERPROFILE)
2558 PrfCloseProfile(inidata->hini);
2559 *inidata->ininame = 0;
2560 inidata->hini = HINI_SYSTEMPROFILE;
2561 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2562 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2563 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2564 }
2565 break;
[2]2566
[551]2567 case INI_REFRESH:
2568 inidata = INSTDATA(hwnd);
2569 if (inidata) {
2570 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2571 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2572 }
2573 break;
[2]2574
[551]2575 case INI_DELETEKEY:
2576 inidata = INSTDATA(hwnd);
2577 if (inidata && *inidata->applname && *inidata->keyname) {
[2]2578
[551]2579 SHORT keyindex = inidata->keyindex;
[2]2580
[551]2581 if (inidata->confirm && saymsg(MB_YESNO,
2582 hwnd,
2583 GetPString(IDS_CONFIRMTEXT),
2584 GetPString(IDS_INIDELETEKEYTEXT),
2585 inidata->keyname) == MBID_NO)
2586 break;
2587 PrfWriteProfileData(inidata->hini,
2588 inidata->applname, inidata->keyname, NULL, 0L);
2589 *inidata->keyname = 0;
2590 WinSendDlgItemMsg(hwnd,
2591 INI_KEYLIST,
2592 LM_DELETEITEM, MPFROM2SHORT(keyindex, 0), MPVOID);
2593 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2594 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2595 INI_KEYLIST,
2596 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2597 if (!sSel)
2598 WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID);
2599 else {
2600 sSel = min(keyindex, sSel - 1);
2601 WinSendDlgItemMsg(hwnd,
2602 INI_KEYLIST,
2603 LM_SELECTITEM,
2604 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2605 }
2606 }
2607 break;
[2]2608
[551]2609 case INI_DELETEAPP:
2610 inidata = INSTDATA(hwnd);
2611 if (inidata && *inidata->applname) {
[2]2612
[551]2613 SHORT appindex = inidata->appindex;
[2]2614
[551]2615 if (inidata->confirm && saymsg(MB_YESNO,
2616 hwnd,
2617 GetPString(IDS_CONFIRMTEXT),
2618 GetPString(IDS_INIDELETEAPPTEXT),
2619 inidata->applname) == MBID_NO)
2620 break;
2621 PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L);
2622 *inidata->applname = *inidata->keyname = 0;
2623 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2624 WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID);
2625 WinSendDlgItemMsg(hwnd,
2626 INI_APPLIST,
2627 LM_DELETEITEM, MPFROM2SHORT(appindex, 0), MPVOID);
2628 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2629 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2630 INI_APPLIST,
2631 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2632 if (sSel) {
2633 sSel = min(appindex, sSel - 1);
2634 WinSendDlgItemMsg(hwnd,
2635 INI_APPLIST,
2636 LM_SELECTITEM,
2637 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2638 }
2639 }
2640 break;
[2]2641
[551]2642 case DID_OK:
2643 case DID_CANCEL:
2644 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2645 break;
[2]2646
[551]2647 case IDM_HELP:
2648 if (hwndHelp)
2649 WinSendMsg(hwndHelp,
2650 HM_DISPLAY_HELP,
2651 MPFROM2SHORT(HELP_INI, 0), MPFROMSHORT(HM_RESOURCEID));
2652 break;
[2]2653
[551]2654 case IDM_ABOUT:
2655 saymsg(MB_ENTER | MB_ICONASTERISK,
2656 hwnd,
2657 GetPString(IDS_VIEWABOUTTITLETEXT),
2658 GetPString(IDS_INIABOUTTEXT));
2659 break;
2660 }
2661 return 0;
[2]2662
[551]2663 case WM_CLOSE:
2664 if (ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
[2]2665
[551]2666 SWP swp;
[2]2667
[551]2668 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
2669 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
2670 WinStoreWindowPos(FM2Str,
2671 "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
[574]2672 inidata = WinQueryWindowPtr(hwnd, QWL_USER);
[551]2673 }
2674 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
2675 return 0;
[2]2676
[551]2677 case WM_DESTROY:
2678 inidata = INSTDATA(hwnd);
2679 {
2680 BOOL dontclose = FALSE;
[2]2681
[551]2682 if (inidata) {
2683 dontclose = inidata->dontclose;
2684 if (inidata->hini)
2685 PrfCloseProfile(inidata->hini);
2686 if (inidata->data)
2687 free(inidata->data);
2688 if (inidata->hwndPopup)
2689 WinDestroyWindow(inidata->hwndPopup);
2690 free(inidata);
[2]2691 }
[551]2692 if (!dontclose &&
2693 ParentIsDesktop(hwnd, WinQueryWindow(WinQueryWindow(hwnd,
2694 QW_PARENT),
2695 QW_PARENT))) {
2696 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
2697 DosExit(EXIT_PROCESS, 1);
2698 }
2699 }
2700 break;
[2]2701 }
[551]2702 return WinDefWindowProc(hwnd, msg, mp1, mp2);
[2]2703}
[793]2704
2705#pragma alloc_text(INIS,EnumAppNames,GetKeyData,EnumKeyNames,AddIniProc,IniProc,BackupIniThread)
2706#pragma alloc_text(INIS,ChangeIniProc,SwapIniProc,IniLBSubProc,IniLBSubProc2,CopyIniThread)
2707#pragma alloc_text(INIS,IntraIniProc,FilterIniProc)
2708#pragma alloc_text(STARTUP,StartIniEditor)
Note: See TracBrowser for help on using the repository browser.