source: trunk/dll/inis.c@ 1880

Last change on this file since 1880 was 1880, checked in by Gregg Young, 10 years ago

Remove dead code and comments from remaining c files. #if 0 and #if NEVER were not addressed

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