home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PROGRAMS / UTILS / COMPRESS / FWKCS109.ZIP / FWKCS109.DOC < prev    next >
Encoding:
Text File  |  1991-03-07  |  137.9 KB  |  3,061 lines

  1. FWKCS(TM) Contents_Signature System, Ver. 1.09, 1991 Mar 07.
  2. Copyright (C) 1988-91 by Frederick W. Kantor. All rights reserved.
  3. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  4. ........................ C A V E A T   O P E R A T O R ........................
  5.  
  6.  All of the FWK and .BAT programs cited or listed herein, this document, and
  7.             this Authenticity Verification Zipfile FWKCS109.ZIP,
  8.                                     are,
  9.      in accordance with their respective dates of creation or revision,
  10.         Copyright (C) 1988, 1989, 1990, 1991 by Frederick W. Kantor.
  11.                             All rights reserved.
  12.  
  13. This material is being distributed in an Authenticity Verification Zipfile,
  14. with the name FWKCS109.ZIP. In a true copy, every file in the zipfile must
  15. test  OK -AV and the AV code =
  16.              "# OFT466   Frederick W. Kantor (founder/information mechanics)"
  17. No one has any permission from me to add to, subtract from, or modify, the
  18. contents of this zipfile.
  19.  
  20. "|" on the left denotes some new material which has been inserted, below;
  21.  
  22. -----------
  23. | Version 1.09 is a maintenance release, primarily to add operation under
  24. | Microsoft Corp.'s MS-DOS 4.01.
  25. | I thank Dave Orcutt for his help in alpha testing FWKCS Version 1.09 using
  26. | "Lantastic" and DOS 4.01.
  27. |---
  28. |
  29. |Note: for those who have already set up FWKCS Ver. 1.06 - 1.08 and loaded
  30. |command_line macros (/d) [b], [c], [d], or [e], a batch program KEEPMACS.BAT
  31. |is included in this file FWKCS109.ZIP, to automatically extract those macros
  32. |from your working copy of FWKCS.COM and install them in your new copy.
  33. -----------
  34.  
  35. ...........
  36. : Version 1.08 is a maintenance release, to correct a bug in age_testing
  37. : of non_zip files.
  38. ...........
  39.  
  40. ...........
  41. :Version 1.07 is an upgrade, providing some new capabilities and options:
  42. :---
  43. :
  44. :Zipfiles which contain different files with the same filename are now
  45. :automatically handled, by unzipping them in groups which have the same
  46. :internal path information and no overlapping filenames. This prevents one file
  47. :from overwriting another, so that McAfee's SCAN can check each one for
  48. :viruses.
  49. :
  50. :This freed the /a5 and /a6 t suboption, which is now used in
  51. :
  52. :  t,trashold;  subdirectory to hold files rejected as redundant or duplicate.
  53. :---
  54. :
  55. :FWKCS now saves internal path information for a file in a zipfile when making
  56. :a contents_signature line. This internal_path appears after the external path,
  57. :separated from it by a comma:
  58. :
  59. :CONTENTSIGNATURE FILENAME.EXT FILENAME.ZIP D:\PATH,INNER_PATH
  60. :
  61. :To accomodate this additional information, the line can now be up to 253
  62. :characters long, followed by carriage_return__line_feed.
  63. :
  64. :Availability of internal_path supports automatic deletion of unwanted material
  65. :from zipfiles in which the file to be deleted has a path zipped with it.
  66. :---
  67. :
  68. :A new flag has been added for use in column 17 of CSLIST(1):
  69. :
  70. :  k  Keep full line. This can be used to protect extended line structure when
  71. :     using the /vs or /vp reVise suboptions (the /v option by itself preserves
  72. :     a full line).
  73. :---
  74. :
  75. :For convenience in using column_17 flags, a new auxiliary function, with
  76. :suboptions, has been added (third screen of FWKCS/a):
  77. :
  78. :7. format: FWKCS (infile) /a7.n(flags) (outfile1 (outfile2))
  79. : for use with CSLIST column 17 flags:
  80. : if no INFILE, uses "standard input".
  81. : if no OUTFILE, uses "standard output".
  82. : /a7.0  strip all flags.
  83. : /a7.1flag  insert (lower_case) flag.
  84. : /a7.2flags  (in /a7.2, flags are compared independent of case):
  85. :   if no specified flag, default is all flags.
  86. :   if no outfile2, output only lines with a matching flag;
  87. :     else put lines without matching flag in outfile2.
  88. :---
  89. :
  90. :The deletion_log capability under /a5 and /a6 has been modified to only open
  91. :the log file briefly when making its entries, so that the log file is not
  92. :held open during an upload. This supports use of a single log file
  93. :for keeping track of deletions made from uploaded zipfiles on systems which
  94. :have multiple nodes. To direct all deletion entries to a single log, specify
  95. :the log file with path information, e.g., d:\path\deleted.log.
  96. :---
  97. :
  98. :The o,oust; suboption of /f, /g, /a3, and /a4 has been modified so that, if
  99. :there is no output to the specified OUST file, the file is deleted. This can
  100. :be used to control branching in a .BAT program, by testing for whether the
  101. :file exists.
  102. ...........
  103.  
  104. ..........some important changes introduced with Version 1.06:
  105. :Version 1.06 is an upgrade, providing new capabilities and options.
  106. :
  107. :Previously, the system used FWKCSF.COM and FWKZCS.COM, each entirely in
  108. :assembly_language, with FWKCSF calling FWKZCS. The two program have been
  109. :merged into a single assembly_language program, FWKCS.COM.
  110. :
  111. :To provide for using the new options, the command line can now call four
  112. :macros, each of which can be up to 73 bytes long, which can be separately set
  113. :by means of FWKCS /d. If FWKCS has been compressed without destroying its .COM
  114. :structure (for example, if it has been compressed using Phil Katz's
  115. :PKLITE(R)), it will still accept changes by means of /d in its internal
  116. :defaults and write itself out as an uncompressed .COM file.
  117. :
  118. :FWKCS is now able to read commands from files and make them part of the
  119. :command line. These command files can make use of the /d macros, which are
  120. :expanded as part of the command line.
  121. :
  122. :For convenience in tailoring the program to specific applications, the full
  123. :expanded command line can be written to an output file, which can be edited
  124. :and then used as a configuration file which is read as part of the command
  125. :line.
  126. :
  127. :The command line can now override the default log file for uploads, whether
  128. :directly, or by a configuration file, or by a macro.
  129. :
  130. :Special flags have been added to the contents_signature lists. Each of these
  131. :   flags is in lower_case, in decimal_column 17, counting the left column as
  132. :   "1":
  133. :
  134. :e  keeps a specific name with its contents_signature, so that subsequent
  135. :   logical decisions can be based on both the cs and the name.
  136. :
  137. :r  establishes a cross_reference, providing a way to link one cs to one or
  138. :   more other cs's. On retrieval, they are transcribed into a form which can
  139. :   be fed back again to chain references together.
  140. :
  141. :w  wipe_flag: this can be used to label a cs so that, if a file with matching
  142. :   cs is found in an uploaded non_AV zipfile, that file may be deleted.
  143. :
  144. :x  exclusion_flag: this can be used to label a cs so that, if a file with
  145. :   matching cs is found in an uploaded zipfile, that zipfile will be excluded
  146. :   from the system. For example, this can be used to block the acceptance
  147. :   of commercial software, to block known trojans which can't be caught by
  148. :   virus programs, etc.
  149. :
  150. :The integrity of these flags and their reference data is preserved during
  151. :consolidation of files using /v, /vp, and /vs.
  152. :
  153. :These flags are used in new or enhanced features for accessioning files and
  154. :automatically operating an electronic "bulletin board" system.
  155. ..........end of sublist re Ver. 1.06.
  156.  
  157.  
  158. Introduction:
  159. ~~~~~~~~~~~~~
  160.     Every physical process may be regarded as transcription of information
  161. from one representation to another. One may regard this present work as an
  162. application of this conceptual picture.
  163.  
  164.     One use is to provide a convenient solution to a problem which faces many
  165. Electronic Bulletin Board System Operators: duplicate or redundant material.
  166.  
  167.     This solution is presently in use on The Invention Factory BBS
  168. (212-431-1194), where it automatically processes zipfiles uploaded to the
  169. system, accepting or deleting them, prepares messages for the users, updates
  170. its reference material, and keeps a log.
  171.  
  172.     All the file_contents in an uploaded zipfile are checked against all the
  173. file_contents in all the publicly accessible zipfiles on the system -- well
  174. over one hundred thousand files, contained in over twenty_five thousand
  175. zipfiles.  If the new zipfile's contents all appear in a single zipfile
  176. already on the system, the zipfile is treated as a duplicate, and deleted. If
  177. each of the contained files appears to be a duplicate of a file appearing
  178. within the prior zipfiles, but they do not make a one_to_one matching with all
  179. the ones from a single zipfile, then the new file is treated as redundant, and
  180. deleted. These pieces could come from 16000 different zipfiles and still be
  181. recognized as forming a redundant composite.
  182.  
  183.    This comparison process also includes files which have been retired from
  184. the system: using the /vs option, contents_signatures unique to the older
  185. files are carried forward into the new master_list, but the drive\path part of
  186. the older material is dropped.
  187.               (These specially retained lines can be collected separately by
  188.               using the command    FIND /v ":" <cslist.srt >carried <enter>,
  189.               where "FIND" is the IBM/MS DOS FIND.)
  190.  
  191.     The search and analysis time for a typical zipfile comes to less than the
  192. time it takes to use PKUNZIP (R) (Phil Katz's) to test the zipfile integrity.
  193.  
  194.     This is made possible by use of what I call "contents_signatures", so, I
  195. will explain a little about what they are, and then I will give some examples,
  196. including the specific application of running an EBBS. After that, I will give
  197. a step_by_step guide to commands which appear on the different screen
  198. displays, and to two which don't.
  199.  
  200.     First, let me thank other people whose programs are used in connection
  201. with these programs:
  202.        Phil Katz, for PKZIP, PKUNZIP, and ZIPfiles
  203.        Ben Baker, for QSORT
  204.        Vernon Buerg, for LIST
  205.        Fred Clark, for PCBoard
  206.        McAfee Associates, for SCAN
  207.        International Business Machines Corporation and Microsoft Corp., for
  208.          DOS 3.3, ATTRIB, FIND, CHKDSK, BASICA
  209.  
  210. And let me also thank Eric Isaacson, for A86 and D86, with which (under proper
  211. license) my .COM programs were assembled and checked; and American
  212. Cybernetics, for Multi-Edit, with which I was able to concurrently write the
  213. many pieces which are quickly assembled by A86.
  214.  
  215.     For those of you who are interested in the conceptual structure behind
  216. this work, you might look in your library for a copy of Frederick W. Kantor,
  217. "Information Mechanics" (Wiley, 1977): they asked permission to publish as a
  218. book my personal research notes on representation of information in physical
  219. systems; it is literally the defining work for what has become the fourth
  220. mechanics our civilization has had in more than five hundred years.  Further
  221. discussion of that subject would be outside the scope of these program DOCs.
  222.  
  223. This file, version 1.09, includes a set of programs for creating and
  224. manipulating "contents signatures". For this reason, this DOC provides the
  225. combined DOCS for:
  226.  
  227.   FWKCS(TM) Contents_Signature System, Ver. 1.09, 1991 Mar 07,
  228.     which makes Y.BAT, ACCESION.BAT, ACCESZIP.BAT, PCBTEST.BAT.
  229.   FWKDG(TM) Dirguide.txt Drives C:- Z:, Ver. 1.08, 1990 Feb 21.
  230.   FWKDG108.BAT
  231.   FWKC17D(TM) ("Column 17 Delete") selective deletion program
  232.   KEEPMACS.BAT, NULSTART.BAT, ZIPSTART.BAT, FULSTART.BAT, REVERT.BAT,
  233.   CSLIST.BAT, CSDUPS.BAT, ZCSLIST.BAT, ZCSDUPS.BAT, ZCSDUPSC.BAT
  234.   FWKCSKIT(TM) Contents Signature Kit (batch file)
  235.  
  236. (including suggestions for use of, and full listings of, these .BAT programs)
  237.  
  238.  
  239. FILE Contents:
  240.  
  241.      README.1ST    A short note to the reader
  242. |    REGISTER.DOC  Registration prices, forms of payment, address
  243.      FWKCS109.DOC  <--- you are here
  244.      FWKCS.COM     used as master program which also calls others
  245.      FWKDG.COM     used here for listing files on drives C:-Z:, and in
  246.                      supporting FWKCS option /a1
  247.      KEEPMACS.BAT  to transfer macros from Ver. 1.06 of FWKCS.COM to new copy
  248.      NULSTART.BAT  for quick initial setup with empty reference files
  249.      ZIPSTART.BAT  for initial setup with working reference files about zips
  250.      FULSTART.BAT  for initial setup with working reference files about all
  251.                      accessible files on system, both zipfiles and non_zip
  252.                      files
  253.      REVERT.BAT    sets all defaults on the right of "=" in FWKCS /d to the
  254.                      initial conditions on the left of "="
  255.      FWKCSKIT.BAT  to run some contents_signature programs (except FWKC17D) in
  256.                      one pass; see full listing             ~~~~~~~~~~~~~~
  257.      CSLIST.BAT    to make contents signatures for files on C:-Z:
  258.      CSDUPS.BAT    to find non-unique CS's for files on C:-Z:
  259.      ZCSLIST.BAT   to make contents signatures for zipfiles on C:-Z:
  260.      ZCSDUPS.BAT   to find non-unique CS's for zipfiles on C:-Z:
  261.      ZCSDUPSC.BAT  like ZCSDUPS, but also makes a multiplicity count + report
  262.      FWKC17D.BAS   "column 17 delete" : to delete designated files (section 9)
  263.      FWKDG108.BAT  to make DIRGUIDE.TXT
  264.      FWKDG108.SCR  displayed after making DIRGUIDE.TXT
  265.      FINDUNAV.BAT  to find non_AV files in AV_zipfiles
  266.      AVONLY.BAS    to make TOREJECT.BAT to delete non_AV files from AV_zips
  267.      LISTMAKR.BAT  uses fwkcs /1x option
  268.      REVCSLST.BAT  to carry forward cs's of retired files
  269.      FWKTDR19.BAS  for cleaning up text directories after deleting duplicates
  270.      DSA.COM       Directory Spacing Adjust, Copyright 1988 by Fred Kantor
  271.                      (Frederick W. Kantor), may be called by FWKTDR19.BAS
  272.  
  273. Various .BAT examples listed in this DOC are illustrated using the sorting
  274. program "QSORT" (please see thanks below); to run them, please have QSORT, or
  275. another sorting program which you modify those batch files to call, available
  276. in the current directory or via PATH.
  277.  
  278. For those who have already set up using macros in FWKCS Ver. 1.06 - 1.08, to
  279. run KEEPMACS.BAT, please have your working copy of FWKCS.COM Ver. 1.06 - 1.08
  280. available via PATH and not in the default subdirectory; unzip FWKCS.COM Ver.
  281. 1.09 and KEEPMACS.BAT from FWKCS109.ZIP; and then run KEEPMACS<enter>.  This
  282. does not set the /d paths on the right side of the "=" sign -- it only
  283. transfers the /d macros [b], [c], [d], and [e] to your new copy.
  284.  
  285. To run NULSTART.BAT, please have FWKDG and FWKCS available in the current
  286. directory (it copies all three and runs FWKCS), with ATTRIB available via
  287. PATH.
  288.  
  289. To run ZIPSTART.BAT, please have FWKDG and FWKCS available in the current
  290. directory;  with (IBM/MS DOS) FIND and QSORT or their replacements, and
  291. ATTRIB, available via PATH.
  292.  
  293. To run FULSTART.BAT, please have FWKDG and FWKCS available in the current
  294. directory; with QSORT, or its replacement, and ATTRIB, available via PATH.
  295.  
  296. To run FWKCSKIT.BAT, CSLIST.BAT, or CSDUPS.BAT, please have the "FIND" and
  297. "SORT" commands, or their substitute which you modify those batch files to
  298. call, available in the current directory or via PATH.
  299.  
  300. DOCS Contents:
  301.      1. What is a contents signature?
  302.      2. What are some uses? (with some working examples and .BAT listings)
  303.        2.1 Finding files and adding new files
  304.        2.2 Running this with an electronic bulletin board system: PCBoard 14.n
  305.          2.2.1 Broader use under EBBS with plain ascii output for sending
  306.        2.3 Accessioning zipfiles
  307.        2.4 Accessioning general files
  308.        2.5 CSLIST
  309.        2.6 CSDUPS
  310.        2.7 ZCSLIST
  311.        2.8 ZCSDUPS
  312.        2.9 ZCSDUPSC
  313.        2.10 FWKCSKIT
  314.      3. FWKCS.COM options
  315.      4. FWKCS     screens
  316.      5. FWKDG.COM  options
  317.      6. FWKDG      screen
  318.      7. FWKC17D.BAS specialized selective deletion
  319.      8. FWKCS/1m multiplicity report MULTCNT.RPT
  320.      9. Listings for NULSTART.BAT, FULSTART.BAT, LISTMAKR.BAT,
  321.           REVCSLST.BAT, and KEEPMACS.BAT
  322.     10. Cleaning up text directories
  323.       10.1 FWKTDR19.BAS
  324.       10.2 DSA.COM
  325.  
  326. Purpose:  FWKCS can produce a kind of "contents signature" which does not
  327. depend on file names, dates, order of collection, nor method nor amount of
  328. compression. Sorting the output groups names of files having the same
  329. contents.                                                    ~~~~~~~~
  330. ~~~~~~~~
  331.  
  332. FWKCS manipulates contents_signatures and performs many operations based on
  333. them.
  334.  
  335. Please be careful:
  336. ~~~~~~~~~~~~~~~~~~
  337. >>> Please bear in mind that a zipfile which contains only one file will have
  338. >>> a zipfile contents signature which is the same as the file contents
  339. >>> signature of the single file which it contains; and a storage zipfile
  340. >>> which has the same file contents as a self-extracting zipfile will have
  341. >>> the same zipfile contents signature.
  342.  
  343. Thanks:
  344. ~~~~~~~
  345. To Phil Katz:  I wish to take this oportunity to thank Phil Katz for
  346. introducing the ZIP file format and writing software to make and use zipfiles,
  347. for recognizing and incorporating the 32_bit CRC for use with compressed
  348. files, and for dedicating the ZIP format to the public domain. Please remember
  349. to properly reward him for his work.
  350.  
  351. To Ben Baker:  In some of the examples given below, the sorting program
  352. indicated by way of example is "QSORT", tested with version 3.20, which is
  353. copyright 1985,86,87,88 by Ben Baker. Other sorting programs can be used.
  354. Please remember to properly reward the author of whatever sorting program you
  355. use with this software.
  356.  
  357. This FWKCS109 software is specifically not accompanied with a sorting program.
  358.  
  359.  
  360. 1. What is a contents signature?
  361. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  362.  
  363.         A "contents signature" is a string of bits generated from the
  364. contents of a file, long enough and suitably generated so as to provide some
  365. desirably low probability that two different files would give rise to the
  366. identical string of bits. One example which you may be familiar with is the
  367. cyclic residue check or cyclic redundancy check ("CRC") often used for
  368. detecting errors in storage or transmission of data. e.g., the zipfile format,
  369. which was introduced by Phil Katz and dedicated to the public domain, uses a
  370. 32-bit CRC. That means that, statistically, the probability that two files
  371. which were different would accidentally come out with the same CRC would be
  372. about one part in 2^32, that is, about one part in 4,294,967,296.
  373.  
  374.         The contents signatures generated by FWKCS usually use more than 32
  375. bits. They are generated by using the 32-bit CRC together with the
  376. uncompressed file_length. These numbers are expressed in hexadecimal, forming
  377. a 16_character_long structure, such as  1E44E652    1FD0  , in which the first
  378. 8 characters express the 32_bit CRC and the second 8 characters express the
  379. uncompressed_file_length with the leading zeros blanked. Those blank spaces
  380. are part of the signature_structure.
  381.  
  382.         Because the number specifying that file_length is often (usually) 8
  383. bits or more, the total number of bits available for distinguishing one such
  384. contents signature from another is often (usually) 40 or more. This means
  385. that, statistically, the probability that two files which were different would
  386. accidentally result in the same contents signature would often (usually) be
  387. down around one part in 2^40 or better, that is, about one part in
  388. 1,099,511,627,776 or better.
  389.  
  390.         In the case of a zipfile, FWKCS generates a special "zipfile contents
  391. signature", which is made by adding together all the 32-bit CRC's for the
  392. files in the zipfile, modulo 2^32, and adding together their uncompressed
  393. file_lengths modulo 2^32. This has the desirable property that the resulting
  394. zipfile contents signature ("zcs") does not depend on the names of the files,
  395. the dates of the files, the order in which they appear in the zipfile, nor on
  396. the method nor amount of compression, nor does it depend on comments. This is
  397. especially valuable when one is running a large system and wishes to delete
  398. duplicate zipfiles uploaded under different names (an example of this is
  399. discussed below). This zcs is also useful in evaluating whether a collection
  400. of files in an upload corresponds to one zipfile already known to the system,
  401. or whether, although all are recognized, they are found spread among several,
  402. different, zipfiles.
  403.  
  404.         FWKCS provides a contents_signature for each file within a zipfile,
  405. and this collection of contents_signatures with entries (e.g., a file more
  406. than 9 Megabytes long) is relatively quickly manipulated by FWKCS.
  407.  
  408. 2. What are some uses? (with some working examples and .BAT files)
  409. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  410.  
  411. 2.1 Suppose you have a set of 20,000 zipfiles in your system, and have a text
  412.     or executable file of uncertain ancestry and name.
  413.     Just type:
  414.                            Y filename.ext <ENTER>
  415.  
  416.     and read the display on the screen. If the file is unfamiliar, it's added
  417.     and indexed.
  418.  
  419.     To make Y.BAT, just type   FWKCS /a2m <ENTER>.
  420.  
  421.     To run Y.BAT recursively, you can use "wildcards" *, ?, in specifying the
  422.     file(s) to process, and just press the y or n key(s) when asked, to
  423.     control whether you see a particular report. The y and n keys can be
  424.     pushed ahead of time up to the DOS buffer capacity. A .BAT program can
  425.     append or rename the reports so that they are kept for later.
  426.  
  427.     In order to keep the update response time short, occasionally (perhaps
  428.     every few days or if CSLIST1.SRT gets over about 50k) run
  429.  
  430.                               FWKCS /v<enter>
  431.  
  432.     to revise the allocation of information for storage and retrieval,
  433.     consolidating the material into master_list CSLIST.SRT, and restarting
  434.     CSLIST1.SRT, with a new index for each.
  435.  
  436.     Suboption:
  437.  
  438.     d  reDate zipfile to that of latest file in zipfile.
  439.  
  440.  
  441.     If you wish to use suboption d routinely as part of Y.BAT, change Y.BAT to
  442.  
  443.                                 FWKCS %1 /a2d
  444.  
  445. 2.2 Suppose you have an electronic bulletin board system with more than ten
  446.     thousand zipfiles, and have an ongoing problem of people accidentally
  447.     uploading zipfiles which contain the same files as ones which you already
  448.     have, although possibly with different names, different comments,
  449.     different dates, and/or different ordering of the files in the respective
  450.     zipfiles, and even made of pieces from several different zipfiles.
  451.  
  452.     First, configure your system so that there are no duplicate paths to the
  453.     same files (large systems with networks).
  454.  
  455.     Then, to do a partial clean up, you could run
  456.  
  457.        fwkdg/l|fwkcs/1cz|qsort|fwkcs/1sm >multis
  458.  
  459.            - - - - - - - - - - - - - - - NOTE
  460.              Note: if your system keeps one or more files open and not shared
  461.              for reading, you can put a pipeline filter between fwkdg/l and
  462.              fwkcs/1cz. Suppose your system keeps open files EX.1 and
  463.              XCL.TOO. You could exclude these two filenames by inserting a
  464.              two_stage pipeline filter, for example,
  465.  
  466. fwkdg/l|find /v "EX.1"|find /v "XCL.TOO"|fwkcs/1cz|qsort|fwkcs/1sm >multis
  467.            - - - - - - - - - - - - - - - NOTE ENDS
  468.  
  469.     to put all the duplicate zipfiles together in groups, in the file MULTIS;
  470.     and to make a report, MULTCNT.RPT, showing number of probably duplicate
  471.     zipfiles.  Then, you could use a word processing program to look at the
  472.     MULTIS file, and to put a lower case "d" in column 17 on each line
  473.     containing a file you wished to delete. For example, here are 9 lines
  474.     copied from the beginning of the IFBB MULTIS list (see discussion, below):
  475.  
  476. ----------------------------------------------------------------
  477. 014FF56D   158AC LAWN2.ZIP     z   cs      J:\RBBS
  478. 014FF56D   158ACdLAWN200.ZIP   z   cs      M:\RBBS
  479. ----------------------------------------------------------------
  480. 0249E9AB    486D EQIPVIEW.ZIP  z   cs      H:\RBBS
  481. 0249E9AB    486DdVIS.ZIP       z   cs      K:\RBBS
  482. ----------------------------------------------------------------
  483. 02FF6937   522E7dCHEMIC20.ZIP  z   cs      E:\RBBS
  484. 02FF6937   522E7 CHEMICAL.ZIP  z   cs      E:\RBBS
  485.  
  486.     Then, at solely your own risk, you could run
  487.  
  488.        basica fwkc17d           (or use a different BASIC with your system)
  489.  
  490.     to delete all of those marked files, and to save those lines (without the
  491.     "d") in a file named  DELETED.LOG .  For example, here are the
  492.     corresponding 3 lines copied from the beginning of the IFBB DELETED.LOG
  493.     (see discussion, below):
  494.  
  495. 014FF56D   158AC LAWN200.ZIP   z   cs      M:\RBBS
  496. 0249E9AB    486D VIS.ZIP       z   cs      K:\RBBS
  497. 02FF6937   522E7 CHEMIC20.ZIP  z   cs      E:\RBBS
  498.  
  499.     Then, you could choose what drive you will keep your cslist files on.
  500.     For what follows here please have all the files from this AV Zipfile
  501.     FWKCS109.ZIP in a single subdirectory.
  502.  
  503.     There are three ???start.bat programs:
  504.  
  505.        NULSTART.BAT   fastest, sets up empty files to which
  506.                       contents_signatures can be added
  507.  
  508.        ZIPSTART.BAT   selectively adds only contents_signatures which come
  509.                       from files which end with ".ZIP", and the respective
  510.                       zipfile_contents_signatures.
  511.  
  512.        FULSTART.BAT   does all the ZIPSTART does, plus calculates the CRC for
  513.                       every non_zip file which it is able to open and
  514.                       generates the contents_signature for each of those
  515.                       files.
  516.  
  517.     Note: if you are using a system which keeps one or more files open, you
  518.     may wish to insert a pipeline filter to exclude those filenames from the
  519.     pipelined list of files processed in FULSTART. These may be "hidden"
  520.     files: when FWKDG scans the system, it includes "hidden" files.
  521.  
  522.     Now, you can proceed in two ways. You can ignore the cross_redundancy in
  523.     which all the pieces of a file may be present in others, and skip to use
  524.     ZIPSTART or FULSTART, below. Or, you can use NULSTART, and then
  525.     recursively accession all the files in your system one by one. This is
  526.     (much) slower, but catches some of the cross_redundancy. The order in
  527.     which you accession the files affects the result, and you may wish to give
  528.     some thought to which kinds of files you wish to have left (e.g., large,
  529.     or narrowly defined).
  530.  
  531.     Working in a subdirectory with FWKCS.COM, FWKDG.COM, and the three
  532.     ???START.BAT files, you can pick which one you wish to use to set up your
  533.     contents_signatures system.
  534.  
  535.     Suppose, for example, you choose to use ZIPSTART.
  536.  
  537.     Then, type    ZIPSTART d<enter>
  538.  
  539.     where d is the drive letter without a ':'.  It uses the /d option on FWKCS
  540.     to modify defaults #1-4, so that they will be in a subdirectory \cs, and
  541.     then presents the /d screen for you to see if they came out the way you
  542.     wanted.  If not, you can run REVERT, which puts all the defaults back to
  543.     their original condition (the resulting copy of FWKCS.COM is then
  544.     byte_for_byte the same as when shipped, with the same contents_signature
  545.     as when shipped). Depending on the details of your system, the speed of
  546.     access to files may depend on how deep the subdirectory is in your calling
  547.     procedure, e.g., "d:\this\that\another\yet\further\cs" may take longer to
  548.     reach then "d:\cs". This is because each subdirectory is itself a file
  549.     which, in many cases, would have to be read to find where the next
  550.     subdirectory is locate so that it, in turn, can be read. For this reason,
  551.     the defaults are set to a first_level subdirectory of the root directory.
  552.     The executable programs can be placed elsewhere on your PATH.
  553.  
  554.     Here is a full listing of ZIPSTART.BAT:
  555.  
  556. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  557. echo off
  558. cls
  559. if %1: == : goto message
  560. echo - i will need FIND and QSORT available on your path to use for this, and
  561. echo - FWKDG and FWKCS here where i am now
  562. echo - (please see FWKCS109.DOC for explanation and credits)
  563. echo -
  564. echo -  if any of these four is not set up that way, please press Control_Break
  565. echo -  and then press  y
  566. echo -
  567. pause
  568. cls
  569. fwkcs %1:\cs\cslist.ndx /d1
  570. fwkcs %1:\cs\cslist.srt /d2
  571. fwkcs %1:\cs\cslist1.ndx /d3
  572. fwkcs %1:\cs\cslist1.srt /d4
  573. cls
  574. fwkcs /d
  575. echo      ------
  576. echo -
  577. echo -     do defaults #1-4 on the right of the "=" look OK?
  578. echo -     if not, press Ctrl_Break, then  y
  579. pause
  580. cls
  581. md %1:\cs
  582. attrib -r %1:\cs\cslist*.*
  583. del %1:\cs\cslist*.*
  584. copy fwkcs.com %1:\cs
  585. copy fwkdg.com %1:\cs
  586. %1:
  587. cd %1:\cs
  588. fwkdg /l | find ".ZIP" | fwkcs /1cfxz | qsort > %1:\cs\cslist.srt
  589. fwkcs %1:\cs\cslist.ndx %1:\cs\cslist.srt /i
  590. attrib +r %1:\cs\cslist*.*
  591. fwkcs /u
  592. cls
  593. dir
  594. echo -
  595. echo ------- Please put the copy of FWKCS which is here in this subdirectory
  596. echo -  on your path. Its internal defaults have been set to point to the files
  597. echo -  created in this subdirectory.....
  598. echo ------- As a precaution, please make sure either that it is the ONLY copy
  599. echo -  of FWKCS on your path, or that such copies come from this cloned copy
  600. echo -  (the date and time on the program have been changed, and provide a simple
  601. echo -  test; also, you can type "FWKCS/d<enter>" to check its defaults). For more
  602. echo -  complicated configurations, please see FWKCS109.DOC.
  603. echo ------- Also, be sure that FWKCS can call QSORT, PKZIP, PKUNZIP, SCAN,
  604. echo -  and, optionally, LIST. If you wish, set a path for FWKUPLD.LOG.
  605. echo -  (i suggest that you run CHKDSK *.*, to see if any of my files contains
  606. echo -  non_contiguous blocks; if so, please make each of my files contiguous...)
  607. goto end
  608. :message
  609. echo -
  610. echo -  i need to have a single letter, without ":", for the drive
  611. echo -  where you want me to set up my system...
  612. echo -
  613. :end
  614. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  615.  
  616.     Here is a full listing of REVERT.BAT:
  617.  
  618. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  619. @echo off
  620. rem For use with FWKCS(TM) Ver 1.09:
  621. rem REVERT FWKCS.COM to initial defaults.
  622. fwkcs /d1
  623. fwkcs /d2
  624. fwkcs /d3
  625. fwkcs /d4
  626. fwkcs /d5
  627. fwkcs /d6
  628. fwkcs /d7
  629. fwkcs /d8
  630. fwkcs /d9
  631. fwkcs /da
  632. fwkcs /db
  633. fwkcs /dc
  634. fwkcs /dd
  635. fwkcs /de
  636. fwkcs /d
  637. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  638.  
  639.     After you have run ZIPSTART (or whichever you choose; the other two are
  640.     listed at the end of this DOC), and run CHKDSK *.*, and done such disk
  641.     consolidation as is appropriate, then....
  642.  
  643.     Study the FWKCS/d screen, and choose paths which will quickly reach the
  644.     programs listed there. If you do not put a path on FWKUPLD.LOG, then it
  645.     can be kept separately in each of the multiple defaults for the respective
  646.     nodes on your system; if you prefer to keep a single, central log, you can
  647.     specify its path. Using the l,uplog; option, you can override this default
  648.     via the command line.
  649.  
  650.     For multiple nodes, one can group an array of nodes to a specific log for
  651.     that array, for example, by putting a different copy of PCBTEST.BAT to
  652.     serve each specific node, calling respectively one of several different
  653.     configuration files which are then respectively incorporated into the
  654.     command line.  A specific array of nodes can be set up with its own
  655.     contents_signatures system, with its own lists and indexes, to serve a
  656.     specific group of users, by using the settable defaults in FWKCS displayed
  657.     using the /d option.
  658.  
  659.     Check to see that you have FWKDG and FWKCS; and SCAN, FIND and QSORT or
  660.     their replacements; on your path or in the default directory.
  661.  
  662.     Choices the options to run your EBBS, and make a .BAT file to load them
  663.     into defaults /dd and /de (if you need more space, you can use all of
  664.     b,c,d,e, and change PCBTEST.BAT so that the square brackets "[]" include
  665.     the macros in their proper sequence).
  666.  
  667.     After you have your lists set up, type   FWKCS /a5m <enter>   to make
  668.     PCBTEST.BAT, make any needed changes in the macro calls "[]", and put it
  669.     where your system can call it properly.
  670.  
  671.     To see that it's working properly, take a piece out of each of several
  672.     different zipfiles on your system, put the pieces together to make a
  673.     single zipfile, and upload it. The system should catch it as being
  674.     redundant. You can do this directly by typing
  675.  
  676.              FWKCS d:\path\filename.ext upload /a5[cde]<enter>.
  677.  
  678.     The word "upload" is necessary for the file to be treated as an upload.
  679.     You can read the resulting PCBFAIL.TXT file, and look in FWKUPLD.LOG. The
  680.     redundant file is automatically deleted, unless you have used the "s"
  681.     suboption.
  682.  
  683.     You can use a recursive DOS command line to have a multiplicity of files
  684.     be treated as uploads, e.g.,
  685.  
  686.                 for %x in (*.zip) do fwkcs %x upload /a5[cde]
  687.  
  688.     This would cause entries in the upload log, and delete or sequester the
  689.     files which were not accepted, unless you have used the "s" suboption.
  690.  
  691.     - - - - - - - - - -
  692.     Note:
  693.     On some systems, you may find it more effective to make a second .BAT
  694.     program which does one file at a time and is called repeatedly, along
  695.     these general lines:
  696.  
  697.     rem BAT1.BAT.
  698.     rem This repeatedly calls BAT2.BAT.
  699.     for %%x in (%1) do call bat2 %%x
  700.  
  701.  
  702.     rem BAT2.BAT
  703.     fwkcs %1 upload /a5[cde]
  704.  
  705.     To use this combination, type
  706.  
  707.                              bat1 *.zip <enter>
  708.  
  709.     or specify the files to process in some other way, wildcards OK.
  710.     - - - - - - - - - -
  711.  
  712.     If you have used default "a" to set a path to the uploads log (see
  713.     FWKCS/d), and have not overridden in with a command_line entry, then you
  714.     can modify the recursive call so as to create or add to a local upload
  715.     log, e.g.,
  716.  
  717.             for %x in (*.zip) do fwkcs %x upload /a5[cde]l,uplog
  718.  
  719.     to make or add to local upload log UPLOG. Check to make sure that the
  720.     punctuation is correct at the end of default [e], so that you can run it
  721.     into the "l" without syntax problems. One easy way to see the full,
  722.     expanded command line without carrying out the rest of its operation is to
  723.     intercept execution and write the expanded line into a text file, and then
  724.     look at that. To do this, you could type
  725.  
  726.             fwkcs filename upload /a5[cde]l,uplog [-zzz] <enter>
  727.  
  728.     and then type
  729.  
  730.                               TYPE zzz <enter>
  731.  
  732.     To use this recursive call from inside a .BAT program, you would replace
  733.     the "%x" with "%%x".
  734.  
  735.     Here is a partial example of what the log may look like:
  736.  
  737. 1990-11-04 14:29:32.84 Duplicate       2488 J.ZIP        zcs = AA99D801     BE2
  738. 1990-11-04 14:30:47.65 Redundant      11641 ASDF.ZIP
  739. 1990-11-04 14:33:16.88 Failed Zip      2488 FOOEY.ZIP
  740. 1990-11-04 14:37:41.35 Accessioned    17040 QWERTY.ZIP   zcs = 00A4266D    45AF
  741.  
  742.  
  743.     What is done with the file in the various cases depends on options you
  744.     have set up; option "s" saves rejected files, otherwise rejects are
  745.     typically either deleted or sequestered.  Entries which can appear in
  746.     the upload log comment column include
  747.  
  748.     Accessioned   the (zip)file was accepted and entered into the system.
  749.                   for zipfile, its zipfile_contents_signature (zcs) is given
  750.                   for non_zip file, its cs is given.
  751.  
  752.     Age>     mo   failed age test; the number of months specified for the test
  753.                   gets put there; if NOT s, then deleted.
  754.  
  755.     Duplicate     a duplicate zipfile was found; if NOT s, then deleted; its
  756.                   zcs is given.
  757.  
  758.     Excluded      a lower_case "x" was found in column 17 of CSLIST.SRT or
  759.                   CSLIST1.SRT next to an entry with matching
  760.                   contents_signature, flagging that item for exclusion; if NOT
  761.                   s, then deleted; the cs for the x_flagged file is given.
  762.  
  763.     Failed Zip    failed when tested using PKUNZIP; if NOT s, then deleted
  764.  
  765.     FailedVirus   if non_zip, then it failed on first test by SCAN;
  766.                   if a zipfile, it failed either on the first test by SCAN
  767.                      (e.g., as a self_extracting zipfile) or on testing of its
  768.                      contained files after unzipping.
  769.  
  770.     Redundant     it was a zipfile containing only files which could be found
  771.                   on the system either in a larger zipfile or spread among
  772.                   more than one zipfiles; if NOT s, then deleted.
  773.  
  774.     RedundantNZ   it was non_zip, and its contents_signature matched a cs in
  775.                   CSLIST.SRT or CSLIST1.SRT; if NOT s, then deleted; its cs is
  776.                   given.
  777.  
  778.     Zip in Zip    it was a zipfile which contained another zipfile; depending
  779.                   on how /a5 or /a6 suboption e was set up, (if NOT s) either
  780.                   the file was put in a special subdirectory for further
  781.                   consideration, or deleted.
  782.  
  783.         n/  ttt   it was a zipfile, and did not pass the novelty test; the
  784.                   numerical fraction is (not_cs_match)/(total_entries);
  785.                   depending on how the novelty_test option was set up,
  786.                   (if NOT s) the file was sequestered or deleted.
  787.  
  788.  
  789.     When the zipfile is a duplicate or is accessioned, its
  790.     zipfile_contents_signature is well_defined, and the zcs is provided. In
  791.     the case of a defective zipfile, its zcs is not generated. In the case of
  792.     a redundant zipfile, the material would not necessarily fit on one line,
  793.     so, for convenience, it is not provided in the log.
  794.  
  795.     You can use the zcs or cs to find which file in your system was duplicated
  796.     by or matched with the deleted upload, by typing, to use an example from
  797.     above,
  798.  
  799.     echo AA99D801     BE2|fwkcs /g<enter>
  800.  
  801.     The spacing is important: the single space after "echo" causes the zcs or
  802.     cs to be read starting with the first character and correctly alligned;
  803.     the blank spaces are used as part of the 8_character hexadecimal
  804.     representation of the uncompressed file_length, and come from blanking the
  805.     leading zeros. The whole structure of 16 characters, in the correct
  806.     geometric relationship, is required to form the contents_signature.
  807.  
  808.     If you have a large collection of zipfiles, you may have a file with the
  809.     cs of   00000000       0 on your system. You can try this and see, using
  810.     the 8 zeros, 7 spaces, and 1 zero.
  811.  
  812. 2.2.1 Suppose you have an electronic bulletin board system using software
  813.     which is able to shell out to a batch program, and which provides as %1
  814.     the full d:\path\filename.ext for the zipfile to be tested, and provides
  815.     as %2 the name of a file which serves as an error_flag; but does not
  816.     provide the "UPLOAD" instruction used by PCBoard, and is only able to
  817.     process pure ascii files created by FWKCS.  Then, you can make a .BAT
  818.     program something like this:
  819.  
  820. ------------
  821.     if exist %2 del %2
  822.     if exist sendme.txt del sendme.txt
  823.     fwkcs %1 /a6[cde]
  824.     if exist pass.txt goto good
  825.     echo ERROR >%2
  826.     ren fail.txt sendme.txt
  827.     goto sendit
  828.     :good
  829.     ren pass.txt sendme.txt
  830.     :sendit
  831.     (here you put your program to send SENDME.TXT )
  832.     del sendme.txt
  833. ------------
  834.  
  835.     The /a6 option performs all the tests etc. that are provided under
  836.     #5 UPLOAD, but it generates PASS.TXT or FAIL.TXT, both of which are pure
  837.     ascii files without any special control flags. The sample .BAT program
  838.     listed above then uses the existence of the PASS.TXT file to control
  839.     whether it creates an error_file. Whichever name was used for the output
  840.     text file, it is renamed to SENDME.TXT, which you then send to your COM
  841.     port. After that, SENDME.TXT is deleted, and the .BAT program returns
  842.     control to the system.
  843.  
  844. 2.3 Suppose you want to evaluate and possibly incorporate, e.g., fifty new
  845.     zipfiles which you have downloaded from various other boards. You can put
  846.     them all in their own subdirectory, go there, and type
  847.  
  848.                             ACCESZIP *.zip<enter>
  849.  
  850.     The ones which pass the tests retain their .ZIP extension, and the new
  851.     contents_signatures are added and indexed. Those which do not pass the
  852.     various tests you have set up (see section 3, "a", below) are renamed
  853.     according to the results of the tests, unless you have used the "s" option
  854.     - in which case, the corresponding ERRORLEVEL is displayed if the filename
  855.     would otherwise have been changed.  You can then dispose of them
  856.     appropriately. This does not get automatically entered in the uploads log.
  857.  
  858.     To make ACCESZIP.BAT, type   FWKCS /a4m<enter>.
  859.  
  860.     Then, choose the options and load them into the macro [b]:
  861.  
  862.                        FWKCS option_string /db<enter>
  863.  
  864.  
  865. 2.4 Suppose you have some files, some of which are not zipfiles, to add to
  866.     your contents_signatures system. You can choose a way to call all of them,
  867.     such as by isolating them in a subdirectory or by using suitably chosen
  868.     "wildcards", and type, for example,
  869.  
  870.                        ACCESION n?me*.b* <enter>
  871.  
  872.     If the program runs into a relabelling name_conflict, it reports it to the
  873.     screen. Otherwise, with a statistical error rate per file comparison
  874.     usually better that one part per trillion, those zipfiles which pass the
  875.     tests retain their respective extensions. According to the options used,
  876.     and following a set of relative priorities, redundant zipfiles are labeled
  877.     ".RED"; duplicate zipfiles are labeled ".DUP"; redundant non_zip files are
  878.     labeled ".RNZ"; too_old files are labeled ".OLD"; exclusion_flagged
  879.     (zip)files are labeled ".XFL"; viruses are labeled ".VIR"; etc., as
  880.     discussed in more detail, below.
  881.  
  882.     To make ACCESION.BAT, type   FWKCS /a3m<enter>.
  883.  
  884.     Then, set the options in a macro, as in 2.3 above.
  885.  
  886.     The SYSOP (Michael Sussell) of The Invention Factory BBS did a file purge,
  887.     of the kind discussed above as preliminary clean_up, processing more than
  888.     11,000 (eleven thousand) zipfiles and deleting more than 600 (six hundred)
  889.     redundant zipfiles. It helped protect users against wasting time and
  890.     telephone money. The MULTIS and DELETED.LOG from that cleanup operation
  891.     can be seen in FWK-IFBB.ZIP, made by and available on The Invention
  892.     Factory BBS. That's part of why IFBB uses ZIP. If you are on the IFBB,
  893.     BULLETIN.02 reports their experience and policy on this.
  894.  
  895.     The IFBB has since grown, with a current collection more than twice
  896.     that size, and uses FWKCS to process its uploads automatically.
  897.  
  898.     I wrote some special software to help clean up the text directories after
  899.     a lot of deletions were made. To help those of you who face this problem,
  900.     I have included two programs, FWKTDR19.BAS and DSA.COM, in this
  901.     AV_zipfile. (See Section 10, near end of this file.)
  902.  
  903. 2.5 Suppose you wished to make a full, sorted set of contents signatures for
  904.     all the files on drives C:-Z: on your system, with special sublists
  905.     according to whether they were zipfile contents signatures, plain file
  906.     contents signatures, internal file cs's, or combined plain and internal
  907.     file cs's. Then, you could run
  908.  
  909.        CSLIST
  910.  
  911.     which does the following (full listing):
  912.  
  913. rem  To run, i need to have FIND, FWKDG, FWKCS, and QSORT available in the
  914. rem  default directory or via the path (for credits please see fwkcs109.doc).
  915. rem  If any of the top 4 is missing, please press Control-Break and then y
  916. pause
  917. fwkdg/l|fwkcs/1cfpxz|qsort >cslist.srt
  918. find   "z" <cslist.srt >zcs_list.srt
  919. find   "f" <cslist.srt >fcs_list.srt
  920. find /v"c" <cslist.srt >ics_list.srt
  921. find /v"z" <cslist.srt >ficslist.srt
  922.  
  923.     where the names used for the output files have these meanings:
  924.  
  925.     1. cslist.srt    sorted list of contents_signatures;
  926.  
  927.     from which come:
  928.  
  929.     2. zcs_list.srt  subset listing only zipfile_contents_signatures;
  930.     3. fcs_list.srt  subset listing only contents_signatures for directly
  931.                             accessible files which are not zipfiles;
  932.     4. ics_list.srt  subset listing only contents_signatures for files which
  933.                             are contained within directly accessible zipfiles;
  934.     5. ficslist.srt  subset including both 3 and 4 above, in sorted orded.
  935.  
  936. 2.6 Suppose you wished to make a full, sorted set of contents signatures for
  937.     all the files on drives C:-Z: on your system, and make specialized
  938.     searches for non-unique contents_signatures in the special subfiles which
  939.     would be prepared by running CSLIST, but not make and keep those subfiles.
  940.     Then, you could run
  941.  
  942.        CSDUPS
  943.  
  944.     which does the following (full listing):
  945.  
  946. rem  To run, i need to have FIND, FWKDG, FWKCS, and QSORT available in the
  947. rem  default directory or via the path (for credits please see fwkcs109.doc).
  948. rem  If any of the top 4 is missing, please press Control-Break and then y
  949. pause
  950. fwkdg/l|fwkcs/1cfpxz|qsort >cslist.srt
  951. find   "z" <cslist.srt |fwkcs/1s >zcs_dups
  952. find   "f" <cslist.srt |fwkcs/1s >fcs_dups
  953. find /v"c" <cslist.srt |fwkcs/1s >ics_dups
  954. find /v"z" <cslist.srt |fwkcs/1s >ficsdups
  955.  
  956. 2.7 Suppose you wanted just a sorted list of zipfile contents signatures for
  957.     all the zipfiles on drives C:-Z: on your system. Then, you could run
  958.  
  959.        ZCSLIST
  960.  
  961.     which does the following (full listing):
  962.  
  963. rem  To run, i need to have FWKDG, FWKCS, and QSORT available in the
  964. rem  default directory or via the path (for credits please see fwkcs109.doc).
  965. rem  If any of the top 3 is missing, please press Control-Break and then y
  966. pause
  967. fwkdg/l|fwkcs/1cxz|qsort >zcs_list.srt
  968.  
  969. 2.8 Suppose you wanted just a list of probably redundant zipfiles on drives
  970.     C:-Z: on your system. Then, you could run
  971.  
  972.       ZCSDUPS
  973.  
  974.     which does the following (full listing):
  975.  
  976. rem  To run, i need to have FWKDG, FWKCS, and QSORT available in the
  977. rem  default directory or via the path (for credits please see fwkcs109.doc).
  978. rem  If any of the top 3 is missing, please press Control-Break and then y
  979. pause
  980. fwkdg/l|fwkcs/1cxz|qsort|fwkcs/1s >zcs_dups
  981.  
  982.     Because it is pipelined, it does not leave any of its intermediate files.
  983.  
  984. 2.9 Suppose you wanted a list of probably redundant zipfiles on drives C:-Z:
  985.     on your system, plus a report on the clustering of probably redundant
  986.     zipfiles. Then, you could run
  987.  
  988.       ZCSDUPSC
  989.  
  990.     which does the following (full listing):
  991.  
  992. rem  To run, i need to have FWKDG, FWKCS, and QSORT available in the
  993. rem  default directory or via the path (for credits please see fwkcs109.doc).
  994. rem  If any of the top 3 is missing, please press Control-Break and then y
  995. pause
  996. fwkdg/l|fwkcs/1cxz|qsort|fwkcs/1sm >zcs_dups
  997. ren multcnt.rpt zcs_dups.rpt
  998.  
  999.     It does not leave any of its intermediate files.
  1000.  
  1001. 2.10 Suppose you wished to make a full, sorted set of contents signatures for
  1002.     all the files on drives C:-Z: on your system, with special sublists
  1003.     according to whether they were zipfile contents signatures, plain file
  1004.     contents signatures, internal file cs's, or combined plain and internal
  1005.     file cs's; scan each of these sub_files for non-unique contents_signature
  1006.     entries; and make a set of reports on the clusterings of matching
  1007.     signatures that were found in each of the sub_lists. Then, you could run
  1008.  
  1009.       FWKCSKIT
  1010.  
  1011.     which does the following (full listing):
  1012.  
  1013. rem  To run, i need to have FIND, FWKDG, FWKCS, and QSORT available in the
  1014. rem  default directory or via the path (for credits please see fwkcs109.doc).
  1015. rem  If any of the top 4 is missing, please press Control-Break and then y
  1016. pause
  1017. fwkdg/l|fwkcs/1cfpxz|qsort >cslist.srt
  1018. find   "z" <cslist.srt >zcs_list.srt
  1019. fwkcs/1sm zcs_list.srt zcs_dups
  1020. ren multcnt.rpt zcs_dups.rpt
  1021. find   "f" <cslist.srt >fcs_list.srt
  1022. fwkcs/1sm fcs_list.srt fcs_dups
  1023. ren multcnt.rpt fcs_dups.rpt
  1024. find /v"c" <cslist.srt >ics_list.srt
  1025. fwkcs/1sm ics_list.srt ics_dups
  1026. ren multcnt.rpt ics_dups.rpt
  1027. find /v"z" <cslist.srt >ficslist.srt
  1028. fwkcs/1sm ficslist.srt ficsdups
  1029. ren multcnt.rpt ficsdups.rpt
  1030. find "v" <cslist.srt | find /v "a" | find /v "z" >unavinav.lst
  1031.  
  1032.     unavinav.lst contains a list of un_AV files which have been inserted in
  1033.     AV_zipfiles
  1034.  
  1035.     Note: the output file FICSDUPS provides a fairly broad potential scope of
  1036.     bulk operation, as distinct from the case_by_case handling used, for
  1037.     example, in 2.1 above.
  1038.  
  1039. 3. FWKCS.COM options
  1040. ~~~~~~~~~~~~~~~~~~~~
  1041.  
  1042. First, how the command line can be used:
  1043.  
  1044. Because square brackets "[]" have literal meaning in the command line,
  1045. optional material is enclosed in parentheses "()".
  1046.  
  1047. Format 1: FWKCS (CSLIST.NDX CSLIST.SRT) /option ((<)in ((>)out)) <ENTER>
  1048.   where CSLIST.NDX is index for CSLIST.SRT sorted contents_signature_list.
  1049.  
  1050.         Starting with FWKCS Ver. 1.06, FWKCS can open input and output files
  1051.         which come after the /option(s).
  1052.  
  1053. 2: FWKCS f1 f2 (f3) /m <ENTER>  |Format 1,2,3 grammar: /(r)(t)other_options.
  1054.  
  1055.         the r for redirect and t for timespan options come in a definite order
  1056.         near the "/". This lets the letters be used with other meanings as
  1057.         suboptions for other functions.
  1058.  
  1059. 3: FWKCS (files)([b])([+file1])[c](options)([de])([+file2]) (files) ([-file3])
  1060.   where "[]" are literal characters; [b][c][d][e] are macros (see /d);
  1061.   [+file] includes file's contents (/d macros OK) in command line;
  1062.   [-file] prevents execution, writes (expanded) command line to file.
  1063.  
  1064.         This command_line format was introduced with FWKCS Ver. 1.06.
  1065.         There are 4 macros, each of which is a contiguous character sequence
  1066.         up to 73 bytes long. This gives a total of 292 bytes of rapidly
  1067.         accessible information for use in making a command line.  This is more
  1068.         than DOS normally handles, and helps support the use of (many) options
  1069.         for the f and g functions and the /a auxiliary functions.
  1070.  
  1071.         To see these macros, type FWKCS /d <enter>.
  1072.  
  1073.         The command line can include one or several files, which are read into
  1074.         the internal command interpretation region. They are included in the
  1075.         command line by using square brackets "[]" and the "+" sign. For
  1076.         example, to load a macro from a file named MACROB into FWKCS macro
  1077.         [b], type
  1078.  
  1079.                          FWKCS [+macrob] /db <enter>
  1080.  
  1081.         A file which is read into the command line for controlling execution
  1082.         can, itself, include citations to macros [b],[c],[d], and/or [e]. The
  1083.         macros are expanded during interpretation of the file.
  1084.  
  1085.         And, execution can be intercepted and the entire, expanded command
  1086.         line can then be written to a text file, by using a minus sign "-" in
  1087.         front of the filename, within square brackets, as the last entry on
  1088.         the line. To see what this command line is when fully expanded, up to
  1089.         the last non_blank text character of the part which would be used in
  1090.         executing the line, you can write it to text file ZZZ by typing, e.g.,
  1091.  
  1092.                  FWKCS d:\path\filename.ext upload /a5[cde] [-zzz]
  1093.  
  1094.         You can then edit ZZZ, and use it as a configuration file for
  1095.         subsequent execution. If you wish, you could have FWKCS read ZZZ as
  1096.         the command line, by typing
  1097.  
  1098.                             FWKCS [+zzz] <enter>       ,
  1099.  
  1100.         and carry out the execution which you had intercepted when you
  1101.         captured the command line into ZZZ.
  1102.  
  1103.         This ability to read and write files can be used in editing macros.
  1104.         For example, if you wish to edit macro [e], you could type
  1105.  
  1106.                          FWKCS [e] [-file_e] <enter>   ,
  1107.  
  1108.         then edit FILE_E, ending the line with a carriage_return line_feed,
  1109.         and then type
  1110.  
  1111.                          FWKCS [+file_e] /de <enter>
  1112.  
  1113.         to load the edited material back into FWKCS as macro [e]. Or, you
  1114.         could use it as another macro, e.g., as [b], and call them from the
  1115.         command line as appropriate.
  1116.  
  1117.         The ability to load macros still applies when FWKCS.COM is a
  1118.         compressed file, provided that its .COM structure has not been
  1119.         damaged. For example, if you compress FWKCS.COM using Phil Katz's
  1120.         PKLITE(R), you can run the example above, FWKCS [+macrob] /db <enter>.
  1121.         FWKCS makes the changes, and writes itself to wherever it was called
  1122.         from, if permitted, with the resulting .COM file in uncompressed form.
  1123.         (The ability for FWKCS to write macros to a text file does not depend
  1124.         on whether FWKCS.COM is stored on disc in compressed form.)
  1125.  
  1126.         This flexibility helps support the applications which the FWKCS
  1127.         contents_signature system makes feasible, including, by way of
  1128.         example and without limitation, the /a auxiliary functions.
  1129.  
  1130. The options can be upper or lower case.
  1131.  
  1132.         For various suboptions, there is an initial letter, followed by a
  1133.         number or a comma ",", followed by further information used by that
  1134.         suboption (such as where a subdirectory is to put a file in,
  1135.         d:\path\subdir or where to find a file   d:\path\filename.ext   or
  1136.         some numbers to use, etc.) ending with a semicolon ";", after which
  1137.         the next option starts. If the suboption does not need such
  1138.         information, then the next option is put immediately after it. The
  1139.         whole sequence of options forms one contiguous string.
  1140.  
  1141.         When the command options are pieced together from macros, if there is
  1142.         no space between the macros, then they are put together to form one
  1143.         string.  To see an example of this, you can put material into [c] [d]
  1144.         and [e], then type
  1145.  
  1146.                         FWKCS [cde] [-sample]<enter>
  1147.  
  1148.         and then type
  1149.  
  1150.                              TYPE sample <enter>
  1151.  
  1152.  
  1153. Error messages are logged to FWKCS.ERR. Error information is returned on exit
  1154. via the errorlevel, which can then be used by the calling program (or .BAT
  1155. file). For more information on this, see FWKCS /e.
  1156.  
  1157.  
  1158.  a - Auxiliary functions
  1159.  
  1160.        The auxiliary functions provide an errorlevel on exit (see FWKCS/e).
  1161.  
  1162.        Typing FWKCS /a<enter> brings up 3 screens listing auxiliary functions
  1163.        which make use of various parts of the program, and which may call other
  1164.        programs to perform work which this program sets up for them; and
  1165.        continues on the third screen with credits to people whose programs are
  1166.        used with these auxiliary functions.
  1167.  
  1168.        Here is a brief discussion of each of these auxiliary functions:
  1169.  
  1170. -----------------------------  discussion of /a
  1171.  
  1172.        Auxiliary Functions, FWKCS ... /an(...), "n" at left of item, below.
  1173.  
  1174.        AF 2-6 use defaults #1-4 listed on FWKCS /d; for AF 2,3,4, * ? OK.
  1175.  
  1176.        1 format: FWKCS filelist /a1 (>)nonmatch ; to find filenames not on
  1177.          system.  this uses a local copy of DIRGUIDE.TXT(TM) (from FWKDG) and
  1178.          calls QSORT.
  1179.  
  1180.          This is for finding filenames in a new list which are not on your
  1181.          system. Suppose, for, example, that you have downloaded 300k of text
  1182.          directory listings in the format used on PCBoard, including
  1183.          multi_line file descriptions, into a file called FILELIST, and you
  1184.          want to compare the list with, e.g., some 20 or 30 thousand names of
  1185.          zipfiles on your system.  This does that for you, preserving the
  1186.          multi_line comments to help you decide which you want to download.
  1187.  
  1188.          To run this, first use FWKDG to make DIRGUIDE.TXT. To do this,
  1189.          change to the default directory in which you have PCBoard text
  1190.          directories DIR0 - DIR999. Then, with FWKDG and QSORT (or its
  1191.          equivalent) on your path or in that subdirectory (using the name of
  1192.          whatever sort program you chose, where I have indicated QSORT)
  1193.  
  1194.          to make short form of DIRGUIDE.TXT containing only text directories,
  1195.          type
  1196.  
  1197.                     FWKDG /t | QSORT >DIRGUIDE.TXT<enter>
  1198.  
  1199.          Having made this shorter DIRGUIDE.TXT, type
  1200.  
  1201.                         FWKCS filelist /a1 nonmatch<enter>
  1202.  
  1203.          to put the non_matched names, with their (multi_line) comments, into
  1204.          the file NONMATCH.
  1205.  
  1206.          DIRGUIDE.TXT has other uses, discussed in detail in sections 4 - 5,
  1207.          below.                                                       ~   ~
  1208.  
  1209.        2 format: FWKCS (d:)(\path\)filename(.ext) /a2(d) ; * ? OK;
  1210.  
  1211.          Note: the () means that it is optional; this is not macro [d].
  1212.  
  1213.          Subcommand:
  1214.  
  1215.             d  reDate zipfile(s) to the latest date of the files inside.
  1216.  
  1217.  
  1218.          #2 is to make contents_signature(s), get matching, add new
  1219.          signatures, make new index, make report; this uses default files #1-4
  1220.          (see FWKCS /d); may call QSORT, LIST.
  1221.  
  1222.          format: FWKCS /a2m - make  Y.BAT= " FWKCS %1 /a2" to call #2.
  1223.  
  1224.          This is for finding existing files and adding new material, by a
  1225.          one_key command which, for my own convenience, I named Y. (x was
  1226.          already in use for cross_referencing an assembler_language program,
  1227.          and z for freshening the corresponding zipfile)
  1228.  
  1229.          To make Y.BAT, type    FWKCS /a2m<enter>
  1230.  
  1231.          (This defaults to not use the d subcommand; you can insert it using a
  1232.          convenient text processor.)
  1233.  
  1234.          Then, just type   Y  file<enter>,
  1235.  
  1236.                where "file" = "(d:)(\path\)filename(.ext)"
  1237.  
  1238.          You can use wildcards in specifying the filename.ext.
  1239.  
  1240.          When the program is ready, it summarizes its findings, and asks if
  1241.          you would like to see the report called d:\path\MATCHING.RPT, telling
  1242.          you where the report is. If you type n, it skips displaying the
  1243.          report.  If you type y, then, if you have LIST and have not specified
  1244.          the use of internal scroll, it calls LIST to show you the report, and
  1245.          if you have specified that the display be by internal scroll, as
  1246.          discussed below, then the report is scrolled on the screen for you.
  1247.  
  1248.          Then, it asks you if you wish to delete the report. If you type y,
  1249.          it deletes the report. If you type n, then it does not delete the
  1250.          report. If you have used wildcard(s) in specifying the file(s) to
  1251.          process, the program looks for the next file. If it finds one, the
  1252.          new material may be used to overwrite the existing MATCHING.RPT. So,
  1253.          if you want to collect the reports, you may want to do them one at a
  1254.          time, or to write a .BAT program which adds the report to a
  1255.          collection file, and then call that .BAT program using a recursive
  1256.          DOS command line (see example of recursive DOS command in example
  1257.          2.2, above).
  1258.  
  1259.  
  1260.   3: {} /a3aNNNNdj,junked;nN,NN(NN);o,oust;mpr,refs;sv(,vdat;)v1,telsysop;w
  1261.  
  1262.          where {} denotes  FWKCS (d:)(\path\)filename(.ext)
  1263.  
  1264. Note: FWKCS /a3m makes a .BAT file. To use the m suboption with only the o
  1265. suboption, place the m after the o. (You need the o to impliment execution of
  1266. the m, so this does not reduce your number of options.)
  1267.  
  1268. Suboptions:
  1269.  
  1270.    aNNNN Age in months of latest file in zipfile,
  1271.          if older than that, rename file ".OLD"
  1272.  
  1273.    d reDate zipfile to latest file in it.
  1274.  
  1275.    j,junked; append to file  (d:)(\path\)Junked(.ext)  the listing for each
  1276.          entry in the zipfile which has been deleted, giving the name which it
  1277.          had in the zipfile, together with its contents_signature. This
  1278.          provides a record which may be used to support retrieval of the
  1279.          same material from other files on the system, regardless of the name
  1280.          used elsewhere on the system.
  1281.  
  1282.    m delete file from zipfile if a cs_match was found in CSLIST.SRT or
  1283.          CSLIST1.SRT
  1284.  
  1285.    nN,NN(NN);  novelty test, based on comparison of contents_signature(s) of
  1286.          all entries in a zipfile against the full list for the whole system.
  1287.  
  1288.          This is actually three, different tests:
  1289.  
  1290.          n1,NN bad if <NN% new; NN is a 1 or 2 decimal_digit percent value
  1291.  
  1292.          n2,NNNN bad if <=50% new AND <=NNNN new; this may be especially
  1293.          useful in cases where a few files are stuck into a zipfile which
  1294.          otherwise only contains files which are already on the system, e.g.,
  1295.          where someone has put in an ad, or a contrived "introductory" blurb.
  1296.  
  1297.          n3,NNNN bad if >=NNNN cs_matched; this might be used in situations
  1298.          where people have a collection of items, such as music, and one wants
  1299.          to catch and stop duplication of internal files.
  1300.  
  1301.          if question as to sufficient novelty arises, rename file ".QSN".
  1302.  
  1303.    o,oust  make a list of files to be deleted from a zipfile, giving their
  1304.          names inside the zipfile. "oust" can have full d:\path\filename.ext
  1305.          To operate under /a3 or /a4, the "o" command must be accompanied by a
  1306.          filename as a target to which to send names for deletion from the
  1307.          zipfile, else it is cancelled.
  1308.  
  1309.          The o subcommand prepares a list for deletion according to
  1310.          subcommands m, p, and w.
  1311.  
  1312.          NOTE: the o subcommand employs internal path information for 
  1313.          selective operation if a zipfile contains different files which have 
  1314.          the same name (see discussion about virus testing, in relation to 
  1315.          /a4, below).
  1316.  
  1317.    p  Purge non_AV file(s) from Authenticity Verification Zipfile.
  1318.  
  1319.    r,refs  collect references with matching contents_signature cited in
  1320.          CSLIST.SRT and CSLIST1.SRT.  These are marked with a lower_case "r"
  1321.          in decimal_column 17, and have this format:
  1322.  
  1323. | 16 characters|     | 16 characters|
  1324. CONTENTSIGNATUREr    CONTENTSIGNATURE
  1325.                  |4s|  (four spaces or markings)
  1326.  
  1327.                 |<-- column 17
  1328.  
  1329.          In each output line, the two contents_signatures are swapped, so that
  1330.          the one which was on the right is at the beginning of the line, where
  1331.          it can be used for finding another cs_match; and the lower_case "r"
  1332.          is capitalized to "R", to help avoid confusion.
  1333.  
  1334.          Because FWKCS can search a roughly 10 Megabyte file in typically a
  1335.          fraction of a second, this ability to make cross_references against
  1336.          the entire system is potentially a remarkably powerful tool.
  1337.  
  1338.    s  keep Same extension (don't rename file); but still sets ERRORLEVEL:
  1339.          if it would have renamed the file, then if s, it displays the
  1340.          errorlevel on the screen. In either case, it returns the errorlevel
  1341.          when it exits. This subcommand is useful for integrating the FWKCS
  1342.          contents_signature system into .BAT programs, etc.
  1343.  
  1344.    v(,vdat;) call SCAN for plain_file Virus (use external virus_data_file)
  1345.          where vdat indicates (d:)(\path\)filename(.ext), an external
  1346.          virus_data_file made according to McAfee Associates instructions.
  1347.          Otherwise, it just calls SCAN. NOTE: "v" can be used without the
  1348.          external data file. It is a separate command, and has a different
  1349.          capability than "v1", below. If v is not explicitly given and
  1350.          "v1,telsysop;" is specified, v without external data is assumed.
  1351.  
  1352.    v1,telsysop; d:\path\file for warning about "virus"
  1353.  
  1354.    w  Wipe (tell o to delete) from a zipfile every file which has a
  1355.          contents_signature which matches a cs in CSLIST.SRT or CSLIST1.SRT
  1356.          which is marked in decimal_column 17 with a lower_case "w".
  1357.  
  1358. if NOT s, renames files:
  1359.  
  1360.          >NNNN months old ".OLD"
  1361.  
  1362.          duplicate_zcs ".DUP" - the file is a zipfile and all the files in it
  1363.              seem to be in one_to_one correspondence with a set of files
  1364.              appearing in a zipfile which is known to the system, regardless
  1365.              of name, order, comments, compression ratio, or dates
  1366.  
  1367.          question sufficient novelty ".QSN"
  1368.  
  1369.          redundant".RED" - the file is a zipfile and all of the files in it
  1370.              are not new, but they do not all appear as the only contents of a
  1371.              zipfile known to the system
  1372.  
  1373.          redundant_non_zip ".RNZ" - the file is non_zip and not new
  1374.  
  1375.          virus ".VIR" - in the case of /a3, this refers to the outer shell,
  1376.             because a zipfile would not be unzipped during an /a3 test
  1377.  
  1378.          exclusion_flagged ".XFL" - in searching for matches for the
  1379.             contents_signature(s) for a file or for the files in a zipfile, a
  1380.             lower_case "x" was found in decimal_column 17 of a matching cs in
  1381.             CSLIST.SRT or CSLIST1.SRT.
  1382.  
  1383.  
  1384.      To make ACCESION.BAT to call this collection of functions, type
  1385.  
  1386.                              FWKCS /a3m <enter>
  1387.  
  1388.          ACCESION.BAT= " FWKCS %1 /a3[b]"
  1389.  
  1390.          Then, prepare the macro [b], by typing
  1391.  
  1392.          FWKCS ContiguousStringOfOptionsUpTo73BytesLong /db <enter>
  1393.  
  1394.          and check to see that it came out OK by typing
  1395.  
  1396.                               FWKCS /d <enter>
  1397.  
  1398.  
  1399.          This is for accessioning files into the contents_signature system,
  1400.          and can process both zip and non_zip files together. It accepts
  1401.          wildcards. It summarizes its results to the screen as it goes, and
  1402.          treats the filename.ext for each file as follows:
  1403.  
  1404.            If the file passes the various tests which you have specified,
  1405.            the name is unchanged, and the contents_signature(s) are made
  1406.            part of the system;
  1407.  
  1408.            -----
  1409.  
  1410.            If the program tries to change a name and runs into a name
  1411.            conflict, it reports this to the screen; else, if not s, the
  1412.            filename is changed as listed above.
  1413.  
  1414.     To run it, type   ACCESION *.*<enter>,  or you can be more specific, if
  1415.          you wish.
  1416.  
  1417.          It can handle a single file, or, if you wish, be turned loose on
  1418.          part of, or a whole, (sub)directory.
  1419.  
  1420.          After running this on a collection of files, you may want to run
  1421.          FWKCS /v, as discussed below, to help keep your update_time
  1422.          conveniently short.
  1423.  
  1424.  
  1425. 4: {} /a4aNNNNdf,free;j,junked;nN,NN(NN);o,oust;mpr,refs;sv(,vdat;)v1,tsysop;wz
  1426.  
  1427.          like #3, but PKUNZIPs zipfiles; can test for virus in file which was
  1428.          inside zipfile, and for zipfile in zipfile.
  1429.  
  1430.          f,Free; subdirectory into which to unzip files; default = ##CELLAR
  1431.  
  1432.          z ZIPs_only, else can handle both zip and non_zip files.
  1433.  
  1434.   In addition to all the operations which can be performed by /a3,
  1435.  
  1436.          if NOT s, renames
  1437.  
  1438.          failed ziptest ".FZT"
  1439.  
  1440.          virus ".VIR" - including both virus in shell and virus inside zipfile
  1441.  
  1442.              Discussion:
  1443.                 It is possible to put two different files with the same
  1444.                 filename into a zipfile, by using the PKZIP -r and -p options
  1445.                 to recurse subdirectories and retain the paths. Because of
  1446.                 this, it is not necessarily sufficient to just unzip all of a
  1447.                 zipfile together into a single subdirectory. If you use the
  1448.                 PKUNZIP -o option, so that the system does not "hang", a
  1449.                 second occurrence of the same filename causes the first file
  1450.                 with that name to be overwritten. Thus, SCANning the
  1451.                 subdirectory for viruses would not find a virus hidden in the
  1452.                 first of those two files.  For many systems, it could be a
  1453.                 security risk to let a node create a large number of
  1454.                 subdirectories, and the individual nodes are not given CREATE
  1455.                 rights for making subdirectories.
  1456.  
  1457.                 When testing for viruses, preparing to delete material from
  1458.                 within a zipfile, or searching for zipfile(s) inside a
  1459.                 zipfile, FWKCS uses contents_signatures to test for whether
  1460.                 the zipfile contains different files with the same filename.
  1461.                 Under /a4, /a5, and /a6, such zipfiles are processed by
  1462.                 separately unzipping and scanning groups of files which have
  1463.                 the same inner_path and different filenames.
  1464.  
  1465.          zip in zip ".ZIZ" - a zipfile was found inside a zipfile
  1466.  
  1467.          if z, nonzip".NZ" - this extension is to avoid confusion which might
  1468.             be caused by forcing a zipfile test on a file which is non_zip.
  1469.  
  1470.   format: FWKCS /a4m - make ACCESZIP.BAT= " FWKCS %1 /a4[b]" to call #4.
  1471.  
  1472.     with the same prodecure described for /a3 above for making macro [b].
  1473.  
  1474. 5 --- auto test + accession files:
  1475.  
  1476. FWKCS file (UPLOAD) /a5aNNNNc(,zcom;)de(2),zizdir;f,free;j,junked;l,uplog;
  1477. nN,NN(NN)(,qsndir);ompq,potvir;r,refs;st,trashold;v(,vdat;)v1,telsysop;wz (out)
  1478.  
  1479. (options are contiguous; command_line can use macros + config. file(s); see /h)
  1480.    The default macros for this are [cde], providing 219 bytes of internal
  1481.    storage available for inclusion in the command line.
  1482.  
  1483.    runs under PCBoard v14.n; may call QSORT, PKZIP, PKUNZIP, SCAN.
  1484.  
  1485.    default output: can make PCBPASS.TXT or PCBFAIL.TXT.
  1486.  
  1487.    (out) if present, receives message and suppresses PCBPASS.TXT, PCBFAIL.TXT.
  1488.  
  1489.  Whether or not UPLOAD,
  1490.  
  1491.        --- sets errorlevel (see /e)
  1492.  
  1493. |      f,Free; empty subdir, defaults to ##CELLAR. Note that normally there is 
  1494. |              no path for the ##CELLAR.  For a multi_node system, such as an 
  1495. |              electronic bulletin board, a ##CELLAR subdirectory is placed 
  1496. |              directly under the default directory of each node. All of these 
  1497. |              free workareas have the same name, for example, ##CELLAR. 
  1498. |              Because the free workarea does not have PATH specification, 
  1499. |              each separate node automatically does its work in its own, 
  1500. |              separate ##CELLAR. This lets the system handle simultaneous 
  1501. |              uploads without overlapping the workareas.
  1502.  
  1503.        v(,vdat;) call SCAN for Viruses (use external virus_data_file).
  1504.  
  1505.          Note:
  1506.  
  1507.            under /a5, if UPLOAD, then o or v invokes test for whether a
  1508.            zipfile contains different files with the same filename, so that
  1509.            such a zipfile can be sequestered or deleted.
  1510.  
  1511.            under /a5, if NOT upload, then does not test for whether a zipfile
  1512.            contains different files with the same filename, so as to not
  1513.            interfere with providing results of PKUNZIP test of file integrity
  1514.            for a file already on the board.
  1515.  
  1516.        v1,telsysop; d:\path\file for warning about "virus".
  1517.  
  1518.        z Zipfiles only, forces PKUNZIP test; else handles both plain and zip.
  1519.  
  1520. --- if UPLOAD:
  1521.  
  1522.        excludes (zip)file if cs_match x_flagged;
  1523.  
  1524.        o  run deletions m,w on non_AV zipfile, or Purge non_AV file(s) from 
  1525.           Authenticity Verification Zipfile.  (when running under /a5 or /a6, 
  1526.           "o" uses a temporary file which is automatically generated and 
  1527.           deleted)
  1528.  
  1529.           Note: To avoid accidentally calling /a5m (which makes a .BAT file),
  1530.           if you use the m suboption, it can be put after the o. This does not
  1531.           reduce your number of options, because o is required to enable
  1532.           deletions selected with m.
  1533.  
  1534.        j,Junked log
  1535.  
  1536.        m delete file from zipfile if any cs_Match is found for it in
  1537.           CSLIST.SRT or CSLIST1.SRT. (see Note above re position of m relative
  1538.           to o)
  1539.  
  1540.        p Purge non_AV files from AV zipfiles
  1541.  
  1542.        r,Refs xref - cross_referencing is discussed under /a3
  1543.  
  1544.        w Wipe if w_flagged.
  1545.  
  1546.        aNNNN Age test in months.
  1547.  
  1548.        d  reDate zipfile to latest file in it.
  1549.  
  1550.        c(,zcom;) strip (replace) zipfile Comment; else keep. "zcom" can have
  1551.           full path.
  1552.  
  1553.        e(2),zizdir; upload crEdit for zipfile(s) with zipfile(s) inside:
  1554.           if and only if the subdir exists, then e2=yes.
  1555.  
  1556.        l,uplog; overrides default upload Log, can use full path.
  1557.  
  1558.        nN,NN(NN)(,qsndir); novelty test, as described above for /a3. If
  1559.           subdirectory (here listed as qsndir; the subdirectory can have full
  1560.           path) is provided to receive the uploaded file (for further
  1561.           consideration), then, if the file does not pass this test, the file
  1562.           is put into that subdirectory and upload credit is given; otherwise,
  1563.           an uploaded file which does not pass this test is deleted and upload
  1564.           credit is not given.
  1565.  
  1566.        q,potvir; Quarantine, subdirectory for Potential virus; subdir can have
  1567.           full path.
  1568.  
  1569.        s Save rejects, else delete or sequester (that's what those special
  1570.           subdirectories are for).
  1571.  
  1572.        t,trashold; optional subdirectory into which is put an uploaded zipfile
  1573.           rejected as redundant or duplicate (errorlevels 8, 9, 10).
  1574.  
  1575. --- ELSE, for file integrity test or contents_signature.
  1576.  
  1577.        a zipfile is tested for file integrity using PKUNZIP -t .
  1578.  
  1579.        a non_zip file is processed to produce a FWKCS contents_signature,
  1580.        which is provided to the user - this can then be compared with other
  1581.        contents_signatures, to avoid downloading duplicates.
  1582.  
  1583.   To run this, type
  1584.  
  1585.                              FWKCS /a5m <enter>
  1586.  
  1587.   to make PCBTEST.BAT=
  1588.  
  1589.                             FWKCS %1 %2 /a5[cde]
  1590.  
  1591.   Then, choose which options you are going to use, and prepare the macros
  1592.   [cde], by running
  1593.  
  1594.          FWKCS ContiguousStringOfOptionsUpTo73BytesLong /dc <enter>
  1595.  
  1596.          FWKCS ContiguousStringOfOptionsUpTo73BytesLong /dd <enter>
  1597.  
  1598.          FWKCS ContiguousStringOfOptionsUpTo73BytesLong /de <enter>
  1599.  
  1600.   Or, if you wish, you can make a .BAT program to do this, or read material
  1601.   from text files [+file] into the command line to load each macro separately
  1602.   (see example(s) near the beginning of Section 3).
  1603.  
  1604.   When these macros are called by using [cde] (the square brackets "[]" are
  1605.   literal) on the command line, they are run together to make a (contiguous)
  1606.   string.  That gives you a total of 219 bytes to work with directly;  more is
  1607.   available, if needed, by using macro [b] and/or by reading material from a
  1608.   file into the command line at time of execution.
  1609.  
  1610.   To check the macros, type
  1611.  
  1612.                               FWKCS /d <enter>
  1613.  
  1614.   A macro can be replaced with another macro, using the same procedure.
  1615.  
  1616.   A macro can be deleted by typing its hexadecimal label which appears on the
  1617.   left of the FWKCS /d screen. For example, to delete macro [b], type
  1618.  
  1619.                               FWKCS /db <enter>
  1620.  
  1621.   To reset all of the defaults, you can run REVERT.BAT, which is provided as
  1622.   part of FWKCS109.ZIP.
  1623.  
  1624.          Please see also the detailed discussion in example 2.2, above.
  1625.  
  1626.          This automates the evaluation and testing of uploads onto an
  1627.          electronic bulletin board system operating PCBoard 14.n, including
  1628.          preparation of messages to users, testing new zipfiles, updating the
  1629.          contents_signatures system, keeping a log, and deleting rejects. It
  1630.          is able to create a contents_signatures analysis of a new zipfile and
  1631.          compare that with the contents_signatures for all the files in all
  1632.          the available zipfiles on the system, and recognize as redundant a
  1633.          zipfile made of pieces which appear as separate pieces within
  1634.          separate zipfiles on the system, quickly enough to make a timely
  1635.          response to the user and to play a role in controlling the
  1636.          disposition of the incoming file.
  1637.  
  1638.  
  1639. 7. format: FWKCS (infile) /a7.n(flags) (outfile1 (outfile2))
  1640.  
  1641.         To make it more convenient to use flags in column 17 of CSLIST.SRT
  1642.         and of CSLIST1.SRT, FWKCS has an auxiliary function to strip flags,
  1643.         insert a flag, select all entries which have a flag in a search list,
  1644.         and split a file according to whether each line has a flag in a search
  1645.         list.
  1646.  
  1647.         if INFILE is not specified, "standard input" is assumed.
  1648.         if OUTFILE is not specified, "standard output" is assumed.
  1649.  
  1650.         Because INFILE and OUTFILE are separated by the /option, it is
  1651.         possible to omit either without affecting the other. This lets FWKCS
  1652.         open an output file at the end of a pipeline.
  1653.  
  1654.   /a7.0  strip all flags.
  1655.  
  1656.   /a7.1flag  insert (lower_case) flag. The flag can be put into the command
  1657.         line in upper or lower case; the flag as written into the output file
  1658.         in column 17 is in lower case.
  1659.  
  1660.   /a7.2flags  (in /a7.2, flags are compared independent of case):
  1661.         if no specified flag, default is all flags.
  1662.         if no outfile2, output only lines with a matching flag;
  1663.           else put lines without matching flag in outfile2.
  1664.  
  1665.         Suppose, for example, you had a set of commercial files which you
  1666.         wanted to exclude from your system. You could put just those files
  1667.         all together into one subdirectory, and then enter them for automatic
  1668.         exclusion by running this command pipeline:
  1669.  
  1670.         dir | fwkcs /1cefp | qsort | fwkcs /a7.1x |fwkcs /u <enter>
  1671.  
  1672.         If you wish, you could do these steps one at a time,
  1673.  
  1674.            dir >list1
  1675.            fwkcs /1cefp list1 cslist.tmp
  1676.            del list1
  1677.            qsort cslist.tmp cslistmp.srt
  1678.            del cslist.tmp
  1679.            fwkcs cslistmp.srt /a7.1x xcslist.srt
  1680.            del cslistmp.srt
  1681.            fwkcs /u xcslist.srt
  1682.  
  1683.         You can make the XCSLIST.SRT file available to others, and they can
  1684.         perform the single (last) step to load it into their systems.
  1685.  
  1686.         Similarly, if there are ads which you wish to automatically delete
  1687.         from non_AV zipfiles when processing incoming uploads, you can use
  1688.         /a7.1w instead of /a7.1x , and mark their contents_signatures for
  1689.         automatic Wipe.
  1690.  
  1691.         If FWKCS is on your PATH, you can install such a marked file on your
  1692.         system by typing, for example,
  1693.  
  1694.                        fwkcs /u wcslist.srt <enter>
  1695.  
  1696.         from anywhere on your system from which you can call FWKCS -- the
  1697.         rest is handled automatically.
  1698. ----------------------------- END of discussion of /a
  1699.  
  1700.  
  1701.  
  1702.  d - Default names, paths, macros (discussed further, below)
  1703.  
  1704.        To change any one of the entries, use its single hexadecimal digit on
  1705.        the left. For example, to specify a path D:\TIMBER\ for the uploads
  1706.        log, item A, type
  1707.  
  1708.                    FWKCS d:\timber\fwkupld.log /da<enter>
  1709.  
  1710.        To change it back to what it is on the left (the initial default), type
  1711.        FWKCS /da<enter>.
  1712.  
  1713.        To put in a path C:\DOS\ for finding PKUNZIP.COM, item 7, type
  1714.  
  1715.                     FWKCS c:\dos\pkunzip.com /d7<enter>
  1716.  
  1717.        and so on.
  1718.  
  1719.        For safety, the location of the specific copy of FWKCS which you are
  1720.        working with is presented at the bottom of the display. If you type
  1721.        FWKCS/d<enter> just before you make the change, the place where you
  1722.        will be making your entry will be directly below a display of this
  1723.        specific d:\path\name.ext information, to help you be aware of which
  1724.        copy you will be making a change in. This can be particularly important
  1725.        on networks.
  1726.  
  1727.        For speed of execution, please use the /dn option to specify efficient
  1728.        paths to reach the programs called by FWKCS.
  1729.  
  1730.        There are two special cases of using /dn to suppress an operation:
  1731.  
  1732.           FWKCS has an internal scrolling capability which it can use if it
  1733.           does not find LIST. If you wish to use this scrolling instead of
  1734.           LIST, you can prevent a search for LIST by putting a "." (period) in
  1735.           place of the filename, by typing   FWKCS . /d8<enter>
  1736.  
  1737.           Similarly, if you do not wish to keep an uploads log, you can
  1738.           suppress this option by putting a period in place of item A, by
  1739.           typing    FWKCS . /da<enter>
  1740.  
  1741. macros: these provide a way for you to use longer command lines than are
  1742.        supported by DOS. Each of the macros can be a contiguous string up to
  1743.        73 bytes long. They can be loaded in just the same way as the paths,
  1744.        etc, above are put in, using FWKCS /dn, where n designates the macro,
  1745.        so you would use /db, /dc, /dd, or /de.
  1746.  
  1747.        Macros can be loaded from files prepared separately, using the ability
  1748.        of FWKCS to accept a file as part of the command line. For example,
  1749.        suppose you used a word processor to prepare a file called NEWMACRO.
  1750.        To put the contents of that file into macro [b], you could type
  1751.  
  1752.                         FWKCS [+newmacro] /db <enter>
  1753.  
  1754.        To write the contents of macros [cde] together to a single file DID,
  1755.        you could type
  1756.  
  1757.                          FWKCS [cde] [-did] <enter>
  1758.  
  1759.  
  1760.  e - Errorlevels + messages
  1761.  
  1762.        This screen specifies the meanings for various errorlevel values which
  1763.        FWKCS can provide. Various of these errorlevels can be used to control
  1764.        a .BAT program, providing considerable versatility in applications.
  1765.  
  1766.        The statements of meanings for the errorlevels also are themselves
  1767.        strings of characters which are used in creating messages delivered
  1768.        by FWKCS under the various circumstances to which they refer. Thus,
  1769.        they serve two purposes.
  1770.  
  1771.  f - Find if contents_signature(s) in CSLIST.SRT match the input, set
  1772.        errorlevel.
  1773.  
  1774.        This provides a way to incorporate FWKCS into .BAT programs, to
  1775.        provide greater flexibility as to the response which the system makes
  1776.        under the specific conditions reported via the errorlevel. The f
  1777.        command does not gather material into a report; its output is via the
  1778.        errorlevel setting.
  1779.  
  1780.  g - Get all contents_signature(s) in CSLIST.SRT matching input, set
  1781.        errorlevel.
  1782.  
  1783.        This provides the same errorlevel information to control .BAT
  1784.        execution, and gathers (sometimes a lot of) matches, delivered either
  1785.        to a file named in the command line after the options, or via the
  1786.        'standard output'. This output can be used for a variety of purposes,
  1787.        such as sending reports to users, or preparing reports, or looking for
  1788.        waste, etc.
  1789.  
  1790.  f,g suboptions:
  1791.  
  1792.        j,Junked;mnN,NN(NN);o,Oust;pr,Refs;w
  1793.  
  1794.        j,Junked  keep a log of what is proposed for deletion.
  1795.  
  1796.        m  collect for deletion from a non_AV zipfile every file in that
  1797.           zipfile for which a contents_signature Match was found in CSLIST.SRT
  1798.           or CSLIST1.SRT.
  1799.  
  1800.        nN,NN(NN) Novelty test, see discussion under /a3, above.
  1801.  
  1802.        o,Oust list of names as they appear inside the zipfile, to use with
  1803.  
  1804.                          PKZIP zipfile.zip -d @oust
  1805.  
  1806.           to carry out the deletions.
  1807.  
  1808.        p include in the oust list every non_AV file found within an
  1809.           AV_zipfile.
  1810.  
  1811.        r,Refs cross_Referencing, see discussion under /a3, above.
  1812.  
  1813.        w collect for deletion all files found in non_AV file for which a
  1814.           matching contents_signature in CSLIST.SRT or CSLIST1.SRT was marked
  1815.          in decimal_column 17 with a lower_case "w".
  1816.  
  1817.        These are the same as discussed for /a3. They provide the ability to
  1818.        remove unwanted material from a zipfile, and to collect
  1819.        cross_references against the entire system.
  1820.  
  1821.  h - Help (or FWKCS <ENTER> sans option); see also /a , /d , /e , /l, /1h, /1t.
  1822.  
  1823.  i - make Index CSLIST.NDX for use with CSLIST.SRT. (i m u v may take a while)
  1824.  
  1825.        The reason why the program can search for matches as quickly as it does
  1826.        is because it does not have to search sequentially. It uses information
  1827.        properties of a contents_signature to find where to look in the files,
  1828.        and the index files are generated according to that system.
  1829.  
  1830.  l - License and dedication.
  1831.  
  1832.        Reformatted (see the /l screen):
  1833. - - - - - - - - - - - -
  1834.           FWKCS(TM) Ver 1.09: Provided that no fee is charged for the use,
  1835.        copying, or distribution; and provided that they are not modified in
  1836.        any way; then, EXCEPT FOR USE IN A COMMERCIAL, SCHOOL, OR GOVERNMENTAL
  1837.        ENVIRONMENT, you are free to use and copy FWKCS(TM) and FWKDG(TM), and
  1838.        to distribute them solely in their original Authenticity Verification
  1839.        Zipfile named FWKCS109.ZIP with AV code = "# OFT466 Frederick W. Kantor
  1840.        (founder/information mechanics)"
  1841.  
  1842.           Frederick W. Kantor disclaims any and all warranties as to this
  1843.        software, whether express or implied, including by way of example and
  1844.        without limitation any implied warranties of merchantability, fitness
  1845.        for a particular purpose, functionality, data protection, or data
  1846.        integrity.
  1847.  
  1848.           Dedication: The file format of the files created by this program,
  1849.        which file format is original with the first release of this software;
  1850.        and the related nomenclature, "contents signature", "zipfile contents
  1851.        signature", "file contents signature", "cs", "zcs", and "fcs"; are all
  1852.        hereby dedicated to the public domain.
  1853.  
  1854.           If you have any questions or comments re FWKCS(TM) or FWKDG(TM),
  1855.        please send them to Fred Kantor via The Invention Factory BBS,
  1856.        212-431-1194.
  1857.  
  1858.           If you find FWKCS(TM) quick and useful in private, personal use,
  1859.        your payment of $25 by check or money order to Fred Kantor, 523 West
  1860.        112 Street, New York, NY 10025-1614, would be appreciated.  Licensing
  1861.        available.
  1862.  
  1863. - - - - - - - - - - - -
  1864.  
  1865.        Discussion:
  1866.  
  1867.        First, PLEASE TAKE NOTICE, that use of this software in a commercial,
  1868.        school, or governmental environment, without payment and registration,
  1869.        is not permitted.
  1870.  
  1871.  
  1872. |
  1873. |                          R E G I S T R A T I O N
  1874. |                          - - - - - - - - - - - -
  1875. |
  1876. |
  1877. |
  1878. |              FWKCS Registration Prices effective 1991 Mar 07
  1879. |              -----------------------------------------------
  1880. |
  1881. |
  1882. |   Application                                   Registration
  1883. |   -----------                                   ------------
  1884. |
  1885. |   Personal private use                              $  25.00
  1886. |
  1887. |   Electronic Bulletin Board     1 Node              $  25.00
  1888. |
  1889. |                               1-3 Nodes             $  48.00
  1890. |
  1891. |                               1-6 Nodes             $  70.00
  1892. |
  1893. |                               1-9 Nodes             $  92.00
  1894. |
  1895. |                              1-99 Nodes             $ 194.00
  1896. |
  1897. |
  1898. |      For Electronic Bulletin Board use, the registration fee depends
  1899. |      on the capacity of the BBS software installed, such as may be
  1900. |      seen on the welcome screen or otherwise remotely noted.
  1901. |
  1902. |      The registration upgrade price on going to a larger capacity is
  1903. |      just the current new registration price minus the current
  1904. |      registration price for the smaller system.
  1905. |
  1906. |
  1907. |
  1908. |
  1909. |   Registration is by Firt Class U.S. Mail addressed to
  1910. |
  1911. |                          Fred Kantor
  1912. |                          523 West 112 Street
  1913. |                          New York, NY 10025-1614
  1914. |
  1915. |
  1916. |   Payments
  1917. |   --------
  1918. |   Preferred forms of payment are Money Order, Cashier's Check, or
  1919. |   Personal/Company Check, made payable to "Fred Kantor" or to
  1920. |   "Frederick W. Kantor".
  1921. |
  1922. |   For safety,  Please mark all checks,  "For deposit only."
  1923. |
  1924. |                Please do not send cash through the U.S. Mail.
  1925. |
  1926. |
  1927. |   Support
  1928. |   -------
  1929. |
  1930. |   Telephone support is available for registered users only.
  1931.  
  1932.  
  1933.  
  1934.        All who wish to use this software in a commercial, school, or
  1935.        governmental environment, contact me in writing.
  1936.  
  1937.  
  1938.        To contact me in writing and/or to send payment, please use either my
  1939.        address as it appears above,  at the bottom of the FWKCS /h or /l screen
  1940.        or, if you prefer:
  1941.  
  1942.                             FREDERICK W KANTOR
  1943.                             FOUNDER
  1944.                             INFORMATION MECHANICS
  1945.                             523 W 112 ST
  1946.                             NEW YORK, NY 10025
  1947.  
  1948.        That is my address as used by The American Physical Society and, with
  1949.        small variation in punctuation, elsewhere; by using the same address,
  1950.        you may help keep down the number of ways my name is included in
  1951.        numerous time_wasting listings.
  1952.  
  1953.  m - Merge unique full lines from sorted files: f1 into f2, or f1 f2 make f3.
  1954.  
  1955.        This is used internally for options /u and /v, and for some auxiliary
  1956.        functions.
  1957.  
  1958.        For example, the two_file form, f1 into f2, lets you merge a 100k
  1959.        sorted file into a 9.5 Meg sorted file to produce a 9.6 Meg sorted
  1960.        file, all done within a total space of less than 10 Meg. This is
  1961.        especially convenient if you wish to run the whole system up in memory,
  1962.        e.g., using a ram_disk.
  1963.  
  1964.        Another example: if you are writing a program, with 16 portions which
  1965.        are kept in a zipfile, and add to one of the parts, only that file is
  1966.        added to the zipfile by the PKZIP -f command.  When you accession that
  1967.        revised file into the contents_signature system, only two lines finally
  1968.        get added: one carrying the new contents_signature for that modified
  1969.        file, and one carrying the new zipfile_contents_signature for the whole
  1970.        zipfile as a collection. This may take two steps: if you have used the
  1971.        /v option between the two entries, then final consolidation would not
  1972.        take place until you ran the /v option again, for reasons which are
  1973.        discussed below.
  1974.  
  1975.  r  /1r - Redirect screen a,d,e,h,l,1h,1t to "standard output";
  1976.        e.g., FWKCS/rd >filename,  FWKCS/1rt >>filename.
  1977.  
  1978.        This provides a convenient way to redirect the screen messages into a
  1979.        file. The default is to send them to the "standard error output", which
  1980.        usually means that they are sent to the screen. The reason for making
  1981.        the default go to the screen rather than be redirected to a file was to
  1982.        help keep the output file, or output pipeline, relatively clean.
  1983.  
  1984.        This is convenient for documentation. For example, before and after you
  1985.        use the /d option to change the defaults, you can send a copy of the
  1986.        screen to a file or to a printer, to make a record for future
  1987.        reference. For example,
  1988.  
  1989.              FWKCS /rd >before
  1990.  
  1991.              FWKCS s:\logs\fwkupld.log /da
  1992.  
  1993.              FWKCS /rd >after
  1994.  
  1995. t,nnnn.nn decimal 0 - 9999.99 seconds of retry (networks)
  1996.  
  1997.        This is related to network systems, to provide some control of how long
  1998.        the program will retry.
  1999.  
  2000. u Update FWKCS (CSLIST1.NDX CSLIST1.SRT) /u (<) CSNEW.SRT , can create full ().
  2001.  
  2002.        This accepts a single_line or sorted input, of contents_signatures,
  2003.        adds them to one of the two default sorted contents_signatures files,
  2004.        and makes a new index for that file. If the file and its index are
  2005.        missing, it creates them.  This is used in NULSTART, ZIPSTART, and
  2006.        FULSTART to create CSLIST1.SRT and CSLIST1.NDX.
  2007.  
  2008.  
  2009.  v - reVise default files #1-4;
  2010.    vp add only unique cs(+flag+ref)'s with Path;
  2011.    vs Sans path.
  2012.  
  2013.        Revise default files #1-4, consolidate into masterlist, restart
  2014.        CSLIST1.  This makes use of the default filenames for the two
  2015.        contents_signatures files and their respective indexes. This system
  2016.        accomodates rapid updating by maintaining two sorted files of
  2017.        contents_signatures. One of them is used as a master_file, and is
  2018.        updated only occasionally. The other is kept conveniently short, so
  2019.        that it can be quickly added to and re_indexed. Redundant lines are
  2020.        dropped on the transfer of lines from the rapid_update file to the
  2021.        master_file. The program is able to keep track concurrently of whether
  2022.        a match was found for each of 16000 (sixteen thousand) signatures from
  2023.        the zipfile being evaluated, regardless of which of the two lists the
  2024.        match was found in.  Thus, a zipfile containing no more than 16000
  2025.        files, some of which are in one list and the rest in the other, can be
  2026.        recognized as redundant.
  2027.  
  2028.    vp add only unique cs(+flag+ref)'s with Path;
  2029.        This accepts inputs from two possibly large files, one in the default
  2030.        location for CSLIST.SRT, the other in the default location for
  2031.        CSLIST1.SRT. It makes a new CSLIST.SRT, by scanning CSLIST1.SRT and
  2032.        finding lines which start with unique contents_signatures (+flag),
  2033.        which are transferred into CSLIST.SRT complete with their paths. It
  2034.        then makes an index for CSLIST.SRT and restarts CSLIST1. If a flag is
  2035.        found in decimal column 17, the comparison is made according to the
  2036.        requirements for that flag.
  2037.  
  2038.        For      comparison includes
  2039.  
  2040.        e        contents_signature + flag + filename
  2041.  
  2042.        k        entire line
  2043.  
  2044.        r        contents_signature + flag + 4_byte_note + contents_signature
  2045.  
  2046.        w        contents_signature + flag
  2047.  
  2048.        x        contents_signature + flag
  2049.  
  2050.  
  2051.    vs Sans path.
  2052.        This is like vp, but, except in case of flag k, it leaves off the
  2053.        d:\path part of the line when it copies it into the new CSLIST.SRT.
  2054.        This is intended to provide the ability to carry forward the
  2055.        content_signatures of files which have been retired from the system,
  2056.        e.g., because they were obsolete. The presence of these cs's protects
  2057.        against accidental uploads of the older files being accepted again as
  2058.        if they were new.  Because the files would in fact not be present,
  2059.        there would seem relatively little reason to keep the d:\path as part
  2060.        of the new cslist.  The absence of that part of the line then provides
  2061.        an easy way to identify which lines they are:  those lines do not have
  2062.        the ":" which separates the drive letter from the path. Thus, a simple
  2063.        search, using the IBM/MS DOS FIND function,
  2064.  
  2065.                   FIND /v ":" <CSLIST.SRT >CARRIED<enter>,
  2066.  
  2067.        would collect all of those entries into the file CARRIED. It is worth
  2068.        noting that the only part of CSLIST.SRT which cannot be reconstructed
  2069.        by scanning the system is the part which would be copied into CARRIED
  2070.        by this command line. If you are pressed for time or cost concerning
  2071.        backing up your system on a regular basis, this might help. If you wish
  2072.        to be able to use the master_list as part of checking to see that you
  2073.        have restored all your files, then a back_up of that master_list would
  2074.        probably be in order.
  2075.  
  2076.        A sample of a setup for a complete revision, carrying forward cs's from
  2077.        retired files, is presented in REVCSLST.BAT, a full listing of which
  2078.        appears near the end of this DOC. You may need to rewrite parts of it,
  2079.        according to how you have set up your system.
  2080.  
  2081.    From the /d screen, with labels added:
  2082.  
  2083. FWKCS /d - display this screen, showing current defaults on right of "=".
  2084. 1. C:\CS\CSLIST.NDX  = C:\CS\CSLIST.NDX   <---<< index for master_list
  2085. 2. C:\CS\CSLIST.SRT  = C:\CS\CSLIST.SRT   <---<< sorted master_list
  2086. 3. C:\CS\CSLIST1.NDX = C:\CS\CSLIST1.NDX  <---<< index for quick_update_list
  2087. 4. C:\CS\CSLIST1.SRT = C:\CS\CSLIST1.SRT  <---<< sorted quick_update_list
  2088.  
  2089.        For example, you might choose to put both index files, with the
  2090.        quick_update_list, into a ram_disk. If you have the space, all four
  2091.        files can go into ram_disk.
  2092.  
  2093.        If you are using hard_disk or slower, try to avoid having the index
  2094.        files all the way across the radial traverse from where you keep their
  2095.        associated lists, and "dress" your disk to make each of the files
  2096.        contiguous, to reduce head travel time.
  2097.  
  2098.  
  2099. FWKCS.COM /1options
  2100. ~~~~~~~~~~~~~~~~~~~
  2101. Options h,t suppress acdefmpsvwxyz.  /1r Redirect screen to "standard output".
  2102. The single "/1" with option letter(s) are all contiguous.
  2103.  
  2104.  aNNNN = if latest file in zipfile is older than NNNN months, set errorlevel=2.
  2105.  
  2106.        NNNN is decimal. This /1 option makes available, via the errorlevel,
  2107.        information used internally in support of various of the /a auxiliary
  2108.        functions discussed above.  It can be used, for example, to control a
  2109.        .BAT program in testing the "age" of zipfiles.
  2110.  
  2111.  c = expect a Control_list; if its filename is not given, use 'standard input'.
  2112.  
  2113.        You can make a list of files in root and sub directories for drives
  2114.        C:-Z: by using FWKDG/l, and feed it in as a pipelined input (please see
  2115.        examples above). You can use the directory command DIR to feed a
  2116.        pipeline, and use the  e  option together with the  c  option, so as to
  2117.        parse the DIR output and accept it as a list of files to process -- in
  2118.        this way, you can use the DIR wild-characters ? and * . You can use the
  2119.        c  option without any pipeline or filelist, and the program will wait
  2120.        for you to type in one or more [d:\][\path\]filename.s, which can be
  2121.        separated by ^E and followed by <enter>.
  2122.  
  2123.  d = reDate zipfile to latest file in it.
  2124.  
  2125.        This is handy when you have zipfiles respectively with dates different
  2126.        from the last date of the files contained, as often happens when you
  2127.        get programs from an electronic bulletin board.
  2128.  
  2129.  e = Edit input from control_list.
  2130.  
  2131.        This is for use together with the  c  option, so that you can accept
  2132.        the output of the DIR command, which makes filenames which may have
  2133.        a gap between the filename and the ext. This option gets the d:\path\
  2134.        from the directory listing header, and parses the file to use the
  2135.        names.
  2136.  
  2137.  f = make a "File contents signature" for (each) File in zipfile(s).
  2138.  
  2139.        This looks inside the zipfile named on the command line, or inside each
  2140.        file in the control list; tests to see if the file is a zipfile
  2141.        (including both storage zipfiles and self-extracting zipfiles); and
  2142.        then uses information stored in the ZIP format to make a contents
  2143.        signature for each of the files in the zipfile; the zipfile format
  2144.        already provides the 32-bit CRC, so this is a relatively quick
  2145.        operation. The output includes the contents signature for the file
  2146.        inside the zipfile (which uses the 32-bit CRC and the uncompressed
  2147.        length of that file), the name of that file, the name of the zipfile in
  2148.        which it was found, and, if a drive\path\ was specified, the drive\path
  2149.        where that zipfile was found.
  2150.  
  2151.        For example, when this is run with FWKDG/l, you can get the contents
  2152.        signatures for all the files in all the zipfiles on all the drives
  2153.        C:-Z: by using a single pipelined command line:
  2154.  
  2155.             FWKDG/l|FWKCS/1cf >outfile
  2156.  
  2157.  m = Make MULTCNT.RPT; cancels acdefpvwxyz
  2158.  
  2159.        This accepts as input a sorted contents_signature file, and makes a
  2160.        report of how many files had the same contents_signature, and therefore
  2161.        probably had the same contents. Please see an example of an output
  2162.        report shown in 8 below.
  2163.                        ~
  2164.  p = make a "file contents signature" for (each) Plain file (non_zip).
  2165.  
  2166.        In this case, unlike the case of a file in a zipfile, FWKCS can't just
  2167.        look up the 32-bit CRC: it calculates it. This is written in assembly
  2168.        language, and, even with an 8088, it carries the running variables in
  2169.        the CPU chip. Then, it makes a contents signature. The output contains
  2170.        the contents signature; then the filename; then a designation "f cs",
  2171.        to mark that it is an independent file contents signature rather than
  2172.        the signature for a file contained in a zipfile; and, if it was told a
  2173.        drive\path for that file, the drive\path.
  2174.  
  2175.  r = Redirect messages to standard output.
  2176.  
  2177.  s = Scan a sorted signature_file for signature_multiple(s); cancels cdefpyz
  2178.  
  2179.        This is for use after the signature file has been sorted. It looks for
  2180.        non-unique content signatures. These usually mean that there is the
  2181.        same contents in the two (or more) files. The probability of error on
  2182.        this is discussed above. One should bear in mind that a storage zipfile
  2183.        which has the same file contents as a self extracting zipfile will also
  2184.        have the same contents signature; and that a zipfile which contains
  2185.        only one file will have the same contents signature as the single file
  2186.        which it contains. This scan is written in assembly language, for
  2187.        speed. The input can come from the pipeline. For example, this single,
  2188.        pipelined command line:
  2189.  
  2190.               fwkdg/l|fwkcs/1cz|qsort|fwkcs/1s >zcs_dups
  2191.  
  2192.        is sufficient to find all the redundant zipfiles on drives C:-Z:, and
  2193.        list them, grouped together, in ZCS_DUPS.
  2194.  
  2195.        The output contains spacer lines made of hyphens, and line entries for
  2196.        only those input lines which have matching contents signature. This can
  2197.        tell you, for example, if the same file contents is present in files
  2198.        located in different zipfiles, or tell you that an ordinary file has
  2199.        the same contents as a file with a different name and date, even if
  2200.        that file is stored in a zipfile.
  2201.  
  2202.  
  2203.  v = if any zip, set errorlevel=1 (sans cs output).
  2204.  
  2205.        This bring outside, via setting the errorlevel, part of the
  2206.        interpretation of files, and might be used externally for controlling a
  2207.        .BAT program.  For example, it is used in testing whether any file
  2208.        unzipped into a subdirectory is itself a zipfile.
  2209.  
  2210.  w = set errorlevel = 1 if apparently nonzip file.
  2211.  
  2212.        The /1 default for FWKCS is to do options f, p, x, and z. To do this,
  2213.        the program distinguishes between zipfiles and non_zip files, and then
  2214.        generates the contents_signature(s) accordingly. If the w option is set
  2215.        as part of an explicit command string, FWKCS /1fpwxz [file] and so on,
  2216.        then this internal decision is made available to the calling program
  2217.        by setting the errorlevel.
  2218.  
  2219.  x = eXpress if Authenticity Verification available for file and zipfile.
  2220.  
  2221.        This option causes notations to be made as to the availability of AV
  2222.        for the file and for the zipfile, by using lower_case letters "a"
  2223.        and/or "v":
  2224.  
  2225.        For example,
  2226.  
  2227.        CONTENTSIGNATURE FILENAME.EXTaZIPFILE.EXT v(D:)(\PATH)(,INNERPATH)
  2228.  
  2229.        "a" designates a file with Authenticity Verification available in a
  2230.        zipfile.
  2231.  
  2232.        "v" designates a zipfile containing at least one AV file.
  2233.  
  2234.        Because the AV status of the zipfile and the AV status of the file in
  2235.        it are separately indicated, if you scan your system to make a new
  2236.        CSLIST.SRT using this x option (which updated .BAT files herewith do),
  2237.        you can use this command line (FINDUNAV.BAT, in this AV_zipfile)
  2238.  
  2239.           FIND "v" <C:\CS\CSLIST.SRT | FIND /v "a" | FIND /v "z" >toreject.tmp
  2240.  
  2241.        to collect into TOREJECT.TMP the identifications, paths, etc., of all
  2242.        the non_AV files which have been inserted into AV zipfiles on your
  2243.        entire system.
  2244.  
  2245.        If you find any, then you can run a short .BAS program,
  2246.  
  2247.           BASICA AVONLY<enter>      (or another BASIC for your system)
  2248.  
  2249.        to use the entries in TOREJECT.TMP to make TOREJECT.BAT, which calls
  2250.        PKZIP to delete those non_AV files from the respective AV zipfiles.
  2251.        This has been revised to also be able to delete files which were zipped
  2252.        with path.
  2253.  
  2254.        Here is a full listing of AVONLY.BAS:
  2255.   ----------------------------------------------------------------------------
  2256.   10 CLS:LOCATE 10,1:PRINT "found:"
  2257.   20 OPEN "toreject.tmp" FOR INPUT AS 1
  2258.   30 OPEN "toreject.bat" FOR OUTPUT AS 2
  2259.   40 WHILE NOT EOF(1):LINE INPUT #1,A$
  2260.   50 J=200:N=INSTR(44,A$,","):IF N>0 THEN J=N-44
  2261.   60 B$="pkzip "+MID$(A$,44,J)+"\"+MID$(A$,31,12)+" -d -k "
  2262.   70 IF N=0 GOTO 90
  2263.   80 B$=B$+MID$(A$,N+1)+"\"+MID$(A$,18,12):GOTO 100
  2264.   90 B$=B$+MID$(A$,18,12)
  2265.   100 PRINT #2,B$:I=I+1:LOCATE 10,7:PRINT USING "#######"; I
  2266.   110 WEND:CLOSE
  2267.   120 SYSTEM
  2268.   ----------------------------------------------------------------------------
  2269.  
  2270.        Then, you can run TOREJECT<enter> to clear out such non_AV files
  2271.        without changing the zipfile date(s).
  2272.  
  2273.        Thanks to what Phil Katz has provided, this use of the /1x option in
  2274.        FWKCS provides a way to remove a certain kind of pollution from your
  2275.        files.
  2276.  
  2277.        After you do that, if you find only a few, you may want to test the
  2278.        resulting zipfiles one by one using the Y .BAT_file described above,
  2279.        and look at the display to see if every remaining entry in the
  2280.        laundered zipfile is a duplicate of some other file. If you have a lot
  2281.        of files which were laundered, or prefer to handle it more nearly
  2282.        automatically, then you may want to run a full preliminary screening
  2283.        for zcs_duplicates.
  2284.  
  2285.  
  2286.  y - make "file contents signature" for both zip and plain files as if for
  2287.        plain files;
  2288.  
  2289.        This option is different from options  f  and  z  in that it is
  2290.        deliberately made to be sensitive to details which  f  and  z  are
  2291.        designed to avoid. It can be used for looking for exact duplicate
  2292.        (zip)files: unlike z, the contents signature made using option  y  on a
  2293.        zipfile depends on compression, names, dates, and order of files in the
  2294.        zipfile, and on comment(s). In this case, FWKCS reads every byte in
  2295.        the zipfile and calculates its 32-bit CRC, rather than look up CRC
  2296.        value(s) in the zipfile. Options p and y can be used in looking for
  2297.        change, e.g., in monitoring equipment performance, etc.
  2298.  
  2299.  z - make a "Zipfile contents signature" for (each) Zipfile.
  2300.  
  2301.        This is done by reading the 32-bit CRC's for all the files in the
  2302.        zipfile, adding them together mod 2^32, reading all the
  2303.        uncompressed_file_lengths listed in the zipfile, adding them together
  2304.        mod 2^32, and then putting the two pieces together to make a special
  2305.        zipfile contents signature. This has special features which are
  2306.        discussed above in section 1. The output line is like that for the
  2307.        option  f , except that the line is marked with a "z   cs" to indicate
  2308.        a zipfile contents signature.
  2309.  
  2310.  
  2311. 4. FWKCS     screens
  2312. ~~~~~~~~~~~~~~~~~~~~
  2313.  
  2314.        FWKCS provides seven (sets of) help and information screens, which can
  2315.        be generated using these commands:
  2316.  
  2317.         fwkcs(/h)   the default with no command_tail input is the /h help
  2318.                       screen
  2319.  
  2320.         fwkcs/a     auxiliary functions, including making .BATs to call some
  2321.  
  2322.         fwkcs/d     default names, paths, macros, and how to change them
  2323.  
  2324.         fwkcs/e     errorlevels and messages. various of these messages are
  2325.                      used by fwkcs in preparing text output.
  2326.  
  2327.         fwkcs/1h    subset of functions for generating and manipulating
  2328.                      contents_signatures
  2329.  
  2330.         fwkcs/1t    special_purpose commands, and some technical information
  2331.  
  2332.         fwkcs/l     license and dedication
  2333.  
  2334. Here is roughly what the screen displays may look like:
  2335.  
  2336. this command line:   fwkcs/h
  2337.  
  2338. may give approximately this screen:
  2339.  
  2340. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2341. Copyright (C) 1989,1990,1991 by Frederick W. Kantor. All rights reserved.
  2342. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2343. ........................ C A V E A T   O P E R A T O R ........................
  2344. Format 1: FWKCS (CSLIST.NDX CSLIST.SRT) /option ((<)in ((>)out)) <ENTER>
  2345.   where CSLIST.NDX is index for CSLIST.SRT sorted contents_signature_list.
  2346. 2: FWKCS f1 f2 (f3) /m <ENTER>  |Format 1,2,3 grammar: /(r)(t)other_options.
  2347. 3: FWKCS (files)([b])([+file1])[c](options)([de])([+file2]) (files) ([-file3])
  2348.   where "[]" are literal characters; [b][c][d][e] are macros (see /d);
  2349.   [+file] includes file's contents (/d macros OK) in command line;
  2350.   [-file] prevents execution, writes (expanded) command line to file.
  2351. Options:  (upper or lower case OK)   | Error messages are logged to FWKCS.ERR.
  2352. a Auxiliary functions. d Default names/paths/macros. e Errorlevels + messages.
  2353. f Find if cs_match. g Get cs_matches. h Help (see also /a,/d,/e,/l,/1h,/1t).
  2354. f,g subopts: j,Junked;mnN,NN(NN);o,Oust;pr,Refs;w. (re jmnoprw, see /a #3,5)
  2355. i make Index CSLIST.NDX for use with CSLIST.SRT. (i m u v may take a while)
  2356. m Merge unique full lines from sorted files: f1 into f2, or f1 f2 make f3.
  2357. r Redirect screen a,d,e,h,l to "standard output"; e.g., FWKCS/rd >filename.
  2358. tNNNN.NN 0-9999.99 seconds of retry (networks). l License and dedication.
  2359. u Update FWKCS (CSLIST1.NDX CSLIST1.SRT) /u CSNEW.SRT , can create full ().
  2360. v reVise /d files #1-4; vp add unique cs(+flag+ref)'s with Path; vs Sans path.
  2361.    If you find FWKCS(TM) quick and useful in private, personal use, your
  2362. payment of $25 by check or money order to Fred Kantor, 523 West 112 Street,
  2363. New York, NY 10025-1614, would be appreciated. Licensing available.
  2364.  
  2365.  
  2366.  
  2367.  
  2368. this command line:   fwkcs/a
  2369.  
  2370. may give approximately this sequence of screens, with pauses between them
  2371. indicated below as "(pause)":
  2372.  
  2373. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2374. Copyright (C) 1989,1990,1991 by Frederick W. Kantor. All rights reserved.
  2375. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2376. ........................ C A V E A T   O P E R A T O R ........................
  2377. Auxiliary Functions, FWKCS ... /an(...), "n" at left of item, below.
  2378. AF 2-6 use defaults #1-4 listed on FWKCS /d; for AF 2,3,4, * ? OK.
  2379. 1: FWKCS filelist /a1 (>)nonmatch ; to find filenames not on system.
  2380.    this uses a local copy of DIRGUIDE.TXT(TM) (from FWKDG) and calls QSORT.
  2381. 2:{FWKCS (d:)(\path\)filename(.ext)} /a2d ;to make contents_signature(s),
  2382.    get matching, add new signatures, make new index, make report;
  2383.    d  reDate zipfile to latest file in it;  may call QSORT, LIST.
  2384.   format: FWKCS /a2m - make  Y.BAT= " FWKCS %1 /a2" to call #2.
  2385. 3: {} /a3aNNNNdj,junked;nN,NN(NN);o,oust;mpr,refs;sv(,vdat;)v1,telsysop;w
  2386. to accession files|aNNNN months|d reDate zip|s Same .ext|m del if cs_Match|
  2387. j,Junked log|nN,NN(NN) novelty|o,Oust list|p Purge non_AV|r,Refs xref|w Wipe.
  2388. v(,vdat;) call SCAN for plain_file Virus (use external virus_data_file)
  2389. v1,telsysop; d:\path\file for warning about "virus"|if NOT s, renames files:
  2390. >NNNN mo ".OLD"; duplicate_zcs ".DUP"; question sufficient novelty ".QSN";
  2391. redundant".RED";redundant_non_zip ".RNZ";virus ".VIR";exclusion_flagged ".XFL".
  2392.   format: FWKCS /a3m - make  ACCESION.BAT= " FWKCS %1 /a3[b]" to call #3.
  2393. 4: {} /a4aNNNNdf,free;j,junked;nN,NN(NN);o,oust;mpr,refs;sv(,vdat;)v1,tsysop;wz
  2394. like #3, but PKUNZIPs|f,Free; subdir, default = ##CELLAR|z ZIPs_only|if NOT s,
  2395. renames failed ziptest".FZT"; virus".VIR"; zip in zip".ZIZ"; if z, nonzip".NZ".
  2396.   format: FWKCS /a4m - make ACCESZIP.BAT= " FWKCS %1 /a4[b]" to call #4.
  2397. (pause)
  2398. 5 --- auto test + accession files:
  2399. FWKCS file (UPLOAD) /a5aNNNNc(,zcom;)de(2),zizdir;f,free;j,junked;l,uplog;
  2400. nN,NN(NN)(,qsndir);ompq,potvir;r,refs;st,trashold;v(,vdat;)v1,telsysop;wz (out)
  2401. (options are contiguous; command_line can use macros + config. file(s); see /h)
  2402. runs under PCBoard v14.n; may call QSORT, PKZIP, PKUNZIP, SCAN.
  2403. default output: can make PCBPASS.TXT or PCBFAIL.TXT.
  2404. (out) if present, receives message and suppresses PCBPASS.TXT, PCBFAIL.TXT.
  2405. --- sets errorlevel (see /e) | f,Free; empty subdir, defaults to ##CELLAR.
  2406. v(,vdat;) call SCAN for Viruses (use external virus_data_file).
  2407. v1,telsysop; d:\path\file for warning about "virus".
  2408. z Zipfiles only, forces PKUNZIP test; else handles both plain and zip.
  2409. --- if UPLOAD:  excludes (zip)file if cs_match x_flagged;
  2410. o  run deletions m,w on non_AV zipfile, or Purge non_AV file(s) from AV_zip.
  2411. j,Junked log|m del if cs_Match|p Purge non_AV|r,Refs xref|w Wipe if w_flagged.
  2412. aNNNN Age test in months.  d  reDate zipfile to latest file in it.
  2413. c(,zcom;) strip (replace) zipfile Comment; else keep.
  2414. e(2),zizdir; upload crEdit for zip in zip: iff the subdir exists, then e2=yes.
  2415. l,uplog; overrides default upload Log. nN,NN(NN)(,qsndir); novelty test:
  2416. n1,NN bad if <NN% new; n2,NNNN bad if <=50% new AND <=NNNN new;(qsndir subdir.)
  2417. n3,NNNN bad if >=NNNN cs_matched. q,potvir; Quarantine, subdir Potential virus.
  2418. s Save rejects, else delete or sequester. t,trashold; subdir, /e 8-10 rejects.
  2419. --- ELSE, for file integrity test or contents_signature.
  2420. -- format: FWKCS /a5m - make PCBTEST.BAT= " FWKCS %1 %2 /a5[cde]" to call #5.
  2421. 6:  FWKCS file /a6(); like #5 UPLOAD; can make ascii PASS.TXT, FAIL.TXT.
  2422. (pause)
  2423. 7. format: FWKCS (infile) /a7.n(flags) (outfile1 (outfile2))
  2424.  for use with CSLIST column 17 flags:
  2425.  if no INFILE, uses "standard input".  if no OUTFILE, uses "standard output".
  2426.  /a7.0  strip all flags.
  2427.  /a7.1flag  insert (lower_case) flag.
  2428.  /a7.2flags  (in /a7.2, flags are compared independent of case):
  2429.    if no specified flag, default is all flags.
  2430.    if no outfile2, output only lines with a matching flag;
  2431.      else put lines without matching flag in outfile2.
  2432. Flags:
  2433.  e  Extend /vs comparison to include filename + AV_status
  2434.  k  Keep whole line
  2435.  r  cross_Reference
  2436.  w  Wipe
  2437.  x  eXclude
  2438. ----
  2439.  
  2440. FWKDG(TM) Ver. 1.08 is copyright 1988,1989,1990 by Frederick W. Kantor.
  2441. LIST Ver. 7.5e is copyright 1983-90 by Vernon D. Buerg.
  2442. PCBoard v14.5 is copyright 1985-90 by Clark Development Company, Inc.
  2443. PKZIP, PKUNZIP Reg.U.S.Pat. and Tm.Off., Copr.1989-1990 PKWARE Inc., Ver.1.10.
  2444. QSORT Ver. 3.20 is copyright 1985,86,87,88 by Ben Baker.
  2445. VIRUSCAN Version 6.8 74-B is copyright 1989-1991 by McAfee Associates.
  2446.  -- please compensate properly.
  2447.  
  2448.  
  2449.  
  2450. this command line:   fwkcs/d
  2451.  
  2452. may give approximately this screen:
  2453.  
  2454. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2455. Copyright (C) 1989,1990,1991 by Frederick W. Kantor. All rights reserved.
  2456. FWKCS /d - display this screen, showing current defaults on right of "=".
  2457. 1. C:\CS\CSLIST.NDX  = C:\CS\CSLIST.NDX
  2458. 2. C:\CS\CSLIST.SRT  = C:\CS\CSLIST.SRT
  2459. 3. C:\CS\CSLIST1.NDX = C:\CS\CSLIST1.NDX
  2460. 4. C:\CS\CSLIST1.SRT = C:\CS\CSLIST1.SRT
  2461. ---- for speed of execution, please set paths to reach these programs:
  2462. 5. QSORT.EXE  = QSORT.EXE
  2463. 6. PKZIP.EXE  = PKZIP.EXE
  2464. 7. PKUNZIP.EXE= PKUNZIP.EXE
  2465. 8. LIST.COM   = LIST.COM
  2466. 9. SCAN.EXE   = SCAN.EXE
  2467. ---- log for uploads; command_line macros BCDE: cite using "[]", e.g., [c],[cd]
  2468. A. FWKUPLD.LOG= FWKUPLD.LOG
  2469. B.= 
  2470. C.= 
  2471. D.= 
  2472. E.= 
  2473. Where "n" is single hexadecimal digit at left of item above,   |Note: resulting
  2474.  FWKCS newentry /dn - make this the new Default for item n.    |.COM file is
  2475.  FWKCS /dn - reset item n to value on left of "=".             |uncompressed.
  2476. Before using /dn, please note: this copy of FWKCS you would be changing is at
  2477.   C:\DOS\FWKCS.COM
  2478.  
  2479.  
  2480.  
  2481. this command line:   fwkcs/e
  2482.  
  2483. may give approximately this screen:
  2484.  
  2485. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2486. Options /a2-6,/f,/g set errorlevel; some errorlevel settings + messages are:
  2487.   0 - did not find any contents_signature match.
  2488.   1 - found contents_signature_match for only some of the input files.
  2489.   3 - file(s) would have been listed for deletion were this not an AV_zipfile.
  2490.   4 - file(s) for deletion appear in deletion list... 
  2491.   5 - apparently non_zip file, when only ZIPfile(s) accepted.
  2492.   6 - found matching contents_signature(s) with exclusion_flag.
  2493.   7 - failed PKUNZIP(R) zipfile test.
  2494.   8 - a contents_signature match was found for every contained file, but
  2495. not for zipfile_contents_signature; the contents may have appeared in
  2496. a larger prior ZIP, or been spread among more than one prior ZIPfiles.
  2497.   9 - a contents_signature match was found for each input file;
  2498. the input file(s) might be not ZIPped.
  2499.  10 - a contents_signature match was found for every file, including
  2500. zipfile_contents_signature; this material probably all appeared in
  2501. a prior ZIPfile.
  2502.  11 - the file appears more than      months old.
  2503.  12 - a zipfile was found inside this zipfile.
  2504.  13 - this (zip)file may contain a "virus".
  2505.  14 - a question as to sufficient novelty has arisen:
  2506.   of .....  entries, cs_matches were found for all but ..... .
  2507.  99 - help_screen provides further information
  2508. 101-188 - "DOS extended error" + 100 decimal; see also FWKCS.ERR
  2509.  
  2510.  
  2511.  
  2512. this command line:   fwkcs/1h
  2513.  
  2514. may give approximately this screen:
  2515.  
  2516. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2517. Copyright (C) 1989,1990,1991 by Frederick W. Kantor. All rights reserved.
  2518. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2519. ........................ C A V E A T   O P E R A T O R ........................
  2520. For: files in Phil Katz's ZIP format, both storage and self_extracting; and
  2521.    : plain files.    | For technical information plus options a,v,w,y: FWKCS/1t
  2522. Usage:  FWKCS(/1cdefmprsxz) file1 file2  (/1 default is to do f, p, x, z)
  2523. Options h,t suppress acdefmpsvwxyz.  /1r Redirect screen to "standard output".
  2524. The single "/1" with option letter(s) are all contiguous.
  2525. c = expect a Control_list; if its filename is not given, use "standard input".
  2526. d = reDate zipfile to latest file in it.
  2527. e = Edit input from control_list.
  2528. f = make a "File contents signature" for (each) File in zipfile(s).
  2529. p = make a "file contents signature" for (each) Plain file (non_zip).
  2530. m = Make MULTCNT.RPT re multiplicity  : s,m null acdefpvwxyz.
  2531. s = Scan sorted cslist for multiple(s): s,m may be used together.
  2532. x = eXpress if Authenticity Verification available for file and zipfile.
  2533. z = make a "Zipfile contents signature" for (each) Zipfile.
  2534. Purpose:  each kind of "contents signature" detailed above does not depend on
  2535. file names, dates, order of collection, nor method nor amount of compression.
  2536. Sorting the output groups names of files having the same --> contents <-- .
  2537.    If you find FWKCS(TM) quick and useful in private, personal use, your
  2538. payment of $25 by check or money order to Fred Kantor, 523 West 112 Street,
  2539. New York, NY 10025-1614, would be appreciated. Licensing available.
  2540.  
  2541.  
  2542.  
  2543. this command line:   fwkcs/1t
  2544.  
  2545. may give approximately this screen:
  2546.  
  2547. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2548. Copyright (C) 1989,1990,1991 by Frederick W. Kantor. All rights reserved.
  2549. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2550. ........................ C A V E A T   O P E R A T O R ........................
  2551. Full /1 command line, paths, and options:  options = aNNNNcdefmprsvwxyz
  2552. (d:)(path)FWKCS(/1options) ((d:)(path)file1.ext) ((>(>))(d:)(path)file2(.ext))
  2553. aNNNN = if latest file in zipfile is older than NNNN months, set errorlevel=2.
  2554. v = if any zip, set errorlevel=1 (sans cs output).
  2555. w = if apparently nonzip file, set errorlevel=1 (allows cs text output).
  2556. y = make "file contents signature" for zip or plain file as if plain file(s).
  2557. OUTPUT FORMAT: interletter spacing for zcs and fcs chosen for visual clarity;
  2558. left_16_characters output in hexadecimal, with filelength_leading_zeros blank:
  2559. |  16_character_contents_signature  | |cs_owner  | |in, or has| |where...
  2560. <   32_bit CRC   ><32_bit filelength> FILENAME.EXTaZIPFILE.EXT v[D:][\PATH]
  2561. <CRC_sum mod 2^32><32_bit length_sum> ZIPFILE.EXT   z   cs      [D:][\PATH]
  2562. <   32_bit CRC   ><32_bit filelength> FILENAME.EXT    f cs      [D:][\PATH]
  2563. - for "file contents signature" of a file in a zipfile, both files are named.
  2564. - "z   cs" designates a "zipfile contents signature", made by summing mod 2^32
  2565. all the 32_bit CRCs for the files in the zipfile, and summing (mod 2^32) their
  2566. uncompressed filelengths; zipfile_name is in contents_signature_owner's column.
  2567. - "f cs" designates "file contents signature" for plain file; filename goes in
  2568. signature_owner's column; in this case, FWKCS calculates file's 32_bit CRC.
  2569. - "a" designates a file with Authenticity Verification available in a zipfile.
  2570. - "v" designates a zipfile containing at least one AV file.
  2571.  
  2572.  
  2573.  
  2574.  
  2575. this command line:   fwkcs/l
  2576.  
  2577. may give approximately this screen:
  2578.  
  2579. FWKCS(TM) Contents_Signature System, Ver. 1.09. 1991 Mar 07. FWKCS/h for help.
  2580. Copyright (C) 1989,1990,1991 by Frederick W. Kantor. All rights reserved.
  2581. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2582. ........................ C A V E A T   O P E R A T O R ........................
  2583.    FWKCS(TM) Ver 1.09: Provided that no fee is charged for the use, copying, or
  2584. distribution; and provided that they are not modified in any way; then, EXCEPT
  2585. FOR USE IN A COMMERCIAL, SCHOOL, OR GOVERNMENTAL ENVIRONMENT, you are free to
  2586. use and copy FWKCS(TM) and FWKDG(TM), and to distribute them solely in their
  2587. original Authenticity Verification Zipfile named FWKCS109.ZIP with
  2588. AV code = "# OFT466   Frederick W. Kantor (founder/information mechanics)"
  2589.    Frederick W. Kantor disclaims any and all warranties as to this software,
  2590. whether express or implied, including by way of example and without limitation
  2591. any implied warranties of merchantability, fitness for a particular purpose,
  2592. functionality, data protection, or data integrity.
  2593.    Dedication: The file format of the files created by this program, which
  2594. file format is original with the first release of this software; and the
  2595. related nomenclature, "contents signature", "zipfile contents signature",
  2596. "file contents signature", "cs", "zcs", and "fcs"; are all hereby dedicated to
  2597. the public domain.
  2598.    If you have any questions or comments re FWKCS(TM) or FWKDG(TM), please
  2599. send them to Fred Kantor via The Invention Factory BBS, 212-431-1194.
  2600.    If you find FWKCS(TM) quick and useful in private, personal use, your
  2601. payment of $25 by check or money order to Fred Kantor, 523 West 112 Street,
  2602. New York, NY 10025-1614, would be appreciated. Licensing available.
  2603.  
  2604.  
  2605. 5. FWKDG.COM options
  2606. ~~~~~~~~~~~~~~~~~~~~
  2607.  
  2608.        The following is taken from the DOCs for FWKDG Ver. 1.08:
  2609.  
  2610.  
  2611. FWKDG(tm) Copyright (C) 1988,89,90 by Frederick W. Kantor. All rights reserved.
  2612. Version 1.08  by Frederick W. Kantor circa 1990 Feb 21. For help: FWKDG <enter>
  2613. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2614.  
  2615.                          C A V E A T   O P E R A T O R
  2616.  
  2617. This can be run in at least three ways:
  2618.  
  2619. 1. via a menu program which calls it;
  2620.  
  2621. 2. using a 'pipelined' command_line of two programs, sending the output into
  2622. the final file:
  2623.  
  2624. FWKDG [d] [d] /g | QSORT > DIRGUIDE.TXT  <enter>
  2625.        :   :  :: :  :    :  :
  2626.        :   :  :: :  :    :  final file
  2627.        :   :  :: :  :    :
  2628.        :   :  :: :  :    to redirect the output
  2629.        :   :  :: :  :
  2630.        :   :  :: :  program to sort the file; your choice
  2631.        :   :  :: :
  2632.        :   :  :: this '|' is to pipeline the work to the sorting program  \
  2633.        :   :  ::
  2634.        :   :  :option g to prepare material for use in DIRGUIDE.TXT (*)
  2635.        :   :  :
  2636.        :   :  the '/' is an 'option flag'; it tells fwkdg to look for option
  2637.        :   :
  2638.        :   end of range of drives for FWKDG to scan (not needed for /t or /r)
  2639.        :
  2640.        start of range of drives for FWKDG to scan (not needed for /t or /r)
  2641.  
  2642. (*) option g is for making DIRGUIDE.TXT;
  2643.            l is for making a list of filenames complete with drive and path;
  2644.            t is for reading filenames from text directories without scanning
  2645.                 other parts of the system;
  2646.            r redirects the help screen to the redirectable standard output,
  2647.                 which can be sent to a file, e.g., FWKDG/r > helped.txt;
  2648.                 it defaults to the screen, to not have it clutter the output
  2649.                 stream.  (if you use option /r, all you get is the help screen,
  2650.                 which gets a little hard to read if you send it though a
  2651.                 sorting program first)
  2652.  
  2653. I have indicated Ben Baker's copyrighted "QSORT" as an example of a sorting
  2654. program. To use the command line as presented above, have both FWKDG.COM and
  2655. QSORT.EXE on your path or in your default drive and directory. This way, the
  2656. hard parts are done by using the programs one at a time, so as to leave room in
  2657. memory.
  2658.  
  2659. 3. You can call a small batch program, which uses "qsort" in a command line
  2660. like case 1, and prints a moderately informative, but, hopefully, courteous,
  2661. final screen. It calls the two programs "externally". To run it this way,
  2662. please have FWKDG108.BAT, FWKDG.COM, and QSORT.EXE on your path or in your
  2663. default drive and directory, and please have FWKDG108.SCR in your default drive
  2664. and directory. To start, FWKDG108 [d] [d] <enter> , where the two d's are the
  2665. FIRST_DRIVE and LAST_DRIVE to scan; this runs as a batch program; the hard
  2666. parts are done by using two external programs.
  2667.  
  2668. Here is a full listing of FWKDG108.BAT:
  2669. --------------------------------------------
  2670. echo off
  2671. cls
  2672. fwkdg %1 %2 /g|qsort >dirguide.txt
  2673. cls
  2674. type fwkdg108.scr
  2675. --------------------------------------------
  2676.  
  2677. The first of these external programs is FWKDG.COM. It presents this screen:
  2678.  
  2679.  
  2680. (6. FWKDG     screen)
  2681.  ~~~~~~~~~~~~~~~~~~~
  2682.  
  2683. "
  2684. FWKDG(tm) Copyright (C) 1988,89,90 by Frederick W. Kantor. All rights reserved.
  2685. Version 1.08  by Frederick W. Kantor circa 1990 Feb 21. For help: FWKDG <enter>
  2686. Your use of this program is at solely your own risk: PLEASE HAVE PROPER BACKUPS
  2687.  
  2688.                          C A V E A T   O P E R A T O R
  2689.  
  2690. Format:  FWKDG [d] [d] /option <ENTER>
  2691.   initial drive ^   ^ final drive  (each is a single letter; default: C Z)
  2692.   if only one drive is designated, then only that drive is scanned.
  2693.  
  2694. Options:  (using only one; upper or lower case OK)
  2695.           g  make source-file which when sorted becomes DIRGUIDE.TXT(tm)
  2696.           l  list files in this output format: d:\path\filename.ext <CRLF>
  2697.           t  read only from text directories for making DIRSONLY
  2698. NOTE: if not g, l, or t option, then you get this screen WITHOUT a full run.
  2699.           r  send this help screen to the redirectable "standard output"
  2700. Input:  if option g or l, then read from drives as specified above,
  2701.                           scanning all their root_ and sub_directories;
  2702.         if option g, then also read from the text directories;
  2703.         if option t, then read only from the text directories;
  2704. text directories:  DIR0 - DIR999 on default drive[\path\] (please see docs)
  2705.  
  2706. Output is via the "standard output", which is redirectable.
  2707. "
  2708.  
  2709. In processing the /g option, FWKDG.COM first searches the drives for files, and
  2710. delivers its findings via the "standard output", as indicated on the screen
  2711. illustrated above.  Then, FWKDG.COM searches through text directories DIR0 -
  2712. DIR999; this is the text directory format which I designed it to read:
  2713.  
  2714. filename.ext ............X-XX-XX[ . . . ]
  2715. ^location 00             ^location 019     (hexadecimal)
  2716.  
  2717. The FWKDG.COM program looks for X-XX-XX in each text line, where the 'X' means
  2718. that the character in that space is > ASCII 020 (decimal 32) (the 'blank space'
  2719. ' ') and is not '-'; starting at location 019 from the start of the text line,
  2720. where the first location is labeled zero (decimal 25 if the first location is
  2721. labeled position 1). If it finds that, then it takes the left 0D characters
  2722. from the text directory line, appends another blank space, and then appends the
  2723. directory name.
  2724.  
  2725. These lines created from the respective text directory(s) are appended to the
  2726. end of the sequence of lines delivered to the 'standard output'. Because an
  2727. extra blank space is inserted before the text directory's name, sorting this
  2728. output puts each filename.ext's directory entry above its  d:\path\  entry.
  2729.  
  2730. Output format after sorting:
  2731.  
  2732. filename.ext  DIRnnn
  2733. filename.ext d:\path\
  2734. .
  2735. .
  2736. The second program called by the batch program is for sorting. The name for the
  2737. external sorting program is set on the command line or in the .BAT file, and is
  2738. presently set as QSORT. QSORT is NOT included with this program: you may obtain
  2739. it from the Invention Factory electronic bulletin board, noted above
  2740.  
  2741. The name of each external_program's author, respectively, is displayed on the
  2742. screen during execution of that external program. Please remember to provide
  2743. proper reward and thanks to each author, respectively (or, in the case where
  2744. you use a different sorting program, to the author of FWKDG (that's me) and to
  2745. whichever author whose sorting program you use).
  2746.  
  2747.  
  2748. 7. FWKC17D.BAS "column 17 delete" : to delete designated files
  2749. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2750.  
  2751.         This is a special-purpose program, intended for use with a marked
  2752. version of the special file produced by FWKCS/1s when that program finds
  2753. redundant signature lines. This program reads a special annotated file called
  2754. MULTIS, looking for a lower_case "d" in column 17 (decimal). (An example of
  2755. such a specially marked copy of a MULTIS can be found in FWK-IFBB.ZIP from The
  2756. Invention Factory BBS.) If it finds the "d", then it rearranges parts of the
  2757. line to put together the drive\path\filename and then deletes that file at
  2758. that location. It makes a copy of the line it was working on, but without the
  2759. "d", and appends that edited line to a file, DELETED.LOG. (there's an example
  2760. from IFBB in FWK-IFBB.ZIP)
  2761.  
  2762. Here is an example of a work schedule for using this to remove duplicate
  2763. zipfiles:
  2764.  
  2765. 7.1  run this pipelined command line:
  2766.  
  2767.          fwkdg/l|fwkcs/1cz|qsort|fwkcs/1s >multis
  2768.  
  2769.      (See note in section 2.2 about using a pipeline filter to avoid files
  2770.      which are not available for reading.)
  2771.  
  2772. 7.2  using a word processor, put a lower-case "d" in column 17 of each line
  2773.      which lists a zipfile which you have chosen to delete.
  2774.  
  2775. 7.3  at solely your own risk, run this command line:
  2776.  
  2777.          basica fwkc17d       (or use a different BASIC, as appropriate)
  2778.  
  2779.  
  2780. 8. FWKCS/1m multiplicity report MULTCNT.RPT
  2781. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2782.  
  2783.         This is a special use of FWKCS. It produces a report of how files are
  2784. probably grouped by contents. Here is an example of such a listing:
  2785.  
  2786.  
  2787. 'matched': number of files which had the same particular contents signature
  2788. 'cases'  : number of times in which the set of matchups was that big
  2789.  
  2790. matched      cases
  2791.       2        278
  2792.       3         59
  2793.       4         16
  2794.       5         19
  2795.       6          5
  2796.       7          5
  2797.       9          1
  2798.  
  2799.  
  2800. totals:
  2801.  
  2802. signature_lines read:      3510
  2803.  
  2804.   non_unique matches:       966
  2805.  
  2806.   probably redundant:       583
  2807.  
  2808.  
  2809. 9. Listings For NULSTART.BAT, FULSTART.BAT, LISTMAKR.BAT, REVCSLST.BAT,
  2810. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2811. and KEEPMACS.BAT:
  2812. ~~~~~~~~~~~~~~~~~
  2813.  
  2814. NULSTART.BAT:
  2815. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2816. echo off
  2817. cls
  2818. if %1: == : goto message
  2819. echo - i will need FWKDG and FWKCS here where i am now
  2820. echo - (please see FWKCS109.DOC for explanation and credits)
  2821. echo -
  2822. echo - if either of these two is not set up that way, please press Control_Break
  2823. echo - and then press  y
  2824. echo -
  2825. pause
  2826. cls
  2827. fwkcs %1:\cs\cslist.ndx /d1
  2828. fwkcs %1:\cs\cslist.srt /d2
  2829. fwkcs %1:\cs\cslist1.ndx /d3
  2830. fwkcs %1:\cs\cslist1.srt /d4
  2831. cls
  2832. fwkcs /d
  2833. echo      ------
  2834. echo -
  2835. echo -     do defaults #1-4 on the right of the "=" look OK?
  2836. echo -     if not, press Ctrl_Break, then  y
  2837. pause
  2838. cls
  2839. md %1:\cs
  2840. attrib -r %1:\cs\cslist*.*
  2841. del %1:\cs\cslist*.*
  2842. copy fwkcs.com %1:\cs
  2843. copy fwkdg.com %1:\cs
  2844. %1:
  2845. cd %1:\cs
  2846. fwkcs /u
  2847. fwkcs /v
  2848. cls
  2849. dir
  2850. echo -
  2851. echo ------- Please put the copy of FWKCS which is here in this subdirectory
  2852. echo -  on your path. Its internal defaults have been set to point to the files
  2853. echo -  created in this subdirectory.....
  2854. echo ------- As a precaution, please make sure either that it is the ONLY copy
  2855. echo -  of FWKCS on your path, or that such copies come from this cloned copy
  2856. echo -  (the date and time on the program have been changed, and provide a simple
  2857. echo -  test; also, you can type "FWKCS/d<enter>" to check its defaults). For more
  2858. echo -  complicated configurations, please see FWKCS109.DOC.
  2859. echo ------- Also, be sure that FWKCS can call QSORT, PKZIP, PKUNZIP, SCAN,
  2860. echo -  and, optionally, LIST. If you wish, set a path for FWKUPLD.LOG.
  2861. echo -  (i suggest that you run CHKDSK *.*, to see if any of my files contains
  2862. echo -  non_contiguous blocks; if so, please make each of my files contiguous...)
  2863. goto end
  2864. :message
  2865. echo -
  2866. echo -  i need to have a single letter, without ":", for the drive
  2867. echo -  where you want me to set up my system...
  2868. echo -
  2869. :end
  2870. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876. FULSTART.BAT:
  2877. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2878. echo off
  2879. cls
  2880. if %1: == : goto message
  2881. echo - i will need QSORT available on your path to use for this, and
  2882. echo - FWKDG and FWKCS here where i am now
  2883. echo - (please see FWKCS109.DOC for explanation and credits)
  2884. echo -
  2885. echo -  if any of these four is not set up that way, please press Control_Break
  2886. echo -  and then press  y
  2887. echo -
  2888. pause
  2889. cls
  2890. fwkcs %1:\cs\cslist.ndx /d1
  2891. fwkcs %1:\cs\cslist.srt /d2
  2892. fwkcs %1:\cs\cslist1.ndx /d3
  2893. fwkcs %1:\cs\cslist1.srt /d4
  2894. cls
  2895. fwkcs /d
  2896. echo      ------
  2897. echo -
  2898. echo -     do defaults #1-4 on the right of the "=" look OK?
  2899. echo -     if not, press Ctrl_Break, then  y
  2900. pause
  2901. cls
  2902. md %1:\cs
  2903. attrib -r %1:\cs\cslist*.*
  2904. del %1:\cs\cslist*.*
  2905. copy fwkcs.com %1:\cs
  2906. copy fwkdg.com %1:\cs
  2907. %1:
  2908. cd %1:\cs
  2909. fwkdg /l | fwkcs /1cfpxz | qsort > %1:\cs\cslist.srt
  2910. fwkcs %1:\cs\cslist.ndx %1:\cs\cslist.srt /i
  2911. fwkcs /u
  2912. fwkcs /v
  2913. cls
  2914. dir
  2915. echo -
  2916. echo ------- Please put the copy of FWKCS which is here in this subdirectory
  2917. echo -  on your path. Its internal defaults have been set to point to the files
  2918. echo -  created in this subdirectory.....
  2919. echo ------- As a precaution, please make sure either that it is the ONLY copy
  2920. echo -  of FWKCS on your path, or that such copies come from this cloned copy
  2921. echo -  (the date and time on the program have been changed, and provide a simple
  2922. echo -  test; also, you can type "FWKCS/d<enter>" to check its defaults). For more
  2923. echo -  complicated configurations, please see FWKCS109.DOC.
  2924. echo ------- Also, be sure that FWKCS can call QSORT, PKZIP, PKUNZIP, SCAN,
  2925. echo -  and, optionally, LIST. If you wish, set a path for FWKUPLD.LOG.
  2926. echo -  (i suggest that you run CHKDSK *.*, to see if any of my files contains
  2927. echo -  non_contiguous blocks; if so, please make each of my files contiguous...)
  2928. goto end
  2929. :message
  2930. echo -
  2931. echo -  i need to have a single letter, without ":", for the drive
  2932. echo -  where you want me to set up my system...
  2933. echo -
  2934. :end
  2935. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2936.  
  2937.  
  2938.  
  2939. LISTMAKR.BAT:
  2940. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2941. @echo off
  2942. rem For use with FWKCS(TM) Ver. 1.09.
  2943. rem LISTMAKR to make master contents_signatures list.
  2944. md c:\cs
  2945. attrib -r c:\cs\cslist*.*
  2946. del c:\cs\cslist*.*
  2947. fwkdg /l | find ".ZIP" | fwkcs /1cfxz | qsort > c:\cs\cslist.srt
  2948. fwkcs c:\cs\cslist.ndx c:\cs\cslist.srt /i
  2949. attrib +r c:\cs\cslist*.*
  2950. fwkcs /u
  2951. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2952.  
  2953.  
  2954.  
  2955.  
  2956. REVCSLST.BAT:
  2957. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2958. @echo off
  2959. rem For use with FWKCS(TM) Ver. 1.09.
  2960. rem
  2961. echo  This .BAT program is for making new CSLIST.SRT and CSLIST1.SRT, and
  2962. echo  carrying forward into the new cslist.srt each unique contents_signature
  2963. echo  which appeared in either of the two old cslists but was not found in
  2964. echo  newly searching the zipfiles; because the zipfile containing such
  2965. echo  contents_signature was not currently found, the information about
  2966. echo  drive\path is not carried into the new cslist.
  2967. echo on
  2968. if not exist c:\cs\cslist.srt goto end
  2969. fwkcs /v
  2970. attrib -r c:\cs\cslist*.*
  2971. del c:\cs\cslist1.srt
  2972. ren c:\cs\cslist.srt cslist1.srt
  2973. fwkdg /l | find ".ZIP" | fwkcs /1cfxz | qsort > c:\cs\cslist.srt
  2974. fwkcs /vs
  2975. :end
  2976. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2977.  
  2978.  
  2979. KEEPMACS.BAT
  2980. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  2981. @echo off
  2982. echo KEEPMACS.BAT, for use in upgrading from
  2983. echo FWKCS.COM version 1.06 - 1.08 to version 1.09.
  2984. echo -
  2985. echo To install old macros on new FWKCS.COM,
  2986. echo put this .BAT and the new FWKCS.COM in
  2987. echo a subdirectory, with access via PATH to
  2988. echo the old FWKCS.COM from which to get the
  2989. echo macros.
  2990. echo -
  2991. echo if your system is not set up that way,
  2992. echo   to exit, press Ctrl-Break, and then type Y.
  2993. pause
  2994. ren FWKCS.COM *.NEW
  2995. FWKCS [b] [-macrob##.tmp]
  2996. FWKCS [c] [-macroc##.tmp]
  2997. FWKCS [d] [-macrod##.tmp]
  2998. FWKCS [e] [-macroe##.tmp]
  2999. ren FWKCS.NEW *.COM
  3000. FWKCS [+macrob##.tmp] /db
  3001. FWKCS [+macroc##.tmp] /dc
  3002. FWKCS [+macrod##.tmp] /dd
  3003. FWKCS [+macroe##.tmp] /de
  3004. del macro?##.tmp
  3005. FWKCS /d
  3006. echo      -
  3007. echo please look at the path settings, and set them appropriately.
  3008. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  3009.  
  3010.  
  3011.  
  3012. 10. Cleaning up text directories
  3013. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3014.  
  3015. After you have removed hundreds of duplicate files from your disc, what do you
  3016. do with the entries in the text directories?  When Michael Sussell converted
  3017. The Invention Factory BBS to ZIP format, and ran an early form of the FWKCS
  3018. contents_signature system, he had that problem. I wrote a program in BASIC to
  3019. help with that chore. The reason why I had not made it available before now,
  3020. is that I do not know how hard or easy it will be for other people to use.
  3021.  
  3022. 10.1 FWKTDR19.BAS
  3023. ~~~~~~~~~~~~~~~~~
  3024.  
  3025. This is in interpretive BASIC. It is spread out and annotated, so that it
  3026. serves as its own documentation. Questions may be left for me on the SmartNet
  3027. SYSOPS conference or the Ilink SYSOPS conference.
  3028.  
  3029. It works with text directories named DIRnnn, where nnn are decimal digits. All
  3030. but the uploads directory are single_line_per_entry files in alphabetical
  3031. order; the uploads directory, DIR99, is not required to be in alphabetical
  3032. order.
  3033.  
  3034. This .BAS program is supposed to be run in the same subdirectory that contains
  3035. the text directories.
  3036.  
  3037. It calls QSORT, may call DSA, and calls FWKDG. In order to work with a
  3038. complicated system, it shells out to call a .BAT program named MAKEDIRG.BAT in
  3039. order to make a new copy of DIRGUIDE.TXT, as its last step just before it
  3040. exits to the system.  That subroutine is called from line 2110; the line that
  3041. does the SHELL command is 2730.  If this poses a problem, you can put an
  3042. apostrophe (') immediately after the line number in line 2110, to turn that
  3043. line into a non-executing comment.
  3044.  
  3045.  
  3046. 10.2 DSA.COM
  3047. ~~~~~~~~~~~~
  3048.  
  3049. This is an assembly_language "pipeline filter", Directory Spacing Adjust.
  3050. It reads from the "standard input" and writes to the "standard output", both
  3051. of which are redirectable. It adjusts the spacing and punctuation of the
  3052. filename and extension in a listing made by the DOS DIR command.
  3053.  
  3054. For example, type
  3055.  
  3056.                               DIR | DSA <enter>
  3057.  
  3058. in a directory which has several entries, and see what it sends to the screen.
  3059.  
  3060. -------------------------------------------------------------------------------
  3061.