source: trunk/dll/inis.c@ 1844

Last change on this file since 1844 was 1673, checked in by Gregg Young, 13 years ago

Update to Doxygen comment style Ticket 55. Also some minor code cleanup.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 77.3 KB
Line 
1
2/***********************************************************************
3
4 $Id: inis.c 1673 2012-12-30 18:51:01Z 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// #include <process.h> // _beginthread
50
51#define INCL_DOS
52#define INCL_DOSERRORS
53#define INCL_WIN
54#define INCL_GPI
55#define INCL_LONGLONG // dircnrs.h
56
57#include "fm3dll.h"
58#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
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)
64#include "fm3dlg.h"
65#include "fm3str.h"
66#include "mle.h"
67#include "errutil.h" // Dos_Error...
68#include "strutil.h" // GetPString
69#include "pathutil.h" // BldFullPathName
70#include "mainwnd.h" // FillClient
71#include "droplist.h" // FullDrgName
72#include "inis.h"
73#include "literal.h" // fixup
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
82#include "eas.h" // HexDump
83#include "strips.h" // bstrip
84#include "misc.h" // BoxWindow
85#include "dirs.h" // save_dir2
86#include "wrappers.h" // xfopen
87#include "fortify.h"
88#include "excputil.h" // xbeginthread
89
90// Data definitions
91#pragma data_seg(GLOBAL1)
92HELPINIT hini;
93
94#pragma data_seg(GLOBAL2)
95PCSZ DRF_FM2INI = "DRF_FM2INI";
96PCSZ DRM_FM2INIRECORD = "DRM_FM2INIRECORD";
97RGB2 RGBBLACK;
98
99#pragma data_seg(DATA2)
100
101static PSZ pszSrcFile = __FILE__;
102
103typedef struct
104{
105 USHORT size;
106 CHAR ininame[CCHMAXPATH]; // Must be null string if user or system ini
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;
119 USHORT currid;
120 BOOL isbinary;
121 HWND hwndIni;
122 HWND hwndApp;
123 HWND hwndKey;
124 HWND hwndData;
125 HWND hwndPopup;
126 HWND hwndCurrent;
127}
128INIDATA;
129
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;
145
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 &&
155 (hini == HINI_USERPROFILE || hini == HINI_SYSTEMPROFILE);
156
157 if (!ok) {
158 ok = PrfCloseProfile(hini);
159 if (!ok) {
160 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
161 "PrfCloseProfile failed for handle 0x%x", hini);
162 }
163 }
164}
165
166VOID CopyIniThread(VOID * args)
167{
168 INIREC *inirec = (INIREC *) args;
169 HAB hab2;
170 HMQ hmq2;
171 HINI hiniFrom = NULLHANDLE;
172 HINI hiniTo = NULLHANDLE;
173 PRFPROFILE cprfp;
174 CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
175
176 if (inirec) {
177# ifdef FORTIFY
178 Fortify_EnterScope();
179# endif
180 hab2 = WinInitialize(0);
181 if (hab2) {
182 hmq2 = WinCreateMsgQueue(hab2, 0);
183 if (hmq2) {
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__,
206 PCSZ_PRFOPENPROFILEFAILED, inirec->filename1);
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__,
216 PCSZ_PRFOPENPROFILEFAILED, inirec->filename2);
217 }
218 }
219 }
220 if (hiniFrom && hiniTo && (*inirec->app2 || hiniFrom != hiniTo)) {
221
222 PVOID pDataK, pData;
223 PSZ pCurrentK;
224 ULONG ulSize = 0L;
225
226 if (inirec->action == IDM_MOVE || inirec->action == IDM_COPY) {
227 if (!*inirec->key) {
228 if (inirec->confirm &&
229 PrfQueryProfileSize(hiniFrom,
230 (PSZ)((*inirec->app2) ?
231 inirec->app2 : inirec-> app),
232 NULL,
233 &ulSize)
234 && ulSize) {
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 }
332 Abort:
333 if (hiniFrom)
334 CloseProfile(hiniFrom, TRUE);
335 if (hiniTo && hiniTo != hiniFrom)
336 CloseProfile(hiniTo, FALSE);
337 WinDestroyMsgQueue(hmq2);
338 }
339 DecrThreadUsage();
340 WinTerminate(hab2);
341 }
342 PostMsg(inirec->hwndDlg, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0),
343 MPVOID);
344 if (inirec->action == IDM_MOVE && inirec->hwndSource &&
345 inirec->hwndSource != inirec->hwndDlg)
346 PostMsg(inirec->hwndSource, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0),
347 MPVOID);
348 free(inirec);
349# ifdef FORTIFY
350 Fortify_LeaveScope();
351# endif
352 }
353}
354
355static VOID CompareIniThread(VOID * args)
356{
357 INIREC *inirec = (INIREC *) args;
358 HAB hab2;
359 HMQ hmq2;
360
361 if (inirec) {
362 hab2 = WinInitialize(0);
363 if (hab2) {
364 hmq2 = WinCreateMsgQueue(hab2, 0);
365 if (hmq2) {
366 WinCancelShutdown(hmq2, TRUE);
367 IncrThreadUsage();
368
369 // fixme to do something?
370
371 WinDestroyMsgQueue(hmq2);
372 }
373 DecrThreadUsage();
374 WinTerminate(hab2);
375 }
376 free(inirec);
377 }
378}
379
380static VOID BackupIniThread(VOID * args)
381{
382 PPRFPROFILE prfp = (PPRFPROFILE)args;
383 HAB hab2;
384 HMQ hmq2;
385 HINI orig = NULLHANDLE;
386 HINI new;
387 PVOID pDataA, pDataK, pData;
388 PSZ pCurrentA, pCurrentK;
389 ULONG ulSize;
390 PRFPROFILE cprfp;
391 CHAR userini[CCHMAXPATH], sysini[CCHMAXPATH];
392
393 if (prfp) {
394# ifdef FORTIFY
395 Fortify_EnterScope();
396# endif
397 hab2 = WinInitialize(0);
398 if (hab2) {
399 hmq2 = WinCreateMsgQueue(hab2, 0);
400 if (hmq2) {
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__,
419 PCSZ_PRFOPENPROFILEFAILED, prfp->pszUserName);
420 }
421 else {
422 new = PrfOpenProfile(hab2, prfp->pszSysName);
423 if (new == NULLHANDLE) {
424 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
425 PCSZ_PRFOPENPROFILEFAILED, prfp->pszSysName);
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);
489 }
490 DecrThreadUsage();
491 WinTerminate(hab2);
492 }
493 xfree(prfp->pszUserName, pszSrcFile, __LINE__);
494 xfree(prfp->pszSysName, pszSrcFile, __LINE__);
495 free(prfp);
496# ifdef FORTIFY
497 Fortify_LeaveScope();
498# endif
499 }
500}
501
502static VOID EnumAppNames(HWND hwndList, HINI hini)
503{
504 PVOID pData;
505 PBYTE pCurrent;
506 ULONG ulSize = 0;
507
508 WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
509 if (!PrfQueryProfileSize(hini, NULL, NULL, (PULONG) & ulSize))
510 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
511 PCSZ_PRFQUERYPROFILESIZE);
512 else if (!ulSize)
513 Runtime_Error(pszSrcFile, __LINE__, NULL);
514 else {
515 pData = xmalloc(ulSize, pszSrcFile, __LINE__);
516 if (pData) {
517 if (PrfQueryProfileString(hini, NULL, NULL, "\0", pData, ulSize)) {
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);
530 }
531 free(pData);
532 }
533 }
534}
535
536static CHAR *GetKeyData(HWND hwndList, HINI hini, PSZ pAppName,
537 PSZ pKeyName, PULONG datalen)
538{
539 ULONG ulKeySize = 0L;
540 PVOID pKeyData = NULL;
541
542 *datalen = 0L;
543 if (!PrfQueryProfileSize(hini, pAppName, pKeyName, (PULONG) & ulKeySize))
544 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
545 PCSZ_PRFQUERYPROFILESIZE);
546 else {
547 pKeyData = xmalloc(ulKeySize + 1L, pszSrcFile, __LINE__);
548 if (pKeyData) {
549 if (!PrfQueryProfileData
550 (hini, pAppName, pKeyName, pKeyData, (PULONG) & ulKeySize))
551 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
552 PCSZ_PRFQUERYPROFILEDATA);
553 else {
554 HexDump(hwndList, pKeyData, ulKeySize);
555 {
556 CHAR s[81];
557
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;
566 }
567 }
568 }
569 return NULL;
570}
571
572static BOOL EnumKeyNames(HWND hwndList, HINI hini, PSZ pAppName)
573{
574 PVOID pData;
575 PBYTE pCurrent;
576 ULONG ulSize = 0;
577
578 WinSendMsg(hwndList, LM_DELETEALL, NULL, NULL);
579 if (!PrfQueryProfileSize(hini, pAppName, NULL, (PULONG) & ulSize))
580 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
581 PCSZ_PRFQUERYPROFILESIZE);
582 else {
583 if (!ulSize)
584 Runtime_Error(pszSrcFile, __LINE__, NULL);
585 pData = xmalloc(ulSize + 1L, pszSrcFile, __LINE__);
586 if (pData) {
587 if (!PrfQueryProfileString(hini, pAppName, NULL, "\0", pData, ulSize)) {
588 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
589 PCSZ_PRFQUERYPROFILESTRING);
590 free(pData);
591 }
592 else {
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;
607 }
608 }
609 }
610 return FALSE;
611}
612
613#define hwndMLE WinWindowFromID(hwnd,IAF_MLE)
614
615MRESULT EXPENTRY FilterIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
616{
617 INIDATA *inidata;
618 static CHAR lasttext[8192] = "";
619
620 switch (msg) {
621 case WM_INITDLG:
622 WinSetWindowPtr(hwnd, QWL_USER, mp2);
623 inidata = (INIDATA *) mp2;
624 WinSendDlgItemMsg(hwnd, IAF_SAVENAME, EM_SETTEXTLIMIT,
625 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
626 MLEsetformat(hwndMLE, MLFIE_NOTRANS);
627 MLEsetlimit(hwndMLE, 8192);
628 WinSetWindowText(hwndMLE, lasttext);
629 {
630 FILEFINDBUF3 ffb;
631 ULONG nm;
632 HDIR hdir;
633
634 hdir = HDIR_CREATE;
635 nm = 1;
636 DosError(FERR_DISABLEHARDERR);
637 if (!DosFindFirst("*.IST",
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();
650 }
651 }
652 break;
653
654 case WM_ADJUSTWINDOWPOS:
655 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
656 break;
657
658 case UM_SETDIR:
659 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_HELP), (HPS) 0, FALSE,
660 TRUE);
661 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_SAVENAME), (HPS) 0, FALSE,
662 FALSE);
663 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_LISTBOX), (HPS) 0, FALSE,
664 FALSE);
665 PaintRecessedWindow(WinWindowFromID(hwnd, IAF_MLE), (HPS) 0, FALSE,
666 FALSE);
667 return 0;
668
669 case WM_CONTROL:
670 switch (SHORT1FROMMP(mp1)) {
671 case IAF_SAVENAME:
672 if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
673 WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
674 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
675 WinSetDlgItemText(hwnd,
676 IAF_HELP, (CHAR *) GetPString(IDS_MASKLISTNAMEHELPTEXT));
677 break;
678
679 case IAF_LISTBOX:
680 if (SHORT2FROMMP(mp1) == LN_KILLFOCUS)
681 WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
682 if (SHORT2FROMMP(mp1) == LN_SETFOCUS)
683 WinSetDlgItemText(hwnd,
684 IAF_HELP, (CHAR *) GetPString(IDS_MASKLISTFILESHELPTEXT));
685 else if (SHORT2FROMMP(mp1) == LN_ENTER)
686 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(IAF_LOAD, 0), MPVOID);
687 break;
688
689 case IAF_MLE:
690 if (SHORT2FROMMP(mp1) == MLN_KILLFOCUS)
691 WinSetDlgItemText(hwnd, IAF_HELP, NullStr);
692 if (SHORT2FROMMP(mp1) == MLN_SETFOCUS)
693 WinSetDlgItemText(hwnd,
694 IAF_HELP, (CHAR *) GetPString(IDS_MASKLISTMASKSHELPTEXT));
695 break;
696 }
697 return 0;
698
699 case WM_COMMAND:
700 switch (SHORT1FROMMP(mp1)) {
701 case DID_OK:
702 inidata = INSTDATA(hwnd);
703 if (!inidata)
704 Runtime_Error(pszSrcFile, __LINE__, NULL);
705 else {
706 CHAR s[8193], app[1024];
707 register CHAR *p;
708 SHORT sSelect, numitems;
709 BOOL match;
710
711 *s = 0;
712 WinQueryWindowText(hwndMLE, 8192, s);
713 if (!*s) {
714 if (!fAlertBeepOff)
715 DosBeep(250, 100);
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) {
736 if (!fAlertBeepOff)
737 DosBeep(250, 100);
738 break;
739 }
740 else {
741 WinSetPointer(HWND_DESKTOP, hptrBusy);
742 WinSetDlgItemText(hwnd, IAF_HELP, (CHAR *) GetPString(IDS_FILTERINGTEXT));
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 }
775 }
776 WinDismissDlg(hwnd, 1);
777 break;
778
779 case IAF_LOAD:
780 {
781 CHAR s[8193];
782 FILE *fp;
783 INT len;
784 SHORT sSelect;
785 CHAR *moder = "r";
786
787 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, IAF_LISTBOX,
788 LM_QUERYSELECTION,
789 MPFROM2SHORT(LIT_FIRST, 0),
790 MPVOID);
791 if (sSelect < 0)
792 Runtime_Error(pszSrcFile, __LINE__, NULL);
793 else {
794 *s = 0;
795 WinSendDlgItemMsg(hwnd, IAF_LISTBOX, LM_QUERYITEMTEXT,
796 MPFROM2SHORT(sSelect, CCHMAXPATH), MPFROMP(s));
797 bstrip(s);
798 if (*s) {
799 fp = xfsopen(s, moder, SH_DENYWR, pszSrcFile, __LINE__, FALSE);
800 if (fp) {
801 len = fread(s, 1, 8192, fp);
802 s[len] = 0;
803 WinSetWindowText(hwndMLE, s);
804 fclose(fp);
805 }
806 }
807 }
808 }
809 break;
810
811 case IAF_SAVE:
812 {
813 CHAR s[8193], filename[CCHMAXPATH], *p;
814 FILE *fp;
815 CHAR *modew = "w";
816
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)
829 Runtime_Error(pszSrcFile, __LINE__, NULL);
830 else {
831 fp = xfopen(filename, modew, pszSrcFile, __LINE__, FALSE);
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 }
843 }
844 break;
845
846 case IAF_DELETE:
847 {
848 CHAR s[CCHMAXPATH];
849 SHORT sSelect;
850
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 }
866 }
867 break;
868
869 case DID_CANCEL:
870 WinDismissDlg(hwnd, 0);
871 break;
872
873 case IDM_HELP:
874 if (hwndHelp)
875 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
876 MPFROM2SHORT(HELP_FILTERINI, 0),
877 MPFROMSHORT(HM_RESOURCEID));
878 break;
879 }
880 return 0;
881 }
882 return WinDefDlgProc(hwnd, msg, mp1, mp2);
883}
884
885MRESULT EXPENTRY IntraIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
886{
887 INIREC *inirec;
888
889 switch (msg) {
890 case WM_INITDLG:
891 WinSetWindowPtr(hwnd, QWL_USER, mp2);
892 inirec = (INIREC *) mp2;
893 WinSendDlgItemMsg(hwnd,
894 INII_NEWAPP,
895 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
896 WinSendDlgItemMsg(hwnd,
897 INII_NEWKEY,
898 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
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:
910 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INIRENAMEAPPTITLETEXT));
911 break;
912 case IDM_COPY:
913 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INICOPYAPPTITLETEXT));
914 break;
915 }
916 }
917 else {
918 {
919 CHAR s[CCHMAXPATH + 34];
920
921 sprintf(s, GetPString(IDS_INIWASTEXT), inirec->key);
922 WinSetDlgItemText(hwnd, INII_OLDKEY, s);
923 }
924 WinSetDlgItemText(hwnd, INII_NEWAPP, inirec->app);
925 WinSendDlgItemMsg(hwnd,
926 INII_NEWAPP,
927 EM_SETSEL, MPFROM2SHORT(0, CCHMAXPATH), MPVOID);
928 switch (inirec->action) {
929 case IDM_MOVE:
930 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INIRENAMEKEYTITLETEXT));
931 break;
932 case IDM_COPY:
933 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INICOPYKEYTITLETEXT));
934 break;
935 }
936 }
937 break;
938
939 case WM_COMMAND:
940 switch (SHORT1FROMMP(mp1)) {
941 case DID_OK:
942 inirec = (INIREC *) WinQueryWindowPtr(hwnd, QWL_USER);
943 if (inirec) {
944 WinQueryDlgItemText(hwnd, INII_NEWAPP, CCHMAXPATH, inirec->app2);
945 bstrip(inirec->app2);
946 if (!*inirec->app2) {
947 if (!fAlertBeepOff)
948 DosBeep(50, 100);
949 break;
950 }
951 if (*inirec->key) {
952 WinQueryDlgItemText(hwnd, INII_NEWKEY, CCHMAXPATH, inirec->key2);
953 bstrip(inirec->key2);
954 if (!*inirec->key2) {
955 if (!fAlertBeepOff)
956 DosBeep(50, 100);
957 break;
958 }
959 }
960 WinDismissDlg(hwnd, 1);
961 }
962 break;
963
964 case DID_CANCEL:
965 WinDismissDlg(hwnd, 0);
966 break;
967
968 case IDM_HELP:
969 if (hwndHelp)
970 WinSendMsg(hwndHelp,
971 HM_DISPLAY_HELP,
972 MPFROM2SHORT(HELP_INTRAINI, 0),
973 MPFROMSHORT(HM_RESOURCEID));
974 break;
975 }
976 return 0;
977 }
978 return WinDefDlgProc(hwnd, msg, mp1, mp2);
979}
980
981MRESULT EXPENTRY ChangeIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
982{
983 switch (msg) {
984 case WM_INITDLG:
985 WinSetWindowPtr(hwnd, QWL_USER, mp2);
986 WinSendDlgItemMsg(hwnd, INIR_USERPROFILE, EM_SETTEXTLIMIT,
987 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
988 WinSendDlgItemMsg(hwnd, INIR_SYSTEMPROFILE, EM_SETTEXTLIMIT,
989 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
990 break;
991
992 case WM_COMMAND:
993 switch (SHORT1FROMMP(mp1)) {
994 case INIR_FIND:
995 {
996 CHAR filename[CCHMAXPATH], *p, *ininame;
997 USHORT id = 0;
998 HWND hwndFocus;
999
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) {
1007 strcpy(filename, ininame);
1008 ForwardslashToBackslash(filename);
1009 p = strrchr(filename, '\\');
1010 if (p) {
1011 p++;
1012 *p = 0;
1013 }
1014 else
1015 *filename = 0;
1016 }
1017 else
1018 *filename = 0;
1019 strcat(filename, PCSZ_STARDOTINI);
1020 if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
1021 WinSetDlgItemText(hwnd, id, filename);
1022 }
1023 break;
1024
1025 case DID_OK:
1026 {
1027 HINI testini;
1028 PRFPROFILE prfp;
1029 CHAR sysini[CCHMAXPATH];
1030 CHAR userini[CCHMAXPATH];
1031
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);
1063 }
1064 break;
1065
1066 case DID_CANCEL:
1067 WinDismissDlg(hwnd, 0);
1068 break;
1069
1070 case IDM_HELP:
1071 if (hwndHelp)
1072 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1073 MPFROM2SHORT(HELP_CHANGEINI, 0),
1074 MPFROMSHORT(HM_RESOURCEID));
1075 break;
1076 }
1077 return 0;
1078 }
1079 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1080}
1081
1082MRESULT EXPENTRY SwapIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1083{
1084 switch (msg) {
1085 case WM_INITDLG:
1086 WinSetWindowPtr(hwnd, QWL_USER, mp2);
1087 WinSendDlgItemMsg(hwnd,
1088 INIR_USERPROFILE,
1089 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1090 WinSendDlgItemMsg(hwnd,
1091 INIR_SYSTEMPROFILE,
1092 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1093 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INISWAPOS2INISTITLETEXT));
1094 break;
1095
1096 case WM_COMMAND:
1097 switch (SHORT1FROMMP(mp1)) {
1098 case INIR_FIND:
1099 {
1100 CHAR filename[CCHMAXPATH], *p, *ininame;
1101 USHORT id = 0;
1102 HWND hwndFocus;
1103
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) {
1111 strcpy(filename, ininame);
1112 ForwardslashToBackslash(filename);
1113 p = strrchr(filename, '\\');
1114 if (p) {
1115 p++;
1116 *p = 0;
1117 }
1118 else
1119 *filename = 0;
1120 }
1121 else
1122 *filename = 0;
1123 strcat(filename, PCSZ_STARDOTINI);
1124 if (insert_filename(hwnd, filename, TRUE, FALSE) && *filename)
1125 WinSetDlgItemText(hwnd, id, filename);
1126 }
1127 break;
1128
1129 case DID_OK:
1130 {
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;
1143
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)) {
1154 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
1155 PCSZ_INIQUERYPRFTEXT);
1156 break;
1157 }
1158 WinQueryDlgItemText(hwnd, INIR_USERPROFILE, CCHMAXPATH, userini);
1159 WinQueryDlgItemText(hwnd, INIR_SYSTEMPROFILE, CCHMAXPATH, sysini);
1160 MakeFullName(userini);
1161 MakeFullName(sysini);
1162 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), userini);
1163 if (testini == NULLHANDLE) {
1164 saymsg(MB_CANCEL,
1165 hwnd,
1166 GetPString(IDS_ERRORTEXT),
1167 GetPString(IDS_INICANTOPENUSERTEXT), userini);
1168 break;
1169 }
1170 CloseProfile(testini, FALSE);
1171 testini = PrfOpenProfile(WinQueryAnchorBlock(hwnd), sysini);
1172 if (testini == NULLHANDLE) {
1173 saymsg(MB_CANCEL,
1174 hwnd,
1175 GetPString(IDS_ERRORTEXT),
1176 GetPString(IDS_INICANTOPENSYSTEXT), sysini);
1177 break;
1178 }
1179 CloseProfile(testini, FALSE);
1180 // make copies of new inis
1181 *tempuserini = 0;
1182 *tempsysini = 0;
1183 if (pTmpDir && !IsValidDir(pTmpDir))
1184 DosCreateDir(pTmpDir, 0);
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;
1195 }
1196 if (pTmpDir && !IsValidDir(pTmpDir))
1197 DosCreateDir(pTmpDir, 0);
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 }
1304 }
1305 break;
1306
1307 case DID_CANCEL:
1308 WinDismissDlg(hwnd, 0);
1309 break;
1310
1311 case IDM_HELP:
1312 if (hwndHelp)
1313 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1314 MPFROM2SHORT(HELP_SWAPINI, 0), MPFROMSHORT(HM_RESOURCEID));
1315 break;
1316 }
1317 return 0;
1318 }
1319 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1320}
1321
1322MRESULT EXPENTRY AddIniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1323{
1324 INIDATA *inidata = INSTDATA(hwnd);
1325 size_t l;
1326
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)
1335 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_INIEDITINITITLETEXT));
1336 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) mp2);
1337 WinSendDlgItemMsg(hwnd,
1338 IAD_APPNAME,
1339 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1340 WinSendDlgItemMsg(hwnd,
1341 IAD_KEYNAME,
1342 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1343 WinSendDlgItemMsg(hwnd,
1344 IAD_DATA,
1345 EM_SETTEXTLIMIT, MPFROM2SHORT(32767, 0), MPVOID);
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) {
1351
1352 CHAR *p;
1353
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);
1381 }
1382 PostMsg(hwnd, UM_SETDIR, MPFROMLONG(1L), MPVOID);
1383 }
1384 else
1385 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
1386 {
1387 CHAR s[32];
1388
1389 *s = 0;
1390 WinQueryDlgItemText(hwnd, IAD_DATA, 32, s);
1391 if (*s)
1392 WinEnableWindow(WinWindowFromID(hwnd, DID_OK), TRUE);
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;
1398
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;
1405
1406 case UM_SETUP:
1407 saymsg(MB_ENTER | MB_ICONASTERISK,
1408 hwnd,
1409 GetPString(IDS_WARNINGTEXT), GetPString(IDS_INIAPPKEYEXISTSTEXT));
1410 return 0;
1411
1412 case WM_CONTROL:
1413 switch (SHORT2FROMMP(mp1)) {
1414 case EN_KILLFOCUS:
1415 inidata = INSTDATA(hwnd);
1416 if (!inidata)
1417 Runtime_Error(pszSrcFile, __LINE__, NULL);
1418 else {
1419 CHAR s[CCHMAXPATH], applname[CCHMAXPATH];
1420 BOOL appchanged = FALSE, keychanged = FALSE;
1421
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) {
1437
1438 ULONG size = 0L;
1439
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);
1453 }
1454 break;
1455 }
1456 return 0;
1457
1458 case WM_COMMAND:
1459 switch (SHORT1FROMMP(mp1)) {
1460 case DID_OK:
1461 {
1462 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH], data[CCHMAXPATH];
1463 INT len;
1464
1465 inidata = INSTDATA(hwnd);
1466 if (!inidata) {
1467 Runtime_Error(pszSrcFile, __LINE__, NULL);
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 }
1494 }
1495 break;
1496
1497 case DID_CANCEL:
1498 WinDismissDlg(hwnd, 0);
1499 break;
1500
1501 case IDM_HELP:
1502 if (hwndHelp)
1503 WinSendMsg(hwndHelp, HM_DISPLAY_HELP,
1504 MPFROM2SHORT(HELP_INIADD, 0), MPFROMSHORT(HM_RESOURCEID));
1505 break;
1506 }
1507 return 0;
1508 }
1509 return WinDefDlgProc(hwnd, msg, mp1, mp2);
1510}
1511
1512static ULONG flFrameFlags = FCF_SYSMENU | FCF_SIZEBORDER | FCF_ICON |
1513 FCF_TITLEBAR | FCF_MINMAX | FCF_MENU | FCF_ACCELTABLE | FCF_NOBYTEALIGN;
1514
1515HWND StartIniEditor(HWND hwnd, CHAR *fname, INT flags)
1516{
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
1524 HWND hwndFrame, hwndClient;
1525 HINI hINI;
1526 HAB useHab = (HAB) 0;
1527 CHAR *filename = NULL;
1528
1529 if (fExternalINIs || strcmp(realappname, FM3Str))
1530 hwnd = HWND_DESKTOP;
1531 if (hwnd != HWND_DESKTOP)
1532 useHab = WinQueryAnchorBlock(hwnd);
1533 if (fname && *fname) {
1534 filename = xstrdup(fname, pszSrcFile, __LINE__);
1535 if (!filename)
1536 return (HWND) 0;
1537 hINI = PrfOpenProfile(useHab, filename);
1538 if (hINI == NULLHANDLE) {
1539 free(filename);
1540 return (HWND) 0;
1541 }
1542 else
1543 CloseProfile(hINI, FALSE);
1544 }
1545
1546 if (ParentIsDesktop(hwnd, hwnd))
1547 flFrameFlags |= FCF_TASKLIST;
1548 hwndFrame = WinCreateStdWindow(hwnd,
1549 0,
1550 &flFrameFlags,
1551 (CHAR *) WC_INIEDITOR,
1552 NullStr,
1553 fwsAnimate,
1554 FM3ModHandle, INI_FRAME, &hwndClient);
1555 if (hwndFrame) {
1556 WinSetWindowUShort(hwndFrame, QWS_ID, INI_FRAME);
1557 if (!ParentIsDesktop(hwndFrame, hwnd) && !(flags & 2)) {
1558
1559 SWP swp;
1560
1561 FillClient(hwnd, &swp, NULL, FALSE);
1562 WinSetWindowPos(hwndFrame, HWND_TOP, swp.x, swp.y, swp.cx, swp.cy,
1563 SWP_SIZE | SWP_MOVE);
1564 }
1565 else if (ParentIsDesktop(hwndFrame, hwnd)) {
1566 if (!WinRestoreWindowPos((CHAR *) FM2Str, "INIWindowPos", hwndFrame)) {
1567
1568 ULONG fl = SWP_MOVE | SWP_SIZE;
1569 SWP swp;
1570
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);
1578 }
1579 }
1580 PostMsg(hwndClient, UM_SELECT, MPVOID, MPVOID);
1581 PostMsg(hwndClient, UM_ACTION, MPVOID, MPVOID);
1582 if (!PostMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1583 filename : NULL)), MPVOID))
1584 WinSendMsg(hwndClient, UM_LOADFILE, MPFROMP(((filename && *filename) ?
1585 filename : NULL)), MPVOID);
1586 if (flags & 4)
1587 PostMsg(hwndClient, UM_INITIALSIZE, MPVOID, MPVOID);
1588 }
1589 else
1590 free(filename);
1591 return hwndFrame;
1592}
1593
1594MRESULT EXPENTRY IniLBSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1595{
1596 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1597 static HWND hwndPopup = (HWND) 0;
1598
1599 switch (msg) {
1600 case WM_SETFOCUS:
1601 if (mp2)
1602 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1603 break;
1604
1605 case WM_MENUEND:
1606 if (hwndPopup == (HWND) mp2) {
1607 WinDestroyWindow(hwndPopup);
1608 hwndPopup = (HWND) 0;
1609 }
1610 break;
1611
1612 case WM_CONTEXTMENU:
1613 {
1614 USHORT id = WinQueryWindowUShort(hwnd, QWS_ID);
1615
1616 switch (id) {
1617 case INI_APPLIST:
1618 id = INI_APPMENU;
1619 break;
1620 case INI_KEYLIST:
1621 id = INI_KEYMENU;
1622 break;
1623 default:
1624 id = 0;
1625 break;
1626 }
1627 if (id) {
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);
1636 }
1637 }
1638 break;
1639
1640 case WM_BEGINDRAG:
1641 {
1642 PDRAGINFO pDInfo;
1643 DRAGITEM DItem;
1644 DRAGIMAGE DIcon;
1645 INIDATA *inidata;
1646 HPOINTER hptrINI;
1647 USHORT id;
1648 HWND hDrop = 0;
1649
1650 id = WinQueryWindowUShort(hwnd, QWS_ID);
1651 inidata = WinQueryWindowPtr(WinQueryWindow(hwnd, QW_PARENT), QWL_USER);
1652 if (!inidata || !*inidata->ininame || !*inidata->applname ||
1653 !inidata->keyname) {
1654 if (!fAlertBeepOff)
1655 DosBeep(50, 100);
1656 break;
1657 }
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)
1676 DItem.hstrTargetName = DrgAddStrHandle(NullStr);
1677 else
1678 DItem.hstrTargetName = DrgAddStrHandle(inidata->keyname);
1679 DItem.fsControl = 0;
1680 DItem.fsSupportedOps = DO_COPYABLE | DO_LINKABLE | DO_MOVEABLE;
1681 pDInfo = DrgAllocDraginfo(1L);
1682 DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
1683 hDrop = DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
1684 if (hDrop == NULLHANDLE)
1685 FreeDragInfoData(hwnd, pDInfo);
1686 WinDestroyPointer(hptrINI);
1687 }
1688 break;
1689
1690 case DM_DRAGOVER:
1691 {
1692 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1693 PDRAGITEM pDItem;
1694
1695 if (!DrgAccessDraginfo(pDInfo)) {
1696 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1697 PCSZ_DRGACCESSDRAGINFO);
1698 }
1699 else {
1700 pDItem = DrgQueryDragitemPtr(pDInfo,0);
1701 // Check valid rendering mechanisms and data
1702 if (DrgVerifyRMF(pDItem, (CHAR *) DRM_OS2FILE, NULL)) {
1703 DrgFreeDraginfo(pDInfo);
1704 return (MRFROM2SHORT(DOR_DROP, DO_LINK)); // OK to drop
1705 }
1706 else if (DrgVerifyRMF(pDItem, (CHAR *) DRM_FM2INIRECORD, (CHAR *) DRF_FM2INI)) {
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);
1715 }
1716 }
1717 return MRFROM2SHORT(DOR_NEVERDROP, 0);
1718
1719 case DM_DRAGLEAVE:
1720
1721 break;
1722
1723 case DM_DROP:
1724 {
1725 PDRAGINFO pDInfo = (PDRAGINFO) mp1;
1726 PDRAGITEM pDItem; // Pointer to DRAGITEM
1727 ULONG numitems, curitem, len;
1728 USHORT action;
1729 CHAR szFrom[CCHMAXPATH + 2], szDir[CCHMAXPATH + 1],
1730 szTemp[CCHMAXPATH + 2];
1731 FILESTATUS3 fsa;
1732 INIREC inirec;
1733
1734 if (!DrgAccessDraginfo(pDInfo)) {
1735 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
1736 PCSZ_DRGACCESSDRAGINFO);
1737 return 0;
1738 }
1739 numitems = DrgQueryDragitemCount(pDInfo);
1740 for (curitem = 0; curitem < numitems; curitem++) {
1741 pDItem = DrgQueryDragitemPtr(pDInfo, curitem);
1742 if (DrgVerifyRMF(pDItem, (CHAR *) DRM_OS2FILE, NULL)) {
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 }
1759 else if (DrgVerifyRMF(pDItem, (CHAR *) DRM_FM2INIRECORD, (CHAR *) DRF_FM2INI)) {
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 }
1792 } // for
1793 FreeDragInfoData(hwnd, pDInfo);
1794 }
1795 return 0;
1796
1797 case WM_DESTROY:
1798 if (hwndPopup)
1799 WinDestroyWindow(hwndPopup);
1800 hwndPopup = (HWND) 0;
1801 break;
1802 } // switch
1803 if (oldproc)
1804 return oldproc(hwnd, msg, mp1, mp2);
1805 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1806}
1807
1808MRESULT EXPENTRY IniLBSubProc2(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1809{
1810 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
1811
1812 switch (msg) {
1813 case WM_SETFOCUS:
1814 if (mp2)
1815 PostMsg(WinQueryWindow(hwnd, QW_PARENT), UM_FOCUSME, mp1, mp2);
1816 break;
1817 }
1818 if (oldproc)
1819 return oldproc(hwnd, msg, mp1, mp2);
1820 return WinDefWindowProc(hwnd, msg, mp1, mp2);
1821}
1822
1823MRESULT EXPENTRY IniProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1824{
1825 INIDATA *inidata;
1826 SHORT sSel;
1827 PFNWP oldproc;
1828
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),
1840 FID_MENU);
1841 inidata->hwndIni = hwnd;
1842 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) inidata);
1843 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
1844
1845 if (!WinCreateWindow
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)) {
1849 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1850 PCSZ_WINCREATEWINDOW);
1851 }
1852 if (!WinCreateWindow
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)) {
1856 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1857 PCSZ_WINCREATEWINDOW);
1858 }
1859 if (!WinCreateWindow
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)) {
1863 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1864 PCSZ_WINCREATEWINDOW);
1865 }
1866 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1867 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1868 INI_NUMAPPS, NULL, NULL)) {
1869 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1870 PCSZ_WINCREATEWINDOW);
1871 }
1872 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1873 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1874 INI_NUMKEYS, NULL, NULL)) {
1875 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1876 PCSZ_WINCREATEWINDOW);
1877 }
1878 if (!WinCreateWindow(hwnd, WC_STATIC, (PSZ) NULL, WS_VISIBLE | SS_TEXT |
1879 DT_CENTER | DT_VCENTER, 0, 0, 0, 0, hwnd, HWND_TOP,
1880 INI_NUMDATA, NULL, NULL)) {
1881 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1882 PCSZ_WINCREATEWINDOW);
1883 }
1884 if (!WinCreateWindow(hwnd,
1885 WC_STATIC,
1886 (CHAR *) GetPString(IDS_APPLICATIONSTITLETEXT),
1887 WS_VISIBLE | SS_TEXT |
1888 DT_CENTER | DT_VCENTER,
1889 0,
1890 0, 0, 0, hwnd, HWND_TOP, INI_APPHDR, NULL, NULL)) {
1891 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1892 PCSZ_WINCREATEWINDOW);
1893 }
1894 if (!WinCreateWindow(hwnd,
1895 WC_STATIC,
1896 (CHAR *) GetPString(IDS_KEYWORDSTITLETEXT),
1897 WS_VISIBLE | SS_TEXT |
1898 DT_CENTER | DT_VCENTER,
1899 0,
1900 0, 0, 0, hwnd, HWND_TOP, INI_KEYHDR, NULL, NULL)) {
1901 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1902 PCSZ_WINCREATEWINDOW);
1903 }
1904 if (!WinCreateWindow(hwnd,
1905 WC_STATIC,
1906 (CHAR *) GetPString(IDS_DATABYTESTITLETEXT),
1907 WS_VISIBLE | SS_TEXT |
1908 DT_CENTER | DT_VCENTER,
1909 0,
1910 0, 0, 0, hwnd, HWND_TOP, INI_DATAHDR, NULL, NULL)) {
1911 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
1912 PCSZ_WINCREATEWINDOW);
1913 }
1914
1915 inidata->hwndApp = WinWindowFromID(hwnd, INI_APPLIST);
1916 inidata->hwndKey = WinWindowFromID(hwnd, INI_KEYLIST);
1917 inidata->hwndData = WinWindowFromID(hwnd, INI_DATALIST);
1918
1919 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_APPLIST),
1920 IniLBSubProc);
1921 WinSetWindowPtr(WinWindowFromID(hwnd, INI_APPLIST),
1922 QWL_USER, (PVOID) oldproc);
1923 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_KEYLIST),
1924 IniLBSubProc);
1925 WinSetWindowPtr(WinWindowFromID(hwnd, INI_KEYLIST),
1926 QWL_USER, (PVOID) oldproc);
1927 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, INI_DATALIST),
1928 IniLBSubProc2);
1929 WinSetWindowPtr(WinWindowFromID(hwnd, INI_DATALIST),
1930 QWL_USER, (PVOID) oldproc);
1931 break;
1932
1933 case UM_FOCUSME:
1934 case WM_SETFOCUS:
1935 if (mp2) {
1936 if (hwndMain && fAutoView)
1937 PostMsg(hwndMain, UM_LOADFILE, MPVOID, MPVOID);
1938 inidata = INSTDATA(hwnd);
1939 if (!inidata)
1940 Runtime_Error(pszSrcFile, __LINE__, NULL);
1941 else if (hwndStatus) {
1942 if (*inidata->ininame) {
1943 WinSetWindowText(hwndStatus, (CHAR *) GetPString(IDS_INTERNALINIVIEWERTEXT));
1944 if (hwndStatus2)
1945 WinSetWindowText(hwndStatus2, inidata->ininame);
1946 }
1947 else
1948 PostMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1949 }
1950 }
1951 if (msg == WM_SETFOCUS)
1952 break;
1953 return 0;
1954
1955 case UM_SELECT:
1956 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, INI_APPLIST));
1957 break;
1958
1959 case UM_ACTION:
1960 SetPresParams(WinWindowFromID(hwnd, INI_APPHDR),
1961 &RGBGREY,
1962 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1963 SetPresParams(WinWindowFromID(hwnd, INI_KEYHDR),
1964 &RGBGREY,
1965 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1966 SetPresParams(WinWindowFromID(hwnd, INI_DATAHDR),
1967 &RGBGREY,
1968 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1969 SetPresParams(WinWindowFromID(hwnd, INI_NUMAPPS),
1970 &RGBGREY,
1971 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1972 SetPresParams(WinWindowFromID(hwnd, INI_NUMKEYS),
1973 &RGBGREY,
1974 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1975 SetPresParams(WinWindowFromID(hwnd, INI_NUMDATA),
1976 &RGBGREY,
1977 &RGBBLACK, &RGBBLACK, FNT_8HELVETICABOLD);
1978 if (!WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1979 PP_FONTNAMESIZE,
1980 strlen(FNT_10SYSTEMMONOTEXT) + 1,
1981 (PVOID) FNT_10SYSTEMMONOTEXT))
1982 WinSetPresParam(WinWindowFromID(hwnd, INI_DATALIST),
1983 PP_FONTNAMESIZE,
1984 strlen(FNT_10SYSTEMMONOTEXT) + 1,
1985 (PVOID) FNT_10SYSTEMMONOTEXT);
1986 RestorePresParams(hwnd, "IniUtil");
1987 return 0;
1988
1989 case WM_PRESPARAMCHANGED:
1990 PresParamChanged(hwnd, "IniUtil", mp1, mp2);
1991 break;
1992
1993 case UM_RESCAN:
1994 inidata = INSTDATA(hwnd);
1995 if (!inidata)
1996 Runtime_Error(pszSrcFile, __LINE__, NULL);
1997 else if (mp1) {
1998 SHORT sSelect;
1999 BOOL inprofile;
2000 ULONG size;
2001 SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2002 INI_APPLIST,
2003 LM_QUERYITEMCOUNT,
2004 MPVOID, MPVOID);
2005 if (!numitems) {
2006 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2007 return 0;
2008 }
2009 size = 0;
2010 if (PrfQueryProfileSize(inidata->hini,
2011 (CHAR *)mp1, NULL, (PULONG) & size) && size)
2012 inprofile = TRUE;
2013 else
2014 inprofile = FALSE;
2015 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2016 INI_APPLIST,
2017 LM_SEARCHSTRING,
2018 MPFROM2SHORT(LSS_CASESENSITIVE,
2019 LIT_FIRST),
2020 MPFROMP((CHAR *)mp1));
2021 if (sSelect >= 0) {
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)));
2031 }
2032 else if (inprofile)
2033 WinSendDlgItemMsg(hwnd,
2034 INI_APPLIST,
2035 LM_INSERTITEM,
2036 MPFROM2SHORT(LIT_SORTASCENDING, 0),
2037 MPFROMP((CHAR *)mp1));
2038 if (mp2 && inidata->applname) {
2039 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2040 inidata->hini, inidata->applname))
2041 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2042 }
2043 }
2044 return 0;
2045
2046 case UM_INITIALSIZE: // kludge
2047 inidata = INSTDATA(hwnd);
2048 if (!inidata)
2049 Runtime_Error(pszSrcFile, __LINE__, NULL);
2050 else
2051 inidata->dontclose = TRUE;
2052 return 0;
2053
2054 case WM_SIZE:
2055 {
2056 SHORT cx = SHORT1FROMMP(mp2);
2057 SHORT cy = SHORT2FROMMP(mp2);
2058
2059 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPHDR), HWND_TOP,
2060 2, cy - 22, (cx / 4) - 4, 20, SWP_MOVE | SWP_SIZE);
2061 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMAPPS), HWND_TOP,
2062 (cx / 4) + 2, cy - 22, (cx / 4) - 4, 20,
2063 SWP_MOVE | SWP_SIZE);
2064 WinSetWindowPos(WinWindowFromID(hwnd, INI_APPLIST), HWND_TOP,
2065 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
2066 SWP_MOVE | SWP_SIZE);
2067 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYHDR), HWND_TOP,
2068 (cx / 2) + 2, cy - 22, (cx / 4) - 4, 20,
2069 SWP_MOVE | SWP_SIZE);
2070 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMKEYS), HWND_TOP,
2071 (cx - (cx / 4)) + 2, cy - 22, (cx / 4) - 4, 20,
2072 SWP_MOVE | SWP_SIZE);
2073 WinSetWindowPos(WinWindowFromID(hwnd, INI_KEYLIST), HWND_TOP,
2074 (cx / 2) + 2, (cy / 2) + 2, (cx / 2) - 4, (cy / 2) - 28,
2075 SWP_MOVE | SWP_SIZE);
2076 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATAHDR), HWND_TOP,
2077 2, (cy / 2) - 22, (cx / 2) - 4, 20,
2078 SWP_MOVE | SWP_SIZE);
2079 WinSetWindowPos(WinWindowFromID(hwnd, INI_NUMDATA), HWND_TOP,
2080 (cx / 2) + 2, (cy / 2) - 22, (cx / 2) - 4, 20,
2081 SWP_MOVE | SWP_SIZE);
2082 WinSetWindowPos(WinWindowFromID(hwnd, INI_DATALIST), HWND_TOP,
2083 2, 2, cx - 4, (cy / 2) - 28, SWP_MOVE | SWP_SIZE);
2084 }
2085 break;
2086
2087 case UM_LOADFILE:
2088 // load initial file
2089 inidata = INSTDATA(hwnd);
2090 if (!inidata)
2091 Runtime_Error(pszSrcFile, __LINE__, NULL);
2092 else {
2093 if (mp1) {
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 }
2105 }
2106 else
2107 inidata->hini = HINI_USERPROFILE;
2108 if (inidata->hini == NULLHANDLE) {
2109 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
2110 PCSZ_PRFOPENPROFILEFAILED, inidata->ininame);
2111 }
2112 else {
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;
2120 }
2121 }
2122 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2123 return 0;
2124
2125 case WM_ERASEBACKGROUND:
2126 WinFillRect((HPS) mp1, (PRECTL) mp2, 0x00d0d0d0);
2127 return 0;
2128
2129 case WM_PAINT:
2130 {
2131 HPS hps;
2132 RECTL rcl;
2133
2134 hps = WinBeginPaint(hwnd, (HPS) 0, NULL);
2135 if (hps) {
2136 WinQueryWindowRect(hwnd, &rcl);
2137 WinFillRect(hps, &rcl, CLR_PALEGRAY);
2138 WinEndPaint(hps);
2139 // tell status window to paint its box
2140 PaintRecessedWindow(WinWindowFromID(hwnd, INI_APPHDR),
2141 (HPS) 0, FALSE, FALSE);
2142 PaintRecessedWindow(WinWindowFromID(hwnd, INI_KEYHDR),
2143 (HPS) 0, FALSE, FALSE);
2144 PaintRecessedWindow(WinWindowFromID(hwnd, INI_DATAHDR),
2145 (HPS) 0, FALSE, FALSE);
2146 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMAPPS),
2147 (HPS) 0, FALSE, FALSE);
2148 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMKEYS),
2149 (HPS) 0, FALSE, FALSE);
2150 PaintRecessedWindow(WinWindowFromID(hwnd, INI_NUMDATA),
2151 (HPS) 0, FALSE, FALSE);
2152 inidata = INSTDATA(hwnd);
2153 if (!inidata)
2154 Runtime_Error(pszSrcFile, __LINE__, NULL);
2155 else if (inidata->hwndCurrent)
2156 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_RED);
2157 }
2158 }
2159 break;
2160
2161 case WM_CONTROL:
2162 switch (SHORT1FROMMP(mp1)) {
2163 case INI_KEYLIST:
2164 case INI_APPLIST:
2165 case INI_DATALIST:
2166 switch (SHORT2FROMMP(mp1)) {
2167 case LN_SETFOCUS:
2168 inidata = INSTDATA(hwnd);
2169 if (!inidata)
2170 Runtime_Error(pszSrcFile, __LINE__, NULL);
2171 else {
2172 if (inidata->hwndCurrent)
2173 BoxWindow(inidata->hwndCurrent, (HPS) 0, CLR_PALEGRAY);
2174 inidata->hwndCurrent = WinWindowFromID(hwnd, SHORT1FROMMP(mp1));
2175 BoxWindow(WinWindowFromID(hwnd,
2176 SHORT1FROMMP(mp1)), (HPS) 0, CLR_RED);
2177 }
2178 break;
2179
2180 case LN_ENTER:
2181 case LN_SELECT:
2182 {
2183 CHAR applname[CCHMAXPATH], keyname[CCHMAXPATH];
2184 SHORT sSelect;
2185
2186 if (SHORT1FROMMP(mp1) == INI_DATALIST)
2187 break;
2188
2189 inidata = INSTDATA(hwnd);
2190 if (!inidata || !inidata->hini) {
2191 Runtime_Error(pszSrcFile, __LINE__, NULL);
2192 break;
2193 }
2194 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2195 inidata->keyindex = inidata->appindex = 0;
2196 *applname = *keyname = *inidata->applname = *inidata->keyname = 0;
2197 sSelect = (SHORT) WinSendDlgItemMsg(hwnd,
2198 INI_APPLIST,
2199 LM_QUERYSELECTION,
2200 MPFROM2SHORT(LIT_FIRST, 0),
2201 MPVOID);
2202 if (sSelect < 0)
2203 break;
2204 inidata->appindex = sSelect;
2205 WinSendDlgItemMsg(hwnd,
2206 INI_APPLIST,
2207 LM_QUERYITEMTEXT,
2208 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2209 MPFROMP(applname));
2210 if (SHORT1FROMMP(mp1) == INI_APPLIST) {
2211 if (!EnumKeyNames(WinWindowFromID(hwnd, INI_KEYLIST),
2212 inidata->hini, applname))
2213 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2214 }
2215 else {
2216 sSelect = (SHORT) WinSendDlgItemMsg(hwnd, INI_KEYLIST,
2217 LM_QUERYSELECTION,
2218 MPFROM2SHORT(LIT_FIRST, 0),
2219 MPVOID);
2220 if (sSelect < 0)
2221 break;
2222 inidata->keyindex = sSelect;
2223 WinSendDlgItemMsg(hwnd,
2224 INI_KEYLIST,
2225 LM_QUERYITEMTEXT,
2226 MPFROM2SHORT(sSelect, CCHMAXPATH - 1),
2227 MPFROMP(keyname));
2228 if (!*keyname || !*applname)
2229 break;
2230 strcpy(inidata->keyname, keyname);
2231 strcpy(inidata->applname, applname);
2232 xfree(inidata->data, pszSrcFile, __LINE__);
2233 inidata->data = GetKeyData(WinWindowFromID(hwnd,
2234 INI_DATALIST),
2235 inidata->hini,
2236 applname, keyname, &inidata->datalen);
2237 if (!inidata->data)
2238 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(INI_REFRESH, 0), MPVOID);
2239 }
2240 }
2241 break;
2242 }
2243 break;
2244 }
2245 return 0;
2246
2247 case UM_SETDIR:
2248 {
2249 SHORT num;
2250 CHAR s[81];
2251
2252 num = (SHORT) WinSendDlgItemMsg(hwnd,
2253 INI_APPLIST,
2254 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2255 sprintf(s, "%u", num);
2256 WinSetDlgItemText(hwnd, INI_NUMAPPS, s);
2257 num = (SHORT) WinSendDlgItemMsg(hwnd,
2258 INI_KEYLIST,
2259 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2260 sprintf(s, "%u", num);
2261 WinSetDlgItemText(hwnd, INI_NUMKEYS, s);
2262 WinSetDlgItemText(hwnd, INI_NUMDATA, "0");
2263 WinSendDlgItemMsg(hwnd, INI_DATALIST, LM_DELETEALL, MPVOID, MPVOID);
2264 // inidata = WinQueryWindowPtr(hwnd, QWL_USER); // 09 Jan 08 SHL
2265 }
2266 return 0;
2267
2268 case UM_SETUP:
2269 inidata = INSTDATA(hwnd);
2270 if (!inidata)
2271 Runtime_Error(pszSrcFile, __LINE__, NULL);
2272 else {
2273 PRFPROFILE prfp;
2274 CHAR sysini[CCHMAXPATH + 81];
2275 CHAR userini[CCHMAXPATH];
2276
2277 memset(&prfp, 0, sizeof(PRFPROFILE));
2278 prfp.cchUserName = CCHMAXPATH;
2279 prfp.cchSysName = CCHMAXPATH;
2280 prfp.pszUserName = (PSZ) userini;
2281 prfp.pszSysName = (PSZ) sysini;
2282 if (PrfQueryProfile(WinQueryAnchorBlock(hwnd), &prfp)) {
2283 if (inidata->hini == HINI_SYSTEMPROFILE)
2284 strcpy(inidata->ininame, sysini);
2285 else if (inidata->hini == HINI_USERPROFILE)
2286 strcpy(inidata->ininame, userini);
2287 sprintf(sysini, GetPString(IDS_INITITLETEXT), inidata->ininame);
2288 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), sysini);
2289 if (WinQueryWindow(hwnd, QW_PARENT) ==
2290 WinQueryActiveWindow(WinQueryWindow
2291 (WinQueryWindow(hwnd, QW_PARENT),
2292 QW_PARENT))) {
2293 if (hwndStatus)
2294 WinSetWindowText(hwndStatus, (CHAR *) GetPString(IDS_INTERNALINIVIEWERTEXT));
2295 if (hwndStatus2)
2296 WinSetWindowText(hwndStatus2, inidata->ininame);
2297 }
2298 }
2299 else {
2300 CHAR s[100];
2301
2302 sprintf(s, PCSZ_INIQUERYPRFTEXT, GetPString(IDS_FAILEDTEXT));
2303 WinSetWindowText(WinQueryWindow(hwnd, QW_PARENT), s);
2304 }
2305 return 0;
2306 }
2307
2308 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2309 return 0;
2310
2311 case WM_CHAR:
2312 if (!(SHORT1FROMMP(mp1) & KC_KEYUP)) {
2313 if (SHORT1FROMMP(mp1) & KC_VIRTUALKEY) {
2314 switch (SHORT2FROMMP(mp2)) {
2315 case VK_DELETE:
2316 inidata = INSTDATA(hwnd);
2317 if (!inidata)
2318 Runtime_Error(pszSrcFile, __LINE__, NULL);
2319 else {
2320 SHORT cmd = inidata->hwndCurrent &&
2321 WinQueryWindowUShort(inidata->hwndCurrent, QWS_ID) ==
2322 INI_APPLIST ?
2323 INI_DELETEAPP :INI_DELETEKEY;
2324 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(cmd, 0), MPVOID);
2325 }
2326 break;
2327 }
2328 }
2329 }
2330 break;
2331
2332 case WM_COMMAND:
2333 switch (SHORT1FROMMP(mp1)) {
2334 case IDM_FINDNEXT:
2335 case IDM_FINDFIRST:
2336 inidata = INSTDATA(hwnd);
2337 if (!inidata)
2338 Runtime_Error(pszSrcFile, __LINE__, NULL);
2339 else if (inidata->hwndCurrent) {
2340 STRINGINPARMS sip;
2341 static CHAR tofind[258] = "";
2342 SHORT x, z;
2343
2344 if (SHORT1FROMMP(mp1) == IDM_FINDFIRST || !*tofind) {
2345 z = LIT_FIRST;
2346 memset(&sip, 0, sizeof(sip));
2347 sip.help = GetPString(IDS_INISEARCHHELPTEXT);
2348 sip.prompt = GetPString(IDS_INISEARCHPROMPTTEXT);
2349 sip.inputlen = 257;
2350 sip.ret = tofind;
2351 sip.title = GetPString(IDS_INISEARCHTITLETEXT);
2352 if (WinDlgBox(HWND_DESKTOP,
2353 hwnd,
2354 InputDlgProc, FM3ModHandle, STR_FRAME, &sip)) {
2355 rstrip(tofind);
2356 if (!*tofind) {
2357 if (!fAlertBeepOff)
2358 DosBeep(50, 100);
2359 break;
2360 }
2361 }
2362 else
2363 break;
2364 }
2365 else {
2366 z = (SHORT) WinSendMsg(inidata->hwndCurrent,
2367 LM_QUERYSELECTION,
2368 MPFROM2SHORT(LIT_CURSOR, 0), MPVOID);
2369 if (z < 0)
2370 z = LIT_FIRST;
2371 }
2372 x = (SHORT) WinSendMsg(inidata->hwndCurrent,
2373 LM_SEARCHSTRING,
2374 MPFROM2SHORT(LSS_SUBSTRING, z),
2375 MPFROMP(tofind));
2376 if (x >= 0 && x > z) {
2377 WinSendMsg(inidata->hwndCurrent,
2378 LM_SETTOPINDEX, MPFROM2SHORT(x, 0), MPVOID);
2379 WinSendMsg(inidata->hwndCurrent,
2380 LM_SELECTITEM,
2381 MPFROM2SHORT(x, 0), MPFROM2SHORT(TRUE, 0));
2382 }
2383 else if (!fAlertBeepOff)
2384 DosBeep(250, 100);
2385 }
2386 break;
2387
2388 case IDM_FILTER:
2389 inidata = INSTDATA(hwnd);
2390 if (!inidata)
2391 Runtime_Error(pszSrcFile, __LINE__, NULL);
2392 else {
2393 SHORT numitems = (SHORT)WinSendDlgItemMsg(hwnd,
2394 INI_APPLIST,
2395 LM_QUERYITEMCOUNT,
2396 MPVOID, MPVOID);
2397 if (numitems)
2398 WinDlgBox(HWND_DESKTOP,
2399 hwnd,
2400 FilterIniProc, FM3ModHandle, IAF_FRAME, (PVOID) inidata);
2401 else if (!fAlertBeepOff)
2402 DosBeep(50, 100);
2403 }
2404 break;
2405
2406 case IDM_COPY:
2407 case IDM_INFO:
2408 case IDM_MOVE:
2409 inidata = INSTDATA(hwnd);
2410 if (!inidata || !*inidata->ininame)
2411 Runtime_Error(pszSrcFile, __LINE__, NULL);
2412 else if (mp2) {
2413 INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2414 if (inirec) {
2415 *inirec = *(INIREC *) mp2;
2416 inirec->hwndDlg = hwnd;
2417 inirec->confirm = inidata->confirm;
2418 strcpy(inirec->filename1, inidata->ininame);
2419 if (xbeginthread(CopyIniThread,
2420 122880,
2421 inirec,
2422 pszSrcFile,
2423 __LINE__) == -1)
2424 {
2425 free(inirec);
2426 }
2427 }
2428 }
2429 break;
2430
2431 case IDM_COMPARE:
2432 inidata = INSTDATA(hwnd);
2433 if (!inidata || !*inidata->ininame)
2434 Runtime_Error(pszSrcFile, __LINE__, NULL);
2435 else if (mp2) {
2436 INIREC *inirec = xmalloc(sizeof(INIREC), pszSrcFile, __LINE__);
2437 if (inirec) {
2438 strcpy(inirec->filename2, (CHAR *)(mp2));
2439 strcpy(inirec->filename1, inidata->ininame);
2440 inirec->hwndDlg = hwnd;
2441 if (xbeginthread(CompareIniThread,
2442 122880,
2443 inirec,
2444 pszSrcFile,
2445 __LINE__) == -1)
2446 {
2447 free(inirec);
2448 }
2449 }
2450 }
2451 break;
2452
2453 case INI_COPYAPP:
2454 case INI_COPYKEY:
2455 case INI_RENAMEAPP:
2456 case INI_RENAMEKEY:
2457 inidata = INSTDATA(hwnd);
2458 if (!inidata) {
2459 Runtime_Error(pszSrcFile, __LINE__, NULL);
2460 break;
2461 }
2462 if (!*inidata->ininame ||
2463 !*inidata->applname ||
2464 (!*inidata->keyname &&
2465 (SHORT1FROMMP(mp1) == INI_RENAMEKEY ||
2466 SHORT1FROMMP(mp1) == INI_COPYKEY)))
2467 break;
2468 {
2469 INIREC *inirec = xmallocz(sizeof(INIREC), pszSrcFile, __LINE__);
2470 if (inirec) {
2471 inirec->size = sizeof(INIREC);
2472 inirec->hwndDlg = hwnd;
2473 inirec->confirm = inidata->confirm;
2474 inirec->action = (SHORT1FROMMP(mp1) == INI_COPYAPP ||
2475 SHORT1FROMMP(mp1) == INI_COPYKEY) ?
2476 IDM_COPY : IDM_MOVE;
2477 strcpy(inirec->filename1, inidata->ininame);
2478 strcpy(inirec->filename2, inidata->ininame);
2479 if (SHORT1FROMMP(mp1) == INI_COPYKEY ||
2480 SHORT1FROMMP(mp1) == INI_RENAMEKEY)
2481 strcpy(inirec->key, inidata->keyname);
2482 strcpy(inirec->app, inidata->applname);
2483 if (!WinDlgBox(HWND_DESKTOP,
2484 hwnd,
2485 IntraIniProc,
2486 FM3ModHandle, INII_FRAME, (PVOID) inirec)) {
2487 free(inirec);
2488 break;
2489 }
2490 if (xbeginthread(CopyIniThread,
2491 122880,
2492 inirec,
2493 pszSrcFile,
2494 __LINE__) == -1)
2495 {
2496 free(inirec);
2497 }
2498 }
2499 }
2500 break;
2501
2502 case INI_BACKUPINI:
2503 inidata = INSTDATA(hwnd);
2504 if (!inidata)
2505 Runtime_Error(pszSrcFile, __LINE__, NULL);
2506 else if (*inidata->ininame) {
2507 // 09 Jan 08 SHL fixme to complain
2508 CHAR filename[CCHMAXPATH], *p;
2509 strcpy(filename, inidata->ininame);
2510 ForwardslashToBackslash(filename);
2511 p = strrchr(filename, '\\');
2512 if (p) {
2513 p++;
2514 *p = 0;
2515 }
2516 else
2517 *filename = 0;
2518 strcat(filename, PCSZ_STARDOTINI);
2519 if (export_filename(hwnd, filename, TRUE)) {
2520
2521 PPRFPROFILE prfp;
2522
2523 prfp = xmallocz(sizeof(PRFPROFILE), pszSrcFile, __LINE__);
2524 if (prfp) {
2525 prfp->pszUserName =
2526 xstrdup(inidata->ininame, pszSrcFile, __LINE__);
2527 if (!prfp->pszUserName)
2528 free(prfp);
2529 else {
2530 prfp->cchUserName = strlen(prfp->pszUserName);
2531 prfp->pszSysName = xstrdup(filename, pszSrcFile, __LINE__);
2532 if (!prfp->pszSysName) {
2533 free(prfp->pszUserName);
2534 free(prfp);
2535 }
2536 else {
2537 prfp->cchSysName = strlen(prfp->pszSysName);
2538 if (xbeginthread(BackupIniThread,
2539 122880,
2540 prfp,
2541 pszSrcFile,
2542 __LINE__) == -1)
2543 {
2544 free(prfp->pszSysName);
2545 free(prfp->pszUserName);
2546 free(prfp);
2547 }
2548 else
2549 DosSleep(100); //05 Aug 07 GKY 250
2550 }
2551 }
2552 }
2553 }
2554 }
2555 break;
2556
2557 case INI_CHANGEINI:
2558 inidata = INSTDATA(hwnd);
2559 if (!inidata)
2560 Runtime_Error(pszSrcFile, __LINE__, NULL);
2561 else {
2562 if (WinDlgBox(HWND_DESKTOP,
2563 hwnd,
2564 ChangeIniProc,
2565 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2566 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2567 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2568 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2569 }
2570 }
2571 break;
2572
2573 case INI_SWAPINI:
2574 inidata = INSTDATA(hwnd);
2575 if (!inidata)
2576 Runtime_Error(pszSrcFile, __LINE__, NULL);
2577 else {
2578 if (WinDlgBox(HWND_DESKTOP,
2579 hwnd,
2580 SwapIniProc,
2581 FM3ModHandle, INIR_FRAME, (PVOID) inidata->ininame)) {
2582 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2583 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2584 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2585 }
2586 }
2587 break;
2588
2589 case IDM_NEXTWINDOW:
2590 inidata = INSTDATA(hwnd);
2591 if (!inidata)
2592 Runtime_Error(pszSrcFile, __LINE__, NULL);
2593 else {
2594 inidata->currid++;
2595 if (inidata->currid > INI_DATALIST)
2596 inidata->currid = INI_APPLIST;
2597 }
2598 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2599 break;
2600
2601 case IDM_PREVWINDOW:
2602 inidata = INSTDATA(hwnd);
2603 if (!inidata)
2604 Runtime_Error(pszSrcFile, __LINE__, NULL);
2605 else {
2606 inidata->currid--;
2607 if (inidata->currid < INI_APPLIST)
2608 inidata->currid = INI_DATALIST;
2609 }
2610 WinSetFocus(HWND_DESKTOP, WinWindowFromID(hwnd, inidata->currid));
2611 break;
2612
2613 case INI_CONFIRM:
2614 inidata = INSTDATA(hwnd);
2615 if (!inidata)
2616 Runtime_Error(pszSrcFile, __LINE__, NULL);
2617 else {
2618 inidata->confirm = (inidata->confirm) ? FALSE : TRUE;
2619 WinCheckMenuItem(inidata->hwndMenu, INI_CONFIRM, inidata->confirm);
2620
2621 }
2622 break;
2623
2624 case INI_EDITENTRY:
2625 case INI_ADDENTRY:
2626 inidata = INSTDATA(hwnd);
2627 if (!inidata)
2628 Runtime_Error(pszSrcFile, __LINE__, NULL);
2629 else {
2630 inidata->edit = (SHORT1FROMMP(mp1) == INI_EDITENTRY);
2631 WinDlgBox(HWND_DESKTOP,
2632 hwnd, AddIniProc, FM3ModHandle, IAD_FRAME, (PVOID) inidata);
2633 }
2634 break;
2635
2636 case INI_OTHERPROFILE:
2637 inidata = INSTDATA(hwnd);
2638 if (!inidata)
2639 Runtime_Error(pszSrcFile, __LINE__, NULL);
2640 else {
2641 CHAR filename[CCHMAXPATH + 81], *p;
2642 FILESTATUS3 fsa;
2643 HINI hINI;
2644
2645 strcpy(filename, inidata->ininame);
2646 ForwardslashToBackslash(filename);
2647 p = strrchr(filename, '\\');
2648 if (p) {
2649 p++;
2650 *p = 0;
2651 }
2652 else
2653 *filename = 0;
2654 strcat(filename, PCSZ_STARDOTINI);
2655 if (insert_filename(hwnd,
2656 filename,
2657 TRUE,
2658 TRUE) &&
2659 *filename &&
2660 !DosQueryPathInfo(filename, FIL_STANDARD, &fsa, sizeof(fsa))) {
2661 hINI = PrfOpenProfile(WinQueryAnchorBlock(hwnd), filename);
2662 if (hINI == NULLHANDLE) {
2663 Win_Error(hwnd, hwnd, __FILE__, __LINE__,
2664 GetPString(IDS_INICANTOPENINITEXT), filename);
2665 }
2666 else {
2667 if (*inidata->ininame) {
2668 if (inidata->hini)
2669 CloseProfile(inidata->hini, FALSE);
2670 *inidata->ininame = 0;
2671 }
2672 inidata->hini = hINI;
2673 strcpy(inidata->ininame, filename);
2674 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2675 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2676 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2677 }
2678 }
2679 }
2680 break;
2681
2682 case INI_USERPROFILE:
2683 inidata = INSTDATA(hwnd);
2684 if (!inidata)
2685 Runtime_Error(pszSrcFile, __LINE__, NULL);
2686 else {
2687 if (inidata->hini && *inidata->ininame)
2688 CloseProfile(inidata->hini, FALSE);
2689 *inidata->ininame = 0;
2690 inidata->hini = HINI_USERPROFILE;
2691 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2692 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2693 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2694 }
2695 break;
2696
2697 case INI_SYSTEMPROFILE:
2698 inidata = INSTDATA(hwnd);
2699 if (!inidata)
2700 Runtime_Error(pszSrcFile, __LINE__, NULL);
2701 else {
2702 if (inidata->hini && *inidata->ininame)
2703 CloseProfile(inidata->hini, FALSE);
2704 *inidata->ininame = 0;
2705 inidata->hini = HINI_SYSTEMPROFILE;
2706 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
2707 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2708 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2709 }
2710 break;
2711
2712 case INI_REFRESH:
2713 inidata = INSTDATA(hwnd);
2714 if (!inidata)
2715 Runtime_Error(pszSrcFile, __LINE__, NULL);
2716 else {
2717 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2718 EnumAppNames(WinWindowFromID(hwnd, INI_APPLIST), inidata->hini);
2719 }
2720 break;
2721
2722 case INI_DELETEKEY:
2723 inidata = INSTDATA(hwnd);
2724 if (!inidata)
2725 Runtime_Error(pszSrcFile, __LINE__, NULL);
2726 else if (*inidata->applname && *inidata->keyname) {
2727
2728 SHORT keyindex = inidata->keyindex;
2729
2730 if (inidata->confirm && saymsg(MB_YESNO,
2731 hwnd,
2732 GetPString(IDS_CONFIRMTEXT),
2733 GetPString(IDS_INIDELETEKEYTEXT),
2734 inidata->keyname) == MBID_NO)
2735 break;
2736 PrfWriteProfileData(inidata->hini,
2737 inidata->applname, inidata->keyname, NULL, 0L);
2738 *inidata->keyname = 0;
2739 WinSendDlgItemMsg(hwnd,
2740 INI_KEYLIST,
2741 LM_DELETEITEM, MPFROM2SHORT(keyindex, 0), MPVOID);
2742 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2743 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2744 INI_KEYLIST,
2745 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2746 if (!sSel)
2747 WinSendMsg(hwnd, INI_DELETEAPP, MPVOID, MPVOID);
2748 else {
2749 sSel = min(keyindex, sSel - 1);
2750 WinSendDlgItemMsg(hwnd,
2751 INI_KEYLIST,
2752 LM_SELECTITEM,
2753 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2754 }
2755 }
2756 break;
2757
2758 case INI_DELETEAPP:
2759 inidata = INSTDATA(hwnd);
2760 if (!inidata)
2761 Runtime_Error(pszSrcFile, __LINE__, NULL);
2762 // 09 Jan 08 SHL fixme to complain?
2763 else if (*inidata->applname) {
2764
2765 SHORT appindex = inidata->appindex;
2766
2767 if (inidata->confirm && saymsg(MB_YESNO,
2768 hwnd,
2769 GetPString(IDS_CONFIRMTEXT),
2770 GetPString(IDS_INIDELETEAPPTEXT),
2771 inidata->applname) == MBID_NO)
2772 break;
2773 PrfWriteProfileData(inidata->hini, inidata->applname, NULL, NULL, 0L);
2774 *inidata->applname = *inidata->keyname = 0;
2775 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2776 WinSendDlgItemMsg(hwnd, INI_KEYLIST, LM_DELETEALL, MPVOID, MPVOID);
2777 WinSendDlgItemMsg(hwnd,
2778 INI_APPLIST,
2779 LM_DELETEITEM, MPFROM2SHORT(appindex, 0), MPVOID);
2780 WinSendMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
2781 sSel = (SHORT) WinSendDlgItemMsg(hwnd,
2782 INI_APPLIST,
2783 LM_QUERYITEMCOUNT, MPVOID, MPVOID);
2784 if (sSel) {
2785 sSel = min(appindex, sSel - 1);
2786 WinSendDlgItemMsg(hwnd,
2787 INI_APPLIST,
2788 LM_SELECTITEM,
2789 MPFROMSHORT(sSel), MPFROMSHORT(TRUE));
2790 }
2791 }
2792 break;
2793
2794 case DID_OK:
2795 case DID_CANCEL:
2796 PostMsg(hwnd, WM_CLOSE, MPVOID, MPVOID);
2797 break;
2798
2799 case IDM_HELP:
2800 if (hwndHelp)
2801 WinSendMsg(hwndHelp,
2802 HM_DISPLAY_HELP,
2803 MPFROM2SHORT(HELP_INI, 0), MPFROMSHORT(HM_RESOURCEID));
2804 break;
2805
2806 case IDM_ABOUT:
2807 saymsg(MB_ENTER | MB_ICONASTERISK,
2808 hwnd,
2809 GetPString(IDS_VIEWABOUTTITLETEXT),
2810 GetPString(IDS_INIABOUTTEXT));
2811 break;
2812 }
2813 return 0;
2814
2815 case WM_CLOSE:
2816 if (ParentIsDesktop(WinQueryWindow(hwnd, QW_PARENT), (HWND) 0)) {
2817
2818 SWP swp;
2819
2820 WinQueryWindowPos(WinQueryWindow(hwnd, QW_PARENT), &swp);
2821 if (!(swp.fl & (SWP_HIDE | SWP_MINIMIZE)))
2822 WinStoreWindowPos((CHAR *) FM2Str,
2823 "INIWindowPos", WinQueryWindow(hwnd, QW_PARENT));
2824 // inidata = WinQueryWindowPtr(hwnd, QWL_USER); // 09 Jan 08 SHL
2825 }
2826 WinDestroyWindow(WinQueryWindow(hwnd, QW_PARENT));
2827 return 0;
2828
2829 case WM_DESTROY:
2830 {
2831 BOOL dontclose = FALSE;
2832
2833 inidata = INSTDATA(hwnd);
2834 if (!inidata)
2835 Runtime_Error(pszSrcFile, __LINE__, NULL);
2836 else {
2837 dontclose = inidata->dontclose;
2838 if (inidata->hini != NULLHANDLE && *inidata->ininame)
2839 CloseProfile(inidata->hini, FALSE);
2840 free(inidata->data);
2841 if (inidata->hwndPopup)
2842 WinDestroyWindow(inidata->hwndPopup);
2843 free(inidata);
2844 }
2845 if (!dontclose &&
2846 ParentIsDesktop(hwnd, WinQueryWindow(WinQueryWindow(hwnd,
2847 QW_PARENT),
2848 QW_PARENT))) {
2849 if (!PostMsg((HWND) 0, WM_QUIT, MPVOID, MPVOID))
2850 DosExit(EXIT_PROCESS, 1);
2851 }
2852 }
2853 break;
2854 }
2855 return WinDefWindowProc(hwnd, msg, mp1, mp2);
2856}
2857
2858#pragma alloc_text(INIS,EnumAppNames,GetKeyData,EnumKeyNames,AddIniProc,IniProc,BackupIniThread)
2859#pragma alloc_text(INIS,ChangeIniProc,SwapIniProc,IniLBSubProc,IniLBSubProc2,CopyIniThread)
2860#pragma alloc_text(INIS,IntraIniProc,FilterIniProc)
2861#pragma alloc_text(STARTUP,StartIniEditor)
Note: See TracBrowser for help on using the repository browser.