source: trunk/dll/inis.c@ 1335

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

Ticket 26: Add exception handlers to all threads using xbeginthread

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