source: trunk/dll/inis.c@ 1545

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

Added ForwardslashToBackslash function to streamline code.

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