source: trunk/dll/inis.c@ 841

Last change on this file since 841 was 841, checked in by Gregg Young, 18 years ago

This implements large file support; The wrappers to allow WARP3 compatibility are not done so this will not run on Warp3or Warp 4 pre fixpack 12(?)

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