source: trunk/dll/inis.c@ 1303

Last change on this file since 1303 was 1224, checked in by John Small, 17 years ago

Ticket 187: Moved typedef's and some #define's from fm3dll.h

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