source: trunk/dll/inis.c@ 1185

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

Ticket 187: Draft 2: Move remaining function declarations

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