source: trunk/dll/inis.c@ 1331

Last change on this file since 1331 was 1321, checked in by Steven Levine, 17 years ago

Rework casts variable types for OpenWatcom 1.8 compatibility
Add more FORTIFY support

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