home *** CD-ROM | disk | FTP | other *** search
/ Chip Hitware 6 A / CHIP_HITWARE6_A.iso / tools / CHKFILES / CHKFILES.TXT < prev    next >
Text File  |  1998-06-16  |  55KB  |  1,003 lines

  1. CHKFILES Version 1.5a
  2. by Ron V. Webber
  3. Release date: June 17, 1998 
  4. http://www.lightlink.com/ym
  5. ym@lightlink.com
  6. stochastic@kagi.com
  7. Copyright 1998, Stochastic Systems
  8.  
  9. What is CHKFILES?
  10.  
  11. CHKFILES is a program that keeps track of the name, time, date, size,
  12. and checksum of every file in every path that you select (which could be
  13. every path on your hard drive).  You can select paths either recursively
  14. (where selecting "C:\" will select every path on partition C) or
  15. non-recursively (where selecting "C:\" will only select the root path of
  16. partition C).  On subsequent runs CHKFILES will update its information
  17. and tell you what has been added, changed, or deleted since the last
  18. run.  It will also tell you if any files have been corrupted.  If a file
  19. has a different time, date, or size, it will be listed as having been
  20. changed, and a new checksum will be calculated and stored.  For every
  21. file that has not changed time, date, or size, the current checksum will
  22. be calculated and compared with the old checksum.  If these are
  23. different, the file will be listed as bad.  The old checksum on a bad
  24. file will be kept so that you can check the file again later once you
  25. have fixed it.
  26.  
  27. CHKFILES can store the information about every file in two different
  28. ways: The "One File" method stores all the information in one main file,
  29. named CHKFILES.ALL, which is stored in the same path as the CHKFILES
  30. program.  The "Every Path" method stores the information for each
  31. individual path in that path in a file named CHKFILES.CHK.  If you
  32. choose to use individual CHKFILES.CHK files for each path, the
  33. information remains valid even if you move it and all the files to
  34. another path, but you won't be able to tell if an entire path has been
  35. deleted since the CHKFILES.CHK file for that path would have been
  36. deleted as well.  If you choose to use one CHKFILES.ALL file, then you
  37. will be able to tell when paths have been deleted, but if all the files
  38. in a path are moved to a different path they won't be checked.  (They
  39. would be listed twice: Once as having been deleted from their original
  40. path and once as being new files in their new path.) The "Every Path"
  41. method is good if you want to check files that are going to be moved to
  42. a new partition and you want to make sure they got there without any
  43. corruption.  The "One File" method is good if you want to have one file
  44. that you can copy to a safe location and use later to check on any
  45. corruption.  You can also use the "One File" method to check files on a
  46. device such as a CD-ROM.
  47.  
  48. The CHKFILES.CHK and CHKFILES.ALL files are in pure ASCII format, so you
  49. can print or edit them or use them for other purposes.  They also
  50. compress quite nicely, which is especially good if you want to store the
  51. CHKFILES.ALL file offline somewhere.  Starting with version 1.5, the
  52. file format has been changed slightly to make the files easier to import
  53. into spreadsheet programs.  Tabs have been used to seperate the fields
  54. on each line, and a header line has been added that CHKFILES uses to
  55. determine the format of the file.  Files in the older format are
  56. automatically converted to the new format when you run CHKFILES.  Older
  57. versions of CHKFILES can not read the new format.
  58.  
  59. ==========================================
  60.  
  61. Who can use CHKFILES?
  62.  
  63. CHKFILES is released as shareware and is licensed for individual
  64. evaluation.  Individuals may use CHKFILES for evaluation on their
  65. personal computers.  If they keep using it, they are expected to pay for
  66. it.  (See the final section, "How do I pay for CHKFILES".)
  67.  
  68. Business, Commercial, Educational, Institutional, Corporate, or
  69. Government use of the shareware version of CHKFILES is not allowed.
  70. Contact Stochastic Systems if you wish to include a special version of
  71. CHKFILES with some commercial product.  The only exception to this is
  72. that vendors of shareware programs may include the CHKFILES.EXE program,
  73. this text file, and the registration program as a shareware package
  74. being distributed.  This means that you can include the CHKFILES package
  75. on a disk of other shareware that you are selling, but you can not use
  76. this version of CHKFILES as a file checking program to check for
  77. corruption in the files on the disk of shareware that you are selling.
  78. If you received CHKFILES from a shareware distributor, it was NOT
  79. registered by that distributor and you are still expected to register if
  80. you continue to use it.
  81.  
  82. A special version of CHKFILES is available for commercial distribution.
  83. This commercial version is only available directly from Stochastic
  84. Systems and is customized with a special licensing file for each
  85. commercial licensee.  This licensing file also contains the number of
  86. copies you are allowed to use at any one time.  The commercial version
  87. does not work without the licensing file.  The commercial version states
  88. on the main screen the name of the licensee (usually a company or
  89. institution or a specific department) along with the number of licensed
  90. copies.  Special "commercial only" features may exist.  Contact
  91. Stochastic Systems for commercial licensing information.  
  92.  
  93. CHKFILES is distributed "AS-IS".  No warrantee is expressed or implied,
  94. including fitness for any purpose.  Stochastic Systems will not be
  95. responsible for any damage caused by the use, misuse, or abuse of
  96. CHKFILES.
  97.  
  98. ==========================================
  99.  
  100. Why should I use CHKFILES?
  101.  
  102. Do you run your system with VERIFY turned OFF to save time?  When you do
  103. a tape backup, do you leave the auto-compare turned off?  If you
  104. answered yes to these questions, then you probably can't be bothered
  105. with a utility that, if your system is working 100% perfectly, may be
  106. just a waste of time.  BUT...  if you would rather have some peace of
  107. mind, read on!
  108.  
  109. Situation 1a: You have a beautifully designed Summer Solstice Card on
  110. your computer that you use every year during that hurried summer holiday
  111. season.  Sometime in August, after the holidays are over, this file is
  112. corrupted by that game you downloaded, tried once, and then erased.
  113. Since you won't need Solstice Cards until next June, you don't notice
  114. the corruption.  You do your daily backups, your weekly backups, and
  115. your monthly backups.  Eventually, this corrupted file gets backed up to
  116. all of your tapes.  Next June, when you go to mail merge your database
  117. with your wonderful card, you notice the corruption.  You search all of
  118. your tapes and disks, and all you can find is the corrupted file.  Too
  119. bad you didn't have any way to know that it had been corrupted before
  120. you overwrote all your good backup copies!  If you had used CHKFILES at
  121. least once before the file had been corrupted, then the first time you
  122. used it after the file had been corrupted it would have warned you about
  123. it, in time to retrieve a good version from your backup tape.
  124.  
  125. Situation 1b: Instead of being corrupted, the file was somehow deleted.
  126. CHKFILES, by keeping track of what files are supposed to be in the
  127. directory, would tell you that the file had been deleted the next time
  128. you ran it.
  129.  
  130. Situation 2a: While you were away from your desk at work, your boss,
  131. needing to write a quick note, used your computer to type in and print
  132. out a message to the accountant about how wonderful your work was.  The
  133. file is accidentally stored deep inside the directory that holds all of
  134. your fonts.  (You happened to be working on font editing before you were
  135. called away from your desk, and your boss couldn't be bothered to change
  136. directories before he saved the note.) Without CHKFILES, you never would
  137. have found this note.  With CHKFILES, you see that one of the new files
  138. on your computer is a text file inside the font directory.  That looks
  139. strange, so you look at the file and learn that now would be a great
  140. time to ask for a raise!
  141.  
  142. Situation 2b: Instead of being a file that you didn't expect to be
  143. there, it is a file that you wrote containing important client
  144. information, but you forgot where you stored it.  By using CHKFILES, you
  145. can get a list of all the new files on your computer and easily find
  146. what you need.
  147.  
  148. Situation 3: You just downloaded a complex program that will install all
  149. sorts of files all over your system.  By running CHKFILES before and
  150. after installing this program, you can tell exactly what files this
  151. program added, changed, or deleted.  This information will be very
  152. useful when you want to remove this program from your system.
  153.  
  154. Situation 4: Your brother-in-law is constantly messing with his computer
  155. and then calling you to fix it.  By running CHKFILES on his computer
  156. before he messes with it, you can then run it afterwards to see just
  157. what he has deleted so you can get him up and running much faster.
  158.  
  159. ==========================================
  160.  
  161. Which version of CHKFILES should I use?
  162.  
  163. This release is version 1.5a.  It is only available in a 32-bit version
  164. for use with Windows 95, Windows NT (tested on 3.51 and 4.0), and later
  165. operating systems.  This version will not run properly in Windows 3.1
  166. with Win32s.  (It will not run at all without Win32s.)
  167.  
  168. Previous versions may still be available for 16-bit environments.  See
  169. the Stochastic Systems website at www.lightlink.com/ym for more
  170. information.  If there is enough demand from registered users, there may
  171. be a 16-bit version of 1.5a, but it is unlikely at this point.
  172.  
  173. Starting with version 1.5, the file format was changed slightly.  Files
  174. created with version 1.5 or higher will not work with version 1.4 or
  175. lower versions of CHKFILES.  When using the "one file" option, the
  176. CHKFILES.ALL file will be updated to the new format the first time you
  177. run the new program, and will then be incompatable with older versions.
  178. When using the "each path" option, older format CHKFILES.CHK files will
  179. be updated to the new format whenever any of the information in them is
  180. changed (any files are added, deleted, or changed in the directory), and
  181. will then be incompatable with older versions.  If nothing changes in a
  182. directory, the older format CHKFILES.CHK file will be unmodified.  (This
  183. was done so that you could continue to check older CDs with embedded
  184. CHKFILES.CHK files in them.  If nothing changed on the CD, no attempt
  185. would be made to overwrite the old format CHKFILES.CHK file, so there
  186. would be no error messages.  If anything changed, then the changes would
  187. be noted and there would also be an error message about not being able
  188. to write the new CHKFILES.CHK file to the CD.)
  189.  
  190. ==========================================
  191.  
  192. How do I use CHKFILES?
  193.  
  194. CHKFILES.EXE is a self-contained program.  There are no support files
  195. required.  CHKFILES will create a CHKFILES.PTH file in the same path as
  196. the executable file if you use the "Save Paths" option.  It will also
  197. store the CHKFILES.ALL file in the same path if you are using the "One
  198. File" option, or it will store a CHKFILES.CHK file in every path it
  199. checks if you use the "Every Path" option.  To run CHKFILES, either use
  200. the "Run" function in program manager, double-click on it from file
  201. manager or explorer, or assign it to a program group in program manager.
  202. In Windows 95 and NT 4.0 you can also put a shortcut to CHKFILES.EXE on
  203. your desktop or drag it to the start menu.
  204.  
  205. When CHKFILES runs, it first looks for a CHKFILES.PTH file in the same
  206. path.  If it finds this file, it will attempt to open it and read the
  207. last paths and settings that were used.  If there is no CHKFILES.PTH
  208. file, which there won't be the first time you run CHKFILES, the program
  209. will come up with no paths selected and default to "Recursive" and
  210. "Every Path" modes.
  211.  
  212. If you want to save the paths that you select so that they will be there
  213. the next time you run CHKFILES, make sure that the "Save Paths" box is
  214. checked before you click on "Begin".  The "Save Paths" box is checked by
  215. default.
  216.  
  217. If you want to select every path on your C drive, select the C drive in
  218. the drive select box (upper left), click on the "<..>" entry in the
  219. directory select box until the root directory is displayed, and then
  220. click on the "Add Path" button.  An entry for "C:\" should appear in
  221. paths list box.  Make sure that the "Recursive" box is checked.
  222.  
  223. When you change drives in the drive select box, the directory box will
  224. be updated to show the subdirectories that are in the current path on
  225. that drive.  The current path is shown at the top of the screen.  The
  226. "Add Path" button adds the current path to the path list box.  If the
  227. recursive box is checked, any path that is included inside another
  228. already selected path will be removed from the list box.  Duplicate
  229. paths are also removed.  Paths are shown sorted alphabetically.  This
  230. sorting includes all the characters in the path, including the final
  231. "\".
  232.  
  233. If you click on the recursive box when it is not checked, it will become
  234. checked and any now-redundant paths will be removed from the list box.
  235. If you click on the recursive box when it is checked, it will become
  236. clear and all paths in the list box will be automatically expanded to
  237. show all paths inside of them.  This could take a few seconds if you
  238. have many paths on your hard drive(s).  You can click on the recursive
  239. box while it is expanding the lists and it will stop expanding and go
  240. back to the recursive path list.  This is useful if you have many paths
  241. on your hard drive and you clicked the recursive button by accident.  If
  242. you have too many paths on your hard drive, and the list box fills up,
  243. you will receive an error message saying that the list box is full.
  244. This means that not all of the paths could be expanded.  If you click
  245. "Begin" with this incomplete list in the list box, not all of the paths
  246. will be checked.  (In tests with Windows 3.1, it required over 1000
  247. nested directories to fill up the list box.  Windows 95 has an even
  248. higher limit.) If you click on the recursive box again, the list will be
  249. compressed back down.  You can then click "Begin".  When you click
  250. "Begin" with the recursive box checked, the list of paths is expanded as
  251. they are being checked, and paths are removed from the list box once
  252. they are checked to make room as later paths are expanded.  This
  253. increases the number of paths that can be checked successfully.  If
  254. there are still too many paths to fit into the list box, you will get a
  255. message in the error box that will tell you which path was being
  256. expanded when the list box got full.  Checking will continue, but some
  257. paths may not be checked fully.  (A drive with over 2000 nested
  258. directories checked perfectly, so this limitation probably won't matter
  259. much.)
  260.  
  261. To remove a path from the path list, simply click on it.  Path delete is
  262. disabled while the path list is expanding through the use of the
  263. Recursive box.
  264.  
  265. If you want to quit from CHKFILES without checking any files, click the
  266. "Quit" button.  Any changes you made to the path list will be ignored.
  267.  
  268. Once you have all the paths set up the way you want them, click the
  269. "Begin" button.  If the "Save Paths" button is checked when you click on
  270. the "Begin" button, the paths and recursive state will be stored in the
  271. CHKFILES.PTH file located in the same path as the CHKFILES.EXE file.
  272.  
  273. If the "Recursive" box is checked when you click the "Begin" button, all
  274. the paths in the list box will be expanded to include all
  275. subdirectories.  Each subdirectory is expanded as it is being checked,
  276. so expansion doesn't delay the start of checking.
  277.  
  278. Before starting the actual file checking, the screen will be
  279. reconfigured to show five empty lists.  The caption of the window will
  280. show the name of the current path being checked.
  281.  
  282. The first list shows the new paths being checked and the new files in
  283. old paths.
  284.  
  285. The second list shows the names of all files deleted from old paths 
  286. since CHKFILES was last run.  If you use the "One File" option, this 
  287. list will also show any paths that were present the last time CHKFILES 
  288. was run but are not currently present.
  289.  
  290. The third list shows the names of files that have changed since 
  291. CHKFILES was last run.  If the line with the file name starts with 
  292. "L!:", this means that the file has changed in length but not time or 
  293. date.  If the file changed in time and/or date, the file name will be 
  294. listed without any prefix.  (Normally, when a file changes the time 
  295. changes as well.  It is somewhat unusual for a file to change in size 
  296. without changing time or date, which is why this is flagged so you can 
  297. know what is going on.)
  298.  
  299. The fourth list box shows the names of any files that are "bad".  A 
  300. "bad" file is defined as one that has a changed checksum but not a 
  301. changed time, date, or size.  "Bad" files will not be updated in the 
  302. CHKFILES.CHK or CHKFILES.ALL file, so if a file shows up as "bad", the 
  303. old checksum of the file will remain in the CHKFILES.CHK or 
  304. CHKFILES.ALL file and not be updated to the checksum of the file as it 
  305. now stands.  This is so you can restore this file from your backup 
  306. (you DID keep a backup, didn't you?) and then re-run CHKFILES to make 
  307. sure that your backup was good.  In the odd case where the file was 
  308. changed intentionally somehow without changing the time, date, or 
  309. size, and you don't want to do anything about it, then you will just 
  310. have to ignore the "bad" reading.
  311.  
  312. The fifth list box shows any errors that happened during the running 
  313. of the CHKFILES program.  This can include one of the other four list 
  314. boxes running out of memory due to too many messages.  If the error 
  315. list box ever runs out of memory due to too many error messages, you 
  316. will be shown a message to that effect and then the checking procedure 
  317. will abort.
  318.  
  319. During the check procedure, you can click on the "Abort" button.  This 
  320. will abort the procedure after the current file is finished (which can 
  321. take a few seconds if the current file is large).  The current path 
  322. being worked on will not be updated.  If you are using the "Each Path" 
  323. method, and the current path is a new one, then no CHKFILES.CHK file 
  324. will be created in this path.  If the current path is an old one, then 
  325. the CHKFILES.CHK file will not be updated. All previously checked 
  326. paths will have been finished correctly.  If you are using the "One 
  327. File" method, then the original CHKFILES.ALL file will remain intact.  
  328. You can look through the results on the screen, but no information 
  329. will be saved from this run.
  330.  
  331. When the last path is checked (or the abort button is pressed), the 
  332. bottom of the screen will show some statistics, which will include the 
  333. total number of files checked, the number of new files, number of 
  334. deleted files, number of bad files, number of updated files, total 
  335. number of bytes checked, time it took to check these files, number of 
  336. bytes per second, and total number of paths checked.  Note that the 
  337. total number of paths includes empty paths.  An empty path will not 
  338. have a CHKFILES.CHK file put in it or will not be entered in the 
  339. CHKFILES.ALL file.  If a path has only a CHKFILES.CHK file in it (all 
  340. other files having been deleted) the files that the CHKFILES.CHK file 
  341. says should be there will be listed as having been deleted and the 
  342. CHKFILES.CHK file will be deleted, leaving an empty directory.  When 
  343. using the "One File" method, a path that used to have some files in it 
  344. that is now empty will have those files listed as being deleted but 
  345. the now-empty directory will still be listed in the CHKFILES.ALL 
  346. file.  Note that this is different from the case where the entire 
  347. directory was deleted, which will only result in a single message 
  348. saying that all the files in that directory were deleted rather than 
  349. individual messages for each file.  If you then delete this now-empty 
  350. directory and run CHKFILES again in "One File" mode, it will report 
  351. that this directory has been deleted.  (If the directory never 
  352. contained any files then it would never be stored and so deleting it 
  353. would never be noticed.)
  354.  
  355. When the "Done" button appears, all checking is finished.  Clicking on 
  356. the "Done" button will end the program.
  357.  
  358. CHKFILES was written to be very "multi-tasking friendly".  You can run
  359. CHKFILES in the background, minimized if you like, while you run other
  360. things.  You shouldn't be changing, creating, or deleting files in the
  361. paths that CHKFILES is looking at, but you can certainly play Solitaire
  362. while checking your files.  Since CHKFILES is using the hard disk
  363. controller quite a bit, any program you use that accesses the hard disk
  364. will be slowed down somewhat and will also slow down CHKFILES.
  365. (Starting with version 1.5a, minimizing actually works!)
  366.  
  367. ==========================================
  368.  
  369. When should I use CHKFILES?
  370.  
  371. Any time you want to!  _I_ use CHKFILES at the following times:
  372.  
  373.  - Before a backup, so the backup will contain updated CHKFILES.CHK 
  374. files, so I know if any files are bad or have been deleted so I can 
  375. restore them before I do my backup, and so I can see if there are any 
  376. new files that I don't need and want to delete so they don't waste 
  377. space on my backup.
  378.  
  379.  - After defragmenting, so I know if any files were corrupted by the 
  380. process. I always backup before defragmenting, and I always run 
  381. CHKFILES before backing up, so I know that the files weren't corrupt 
  382. before defragmenting.
  383.  
  384.  - After moving large blocks of files from one partition to another or 
  385. to a new hard drive.  When I bought a larger hard drive, I ran 
  386. CHKFILES (and backup), then copied all the files over to the new hard 
  387. drive, and then ran CHKFILES again before deleting the old hard 
  388. drive.
  389.  
  390. When do other people use CHKFILES:
  391.  
  392. One user downloads and tries out lots of shareware programs.  He uses 
  393. CHKFILES to find out what files have been added to his system by these 
  394. programs, which makes it easier for him to clean up his system.
  395.  
  396. If you find an interesting use, please let me know!
  397.  
  398. What do other people like best about CHKFILES:
  399.  
  400. One registered user had inadvertently deleted some important files 
  401. from his system.  CHKFILES let him know that these files had been 
  402. deleted, and he was able to restore them from his backup.
  403.  
  404. ==========================================
  405.  
  406. Are there interactions between CHKFILES and the operating system?
  407.  
  408. Because of they way CHKFILES can leave a CHKFILES.CHK file in every
  409. directory that you check, this can interact with some of the "special"
  410. directories that are used by the Windows 95 and NT 4.0 operating
  411. system.
  412.  
  413. If you use CHKFILES to check all the paths in your WINDOWS directory, 
  414. and use the "Each Path" option, you may notice that all the entries in 
  415. your start menu have a CHKFILES.CHK file added to them.  This is 
  416. because the start menu is stored in a directory structure which is 
  417. normally filled with the links that point to the programs you want to 
  418. run when you click on items in the start menu.  Since this is stored 
  419. like any other directory structure, CHKFILES will check these link 
  420. files and place a CHKFILES.CHK file in each path.  After running 
  421. CHKFILES, the start menu will show these CHKFILES.CHK files in the 
  422. menu.  If you want to remove these from the start menu you can simply 
  423. set the CHKFILES.CHK files as Hidden.  There are many ways to do this: 
  424. You can use the explorer, the "Advanced" editing in the "Start Menu 
  425. Programs" section of the "Taskbar Properties", or the old file 
  426. manager.  All you need to do is go into the subdirectories of the 
  427. "Start Menu" directory (located in your Windows directory) and find 
  428. all the CHKFILES.CHK files.  For each file select "properties" and 
  429. then click on the "Hidden" box and then click on "Apply". Hiding the 
  430. CHKFILES.CHK file will only stop it from showing up in the Start menu, 
  431. and maybe in the explorer.  It won't stop it from being found by 
  432. CHKFILES and used to check the status of the other files in the 
  433. directory.  Starting with version 1.3, CHKFILES can find a hidden 
  434. CHKFILES.CHK file. The file will remain hidden even when it has been 
  435. updated so you won't have to go back and hide it again.  If you remove 
  436. all the other items from the directory then the CHKFILES.CHK file will 
  437. be deleted the next time CHKFILES is run.  If you then add files back 
  438. to that directory, a new CHKFILES.CHK file will be created which will 
  439. not be hidden, so you will need to hide it again.
  440.  
  441. If you have any program shortcuts on your desktop, you will find that 
  442. CHKFILES will create a CHKFILES.CHK file on the desktop when run in 
  443. "Every Path" mode. This is because all the shortcuts are stored in a 
  444. directory called "Desktop", and CHKFILES checks this directory just 
  445. like all the others.  The easiest solution, if you want to continue 
  446. running in "Every Path" mode, is to simply delete this CHKFILES.CHK 
  447. file from your desktop after you run CHKFILES.  You can easily drag 
  448. this file to the Recycle Bin.  Marking this file as "Hidden" doesn't 
  449. seem to make it disappear from the desktop.  You could also run in 
  450. "One File" mode.
  451.  
  452. A future version of CHKFILES may have an "exclude" list that will
  453. allow you to select all directories and then exclude certain
  454. directories such as the start menu and the desktop.
  455.  
  456. ==========================================
  457.  
  458. Does CHKFILES work under Windows NT?
  459.  
  460. Yes.  Version 1.4a, fixed an incompatability problem with NT.  It has
  461. been tested with NT 3.51 and NT 4.0 (both with and without service
  462. pack 3) and it seems to work just fine.
  463.  
  464. Note that if you try to check directories for which you do not have
  465. permission, this will cause an error message and the directory will be
  466. skipped.  It is probably best to run in Administrator mode.
  467.  
  468. ==========================================
  469.  
  470. Can I run older versions of CHKFILES on the same computer?
  471.  
  472. Yes, as long as they are not checking the same directories, or you use
  473. the "one file" option with one of the versions.  Previous versions
  474. used a different file format.  This version will automatically update
  475. this format, and make the file unreadable by the older version.
  476. CHKFILES will not overwrite a CHKFILES.CHK file that it can not read,
  477. so any directory with such a file in it will not be checked.  Also
  478. remember that the 16-bit version doesn't recognize the long versions
  479. of file names, so if you are using Windows 95 and alternate between
  480. older 16-bit and 32-bit versions you may see the 16-bit version
  481. reporting all your files with long names as being deleted and the
  482. short name versions of these files listed as new.  Then when you run
  483. the 32-bit version, it will report that the short name versions have
  484. been deleted and the long name versions will be listed as new.  This
  485. happens in "Every Path" mode because both versions use the same
  486. CHKFILES.CHK files for their information.  If you use "One File" mode,
  487. it would be better to put the two versions in separate paths so that
  488. they would use their own versions of the CHKFILES.ALL file.  If you
  489. keep both programs in the same path, they would not only cause false
  490. deleted/new reports on files, but also on whole paths that contained
  491. at least one long name.
  492.  
  493. ==========================================
  494.  
  495. Can I run in both "One File" and "Every Path" mode on the same 
  496. computer?
  497.  
  498. Yes.  The two modes don't interfere with one another, though you will 
  499. see listings for new and changed CHKFILES.CHK files in every path when 
  500. you run in "One File" mode, and you will see listings for a new or 
  501. changed CHKFILES.ALL file when you run in "Every Path" mode.  When 
  502. CHKFILES runs in "One File" mode, it ignores the files CHKFILES.ALL 
  503. and CHKFILES.TMP in the path where it is running from.  (If you have 
  504. files with these names in other paths it will process them just like 
  505. any other file.)  It will also process any CHKFILES.CHK files in any 
  506. path just like any other file.  When CHKFILES runs in "Every Path" 
  507. mode, it ignores any file named CHKFILES.CHK in any path, since that 
  508. is where it stores its information, but it doesn't ignore the 
  509. CHKFILES.ALL or CHKFILES.TMP files.  Note that the CHKFILES.TMP file 
  510. will normally only exist while CHKFILES is running in "One File" 
  511. mode.  It automatically deletes this temporary file when it is done 
  512. running.  If your system crashes during a run, this file may still 
  513. exist, but it will be deleted the next time you run CHKFILES in "One 
  514. File" mode.
  515.  
  516. ==========================================
  517.  
  518. Why did I write CHKFILES?
  519.  
  520. Because I wanted a program that would do this sort of thing and I 
  521. couldn't find one.  There may be some other program out there that 
  522. does the exact same thing, but I don't know of one that works in 
  523. exactly the same way.  I also wanted something fairly easy to write 
  524. that I could use to try out the shareware market.
  525.  
  526. A well-known anti-virus program from a well-known software company 
  527. does something like CHKFILES - it creates a small file in every path 
  528. with checksums in it - but it didn't do this in the way I wanted it 
  529. to, wouldn't give me the information I wanted, and I couldn't get it 
  530. to do only the paths I wanted.  It also seemed to only calculate 
  531. checksums on executable files, and I wanted to check all the files.  
  532. (It uses the checksums to see if an executable file has been modified 
  533. by a virus.  I wanted to use checksums to see if files had been 
  534. corrupted.)
  535.  
  536. Many years ago I attended a talk by a programmer who was describing 
  537. his new backup program.  It was called the "GOOD" backup program, and 
  538. he made a strong case about always doing a checksum of every file and 
  539. checking each file before storing it to the backup.  He used the story 
  540. of a corrupt file that was used only once a year not being discovered 
  541. until it had been copied to all the backup disks, thus making recovery 
  542. impossibly.  I bought a copy of his program, used it religiously, and 
  543. was very glad every time it enabled me to find a corrupt file and 
  544. recover from it.  This was for a different computer system, and the 
  545. "GOOD" backup program was not a big seller, but it made a big 
  546. impression on me.
  547.  
  548. When I started using Windows, I wanted the same sort of protection, 
  549. but I couldn't find it.  I toyed with the idea of writing my own 
  550. version of "GOOD", but since tape backup was so much more convenient, 
  551. I decided to write CHKFILES to add the protection I wanted without 
  552. having to rewrite the entire backup program.
  553.  
  554. The first version was done in Visual Basic version 3.  It worked, but 
  555. it was slow doing the checksums on the files and had some problems 
  556. with certain "unusual" date combinations.
  557.  
  558. I then moved the checksum routine to a DLL written in Turbo C++ 3.1, 
  559. and that sped things up quite a bit.  (The checksum routine is now so 
  560. fast on a modern computer that the slow part is reading the file off 
  561. of the hard drive.  I was thinking of optimizing the checksum routine 
  562. in assembly language, but that wouldn't make much difference.)
  563.  
  564. When I thought about releasing CHKFILES as shareware, I wanted it to 
  565. be a self-contained executable without requiring any external DLL's.  
  566. For this reason I translated it into Turbo C++.  (I also wanted to 
  567. have a project so I could learn Windows programming in C++.) I then 
  568. updated to Borland C++ version 4.0, which allows the program to 
  569. easily release time to other tasks when it is busy doing something 
  570. complicated.  This allowed me to play Freecell while the files were 
  571. being checked.  This current version is written in Borland C++ version
  572. 5.0, which allows the program to use the "look and feel" of Windows 95
  573. without having any extra DLL files required.
  574.  
  575. The concept and basic structure of CHKFILES seems very solid.  I have 
  576. been using it on multiple machines for over 5 years now.  The C++ 
  577. version also seems very solid, though there are a few areas that are 
  578. not fully "idiot-proof".  See the next section.
  579.  
  580. ==========================================
  581.  
  582. How dangerous is CHKFILES:
  583.  
  584. I have taken many precautions to avoid potentially dangerous 
  585. situations.  If you are using the "Every Path" mode and a path already 
  586. contains a file named CHKFILES.CHK, but it is not a file that was 
  587. created by this program - say for some strange reason you saved your 
  588. favorite apple pie recipe in a file of this name - you will get an 
  589. error message that this path can't be processed and your pie recipe 
  590. will not be touched.  (If your pie recipe file happens to be in the 
  591. same format as a CHKFILES.CHK is supposed to be in, then it will get 
  592. modified.)
  593.  
  594. When using the "One File" mode, CHKFILES uses a temporary file called 
  595. "CHKFILES.TMP" and creates or overwrites a file called "CHKFILES.ALL".  
  596. When you save paths, it creates or overwrites a file called 
  597. "CHKFILES.PTH".  It does not check to see if these files may actually 
  598. contain something you want to keep, but it only does this in the path 
  599. that the CHKFILES.EXE program is running in, so you are pretty safe.  
  600. If you must use files with these names, put the CHKFILES.EXE program 
  601. in a different path.
  602.  
  603. If your hard drive is so full that it doesn't have room for the 
  604. CHKFILES.CHK or CHKFILES.ALL files, the program may crash, but it 
  605. shouldn't do any damage (other than filling up what little space you 
  606. had left).
  607.  
  608. When using the "Every Path" option, the contents of the CHKFILES.CHK 
  609. file that is being created or updated is kept in memory until the 
  610. entire path is finished, and then the file is created and re-written.  
  611. If the system crashes during the path checking, the old CHKFILES.CHK 
  612. file will remain intact.  If the system crashes during the short time 
  613. that the CHKFILES.CHK file is being written, it is possible that a 
  614. corrupt or incomplete CHKFILES.CHK file will be in the path.  In this 
  615. case, this path may give an error message the next time you try to 
  616. check it.  The corrupt CHKFILES.CHK file will not be deleted 
  617. automatically, because the program doesn't know if this corrupt file 
  618. is really a corrupt file or your pie recipe.  You would then have to 
  619. manually delete this corrupt file and recheck that path.
  620.  
  621. When using the "One File" option, the contents of the CHKFILES.ALL
  622. file that is being created is stored as CHKFILES.TMP.  This is because
  623. the old CHKFILES.ALL file is read as each path is checked.  If the
  624. system crashes during checking, the old CHKFILES.ALL file will remain
  625. intact and the CHKFILES.TMP file may remain in the path.  The
  626. CHKFILES.TMP file will be overwritten when CHKFILES is next run.  When
  627. the checking is done, the old CHKFILES.ALL file is deleted and the
  628. CHKFILES.TMP file is renamed to CHKFILES.ALL.  It is unlikely that any
  629. corruption of the CHKFILES.ALL file could happen.
  630.  
  631. There may be limitations on the number of paths that you can check in
  632. one run of CHKFILES.  The paths are stored in a standard Windows list
  633. box, and there may be limits on how much can be stored in a list box.
  634. In Windows 3.x, these list boxes couldn't hold more than 32K of text.
  635. Assuming 32 characters in the average path, this means you couldn't
  636. check more than 1000 paths in one run.  You could, however, run
  637. CHKFILES multiple times with different sets of paths.  Only one user
  638. has ever reported hitting this limit, and he was using an older
  639. version of CHKFILES.  Starting with version 1.3, the paths are
  640. expanded while they are being checked, and paths that have been
  641. checked are removed from the list to free up space.  If you had all
  642. 1000 subdirectories in the same directory, you would still have this
  643. limit.  If you had these directories nested within one another (a more
  644. likely situation) then you probably wouldn't hit this limit.  Windows
  645. 95 expands the memory limit on list boxes so it is very unlikely that
  646. youy will see any limitations when running CHKFILES under Windows 95.
  647.  
  648. Because of the same listbox limitation, if you have too many new, 
  649. changed, deleted, or bad files, the list boxes may overflow during 
  650. checking.  (This is one reason when an entire path is new it only 
  651. generates one line saying "All files in path X" rather than a line for 
  652. each new file.) If, for example, you have thousands of picture files 
  653. in multiple directories that have already been checked, and then you 
  654. run all of these picture files through a program that creates 
  655. thumbnail files for each picture, you could end up with so many new 
  656. files in old paths that the "new files" list box would fill up.  This 
  657. _has_ happened to me, before I switched to Windows 95.  In this case, 
  658. the list box that filled up would stop accepting any more information 
  659. and an error message would be added to the error list box stating 
  660. that the "new files" list box was full (or whatever box happened to 
  661. fill up).  Once this error message is added to the error list box, no 
  662. more attempts are made to add information to the full list box, so 
  663. you won't get multiple error messages about the same problem.  
  664. Checking will continue so that all the selected paths will be 
  665. checked, and all you will lose is the notification about more files 
  666. of the type that caused the list box to fill up.
  667.  
  668. ==========================================
  669.  
  670. What should I not bother complaining about:
  671.  
  672. CHKFILES was designed to be a self-contained executable.  As such, it 
  673. doesn't use or need any external files (except the CHKFILES.PTH file 
  674. to store the paths and the one CHKFILES.ALL file or the multiple 
  675. CHKFILES.CHK files, but it creates these for you).  Because of this 
  676. goal, CHKFILES only uses the standard system buttons.  Starting with
  677. Windows 95, this now includes "3D" buttons, but does not include some
  678. of the newer features.
  679.  
  680. CHKFILES was designed to be easy for ME to use.  I use a mouse to run 
  681. it.  I realize that someone who tries to use the keyboard will have a 
  682. very hard time of it.  Specifically, with the keyboard it is not 
  683. possible to select individual items in the directory and paths list 
  684. boxes.  Since I didn't want to have to double-click on items with the 
  685. mouse to select them, that meant that keyboard use would be 
  686. restricted.  Sorry.  (The earlier version in Visual Basic required 
  687. double clicking, and I didn't like that.)  Windows is hard enough to 
  688. use with just a keyboard that I figure that not enough people will 
  689. need to use the keyboard to make it worth while.  If this causes 
  690. anyone real problems, please let me know.  I have some ideas on what 
  691. to do about this, but if no one needs it, I won't bother with it.
  692.  
  693. ==========================================
  694.  
  695. What is in the future for CHKFILES:
  696.  
  697. CHKFILES is shareware.  This was my first venture into Windows-based 
  698. shareware, though I have a different shareware program on another 
  699. platform and have actually received some payments for it (though not 
  700. that many).  (This other program, Rapsheet, is now available in 
  701. Windows.)  I am not expecting to get rich from this program, but if I 
  702. make enough I will keep supporting it and do some other programs.
  703.  
  704. There are some enhancements that I plan on adding to CHKFILES, and I 
  705. will continue to fix bugs or limitations as they come up.  How much 
  706. work I put into upgrades will depend on the response I get.  Some of 
  707. the plans I have include adding things that happen when you click on 
  708. files after the checksum phase is over (or possibly during it).  For 
  709. instance, if you clicked on a file marked "Bad" you could get the 
  710. option of marking the file as good and updating the CHKFILES.CHK or 
  711. CHKFILES.ALL file.  If you got an error saying that a CHKFILES.CHK 
  712. file was corrupted so it couldn't process a path, you would get an 
  713. option to delete the CHKFILES.CHK file and reprocess that path.  If 
  714. you got an error due to an overflowing list box, it could pause for 
  715. you to read all the list boxes and then clear their contents and 
  716. continue.  So far, none of these things have been requested by 
  717. registered users.  The features I have added have mainly been ones 
  718. that users have requested.  If you have other things you would like, 
  719. let me know.
  720.  
  721. ==========================================
  722.  
  723. Can I use CHKFILES commercially or in an educational or governmental 
  724. institution?
  725.  
  726. The shareware release of CHKFILES is only for individual use.  If you 
  727. wish to license a special version of CHKFILES for your business or 
  728. other institution, contact me at the address given below.  The 
  729. commercial licensing rate is quite reasonable, and there are quantity 
  730. discounts.  The special version would have your business or 
  731. institution name clearly visible to the user.
  732.  
  733. ==========================================
  734.  
  735. How do I pay for CHKFILES:
  736.  
  737. If you like CHKFILES, use it and share it with your friends.  If you 
  738. find that you use it regularly, I would expect you to register it.  
  739. The registration fee is US$15.  Starting with version 1.5,
  740. registration is being handled by Kagi.  Registration can be done by
  741. email, fax, phone, or mail.  Run the included REGISTER program and
  742. fill out the form.  If you are a U.S. resident and wish to register by
  743. check or money order, you can still register directly with Stochastic
  744. Systems.  There is a slight discount for doing this.  If you want to
  745. register by credit card, you will have to use Kagi.
  746.  
  747. When you register, you should provide a user name.  This name should
  748. be the name of the registered user (personal name, not a business name
  749. or "handle"), must be 20 characters or less, and should consist only of
  750. printable ascii characters, such as those that you can type from the US
  751. standard keyboard.  Please do not use accented letters, as this can mess
  752. up the registration process.  This name will be used to generate a
  753. unique registration key number that will be sent back to you.  When you
  754. click on the Register button on the startup screen, you will be
  755. presented with a form that will ask for the user name and key number.
  756. When you enter your valid user name and key number, the program will
  757. generate a file called CHKFILES.SER which will contain this name and key
  758. number (so the program won't have to ask you again) and from then on
  759. when you run CHKFILES it will not show the startup screen any more.
  760. (The startup screen is still available - you can get to it from the
  761. upper-right hand icon on the main screen before you click on the Begin
  762. button.)  The main screen will show your user name and state that the
  763. program is registered to you.  To remove the registration from the
  764. program, simply delete the CHKFILES.SER file.  For fastest response,
  765. include your email address with your registration order.
  766.  
  767. In the future there may be some new features that are only activated by
  768. the registration key, such as being able to save a text file that lists
  769. the contents of the list boxes at the end of the test.
  770.  
  771. If you registered CHKFILES before March of 1998 (when version 1.5 was
  772. released) and would like a registration number, please send me email.
  773.  
  774. If you registered an older version of CHKFILES, but did so after March
  775. 1998, you can upgrade to a current registration for the difference
  776. between your originally registration fee and the current fee of $15.
  777. Upgrades must be done directly with Stochastic Systems, so please
  778. contact Stochastic Systems first to verify your registration status.
  779.  
  780. You are allowed 30 days to evaluate CHKFILES.  If you do not want to
  781. register it after that time, you should delete all copies of CHKFILES
  782. and all of the CHKFILES.CHK and CHKFILES.ALL files from your computer
  783. system.
  784.  
  785. If you are a US resident and wish to register by check or money order, 
  786. you may mail your money (payable to Stochastic Systems) to:
  787.  
  788. Ron V. Webber
  789. Stochastic Systems
  790. P.O. Box 925
  791. Dryden, NY 13053 USA
  792.  
  793. Please use the REGISTER program, select "US Check or Money Order" for
  794. the payment type, print out the form, and send it with your payment.
  795.  
  796. For non-US residents, or those who wish to register using a credit card,
  797. please use the REGISTER program and following the instructions for
  798. registering through kagi.
  799.  
  800. I can be reached by email at:  ym@lightlink.com
  801. I can also be reached at: stochastic@kagi.com
  802.  
  803. The second email address should remain valid even if I change servers.
  804.  
  805. You can also reach me at my web page:  http://www.lightlink.com/ym
  806.  
  807. The web page has a link to the latest version of CHKFILES and also has 
  808. links to any other shareware programs I may have released.
  809.  
  810. I am interested in knowing who is using CHKFILES.  If you find an
  811. interesting use that I didn't think of, let me know by email.  If you
  812. have sent me money, let me know that it is on the way.  If you register
  813. by email or web access through Kagi, they will let me know that you have
  814. registered, so you don't have to bother sending me email directly,
  815. though you still could.  If you find a bug or could recommend a new
  816. feature, let me know.  If you think it is stupid and a waste of your
  817. time, don't bother to let me know.
  818.  
  819. I would also be interested in hearing ideas for more projects, job 
  820. offers, donations, praise, etc..  Sorry, marriage proposals will no 
  821. longer be accepted.  (My wife wouldn't like that!)
  822.  
  823. ==========================================
  824.  
  825. Revision history:
  826.  
  827. Version 1.5a fixes a problem with the statistics given at the end of the
  828. run if you have more than 4G (4,294,967,295) total bytes in files that
  829. were checked.  The byte count would wrap around back to zero and so
  830. would give a much smaller number.  This would also affect the statistic
  831. about how many bytes per second were checked.  This would not cause any
  832. problem with the CHKFILES.CHK or CHKFILES.ALL files.  Also, you can now
  833. minimize the program when it is running.
  834.  
  835. Version 1.5 added registration keys to turn off the startup screen and
  836. also changed the file format to make the files easier to load into
  837. spreadsheets.  If you abort a "one file" run, it will no longer list all
  838. the remaining paths as being deleted.  Some of the list boxes had their
  839. sizes changed slightly to accomodate more lines of text (they were
  840. slightly too short to allow 5 lines).  This version also is the first one
  841. to allow on-line regstration through Kagi. 
  842.  
  843. Version 1.4a fixed an incompatibility problem with Windows NT.  NT sorts
  844. list boxes in a different way from 95.  CheckFiles relies on the
  845. directory list box always having the ".." entry as the first entry
  846. (unless it isn't there at all).  In earlier versions I found a problem
  847. with people who had a directory that would sort to before the "..", such
  848. as a directory beginning with a "#" character.  I solved this problem by
  849. turning the ".." entry into "<..>" and having all the other entries
  850. begin with "[".  "<" should always sort to before "[", and it does this
  851. in every version of Windows I had tested it on, until I tried it on
  852. Windows NT.  For some reason, Windows NT sorts "[" before "<", which
  853. messed everything up.  This version solves this by adding a space before
  854. the "<".  Space always sorts to before any other character, so this
  855. works in all versions of Windows.
  856.  
  857. Version 1.4a is also the first version to use version 5 of Borland C++.
  858. Previous versions used version 4.  This allows the program to be listed
  859. as a real Windows 95 program, which makes Windows 95 show it with the
  860. 3-d buttons and gray background.  In other words, it finally has the
  861. "look" of a Windows 95 program.  This means that it will not look
  862. right in older versions of Windows.
  863.  
  864. I also fixed a problem with the one-file option that related to the
  865. strange sorting method.  If you had a directory that began with a
  866. strange character (like "~"), the order the directories would be stored
  867. in the CHKFILES.ALL file would not be in ASCII order but in the order
  868. that Windows puts them in.  This would cause a problem if you added this
  869. directory to one with other directories - you would be told that all the
  870. other directories had been deleted and then these same directories would
  871. be listed as "new".  No one has complained of this problem, and I only
  872. found it by accident, but it is now fixed.
  873.  
  874. Version 1.4 finally fixed the last (?) incompatibility with Win32, and 
  875. is the first release to have both 16-bit and 32-bit versions.  (The 
  876. last problem was the way Win32 stored volume names, which is quite 
  877. different from the way 16-bit Windows does it.)
  878.  
  879. The "<..>" entry was removed from the directory list for root 
  880. directories. This would only show up on networked drives that look 
  881. like root directories but are actually subdirectories on other 
  882. computers.
  883.  
  884. The "One File" option was added to store all information in a master 
  885. file called CHKFILES.ALL.  This was requested by some users.
  886.  
  887. The main screen now shows the copyright notice, which was previously 
  888. only on the startup screen.  This is needed for commercially licensed 
  889. versions that do not have the startup screen.
  890.  
  891. The CHKFILES icon on the main screen now brings up licensing 
  892. information.
  893.  
  894. Version 1.3a corrected a bug that was reported by a user.  If you have 
  895. a subdirectory whose first character is one of the following 
  896. non-alphanumeric characters: !"#$%&'()+,- then when the recursive 
  897. search would lock up, which could cause a general protection fault.  
  898. The reason for this is that the program always assumes that the first 
  899. entry in the subdirectory list is the ".." sequence, which marks the 
  900. way back up the directory tree.  Since the subdirectory list is a 
  901. sorted list and the characters given above come before the "." 
  902. character in the normal character set, this would stop the ".." entry 
  903. from being the first one in the list.  The solution was to change the 
  904. first entry from "[..]" to "<..>".  Since the "<" character comes 
  905. before "[" in the character set, "<..>" would always sort to before 
  906. "[anything]", which solves the problem.
  907.  
  908. Version 1.3 Changes:
  909.  
  910. Changed the way information was stored internally, resulting in a 
  911. slightly smaller program than 1.2, even with more features!  The most 
  912. visible change is that the path expansion when you click "Begin" is 
  913. now done during the checking phase.  Previously, when you clicked 
  914. "Begin", all the paths would expand first, and then the checking 
  915. phase would start.  This caused a delay before checking started and 
  916. meant that you couldn't check more paths than would fit into a list 
  917. box.  By expanding paths as they are checked and removing checked 
  918. paths from the list box, many more paths can be checked.  (If you 
  919. have two directories, each with 500 subdirectories in them, the older 
  920. version might not be able to fit all 1000 paths into the list box.  
  921. Version 1.3 will expand the first 500 subdirectories, check and 
  922. remove each of them from the list box, and then have plenty of room 
  923. to expand the second set of directories.  Expanding paths by clicking 
  924. on the "Recursive" box will still have the original limitation, but 
  925. it now has an error message telling you that not all paths could be 
  926. expanded and that you should click the "Recursive" box again to 
  927. compress the paths before clicking "Begin" to start checking.
  928.  
  929. Each path now ends in a final backslash.  Before, only root 
  930. directories ("C:\") would have the final backslash.  This 
  931. modification allows the paths to be sorted better and aids in the 
  932. proper collapse of expanded path lists.  The CHKFILES.PTH file still 
  933. stores the paths without the final backslash, except for root 
  934. directories, in order to maintain compatibility with older versions.
  935.  
  936. Files which have a date after 2079 will now have their dates stored 
  937. using the full four digits.  Previously, only the last two digits of 
  938. the date would be stored in the CHKFILES.CHK file - 80 to 99 
  939. representing 1980 through 1999 and 0 to 79 representing 2000 through 
  940. 2079.  It is possible to set the date on the computer as high as 2099, 
  941. and if you had any file with such a date on it the program would 
  942. always report that the file had changed.  For example, a file that 
  943. thought it was created in 2083 would previously have the date 
  944. recorded as "83", which would be confused with 1983.
  945.  
  946. If the CHKFILES.CHK file is marked "Hidden", it will still be found 
  947. and updated while remaining hidden.  Previously, if the CHKFILES.CHK 
  948. file was hidden, the program would not find it and would treat the 
  949. path as a new one, though when it tried to create a new CHKFILES.CHK 
  950. file in the path is would overwrite the hidden one and the new file 
  951. would retain the hidden attribute of the older file, thus the 
  952. CHKFILES.CHK file would remain hidden but the files would not be 
  953. checked and the path would constantly be listed as new. This feature 
  954. was added because of the way Windows '95 stores the task bar start 
  955. menu.  The menu is stored as a nested directory structure  in the 
  956. "Start Menu" directory (usually STARTM~1 in short file names).  Any 
  957. files found inside this "Start Menu" directory will be shown in the 
  958. start menu, and this includes the CHKFILES.CHK files.  Since you 
  959. wouldn't normally want to see the CHKFILES.CHK files in your start 
  960. menu, you can now make these files hidden (using the Explorer or File 
  961. Manager) so that they won't show up on the start menu but will 
  962. continue to protect the files in the start menu.
  963.  
  964. Version 1.2 changed how some of the internal disk routines worked, 
  965. trying to eliminate any that don't work with Win32.  This is in 
  966. preparation for a 32-bit version that will handle the long file names 
  967. of 95 and NT.  This version also will recognize subdirectories and 
  968. files that are marked "System" (but not those marked "Hidden"), which 
  969. the previous versions would ignore.  Note that this still doesn't work 
  970. with long file names since it is still a 16-bit application.  If I 
  971. compile it as a 32-bit application, which I have done in unreleased 
  972. tests, it works with long file names, but some other things don't work 
  973. properly.
  974.  
  975. Version 1.1 translated characters from DOS text to Windows ANSI text.  
  976. This would only show up on files with non-standard characters such as 
  977. the one-half symbol. 
  978.  
  979. Version 1.0a corrected a minor bug that would cause the first 
  980. subdirectory on any given partition to be skipped if you operated in 
  981. Recursive mode.
  982.  
  983. Version 1.0 was released for about 2 hours and no one ever used it.
  984.  
  985. ==========================================
  986.  
  987. Other products from Stochastic Systems:
  988.  
  989. RapSheet Time Logger.  Helps you to keep track of how much time you 
  990. spend doing various tasks.  It can be used to determine a breakdown of 
  991. your time spent doing various types of things on your computer, which 
  992. is useful (and required) for those who plan on deducting some of their 
  993. computer expense from their taxes.  It can also be used to keep track 
  994. of any other time based activities.  Available NOW from the Stochastic 
  995. Systems home page and from major shareware distributors.
  996.  
  997. Coming Soon (maybe): The Too Many Notes Tune Editor.  At the forefront
  998. of CAMP (Computer Aided Music Performance).  Allows you to create
  999. musical performances that sound exactly the way you would have played
  1000. them if you had the talent to play them that way.  Requires the
  1001. ability to read music and a sense of rhythm, but not necessarily at
  1002. the same time (or by the same person). 
  1003.