source: trunk/dll/inis.c@ 1391

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

Move nontranslated strings to init.c and codepage.c; use those strings in place of GetPString calls. Move other strings to a StringTable; minor cleanup and code changes to codepage.c to use a string array instead of GetPString calls. Ticket 340

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