source: trunk/dll/inis.c@ 1880

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

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

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