home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: SysTools / SysTools.zip / fat32093.zip / fat32.txt < prev    next >
Text File  |  2000-11-18  |  52KB  |  1,168 lines

  1.  
  2.        => For the latest changes in FAT32.IFS please look <=
  3.        => at the bottom of this file.                     <=
  4.  
  5.  
  6.  
  7.                         === DISCLAIMER ===
  8.  
  9.  
  10. I allow you to use all software in this package freely under the condition
  11. that I am in no way responsible for any damage or loss you may suffer.
  12.  
  13.         >> You should be aware of the fact that FAT32.IFS might <<
  14.         >> damage the data stored on your hard disks.           <<
  15.  
  16. If you cannot agree to these conditions, you should NOT use FAT32.IFS !
  17.  
  18.  
  19.  
  20. I CANNOT guarantee that FAT32.IFS will work for you. However I've done
  21. my best to test the program and I can only say that It works for me.
  22.  
  23.  
  24. Henk Kelder
  25. hkelder@capgemini.nl 
  26. Certified daddy (by my kids)
  27.  
  28. My homepage for the latest version: 
  29.  
  30.   http://www.os2ss.com/information/kelder/index.html
  31.  
  32.  
  33. FILES IN THIS VERSION
  34. =====================
  35.  
  36. FAT32.TXT               This file.
  37. PARTFILT.TXT            A textfile about PARTFILT.FLT and DISKINFO.EXE
  38.  
  39. FAT32.IFS               The actual IFS.
  40. CACHEF32.EXE            The cache helper program.
  41. UFAT32.DLL              The module needed to run CHKDSK on FAT32 partition.
  42. F32STAT.EXE             A program to change the DIRTY flag of FAT32 partitions.
  43. MONITOR.EXE             A program to monitor what FAT32.IFS is doing.
  44.  
  45. PARTFILT.FLT            A general partition filter device that allows FAT32
  46.                         partitions to be recoqnized by OS/2. 
  47.  
  48. OS2DASD.F32             A modified version of OS2DASD.DMD that is an
  49.                         alternative for using PARTFILT.FLT. This modified
  50.                         driver also allows FAT32 partitions to be recoqnized 
  51.                         by OS/2. If you want to try this please rename it to
  52.                         OS2DASD.DMD and place it in your OS2\BOOT directory.
  53.                         Remember to make a backup copy of the orginal!
  54.  
  55.                         PLEASE NOTE: that this driver is NOT at the latest 
  56.                         level and will probably NOT support the latest 
  57.                         features like removable disks etc.
  58.  
  59. DISKINFO.EXE            A diagnose program that will scan for and show
  60.                         all partitions. 
  61.  
  62. LIMITATIONS
  63. ===========
  64.  
  65. This version of FAT32.IFS has the following limitations:
  66. - It only supports non-removable harddisks.
  67. - It only supports disks with a sector size of 512 bytes. (Are there others?)
  68. - You cannot BOOT from a FAT32 partition.
  69. - You cannot place the SWAPPER.DAT on a FAT32 partition.
  70. - CHKDSK can diagnose a disk, but will only FIX lost clusters and an 
  71.   incorrect free space count. For all other errors, you'll need to run 
  72.   Windows95 and start scandisk to fix the problem.
  73.   Note: CHKDSK will always convert lost clusters to files and NEVER to
  74.   directories. if you want that, use SCANDISK.
  75. - The FORMAT, RECOVER and SYS commands are not supported.
  76. - Only last access date (and not last access time) is maintained by 
  77.   FAT32.IFS. This is similiar to Win95 (OSR2).
  78.  
  79. - Long filenames are not by default supported in DOS and Win-OS/2 sessions, 
  80.   they use only the shortnames. 
  81.   Please see 'LONG FILENAMES IN OS/2 AND DOS SESSIONS' later is this file.
  82.  
  83. - You'd better NOT change codepages on the fly IF you have open files with
  84.   filenames that contain extended ASCII characters.
  85.  
  86. - If you are using PARTFILT.FLT then FDISK, Partition Magic or any partition
  87.   maintenance tools will show non-existing drives and other nonsense.
  88.  
  89. - This version needs the native NLS support from OS/2. 
  90.   This means Warp 3 fixpack 26 or higher or Warp 4.
  91.   (You must have the LANGUAGE directory)
  92.  
  93. QUICK INSTALL:
  94. ==============
  95. (x: should be replaced by your boot drive.)
  96.  
  97. Copy the following files to your \OS2 directory:
  98. FAT32.IFS
  99. CACHEF32.EXE
  100. F32STAT.EXE 
  101. MONITOR.EXE
  102.  
  103. Copy the following file to your \OS2\DLL directory:
  104. UFAT32.DLL
  105.  
  106. (Skip the next lines if you are using Warp Server for eBusiness)
  107. Copy the following file to your \OS2\BOOT directory:
  108. PARTFILT.FLT 
  109.  
  110. =>Do NOT REPLACE your current OS2DASD.DMD with the version in the archive,<=
  111. =>before you have read the remarks below about OS/2 and FAT32 and know you<= 
  112. =>MUST use this DMD. You probably do NOT NEED IT!                         <=
  113.  
  114. Make the following changes to the CONFIG.SYS:
  115.  
  116. IFS=x:\OS2\FAT32.IFS [options, see below]  
  117. (Install this one AFTER IFS=HPFS.IFS)
  118.  
  119. CALL=x:\OS2\CACHEF32.EXE [options, see below]
  120. ^^^^-> Make sure this is a CALL and NOT a RUN.
  121.  
  122. (Skip the next lines if you are using Warp Server for eBusiness)
  123. BASEDEV=PARTFILT.FLT /P 0B [/W] 
  124. (The /W should not be specified if you do not want write access)
  125. (The best location seems to differ depening on your configuration. Some
  126. state FAT32.IFS will only work is PARTFILT is the first basedev, other 
  127. claim it only works if PARTFILT is the last one.)
  128.  
  129. =>This Quick Install will add FAT32 partition after all existing drives!  <=
  130.  
  131. =>PARTFILT.FLT might need other options IF you have converted an existing <=
  132. =>FAT16 partition to FAT32 or if you want to influence the drive order!   <=
  133.  
  134.  
  135. FAT32.IFS
  136. =========
  137.  
  138. FAT32.IFS is the actual Installable File Systems driver.
  139. The following options are supported:
  140.  
  141. /Q           Quiet, not messages.
  142.  
  143. /CACHE:nnnn  specifies the cache size in kilobytes. If omitted the default
  144.              cache size is 1024KB. Maximum cache size is 2048KB.
  145.                                      *NOTE*
  146.              Cache memory is allocated as FIXED memory, so if you have less
  147.              than 16MB I suggest you set this option to 512KB or less.
  148.  
  149. /MONITOR     Set monitor ON by default. If omitted monitor is OFF. See 
  150.              MONITOR.EXE for more information.
  151.  
  152. /RASECTORS:n Read Ahead Sectors.
  153.              Specifies the minimum number of sectors to be read per read
  154.              action and placed in the cache.
  155.              If omitted the default differs per volume and equals the 
  156.              number of sectors per cluster times 2. 
  157.              The maximum treshold value used is the number of sectors per 
  158.              cluster times 4.
  159.  
  160.              You should note that the actual sector IO per read action is
  161.              NOT determined by an application, but by the IFS. For FAT access
  162.              single sector reads are done. For Directory and Files IO reads
  163.              are done on a cluster base. By setting the RASECTORS you can 
  164.              define the minimum number of sectors the IFS will read from disk
  165.              and place in the cache.
  166.  
  167. /EAS         Make FAT32.IFS support EXTENDED ATTRIBUTES.
  168.  
  169.  
  170. CACHEF32.EXE
  171. ============
  172.  
  173. CACHEF32.EXE is a helper program with the following functions:
  174. - Check DISK state on boot, run CHKDSK if needed.
  175. - Start the LAZY WRITE daemon.
  176. - Set CACHE and READ-AHEAD parameters.
  177. - Set Longname behaviour.
  178. - Load a CP to UNICODE translate table for longnames and the default 
  179.   codepage.
  180.  
  181. When run in the foreground and CACHF32 is already running, it displays
  182. the CACHE parameters and allows you to modify the values. If no other
  183. copy of CACHEF32 is running, it detaches a background copy.
  184.  
  185. When run in the background (detached), CACHEF32 will act as lazywrite daemon.
  186.  
  187. CACHEF32.EXE supports the following options:
  188.  
  189. /?    Shows help.
  190.  
  191. /Q    Terminates CACHEF32. CacheF32 will be unloaded from memory, lazy
  192.       writing will stop. (Performance will degrade).
  193.  
  194. /N    Runs CACHEF32 without starting the deamon in the background.
  195.  
  196. /D:nn Sets the DISKIDLE value. See OS/2 online help on CACHE.
  197.  
  198. /B:nn Sets the BUFFERIDLE value. See OS/2 online help on CACHE.
  199.  
  200. /M:nn Sets the MAXAGE value. See OS/2 online help on CACHE.
  201.  
  202. /R:d:,n Set RASECTORS for drive d: to n.
  203.  
  204. /L:ON|OFF Set lazy writing ON or OFF, default is ON
  205.  
  206. /FS   Use short names internally.
  207. /FL   Use long names internally (default).
  208. (see LONG FILENAMES IN OS/2 AND DOS SESSIONS below)
  209.  
  210. /P:1|2|3|4 Set priority for lazy writer. 1 is lowest, 4 is highest. 
  211.       Default 1 (= idle-time). This might be handy if the lazy-writter 
  212.       doesn't seem to get any CPU due to heavy system load.
  213.  
  214. Note 1: the /T option has been removed in version 0.83.
  215.  
  216. Note 2: if you notice that the /P options has any effect on your 
  217.         situation please let me know.
  218.  
  219. CHKDSK & UFAT32.DLL
  220. ===================
  221.  
  222. The UFAT32.DLL is called by CHKDSK whenever the CHKDSK command is issued
  223. for a FAT32 drive. UFAT32.DLL currently only supports CHKDSK.
  224.  
  225. For CHKDSK the following options are implemented:
  226. /F   Fixes problems (Currently UFAT32.DLL only fixes lost clusters,
  227.      and an incorrect free space count.)
  228. /C   Causes lost clusters to be automatically converted to files if the
  229.      drive was in an inconsistent state at boot (No questions asked).
  230. /V:1 Causes CHKDSK to show fragmented files.
  231. /V[:2] Causes CHKDSK to show details on all files checked.(default)
  232.  
  233. The CHKDSK process does the following checks:
  234. - Compares all copies of the FATs;
  235. - Checks for each file the file allocation;
  236. - Checks per file or directory the VFAT long filename;
  237. - Checks for, and if /F is specified, repairs lost clusters.
  238. - Checks for, and if /F is specified, repairs cross-linked files.
  239. - Checks free space, and if /F is specified, corrects an incorrect setting.
  240. - Checks for lost extended attributes.
  241.  
  242.  
  243. F32STAT.EXE
  244. ===========
  245.  
  246. F32STAT can be used to query the clean shutdown state of a FAT32 drive. 
  247. It also allows you to alter the clean shutdown state. You could use this
  248. feature if FAT32.IFS blocks access to the disk because it is dirty on boot,
  249. and CHKDSK could not solve the problem.
  250.  
  251. The syntax is:
  252.  
  253.    F32STAT drive: [options]
  254.  
  255. The following options exist:
  256.  
  257. /CLEAN  - Inform FAT32.IFS that the disk was clean on boot and may be used. 
  258.           The disk itself will be marked as clean on a succesfull shutdown. 
  259.           (The internal dirty flag FAT32.IFS uses will be cleared.)
  260.  
  261. /FCLEAN - Inform FAT32.IFS that the disk was clean on boot and may be used.
  262.           The disk itself will also be marked as clean at that moment. 
  263.           (The internal dirty flag FAT32.IFS uses will be cleared, but the
  264.           marking on disk will also be set ok.)
  265.           
  266. /DIRTY  - Inform FAT32.IFS to set its internal dirty flag, and mark the drive
  267.           dirty on disk. On shutdown the drive will be left dirty, so when
  268.           booting Windows 95 (OSR2) SCANDISK will be fired.
  269.  
  270.  
  271. MONITOR.EXE
  272. ===========
  273.  
  274. Monitor will show (most) FAT32 actions on screen. This program is intended
  275. for troubleshooting. Using MONITOR will degrade performance since FAT32 must
  276. send monitoring information to an internal buffer. This internal buffer is 
  277. only 4096 bytes large, so if monitoring is on, but MONITOR does not run,
  278. logging information is lost. This will however only occur if /MONITOR is
  279. specified after the IFS= line for FAT32.IFS.
  280.  
  281. If the /MONITOR command is not specified in the config.sys after the IFS=
  282. statement monitoring is OFF by default, but starting MONITOR once will 
  283. activate monitoring.
  284.  
  285. When MONITOR runs, information is shown on the screen, but also written to
  286. FAT32.LOG in the current directory.
  287.  
  288. When MONITOR terminates the internal montoring is switched off.
  289.  
  290. the syntax for monitor is:
  291.  
  292. MONITOR [tracemask] [/S]
  293.  
  294. If tracemask is omitted it is set to 1. 
  295.  
  296. The tracemask exists of a specific bit to show certain types of information.
  297. This way, you can MONITOR selectively.
  298.  
  299. The following values for tracemask exist:
  300.  
  301.  1 - Shows all calls to FS_xxxxx entry points and the returnvalues
  302.  2 - Shows additional (internal) function calls
  303.  4 - Shows cache related (lazy writing) function calls
  304.  8 - Shows internal memory handling (malloc & free) memory calls
  305. 16 - Shows FS_FINDFIRST/FS_FINDNEXT calls
  306. 32 - Shows some other calls
  307. 64 - Shows extended attribute handling
  308.  
  309. You should add values to see multiple groups:
  310.  
  311. e.g.
  312. You want to see both FS_xxxx calls and cache related information. As 
  313. tracemask you should use 1 + 4 = 5.
  314.  
  315.  
  316. /S   - Runs without output to the screen, but only to FAT32.LOG. This is
  317.        usefull if MONITOR sends so much messages to the screen that the 
  318.        program can't keep up with the IFS. Using /S only sends the output
  319.        to FAT32.LOG so no time is lost in screen handling.
  320.  
  321.  
  322.  
  323.  
  324. GENERAL NOTES
  325. =============
  326.  
  327. MAKING OS/2 RECOQNIZE FAT32 PARTITIONS.
  328. ---------------------------------------
  329. OS/2 by itself does not recoqnize FAT32 partitions. This means that 
  330. installing the IFS is useless if we can't make OS/2 recoqnize them.
  331.  
  332. Currently, if you are using WARP 3 or 4 there are two ways to achieve that.
  333. - Use PARTFILT.FLT to fake FAT32 partition; (this is advised)
  334. - Use the modified version of OS2DASD.DMD. (Rename OS2DASD.F32 to OS2DASD.DMD)
  335.  
  336. If you are using Warp Server for e-Business (AURORA) you must use the LVM to
  337. create a Compatible volume. Do not try to use PARTFILT or the modified 
  338. OS2DASD.DMD with this version of OS/2.
  339.  
  340.  
  341. OS2DASD.DMD
  342. -----------
  343.  
  344. The version of OS2DASD.DMD (called OS2DASD.F32) supplied in this package is 
  345. a modified version of this driver and is NOT at the latest level. 
  346. This means that it is possible that some of the latest features in the 
  347. IBM supplied driver may not be supported. Also, when installing new 
  348. fixpacks, you should make sure that this version of OS2DASD.DMD is 
  349. not replaced.
  350.  
  351. Also, when using this driver, FAT32 partitions COULD end up having a drive
  352. letter assign before the OS/2 partition, shifting the assigned drive letters
  353. for all next partitions up and thus making OS/2 unbootable.
  354.  
  355. This version of OS2DASD.DMD has extra support for partition type 11 (hex B).
  356. Partition type 12 (hex C), FAT32 through INT13 is NOT supported by this 
  357. driver.
  358.  
  359. Generally, it is not advised to use this version of OS2DASD.DMD, but to 
  360. use the PARTFILT.FLT.
  361.  
  362.  
  363. LONG FILENAMES IN OS/2 AND DOS SESSIONS
  364. ---------------------------------------
  365. In the initial release long file names where only shown in OS/2 sessions, but
  366. in DOS sessions, the short filename equivalent was shown.
  367.  
  368. This could however lead to big problems. An example:
  369.  
  370. In in an OS/2 session directory \DevStudio was current, from a DOS session
  371. the directory \DEVSTU~1 could be removed since OS/2 didn't know that 
  372. DevStudio and DEVSTU~1 were infact the same directories.
  373.  
  374. The same problem could occur when opening files in both OS/2 and DOS. 
  375. No proper multiuser handle would take place since OS/2 doesn't know that
  376. files with different names are the same.
  377.  
  378. To solve this problem I've done the following:
  379.  
  380. Via a setting FAT32.IFS can be told to:
  381. - Translate all long filenames internally to their short equivalences OR
  382. - Use the long names internally, but hide all files or dirs with long names
  383.   from DOS sessions.
  384. This setting can be changed (on the fly) with CACHEF32.EXE.
  385.  
  386. When using short names internally the following drawbacks occur:
  387. - Current directory is shown as a short name (command line only)
  388. - When deleting (long) files from the command line, the WPS doesn't 
  389.   pickup the deletions.
  390.  
  391. When using long names internally the following drawbacks occur:
  392. - Files and directories with long names are not visible in DOS sessions.
  393.   This is however the same as with HPFS.
  394.  
  395.  
  396. WINDOWS & OS/2 CHARACTER SETS
  397. -----------------------------
  398. OS/2 uses standard character sets. Such a character set is called a CODEPAGE.
  399.  
  400. By default Windows long file names (VFAT) are stored in UNICODE.
  401.  
  402. Since Warp 3 (fixpack 26?) OS/2 contains NLS support. 
  403. CACHEF32.EXE now calls this NLS support to create a CP to UNICODE translate 
  404. table during startup of your system.
  405.  
  406. Keep in mind that a table for only ONE codepage is loaded. Should you change
  407. codepages (using CHCP) you must rerun CACHEF32 to load a new table, but keep
  408. in mind OS/2 keeps different codepages per session so if you use CHCP to 
  409. change the CP that CP is only only valid for that session.
  410.  
  411.  
  412. CLEAN SHUTDOWN & CHKDSK
  413. -----------------------
  414. If Windows 95 (OSR2) shuts down properly, the clean shutdown status of the
  415. disk is physically written on the disk. On next boot this state is checked,
  416. and if the disk is not shutdown properly, SCANDISK is run.
  417.  
  418. FAT32.IFS also supports this feature. When CACHEF32 is called from the 
  419. config.sys, it checks, via a call to the IFS the state of each FAT32 drive.
  420. For each drive that is not shutdown properly, CHKDSK is fired. If no errors 
  421. are found, or if only lost clusters where found and repaired, the drive is 
  422. marked ok. 
  423.  
  424. If CHKDSK cannot solve the problem, the drive state is left dirty, and
  425. NO FILES CAN BE OPENED AND NO DIRECTORIES CAN BE ADDED OR REMOVED. 
  426. Shutting down the disk, leaves the disk marked as not properly shutdown.
  427. You should boot Windows 95 and run SCANDISK on the drive to fix the 
  428. remaining problems.
  429.  
  430. F32STAT however, allows you for set the drive status, bypassing the normal
  431. handling of FAT32.IFS. See the description of F32STAT for more information.
  432.  
  433.  
  434. FREE SPACE
  435. ----------
  436. On most FAT32 drives the amount of free space is stored. FAT32.IFS will only
  437. redetermine the amount of free space if:
  438. - The disk was marked dirty on boot;
  439. - The free space is set to -1 on the disk;
  440. - The free space is not available on the disk.
  441.  
  442. FAT32.IFS will internally keep track of the free space and update it on disk 
  443. on shutdown.
  444.  
  445.  
  446. PERFORMANCE
  447. -----------
  448.  
  449. All of the code is in plain 16 bits C (All of OS/2's IFS's are 16 bits!). 
  450. No assembly language code is used.
  451.  
  452. The MONITOR function takes a lot of time. Be sure to switch if off if you don't 
  453. need it.
  454.  
  455. You should probably experiment with the CACHEF32 options to get the best 
  456. performance for your situation. 
  457.  
  458. The default for the LAZY WRITER is idle-time priority (/P:1). 
  459. You'd might like to experiment with the /P option as well, especially if you
  460. have performance problems with FAT32.IFS.
  461.  
  462. For best performance it is advised to keep the disk as defragmented as 
  463. possible. Use Windows 95 defrag to defrag the disk.
  464.  
  465.  
  466. COMPATIBILITY WITH WINDOWS95
  467. -----------------------------
  468.  
  469. As far as I can tell, FAT32.IFS is fully compatible with the FAT32 support
  470. in Windows 95. VFAT longnames can be used and on my PC, Windows95 doesn't
  471. compain (anymore!) about long filenames I have created with FAT32.IFS.
  472. The numeric tailed short names also seem to work ok. (The numeric tail option
  473. cannot be switch off!)
  474.  
  475. File names are, as in Windows95, case preserving (in OS/2 sessions).
  476. Creating a name in lower case will result in the file having a VFAT longname,
  477. even if the name conforms to 8.3. The case will be preserved.
  478.  
  479. Last access dates are maintained by FAT32.IFS. 
  480. (but not the last access time since Win95 doesn't support it)
  481. You can see these when using the detailed view of the drive object.
  482.  
  483.  
  484. EXTENDED ATTRIBUTES
  485. -------------------
  486.  
  487. General
  488. -------
  489.  
  490. Since version 0.70 FAT32.IFS supports EXTENDED ATTRIBUTES.
  491.  
  492. For FAT32.IFS to support Extended Attributes /EAS MUST be specified after
  493. the IFS=....\FAT32.IFS line in the config.sys.
  494.  
  495. Extended Attributes are implemented in the following manner:
  496.  
  497. For each file or directory that has extended attributes a file is created 
  498. with a name that consists of the file or directory name the EAs belongs to 
  499. followed by ' EA. SF'. So if a file called 'FILE' has extended attributes 
  500. these attributes are stored in a file called 'FILE EA. SF'. 
  501. These EA files are given the hidden, read-only and system attributes.
  502.  
  503. FAT32.IFS will not show these files in a directory listing, but Windows 95 
  504. can show them.
  505.  
  506. The mark byte
  507. -------------
  508.  
  509. Also, to speed things up a bit, each file having extended attributes is 
  510. marked by FAT32.IFS. For this mark an appearant unused byte in the directory 
  511. entry is used. The value for this byte is set to 0xEA for files having 
  512. normal EAs, to 0xEC for files having critical EAs, and to 0x00 for files 
  513. not having EAs at all.
  514.  
  515. (Please note that files with critical EAs can not be opened by programs
  516. no able to handle EAs, like DOS programs.)
  517.  
  518. This byte (directly following the files attribute) is not modified while
  519. running Windows 95 and neighter by SCANDISK or DEFRAG, but theoretically, 
  520. other programs running under Windows 95 could modify it.
  521.  
  522. If another program sets the value to 0x00 for a file that has EAs these EAs
  523. will no longer be found using DosFindFirst/Next calls only. The other OS2 
  524. calls for retrieving EAs (DosQueryPathInfo, DosQueryFileInfo and 
  525. DosEnumAttribute) do not rely on this byte.
  526.  
  527. Also the opposite could, again theoretically, occur. Files not having EAs 
  528. could be marked as having EAS. In this situation only the performance of
  529. directory scans will be decreased.
  530.  
  531. Both situations however are checked and if necessary corrected by CHKDSK.
  532.  
  533.  
  534. The drawbacks 
  535. -------------
  536.  
  537. Currently, the drawback of using Extended Attributes is that directory 
  538. scan performance has slightly decreased. 
  539.  
  540. The overhead on opening or accessing individual files is hardly noticable.
  541.  
  542. If you do not really need extended attribute support then simply do not
  543. specify /EAS after the IFS line in the config.sys.
  544.  
  545. The advantages
  546. --------------
  547.  
  548. The advantages of FAT32.IFS supporting extended attributes are:
  549. - The WPS heavily uses EAS to store folder and file settings. Without EAS
  550.   the WPS will not remember settings across boots.
  551. - REXX .CMD files must be tokenized on each run, thereby reducing performance.
  552.   With EAS the tokenized version of the .CMD will be stored in EAs.
  553.  
  554.  
  555. If you can live with the small loss in performance while doing directory 
  556. scans it is advised you specify /EAS after the IFS line in the CONFIG.SYS.
  557.  
  558. If you do not really need extended attribute support and you cannot accept
  559. the decrease in directory scan performance then simply do not specify /EAS 
  560. after the IFS line in the config.sys.
  561.  
  562.  
  563. IOCTL SUPPORT
  564. -------------
  565. IOCTL calls (category 8) are now passed through to OS2DASD. All calls
  566. supported by OS2DASD.DMD are now also supported by the IFS.
  567.  
  568.  
  569. TROUBLESHOOTING
  570. ===============
  571.  
  572. Should FAT32.IFS fail to work, please check the following:
  573.  
  574. - Is a new drive letter assigned ? (If not OS2DASD.DMD failed)
  575.   If not, tell me.
  576. - If you are not sure, try the /MONITOR parameter after FAT32.IFS,
  577.   and after reboot look with monitor for FS_MOUNT calls. Send me 
  578.   the results.
  579. - If a new drive letter is assigned, but FAT32.IFS fails,
  580.   please run DISKINFO and send me the output.
  581. - If you have a TRAP, please send me the CS:IP value of the trap.
  582.  
  583. If you have a program that doesn't work or returns errors, please run 
  584. monitor.exe while you execute the program. After the error has occured, 
  585. terminate monitor and send me a message describing what the problem is, as 
  586. detailed as possible and include the FAT32.LOG that was created by monitor.
  587.  
  588.  
  589. SUPPORTED IFS FUNCTIONS
  590. =======================
  591. FS_ALLOCATEPAGESPACE    : No
  592. FS_ATTACH               : No
  593. FS_CANCELLOCKREQUEST    : No, function is implemented in the KERNEL
  594. FS_CHDIR                : Yes
  595. FS_CHGFILEPTR           : Yes
  596. FS_CLOSE                : Yes
  597. FS_COMMIT               : Yes
  598. FS_COPY                 : Partly, unsupported actions are simulated by command shell
  599. FS_DELETE               : Yes
  600. FS_DOPAGEIO             : No
  601. FS_EXIT                 : Yes
  602. FS_FILEATTRIBUTE        : Yes
  603. FS_FILEINFO             : Yes
  604. FS_FILEIO               : No
  605. FS_FILELOCKS            : No, function is implemented in the KERNEL
  606. FS_FINDCLOSE            : Yes
  607. FS_FINDFIRST            : Yes
  608. FS_FINDFROMNAME         : Yes
  609. FS_FINDNEXT             : Yes
  610. FS_FINDNOTIFYCLOSE      : Obsolete in OS/2 WARP
  611. FS_FINDNOTIFYFIRST      : Obsolete in OS/2 WARP
  612. FS_FINDNOTIFYNEXT       : Obsolete in OS/2 WARP
  613. FS_FLUSHBUF             : Yes
  614. FS_FSCTL                : Yes
  615. FS_FSINFO               : Yes
  616. FS_INIT                 : Yes
  617. FS_IOCTL                : Yes - LOCK & UNLOCK, others are passed to OS2DASD.
  618. FS_MKDIR                : Yes
  619. FS_MOUNT                : Yes
  620. FS_MOVE                 : Yes
  621. FS_NEWSIZE              : Yes
  622. FS_NMPIPE               : No
  623. FS_OPENCREATE           : Yes
  624. FS_OPENPAGEFILE         : No
  625. FS_PATHINFO             : Yes
  626. FS_PROCESSNAME          : Yes
  627. FS_READ                 : Yes
  628. FS_RMDIR                : Yes
  629. FS_SETSWAP              : No
  630. FS_SHUTDOWN             : Yes
  631. FS_VERIFYUNCNAME        : No
  632. FS_WRITE                : Yes
  633.  
  634.  
  635. HISTORY
  636. =======
  637.  
  638. Version 0.10  - Initial Version
  639.  
  640. Version 0.20 
  641. - Cache routines have been improved for performance. Removing 'old' sectors
  642.   from the cache is no longer needed. /T option for CACHEF32 has been 
  643.   removed.
  644.  
  645. - CHKDSK: Is now able to fix incorrect free space count.
  646. - CHKDSK: Lost cluster fix algoritm has been improved for performance.
  647. - CHKDSK: Didn't recoqnize bad-sectors, has been fixed.
  648. - CHKDSK: Had problems with recoqnition of some type of free clusters,
  649.           has been fixed.
  650. - OS2DASD.DMD: Is now based on the latest version. (December '97)
  651.  
  652. Version 0.30
  653.  
  654. - Added PARTFILT.FLT to the archive.
  655. - Added support for ReadOnly partitions. This is needed for PARTFILT.
  656. - IOCTL Calls (category 8) are now passed throught to OS2DASD.
  657.  
  658.  
  659. Version 0.40
  660. - The volume label was retrieved from the boot sector. However Win95
  661.   actually stores the Volume label in the root directory. The Volume label
  662.   now is taken from the root directory.
  663.   Also, the label can be set now. (The boot sector is however still updated)
  664.  
  665. - /Q switch of PARTFILT didn't work. Now it does.
  666.  
  667. - A problem was in CHGFILEPOINTER that could (theoretically) lead to an
  668.   trap (FAT32: FS_WRITE: No next cluster available").
  669.  
  670. - Corrected a logical error where renaming a file or directory to an existing
  671.   directory caused the file or directory to be moved into the target 
  672.   directory. Now FAT32.IFS returns an error.
  673.  
  674. - Changed CHKDSK so that if an error is found in on of the FATs CHKDSK 
  675.   continues, but ignores the /F switch. Previously, CHKDSK would not do any
  676.   additional checks.
  677.  
  678. - Renaming a file or directory from the workplace shell didn't work because 
  679.   of two problems: 
  680.     - the WPS uses a strange algoritm to determine if the IFS supported
  681.       long file names which appearantly failed with FAT32. 
  682.       This has been corrected.
  683.     - FAT32.IFS does not support EA's (yet), the WPS renames a file, tries
  684.       to write EAs and since that fails renames the file back again.
  685.       Now FAT32 returns NO_ERROR on the call used to write EAs.
  686.  
  687. - CHKDSK now is able to fix cross-linked clusters on the disk.
  688.       
  689. Version 0.41
  690.  
  691. - Fixed a problem with numeric tails shortnames. Files alway got ~1 instead
  692.   if an incrementing number. Has been fixed.
  693.  
  694. Version 0.50
  695.  
  696. - Fixed a problem where files with longnames could sometimes not be found
  697.   which lead to duplicate filenames.
  698. - Fixed a problem where scandisk would claim that a directory created by
  699.   FAT32.IFS contained invalid blocks.
  700. - Fixed a (BIG) problem with files or directories with long names where
  701.   if such a file was opened in a DOS session and in an OS/2 session 
  702.   simultaniously OS/2 was unable to see that the same file was opened.
  703. - Fixed a problem where read-only executables could not be run.  
  704. - Fixed a problem where the algoritm used to determine the highest available
  705.   cluster number was incorrect.
  706. - Fixed a problem were CHKDSK was unable to fix cross-linked files.
  707. - Since some people complained that FAT32 would sometimes hang, 
  708.   I have modified the internal semaphore mechanism so an error message will
  709.   appear if a semaphore remains blocked for more than a minute.
  710.  
  711. Version 0.51
  712. - Did a lot of work on Lazy write performance. Cache access is no longer
  713.   protected with a semaphore but with a per sector inuse flag.
  714. - Fixed a problem that caused INSTALL and MINSTALL to abort when FAT32.IFS
  715.   was loaded. The problem had to do with argument checking with FS_IOCTL 
  716.   calls.
  717. - Fixed a problem that BRIEF, a populair editor under OS/2, trapped or hung
  718.   itself. The problem had to do with returning improperly formatted 
  719.   information when querying EAs (FAT32.IFS does not support EAs!)
  720. - Corrected a serious problem when a single file was opened more than once 
  721.   and the file was modified using one of the instances. The other instance(s)
  722.   didn't pick up the changes and FAT32.IFS might trap. 
  723.  
  724. Version 0.52
  725. - Didn't handle closes from child processes that inherited open files 
  726.   properly so the final close would fail.
  727.  
  728. Version 0.60:
  729. - Changed the algoritm to detect EOF in the FATs since MS appearantly uses
  730.   other values than 0x0FFFFFF8 as EOF token.
  731. - Changed the flush dirty buffer mechanism to use strategy2 device calls.
  732.   This has resulted in an increase of performance during write to disk.
  733. - Changed CHKDSK to accept an /V:1 argument to only show fragmented files,
  734.   while /V[:2] also lists all files.
  735. - Made it possible that renaming a file to a new name where only the 
  736.   case was changed worked.
  737.  
  738. Version 0.61:
  739. - Changed some logic in the dirty buffer flush mechanism.
  740. - Changed some logic in the FS_WRITE and FS_NEWSIZE functions.
  741.  
  742. Version 0.62:
  743. - Corrected a bug that lead to a disk full message when a file was rewritten
  744.   (for instance with E.EXE) and the new size was just a couple of bytes more
  745.   then to old size. Problem was result of the logic change in FS_NEWSIZE.
  746. - Oops: Forgot to update the version number in version 0.61.
  747.  
  748. Version 0.63:
  749. - Finally understood why CHKDSK failed on very large disks. UFAT32.DLL 
  750.   accesses the disk using DosOpen with OPEN_FLAGS_DASD. In that mode default
  751.   behaviour is that the disk is accessed using physical byte offsets from the
  752.   beginning of the (logical) disk. Now since the maximum value in a 32 bit 
  753.   integer is 2^32 this value divided by 512 was the maximum sector that could
  754.   be read (= sector 8388608 = 4Gb disk size maximum).
  755.   Now UFAT32 uses the same trick as HPFS uses, via a call to DosFSCtl disk 
  756.   access is switched to sector mode so 2^32 sectors can be accessed. 
  757.   This means CHKDSK can (theoretically) check disks upto 2048 gigabytes.
  758.  
  759. Version 0.64:
  760. - Again a problem with CHKDSK, this time the file allocation check failed if
  761.   there were more than 65535 clusters assigned to a file. 
  762. - FAT32.IFS now reports fake cluster sizes and total and free cluster counts
  763.   whenever a DOS session queries free space. The maximum cluster size 
  764.   returned has been set to 32 Kb and the maximum for total and free clusters 
  765.   is 65526 clusters so the maximum disk size in dos is reported as almost 2Gb.
  766. - Encountered (and fixed) a trap that occured whenever a volume was flushed 
  767.   via a explicit call and there were still dirty sectors in call. 
  768.   It occured in code I changed in version 0.60 and this was the first time I 
  769.   trapped on it, so the combination of factors appears unlikely.
  770. - Modified FS_CHGFILEPTR so negative seeks will be handled properly and
  771.   build in logic to not allow files to grow bigger then 2Gb.
  772. - Uptil now I ignored the MUST_HAVE_XXX settings for directory scans since I
  773.   assumed they were not used. Some users reported files beeing show twice in
  774.   some application so: I stand corrected and so is FAT32.IFS.
  775. - Corrected a potential problem where (theoretically) files could be given 
  776.   a directory attribute.
  777. - Changed the algoritme used when no large enough contiguous fat chain is 
  778.   available and the fat chain has to be constructed from various chains.
  779.   Before the change an algoritme searching for individual free clusters was
  780.   used. Now FAT32.IFS searches the largest free chain assigns it and then 
  781.   searches for the next largest free chain until a chain long enough is 
  782.   created. This is still not very fast, but will only really occur of the 
  783.   disk is rather full and very fragmented.
  784.  
  785. Version 0.65:
  786. - Files with valid 8.3 lowercase filenames where returned by findfirst/next
  787.   in DOS sessions in lowercase as well. Some programs don't like that. 
  788.   Now findfirst/next in DOS sessions always returns an uppercase name.
  789.   (This problem only occured when LFN's were hidden to DOS.)
  790. - Corrected a problem where while filling the buffer for FindFirst/Next too
  791.   much data was initialized (due to using strncpy) and data was overwritten.
  792.   This was most appearant with OS/2 Commander that trapped on a FAT32 
  793.   directory with many files.
  794.  
  795. Version 0.66:
  796. - DosSetFileInfo returned an error (ERROR_INVALID_LEVEL) when trying to write
  797.   Extended attributes. Now FAT32.IFS reports NO_ERROR (But still doesn't 
  798.   write the EA!). This makes f.i. that the installation of the OS/2
  799.   Netscape pluginpack now works properly.
  800. - Corrected a problem with FindFirst/Next where the check on required buffer
  801.   space was incorrect. Some programs (Slick Edit) failed doing a directory
  802.   scan. This has been fixed.
  803. - Modified the behaviour of DosSetFileInfo so that it will only set date/time
  804.   values in the directory. Before DosSetFileInfo also set the attribute, but 
  805.   I found that this also doesn't work on HPFS, so I modified the behaviour.
  806. - Modified the default MONITOR logging so that (almost) all FS_XXXX calls are
  807.   shown with the return values given. 
  808.  
  809. Version 0.70:
  810. - Most significant change is the implementation of EXTENDED ATTRIBUTES.
  811.   Currently they will only be supported if /EAS is specified after FAT32.IFS 
  812.   in the config.sys. Please read the chapter about extended attributes.
  813.  
  814. - Corrected a small problem where a whenever a short name had to be created
  815.   for a longer name containing any embedded blanks in the name FAT32.IFS left
  816.   the blanks in, while Win95 skips them while creating the shortname.
  817.   This lead to SCANDISK reporting incorrect long file names. (When correcting
  818.   this problem the short name was modified by SCANDISK.)
  819.   Now FAT32.IFS does the same as Windows 95.
  820.  
  821. - Received a report that FAT32.IFS failed allocating the cache space. Modified
  822.   FAT32.IFS so it will no longer trap on such a situation, but will continue
  823.   to run (without a cache - slow!)
  824.  
  825. - Received a report about a possible memory leakage problem in FAT32.IFS. 
  826.   Changed CACHEF32.EXE so when run, it will show the number of GDT selectors
  827.   currently allocated for FAT32.IFS.
  828.  
  829. Version 0.71:
  830. - EA's were not found from DOS sessions. Now this is hardly a problem since
  831.   DOS programs never access EA's, but EAUTIL can be used in DOS sessions, and
  832.   didn't work. Now it does.
  833. - There was another problems with finding EAs when FAT32.IFS was set to the 
  834.   mode in which internally short names were used (CACHEF32 /FS). Now this
  835.   seems to work properly.
  836.  
  837. Version 0.72:
  838. - Forgot build in the EA logic for creating and removing directories. Has 
  839.   been added.
  840.  
  841. Version 0.73:
  842. - Using DosSetPathInfo, it was possible to create an EA file for a non 
  843.   existing file. This lead f.i. to a ' EA. SF' file in the root directory.
  844.   This problem has been corrected.
  845. - Changed a bit in the algoritm for making a short name for a file with a 
  846.   longname.
  847.  
  848. Version 0.74:
  849. - Corrected a problem with DosFindFirst/next when the buffer wasn't large 
  850.   enough for the extended attributes and FAT32.IFS returned 
  851.   ERROR_EAS_DIDNT_FIT when more than one entry was placed in the resultbuffer.
  852.   Now FAT32.IFS returns this error only if the EA's of the first 
  853.   matching entry don't fit in the buffer.
  854.   (This error lead to the WPS giving an error that no matching entries were 
  855.   found on opening of a directory)
  856.  
  857. Version 0.75:
  858. - Added a check for valid EA names.
  859. - Added a translation mechanism for long filenames between the Windows 
  860.   Character set and OS/2 character set.
  861.   See: WINDOWS & OS/2 CHARACTER SETS for more information.
  862.  
  863. Version 0.76:
  864. - Corrected a NASTY BUG that lead to loss of data when multiple files were
  865.   opened.
  866.  
  867. Version 0.77:
  868. - Corrected a problem when more then 512 lost chains were found. (CHKDSK can
  869.   only recover 512 lost chains at one run)
  870. - Corrected a problem in OS/2 sessions (introduced in version 0.75) where 
  871.   valid 8.3 filenames in lowercase where always stored in uppercase.
  872.  
  873. Version 0.78:
  874. - Corrected a TRAP that could occur when the cache is full with dirty 
  875.   sectors and the oldest dirty single sector was flushed using a single flush
  876.   routine. The trap message was 'WriteCacheSector: VOLINFO not found!'.
  877.   This problem only occured when more than 1 FAT32 partition is present.
  878. - Corrected a problem with UFAT32.DLL when checking directories containing
  879.   more than 2048 files. (CHKDSK reported lost clusters, but was wrong)
  880. - Corrected another problem with UFAT32.DLL that occured when there is not
  881.   enough memory available to check large directories. UFAT32 would abend with
  882.   an access violation.
  883. - Corrected a problem with DosOpen when on Opening an existing file with only
  884.   the FILE_CREATE (OPEN_ACTION_CREATE_IF_NEW) bit set (and not the FILE_OPEN 
  885.   flag) the file was created while the open should fail. 
  886. - Corrected a problem that the characterset translate tables would be 
  887.   overwritten internally leading to all kinds of funny results. (Duplicate
  888.   directories etc)
  889. - Modified the default behaviour of FAT32.IFS and for the /T option for
  890.   cachef32: No character translation takes place. This works for situations
  891.   where Windows and OS/2 use the same codepage.
  892.  
  893. Version 0.79:
  894. - Rewrote the emergency flush routine so it will handle multiple FAT32 
  895.   partitions better. 
  896. - Made some minor modifications in UFAT32.DLL (For CHKDSK).
  897.   - A trap was solved when an EA file could not be repaired
  898.   - An error in the longname retrieval routine was fixed
  899.   - Output is matched more closely to HPFS and plain FAT.
  900.  
  901. Version 0.80:
  902. - Rewrote the strategy2 routines so more than one request list can be fired
  903.   per volume. Hopes this improves performance.
  904. - Corrected a problem with FS_COPY that failed if the target file was zero
  905.   bytes large.
  906. - Corrected a problem with DosOpen with the Truncate flag set and when the
  907.   target file already existed and had EAs. The open failed, but the file was 
  908.   truncated and a lost cluster was created.
  909. - Created PARTFILT.TXT file about PARTFILT and DISKINFO.
  910. - Implemented an version check between the IFS and UFAT32.DLL (for CHKDSK) 
  911.   and CACHEF32.EXE.
  912.  
  913. Version 0.81:
  914. - Noticed that when FS_FILEINFO was used to set the date/time on a file as
  915.   only action the date/time was not updated. Corrected.
  916. - In version 0.66 I removed the setting of the attribute using DosSetFileInfo.
  917.   As I found out, I was wrong. Now DosSetFileInfo from 32 bits programs sets
  918.   the attribute. From 16 bits programs however, this doesn't seem to work on
  919.   FAT, HPFS and FAT32. Don't know why.
  920.   
  921. Version 0.82:
  922. - Changed a bit in the algoritm for making a short name for a file with a 
  923.   longname (again). Now filenames starting with a dot are handled better.
  924. - Changed the (internal) memory handling routines to use more then one 
  925.   selector so I could use this for FindFirst/Next handling instead of 
  926.   allocation one selector per FindFirst/Next call.
  927.   This was neccessary because a DOS session can fire a lot of FindFirst calls
  928.   only for checking existence of files. Before the modification FAT32.IFS
  929.   could run out of memory after say a couple of hundred FindFirst calls.
  930.   (I found that OS/2 itself doesn't allow a DOS session to fire more then 
  931.    round 500 FindFirsts. After that OS/2 starts reusing find handles.)
  932.   I encountered this problem when trying to unarj the Novell Netware client
  933.   2.12 on my FAT32 disk.
  934.  
  935. Version 0:83:
  936. - Replaced the translate mechanisme that was introduced in version 0.75 by
  937.   a mechanisme where CACHEF32.EXE on first load calls the native OS/2 NLS
  938.   support to create a default translate table between the current codepage
  939.   and unicode. This should work better for some NLS versions of OS/2.
  940. - Added a switch to CACHEF32 to dynamically change the priority of the lazy
  941.   write thread. The default priority is still idle-time, but this can be 
  942.   changed to a higher priority.
  943. - Did experiment a bit with lazy writing in general. In my own system it
  944.   improved performance somewhat.  
  945. - Corrected a problem in PARTFILT where whenever a HIDDEN partition type 
  946.   was specified after /P this didn't always work properly. Now when a hidden
  947.   partition type is specified, the unhidden type is also handled by PARTFILT.
  948.  
  949. Version 0.84:
  950. - Got a message from someone complaining that the change in PARTFILT made him
  951.   loose the ability to mount hidden 'normal' partitions since PARTFILT 
  952.   presented all partition types as IFS. Now PARTFILT show normal partitions
  953.   by their actual types and only not-by-OS/2 supported types as IFS partitions.
  954. - Increased performance for accessing large files by keeping track of first 
  955.   and last cluster for each open file, and even the current cluster for each 
  956.   open instance.
  957. - Removed the limit for the maximum number of open files.
  958. - Fixed a problem in my internal memory (sub)allocation routines that lead to
  959.   various problems. This became more clear since FS_OPEN now also uses malloc
  960.   to allocated memory per open file.
  961.   Problems I encountered were trap D's and internal fatal messages.
  962. - Changed the way monitor works. Introduced a 'trace mask'. See MONITOR 
  963.   above.
  964.  
  965. Version 0.85:
  966. - A user pointed me at the problem that ReadOnly files cannot be renamed.
  967.   This problem has been corrected.
  968. - Corrected a problem whenever a non-existing file was openen. If later the 
  969.   file was created this could lead to a trap (at least in theory: I haven't 
  970.   seen it nor heard it actually occured).
  971. - Changed PARTFILT again. Whenever a hidden partition type was specified
  972.   partfilt also virtualized the unhidden type. So if /P 16 was specified, 
  973.   both types 16 and 6 were virtualized. This could lead to unwanted results.  
  974.  
  975.   So I modified the mechanism again.
  976.   Now - if /A is not used - only the types specified after /P are virtualized.
  977.   (The /A switch controls whether or not to virtualize all partitions.)
  978.  
  979.   PARTFILT always unhides the partitions it virtualizes.
  980.  
  981.   For the partition types PARTFILT virtualizes the following rules apply:
  982.  
  983.   Normal partition types (types 1, 4, 6, 7, but also 11, 14, 16 and 17) 
  984.   are reported to OS/2 with their actual -unhidden- partition type. 
  985.  
  986.   Any other partition types specified after /P are reported as un-hidden IFS
  987.   partitions. 
  988.   Any other partition types NOT specified after /P are reported as their 
  989.   actual -unhidden- type.
  990.  
  991.   Keep in mind that if you specify /A you must also use the /M argument to
  992.   tell PARTFILT which partitions you want to mount.
  993.  
  994. - Also, whenever /A is specified with PARTFILT /W is automatically set.
  995.   Otherwise, OS/2 will not boot at all.
  996.  
  997. - CACHEF32.EXE did not properly handle the /P:x argument when specified in 
  998.   CONFIG.SYS. The argument was lost. This has been fixed.
  999.  
  1000. Version 0.86:
  1001. - Always thought that it was not allowed to the directory bit set in 
  1002.   DosSetPathInfo and therefor I rejected calls with this bit set. I was wrong.
  1003.   Now DosSetPathInfo accepts the directory bit set (for directories only).
  1004.  
  1005. - Modified partfilt so it will also scan partitions inside a extended type F 
  1006.   partition (partfilt is now on version 1.08). Modified DISKINFO.EXE to do the 
  1007.   same.
  1008.  
  1009. - Noticed some problems when a file was opened multiple times. The directory
  1010.   information was not always updated properly. Also, the attribute of a open
  1011.   file was kept per instance instead of only one time for all open instances
  1012.   of a file. So using DosSetFileInfo on one instance was not noticed by other
  1013.   instances of a file.
  1014.  
  1015. Version 0.87:
  1016. - Modified the internal memory usage somewhat. Some allocated segments are
  1017.   marked unswappable now.
  1018. - Modified FS_DELETE to return ERROR_ACCESS_DENIED whenever this call was
  1019.   used for a directory. Previously, FAT32.IFS return ERROR_FILE_NOT_FOUND.
  1020. - Modified CACHEF32.EXE so it will also run if UCONV.DLL cannot be loaded.
  1021.   If that is the case, no UNICODE translate table will be loaded.
  1022. - Solved a problem when a file was rename when on the case mapping was 
  1023.   changed. If the file had extended attributes the rename failed and the EA
  1024.   was lost.
  1025.  
  1026. Version 0.88:
  1027. - DISKINFO still didn't show partitions inside an extended partition type F.
  1028. - Fixed a potential problem in the lazy write routines. This could lead to 
  1029.   sectors not being written when they should have. (have never seen it though)
  1030. - Made it work with Fixpack 10. (FP10 made FAT32.IFS trap)
  1031.  
  1032. Version 0.89:
  1033. - FS_SHUTDOWN is called twice by the kernel. The first one is to signal begin
  1034.   of shutdown and the second to signal the end. FAT32.IFS flushed its internal
  1035.   buffers on the 2nd call. This has been modified so FAT32.IFS now flushes
  1036.   on the first call.
  1037. - I've had a report from someone with a problem where the drives where mounted
  1038.   after CACHEF32 had queried CACHE settings. Since the cache is allocated on
  1039.   first mount this didn't work. I have added a call to force the drives 
  1040.   to be mounted before CACHEF32 queries the cache settings.
  1041. - Fixed a small division by zero in CACHEF32 when the cache was zero sectors
  1042.   large.
  1043. - Fixed the 'cannot find message file' problem in CACHEF32.EXE.
  1044. - Some users keep having troubles with 'error cannot find SH". Just for myself 
  1045.   I added the filename there.
  1046. - Replaced an internal call (FSH_PROBEBUF) by a DevHelp call.
  1047. - Fixed a trap I got due to a reentrancy problem in my memory allocation 
  1048.   routines.
  1049. - Changed the way data is kept per open file instance because I have received
  1050.   some reports from users that they got a 'ERROR: Cannot find the IO!" 
  1051.   message.
  1052. - FAT32.IFS had its code segments marked as EXECUTEONLY. Now AURORA doesn't
  1053.   seem to like that and traps. The code segments are no longer marked this 
  1054.   way but as EXECUTEREAD.
  1055.  
  1056. Version 0.90:
  1057. - Found some problems with FS_COPY. If FS_COPY was copying a file the target
  1058.   file was not protected from being deleted or renamed in another session.
  1059. - Noticed that I had the default cache size incorrectly set to 128 Kb. 
  1060.   Modified it to 1024 kb and added a warning message if no /CACHE argument
  1061.   is present.
  1062. - FS_COPY didn't check if source and target where on the same partition. (I 
  1063.   incorrectly assumed OS/2 did this check.). Now FS_COPY doesn't try to handle
  1064.   the copy when source and target are on different drives. This way the copy 
  1065.   is done by OS/2 itself.
  1066. - Modified the way data is written from the cache to disk. Instead of 
  1067.   instructing the Device Driver to write data directly from cache to disk,
  1068.   the data is now first copied to another memory area thereby releasing the
  1069.   data in the cache a lot sooner. This way the IFS does not have to wait 
  1070.   for the device driver to finish before a specific sector in cache is 
  1071.   available again.
  1072.   The drawback is that this makes FAT32.IFS to use more (physical) memory.
  1073.   With a cache size of 2048 Kb, an additional 480 Kb is allocated. 
  1074.   With smaller cache sizes the additional data reduces relatively. (a cache 
  1075.   size of 1024 Kb leads to an additional memory allocation of 240 Kb)
  1076. - Never had any error handling (message) in the routine that is called by the
  1077.   device driver to notify completion of the strategy2 request list. This 
  1078.   version has it. This is mainly to get more light on FAT32.IFS and aurora.
  1079.  
  1080. Notes on version 0.91:
  1081. - Got a report that FAT32.IFS ignored the fourth character of the extention.
  1082.   Looking for the cause I found that FAT32.IFS created incorrect short name
  1083.   equivalents for files with a four character long extention. 
  1084.   In that specific case the fourth character was ignored when creating
  1085.   the shortname. The effect was that e.g. a file called file.1234 and 
  1086.   file.1235 ended up having the same shortname. FAT32.IFS now
  1087.   no longer exhibits this behaviour, but you still might have double 
  1088.   shortnames in the same directory on your disk. I don't think SCANDISK 
  1089.   detects this problem. Please note this could only have happened with
  1090.   files having an extention of four chars for which all chars except the 
  1091.   fourth extention char were equal.
  1092.   
  1093.   To check this, set FAT32.IFS to use short names internally (CACHEF32 /FS), 
  1094.   and in a DOS session do a DIR command. If you detect any duplicate names,
  1095.   switch back to an OS/2 session and rename one of these files to another
  1096.   name and then rename it back to the original name. 
  1097.  
  1098. - Modified the calling of the strategy2 calls. Now FAT32.IFS no longer 
  1099.   request confirmation per individual sector. This fixes the problems
  1100.   with AURORA. 
  1101.  
  1102.   The problem with AURORA (Warp Server for eBusiness) FAT32.IFS was 
  1103.   experiencing was caused by a bug in the Logical Volume Manager that did
  1104.   not properly confirm individual requests. Since FAT32.IFS now no longer 
  1105.   depends on this individual confirmation the bug is no longer relevant.
  1106.   IBM did confirm this bug to me (October 1999) and promissed it would be
  1107.   solved in the next fixpack.
  1108.  
  1109. - Introduced a separate thread (from CACHEF32.EXE) that runs at time critical
  1110.   priority. The thread is awakened whenever the cache runs full with dirty 
  1111.   sectors and takes care of flushing these dirty sectors.
  1112.  
  1113. - Corrected a problem with Extended Attributes when a file had very large 
  1114.   extended attributes (almost 65536 bytes) the system would trap.
  1115.  
  1116. - Corrected a problem when a sector towards the end of the disk was read.
  1117.   Due to the read-ahead function 1 sector too far was read and the read 
  1118.   failed. 
  1119.  
  1120. - Noticed that the diskspace under DOS was not correctly returned. The faked
  1121.   clustersize was too small to actually report the correct disksize for disks
  1122.   smaller then 2.1 Gb.
  1123.  
  1124. - Until this version, the strategy2 routines did not set the flag to request
  1125.   the disk controller to cache the request on the outboard controller. I 
  1126.   did not set this flag since it didn't seem to matter on my own machine.
  1127.   However, this version has the flag set since some of you might profit from
  1128.   this setting and experience better performance.
  1129.  
  1130. - Enlarged maximum amount of data that is flushed (when lazy writing is used)
  1131.   to 64 Kb. Hopefully, this will increase performance for those 
  1132.   disk controllers that do not have the on-board cache enabled.
  1133.  
  1134. - Did an effort to solve the problem when a cluster chain becomes improperly
  1135.   terminated. FAT32.IFS simply ignores the problem now and assumes end of file.
  1136.   CHKDSK (UFAT32.DLL) detects and corrects this problem.
  1137.  
  1138. Version 0.92:
  1139.  
  1140. - When a FAT32 volume was not shut down properly the IFS did not allow files
  1141.   to be opened. This caused device drivers etc during shutdown not being 
  1142.   loaded from a FAT32 volume. Now FAT32.IFS allows files to be read from a 
  1143.   dirty volume.
  1144.  
  1145. - When a directory was moved the .. entry in that directory was not updated 
  1146.   to point to the proper parent directory. This has been corrected.
  1147.  
  1148. - CHKDSK checked for extended attributes even when /EAS was not specified
  1149.   after the IFS line in the config.sys.
  1150.  
  1151. - CHKDSK contained an error that when checking subdirectories sometimes (rare)
  1152.   the incorrect name (the longname of the previous directory entry) was used.
  1153.   This lead to claimed missing extended attributes for non-existing files.
  1154.  
  1155. - Modified the output of CHKDSK somewhat. Also, when the output is redirected
  1156.   to a file, the progress percentages are suppressed.
  1157.  
  1158. Version 0.93:
  1159.  
  1160. - Modified the way CHKDSK detect a bad cluster. 
  1161.  
  1162. - When the disk was dirty, CHKDSK was unable to rename a lost EA file to a 
  1163.   proper file. This has been fixed.
  1164.  
  1165. - FAT32.IFS now sets the archive attribute. It didn't before.
  1166.  
  1167. - Messed about a bit with the cache and lazy write handling.
  1168.