source: trunk/dll/inis.c@ 1209

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

Ticket 187: Move data declarations/definitions out of fm3dll.h

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