source: trunk/dll/inis.c@ 1570

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

Check that pTmpDir IsValid and recreate if not found; Fixes hangs caused by temp file creation failures. (Ticket 440)

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