source: trunk/dll/inis.c@ 1402

Last change on this file since 1402 was 1402, checked in by Gregg Young, 16 years ago

Remove variable aurgs from docopy & unlinkf (not used); Move more strings to PCSZs and string table; Move PCSZs to compile time initialization; Fix hang on startup caused by a drive scan and a dircnr scan trying to update a drive in the tree at the same time (related to the "treeswitch options); Code cleanup mainly removal of old printfs, SayMsgs, DbgMsg and unneeded %s.

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