source: trunk/dll/inis.c@ 1544

Last change on this file since 1544 was 1544, checked in by Gregg Young, 15 years ago

Changes to fopen and _fsopen to allow FM2 to be loaded in high memory

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