source: trunk/dll/inis.c@ 1401

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

Remainder of changes to rename commafmt.h/c (Ticket 28, 82); Additional strings moved to PCSZs in init.c (Ticket 6); Added WriteDetailsSwitches used it and LoadDetailsSwitches to consolidate inline code (Ticket 343, 344)

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