source: trunk/dll/init.c@ 1400

Last change on this file since 1400 was 1400, checked in by Gregg Young, 17 years ago

Remainder of changes to rename commafmt.h/c (Ticket 28, 82); Additional strings moved to PCSZs in init.c (Ticket 6); Added WriteDetailsSwitches used it and LoadDetailsSwitches to consolidate inline code (Ticket 343, 344)

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 66.5 KB
Line 
1
2/***********************************************************************
3
4 $Id: init.c 1400 2009-03-08 17:50:25Z gyoung $
5
6 Initialization
7
8 Copyright (c) 1993-98 M. Kimes
9 Copyright (c) 2001, 2009 Steven H. Levine
10
11 11 Jun 02 SHL Add CheckVersion
12 11 Jun 03 SHL Add JFS and FAT32 support
13 25 Nov 03 SHL InitFM3DLL: correct strings error mesage
14 23 May 05 SHL Use datamin.h
15 26 May 05 SHL Comments
16 06 Jun 05 SHL indent -i2
17 06 Jun 05 SHL Rework FindSwapperDat for VAC3.65 compat
18 13 Jul 06 SHL Use Runtime_Error
19 13 Jul 06 SHL Sync with current style
20 29 Jul 06 SHL Use xfgets
21 22 Oct 06 GKY Add NDFS32 support
22 18 Feb 07 GKY Add ISOFS, RAMFS support
23 30 Mar 07 GKY Defined golbals for removing GetPString for window class names
24 21 Apr 07 GKY Find FM2Utils by path or utils directory eleminate fAddUtils global
25 15 Jun 07 SHL Make OpenWatcom compatible
26 23 Jun 07 GKY Fix WORPLACE_PROCESS enviroment check logic
27 28 Jun 07 SHL Rework WORKPLACE_PROCESS check to match reality
28 03 Aug 07 GKY Enlarged and made setable everywhere Findbuf (speed file loading)
29 06 Aug 07 GKY Reduce DosSleep times (ticket 148)
30 13 Aug 07 SHL Move #pragma alloc_text to end for OpenWatcom compat
31 18 Aug 07 JBS Added code to read Details* keys from the INI file (Ticket 118)
32 19 Aug 07 SHL Ensure FilesToGet in valid range
33 21 Aug 07 GKY Make Subject column in dircnr sizable and movable from the rigth to the left pane
34 23 Aug 07 SHL InitFM3DLL: report INI file DosSetPathInfo error correctly
35 23 Aug 07 SHL Use BldFullPathName
36 25 Aug 07 SHL Work around DosSetPathInfo kernel defect
37 01 Sep 07 GKY Use xDosSetPathInfo to fix case where FS3 buffer crosses 64k boundry
38 10 Nov 07 GKY Get thousands separator from country info for file sizes.
39 26 Nov 07 GKY Eliminate check of ext path on start up
40 17 Dec 07 GKY Make WPURLDEFAULTSETTINGS the fall back for ftp/httprun
41 13 Jan 08 GKY Get Subjectwidth/Subjectleft working in the collector.
42 12 Feb 08 SHL Compile OpenWatcom version into binary
43 29 Feb 08 GKY Changes to enable user settable command line length
44 29 Feb 08 GKY Refactor global command line variables to notebook.h
45 08 Mar 08 JBS Ticket 230: Replace prefixless INI keys for default directory containers with
46 keys using a "DirCnr." prefix
47 20 Apr 08 GKY Change default cmd line length to 1024 Ask once if user wants to reset it.
48 11 Jul 08 JBS Ticket 230: Simplified code and eliminated some local variables by incorporating
49 all the details view settings (both the global variables and those in the
50 DIRCNRDATA struct) into a new struct: DETAILS_SETTINGS.
51 16 JUL 08 GKY Use TMP directory for temp files
52 17 Jul 08 SHL Reduce code bulk in fUseTmp setup
53 19 Jul 08 GKY Use pFM2SaveDirectory, MakeTempName and move temp files to TMP subdirectory if (TMP).
54 20 Jul 08 JBS Ticket 114: Support user-selectable env. strings in Tree container.
55 20 Jul 08 GKY Add support to delete orphaned tmp directories without deleting tmp of other
56 running sessions
57 23 Aug 08 GKY Check that space on TMP & FM2 save drives exceed 5 GiB; Done to allow user setting of
58 minimum size in future
59 29 Nov 08 GKY Remove or replace with a mutex semaphore DosEnterCriSec where appropriate.
60 30 Nov 08 GKY Add the option of creating a subdirectory from the arcname
61 for the extract path to arc container.
62 10 Dec 08 SHL Integrate exception handler support
63 25 Dec 08 GKY Add code to allow write verify to be turned off on a per drive basis
64 28 Dec 08 GKY Check for LVM.EXE and remove Refresh removable media menu item as appropriate
65 28 Dec 08 GKY Rework partition submenu to gray out unavailable items (check for existence of files)
66 and have no default choice.
67 01 Jan 09 GKY Add option to rescan tree container on eject of removable media
68 03 Jan 09 GKY Avoid dbl scan of drive on startup by checking for first rescan drive.
69 03 Jan 09 GKY Check for system that is protectonly to gray out Dos/Win command lines and prevent
70 Dos/Win programs from being inserted into the execute dialog with message why.
71 11 Jan 09 GKY Move strings that shouldn't be translated (font names etc) compile time variables
72 03 Feb 09 SHL Switch to STRINGTABLE
73 07 Feb 09 GKY Move repeated strings to PCSZs.
74 07 Feb 09 GKY Add *DateFormat functions to format dates based on locale
75 07 Feb 09 GKY Eliminate Win_Error2 by moving function names to PCSZs used in Win_Error
76 08 Mar 09 GKY Additional strings move to PCSZs in init.c
77
78***********************************************************************/
79
80#include <stdlib.h>
81#include <string.h>
82#include <share.h>
83#include <process.h> // getpid
84#include <time.h>
85#include <ctype.h>
86
87#define INCL_DOS
88#define INCL_WIN
89#define INCL_MMIOOS2
90#define INCL_GPI
91#define INCL_DOSERRORS
92#define INCL_LONGLONG
93#define INCL_DOSNLS
94#include <os2.h>
95#include <os2me.h>
96
97#define DEFINE_GLOBALS 1
98
99#include "fm3dll.h"
100#include "fm3dll2.h" // #define's for UM_*, control id's, etc.
101#include "init.h"
102#include "mkdir.h" // Data declaration(s)
103#include "dircnrs.h" // Data declaration(s)
104#include "comp.h" // Data declaration(s)
105#include "cmdline.h" // Data declaration(s)
106#include "fm2cmd.h" // Data declaration(s)
107#include "printer.h" // Data declaration(s)
108#include "flesh.h" // Data declaration(s)
109#include "worker.h" // Data declaration(s)
110#include "filldir.h" // Data declaration(s)
111#include "defview.h" // Data declaration(s)
112#include "draglist.h" // Data declaration(s)
113#include "fm3dlg.h"
114#include "datamin.h"
115#include "tools.h"
116#include "fm3str.h"
117#include "version.h"
118#include "pathutil.h" // BldFullPathName
119#include "arccnrs.h" // ArcClientWndProc
120#include "errutil.h" // Dos_Error...
121#include "strutil.h" // GetPString
122#include "valid.h" // ArgDriveFlags
123#include "autoview.h" // AutoViewProc
124#include "mainwnd.h" // BubbleProc, ChildButtonProc, DriveBackProc,
125 // DriveProc, LEDProc, MainWndProc, StatusProc
126 // ToolBackProc
127#include "collect.h" // CollectorClientWndProc, CollectorTextProc
128#include "getnames.h" // CustomFileDlg
129#include "notify.h" // EndNote
130#include "valid.h" // FillInDriveFlags, IsValidDir
131#include "inis.h" // IniProc
132#include "viewer.h" // MLEEditorProc
133#include "mainwnd2.h" // MainWndProc2
134#include "notify.h" // NotifyWndProc
135#include "treecnr.h" // OpenButtonProc
136#include "seeall.h" // SeeAllWndProc, SeeStatusProc
137#include "timer.h" // StartTimer, StopTimer
138#include "treecnr.h" // TreeClientWndProc, TreeStatProc
139#include "newview.h" // ViewStatusProc, ViewWndProc
140#include "subj.h" // Subject
141#include "select.h" // UnHilite
142#include "dirs.h" // save_dir
143#include "copyf.h" // unlinkf
144#include "wrappers.h" // xDosSetPathInfo
145#include "misc.h" // HeapThread, LoadDetailsSwitches
146#include "notebook.h" // command line variables (editor etc)
147#include "strips.h" // bstrip
148#include "killproc.h" // GetDosPgmName
149#include "srchpath.h" // searchpath
150#include "fortify.h"
151#include "excputil.h" // xbeginthread
152#include "systemf.h" // runemf2
153
154#ifdef __IBMC__
155#pragma alloc_text(INIT,LibMain,InitFM3DLL,DeInitFM3DLL)
156#pragma alloc_text(INIT1,StartFM3)
157#endif
158
159extern int _CRT_init(void);
160extern void _CRT_term(void);
161
162#ifdef __WATCOMC__
163#define a(x) #x
164#define b(x) a(x)
165// Must be global to prevent warnings
166PSZ pszBuiltWith = "Built with OpenWatcom version " b(__WATCOMC__);
167#undef b
168#undef a
169#endif
170
171static VOID FindSwapperDat(VOID);
172
173// Data definitions
174static PSZ pszSrcFile = __FILE__;
175static CHAR *WC_MAINWND;
176unsigned __MaxThreads = {48};
177
178#pragma data_seg(GLOBAL1)
179HMTX hmtxFM2Delete;
180HMTX hmtxFM2Globals;
181ULONG OS2ver[2];
182PFNWP PFNWPCnr;
183PFNWP PFNWPMLE;
184CHAR ThousandsSeparator[2];
185CHAR DateSeparator[2];
186CHAR TimeSeparator[2];
187ULONG ulTimeFmt;
188ULONG ulDateFmt;
189BOOL fInitialDriveScan;
190BOOL fAmAV2;
191BOOL fChangeTarget;
192BOOL fIniExisted;
193BOOL fLogFile;
194BOOL fProtectOnly;
195BOOL fReminimize;
196BOOL fWantFirstTimeInit;
197BOOL fDrivetoSkip[26];
198HPOINTER hptrApp;
199HPOINTER hptrArc;
200HPOINTER hptrArrow;
201HPOINTER hptrArt;
202HPOINTER hptrBusy;
203HPOINTER hptrCDROM;
204HPOINTER hptrDrive;
205HPOINTER hptrEW;
206HPOINTER hptrFloppy;
207HPOINTER hptrNS;
208HPOINTER hptrRamdisk;
209HPOINTER hptrRemote;
210HPOINTER hptrRemovable;
211HPOINTER hptrVirtual;
212HPOINTER hptrZipstrm;
213CHAR *pFM2SaveDirectory;
214CHAR *pTmpDir;
215
216#pragma data_seg(GLOBAL2)
217PCSZ PCSZ_ARCHIVERBB2;
218PCSZ PCSZ_ASSOCDAT;
219PCSZ PCSZ_CMDLINESDAT;
220PCSZ PCSZ_CMDMINIDAT;
221PCSZ PCSZ_COMMANDSDAT;
222PCSZ PCSZ_FILTERSDAT;
223PCSZ PCSZ_GREPMASKDAT;
224PCSZ PCSZ_PATTERNSDAT;
225PCSZ PCSZ_RESOURCEDAT;
226PCSZ PCSZ_QUICKTLSDAT;
227PCSZ PCSZ_FM3TOOLSDAT;
228PCSZ PCSZ_USERDIRSDAT;
229PCSZ PCSZ_FM2PLAYEXE;
230PCSZ PCSZ_FM2PLAYTEMP;
231PCSZ PCSZ_LVMGUICMD;
232PCSZ PCSZ_DFSOS2EXE;
233PCSZ PCSZ_MINILVMEXE;
234PCSZ PCSZ_FDISKPMEXE;
235PCSZ PCSZ_LVMEXE;
236PCSZ PCSZ_ARCCNR;
237PCSZ PCSZ_COLLECTOR;
238PCSZ PCSZ_DIRCNR;
239PCSZ PCSZ_DIRSIZES;
240PCSZ PCSZ_TOOLBAR;
241PCSZ PCSZ_TREECNR;
242CHAR *CBSIFS;
243CHAR *DRF_FM2ARCHIVE;
244CHAR *DRMDRFFM2ARC;
245CHAR *DRMDRFOS2FILE;
246CHAR *DRM_FM2ARCMEMBER;
247CHAR *DRM_OS2FILE;
248CHAR *FM2Str;
249HMODULE FM3DllHandle;
250CHAR *FM3Folder;
251PCSZ FNT_6HELVETICA;
252PCSZ FNT_8HELVETICA;
253PCSZ FNT_8HELVETICABOLD;
254PCSZ FNT_10SYSTEMMONOTEXT;
255PCSZ FNT_10SYSTEMPROPORT;
256PCSZ FNT_2SYSTEMVIO;
257PCSZ FNT_4SYSTEMVIO;
258PCSZ FNT_10SYSTEMVIO;
259PCSZ FNT_8TIMESNEWROMAN;
260CHAR HomePath[CCHMAXPATH];
261CHAR *LONGNAME;
262CHAR *NullStr;
263PCSZ PCSZ_DOSCREATEMUTEXSEM;
264PCSZ PCSZ_DOSDUPHANDLE;
265PCSZ PCSZ_DOSGETINFOBLOCKS;
266PCSZ PCSZ_DOSQUERYPATHINFO;
267PCSZ PCSZ_DOSSEARCHPATH;
268PCSZ PCSZ_POSTMSG;
269PCSZ PCSZ_WINCREATEWINDOW;
270PCSZ PCSZ_WINLOADACCELTABLE;
271PCSZ PCSZ_WINSETACCELTABLE;
272PCSZ PCSZ_INIQUERYPRFTEXT;
273PCSZ PCSZ_PRFQUERYPROFILEDATA;
274PCSZ PCSZ_PRFQUERYPROFILESIZE;
275PCSZ PCSZ_PRFQUERYPROFILESTRING;
276PCSZ PCSZ_FILLDIRQCURERRTEXT;
277PCSZ PCSZ_NODATA;
278PCSZ PCSZ_STARDOTEXE;
279PCSZ PCSZ_STARDOTINI;
280PCSZ PCSZ_STARDOTLST;
281PCSZ PCSZ_STARDOTPMD;
282PCSZ PCSZ_STARDOTTXT;
283PCSZ PCSZ_DOTEXE;
284PCSZ PCSZ_DOTCOM;
285PCSZ PCSZ_DOTCMD;
286PCSZ PCSZ_DOTBTM;
287PCSZ PCSZ_DOTBAT;
288PCSZ PCSZ_DOTLST;
289PCSZ PCSZ_DOTTLS;
290PCSZ PCSZ_DOTHLP;
291PCSZ PCSZ_DOTINF;
292PCSZ PCSZ_DOTMP3;
293PCSZ PCSZ_DOTOGG;
294PCSZ PCSZ_DOTFLAC;
295PCSZ PCSZ_DOTJPEG;
296PCSZ PCSZ_DOTJPG;
297PCSZ PCSZ_DOTICO;
298PCSZ PCSZ_DOTPTR;
299PCSZ PCSZ_DOTBB2;
300PCSZ PCSZ_DOTBMP;
301PCSZ PCSZ_DOTCOMMENTS;
302PCSZ PCSZ_PATH;
303PCSZ PCSZ_LIBPATH;
304CHAR *pLibPathStrict;
305PCSZ PCSZ_WPURLDEFAULTSETTINGS;
306CHAR *Settings;
307CHAR SwapperDat[CCHMAXPATH];
308PCSZ WC_ARCCONTAINER;
309PCSZ WC_ARCSTATUS;
310PCSZ WC_AUTOVIEW;
311PCSZ WC_BUBBLE;
312PCSZ WC_COLLECTOR;
313PCSZ WC_COLSTATUS;
314PCSZ WC_DATABAR;
315PCSZ WC_DIRCONTAINER;
316PCSZ WC_DIRSTATUS;
317PCSZ WC_DRIVEBACK;
318PCSZ WC_DRIVEBUTTONS;
319PCSZ WC_ERRORWND;
320PCSZ WC_INIEDITOR;
321PCSZ WC_LED;
322PCSZ WC_MAINWND2;
323PCSZ WC_MINITIME;
324PCSZ WC_MLEEDITOR;
325PCSZ WC_NEWVIEW;
326PCSZ WC_OBJECTWINDOW;
327PCSZ WC_SEEALL;
328PCSZ WC_SEESTATUS;
329PCSZ WC_STATUS;
330PCSZ WC_TOOLBACK;
331PCSZ WC_TOOLBUTTONS;
332PCSZ WC_TREECONTAINER;
333PCSZ WC_TREEOPENBUTTON;
334PCSZ WC_TREESTATUS;
335PCSZ WC_VIEWSTATUS;
336CHAR profile[CCHMAXPATH];
337ULONGLONG ullTmpSpaceNeeded;
338
339BOOL CheckFileHeader(CHAR *filespec, CHAR *signature, LONG offset);
340
341VOID FindSwapperDat(VOID)
342{
343 CHAR filename[] = "C:\\CONFIG.SYS";
344 CHAR input[8192];
345 CHAR *p;
346 CHAR *pp;
347 FILE *fp;
348 FILEFINDBUF3L ffb;
349 ULONG nm;
350 ULONG size = sizeof(SwapperDat);
351 HDIR hdir = HDIR_CREATE;
352 APIRET rc = 1;
353
354 *SwapperDat = 0;
355 // Check already known
356 PrfQueryProfileData(fmprof, FM3Str, "SwapperDat", SwapperDat, &size);
357 if (*SwapperDat) {
358 nm = 1;
359 rc = DosFindFirst(SwapperDat,
360 &hdir,
361 FILE_NORMAL | FILE_ARCHIVED |
362 FILE_HIDDEN | FILE_SYSTEM | FILE_READONLY,
363 &ffb, sizeof(ffb), &nm, FIL_STANDARDL);
364 if (rc && rc != ERROR_FILE_NOT_FOUND && rc != ERROR_PATH_NOT_FOUND) {
365 FILEFINDBUF3 ffb;
366 rc = DosFindFirst(SwapperDat,
367 &hdir,
368 FILE_NORMAL | FILE_ARCHIVED |
369 FILE_HIDDEN | FILE_SYSTEM | FILE_READONLY,
370 &ffb, sizeof(ffb), &nm, FIL_STANDARD);
371 fNoLargeFileSupport = TRUE;
372 }
373 if (!rc) {
374 DosFindClose(hdir);
375 fp = fopen(SwapperDat, "r");
376 if (fp) {
377 fclose(fp);
378 *SwapperDat = 0;
379 rc = 1; // Force config.sys scan
380 }
381 }
382 else
383 *SwapperDat = 0;
384 }
385 // If not defined in INI or INI wrong, scan config.sys for SWAPPATH statement
386 if (rc) {
387 if (DosQuerySysInfo(QSV_BOOT_DRIVE,
388 QSV_BOOT_DRIVE,
389 &nm,
390 sizeof(ULONG))) {
391 nm = 3; // Assume drive C:
392 }
393 *filename = (CHAR) nm + '@';
394 fp = xfsopen(filename, "r", SH_DENYNO, pszSrcFile, __LINE__);
395 if (fp) {
396 while (!feof(fp)) {
397 if (!xfgets(input, sizeof(input), fp, pszSrcFile, __LINE__))
398 break;
399 lstrip(input);
400 if (!strnicmp(input, "SWAPPATH", 8)) {
401 p = input + 8;
402 while (*p == ' ')
403 p++;
404 if (*p == '=') {
405 p++;
406 stripcr(p);
407 rstrip(p);
408 while (*p == ' ')
409 p++;
410 if (*p == '\"') {
411 p++;
412 pp = p;
413 while (*pp && *pp != '\"')
414 *pp += 1;
415 if (*pp)
416 *pp = 0;
417 }
418 else {
419 pp = strchr(p, ' ');
420 if (pp)
421 *pp = 0;
422 }
423 if (*p) {
424 strncpy(SwapperDat, p, CCHMAXPATH);
425 SwapperDat[CCHMAXPATH - 1] = 0;
426 BldFullPathName(SwapperDat, SwapperDat, "SWAPPER.DAT");
427 hdir = HDIR_CREATE;
428 nm = 1;
429 rc = DosFindFirst(SwapperDat,
430 &hdir,
431 FILE_NORMAL | FILE_ARCHIVED |
432 FILE_HIDDEN | FILE_SYSTEM | FILE_READONLY,
433 &ffb, sizeof(ffb), &nm, FIL_STANDARD);
434 if (rc){
435 FILEFINDBUF3 ffb;
436 rc = DosFindFirst(SwapperDat,
437 &hdir,
438 FILE_NORMAL | FILE_ARCHIVED |
439 FILE_HIDDEN | FILE_SYSTEM | FILE_READONLY,
440 &ffb, sizeof(ffb), &nm, FIL_STANDARD);
441 fNoLargeFileSupport = TRUE;
442 }
443 if (!rc) {
444 DosFindClose(hdir);
445 PrfWriteProfileString(fmprof,
446 FM3Str, "SwapperDat", SwapperDat);
447 }
448 else
449 *SwapperDat = 0;
450 break;
451 }
452 }
453 } // if SWAPPATH
454 } // while
455 fclose(fp);
456 }
457 }
458}
459
460#ifdef __WATCOMC__
461
462unsigned APIENTRY LibMain(unsigned hModule,
463 unsigned ulFlag)
464{
465 switch (ulFlag) {
466 case 0:
467 FM3DllHandle = hModule;
468
469 DosError(FERR_DISABLEHARDERR);
470 /* strings here to prevent multiple occurences in DLL */
471 FM2Str = "FM/2";
472 FM3Str = "FM/3";
473 NullStr = "";
474 Default = "DEFAULT";
475 Settings = "SETTINGS";
476 WPProgram = "WPProgram";
477 FM3Folder = "<FM3_Folder>";
478 FM3Tools = "<FM3_Tools>";
479 DRM_OS2FILE = "DRM_OS2FILE";
480 DRM_FM2ARCMEMBER = "DRM_FM2ARCMEMBER";
481 DRF_FM2ARCHIVE = "DRF_FM2ARCHIVE";
482 DRMDRFLIST = "<DRM_OS2FILE,DRF_UNKNOWN>,"
483 "<DRM_DISCARD,DRF_UNKNOWN>," "<DRM_PRINT,DRF_UNKNOWN>";
484 DRMDRFOS2FILE = "<DRM_OS2FILE,DRF_UNKNOWN>";
485 DRMDRFFM2ARC = "<DRM_FM2ARCMEMBER,DRF_FM2ARCHIVE>";
486 DRM_FM2INIRECORD = "DRM_FM2INIRECORD";
487 DRF_FM2INI = "DRF_FM2INI";
488 SUBJECT = ".SUBJECT";
489 LONGNAME = ".LONGNAME";
490 HPFS = "HPFS";
491 JFS = "JFS";
492 CDFS = "CDFS";
493 ISOFS = "ISOFS";
494 FAT32 = "FAT32";
495 HPFS386 = "HPFS386";
496 CBSIFS = "CBSIFS";
497 NDFS32 = "NDFS32";
498 RAMFS = "RAMFS";
499 NTFS = "NTFS";
500 PCSZ_ARCHIVERBB2 = "ARCHIVER.BB2";
501 PCSZ_ASSOCDAT = "ASSOC.DAT";
502 PCSZ_CMDLINESDAT = "CMDLINES.DAT";
503 PCSZ_CMDMINIDAT = "CMDMINI.DAT";
504 PCSZ_COMMANDSDAT = "COMMANDS.DAT";
505 PCSZ_FILTERSDAT = "FILTERS.DAT";
506 PCSZ_GREPMASKDAT = "GREPMASK.DAT";
507 PCSZ_PATTERNSDAT = "PATTERNS.DAT";
508 PCSZ_RESOURCEDAT = "RESOURCE.DAT";
509 PCSZ_QUICKTLSDAT = "QUICKTLS.DAT";
510 PCSZ_FM3TOOLSDAT = "FM3TOOLS.DAT";
511 PCSZ_USERDIRSDAT = "USERDIRS.DAT";
512 PCSZ_FM2PLAYEXE = "FM2PLAY.EXE";
513 PCSZ_FM2PLAYTEMP = "$FM2PLAY.$$$";
514 PCSZ_LVMGUICMD = "LVMGUI.CMD";
515 PCSZ_DFSOS2EXE = "DFSOS2.EXE";
516 PCSZ_MINILVMEXE = "MINILVM.EXE";
517 PCSZ_FDISKPMEXE = "FDISKPM.EXE";
518 PCSZ_LVMEXE = "LVM.EXE";
519 PCSZ_ARCCNR = "ArcCnr";
520 PCSZ_COLLECTOR = "Collector";
521 PCSZ_DIRCNR = "DirCnr";
522 PCSZ_DIRSIZES = "DirSizes";
523 PCSZ_TOOLBAR = "ToolBar";
524 PCSZ_TREECNR = "TreeCnr";
525 FNT_6HELVETICA = "6.Helvetica";
526 FNT_8HELVETICA = "8.Helvetica";
527 FNT_8HELVETICABOLD = "8.Helvetica.Bold";
528 FNT_10SYSTEMMONOTEXT = "10.System Monospaced";
529 FNT_10SYSTEMPROPORT = "10.System Proportional";
530 FNT_2SYSTEMVIO = "2.System VIO";
531 FNT_4SYSTEMVIO = "4.System VIO";
532 FNT_10SYSTEMVIO = "10.System VIO";
533 FNT_8TIMESNEWROMAN = "8.Times New Roman";
534 PCSZ_DOSCREATEMUTEXSEM = "DosCreateMutexSem";
535 PCSZ_DOSDUPHANDLE = "DosDupHandle";
536 PCSZ_DOSGETINFOBLOCKS = "DosGetInfoBlocks";
537 PCSZ_DOSQUERYPATHINFO = "DosQueryPathInfo";
538 PCSZ_DOSSEARCHPATH = "DosSearchPath";
539 PCSZ_POSTMSG = "PostMsg";
540 PCSZ_WINCREATEWINDOW = "WinCreateWindow";
541 PCSZ_WINLOADACCELTABLE = "WinLoadAccelTable";
542 PCSZ_WINSETACCELTABLE = "WinSetAccelTable";
543 PCSZ_INIQUERYPRFTEXT = "PrfQueryProfile";
544 PCSZ_PRFQUERYPROFILEDATA = "PrfQueryProfileData";
545 PCSZ_PRFQUERYPROFILESIZE = "PrfQueryProfileSize";
546 PCSZ_PRFQUERYPROFILESTRING = "PrfQueryProfileString";
547 PCSZ_FILLDIRQCURERRTEXT = "DosQCurDisk";
548 PCSZ_NODATA = "No Data";
549 PCSZ_STARDOTEXE = "*.EXE";
550 PCSZ_STARDOTINI = "*.INI";
551 PCSZ_STARDOTLST = "*.LST";
552 PCSZ_STARDOTPMD = "*.PMD";
553 PCSZ_STARDOTTXT = "*.TXT";
554 PCSZ_DOTEXE = ".EXE";
555 PCSZ_DOTCOM = ".COM";
556 PCSZ_DOTCMD = ".CMD";
557 PCSZ_DOTBTM = ".BTM";
558 PCSZ_DOTBAT = ".BAT";
559 PCSZ_DOTLST = ".LST";
560 PCSZ_DOTTLS = ".TLS";
561 PCSZ_DOTHLP = ".HLP";
562 PCSZ_DOTINF = ".INF";
563 PCSZ_DOTMP3 = ".MP3";
564 PCSZ_DOTOGG = ".OGG";
565 PCSZ_DOTFLAC = ".FLAC";
566 PCSZ_DOTJPEG = ".JPEG";
567 PCSZ_DOTJPG = ".JPG";
568 PCSZ_DOTICO = ".ICO";
569 PCSZ_DOTPTR = ".PTR";
570 PCSZ_DOTBB2 = ".BB2";
571 PCSZ_DOTBMP = ".BMP";
572 PCSZ_DOTCOMMENTS = ".COMMENTS";
573 PCSZ_PATH = "PATH";
574 PCSZ_LIBPATH = "LIBPATH";
575 pLibPathStrict = "SET LIBPATHSTRICT=TRUE";
576 PCSZ_WPURLDEFAULTSETTINGS = "WPURLDEFAULTSETTINGS";
577 WC_OBJECTWINDOW = "WC_OBJECTWINDOW";
578 WC_BUBBLE = "WC_BUBBLE";
579 WC_TOOLBUTTONS = "WC_TOOLBUTTONS";
580 WC_DRIVEBUTTONS = "WC_DRIVEBUTTONS";
581 WC_DIRCONTAINER = "WC_DIRCONTAINER";
582 WC_DIRSTATUS = "WC_DIRSTATUS";
583 WC_TREECONTAINER = "WC_TREECONTAINER";
584 WC_TREEOPENBUTTON = "WC_TREEOPENBUTTON";
585 WC_TREESTATUS = "WC_TREESTATUS";
586 WC_MAINWND = "WC_MAINWND";
587 WC_MAINWND2 = "WC_MAINWND2";
588 WC_AUTOVIEW = "WC_AUTOVIEW";
589 WC_LED = "WC_LED";
590 WC_COLLECTOR = "WC_COLLECTOR";
591 WC_COLSTATUS = "WC_COLSTATUS";
592 WC_STATUS = "WC_STATUS";
593 WC_TOOLBACK = "WC_TOOLBACK";
594 WC_DRIVEBACK = "WC_DRIVEBACK";
595 WC_ARCCONTAINER = "WC_ARCCONTAINER";
596 WC_ARCSTATUS = "WC_ARCSTATUS";
597 WC_MLEEDITOR = "WC_MLEEDITOR";
598 WC_INIEDITOR = "WC_INIEDITOR";
599 WC_SEEALL = "WC_SEEALL";
600 WC_NEWVIEW = "WC_NEWVIEW";
601 WC_SEESTATUS = "WC_SEESTATUS";
602 WC_VIEWSTATUS = "WC_VIEWSTATUS";
603 WC_ERRORWND = "WC_ERRORWND";
604 WC_MINITIME = "WC_MINITIME";
605 WC_DATABAR = "WC_DATABAR";
606
607 /* end of strings */
608 memset(&RGBBLACK, 0, sizeof(RGB2));
609 RGBGREY.bRed = RGBGREY.bGreen = RGBGREY.bBlue = (BYTE)204;
610 RGBGREY.fcOptions = 0;
611 FM3UL = *(ULONG *)FM3Str;
612 DEBUG_STRING = "Debug -- please report to author";
613 break;
614 case 1:
615 StopPrinting = 1;
616 if (fmprof)
617 PrfCloseProfile(fmprof);
618 DosError(FERR_ENABLEHARDERR);
619 break;
620 default:
621 return 0UL;
622 }
623 return 1UL;
624}
625
626#else // __IBMC__
627
628unsigned long _System _DLL_InitTerm(unsigned long hModule,
629 unsigned long ulFlag)
630{
631 switch (ulFlag) {
632 case 0:
633 if (_CRT_init() == -1)
634 return 0UL;
635 FM3DllHandle = hModule;
636
637 DosError(FERR_DISABLEHARDERR);
638 /* strings here to prevent multiple occurences in DLL */
639 FM2Str = "FM/2";
640 FM3Str = "FM/3";
641 NullStr = "";
642 Default = "DEFAULT";
643 Settings = "SETTINGS";
644 WPProgram = "WPProgram";
645 FM3Folder = "<FM3_Folder>";
646 FM3Tools = "<FM3_Tools>";
647 DRM_OS2FILE = "DRM_OS2FILE";
648 DRM_FM2ARCMEMBER = "DRM_FM2ARCMEMBER";
649 DRF_FM2ARCHIVE = "DRF_FM2ARCHIVE";
650 DRMDRFLIST = "<DRM_OS2FILE,DRF_UNKNOWN>,"
651 "<DRM_DISCARD,DRF_UNKNOWN>," "<DRM_PRINT,DRF_UNKNOWN>";
652 DRMDRFOS2FILE = "<DRM_OS2FILE,DRF_UNKNOWN>";
653 DRMDRFFM2ARC = "<DRM_FM2ARCMEMBER,DRF_FM2ARCHIVE>";
654 DRM_FM2INIRECORD = "DRM_FM2INIRECORD";
655 DRF_FM2INI = "DRF_FM2INI";
656 SUBJECT = ".SUBJECT";
657 LONGNAME = ".LONGNAME";
658 HPFS = "HPFS";
659 JFS = "JFS";
660 CDFS = "CDFS";
661 ISOFS = "ISOFS";
662 FAT32 = "FAT32";
663 HPFS386 = "HPFS386";
664 CBSIFS = "CBSIFS";
665 NDFS32 = "NDFS32";
666 RAMFS = "RAMFS";
667 NTFS = "NTFS";
668 PCSZ_ARCHIVERBB2 = "ARCHIVER.BB2";
669 PCSZ_ASSOCDAT = "ASSOC.DAT";
670 PCSZ_CMDLINESDAT = "CMDLINES.DAT";
671 PCSZ_CMDMINIDAT = "CMDMINI.DAT";
672 PCSZ_COMMANDSDAT = "COMMANDS.DAT";
673 PCSZ_FILTERSDAT = "FILTERS.DAT";
674 PCSZ_GREPMASKDAT = "GREPMASK.DAT";
675 PCSZ_PATTERNSDAT = "PATTERNS.DAT";
676 PCSZ_RESOURCEDAT = "RESOURCE.DAT";
677 PCSZ_QUICKTLSDAT = "QUICKTLS.DAT";
678 PCSZ_FM3TOOLSDAT = "FM3TOOLS.DAT";
679 PCSZ_USERDIRSDAT = "USERDIRS.DAT";
680 PCSZ_FM2PLAYEXE = "FM2PLAY.EXE";
681 PCSZ_FM2PLAYTEMP = "$FM2PLAY.$$$";
682 FNT_6HELVETICA = "6.Helvetica";
683 FNT_8HELVETICA = "8.Helvetica";
684 FNT_8HELVETICABOLD = "8.Helvetica.Bold";
685 FNT_10SYSTEMMONOTEXT = "10.System Monospaced";
686 FNT_10SYSTEMPROPORT = "10.System Proportional";
687 FNT_2SYSTEMVIO = "2.System VIO";
688 FNT_4SYSTEMVIO = "4.System VIO";
689 FNT_10SYSTEMVIO = "10.System VIO";
690 FNT_8TIMESNEWROMAN = "8.Times New Roman";
691 PCSZ_DOSCREATEMUTEXSEM = "DosCreateMutexSem";
692 PCSZ_DOSDUPHANDLE = "DosDupHandle";
693 PCSZ_DOSGETINFOBLOCKS = "DosGetInfoBlocks";
694 PCSZ_DOSQUERYPATHINFO = "DosQueryPathInfo";
695 PCSZ_DOSSEARCHPATH = "DosSearchPath";
696 PCSZ_WINCREATEWINDOW = "WinCreateWindow";
697 PCSZ_WINLOADACCELTABLE = "WinLoadAccelTable";
698 PCSZ_WINSETACCELTABLE = "WinSetAccelTable";
699 PCSZ_INIQUERYPRFTEXT = "PrfQueryProfile";
700 PCSZ_PRFQUERYPROFILEDATA = "PrfQueryProfileData";
701 PCSZ_PRFQUERYPROFILESIZE = "PrfQueryProfileSize";
702 PCSZ_PRFQUERYPROFILESTRING = "PrfQueryProfileString";
703 PCSZ_FILLDIRQCURERRTEXT = "DosQCurDisk";
704 PCSZ_NODATA = "No Data";
705 PCSZ_STARDOTEXE = "*.EXE";
706 PCSZ_STARDOTINI = "*.INI";
707 PCSZ_STARDOTLST = "*.LST";
708 PCSZ_STARDOTPMD = "*.PMD";
709 PCSZ_STARDOTTXT = "*.TXT";
710 PCSZ_DOTEXE = ".EXE";
711 PCSZ_DOTCOM = ".COM";
712 PCSZ_DOTCMD = ".CMD";
713 PCSZ_DOTBTM = ".BTM";
714 PCSZ_DOTBAT = ".BAT";
715 PCSZ_DOTLST = ".LST";
716 PCSZ_DOTTLS = ".TLS";
717 PCSZ_DOTHLP = ".HLP";
718 PCSZ_DOTINF = ".INF";
719 PCSZ_DOTMP3 = ".MP3";
720 PCSZ_DOTOGG = ".OGG";
721 PCSZ_DOTFLAC = ".FLAC";
722 PCSZ_DOTJPEG = ".JPEG";
723 PCSZ_DOTJPG = ".JPG";
724 PCSZ_DOTICO = ".ICO";
725 PCSZ_DOTPTR = ".PTR";
726 PCSZ_DOTBB2 = ".BB2";
727 PCSZ_DOTBMP = ".BMP";
728 PCSZ_DOTCOMMENTS = ".COMMENTS";
729 PCSZ_PATH = "PATH";
730 WC_OBJECTWINDOW = "WC_OBJECTWINDOW";
731 WC_BUBBLE = "WC_BUBBLE";
732 WC_TOOLBUTTONS = "WC_TOOLBUTTONS";
733 WC_DRIVEBUTTONS = "WC_DRIVEBUTTONS";
734 WC_DIRCONTAINER = "WC_DIRCONTAINER";
735 WC_DIRSTATUS = "WC_DIRSTATUS";
736 WC_TREECONTAINER = "WC_TREECONTAINER";
737 WC_TREEOPENBUTTON = "WC_TREEOPENBUTTON";
738 WC_TREESTATUS = "WC_TREESTATUS";
739 WC_MAINWND = "WC_MAINWND";
740 WC_MAINWND2 = "WC_MAINWND2";
741 WC_AUTOVIEW = "WC_AUTOVIEW";
742 WC_LED = "WC_LED";
743 WC_COLLECTOR = "WC_COLLECTOR";
744 WC_COLSTATUS = "WC_COLSTATUS";
745 WC_STATUS = "WC_STATUS";
746 WC_TOOLBACK = "WC_TOOLBACK";
747 WC_DRIVEBACK = "WC_DRIVEBACK";
748 WC_ARCCONTAINER = "WC_ARCCONTAINER";
749 WC_ARCSTATUS = "WC_ARCSTATUS";
750 WC_MLEEDITOR = "WC_MLEEDITOR";
751 WC_INIEDITOR = "WC_INIEDITOR";
752 WC_SEEALL = "WC_SEEALL";
753 WC_NEWVIEW = "WC_NEWVIEW";
754 WC_SEESTATUS = "WC_SEESTATUS";
755 WC_VIEWSTATUS = "WC_VIEWSTATUS";
756 WC_ERRORWND = "WC_ERRORWND";
757 WC_MINITIME = "WC_MINITIME";
758 WC_DATABAR = "WC_DATABAR";
759
760 /* end of strings */
761 memset(&RGBBLACK, 0, sizeof(RGB2));
762 RGBGREY.bRed = RGBGREY.bGreen = RGBGREY.bBlue = (BYTE)204;
763 RGBGREY.fcOptions = 0;
764 FM3UL = *(ULONG *)FM3Str;
765 DEBUG_STRING = "Debug -- please report to author";
766 break;
767 case 1:
768 StopPrinting = 1;
769 if (fmprof)
770 PrfCloseProfile(fmprof);
771 DosError(FERR_ENABLEHARDERR);
772 _CRT_term();
773 break;
774 default:
775 return 0UL;
776 }
777 return 1UL;
778}
779
780#endif // __IBMC__
781
782VOID APIENTRY DeInitFM3DLL(ULONG why)
783{
784 /* cleanup */
785 static CHAR s[CCHMAXPATH];
786 CHAR *enddir, szTempFile[CCHMAXPATH];
787 HDIR search_handle;
788 ULONG num_matches;
789 FILEFINDBUF3 ffb;
790
791 StopTimer();
792 StopPrinting = 1;
793
794 if (LogFileHandle)
795 fclose(LogFileHandle);
796
797 if (fmprof) {
798 PrfCloseProfile(fmprof);
799 fmprof = (HINI) 0;
800 if (fIniExisted) {
801 DosError(FERR_DISABLEHARDERR);
802 DosCopy("FM3.INI", "FM3INI.BAK", DCPY_EXISTING);
803 }
804 }
805
806 if (fToolsChanged)
807 save_tools(NULL);
808
809# ifdef __IBMC__
810 _fcloseall();
811# else // __WATCOMC__
812 fcloseall();
813# endif
814
815 save_dir(s);
816 if (s[strlen(s) - 1] != '\\')
817 strcat(s, "\\");
818 enddir = &s[strlen(s)];
819 if (*ArcTempRoot) {
820 strcat(s, ArcTempRoot);
821 strcat(s, "*");
822 search_handle = HDIR_CREATE;
823 num_matches = 1L;
824 if (!DosFindFirst(s,
825 &search_handle,
826 FILE_NORMAL | FILE_DIRECTORY |
827 FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN |
828 FILE_ARCHIVED,
829 &ffb, sizeof(ffb), &num_matches, FIL_STANDARD)) {
830 do {
831 strcpy(enddir, ffb.achName);
832 if (ffb.attrFile & FILE_DIRECTORY) {
833 wipeallf("%s\\*", s);
834 DosDeleteDir(s);
835 }
836 else
837 unlinkf("%s", s);
838 }
839 while (!DosFindNext(search_handle,
840 &ffb, sizeof(ffb), &num_matches));
841 DosFindClose(search_handle);
842 }
843 }
844 if (pTmpDir)
845 strcpy(s, pTmpDir);
846 else
847 strcpy(s, pFM2SaveDirectory);
848 if (s[strlen(s) - 1] != '\\')
849 strcat(s, "\\");
850 enddir = &s[strlen(s)];
851 strcat(s, "$FM2LI$T.");
852 strcat(s, "???");
853 search_handle = HDIR_CREATE;
854 num_matches = 1;
855 if (!DosFindFirst(s,
856 &search_handle,
857 FILE_NORMAL | FILE_DIRECTORY |
858 FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN |
859 FILE_ARCHIVED,
860 &ffb, sizeof(ffb), &num_matches, FIL_STANDARD)) {
861 do {
862 if (!(ffb.attrFile & FILE_DIRECTORY)) {
863 strcpy(enddir, ffb.achName);
864 unlinkf("%s", s);
865 }
866 }
867 while (!DosFindNext(search_handle,
868 &ffb, sizeof(ffb), &num_matches));
869 DosFindClose(search_handle);
870 }
871 BldFullPathName(szTempFile, pTmpDir, PCSZ_FM2PLAYTEMP);
872 DosForceDelete(szTempFile);
873 if (pTmpDir) {
874 wipeallf("%s\\*", pTmpDir);
875 DosDeleteDir(pTmpDir);
876 }
877 EndNote();
878 if (FM3ModHandle)
879 DosFreeModule(FM3ModHandle);
880
881 DosExitList(EXLST_REMOVE, DeInitFM3DLL);
882}
883
884BOOL InitFM3DLL(HAB hab, int argc, char **argv)
885{
886 /*
887 * this function should be called by any application using this DLL right
888 * after setting up a message queue
889 */
890
891 CLASSINFO clinfo;
892 APIRET rc;
893 APIRET rcl;
894 APIRET rcq;
895 PFN pfnResVersion;
896 ULONG RVMajor;
897 ULONG RVMinor;
898 ULONG ret;
899 FILESTATUS3 fs3;
900 PSZ env;
901 CHAR dllfile[CCHMAXPATH];
902 ULONG size;
903
904 strcpy(dllfile, "FM3RES");
905 env = getenv("FM3INI");
906 if (env) {
907 DosError(FERR_DISABLEHARDERR);
908 rc = DosQueryPathInfo(env, FIL_STANDARD, &fs3, sizeof(fs3));
909 if (!rc) {
910 if (fs3.attrFile & FILE_DIRECTORY) {
911 BldFullPathName(dllfile, env, "FM3RES"); // 23 Aug 07 SHL
912 DosError(FERR_DISABLEHARDERR);
913 if (DosQueryPathInfo(dllfile, FIL_STANDARD, &fs3, sizeof(fs3)))
914 strcpy(dllfile, "FM3RES");
915 }
916 }
917 }
918
919 rcl = DosLoadModule(NULL, 0, dllfile, &FM3ModHandle);
920 if (rcl) {
921 saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
922 HWND_DESKTOP,
923 GetPString(IDS_ERRORTEXT), GetPString(IDS_FM3RESERROR1TEXT));
924 return FALSE;
925 }
926
927 rc = DosExitList(EXLST_ADD, DeInitFM3DLL);
928 if (rc) {
929 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
930 "DosExitList");
931 }
932
933 rcq = DosQueryProcAddr(FM3ModHandle, 1, "ResVersion", &pfnResVersion);
934 if (!rcq)
935 ret = pfnResVersion(&RVMajor, &RVMinor);
936 else {
937 ret = 0;
938 RVMajor = 0;
939 RVMinor = 0;
940 }
941
942 if (RVMajor < VERMAJOR || (RVMajor == VERMAJOR && RVMinor < VERMINOR)) {
943 saymsg(MB_ENTER,
944 HWND_DESKTOP,
945 GetPString(IDS_ERRORTEXT),
946 GetPString(IDS_FM3RESERROR2TEXT),
947 !rcq ?
948 GetPString(IDS_FM3RESERROR3TEXT) :
949 !rcl ?
950 GetPString(IDS_FM3RESERROR4TEXT) :
951 GetPString(IDS_FM3RESERROR5TEXT), RVMajor, RVMinor, rcl, rcq, ret);
952 return FALSE;
953 }
954
955 if (!*profile)
956 strcpy(profile, "FM3.INI");
957 mypid = getpid();
958 /* give default appname if none set by caller */
959 if (!*appname)
960 strcpy(appname, FM3Str);
961 /* save appname; may be reset below */
962 strcpy(realappname, appname);
963 if (!strcmp(appname, FM3Str))
964 DosSetMaxFH(100);
965 else if (!strcmp(appname, "VDir") ||
966 !strcmp(appname, "VTree") ||
967 !strcmp(appname, "VCollect") ||
968 !strcmp(appname, "SEEALL") || !strcmp(appname, "FM/4"))
969 DosSetMaxFH(60);
970 else
971 DosSetMaxFH(40);
972
973 if (DosQuerySysInfo(QSV_VERSION_MAJOR,
974 QSV_VERSION_MINOR,
975 OS2ver,
976 sizeof(OS2ver))) {
977 OS2ver[0] = 2;
978 OS2ver[1] = 1;
979 }
980
981 // set up default root names for temp file storage and archive goodies
982 env = getenv("TMP");
983 if (env == NULL)
984 env = getenv("TEMP");
985 if (env != NULL) {
986 DosError(FERR_DISABLEHARDERR);
987 rc = DosQueryPathInfo(env, FIL_STANDARD, &fs3, sizeof(fs3));
988 if (!rc) {
989 CHAR *enddir, *p, szTempName[CCHMAXPATH], temp[CCHMAXPATH];
990 FILEFINDBUF3 ffb;
991 HDIR search_handle;
992 ULONG num_matches, ul;
993
994 strcpy(szTempName, env);
995 if (szTempName[strlen(szTempName) - 1] != '\\')
996 strcat(szTempName, "\\");
997 enddir = &szTempName[strlen(szTempName)];
998 strcat(szTempName, "$FM2????.");
999 strcat(szTempName, "???");
1000 search_handle = HDIR_CREATE;
1001 num_matches = 1;
1002 if (!DosFindFirst(szTempName,
1003 &search_handle,
1004 FILE_NORMAL | FILE_DIRECTORY |
1005 FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN |
1006 FILE_ARCHIVED,
1007 &ffb, sizeof(ffb), &num_matches, FIL_STANDARD)) {
1008 do {
1009 strcpy(enddir, ffb.achName);
1010 p = strrchr(szTempName, '.');
1011 if (p) {
1012 p++;
1013 ul = strtol(p, &p + 2, 16);
1014 GetDosPgmName(ul, temp);
1015 if (!strstr(temp, "FM/2") &&
1016 !strstr(temp, "AV/2")) {
1017 wipeallf("%s\\*", szTempName);
1018 DosDeleteDir(szTempName);
1019 }
1020 }
1021 }
1022 while (!DosFindNext(search_handle,
1023 &ffb, sizeof(ffb), &num_matches));
1024 DosFindClose(search_handle);
1025 }
1026 if (fs3.attrFile & FILE_DIRECTORY) {
1027 strcpy(szTempName, env);
1028 MakeTempName(szTempName, NULL, 1);
1029 rc = DosCreateDir(szTempName, 0);
1030 if (!rc)
1031 pTmpDir = xstrdup(szTempName, pszSrcFile, __LINE__); // if writable
1032 }
1033 }
1034 }
1035
1036 //Save the FM2 save directory name. This is the location of the ini, dat files etc.
1037 {
1038 CHAR temp[CCHMAXPATH];
1039 save_dir2(temp);
1040 pFM2SaveDirectory = xstrdup(temp, pszSrcFile, __LINE__);
1041 }
1042 // Check free space on TMP and FM2 Save drives
1043 {
1044 ullTmpSpaceNeeded = 5120000;
1045 if (pTmpDir && CheckDriveSpaceAvail(pTmpDir, ullTmpSpaceNeeded, 0) == 1) {
1046 if (CheckDriveSpaceAvail(pFM2SaveDirectory, ullTmpSpaceNeeded, 0) == 0){
1047 ret = saymsg(MB_YESNO,
1048 HWND_DESKTOP,
1049 NullStr,
1050 GetPString(IDS_TMPDRIVESPACELIMITED),
1051 pTmpDir);
1052 if (ret == MBID_YES)
1053 pTmpDir = pFM2SaveDirectory;
1054 }
1055 else
1056 saymsg(MB_OK,
1057 HWND_DESKTOP,
1058 NullStr,
1059 GetPString(IDS_SAVETMPDRIVESPACELIMITED),
1060 pTmpDir,
1061 pFM2SaveDirectory);
1062 }
1063 else if (CheckDriveSpaceAvail(pFM2SaveDirectory, ullTmpSpaceNeeded, 0) == 1)
1064 saymsg(MB_OK,
1065 HWND_DESKTOP,
1066 NullStr,
1067 GetPString(IDS_SAVEDRIVESPACELIMITED),
1068 pFM2SaveDirectory);
1069 }
1070 BldFullPathName(ArcTempRoot, pTmpDir, fAmAV2 ? "$AV$ARC$" : "$FM$ARC$");
1071
1072 // initialize random number generator
1073 srand(time(NULL) + clock());
1074
1075 priority_bumped();
1076
1077 /* _heapmin() is done in a separate thread -- start it */
1078 if (xbeginthread(HeapThread,
1079 32768,
1080 MPVOID,
1081 pszSrcFile,
1082 __LINE__) == -1) {
1083 return FALSE;
1084 }
1085
1086 /* timer messages are sent from a separate thread -- start it */
1087 if (!StartTimer()) {
1088 Runtime_Error(pszSrcFile, __LINE__,
1089 GetPString(IDS_COULDNTSTARTTHREADTEXT));
1090 return FALSE;
1091 }
1092
1093 /* Are we the workplace shell? */
1094 env = getenv("WORKPLACE_PROCESS");
1095 fWorkPlace = env != NULL &&
1096 (stricmp(env, "YES") == 0 || atoi(env) == 1);
1097
1098 if ((!strchr(profile, '\\') && !strchr(profile, ':')) ||
1099 !(fmprof = PrfOpenProfile((HAB)0, profile)))
1100 {
1101 /* figure out where to put INI file... */
1102 CHAR inipath[CCHMAXPATH];
1103
1104 DosError(FERR_DISABLEHARDERR);
1105 strcpy(HomePath, pFM2SaveDirectory);
1106 DosError(FERR_DISABLEHARDERR);
1107 memset(driveserial, -1, sizeof(driveserial));
1108 *inipath = 0;
1109 env = getenv("FM3INI");
1110 if (env) {
1111 strcpy(inipath, env);
1112 DosError(FERR_DISABLEHARDERR);
1113 rc = DosQueryPathInfo(inipath, FIL_STANDARD, &fs3, sizeof(fs3));
1114 if (!rc) {
1115 if (fs3.attrFile & FILE_DIRECTORY)
1116 BldFullPathName(inipath, inipath, profile);
1117 }
1118 }
1119 if (!env) {
1120 env = searchpath(profile);
1121 if (!env)
1122 env = profile;
1123 strcpy(inipath, env);
1124 }
1125
1126 /* in some odd cases the INI file can get set to readonly status */
1127 /* here we test it and reset the readonly bit if necessary */
1128 if (!*inipath)
1129 strcpy(inipath, profile);
1130 DosError(FERR_DISABLEHARDERR);
1131 // fixme to check for backup if ini not found GKY 1-30-09
1132 rc = DosQueryPathInfo(inipath, FIL_STANDARD, &fs3, sizeof(fs3));
1133 if (rc) {
1134 if (rc == ERROR_FILE_NOT_FOUND)
1135 fWantFirstTimeInit = TRUE;
1136 }
1137 else { //Check the ini file header and restore from backup if corupted
1138 if (!CheckFileHeader(inipath, "\xff\xff\xff\xff\x14\x00\x00\x00", 0L)) {
1139 saymsg(MB_ENTER,HWND_DESKTOP, GetPString(IDS_DEBUG_STRING),
1140 GetPString(IDS_INIFAILURETEXT));
1141 DosCopy("FM3.INI", "FM3INI.BAD", DCPY_EXISTING);
1142 DosCopy("FM3INI.BAK", "FM3.INI", DCPY_EXISTING);
1143 if (!CheckFileHeader(inipath, "\xff\xff\xff\xff\x14\x00\x00\x00", 0L)) {
1144 DosCopy("FM3.INI", "FM3INI2.BAD", DCPY_EXISTING);
1145 fWantFirstTimeInit = TRUE;
1146 }
1147 }
1148 if (!fWantFirstTimeInit) {
1149 fIniExisted = TRUE;
1150 if (fs3.attrFile & (FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM)) {
1151 fs3.attrFile &= ~(FILE_READONLY | FILE_HIDDEN | FILE_SYSTEM);
1152 rc = xDosSetPathInfo(inipath, FIL_STANDARD, &fs3, sizeof(fs3), 0);
1153 if (rc) {
1154 Dos_Error(MB_ENTER, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
1155 GetPString(IDS_INIREADONLYTEXT), inipath);
1156 }
1157 }
1158 }
1159 }
1160 fmprof = PrfOpenProfile((HAB)0, inipath);
1161 if (!fmprof) {
1162 strcpy(inipath, "FM3.INI");
1163 fmprof = PrfOpenProfile((HAB)0, inipath);
1164 }
1165
1166 // 10 Jan 08 SHL fixme to do first time if new ini
1167 // 10 Jan 08 SHL post UM_FIRSTTIME to main window
1168 if (!fmprof) {
1169 Win_Error(NULLHANDLE, NULLHANDLE, pszSrcFile, __LINE__,
1170 "PrfOpenProfile");
1171 return FALSE;
1172 }
1173 }
1174
1175 ArgDriveFlags(argc, argv);
1176 FillInDriveFlags(NULL);
1177
1178 FindSwapperDat();
1179
1180 size = sizeof(BOOL);
1181 PrfQueryProfileData(fmprof,
1182 FM3Str,
1183 "SeparateParms",
1184 &fSeparateParms,
1185 &size);
1186 if (!fSeparateParms)
1187 strcpy(appname, FM3Str);
1188
1189 /* start help */
1190 memset(&hini, 0, sizeof(HELPINIT));
1191 hini.cb = sizeof(HELPINIT);
1192 hini.ulReturnCode = 0;
1193 hini.pszTutorialName = NULL;
1194 hini.phtHelpTable = (PHELPTABLE) MAKELONG(ID_HELPTABLE, 0xffff);
1195 hini.hmodAccelActionBarModule = (HMODULE) 0;
1196 hini.idAccelTable = 0;
1197 hini.idActionBar = 0;
1198 hini.pszHelpWindowTitle = (PSZ)GetPString(IDS_FM2HELPTITLETEXT);
1199 hini.fShowPanelId = CMIC_HIDE_PANEL_ID;
1200 hini.pszHelpLibraryName = "FM3.HLP";
1201 hwndHelp = WinCreateHelpInstance(hab, &hini);
1202 if (!hwndHelp) {
1203 static CHAR helppath[CCHMAXPATH]; // fixme to be local?
1204
1205 env = getenv("FM3INI");
1206 if (env) {
1207 strcpy(helppath, env);
1208 DosError(FERR_DISABLEHARDERR);
1209 rc = DosQueryPathInfo(helppath, FIL_STANDARD, &fs3, sizeof(fs3));
1210 if (!rc) {
1211 if (fs3.attrFile & FILE_DIRECTORY) {
1212 BldFullPathName(helppath, helppath, "FM3.HLP");
1213 hini.pszHelpLibraryName = helppath;
1214 hwndHelp = WinCreateHelpInstance(hab, &hini);
1215 }
1216 }
1217 }
1218 }
1219 if (!hwndHelp) {
1220 saymsg(MB_ENTER | MB_ICONEXCLAMATION,
1221 HWND_DESKTOP,
1222 GetPString(IDS_FM2TROUBLETEXT),
1223 GetPString(IDS_CANTLOADHELPTEXT),
1224 GetPString(IDS_NOHELPACCEPTTEXT));
1225 }
1226
1227 // a couple of default window procs so we don't have to look them up later
1228 if (WinQueryClassInfo(hab, WC_CONTAINER, &clinfo))
1229 PFNWPCnr = clinfo.pfnWindowProc;
1230 // saymsg(MB_ENTER,HWND_DESKTOP,"Container flags:","%08lx",clinfo.flClassStyle);
1231 if (WinQueryClassInfo(hab, WC_FRAME, &clinfo))
1232 PFNWPFrame = clinfo.pfnWindowProc;
1233 // saymsg(MB_ENTER,HWND_DESKTOP,"Frame flags:","%08lx",clinfo.flClassStyle);
1234 if (WinQueryClassInfo(hab, WC_BUTTON, &clinfo))
1235 PFNWPButton = clinfo.pfnWindowProc;
1236 // saymsg(MB_ENTER,HWND_DESKTOP,"Button flags:","%08lx",clinfo.flClassStyle);
1237 if (WinQueryClassInfo(hab, WC_STATIC, &clinfo))
1238 PFNWPStatic = clinfo.pfnWindowProc;
1239 // saymsg(MB_ENTER,HWND_DESKTOP,"Static flags:","%08lx",clinfo.flClassStyle);
1240 if (WinQueryClassInfo(hab, WC_MLE, &clinfo))
1241 PFNWPMLE = clinfo.pfnWindowProc;
1242 // saymsg(MB_ENTER,HWND_DESKTOP,"MLE flags:","%08lx",clinfo.flClassStyle);
1243 if (!PFNWPCnr || !PFNWPFrame || !PFNWPButton || !PFNWPStatic || !PFNWPMLE) {
1244 Runtime_Error(pszSrcFile, __LINE__, "WinQueryClassInfo");
1245 return FALSE;
1246 }
1247
1248 /* register window classes we use */
1249 WinRegisterClass(hab,
1250 WC_MAINWND,
1251 MainWndProc,
1252 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 8);
1253 WinRegisterClass(hab,
1254 WC_MAINWND2,
1255 MainWndProc2,
1256 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 4);
1257 WinRegisterClass(hab,
1258 WC_TREECONTAINER,
1259 TreeClientWndProc,
1260 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 2);
1261 WinRegisterClass(hab,
1262 WC_DIRCONTAINER,
1263 DirClientWndProc,
1264 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 2);
1265 WinRegisterClass(hab,
1266 WC_COLLECTOR,
1267 CollectorClientWndProc,
1268 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 2);
1269 WinRegisterClass(hab,
1270 WC_ARCCONTAINER,
1271 ArcClientWndProc,
1272 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 2);
1273 WinRegisterClass(hab,
1274 WC_MLEEDITOR,
1275 MLEEditorProc,
1276 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 2);
1277 WinRegisterClass(hab,
1278 WC_INIEDITOR,
1279 IniProc,
1280 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID) * 2);
1281 WinRegisterClass(hab,
1282 WC_TOOLBACK,
1283 ToolBackProc,
1284 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1285 sizeof(PVOID));
1286 WinRegisterClass(hab,
1287 WC_DRIVEBACK,
1288 DriveBackProc,
1289 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1290 sizeof(PVOID));
1291 WinRegisterClass(hab,
1292 WC_SEEALL,
1293 SeeAllWndProc,
1294 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID));
1295 WinRegisterClass(hab,
1296 WC_NEWVIEW,
1297 ViewWndProc,
1298 CS_SIZEREDRAW | CS_CLIPCHILDREN, sizeof(PVOID));
1299 WinRegisterClass(hab,
1300 WC_TOOLBUTTONS,
1301 ChildButtonProc,
1302 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1303 sizeof(PVOID));
1304 WinRegisterClass(hab,
1305 WC_DRIVEBUTTONS,
1306 DriveProc,
1307 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1308 sizeof(PVOID));
1309 WinRegisterClass(hab,
1310 WC_BUBBLE,
1311 BubbleProc,
1312 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1313 sizeof(ULONG) * 2);
1314 WinRegisterClass(hab,
1315 WC_STATUS,
1316 StatusProc,
1317 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1318 sizeof(ULONG));
1319 WinRegisterClass(hab,
1320 WC_DIRSTATUS,
1321 DirTextProc,
1322 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1323 sizeof(ULONG));
1324 WinRegisterClass(hab,
1325 WC_TREESTATUS,
1326 TreeStatProc,
1327 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1328 sizeof(ULONG));
1329 WinRegisterClass(hab,
1330 WC_ARCSTATUS,
1331 ArcTextProc,
1332 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1333 sizeof(ULONG));
1334 WinRegisterClass(hab,
1335 WC_COLSTATUS,
1336 CollectorTextProc,
1337 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1338 sizeof(ULONG));
1339 WinRegisterClass(hab,
1340 WC_SEESTATUS,
1341 SeeStatusProc,
1342 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1343 sizeof(ULONG));
1344 WinRegisterClass(hab,
1345 WC_VIEWSTATUS,
1346 ViewStatusProc,
1347 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1348 sizeof(ULONG));
1349 WinRegisterClass(hab,
1350 WC_ERRORWND,
1351 NotifyWndProc,
1352 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1353 sizeof(PVOID));
1354 WinRegisterClass(hab,
1355 WC_MINITIME,
1356 MiniTimeProc,
1357 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1358 sizeof(PVOID) * 2);
1359 WinRegisterClass(hab,
1360 WC_DATABAR,
1361 DataProc, CS_SIZEREDRAW, sizeof(PVOID));
1362 WinRegisterClass(hab,
1363 WC_TREEOPENBUTTON,
1364 OpenButtonProc,
1365 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1366 sizeof(PVOID));
1367 WinRegisterClass(hab,
1368 WC_AUTOVIEW,
1369 AutoViewProc,
1370 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1371 sizeof(PVOID));
1372 WinRegisterClass(hab,
1373 WC_LED,
1374 LEDProc,
1375 CS_SYNCPAINT | CS_SIZEREDRAW | CS_PARENTCLIP,
1376 sizeof(PVOID));
1377
1378 if (DosCreateMutexSem(NULL, &hmtxFM2Globals, 0L, FALSE))
1379 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
1380 PCSZ_DOSCREATEMUTEXSEM);
1381 if (DosCreateMutexSem(NULL, &hmtxFM2Delete, 0L, FALSE))
1382 Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
1383 PCSZ_DOSCREATEMUTEXSEM);
1384
1385 /*
1386 * set some defaults (note: everything else automatically initialized
1387 * to 0)
1388 */
1389 dsDirCnrDefault.detailssize = dsDirCnrDefault.detailsea = dsDirCnrDefault.detailslwdate =
1390 dsDirCnrDefault.detailslwtime = dsDirCnrDefault.detailsattr = dsDirCnrDefault.detailsicon =
1391 fAutoTile = fConfirmDelete = fLoadSubject = fUnHilite =
1392 fLoadLongnames = fToolbar = fSaveState = fGuessType = fToolbarHelp =
1393 fAutoAddDirs = fUseNewViewer = fDataToFore = fDataShowDrives =
1394 fSplitStatus = fDragndropDlg = fQuickArcFind = fKeepCmdLine =
1395 fMoreButtons = fDrivebar = fCollapseFirst = fSwitchTree =
1396 fSwitchTreeExpand = fNoSearch = fCustomFileDlg = fOtherHelp =
1397 fSaveMiniCmds = fUserComboBox = fFM2Deletes = fConfirmTarget =
1398 fShowTarget = fDrivebarHelp = fCheckMM = fInitialDriveScan =
1399 fEjectRemovableScan = fRScanLocal = TRUE;
1400 ulCnrType = CCS_EXTENDSEL;
1401 FilesToGet = FILESTOGET_MIN;
1402 MaxComLineStrg = MAXCOMLINESTRGDEFAULT;
1403 AutoviewHeight = 48;
1404 //strcpy(printer, "PRN");
1405 prnwidth = 80;
1406 prnlength = 66;
1407 prntmargin = 6;
1408 prnbmargin = 6;
1409 prnlmargin = 6;
1410 prnrmargin = 3;
1411 prnspacing = 1;
1412 prntabspaces = 8;
1413 CollectorsortFlags = sortFlags = SORT_DIRSFIRST;
1414 ullDATFileSpaceNeeded = 10000;
1415
1416 //Get default Country info
1417 {
1418 COUNTRYCODE Country = {0};
1419 ULONG ulInfoLen = 0;
1420 COUNTRYINFO CtryInfo = {0};
1421
1422 if (!DosQueryCtryInfo(sizeof(CtryInfo), &Country, &CtryInfo, &ulInfoLen)) {
1423 *ThousandsSeparator = CtryInfo.szThousandsSeparator[0];
1424 strcpy(DateSeparator, CtryInfo.szDateSeparator);
1425 strcpy(TimeSeparator, CtryInfo.szTimeSeparator);
1426 ulDateFmt = CtryInfo.fsDateFmt;
1427 ulTimeFmt = CtryInfo.fsTimeFmt;
1428 //DbgMsg(pszSrcFile, __LINE__, "Date Fmt %x", ulDateFmt);
1429 }
1430 else {
1431 strcpy(ThousandsSeparator, ",");
1432 strcpy(DateSeparator, "/");
1433 strcpy(TimeSeparator, ":");
1434 ulDateFmt = 0;
1435 ulTimeFmt = 0;
1436 }
1437 }
1438 { // Check for the existance of various partitioning tools to set up menu items
1439 CHAR *FullPath;
1440 ULONG ulAppType;
1441
1442 FullPath = searchapath(PCSZ_PATH, PCSZ_LVMGUICMD);
1443 if (*FullPath)
1444 fLVMGui = TRUE;
1445 if (!DosQueryAppType(PCSZ_DFSOS2EXE, &ulAppType))
1446 fDFSee = TRUE;
1447 if (!DosQueryAppType(PCSZ_MINILVMEXE, &ulAppType))
1448 fMiniLVM = TRUE;
1449 if (!DosQueryAppType(PCSZ_FDISKPMEXE, &ulAppType))
1450 fFDisk = TRUE;
1451 if (!DosQueryAppType(PCSZ_LVMEXE, &ulAppType))
1452 fLVM = TRUE;
1453
1454 // Check to see if we are running protect only
1455 if (!DosQueryAppType(GetCmdSpec(TRUE), &ulAppType)) {
1456 ret = runemf2(SEPARATE | WINDOWED | BACKGROUND | MINIMIZED,
1457 (HWND) 0, pszSrcFile, __LINE__, NULL, NULL,
1458 "%s /C exit", GetCmdSpec(TRUE));
1459 if (ret == ERROR_SMG_INVALID_PROGRAM_TYPE)
1460 fProtectOnly = TRUE;
1461 }
1462 else
1463 fProtectOnly = TRUE;
1464 }
1465
1466 // load preferences from profile (INI) file
1467 size = sizeof(ULONG);
1468 PrfQueryProfileData(fmprof, appname, "MaxComLineStrg", &MaxComLineStrg, &size);
1469 // Give user one chance to reset the default command line length to 1024 (4os2's unexpanded max)
1470 if (MaxComLineStrg == 2048) {
1471 BOOL MaxComLineChecked = FALSE;
1472
1473 size = sizeof(BOOL);
1474 PrfQueryProfileData(fmprof, appname, "MaxComLineChecked", &MaxComLineChecked, &size);
1475 if (!MaxComLineChecked) {
1476 ret = saymsg(MB_YESNO,
1477 HWND_DESKTOP,
1478 NullStr,
1479 GetPString(IDS_CHANGECMDLINELENGTHDEFAULT));
1480 if (ret == MBID_YES)
1481 MaxComLineStrg = 1024;
1482 MaxComLineChecked = TRUE;
1483 PrfWriteProfileData(fmprof, appname, "MaxComLineChecked", &MaxComLineChecked, sizeof(BOOL));
1484 }
1485 }
1486 if (MaxComLineStrg < CMDLNLNGTH_MIN)
1487 MaxComLineStrg = CMDLNLNGTH_MIN;
1488 else if (MaxComLineStrg > CMDLNLNGTH_MAX)
1489 MaxComLineStrg = CMDLNLNGTH_MAX;
1490 editor = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1491 if (!editor)
1492 return 0; //already complained
1493 viewer = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1494 if (!viewer)
1495 return 0; //already complained
1496 virus = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1497 if (!virus)
1498 return 0; //already complained
1499 compare = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1500 if (!compare)
1501 return 0; //already complained
1502 binview = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1503 if (!binview)
1504 return 0; //already complained
1505 bined = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1506 if (!bined)
1507 return 0; //already complained
1508 dircompare = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1509 if (!dircompare)
1510 return 0; //already complained
1511 ftprun = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1512 if (!ftprun)
1513 return 0; //already complained
1514 httprun = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1515 if (!httprun)
1516 return 0; //already complained
1517 mailrun = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1518 if (!mailrun)
1519 return 0; //already complained
1520 pszTreeEnvVarList = xmallocz(MaxComLineStrg, pszSrcFile, __LINE__);
1521 if (!pszTreeEnvVarList)
1522 return 0; //already complained
1523 size = sizeof(BOOL);
1524 PrfQueryProfileData(fmprof, appname, "ShowTarget", &fShowTarget, &size);
1525 size = sizeof(BOOL);
1526 PrfQueryProfileData(fmprof, appname, "CheckMM", &fCheckMM, &size);
1527 size = sizeof(BOOL);
1528 PrfQueryProfileData(fmprof, appname, "ChangeTarget", &fChangeTarget, &size);
1529 size = sizeof(BOOL);
1530 PrfQueryProfileData(fmprof, appname, "ConfirmTarget", &fConfirmTarget, &size);
1531 size = sizeof(BOOL);
1532 PrfQueryProfileData(fmprof, FM3Str, "CustomFileDlg", &fCustomFileDlg, &size);
1533 size = sizeof(BOOL);
1534 PrfQueryProfileData(fmprof, FM3Str, "SaveMiniCmds", &fSaveMiniCmds, &size);
1535 size = sizeof(BOOL);
1536 PrfQueryProfileData(fmprof, appname, "SaveBigCmds", &fSaveBigCmds, &size);
1537 size = sizeof(BOOL);
1538 PrfQueryProfileData(fmprof, appname, "NoFoldMenu", &fNoFoldMenu, &size);
1539 size = sizeof(BOOL);
1540 PrfQueryProfileData(fmprof, FM3Str, "ThreadNotes", &fThreadNotes, &size);
1541 size = sizeof(BOOL);
1542 PrfQueryProfileData(fmprof, FM3Str, "Prnpagenums", &prnpagenums, &size);
1543 size = sizeof(BOOL);
1544 PrfQueryProfileData(fmprof, FM3Str, "Prnalt", &prnalt, &size);
1545 size = sizeof(BOOL);
1546 PrfQueryProfileData(fmprof, FM3Str, "Prnformat", &prnformat, &size);
1547 size = sizeof(BOOL);
1548 PrfQueryProfileData(fmprof, FM3Str, "Prnformfeedbefore", &prnformfeedbefore, &size);
1549 size = sizeof(BOOL);
1550 PrfQueryProfileData(fmprof, FM3Str, "Prnformfeedafter",&prnformfeedafter, &size);
1551 size = sizeof(ULONG);
1552 PrfQueryProfileData(fmprof, FM3Str, "Prntabspaces", &prntabspaces, &size);
1553 size = sizeof(ULONG);
1554 PrfQueryProfileData(fmprof, FM3Str, "Prnwidth", &prnwidth, &size);
1555 size = sizeof(ULONG);
1556 PrfQueryProfileData(fmprof, FM3Str, "Prnlength", &prnlength, &size);
1557 size = sizeof(ULONG);
1558 PrfQueryProfileData(fmprof, FM3Str, "Prntmargin", &prntmargin, &size);
1559 size = sizeof(ULONG);
1560 PrfQueryProfileData(fmprof, FM3Str, "Prnbmargin", &prnbmargin, &size);
1561 size = sizeof(ULONG);
1562 PrfQueryProfileData(fmprof, FM3Str, "Prnlmargin", &prnlmargin, &size);
1563 size = sizeof(ULONG);
1564 PrfQueryProfileData(fmprof, FM3Str, "Prnrmargin", &prnrmargin, &size);
1565 size = sizeof(ULONG);
1566 PrfQueryProfileData(fmprof, FM3Str, "Prnspacing", &prnspacing, &size);
1567 size = sizeof(BOOL);
1568 PrfQueryProfileData(fmprof, FM3Str, "NoDead", &fNoDead, &size);
1569 size = sizeof(BOOL);
1570 PrfQueryProfileData(fmprof, FM3Str, "NoFinger", &fNoFinger, &size);
1571 size = sizeof(BOOL);
1572 PrfQueryProfileData(fmprof, FM3Str, "AlertBeepOff", &fAlertBeepOff, &size);
1573 size = sizeof(BOOL);
1574 PrfQueryProfileData(fmprof, FM3Str, "ErrorBeepOff", &fErrorBeepOff, &size);
1575 size = sizeof(BOOL);
1576 PrfQueryProfileData(fmprof, appname, "SwitchTree", &fSwitchTree, &size);
1577 size = sizeof(BOOL);
1578 PrfQueryProfileData(fmprof, appname, "SwitchTreeExpand", &fSwitchTreeExpand, &size);
1579 size = sizeof(BOOL);
1580 PrfQueryProfileData(fmprof, appname, "SwitchTreeOnFocus", &fSwitchTreeOnFocus, &size);
1581 size = sizeof(BOOL);
1582 PrfQueryProfileData(fmprof, appname, "CollapseFirst", &fCollapseFirst, &size);
1583 size = sizeof(BOOL);
1584 PrfQueryProfileData(fmprof, appname, "FilesInTree", &fFilesInTree, &size);
1585 size = sizeof(BOOL);
1586 PrfQueryProfileData(fmprof, FM3Str, "TopDir", &fTopDir, &size);
1587 size = sizeof(BOOL);
1588 PrfQueryProfileData(fmprof, FM3Str, "LookInDir", &fLookInDir, &size);
1589 PrfQueryProfileString(fmprof, appname, "DefArc", NULL, szDefArc, sizeof(szDefArc));
1590 size = sizeof(ULONG);
1591 PrfQueryProfileData(fmprof, FM3Str, "AutoviewHeight",
1592 &AutoviewHeight, &size);
1593 size = sizeof(BOOL);
1594 PrfQueryProfileData(fmprof, FM3Str, "KeepCmdLine", &fKeepCmdLine, &size);
1595 if (strcmp(realappname, "FM/4")) {
1596 size = sizeof(BOOL);
1597 PrfQueryProfileData(fmprof, FM3Str, "MoreButtons", &fMoreButtons, &size);
1598 size = sizeof(BOOL);
1599 PrfQueryProfileData(fmprof, FM3Str, "Drivebar", &fDrivebar, &size);
1600 }
1601 else
1602 fDrivebar = fMoreButtons = TRUE;
1603 size = sizeof(BOOL);
1604 PrfQueryProfileData(fmprof, appname, "NoSearch", &fNoSearch, &size);
1605 size = sizeof(BOOL);
1606 PrfQueryProfileData(fmprof, appname, "GuessType", &fGuessType, &size);
1607 size = sizeof(BOOL);
1608 PrfQueryProfileData(fmprof, appname, "ViewChild", &fViewChild, &size);
1609 size = sizeof(BOOL);
1610 PrfQueryProfileData(fmprof, appname, "ShowEnv", &fShowEnv, &size);
1611 PrfQueryProfileString(fmprof, appname, "TreeEnvVarList", "PATH;DPATH;LIBPATH;HELP;BOOKSHELF;",
1612 pszTreeEnvVarList, MaxComLineStrg);
1613 size = sizeof(BOOL);
1614 PrfQueryProfileData(fmprof, appname, "LeaveTree", &fLeaveTree, &size);
1615 size = sizeof(BOOL);
1616 PrfQueryProfileData(fmprof, FM3Str, "Comments", &fComments, &size);
1617 size = sizeof(ULONG);
1618 PrfQueryProfileData(fmprof, appname, "WS_ANIMATE", &fwsAnimate, &size);
1619 if (fwsAnimate)
1620 fwsAnimate = WS_ANIMATE;
1621 size = sizeof(BOOL);
1622 PrfQueryProfileData(fmprof, appname, "SelectedAlways", &fSelectedAlways, &size);
1623 size = sizeof(BOOL);
1624 PrfQueryProfileData(fmprof, FM3Str, "ToolbarHelp", &fToolbarHelp, &size);
1625 size = sizeof(BOOL);
1626 PrfQueryProfileData(fmprof, FM3Str, "OtherHelp", &fOtherHelp, &size);
1627 size = sizeof(BOOL);
1628 PrfQueryProfileData(fmprof, FM3Str, "DrivebarHelp", &fDrivebarHelp, &size);
1629 size = sizeof(BOOL);
1630 PrfQueryProfileData(fmprof, appname, "AutoAddDirs", &fAutoAddDirs, &size);
1631 size = sizeof(BOOL);
1632 PrfQueryProfileData(fmprof, appname, "AutoAddAllDirs", &fAutoAddAllDirs, &size);
1633 size = sizeof(BOOL);
1634 PrfQueryProfileData(fmprof, FM3Str, "UserListSwitches", &fUserListSwitches, &size);
1635 size = sizeof(BOOL);
1636 PrfQueryProfileData(fmprof, appname, "UseNewViewer", &fUseNewViewer, &size);
1637 size = sizeof(BOOL);
1638 PrfQueryProfileData(fmprof, appname, "DefaultDeletePerm", &fDefaultDeletePerm, &size);
1639 size = sizeof(BOOL);
1640 PrfQueryProfileData(fmprof, FM3Str, "ExternalINIs", &fExternalINIs, &size);
1641 size = sizeof(BOOL);
1642 PrfQueryProfileData(fmprof, FM3Str, "ExternalCollector", &fExternalCollector, &size);
1643 size = sizeof(BOOL);
1644 PrfQueryProfileData(fmprof, FM3Str, "ExternalArcboxes", &fExternalArcboxes, &size);
1645 size = sizeof(BOOL);
1646 PrfQueryProfileData(fmprof, FM3Str, "ExternalViewer", &fExternalViewer, &size);
1647 size = sizeof(BOOL);
1648 PrfQueryProfileData(fmprof, FM3Str, "UseQProcStat", &fUseQProcStat, &size);
1649 size = sizeof(BOOL);
1650 PrfQueryProfileData(fmprof, FM3Str, "UseQSysState", &fUseQSysState, &size);
1651 size = sizeof(BOOL);
1652 PrfQueryProfileData(fmprof, FM3Str, "DataMin", &fDataMin, &size);
1653 size = sizeof(BOOL);
1654 PrfQueryProfileData(fmprof, appname, "DataToFore", &fDataToFore, &size);
1655 size = sizeof(BOOL);
1656 PrfQueryProfileData(fmprof, appname, "DataShowDrives", &fDataShowDrives, &size);
1657 size = sizeof(BOOL);
1658 PrfQueryProfileData(fmprof, appname, "DataInclRemote", &fDataInclRemote, &size);
1659 size = sizeof(BOOL);
1660 PrfQueryProfileData(fmprof, FM3Str, "SplitStatus", &fSplitStatus, &size);
1661 size = sizeof(BOOL);
1662 PrfQueryProfileData(fmprof, appname, "FolderAfterExtract", &fFolderAfterExtract, &size);
1663 size = sizeof(BOOL);
1664 PrfQueryProfileData(fmprof, FM3Str, "DullDatabar", &fDullMin, &size);
1665 size = sizeof(BOOL);
1666 PrfQueryProfileData(fmprof, appname, "BlueLED", &fBlueLED, &size);
1667 size = sizeof(BOOL);
1668 PrfQueryProfileData(fmprof, appname, "ConfirmDelete", &fConfirmDelete, &size);
1669 size = sizeof(BOOL);
1670 PrfQueryProfileData(fmprof, FM3Str, "SaveState", &fSaveState, &size);
1671 if (fSaveState && (fSwitchTreeOnFocus || fSwitchTree) &&
1672 (!strcmp(realappname, FM3Str) || !strcmp(realappname, "FM/4"))) {
1673 CHAR szKey[STATE_NAME_MAX_BYTES + 80];
1674 CHAR szDir[CCHMAXPATH];
1675 ULONG drvNum;
1676
1677 if (!strcmp(realappname, "FM/4"))
1678 strcpy(szKey, "FM/4 Dir1");
1679 else
1680 sprintf(szKey, "%s.DirCnrDir.0", GetPString(IDS_SHUTDOWNSTATE));
1681 size = sizeof(szDir);
1682 if (PrfQueryProfileData(fmprof, appname, szKey, szDir, &size)) {
1683 drvNum = toupper(*szDir) - 'A';
1684 fDrivetoSkip[drvNum] = TRUE;
1685 }
1686 }
1687 size = sizeof(BOOL);
1688 PrfQueryProfileData(fmprof, appname, "SyncUpdates", &fSyncUpdates, &size);
1689 size = sizeof(BOOL);
1690 PrfQueryProfileData(fmprof, appname, "LoadSubject", &fLoadSubject, &size);
1691 size = sizeof(BOOL);
1692 PrfQueryProfileData(fmprof, appname, "UnHilite", &fUnHilite, &size);
1693 size = sizeof(BOOL);
1694 PrfQueryProfileData(fmprof, FM3Str, "TileBackwards", &fTileBackwards, &size);
1695 size = sizeof(BOOL);
1696 PrfQueryProfileData(fmprof, appname, "LoadLongname", &fLoadLongnames, &size);
1697 size = sizeof(BOOL);
1698 PrfQueryProfileData(fmprof, appname, "VerifyWrites", &fVerify, &size);
1699 DosSetVerify(fVerify);
1700 size = sizeof(BOOL);
1701 PrfQueryProfileData(fmprof, appname, "DontMoveMouse", &fDontMoveMouse, &size);
1702 size = sizeof(BOOL);
1703 PrfQueryProfileData(fmprof, appname, "NoIconsFiles", &fNoIconsFiles, &size);
1704 size = sizeof(BOOL);
1705 PrfQueryProfileData(fmprof, appname, "NoIconsDirs", &fNoIconsDirs, &size);
1706 size = sizeof(BOOL);
1707 PrfQueryProfileData(fmprof, appname, "ForceUpper", &fForceUpper, &size);
1708 size = sizeof(BOOL);
1709 PrfQueryProfileData(fmprof, appname, "ForceLower", &fForceLower, &size);
1710 size = sizeof(BOOL);
1711 PrfQueryProfileData(fmprof, FM3Str, "TextTools", &fTextTools, &size);
1712 size = sizeof(BOOL);
1713 PrfQueryProfileData(fmprof, FM3Str, "ToolTitles", &fToolTitles, &size);
1714 size = sizeof(BOOL);
1715 PrfQueryProfileData(fmprof, appname, "DoubleClickOpens", &fDCOpens, &size);
1716 size = sizeof(BOOL);
1717 PrfQueryProfileData(fmprof, appname, "LinkSetsIcon", &fLinkSetsIcon, &size);
1718 size = sizeof(INT);
1719 PrfQueryProfileData(fmprof, appname, "Sort", &sortFlags, &size);
1720 size = sizeof(INT);
1721 PrfQueryProfileData(fmprof, appname, "TreeSort", &TreesortFlags, &size);
1722 size = sizeof(INT);
1723 PrfQueryProfileData(fmprof, appname, "CollectorSort", &CollectorsortFlags, &size);
1724 PrfQueryProfileString(fmprof, appname, "Targetdir", NULL, targetdir, sizeof(targetdir));
1725 if (!IsValidDir(targetdir))
1726 *targetdir = 0;
1727 PrfQueryProfileString(fmprof, appname, "ExtractPath", NULL, extractpath, sizeof(extractpath));
1728 size = sizeof(BOOL);
1729 PrfQueryProfileData(fmprof, FM3Str, "FileNamePathCnr", &fFileNameCnrPath, &size);
1730 PrfQueryProfileString(fmprof, appname, "Printer", "PRN", printer, sizeof(printer));
1731 PrfQueryProfileString(fmprof, appname, "DirCompare", NULL, dircompare, MaxComLineStrg);
1732 PrfQueryProfileString(fmprof, appname, "Viewer", NULL, viewer, MaxComLineStrg);
1733 PrfQueryProfileString(fmprof, appname, "Editor", NULL, editor, MaxComLineStrg);
1734 PrfQueryProfileString(fmprof, appname, "BinView", NULL, binview, MaxComLineStrg);
1735 PrfQueryProfileString(fmprof, appname, "BinEd", NULL, bined, MaxComLineStrg);
1736 PrfQueryProfileString(fmprof, appname, "Compare", NULL, compare, MaxComLineStrg);
1737 PrfQueryProfileString(fmprof, appname, "Virus", NULL, virus, MaxComLineStrg);
1738 size = sizeof(BOOL);
1739 PrfQueryProfileData(fmprof, appname, "FtpRunWPSDefault", &fFtpRunWPSDefault, &size);
1740 PrfQueryProfileString(fmprof, appname, "FTPRun", NULL, ftprun, MaxComLineStrg);
1741 if (!*ftprun)
1742 fFtpRunWPSDefault = TRUE;
1743 size = sizeof(BOOL);
1744 PrfQueryProfileData(fmprof, appname, "HttpRunWPSDefault", &fHttpRunWPSDefault, &size);
1745 PrfQueryProfileString(fmprof, appname, "HTTPRun", NULL, httprun, MaxComLineStrg);
1746 if (!*httprun)
1747 fHttpRunWPSDefault = TRUE;
1748 PrfQueryProfileString(fmprof, appname, "MailRun", NULL, mailrun, MaxComLineStrg);
1749 PrfQueryProfileString(fmprof, appname, "FtpRunDir", NULL, ftprundir, sizeof(ftprundir));
1750 PrfQueryProfileString(fmprof, appname, "HttpRunDir", NULL, httprundir, sizeof(httprundir));
1751 PrfQueryProfileString(fmprof, appname, "MailRunDir", NULL, mailrundir, sizeof(mailrundir));
1752 PrfQueryProfileString(fmprof, appname, "LastToolbar", NULL, lasttoolbar, sizeof(lasttoolbar));
1753 size = sizeof(BOOL);
1754 PrfQueryProfileData(fmprof, appname, "LibPathStrictHttpRun", &fLibPathStrictHttpRun, &size);
1755 size = sizeof(BOOL);
1756 PrfQueryProfileData(fmprof, appname, "LibPathStrictFtpRun", &fLibPathStrictFtpRun, &size);
1757 size = sizeof(BOOL);
1758 PrfQueryProfileData(fmprof, appname, "LibPathStrictMailRun", &fLibPathStrictMailRun, &size);
1759 size = sizeof(BOOL);
1760 PrfQueryProfileData(fmprof, appname, "NoMailtoMailRun", &fNoMailtoMailRun, &size);
1761 size = sizeof(BOOL);
1762 PrfQueryProfileData(fmprof, appname, "FollowTree", &fFollowTree, &size);
1763 size = sizeof(BOOL);
1764 PrfQueryProfileData(fmprof, appname, "StartMaximized", &fStartMaximized, &size);
1765 if (!fStartMaximized) {
1766 size = sizeof(BOOL);
1767 PrfQueryProfileData(fmprof, appname, "StartMinimized", &fStartMinimized, &size);
1768 }
1769 size = sizeof(BOOL);
1770 PrfQueryProfileData(fmprof, appname, "DefaultCopy", &fCopyDefault, &size);
1771 size = sizeof(BOOL);
1772 PrfQueryProfileData(fmprof, appname, "IdleCopy", &fRealIdle, &size);
1773 size = sizeof(BOOL);
1774 PrfQueryProfileData(fmprof, appname, "ArcStuffVisible", &fArcStuffVisible, &size);
1775 size = sizeof(BOOL);
1776 PrfQueryProfileData(fmprof, FM3Str, "NoTreeGap", &fNoTreeGap, &size);
1777 size = sizeof(BOOL);
1778 PrfQueryProfileData(fmprof, FM3Str, "VTreeOpensWPS", &fVTreeOpensWPS, &size);
1779 size = sizeof(BOOL);
1780 PrfQueryProfileData(fmprof, appname, "RemoteBug", &fRemoteBug, &size);
1781 size = sizeof(BOOL);
1782 PrfQueryProfileData(fmprof, appname, "RScanLocal", &fRScanLocal, &size);
1783 size = sizeof(BOOL);
1784 PrfQueryProfileData(fmprof, appname, "RScanRemote", &fRScanRemote, &size);
1785 size = sizeof(BOOL);
1786 PrfQueryProfileData(fmprof, appname, "RScanVirtual", &fRScanVirtual, &size);
1787 size = sizeof(BOOL);
1788 PrfQueryProfileData(fmprof, appname, "RScanSlow", &fRScanSlow, &size);
1789 size = sizeof(BOOL);
1790 PrfQueryProfileData(fmprof, appname, "RScanNoWrite", &fRScanNoWrite, &size);
1791 size = sizeof(BOOL);
1792 PrfQueryProfileData(fmprof, appname, "EjectRemovableScan", &fEjectRemovableScan, &size);
1793 size = sizeof(BOOL);
1794 PrfQueryProfileData(fmprof, appname, "EjectCDScan", &fEjectCDScan, &size);
1795 size = sizeof(BOOL);
1796 PrfQueryProfileData(fmprof, appname, "EjectFlpyScan", &fEjectFlpyScan, &size);
1797 size = sizeof(BOOL);
1798 PrfQueryProfileData(fmprof, appname, "Drag&DropDlg", &fDragndropDlg, &size);
1799 size = sizeof(BOOL);
1800 PrfQueryProfileData(fmprof, FM3Str, "UserComboBox", &fUserComboBox, &size);
1801 size = sizeof(BOOL);
1802 PrfQueryProfileData(fmprof, FM3Str, "MinDirOnOpen", &fMinOnOpen, &size);
1803 size = sizeof(BOOL);
1804 PrfQueryProfileData(fmprof, appname, "QuickArcFind", &fQuickArcFind, &size);
1805 size = sizeof(BOOL);
1806 PrfQueryProfileData(fmprof, FM3Str, "NoRemovableScan", &fNoRemovableScan, &size);
1807 size = sizeof(ULONG);
1808 PrfQueryProfileData(fmprof, FM3Str, "NoBrokenNotify", &NoBrokenNotify, &size);
1809 size = sizeof(ULONG);
1810 PrfQueryProfileData(fmprof, appname, "ContainerType", &ulCnrType, &size);
1811 size = sizeof(ULONG);
1812 PrfQueryProfileData(fmprof, appname, "FilesToGet", &FilesToGet, &size);
1813 if (FilesToGet < FILESTOGET_MIN)
1814 FilesToGet = FILESTOGET_MIN;
1815 else if (FilesToGet > FILESTOGET_MAX)
1816 FilesToGet = FILESTOGET_MAX;
1817 size = sizeof(BOOL);
1818 PrfQueryProfileData(fmprof, FM3Str, "AutoView", &fAutoView, &size);
1819 size = sizeof(BOOL);
1820 PrfQueryProfileData(fmprof, FM3Str, "FM2Deletes", &fFM2Deletes, &size);
1821 size = sizeof(BOOL);
1822 PrfQueryProfileData(fmprof, FM3Str, "TrashCan", &fTrashCan, &size);
1823
1824 LoadDetailsSwitches(PCSZ_DIRCNR, &dsDirCnrDefault);
1825
1826 /* load pointers and icons we use */
1827 hptrArrow = WinQuerySysPointer(HWND_DESKTOP, SPTR_ARROW, FALSE);
1828 hptrBusy = WinQuerySysPointer(HWND_DESKTOP, SPTR_WAIT, FALSE);
1829 hptrNS = WinQuerySysPointer(HWND_DESKTOP, SPTR_SIZENS, FALSE);
1830 hptrEW = WinQuerySysPointer(HWND_DESKTOP, SPTR_SIZEWE, FALSE);
1831 hptrFloppy = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FLOPPY_ICON);
1832 hptrDrive = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, DRIVE_ICON);
1833 hptrRemovable = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, REMOVABLE_ICON);
1834 hptrCDROM = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, CDROM_ICON);
1835 hptrFile = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FILE_ICON);
1836 hptrDir = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, DIR_FRAME);
1837 hptrArc = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ARC_FRAME);
1838 hptrArt = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ART_ICON);
1839 hptrSystem = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FILE_SYSTEM_ICON);
1840 hptrHidden = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FILE_HIDDEN_ICON);
1841 hptrReadonly = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FILE_READONLY_ICON);
1842 hptrLast = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, LASTITEM_ICON);
1843 hptrRemote = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, REMOTE_ICON);
1844 hptrVirtual = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, VIRTUAL_ICON);
1845 hptrRamdisk = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, RAMDISK_ICON);
1846 if (!fNoDead)
1847 hptrFinger = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FINGER_ICON);
1848 else
1849 hptrFinger = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, FINGER2_ICON);
1850 hptrApp = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, APP_ICON);
1851 hptrDunno = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, DUNNO_ICON);
1852 hptrEnv = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ENV_ICON);
1853 hptrZipstrm = WinLoadPointer(HWND_DESKTOP, FM3ModHandle, ZIPSTREAM_ICON);
1854
1855 // set up color array used by seeall.c and newview.c color dialog
1856
1857 standardcolors[0] = CLR_WHITE;
1858 standardcolors[1] = CLR_BLACK;
1859 standardcolors[2] = CLR_BLUE;
1860 standardcolors[3] = CLR_RED;
1861 standardcolors[4] = CLR_PINK;
1862 standardcolors[5] = CLR_GREEN;
1863 standardcolors[6] = CLR_CYAN;
1864 standardcolors[7] = CLR_YELLOW;
1865 standardcolors[8] = CLR_DARKGRAY;
1866 standardcolors[9] = CLR_DARKBLUE;
1867 standardcolors[10] = CLR_DARKRED;
1868 standardcolors[11] = CLR_DARKPINK;
1869 standardcolors[12] = CLR_DARKGREEN;
1870 standardcolors[13] = CLR_DARKCYAN;
1871 standardcolors[14] = CLR_BROWN;
1872 standardcolors[15] = CLR_PALEGRAY;
1873
1874 return TRUE;
1875}
1876
1877HWND StartFM3(HAB hab, INT argc, CHAR ** argv)
1878{
1879 HWND hwndFrame;
1880 HWND hwndClient;
1881 UINT x;
1882 ULONG FrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
1883 FCF_SIZEBORDER | FCF_MINMAX |
1884 FCF_ACCELTABLE | FCF_MENU | FCF_ICON | FCF_TASKLIST | FCF_NOBYTEALIGN;
1885
1886 for (x = 1; x < argc; x++) {
1887 if (*argv[x] == '~' && !argv[x][1])
1888 fReminimize = TRUE;
1889 if (*argv[x] == '+' && !argv[x][1])
1890 fLogFile = TRUE;
1891 if (*argv[x] == '-') {
1892 if (!argv[x][1])
1893 fNoSaveState = TRUE;
1894 else
1895 strcpy(profile, &argv[x][1]);
1896 }
1897 }
1898
1899 hwndFrame = WinCreateStdWindow(HWND_DESKTOP,
1900 WS_VISIBLE,
1901 &FrameFlags,
1902 WC_MAINWND,
1903 NULL,
1904 WS_VISIBLE | WS_ANIMATE,
1905 FM3ModHandle, MAIN_FRAME, &hwndClient);
1906 if (hwndFrame) {
1907 WinSetWindowUShort(hwndFrame, QWS_ID, MAIN_FRAME);
1908 hwndMainMenu = WinWindowFromID(hwndFrame, FID_MENU);
1909 if (!WinRestoreWindowPos(FM2Str, "MainWindowPos", hwndFrame)) {
1910
1911 ULONG fl = SWP_MOVE | SWP_SIZE;
1912 RECTL rcl;
1913 ULONG icz = WinQuerySysValue(HWND_DESKTOP, SV_CYICON) * 3L;
1914 ULONG bsz = WinQuerySysValue(HWND_DESKTOP, SV_CYSIZEBORDER);
1915
1916 WinQueryWindowRect(HWND_DESKTOP, &rcl);
1917 rcl.yBottom += icz;
1918 rcl.yTop -= bsz;
1919 rcl.xLeft += bsz;
1920 rcl.xRight -= bsz;
1921 WinSetWindowPos(hwndFrame,
1922 HWND_TOP,
1923 rcl.xLeft,
1924 rcl.yBottom,
1925 rcl.xRight - rcl.xLeft, rcl.yTop - rcl.yBottom, fl);
1926 }
1927 if (fLogFile)
1928 LogFileHandle = _fsopen("FM2.LOG", "a+", SH_DENYWR);
1929 if (hwndHelp)
1930 WinAssociateHelpInstance(hwndHelp, hwndFrame);
1931 PostMsg(hwndClient, UM_SETUP, MPFROMLONG(argc), MPFROMP(argv));
1932 }
1933 return hwndFrame;
1934}
1935
1936BOOL CheckFileHeader(CHAR *filespec, CHAR *signature, LONG offset)
1937{
1938 HFILE handle;
1939 ULONG action;
1940 ULONG len = strlen(signature);
1941 ULONG l;
1942 CHAR buffer[4096]; // 06 Oct 07 SHL Protect against NTFS defect
1943 BOOL ret = FALSE;
1944
1945 DosError(FERR_DISABLEHARDERR);
1946 if (DosOpen(filespec,
1947 &handle,
1948 &action,
1949 0,
1950 0,
1951 OPEN_ACTION_FAIL_IF_NEW |
1952 OPEN_ACTION_OPEN_IF_EXISTS,
1953 OPEN_FLAGS_FAIL_ON_ERROR |
1954 OPEN_FLAGS_NOINHERIT |
1955 OPEN_FLAGS_RANDOMSEQUENTIAL |
1956 OPEN_SHARE_DENYNONE | OPEN_ACCESS_READONLY, 0))
1957 ret = FALSE;
1958 else {
1959 // Try signature match
1960 l = len;
1961 l = min(l, 79);
1962 if (!DosChgFilePtr(handle,
1963 abs(offset),
1964 (offset >= 0) ?
1965 FILE_BEGIN : FILE_END, &len)) {
1966 if (!DosRead(handle, buffer, l, &len) && len == l) {
1967 if (!memcmp(signature, buffer, l))
1968 ret = TRUE; // Matched
1969 }
1970 }
1971 }
1972 DosClose(handle); /* Either way, we're done for now */
1973 return ret; /* Return TRUE if matched */
1974}
1975
1976int CheckVersion(int vermajor, int verminor)
1977{
1978 int ok = 0;
1979
1980 // fixme to do useful check - was missing in base source
1981
1982#if 0
1983 if (vermajor && verminor) {
1984 *vermajor = VERMAJOR;
1985 *verminor = VERMINOR;
1986 ok = 1;
1987 }
1988#endif
1989
1990 ok = 1;
1991
1992 return ok;
1993}
1994
1995#ifdef __WATCOMC__
1996#pragma alloc_text(INIT,LibMain,InitFM3DLL,DeInitFM3DLL)
1997#pragma alloc_text(INIT1,StartFM3,FindSwapperDat)
1998#endif
Note: See TracBrowser for help on using the repository browser.