source: trunk/dll/walkem.c@ 1877

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

Remove debug code

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 45.4 KB
RevLine 
[123]1
2/***********************************************************************
3
4 $Id: walkem.c 1877 2015-10-11 21:43:27Z gyoung $
5
[1077]6 Misc persistent lists support
7
[123]8 Copyright (c) 1993-98 M. Kimes
[1394]9 Copyright (c) 2005, 2009 Steven H. Levine
[123]10
[186]11 01 Aug 04 SHL Rework lstrip/rstrip usage
12 05 Jun 05 SHL Use QWL_USER
[242]13 13 Aug 05 SHL Run through indent
[259]14 13 Aug 05 SHL remove_udir - avoid corrupting last dirs list
[328]15 17 Jul 06 SHL Use Runtime_Error
[404]16 29 Jul 06 SHL Use xfgets
[518]17 20 Oct 06 SHL Correct . .. check
[544]18 06 Nov 06 SHL Oops - need to allow .. here
19 14 Nov 06 SHL Correct FillPathListBox regression
[574]20 22 Mar 07 GKY Use QWL_USER
[617]21 20 Apr 07 SHL Avoid spurious add_udir error reports
[787]22 16 Aug 07 SHL Update add_setups for ticket# 109
[789]23 19 Aug 07 SHL Correct load_setups error reporting
[794]24 20 Aug 07 GKY Move #pragma alloc_text to end for OpenWatcom compat
[807]25 25 Aug 07 SHL Correct #pragma alloc_text typos
[864]26 11 Nov 07 GKY Cancel now directly closes dialog even if directory path text has changed
[939]27 20 Jan 08 GKY Walk & walk2 dialogs now save and restore size and position
[965]28 19 Feb 08 JBS Add "State at last FM/2 close" to the states combo box
[985]29 29 Feb 08 GKY Use xfree where appropriate
30 29 Feb 08 GKY Refactor global command line variables to notebook.h
[1027]31 19 Jun 08 JBS Ticket 227: Allow temporary saving/deleting of the shutdown state of directory containers
[1029]32 22 Jun 08 GKY Add free_?dir for fortify testing
[1078]33 18 Jul 08 SHL More Fortify support
[1082]34 19 Jul 08 GKY Replace save_dir2(dir) with pFM2SaveDirectory and use BldFullPathName
[1119]35 24 Aug 08 GKY Warn full drive on save of .DAT file; prevent loss of existing file
[1438]36 28 Jun 09 GKY Added AddBackslashToPath() to remove repeatative code.
[1471]37 06 Oct 09 SHL Ctrl-select selects Walk Dialog listbox entry, but suppresses action
[1498]38 17 JAN 10 GKY Changes to get working with Watcom 1.9 Beta (1/16/10). Mostly cast CHAR CONSTANT * as CHAR *.
[1670]39 12 Aug 12 GKY Allow for selection of include subdirectories or a list file on initial startup of compare dirs
[123]40
41***********************************************************************/
42
[907]43#include <stdlib.h>
44#include <string.h>
45#include <ctype.h>
46#include <share.h>
47
[2]48#define INCL_WIN
49#define INCL_DOS
50#define INCL_DOSERRORS
[787]51#define INCL_SHLERRORS // PMERR_NOT_IN_IDX
[841]52#define INCL_LONGLONG
[2]53
[1186]54#include "fm3dll.h"
[1228]55#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
[1214]56#include "arccnrs.h" // Data declaration(s)
57#include "info.h" // Data declaration(s)
58#include "init.h" // Data declaration(s)
59#include "mainwnd.h" // Data declaration(s)
[2]60#include "fm3dlg.h"
61#include "fm3str.h"
[907]62#include "errutil.h" // Dos_Error...
63#include "strutil.h" // GetPString
[1077]64#include "notebook.h" // targetdirectory
[1082]65#include "pathutil.h" // BldFullPathName
[1162]66#include "walkem.h"
[1186]67#include "valid.h" // MakeFullName
68#include "chklist.h" // PosOverOkay
69#include "mkdir.h" // SetDir
70#include "wrappers.h" // xfgets
71#include "strips.h" // bstrip
72#include "misc.h" // CheckDriveSpaceAvail
73#include "dirs.h" // save_dir2
[1039]74#include "fortify.h"
[2]75
[242]76typedef struct
77{
[551]78 USHORT size;
79 USHORT changed;
80 BOOL nounwriteable;
81 CHAR szCurrentPath[CCHMAXPATH];
82 CHAR *szReturnPath;
83}
84WALKER;
[2]85
[1214]86static MRESULT EXPENTRY WalkTwoDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
87static VOID load_setups(VOID);
88static BOOL remove_ldir(PSZ path);
89
90// Data definitions
91#pragma data_seg(DATA1)
92
93static PSZ pszSrcFile = __FILE__;
[242]94static CHAR WalkFont[CCHMAXPATH] = "";
[2]95static ULONG WalkFontSize = sizeof(WalkFont);
96
[787]97/**
98 * States names management
99 */
100
101static BOOL fSetupsLoaded;
102static LINKDIRS *pFirstSetup;
103static const PSZ pszLastSetups = "LastSetups";
[907]104// 18 Aug 07 SHL fixme to stop supporting old style 1 year from now?
[787]105static const ULONG ulOldSetupsBytes = 100 * 13; // Prior to 3.0.7
106
[1214]107#pragma data_seg(GLOBAL1)
108BOOL fUdirsChanged;
109BOOL loadedudirs;
110
111#pragma data_seg(GLOBAL2)
112LINKDIRS *ldirhead;
113LINKDIRS *udirhead;
114
[787]115/**
116 * Fill States drop down list with known state names
117 */
118
119VOID fill_setups_list(VOID)
[242]120{
[787]121 WinSendMsg(hwndStatelist, LM_DELETEALL, MPVOID, MPVOID);
122 if (fUserComboBox) {
123 LINKDIRS *pld;
124 load_setups();
125 for (pld = pFirstSetup; pld; pld = pld->next) {
126 WinSendMsg(hwndStatelist,
127 LM_INSERTITEM,
128 MPFROM2SHORT(LIT_SORTASCENDING, 0),
129 MPFROMP(pld->path));
130 }
[1498]131 WinSetWindowText(hwndStatelist, (CHAR *) GetPString(IDS_STATETEXT));
[787]132 }
133}
[2]134
[787]135/**
136 * Lookup setup and do requested action
137 * @param - action, Support old/new style storage method
138 * @return 1 if found and action OK, 0 if not found and action OK, -1 if error during action
139 */
140
141#define LS_FIND 0
142#define LS_ADD 1
143#define LS_DELETE 2
144
[1394]145static INT lookup_setup(PCSZ name, UINT action)
[787]146{
147 LINKDIRS *pld;
148 LINKDIRS *pldLast = NULL;
149
150 if (!name || !*name) {
[1398]151 Runtime_Error(pszSrcFile, __LINE__, NULL);
[787]152 return -1;
153 }
154
155 load_setups();
156
157 for (pld = pFirstSetup; pld; pld = pld->next) {
158 if (!stricmp(pld->path, name)) {
159 if (action == LS_DELETE) {
160 if (pldLast)
161 pldLast->next = pld->next;
162 else
163 pFirstSetup = pld->next;
[1009]164 xfree(pld->path, pszSrcFile, __LINE__);
[1039]165 free(pld);
[787]166 }
167 return 1; // Found or added
168 }
169 pldLast = pld; // In case deleting
170 } // for
171
172 // Not found
173 if (action == LS_ADD) {
174 pld = xmalloc(sizeof(LINKDIRS), pszSrcFile, __LINE__);
175 if (!pld)
176 return -1;
177 pld->path = xstrdup(name, pszSrcFile, __LINE__);
178 if (!pld->path) {
[1039]179 free(pld);
[787]180 return -1;
181 }
182 // Insert at front of list - drop down will sort
183 pld->next = pFirstSetup;
184 pFirstSetup = pld;
185 return 0;
186 }
187
188 return FALSE; // Not found
[2]189}
190
[787]191/**
192 * Load state names from ini
193 * Support old/new style storage method
194 */
195
196VOID load_setups(VOID)
[242]197{
[787]198 ULONG ulDataBytes;
199 ULONG l;
200 PSZ pszBuf;
201 PSZ psz;
202 LINKDIRS *pld;
203
204 if (fSetupsLoaded)
[551]205 return;
[787]206
[1505]207 if (!PrfQueryProfileSize(fmprof, FM3Str, pszLastSetups, &ulDataBytes)) {
[787]208 // fixme to use generic hab
209 ERRORID eid = WinGetLastError((HAB)0);
210 if ((eid & 0xffff) != PMERR_NOT_IN_IDX) {
[789]211 // Get error info back
[1505]212 PrfQueryProfileSize(fmprof, FM3Str, pszLastSetups, &ulDataBytes);
[1398]213 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, PCSZ_PRFQUERYPROFILESIZE);
[787]214 }
[789]215 else
216 fSetupsLoaded = TRUE; // Nothing saved
217 return;
[787]218 }
219
220 if (ulDataBytes == 0) {
[1398]221 Runtime_Error(pszSrcFile, __LINE__, PCSZ_PRFQUERYPROFILESIZE);
[787]222 return;
223 }
224
225 pszBuf = xmalloc(ulDataBytes + 1, pszSrcFile, __LINE__); // One extra for end marker
226 if (!pszBuf)
227 return;
228 l = ulDataBytes;
[1505]229 if (!PrfQueryProfileData(fmprof, FM3Str, pszLastSetups, pszBuf, &l)) {
[1398]230 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, PCSZ_PRFQUERYPROFILEDATA);
[1039]231 free(pszBuf);
[787]232 return;
233 }
234
235 if (ulDataBytes != l) {
236 Runtime_Error(pszSrcFile, __LINE__, "PrfQueryProfileData reported %u expected %u", l, ulDataBytes);
[1039]237 free(pszBuf);
[787]238 return;
239 }
240
241 *(pszBuf + ulDataBytes) = 0; // Insert end marker
242
243 psz = pszBuf;
244 if (!*psz && ulDataBytes == ulOldSetupsBytes)
245 psz += 13; // Rarely used 1st fixed width entry prior to 3.0.7
246
247 while (*psz) {
248 pld = xmalloc(sizeof(LINKDIRS), pszSrcFile, __LINE__);
249 if (!pld) {
[1039]250 free(pszBuf);
[787]251 return;
252 }
[1078]253
254# ifdef FORTIFY
255 Fortify_SetOwner(pld, 1);
256 Fortify_SetScope(pld, 1);
257# endif
258
[787]259 pld->path = xstrdup(psz, pszSrcFile, __LINE__);
260 if (!pld->path) {
[1039]261 free(pszBuf);
262 free(pld);
[787]263 return;
264 }
265
[1078]266# ifdef FORTIFY
267 Fortify_SetOwner(pld->path, 1);
268 Fortify_SetScope(pld->path, 1);
269# endif
270
[787]271 // Insert at front of list - drop down will sort
272 pld->next = pFirstSetup;
273 pFirstSetup = pld;
274 if (ulDataBytes == ulOldSetupsBytes)
275 psz += 13; // Buffers fixed width prior to 3.0.7
276 else
277 psz += strlen(psz) + 1;
278 } // while
279
[1039]280 free(pszBuf);
[787]281
282 fSetupsLoaded = TRUE;
[2]283}
284
[787]285VOID save_setups(VOID)
[242]286{
[787]287 ULONG ulBufBytes;
288 ULONG ulFillBytes;
289 ULONG l;
290 PSZ pszBuf;
291 PSZ psz;
292 LINKDIRS *pld;
[2]293
[787]294 if (!fSetupsLoaded)
295 return;
296
297 ulBufBytes = 0;
298 for (pld = pFirstSetup; pld; pld = pld->next) {
299 ulBufBytes += strlen(pld->path) + 1;
300 } // for
301
302 if (!ulBufBytes)
303 pszBuf = NULL;
304 else {
305 // Ensure different than size prior to 3.0.7
306 ulFillBytes = ulBufBytes == ulOldSetupsBytes ? 1 : 0;
307 pszBuf = xmalloc(ulBufBytes + ulFillBytes, pszSrcFile, __LINE__);
308 if (!pszBuf)
309 return;
310
311 psz = pszBuf;
312 for (pld = pFirstSetup; pld; pld = pld->next) {
313 l = strlen(pld->path) + 1;
314 memcpy(psz, pld->path, l);
315 psz += l;
316 } // for
317 if (ulFillBytes)
318 *psz = 0;
[551]319 }
[787]320
321 if (!PrfWriteProfileData(fmprof,
[1505]322 FM3Str,
[787]323 pszLastSetups, pszBuf, ulBufBytes)) {
324 ERRORID eid = WinGetLastError((HAB)0);
325 if ((eid & 0xffff) != PMERR_NOT_IN_IDX)
326 Runtime_Error(pszSrcFile, __LINE__, "PrfWriteProfileData returned %u", eid);
327 }
328
329 // Delete obsolete INI entry
[1505]330 PrfWriteProfileData(fmprof, FM3Str, "LastSetup", NULL, 0);
[2]331}
332
[787]333/**
334 * Add named state to setups list
335 * @return same as lookup_setup
336 */
337
[1394]338INT add_setup(PCSZ name)
[242]339{
[787]340 return lookup_setup(name, LS_ADD);
341}
[2]342
[787]343/**
344 * Delete named state from setups list
345 * @return same as lookup_setup
346 */
347
348INT remove_setup(PSZ name)
349{
350 return lookup_setup(name, LS_DELETE);
[2]351}
352
[1077]353#ifdef FORTIFY
354
355VOID free_setups(VOID)
356{
357 LINKDIRS *pld = pFirstSetup;
358 while (pld) {
359 LINKDIRS *next = pld->next;
360 free(pld->path);
361 free(pld);
362 pld = next;
363 }
364 pFirstSetup = NULL;
365}
366
367#endif // FORTIFY
368
[242]369VOID load_udirs(VOID)
370{
[1673]371 // load linked list of user directories from USERDIRS.DAT file
[2]372
[551]373 FILE *fp;
374 LINKDIRS *info;
375 LINKDIRS *last = NULL;
376 CHAR s[CCHMAXPATH + 24];
[1544]377 CHAR *moder = "r";
[2]378
[1034]379 if (udirhead)
380 free_udirs();
[551]381 loadedudirs = TRUE;
382 fUdirsChanged = FALSE;
[1398]383 BldFullPathName(s, pFM2SaveDirectory, PCSZ_USERDIRSDAT);
[1544]384 fp = xfsopen(s, moder, SH_DENYWR, pszSrcFile, __LINE__, TRUE);
[551]385 if (fp) {
386 while (!feof(fp)) {
387 if (!xfgets(s, CCHMAXPATH + 24, fp, pszSrcFile, __LINE__))
388 break;
389 s[CCHMAXPATH] = 0;
390 bstripcr(s);
391 if (*s && *s != ';') {
392 info = xmalloc(sizeof(LINKDIRS), pszSrcFile, __LINE__);
[1078]393# ifdef FORTIFY
394 Fortify_SetOwner(info, 1);
395 Fortify_SetScope(info, 1);
396# endif
[551]397 if (info) {
398 info->path = xstrdup(s, pszSrcFile, __LINE__);
399 if (!info->path)
[1039]400 free(info);
[551]401 else {
[1078]402# ifdef FORTIFY
403 Fortify_SetOwner(info->path, 1);
404 Fortify_SetScope(info->path, 1);
405# endif
[551]406 info->next = NULL;
407 if (!udirhead)
408 udirhead = info;
409 else
410 last->next = info;
411 last = info;
412 }
[242]413 }
[551]414 }
[2]415 }
[551]416 fclose(fp);
417 }
[2]418}
419
[242]420VOID save_udirs(VOID)
421{
[551]422 FILE *fp;
423 LINKDIRS *info;
424 CHAR s[CCHMAXPATH + 14];
[1544]425 CHAR *modew = "w";
[2]426
[551]427 if (loadedudirs) {
428 fUdirsChanged = FALSE;
429 if (udirhead) {
[1398]430 BldFullPathName(s, pFM2SaveDirectory, PCSZ_USERDIRSDAT);
[1118]431 if (CheckDriveSpaceAvail(s, ullDATFileSpaceNeeded, 1) == 2)
[1394]432 return; //already gave error msg
[1544]433 fp = xfopen(s, modew, pszSrcFile, __LINE__, FALSE);
[551]434 if (fp) {
435 fputs(GetPString(IDS_USERDEFDIRSTEXT), fp);
436 info = udirhead;
437 while (info) {
438 fprintf(fp, "%0.*s\n", CCHMAXPATH, info->path);
439 info = info->next;
[242]440 }
[551]441 fclose(fp);
442 }
[2]443 }
[551]444 }
[2]445}
446
[617]447/**
448 * Add path to user directory list or last used directory list.
449 * Callers need to check fUdirsChanged to know if user dirs change occured.
450 * Callers need to check return code to know if last dirs change occured.
451 * @param userdirs TRUE to process user directory list. Otherwise last used list.
452 * @return TRUE if added, FALSE if already in list or error.
453 */
[259]454
[617]455BOOL add_udir(BOOL userdirs, CHAR *inpath)
[242]456{
[551]457 CHAR path[CCHMAXPATH];
458 LINKDIRS *info;
459 LINKDIRS *last = NULL;
460 LINKDIRS *temp;
[2]461
[551]462 if (inpath && *inpath) {
463 if (DosQueryPathInfo(inpath, FIL_QUERYFULLNAME, path, sizeof(path)))
464 strcpy(path, inpath);
465 if (!userdirs && IsRoot(path))
466 return FALSE;
467 if (IsFullName(path)) {
468 if (!loadedudirs)
469 load_udirs();
470 // Search user dir list first unless doing last dirs
471 info = userdirs ? udirhead : ldirhead;
472 while (info) {
473 if (!stricmp(info->path, path))
474 return FALSE; // Already in list
475 last = info; // Remember append to location
476 info = info->next;
477 }
478 // Search last dir list unless doing just last dirs
479 if (!userdirs) {
480 info = udirhead;
481 while (info) {
482 if (!stricmp(info->path, path))
[242]483 return FALSE;
[551]484 info = info->next;
485 }
486 }
487 else {
[1673]488 // if adding manual directory, remove from auto list if present
[551]489 info = ldirhead;
490 temp = NULL;
491 while (info) {
492 if (!stricmp(info->path, path)) {
493 if (temp)
494 temp->next = info->next;
[242]495 else
[551]496 ldirhead = info->next;
[1009]497 xfree(info->path, pszSrcFile, __LINE__);
[1039]498 free(info);
[551]499 break;
500 }
501 temp = info;
502 info = info->next;
[242]503 }
[551]504 }
505 // Append entry to end of user dirs list
506 info = xmalloc(sizeof(LINKDIRS), pszSrcFile, __LINE__);
507 if (info) {
[1078]508# ifdef FORTIFY
509 Fortify_SetScope(info, 1);
510# endif
[551]511 info->path = xstrdup(path, pszSrcFile, __LINE__);
512 if (!info->path)
[1039]513 free(info);
[551]514 else {
[1078]515# ifdef FORTIFY
516 Fortify_SetScope(info->path, 1);
517# endif
[551]518 info->next = NULL;
519 if (userdirs) {
520 fUdirsChanged = TRUE;
521 if (!udirhead)
522 udirhead = info;
523 else
524 last->next = info;
525 }
526 else {
527 if (!ldirhead)
528 ldirhead = info;
529 else
530 last->next = info;
[1077]531 }
[551]532 return TRUE;
533 }
534 }
[2]535 }
[551]536 }
537 return FALSE;
[2]538}
539
[259]540//=== remove_udir - remove path from user dir list or last directory list ===
541
[242]542BOOL remove_udir(CHAR * path)
543{
[551]544 LINKDIRS *info;
545 LINKDIRS *last = NULL;
[2]546
[551]547 if (path && *path) {
548 if (!loadedudirs)
549 load_udirs();
550 info = udirhead;
551 while (info) {
552 if (!stricmp(info->path, path)) {
553 if (last)
554 last->next = info->next;
555 else
556 udirhead = info->next;
[1009]557 xfree(info->path, pszSrcFile, __LINE__);
[1039]558 free(info);
[551]559 fUdirsChanged = TRUE;
560 return TRUE;
561 }
562 last = info;
563 info = info->next;
564 }
[259]565
[551]566 info = ldirhead;
567 last = NULL;
568 while (info) {
569 if (!stricmp(info->path, path)) {
570 if (last)
571 last->next = info->next;
572 else
573 ldirhead = info->next;
[1009]574 xfree(info->path, pszSrcFile, __LINE__);
[1039]575 free(info);
[551]576 return TRUE;
577 }
578 last = info;
579 info = info->next;
[2]580 }
[551]581 }
582 return FALSE;
[2]583}
584
[242]585BOOL remove_ldir(CHAR * path)
586{
[551]587 LINKDIRS *info;
588 LINKDIRS *last = NULL;
[2]589
[551]590 if (path && *path) {
591 info = ldirhead;
592 while (info) {
593 if (!stricmp(info->path, path)) {
594 if (last)
595 last->next = info->next;
596 else
597 ldirhead = info->next;
[1009]598 xfree(info->path, pszSrcFile, __LINE__);
[1039]599 free(info);
[551]600 return TRUE;
601 }
602 last = info;
603 info = info->next;
[2]604 }
[551]605 }
606 return FALSE;
[2]607}
608
[1082]609# ifdef FORTIFY
610
[1029]611VOID free_ldir(VOID)
612{
613 LINKDIRS *info, *next;
614
615 info = ldirhead;
616 while (info) {
617 next = info->next;
618 xfree(info->path, pszSrcFile, __LINE__);
[1039]619 free(info);
[1029]620 info = next;
621 }
622 ldirhead = NULL;
623}
624
[1082]625# endif
626
[1034]627VOID free_udirs(VOID)
[1029]628{
629 LINKDIRS *info, *next;
630
631 info = udirhead;
632 while (info) {
633 next = info->next;
634 xfree(info->path, pszSrcFile, __LINE__);
[1039]635 free(info);
[1029]636 info = next;
637 }
638 udirhead = NULL;
639}
640
[551]641VOID FillPathListBox(HWND hwnd, HWND hwnddrive, HWND hwnddir, CHAR * pszPath,
[242]642 BOOL nounwriteable)
643{
[1673]644 /**
[551]645 * this function fills one or two list boxes with drive and directory
646 * information showing all available drives and all directories off of
647 * the directory represented by path. This works independently of the
648 * current directory.
649 */
[2]650
[551]651 CHAR szDrive[] = " :", szTemp[1032];
[847]652 FILEFINDBUF3 findbuf;
[551]653 HDIR hDir = HDIR_CREATE;
654 SHORT sDrive;
[766]655 ULONG ulDriveNum, ulSearchCount = 1, ulDriveMap;
[2]656
[551]657 DosError(FERR_DISABLEHARDERR);
658 DosQCurDisk(&ulDriveNum, &ulDriveMap);
659 if (hwnddrive)
660 WinSendMsg(hwnddrive, LM_DELETEALL, MPVOID, MPVOID);
661 if (hwnddrive != hwnddir && hwnddir)
662 WinSendMsg(hwnddir, LM_DELETEALL, MPVOID, MPVOID);
[2]663
[551]664 if (hwnddrive) {
665 // Fill drive listbox
666 for (sDrive = 0; sDrive < 26; sDrive++) {
[766]667 if (ulDriveMap & (1 << sDrive)) {
[551]668 *szDrive = (CHAR) (sDrive + 'A');
669 if ((!nounwriteable || !(driveflags[sDrive] & DRIVE_NOTWRITEABLE)) &&
670 !(driveflags[sDrive] & (DRIVE_IGNORE | DRIVE_INVALID)))
671 WinSendMsg(hwnddrive, LM_INSERTITEM, MPFROM2SHORT(LIT_END, 0),
672 MPFROMP(szDrive));
673 }
[2]674 }
[551]675 if (hwnddrive != hwnddir && pszPath && isalpha(*pszPath)
676 && pszPath[1] == ':') {
677 *szDrive = toupper(*pszPath);
678 WinSetWindowText(hwnddrive, szDrive);
679 }
680 }
[2]681
[551]682 if (hwnddir) {
683 // Fill directory listbox
684 sprintf(szTemp,
685 "%s%s*",
[1438]686 pszPath, (pszPath[strlen(pszPath) - 1] == '\\') ? NullStr : PCSZ_BACKSLASH);
[551]687 DosError(FERR_DISABLEHARDERR);
[847]688 if (!DosFindFirst(szTemp,
689 &hDir,
690 FILE_DIRECTORY | MUST_HAVE_DIRECTORY |
691 FILE_READONLY | FILE_ARCHIVED | FILE_SYSTEM |
692 FILE_HIDDEN,
693 &findbuf,
694 sizeof(FILEFINDBUF3), &ulSearchCount, FIL_STANDARD)) {
[551]695 do {
696 if (findbuf.attrFile & FILE_DIRECTORY) {
697 // Skip .. unless full path supplied
698 if (strcmp(findbuf.achName, "..") ||
699 strlen(pszPath) > 3 || pszPath[1] != ':') {
700 // Skip . allow ..
701 if (findbuf.achName[0] != '.' || findbuf.achName[1]) {
702 WinSendMsg(hwnddir,
703 LM_INSERTITEM,
704 MPFROM2SHORT(LIT_SORTASCENDING, 0),
705 MPFROMP(findbuf.achName));
706 }
707 }
[242]708 }
[766]709 ulSearchCount = 1;
[847]710 } while (!DosFindNext(hDir,
711 &findbuf, sizeof(FILEFINDBUF3), &ulSearchCount));
[551]712 DosFindClose(hDir);
[2]713 }
[551]714 DosError(FERR_DISABLEHARDERR);
715 }
[2]716}
717
[242]718MRESULT EXPENTRY TextSubProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
719{
[574]720 PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
[2]721
[551]722 switch (msg) {
723 case WM_CHAR:
724 if (SHORT1FROMMP(mp1) & KC_KEYUP) {
725 if ((SHORT1FROMMP(mp1) & KC_VIRTUALKEY) &&
726 (SHORT1FROMMP(mp2) & 255) == '\r')
727 PostMsg(WinQueryWindow(hwnd, QW_PARENT), WM_COMMAND,
728 MPFROM2SHORT(DID_OK, 0), MPVOID);
[242]729 }
[551]730 break;
731 }
732 return oldproc(hwnd, msg, mp1, mp2);
[2]733}
734
[242]735MRESULT EXPENTRY WalkDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
736{
[551]737 WALKER *wa;
738 CHAR szBuff[CCHMAXPATH + 1], szBuffer[CCHMAXPATH + 1], *p;
739 SHORT sSelect;
[1673]740 static BOOL okay; // avoid combobox selecting as filled
[551]741 static CHAR lastdir[CCHMAXPATH + 1];
[2]742
[551]743 switch (msg) {
744 case UM_SETUP2:
745 case WM_INITDLG:
746 okay = FALSE;
747 *lastdir = 0;
748 if (!mp2) {
[1398]749 Runtime_Error(pszSrcFile, __LINE__, NULL);
[551]750 WinDismissDlg(hwnd, 0);
751 break;
752 }
753 wa = xmallocz(sizeof(WALKER), pszSrcFile, __LINE__);
754 if (!wa) {
755 WinDismissDlg(hwnd, 0);
756 break;
757 }
758 wa->size = (USHORT) sizeof(WALKER);
[574]759 WinSetWindowPtr(hwnd, QWL_USER, (PVOID) wa);
[1009]760 wa->szReturnPath = (CHAR *)mp2;
[242]761 {
[551]762 PFNWP oldproc;
[2]763
[551]764 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, WALK_PATH),
765 (PFNWP) TextSubProc);
766 if (oldproc)
767 WinSetWindowPtr(WinWindowFromID(hwnd, WALK_PATH),
768 QWL_USER, (PVOID) oldproc);
769 WinSendDlgItemMsg(WinWindowFromID(hwnd, WALK_RECENT),
770 CBID_EDIT,
771 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
772 WinSendDlgItemMsg(WinWindowFromID(hwnd, WALK_RECENT),
773 CBID_EDIT,
774 EM_SETREADONLY, MPFROM2SHORT(TRUE, 0), MPVOID);
775 }
[939]776 {
777 SWP swp;
778 ULONG size = sizeof(SWP);
779
[1505]780 PrfQueryProfileData(fmprof, FM3Str, "WalkDir.Position", (PVOID) &swp, &size);
[1394]781 swp.fl &= ~SWP_SIZE; // 04 Feb 09 SHL ignore saved size
[939]782 WinSetWindowPos(hwnd,
[1077]783 HWND_TOP,
784 swp.x,
785 swp.y,
786 swp.cx,
787 swp.cy,
788 swp.fl);
[939]789 }
[551]790 PosOverOkay(hwnd);
791 if (msg == UM_SETUP2)
792 wa->nounwriteable = FALSE;
793 else
794 wa->nounwriteable = TRUE;
795 if (!*wa->szReturnPath)
[1104]796 strcpy(wa->szCurrentPath, pFM2SaveDirectory);
[551]797 else {
798 strcpy(wa->szCurrentPath, wa->szReturnPath);
799 MakeFullName(wa->szCurrentPath);
800 }
801 if (wa->nounwriteable &&
802 (driveflags[toupper(*wa->szCurrentPath) - 'A'] &
803 DRIVE_NOTWRITEABLE)) {
[2]804
[551]805 ULONG bd;
[2]806
[551]807 strcpy(wa->szCurrentPath, "C:\\");
808 if (DosQuerySysInfo(QSV_BOOT_DRIVE,
809 QSV_BOOT_DRIVE,
810 (PVOID) & bd, (ULONG) sizeof(ULONG)))
[766]811 bd = 3;
[551]812 *wa->szCurrentPath = (CHAR) bd + '@';
813 }
814 WinSendDlgItemMsg(hwnd,
815 WALK_PATH,
816 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
817 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath);
818 if (!loadedudirs)
819 load_udirs();
[1673]820 { // fill user list box
[551]821 ULONG ulDriveNum, ulDriveMap;
822 ULONG ulSearchCount;
[847]823 FILEFINDBUF3 findbuf;
[551]824 HDIR hDir;
825 APIRET rc;
826 LINKDIRS *info, *temp;
[2]827
[551]828 DosError(FERR_DISABLEHARDERR);
829 DosQCurDisk(&ulDriveNum, &ulDriveMap);
830 info = udirhead;
831 while (info) {
832 if (IsFullName(info->path) &&
833 !(driveflags[toupper(*info->path) - 'A'] &
834 (DRIVE_IGNORE | DRIVE_INVALID))) {
835 DosError(FERR_DISABLEHARDERR);
836 hDir = HDIR_CREATE;
[766]837 ulSearchCount = 1;
[551]838 if (!IsRoot(info->path))
[847]839 rc = DosFindFirst(info->path, &hDir, FILE_DIRECTORY |
840 MUST_HAVE_DIRECTORY | FILE_READONLY |
841 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
842 &findbuf, sizeof(FILEFINDBUF3),
843 &ulSearchCount, FIL_STANDARD);
[551]844 else {
845 rc = 0;
846 findbuf.attrFile = FILE_DIRECTORY;
847 }
848 if (!rc) {
849 if (!IsRoot(info->path))
850 DosFindClose(hDir);
851 if (findbuf.attrFile & FILE_DIRECTORY)
852 WinSendDlgItemMsg(hwnd, WALK_USERLIST, LM_INSERTITEM,
853 MPFROM2SHORT(LIT_SORTASCENDING, 0),
854 MPFROMP(info->path));
855 else {
856 temp = info->next;
857 remove_udir(info->path);
858 info = temp;
859 continue;
[242]860 }
[551]861 }
[766]862 else if (!(ulDriveMap & (1 << (toupper(*info->path) - 'A')))) {
[551]863 temp = info->next;
864 remove_udir(info->path);
865 info = temp;
866 continue;
867 }
868 }
869 info = info->next;
870 }
871 info = ldirhead;
872 while (info) {
873 if (IsFullName(info->path) &&
874 !(driveflags[toupper(*info->path) - 'A'] &
875 (DRIVE_IGNORE | DRIVE_INVALID))) {
876 DosError(FERR_DISABLEHARDERR);
877 hDir = HDIR_CREATE;
[766]878 ulSearchCount = 1;
[551]879 if (!IsRoot(info->path))
[847]880 rc = DosFindFirst(info->path, &hDir, FILE_DIRECTORY |
881 MUST_HAVE_DIRECTORY | FILE_READONLY |
882 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
883 &findbuf, sizeof(FILEFINDBUF3),
884 &ulSearchCount, FIL_STANDARD);
[551]885 else {
886 rc = 0;
887 findbuf.attrFile = FILE_DIRECTORY;
888 }
889 if (!rc) {
890 if (!IsRoot(info->path))
891 DosFindClose(hDir);
892 if (findbuf.attrFile & FILE_DIRECTORY)
893 WinSendDlgItemMsg(hwnd, WALK_RECENT, LM_INSERTITEM,
894 MPFROM2SHORT(LIT_SORTASCENDING, 0),
895 MPFROMP(info->path));
896 else {
897 temp = info->next;
898 remove_ldir(info->path);
899 info = temp;
900 continue;
[242]901 }
[551]902 WinSetDlgItemText(hwnd, WALK_RECENT,
[1498]903 (CHAR *) GetPString(IDS_WALKRECENTDIRSTEXT));
[551]904 }
[766]905 else if (!(ulDriveMap & (1 << (toupper(*info->path) - 'A')))) {
[551]906 temp = info->next;
907 remove_ldir(info->path);
908 info = temp;
909 continue;
910 }
[242]911 }
[551]912 info = info->next;
913 }
914 }
915 FillPathListBox(hwnd,
916 WinWindowFromID(hwnd, WALK_DRIVELIST),
917 WinWindowFromID(hwnd, WALK_DIRLIST),
918 wa->szCurrentPath, wa->nounwriteable);
919 if (!PostMsg(hwnd, UM_SETUP4, MPVOID, MPVOID))
920 okay = TRUE;
921 {
922 MRESULT ret;
[2]923
[551]924 ret = WinDefDlgProc(hwnd, WM_INITDLG, mp1, mp2);
925 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
926 WinInvalidateRect(WinWindowFromID(hwnd, WALK_PATH), NULL, TRUE);
927 return ret;
928 }
[2]929
[551]930 case UM_SETUP4:
931 okay = TRUE;
932 return 0;
[2]933
[551]934 case WM_ADJUSTWINDOWPOS:
935 PostMsg(hwnd, UM_SETDIR, MPVOID, MPVOID);
936 break;
[2]937
[551]938 case UM_SETDIR:
939 PaintRecessedWindow(WinWindowFromID(hwnd, WALK_HELP), (HPS) 0, FALSE,
940 TRUE);
941 return 0;
[2]942
[551]943 case WM_PRESPARAMCHANGED:
944 {
945 ULONG AttrFound, AttrValue[64], cbRetLen;
[2]946
[551]947 cbRetLen = WinQueryPresParam(hwnd, (ULONG) mp1, 0, &AttrFound,
948 (ULONG) sizeof(AttrValue), &AttrValue, 0);
949 if (cbRetLen) {
950 switch (AttrFound) {
951 case PP_FONTNAMESIZE:
952 PrfWriteProfileData(fmprof,
953 appname,
954 "WalkFont", (PVOID) AttrValue, cbRetLen);
955 *WalkFont = 0;
956 WalkFontSize = sizeof(WalkFont);
957 WinInvalidateRect(WinWindowFromID(hwnd, WALK_PATH), NULL, TRUE);
958 break;
[242]959 }
[551]960 }
961 }
962 break;
[2]963
[551]964 case UM_SETUP3:
965 save_udirs();
966 if (hwndMain)
967 PostMsg(hwndMain, UM_FILLUSERLIST, MPVOID, MPVOID);
968 return 0;
[2]969
[551]970 case UM_SETUP:
971 {
972 INT x;
973 USHORT id[] = { WALK_PATH, WALK_DIRLIST, WALK_USERLIST,
974 WALK_RECENT, 0
975 };
[2]976
[551]977 if (*WalkFont ||
978 (PrfQueryProfileData(fmprof,
979 appname,
980 "WalkFont",
981 (PVOID) WalkFont,
982 &WalkFontSize) && WalkFontSize)) {
983 for (x = 0; id[x]; x++)
984 WinSetPresParam(WinWindowFromID(hwnd, id[x]),
985 PP_FONTNAMESIZE, WalkFontSize, (PVOID) WalkFont);
986 }
987 }
988 return 0;
[2]989
[551]990 case UM_CONTROL:
991 case WM_CONTROL:
[574]992 wa = WinQueryWindowPtr(hwnd, QWL_USER);
[551]993 if (SHORT1FROMMP(mp1) == WALK_DRIVELIST ||
994 SHORT1FROMMP(mp1) == WALK_DIRLIST ||
995 SHORT1FROMMP(mp1) == WALK_USERLIST ||
996 SHORT1FROMMP(mp1) == WALK_RECENT) {
997 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
998 SHORT1FROMMP(mp1),
999 LM_QUERYSELECTION, MPVOID, MPVOID);
1000 *szBuffer = 0;
1001 if (sSelect >= 0)
1002 WinSendDlgItemMsg(hwnd, SHORT1FROMMP(mp1), LM_QUERYITEMTEXT,
1003 MPFROM2SHORT(sSelect, CCHMAXPATH),
1004 MPFROMP(szBuffer));
1005 }
1006 switch (SHORT1FROMMP(mp1)) {
1007 case WALK_PATH:
1008 if (SHORT2FROMMP(mp1) == EN_SETFOCUS)
[1498]1009 WinSetDlgItemText(hwnd, WALK_HELP, (CHAR *) GetPString(IDS_WALKCURRDIRTEXT));
[551]1010 else if (SHORT2FROMMP(mp1) == EN_KILLFOCUS)
1011 WinSetDlgItemText(hwnd, WALK_HELP,
[1498]1012 (CHAR *) GetPString(IDS_WALKDEFAULTHELPTEXT));
[551]1013 break;
[2]1014
[551]1015 case WALK_RECENT:
1016 if (okay && SHORT2FROMMP(mp1) == CBN_LBSELECT) {
[2]1017
[551]1018 ULONG ulSearchCount;
[847]1019 FILEFINDBUF3 findbuf;
[551]1020 HDIR hDir;
1021 APIRET rc;
[2]1022
[551]1023 // *szBuffer = 0;
1024 // WinQueryDlgItemText(hwnd,WALK_RECENT,CCHMAXPATH,szBuffer);
1025 if (!*szBuffer)
1026 break;
1027 DosError(FERR_DISABLEHARDERR);
1028 hDir = HDIR_CREATE;
[766]1029 ulSearchCount = 1;
[551]1030 if (!IsRoot(szBuffer)) {
[847]1031 rc = DosFindFirst(szBuffer, &hDir, FILE_DIRECTORY |
1032 MUST_HAVE_DIRECTORY | FILE_READONLY |
1033 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
1034 &findbuf, sizeof(FILEFINDBUF3),
1035 &ulSearchCount, FIL_STANDARD);
[551]1036 if (!rc)
1037 DosFindClose(hDir);
1038 }
1039 else {
1040 findbuf.attrFile = FILE_DIRECTORY;
1041 rc = 0;
1042 }
1043 if (rc)
1044 Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__,
[1400]1045 "DosFindFirst");
[551]1046 else if (~findbuf.attrFile & FILE_DIRECTORY)
1047 Runtime_Error(pszSrcFile, __LINE__, "not a directory");
1048 else {
1049 strcpy(wa->szCurrentPath, szBuffer);
1050 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath);
1051 WinSetDlgItemText(hwnd, WALK_RECENT, wa->szCurrentPath);
1052 FillPathListBox(hwnd,
1053 WinWindowFromID(hwnd, WALK_DRIVELIST),
1054 WinWindowFromID(hwnd, WALK_DIRLIST),
1055 wa->szCurrentPath, FALSE);
1056 }
1057 }
1058 else if (SHORT2FROMMP(mp1) == CBN_ENTER)
1059 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
1060 else if (SHORT2FROMMP(mp1) == CBN_SHOWLIST)
1061 WinSetDlgItemText(hwnd, WALK_HELP,
[1498]1062 (CHAR *) GetPString(IDS_WALKRECENTDIRSHELPTEXT));
[551]1063 break;
[2]1064
[551]1065 case WALK_USERLIST:
1066 if (okay && *szBuffer && SHORT2FROMMP(mp1) == LN_SELECT) {
[2]1067
[551]1068 ULONG ulSearchCount;
[847]1069 FILEFINDBUF3 findbuf;
[551]1070 HDIR hDir;
1071 APIRET rc;
[2]1072
[1471]1073 // 06 Oct 09 SHL Ctrl-select selects, but suppresses action
1074 SetShiftState();
1075 if ((shiftstate & (KC_CTRL | KC_SHIFT | KC_ALT)) == KC_CTRL)
1076 break;
[551]1077 DosError(FERR_DISABLEHARDERR);
1078 hDir = HDIR_CREATE;
[766]1079 ulSearchCount = 1;
[551]1080 if (!IsRoot(szBuffer)) {
[847]1081 rc = DosFindFirst(szBuffer,
1082 &hDir,
1083 FILE_DIRECTORY |
1084 MUST_HAVE_DIRECTORY | FILE_READONLY |
1085 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
1086 &findbuf,
1087 sizeof(FILEFINDBUF3),
1088 &ulSearchCount, FIL_STANDARD);
[551]1089 if (!rc)
1090 DosFindClose(hDir);
1091 }
1092 else {
1093 findbuf.attrFile = FILE_DIRECTORY;
1094 rc = 0;
1095 }
1096 if (rc)
1097 Dos_Error(MB_CANCEL, rc, hwnd, pszSrcFile, __LINE__,
[1400]1098 "DosFindFirst");
[551]1099 else if (~findbuf.attrFile & FILE_DIRECTORY)
1100 Runtime_Error(pszSrcFile, __LINE__, "not a directory");
1101 else {
1102 strcpy(wa->szCurrentPath, szBuffer);
1103 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath);
1104 FillPathListBox(hwnd,
1105 WinWindowFromID(hwnd, WALK_DRIVELIST),
1106 WinWindowFromID(hwnd, WALK_DIRLIST),
1107 wa->szCurrentPath, FALSE);
1108 }
1109 }
1110 else if (SHORT2FROMMP(mp1) == LN_ENTER)
1111 PostMsg(hwnd, WM_COMMAND, MPFROM2SHORT(DID_OK, 0), MPVOID);
1112 else if (SHORT2FROMMP(mp1) == LN_SETFOCUS)
1113 WinSetDlgItemText(hwnd,
[1498]1114 WALK_HELP, (CHAR *) GetPString(IDS_WALKUSERDIRSHELPTEXT));
[551]1115 else if (SHORT2FROMMP(mp1) == LN_KILLFOCUS)
1116 WinSetDlgItemText(hwnd,
[1498]1117 WALK_HELP, (CHAR *) GetPString(IDS_WALKDEFAULTHELPTEXT));
[551]1118 break;
[2]1119
[551]1120 case WALK_DRIVELIST:
1121 if (okay && *szBuffer && SHORT2FROMMP(mp1) == LN_ENTER) {
[2]1122
[551]1123 ULONG ulDirLen = CCHMAXPATH;
1124 APIRET rc;
[2]1125
[1321]1126 rc = DosQCurDir(toupper(*szBuffer) - '@', (PBYTE)&szBuff[3], &ulDirLen);
[551]1127 if (!rc) {
1128 strcpy(wa->szCurrentPath, "C:\\");
1129 *wa->szCurrentPath = toupper(*szBuffer);
1130 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath);
1131 FillPathListBox(hwnd,
1132 WinWindowFromID(hwnd, WALK_DRIVELIST),
1133 WinWindowFromID(hwnd, WALK_DIRLIST),
1134 wa->szCurrentPath, FALSE);
1135 }
1136 }
1137 else if (SHORT2FROMMP(mp1) == LN_SETFOCUS)
1138 WinSetDlgItemText(hwnd, WALK_HELP,
[1498]1139 (CHAR *) GetPString(IDS_WALKDRIVELISTHELPTEXT));
[551]1140 else if (SHORT2FROMMP(mp1) == LN_KILLFOCUS)
1141 WinSetDlgItemText(hwnd, WALK_HELP,
[1498]1142 (CHAR *) GetPString(IDS_WALKDEFAULTHELPTEXT));
[551]1143 break;
[2]1144
[551]1145 case WALK_DIRLIST:
1146 if (okay && SHORT2FROMMP(mp1) == LN_ENTER) {
[2]1147
[551]1148 ULONG ulSearchCount;
[847]1149 FILEFINDBUF3 findbuf;
[551]1150 HDIR hDir;
1151 APIRET rc;
[2]1152
[551]1153 bstrip(szBuffer);
1154 if (*szBuffer) {
[1438]1155 strcpy(szBuff, wa->szCurrentPath);
1156 AddBackslashToPath(szBuff);
1157 //if (szBuff[strlen(szBuff) - 1] != '\\')
1158 // strcat(szBuff, "\\");
[551]1159 strcat(szBuff, szBuffer);
1160 MakeFullName(szBuff);
1161 DosError(FERR_DISABLEHARDERR);
1162 hDir = HDIR_CREATE;
[766]1163 ulSearchCount = 1;
[551]1164 if (!IsRoot(szBuff)) {
[847]1165 rc = DosFindFirst(szBuff,
1166 &hDir,
1167 FILE_DIRECTORY |
1168 MUST_HAVE_DIRECTORY | FILE_READONLY |
1169 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
1170 &findbuf,
1171 sizeof(FILEFINDBUF3),
1172 &ulSearchCount, FIL_STANDARD);
[551]1173 if (!rc)
1174 DosFindClose(hDir);
1175 }
1176 else {
1177 findbuf.attrFile = FILE_DIRECTORY;
1178 rc = 0;
1179 }
1180 if (!rc && (findbuf.attrFile & FILE_DIRECTORY)) {
1181 strcpy(wa->szCurrentPath, szBuff);
1182 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath);
1183 FillPathListBox(hwnd,
1184 WinWindowFromID(hwnd, WALK_DRIVELIST),
1185 WinWindowFromID(hwnd, WALK_DIRLIST),
1186 wa->szCurrentPath, FALSE);
1187 }
[242]1188 }
[551]1189 }
1190 else if (SHORT2FROMMP(mp1) == LN_SETFOCUS)
1191 WinSetDlgItemText(hwnd, WALK_HELP,
[1498]1192 (CHAR *) GetPString(IDS_WALKDIRLISTHELPTEXT));
[551]1193 else if (SHORT2FROMMP(mp1) == LN_KILLFOCUS)
1194 WinSetDlgItemText(hwnd, WALK_HELP,
[1498]1195 (CHAR *) GetPString(IDS_WALKDEFAULTHELPTEXT));
[551]1196 break;
1197 }
1198 return 0;
1199
1200 case WM_COMMAND:
[574]1201 wa = WinQueryWindowPtr(hwnd, QWL_USER);
[551]1202 if (!wa)
1203 WinDismissDlg(hwnd, 0);
1204 *szBuff = 0;
1205 WinQueryDlgItemText(hwnd, WALK_PATH, CCHMAXPATH, szBuff);
1206 bstrip(szBuff);
1207 while ((p = strchr(szBuff, '/')) != NULL)
1208 *p = '\\';
1209 while (strlen(szBuff) > 3 && szBuff[strlen(szBuff) - 1] == '\\')
1210 szBuff[strlen(szBuff) - 1] = 0;
1211 MakeFullName(szBuff);
[864]1212 if (*szBuff && stricmp(szBuff, wa->szCurrentPath) && SHORT1FROMMP(mp1) != DID_CANCEL) {
[551]1213 if (!SetDir(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT),
1214 QW_OWNER), hwnd, szBuff, 0))
1215 strcpy(wa->szCurrentPath, szBuff);
[865]1216 else
[242]1217 return 0;
[551]1218 }
1219 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath);
1220 switch (SHORT1FROMMP(mp1)) {
1221 case WALK_ADD:
1222 *szBuff = 0;
1223 WinQueryDlgItemText(hwnd, WALK_PATH, CCHMAXPATH, szBuff);
1224 bstrip(szBuff);
1225 while ((p = strchr(szBuff, '/')) != NULL)
1226 *p = '\\';
1227 if (*szBuff && !IsFile(szBuff)) {
1228 MakeFullName(szBuff);
[617]1229 add_udir(TRUE, szBuff);
1230 if (fUdirsChanged) {
[551]1231 WinSendDlgItemMsg(hwnd,
1232 WALK_USERLIST,
1233 LM_INSERTITEM,
1234 MPFROM2SHORT(LIT_SORTASCENDING, 0),
1235 MPFROMP(szBuff));
1236 wa->changed = 1;
1237 }
1238 }
1239 break;
[2]1240
[551]1241 case WALK_DELETE:
[1471]1242 // 07 Oct 09 SHL Delete current selection, like docs says
1243 sSelect = (SHORT)WinSendDlgItemMsg(hwnd,
1244 WALK_USERLIST,
1245 LM_QUERYSELECTION,
1246 MPFROMSHORT(LIT_FIRST), MPVOID);
1247 if (sSelect >= 0) {
1248 WinSendDlgItemMsg(hwnd,
1249 WALK_USERLIST,
1250 LM_DELETEITEM, MPFROM2SHORT(sSelect, 0), MPVOID);
1251 remove_udir(szBuff);
1252 wa->changed = 1;
[551]1253 }
1254 break;
[2]1255
[551]1256 case DID_OK:
1257 if (*wa->szCurrentPath) {
1258 strcpy(wa->szReturnPath, wa->szCurrentPath);
1259 MakeValidDir(wa->szReturnPath);
1260 if (fAutoAddAllDirs)
1261 add_udir(FALSE, wa->szReturnPath);
1262 if (fChangeTarget) {
1263 strcpy(targetdir, wa->szReturnPath);
1264 PrfWriteProfileString(fmprof, appname, "Targetdir", targetdir);
1265 }
1266 }
[939]1267 {
[1077]1268 SWP swp;
1269 ULONG size = sizeof(SWP);
1270 WinQueryWindowPos(hwnd, &swp);
[1505]1271 PrfWriteProfileData(fmprof, FM3Str, "WalkDir.Position", (PVOID) &swp,
[1077]1272 size);
[939]1273 }
[551]1274 if (wa->changed)
1275 WinSendMsg(hwnd, UM_SETUP3, MPVOID, MPVOID);
1276 WinDismissDlg(hwnd, 1);
1277 break;
[2]1278
[551]1279 case IDM_HELP:
1280 if (hwndHelp)
1281 WinSendMsg(hwndHelp,
1282 HM_DISPLAY_HELP,
1283 MPFROM2SHORT(HELP_WALKEM, 0), MPFROMSHORT(HM_RESOURCEID));
1284 break;
[2]1285
[551]1286 case DID_CANCEL:
[939]1287 {
[1077]1288 SWP swp;
1289 ULONG size = sizeof(SWP);
[939]1290
[1077]1291 WinQueryWindowPos(hwnd, &swp);
[1505]1292 PrfWriteProfileData(fmprof, FM3Str, "WalkDir.Position", (PVOID) &swp,
[1077]1293 size);
[939]1294 }
[551]1295 if (wa->changed)
[1077]1296 WinSendMsg(hwnd, UM_SETUP3, MPVOID, MPVOID);
[1039]1297 free(wa);
[551]1298 WinDismissDlg(hwnd, 0);
1299 break;
1300 }
1301 return 0;
[2]1302
[551]1303 case WM_CLOSE:
[1077]1304 break;
[551]1305 }
1306 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]1307}
1308
[242]1309MRESULT EXPENTRY WalkAllDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1310{
[551]1311 switch (msg) {
1312 case WM_INITDLG:
1313 return WalkDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1314 }
1315 return WalkDlgProc(hwnd, msg, mp1, mp2);
[2]1316}
1317
[242]1318MRESULT EXPENTRY WalkCopyDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1319{
[551]1320 switch (msg) {
1321 case WM_INITDLG:
[1498]1322 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_WALKCOPYDLGTEXT));
[551]1323 return WalkDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1324 }
1325 return WalkDlgProc(hwnd, msg, mp1, mp2);
[2]1326}
1327
[242]1328MRESULT EXPENTRY WalkMoveDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1329{
[551]1330 switch (msg) {
1331 case WM_INITDLG:
[1498]1332 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_WALKMOVEDLGTEXT));
[551]1333 return WalkDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1334 }
1335 return WalkDlgProc(hwnd, msg, mp1, mp2);
[2]1336}
1337
[242]1338MRESULT EXPENTRY WalkExtractDlgProc(HWND hwnd, ULONG msg, MPARAM mp1,
1339 MPARAM mp2)
1340{
[551]1341 switch (msg) {
1342 case WM_INITDLG:
[1498]1343 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_WALKEXTRACTDLGTEXT));
[551]1344 return WalkDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1345 }
1346 return WalkDlgProc(hwnd, msg, mp1, mp2);
[2]1347}
1348
[242]1349MRESULT EXPENTRY WalkTargetDlgProc(HWND hwnd, ULONG msg, MPARAM mp1,
1350 MPARAM mp2)
1351{
[551]1352 switch (msg) {
1353 case WM_INITDLG:
[242]1354 {
[551]1355 char s[CCHMAXPATH + 32];
[2]1356
[551]1357 sprintf(s,
1358 GetPString(IDS_WALKTARGETDLGTEXT),
1359 (*targetdir) ?
1360 NullStr :
1361 " (",
1362 (*targetdir) ?
1363 NullStr : GetPString(IDS_NONE), (*targetdir) ? NullStr : ")");
1364 WinSetWindowText(hwnd, s);
[242]1365 }
[551]1366 return WalkDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1367 }
1368 return WalkDlgProc(hwnd, msg, mp1, mp2);
[2]1369}
1370
[242]1371MRESULT EXPENTRY WalkTwoDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
1372{
[551]1373 WALK2 *wa;
1374 CHAR szBuff[CCHMAXPATH + 1], szBuffer[CCHMAXPATH + 1], *p;
1375 SHORT sSelect;
[1673]1376 static BOOL okay; // avoid combobox selecting as filled
[2]1377
[551]1378 switch (msg) {
1379 case UM_SETUP2:
1380 case WM_INITDLG:
1381 okay = FALSE;
1382 if (!mp2) {
1383 WinDismissDlg(hwnd, 0);
1384 break;
1385 }
[574]1386 WinSetWindowPtr(hwnd, QWL_USER, mp2);
[551]1387 wa = mp2;
[242]1388 {
[551]1389 PFNWP oldproc;
[2]1390
[551]1391 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, WALK_PATH),
1392 (PFNWP) TextSubProc);
1393 if (oldproc)
1394 WinSetWindowPtr(WinWindowFromID(hwnd, WALK_PATH),
1395 QWL_USER, (PVOID) oldproc);
1396 oldproc = WinSubclassWindow(WinWindowFromID(hwnd, WALK2_PATH),
1397 (PFNWP) TextSubProc);
1398 if (oldproc)
1399 WinSetWindowPtr(WinWindowFromID(hwnd, WALK2_PATH),
1400 QWL_USER, (PVOID) oldproc);
1401 }
[939]1402 {
1403 SWP swp;
1404 ULONG size = sizeof(SWP);
1405
[1505]1406 PrfQueryProfileData(fmprof, FM3Str, "WalkDir2.Position", (PVOID) &swp, &size);
[1394]1407 swp.fl &= ~SWP_SIZE; // 04 Feb 09 SHL ignore saved size
[939]1408 WinSetWindowPos(hwnd,
[1077]1409 HWND_TOP,
1410 swp.x,
1411 swp.y,
1412 swp.cx,
1413 swp.cy,
1414 swp.fl);
[939]1415 }
[551]1416 if (!*wa->szCurrentPath1)
[1104]1417 strcpy(wa->szCurrentPath1, pFM2SaveDirectory);
[551]1418 MakeFullName(wa->szCurrentPath1);
1419 if (!*wa->szCurrentPath2)
[1104]1420 strcpy(wa->szCurrentPath2, pFM2SaveDirectory);
[551]1421 MakeFullName(wa->szCurrentPath2);
1422 WinSendDlgItemMsg(hwnd,
1423 WALK_PATH,
1424 EM_SETTEXTLIMIT, MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1425 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath1);
1426 WinSendDlgItemMsg(hwnd, WALK2_PATH, EM_SETTEXTLIMIT,
1427 MPFROM2SHORT(CCHMAXPATH, 0), MPVOID);
1428 WinSetDlgItemText(hwnd, WALK2_PATH, wa->szCurrentPath2);
1429 FillPathListBox(hwnd,
1430 WinWindowFromID(hwnd, WALK_DRIVELIST),
1431 WinWindowFromID(hwnd, WALK_DIRLIST),
1432 wa->szCurrentPath1, FALSE);
1433 FillPathListBox(hwnd,
1434 WinWindowFromID(hwnd, WALK2_DRIVELIST),
1435 WinWindowFromID(hwnd, WALK2_DIRLIST),
[1670]1436 wa->szCurrentPath2, FALSE);
1437 WinEnableWindow(WinWindowFromID(hwnd, WALK2_INCLUDESUBDIRS), TRUE);
1438 WinEnableWindow(WinWindowFromID(hwnd, WALK2_LOADLISTFILE), TRUE);
1439 if (wa->includesubdirs)
1440 WinCheckButton(hwnd, WALK2_INCLUDESUBDIRS, TRUE);
[551]1441 if (!PostMsg(hwnd, UM_SETUP4, MPVOID, MPVOID))
1442 okay = TRUE;
1443 {
1444 MRESULT ret;
[2]1445
[551]1446 ret = WinDefDlgProc(hwnd, WM_INITDLG, mp1, mp2);
1447 WinSendMsg(hwnd, UM_SETUP, MPVOID, MPVOID);
1448 WinInvalidateRect(WinWindowFromID(hwnd, WALK_PATH), NULL, TRUE);
1449 WinInvalidateRect(WinWindowFromID(hwnd, WALK2_PATH), NULL, TRUE);
1450 return ret;
1451 }
[2]1452
[551]1453 case UM_SETUP4:
1454 okay = TRUE;
1455 return 0;
[2]1456
[551]1457 case WM_PRESPARAMCHANGED:
1458 {
1459 ULONG AttrFound, AttrValue[64], cbRetLen;
[2]1460
[551]1461 cbRetLen = WinQueryPresParam(hwnd, (ULONG) mp1, 0, &AttrFound,
1462 (ULONG) sizeof(AttrValue), &AttrValue, 0);
1463 if (cbRetLen) {
1464 switch (AttrFound) {
1465 case PP_FONTNAMESIZE:
1466 PrfWriteProfileData(fmprof,
1467 appname,
1468 "WalkFont", (PVOID) AttrValue, cbRetLen);
1469 *WalkFont = 0;
1470 WalkFontSize = sizeof(WalkFont);
1471 WinInvalidateRect(WinWindowFromID(hwnd, WALK_PATH), NULL, TRUE);
1472 break;
[242]1473 }
[551]1474 }
1475 }
1476 break;
[2]1477
[551]1478 case UM_SETUP:
1479 {
1480 INT x;
1481 USHORT id[] = { WALK_PATH, WALK_DIRLIST,
1482 WALK2_PATH, WALK2_DIRLIST, 0
1483 };
[2]1484
[551]1485 if (*WalkFont ||
1486 (PrfQueryProfileData(fmprof,
1487 appname,
1488 "WalkFont",
1489 (PVOID) WalkFont,
1490 &WalkFontSize) && WalkFontSize)) {
1491 for (x = 0; id[x]; x++)
1492 WinSetPresParam(WinWindowFromID(hwnd, id[x]),
1493 PP_FONTNAMESIZE, WalkFontSize, (PVOID) WalkFont);
1494 }
1495 }
1496 return 0;
[2]1497
[551]1498 case UM_CONTROL:
1499 case WM_CONTROL:
[574]1500 wa = WinQueryWindowPtr(hwnd, QWL_USER);
[551]1501 if (SHORT1FROMMP(mp1) == WALK_DRIVELIST ||
1502 SHORT1FROMMP(mp1) == WALK_DIRLIST ||
1503 SHORT1FROMMP(mp1) == WALK2_DRIVELIST ||
1504 SHORT1FROMMP(mp1) == WALK2_DIRLIST) {
1505 sSelect = (USHORT) WinSendDlgItemMsg(hwnd,
1506 SHORT1FROMMP(mp1),
1507 LM_QUERYSELECTION, MPVOID, MPVOID);
1508 *szBuffer = 0;
1509 if (sSelect >= 0)
1510 WinSendDlgItemMsg(hwnd, SHORT1FROMMP(mp1), LM_QUERYITEMTEXT,
1511 MPFROM2SHORT(sSelect, CCHMAXPATH),
[1670]1512 MPFROMP(szBuffer));
[551]1513 }
1514 switch (SHORT1FROMMP(mp1)) {
1515 case WALK_DRIVELIST:
1516 if (okay && *szBuffer && SHORT2FROMMP(mp1) == LN_ENTER) {
[2]1517
[551]1518 ULONG ulDirLen = CCHMAXPATH;
1519 APIRET rc;
[2]1520
[1321]1521 rc = DosQCurDir(toupper(*szBuffer) - '@', (PBYTE)&szBuff[3], &ulDirLen);
[551]1522 if (!rc) {
1523 strcpy(wa->szCurrentPath1, "C:\\");
1524 *wa->szCurrentPath1 = toupper(*szBuffer);
1525 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath1);
1526 FillPathListBox(hwnd,
1527 WinWindowFromID(hwnd, WALK_DRIVELIST),
1528 WinWindowFromID(hwnd, WALK_DIRLIST),
1529 wa->szCurrentPath1, FALSE);
1530 }
1531 }
1532 break;
[2]1533
[551]1534 case WALK_DIRLIST:
1535 if (okay && SHORT2FROMMP(mp1) == LN_ENTER) {
[2]1536
[551]1537 ULONG ulSearchCount;
[847]1538 FILEFINDBUF3 findbuf;
[551]1539 HDIR hDir;
1540 APIRET rc;
[2]1541
[551]1542 bstrip(szBuffer);
1543 if (*szBuffer) {
[1438]1544 strcpy(szBuff, wa->szCurrentPath1);
1545 AddBackslashToPath(szBuff);
1546 //if (szBuff[strlen(szBuff) - 1] != '\\')
1547 // strcat(szBuff, "\\");
[551]1548 strcat(szBuff, szBuffer);
1549 MakeFullName(szBuff);
1550 DosError(FERR_DISABLEHARDERR);
1551 hDir = HDIR_CREATE;
[766]1552 ulSearchCount = 1;
[551]1553 if (!IsRoot(szBuff)) {
[847]1554 rc = DosFindFirst(szBuff,
1555 &hDir,
1556 FILE_DIRECTORY |
1557 MUST_HAVE_DIRECTORY | FILE_READONLY |
1558 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
1559 &findbuf,
1560 sizeof(FILEFINDBUF3),
1561 &ulSearchCount, FIL_STANDARD);
[551]1562 if (!rc)
1563 DosFindClose(hDir);
1564 }
1565 else {
1566 findbuf.attrFile = FILE_DIRECTORY;
1567 rc = 0;
1568 }
1569 if (!rc && (findbuf.attrFile & FILE_DIRECTORY)) {
1570 strcpy(wa->szCurrentPath1, szBuff);
1571 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath1);
1572 FillPathListBox(hwnd,
1573 WinWindowFromID(hwnd, WALK_DRIVELIST),
1574 WinWindowFromID(hwnd, WALK_DIRLIST),
1575 wa->szCurrentPath1, FALSE);
1576 }
1577 }
1578 }
1579 break;
[2]1580
[551]1581 case WALK2_DRIVELIST:
1582 if (okay && *szBuffer && SHORT2FROMMP(mp1) == LN_ENTER) {
[2]1583
[551]1584 ULONG ulDirLen = CCHMAXPATH;
1585 APIRET rc;
[2]1586
[1321]1587 rc = DosQCurDir(toupper(*szBuffer) - '@', (PBYTE)&szBuff[3], &ulDirLen);
[551]1588 if (!rc) {
1589 strcpy(wa->szCurrentPath2, "C:\\");
1590 *wa->szCurrentPath2 = toupper(*szBuffer);
1591 WinSetDlgItemText(hwnd, WALK2_PATH, wa->szCurrentPath2);
1592 FillPathListBox(hwnd,
1593 WinWindowFromID(hwnd, WALK2_DRIVELIST),
1594 WinWindowFromID(hwnd, WALK2_DIRLIST),
1595 wa->szCurrentPath2, FALSE);
1596 }
1597 }
1598 break;
[2]1599
[551]1600 case WALK2_DIRLIST:
1601 if (okay && SHORT2FROMMP(mp1) == LN_ENTER) {
[2]1602
[551]1603 ULONG ulSearchCount;
[847]1604 FILEFINDBUF3 findbuf;
[551]1605 HDIR hDir;
1606 APIRET rc;
[2]1607
[551]1608 bstrip(szBuffer);
1609 if (*szBuffer) {
[1438]1610 strcpy(szBuff, wa->szCurrentPath2);
1611 AddBackslashToPath(szBuff);
1612 //if (szBuff[strlen(szBuff) - 1] != '\\')
1613 // strcat(szBuff, "\\");
[551]1614 strcat(szBuff, szBuffer);
1615 MakeFullName(szBuff);
1616 DosError(FERR_DISABLEHARDERR);
1617 hDir = HDIR_CREATE;
[766]1618 ulSearchCount = 1;
[551]1619 if (!IsRoot(szBuff)) {
[847]1620 rc = DosFindFirst(szBuff,
1621 &hDir,
1622 FILE_DIRECTORY |
1623 MUST_HAVE_DIRECTORY | FILE_READONLY |
1624 FILE_ARCHIVED | FILE_SYSTEM | FILE_HIDDEN,
1625 &findbuf,
1626 sizeof(FILEFINDBUF3),
1627 &ulSearchCount, FIL_STANDARD);
[551]1628 if (!rc)
1629 DosFindClose(hDir);
1630 }
1631 else {
1632 findbuf.attrFile = FILE_DIRECTORY;
1633 rc = 0;
1634 }
1635 if (!rc && (findbuf.attrFile & FILE_DIRECTORY)) {
1636 strcpy(wa->szCurrentPath2, szBuff);
1637 WinSetDlgItemText(hwnd, WALK2_PATH, wa->szCurrentPath2);
1638 FillPathListBox(hwnd,
1639 WinWindowFromID(hwnd, WALK2_DRIVELIST),
1640 WinWindowFromID(hwnd, WALK2_DIRLIST),
1641 wa->szCurrentPath2, FALSE);
1642 }
[242]1643 }
[551]1644 }
1645 break;
1646 }
1647 return 0;
1648
1649 case WM_COMMAND:
[574]1650 wa = WinQueryWindowPtr(hwnd, QWL_USER);
[551]1651 if (!wa)
1652 WinDismissDlg(hwnd, 0);
1653 *szBuff = 0;
1654 WinQueryDlgItemText(hwnd, WALK_PATH, CCHMAXPATH, szBuff);
1655 bstrip(szBuff);
1656 while ((p = strchr(szBuff, '/')) != NULL)
1657 *p = '\\';
1658 while (strlen(szBuff) > 3 && szBuff[strlen(szBuff) - 1] == '\\')
1659 szBuff[strlen(szBuff) - 1] = 0;
1660 MakeFullName(szBuff);
[864]1661 if (*szBuff && stricmp(szBuff, wa->szCurrentPath1) && SHORT1FROMMP(mp1) != DID_CANCEL) {
[551]1662 if (!SetDir(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT),
1663 QW_OWNER), hwnd, szBuff, 0))
1664 strcpy(wa->szCurrentPath1, szBuff);
[865]1665 else
[242]1666 return 0;
[551]1667 }
1668 WinSetDlgItemText(hwnd, WALK_PATH, wa->szCurrentPath1);
1669 *szBuff = 0;
1670 WinQueryDlgItemText(hwnd, WALK2_PATH, CCHMAXPATH, szBuff);
1671 bstrip(szBuff);
1672 while ((p = strchr(szBuff, '/')) != NULL)
1673 *p = '\\';
1674 while (strlen(szBuff) > 3 && szBuff[strlen(szBuff) - 1] == '\\')
1675 szBuff[strlen(szBuff) - 1] = 0;
1676 MakeFullName(szBuff);
[864]1677 if (*szBuff && stricmp(szBuff, wa->szCurrentPath2) && SHORT1FROMMP(mp1) != DID_CANCEL) {
[551]1678 if (!SetDir(WinQueryWindow(WinQueryWindow(hwnd, QW_PARENT),
1679 QW_OWNER), hwnd, szBuff, 0))
1680 strcpy(wa->szCurrentPath2, szBuff);
[865]1681 else
[551]1682 return 0;
1683 }
1684 WinSetDlgItemText(hwnd, WALK2_PATH, wa->szCurrentPath2);
[1670]1685 wa->includesubdirs = WinQueryButtonCheckstate(hwnd, WALK2_INCLUDESUBDIRS);
1686 wa->listfile = WinQueryButtonCheckstate(hwnd, WALK2_LOADLISTFILE);
[551]1687 switch (SHORT1FROMMP(mp1)) {
1688 case DID_OK:
[939]1689 {
1690 SWP swp;
1691 ULONG size = sizeof(SWP);
1692
1693 WinQueryWindowPos(hwnd, &swp);
[1505]1694 PrfWriteProfileData(fmprof, FM3Str, "WalkDir2.Position", (PVOID) &swp,
[1077]1695 size);
[939]1696 }
[551]1697 WinDismissDlg(hwnd, 1);
1698 break;
[2]1699
[551]1700 case IDM_HELP:
1701 if (hwndHelp)
1702 WinSendMsg(hwndHelp,
1703 HM_DISPLAY_HELP,
1704 MPFROM2SHORT(HELP_WALKEM2, 0), MPFROMSHORT(HM_RESOURCEID));
1705 break;
[2]1706
[551]1707 case DID_CANCEL:
[939]1708 {
1709 SWP swp;
1710 ULONG size = sizeof(SWP);
1711
1712 WinQueryWindowPos(hwnd, &swp);
[1505]1713 PrfWriteProfileData(fmprof, FM3Str, "WalkDir2.Position", (PVOID) &swp,
[1077]1714 size);
[939]1715 }
[551]1716 WinDismissDlg(hwnd, 0);
1717 break;
1718 }
1719 return 0;
[2]1720
[551]1721 case WM_CLOSE:
1722 break;
1723 }
1724 return WinDefDlgProc(hwnd, msg, mp1, mp2);
[2]1725}
1726
[242]1727MRESULT EXPENTRY WalkTwoCmpDlgProc(HWND hwnd, ULONG msg, MPARAM mp1,
1728 MPARAM mp2)
1729{
[551]1730 switch (msg) {
1731 case WM_INITDLG:
[1498]1732 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_WALKCOMPAREDLGTEXT));
[551]1733 return WalkTwoDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1734 }
1735 return WalkTwoDlgProc(hwnd, msg, mp1, mp2);
[2]1736}
1737
[242]1738MRESULT EXPENTRY WalkTwoSetDlgProc(HWND hwnd, ULONG msg, MPARAM mp1,
1739 MPARAM mp2)
1740{
[551]1741 switch (msg) {
1742 case WM_INITDLG:
[1498]1743 WinSetWindowText(hwnd, (CHAR *) GetPString(IDS_WALKSETDIRSDLGTEXT));
[551]1744 return WalkTwoDlgProc(hwnd, UM_SETUP2, mp1, mp2);
1745 }
1746 return WalkTwoDlgProc(hwnd, msg, mp1, mp2);
[2]1747}
[794]1748
1749#pragma alloc_text(WALKER,FillPathListBox,WalkDlgProc,TextSubProc)
1750#pragma alloc_text(WALKER,WalkAllDlgProc,WalkCopyDlgProc)
1751#pragma alloc_text(WALKER,WalkMoveDlgProc,WalkExtractDlgProc,WalkTargetDlgProc)
1752#pragma alloc_text(WALK2,WalkTwoDlgProc,WalkTwoCmpDlgProc,WalkTwoSetDlgProc)
1753#pragma alloc_text(UDIRS,add_udir,remove_udir,remove_ldir,load_udirs)
[807]1754#pragma alloc_text(UDIRS,save_udirs,load_setups,save_setups,add_setups)
[794]1755#pragma alloc_text(UDIRS,remove_setup)
Note: See TracBrowser for help on using the repository browser.