source: trunk/dll/inis.c@ 914

Last change on this file since 914 was 914, checked in by Steven Levine, 18 years ago

Use CloseProfile to avoid spurious system INI closes

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