source: trunk/dll/inis.c@ 1395

Last change on this file since 1395 was 1395, checked in by Gregg Young, 17 years ago

Allow user to turn off alert and/or error beeps in settings notebook. Ticket 341 Move repeated strings to PCSZs. Ticket 6 Add *DateFormat functions to format dates based on locale Ticket 28 Eliminate Win_Error2 by moving function names to PCSZs used in Win_Error Ticket 6

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