source: trunk/dll/inis.c@ 1161

Last change on this file since 1161 was 1161, checked in by John Small, 17 years ago

Ticket 187: Draft 1: Functions only

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