home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / f / finrep21.lbr / FINREP.DZC / FINREP.DOC
Encoding:
Text File  |  1993-10-26  |  13.0 KB  |  285 lines

  1. ;;07-02-85
  2.                      FINREP.DOC  Version 2.1
  3.                             07/15/85
  4.  
  5. Eric Gans
  6. French Department, UCLA
  7. Los Angeles, CA 90024
  8.  
  9. Version 2.1
  10. Fixed bug that treated wildcard filetypes as single files.  Added 
  11. a couple of clarifications to DOC file.
  12.  
  13. Version 2.0:
  14. Allows wildcard searches (various options),  wildcard  filetypes. 
  15. Easier entry of caps (!string!  instead of !s!t!r!i!n!g).  Allows 
  16. control characters other than letters (e.g., ^[,^@).
  17.  
  18. Version 1.1:
  19. Fix:  Didn't  find a string immediately following a found string.  
  20. Failed to signal bad file write.
  21. Enhancements:  Allows wildcard filenames (NOT filetypes).  Better 
  22. error  checking.    Abort  from  console  with  <ESC>.    A   few 
  23. clarifications in the DOC file.
  24.  
  25.                               *****
  26.  
  27.      FINREP is a search/replace program that remedies most of the
  28. deficiencies of Wordstar's ^QA and other similar commands.  Aside
  29. from being faster, it has important additional features:
  30.  
  31.      - allows wildcards in search string (v2.0)
  32.      - allows wildcard filename (find/replace in groups of files)
  33.      - command-line entry allows batch processing by SUBMIT, etc.
  34.      - allows entry of control or hex characters (0-FF)
  35.      - can be used with object files (e.g., COM files)
  36.      - sets  capitalization (first letter or whole word) and high
  37.        bit of the last character according to the old string
  38.  
  39. This last feature means that,  for example,  if you are writing a 
  40. scenario where the characters' names appear sometimes in CAPS and 
  41. sometimes just Capitalized, you don't need two search/replaces to 
  42. replace one name with another: JOE will be replaced by HARRY, Joe 
  43. by Harry, and even joe by harry.  
  44.  
  45.                               *****
  46.  
  47. Format: finrep [d:]fn [newfn] /[switches]/ oldstring [newstring]
  48.  
  49. (Enter "finrep" alone for a brief command summary.)
  50.  
  51. If a second filename is given, the changes will be placed in that
  52. file;  if  not,  the  old filename will hold the changes and  the
  53. original  file will be changed from fn.ft to fn.BAK  (unless  the
  54. "B" switch is used).
  55.  
  56. Wildcards  (*,?) may be used anywhere in the filename;  if  there 
  57. are  wildcards in the filetype (after the ".") the B switch  must 
  58. be  used  to suppress creation of BAK files.   If  wildcards  are 
  59. used, a second filename cannot be entered.  If you enter:
  60.  
  61. A>finrep urk*.doc // "blurk" "zap"
  62.  
  63. the files urk01.doc,  urk33.doc,  urktty.doc would be modified as 
  64. expected and files urk01.bak, urk33.bak etc. would be created.
  65.  
  66. The characters "//" must be entered even if no switches are used.
  67.  
  68. The switches are as follows:
  69.  
  70. B  =  no BAK file.  This switch disables making a BAK  file;  the 
  71. original  file  will be lost.  (Use only if you did not  enter  a 
  72. second filename.)
  73.  
  74. Q = allow wildcards in search string. (The program runs faster if 
  75. this  switch is not used.)  The various options for this  command 
  76. are described below.
  77.  
  78. O = Object file.  If this switch is used, the program will ignore 
  79. end-of-file  markers (1AH),  as in PIP's "o"  command.   Use  for 
  80. search/replace in non-text files.   WARNING: if you don't use "O" 
  81. with  a  non-text  file it will be cut off after the  first  1AH. 
  82. That's why FINREP makes BAK files!
  83.  
  84. H  =  keep High bit.  With this switch,  all bytes  are  searched 
  85. exactly  as they are;  letters with the high bit set will not  be 
  86. identified  with their standard ASCII  counterparts.  
  87.  
  88. W = no Whole-word search.  This switch is used to search a string 
  89. whether  or not it is a whole word;  with it,  a search for "the" 
  90. will find "other", "their" etc.
  91.  
  92. NB  - The  program  defines a "word"  as  anything  preceded  and 
  93. followed  by  something other than a letter  (space,  punctuation 
  94. mark,  number, control character, beginning or end of file). Thus 
  95. this  switch  is not needed if the search string is a  series  of 
  96. words,  a  word  preceded  by a control  character  that  is  not 
  97. continguous to another word, etc.
  98.  
  99. C  = respect case.  This switch allows you to distinguish capital 
  100. from lower-case letters: in a search for "the", "The" will not be 
  101. found/replaced.  (NB: Upper case letters cannot be entered within 
  102. quotes; see below.)
  103.  
  104.  
  105. In normal operation (with no switches),  the search will  include 
  106. whole words only; it will ignore case and high bits, but will set 
  107. the  new  string  to  correspond  to the  old  in  this  respect, 
  108. capitalizing the first letter or the whole string and setting the 
  109. high  bit  of the last as required.  This last  feature  is  only 
  110. useful if the replacement string is one word long; if it contains 
  111. more than one word,  you may set the high bits when you enter the 
  112. string,  or let your word-processor (e.g. Wordstar) do it. If you 
  113. include  capitals  in  your  replacement  string,  they  will  be 
  114. respected even if the find string is not capitalized.
  115.  
  116. NB:  If  you want to search for a capitalized word,  you must use 
  117. the "C" switch (or the "H" or "O" switch);  FINREP will give  you 
  118. an error message if you don't. 
  119.  
  120. The last four switches are in the relation O > H > C       
  121.                                                  > W  ; 
  122. the "higher" switch includes the smaller.  Thus if the "H" switch 
  123. is used,  capitals and lower case will be distinguished,  and the 
  124. search will not be limited to whole words.
  125.  
  126. *****************************************************************
  127.  
  128. String entry:
  129.  
  130. The  find  and replace strings must be separated by a space  from 
  131. the switch entry and from each other.  Strings should be  entered 
  132. as follows:
  133.  
  134. ASCII   - in quotes: "blurk", "54%**90er @"
  135.  
  136. The following characters must NOT be placed between quotes:
  137.  
  138. HEX   - separate by commas: d,1A,cd,10,ff,3 
  139. CAPITALS  - between !!: !A!,!hello!          [NEW IN V2.0] 
  140. CONTROL CHARACTERS - preceded by ^: ^M,^m^j,^c,^C,^[,^^
  141. WILDCARDS - ????, ?n (1 <= n <= 9) or ?* (indeterminate)
  142.      The  "|" character is used to display a break in the replace 
  143. string (see below).
  144.  
  145. NB:  All  ascii letters entered within quotes will be treated  as 
  146. LOWER CASE. If you want to search upper case letters with the "C" 
  147. switch,  or to put upper case letters in the replace string,  you 
  148. must  surround  them  with "!!",  unless you enter  them  as  hex 
  149. characters:  (A = 41, B = 42 ...). Sorry about this, but the CP/M 
  150. command line cannot distinguish upper from lower case.
  151.  
  152. Any  combination  of characters is  valid;  for  clarity,  groups 
  153. should  be separated by commas,  although this is only  necessary 
  154. for individual hex characters: !h!"ello",^m^j,e5,?7,32,!blurk!,^q 
  155. Quotes and !..!  must be closed.  To search/replace the quotation 
  156. mark,  enter it as a hex character ("=22h).   You can search  for 
  157. "!" if you keep it between quotes.
  158.  
  159. The  length  of the find/replace strings is limited to 30  bytes; 
  160. this  length  applies to the strings themselves and  not  to  the 
  161. keyboard entry,  which cannot exceed 127 bytes in all (blame CP/M 
  162. for  this).  Thus  ^j,cd,ff,3d is 4 bytes long.   In the case  of 
  163. indeterminate  wildcards,  up to 255 bytes are allowed,  but  the 
  164. limit of 30 still stands for the find/replace strings themselves.
  165.  
  166. If  you do not enter a replace string,  the  searched-for  string 
  167. will be replaced by nothing, i.e., deleted.
  168.  
  169. WILDCARDS (V2.0)
  170. The wildcard search has a great deal of flexibility.  For obvious 
  171. reasons,  wildcards cannot appear at either the beginning or  the 
  172. end of the search string.  The options are as follows:
  173.  
  174. 1. Simple wildcard search: all bytes of the search string will be 
  175. replaced.
  176.  
  177. finrep  zz.txt  /q/ "d"?2"e" "xxyz" will replace all  words  like 
  178. "done", "dare", "dove" etc. by "xxyz"  A maximum of four wildcard 
  179. groups are allowed in this form: thus "a"?"cd"?4"ijk"??"nopq"?"s" 
  180. is a permissible search string
  181.  
  182. 2.  Simple wildcard search with break. Only one wildcard group is 
  183. allowed;  the  replace string is divided in two,  with the  first 
  184. part  replacing  what precedes the wildcards and the second  what 
  185. follows;  the  intermediate bytes are left alone.   The break CAN 
  186. appear at the beginning or end of the replace string to  indicate 
  187. that  the corresponding part of the find string is to be deleted.  
  188. A blank replace string (entered simply as: | ) will delete both.
  189.  
  190. finrep  xx.txt /qw/ "d"?2"e" "xx"|"yzz" will replace the  "d"  in 
  191. this  pattern  with "xx" and the "e" with "yzz";  "done"  becomes 
  192. "xxonyyz", "madame" -> "maxxamyxx", etc.  (This last example only 
  193. works if the "W" switch is used.)
  194.  
  195. 3.  Indeterminate  wildcard  search/replace.   The  indeterminate 
  196. wildcard "?*" must be the only wildcard in the search string.  In 
  197. this  option  the  whole  string from the  beginning  to  end  is 
  198. replaced.   A  maximum of 255 characters will be allowed  in  the 
  199. search string; longer strings will not be found.
  200.  
  201. finrep  blurk.let  /qw/  "xy"?*"zq" "garbage"  will  replace  all 
  202. strings   beginning  and  ending  with  the  indicated   letters: 
  203. "xyrwerwerzq",  "xyuu  is  the nbrzq",  "xy ^C^Yzq" will  all  be 
  204. replaced by "garbage"
  205.  
  206. 4.  Indeterminate  wildcard with break.  This is a very  powerful 
  207. option  that  allows you,  for example to  replace  PerfectWriter 
  208. "fences"  with  WordStar control toggles (&  vice  versa).   Here 
  209. again  only one wildcard group is allowed in the  search  string; 
  210. the intermediate bytes are left unchanged.
  211.  
  212. finrep   zap.kkk   /qw/   "123"?*"45"  "6"|"789"   will   replace 
  213. "zz123blurk blurk xxxc oo45rr" by "zz6blurk blurk xxxc oo789rr";
  214. finrep  perf.wri /qwc/ "@"!ux!"{"?*"}" ^s|^s will replace the  PW 
  215. underline fence @UX{ ...  } by WS's ^S ...  ^S  Note that the "C" 
  216. flag is used here to search for caps; if l.c. as well as caps are 
  217. acceptable,  it  could be omitted and the search  string  written 
  218. "@ux{"?*"}".   You  can delete the fences altogether by replacing 
  219. the ^s|^s by | in the last example.
  220.  
  221. One  user thought the word "break" was misleading and  should  be 
  222. replaced  by  "save," since the "|" in the replace  string  means 
  223. that  you  preserve the wildcard part of the  search  string.  In 
  224. other words:  finrep zap.txt /qw/ "<<"?*">>" will kill everything 
  225. between  the "<<..>>" whereas:  finrep zap.txt /qw/ "<<"?*">>"  | 
  226. will just kill the "<<>>" and "save" their contents.  
  227.  
  228. FINREP  can be aborted at any time by typing <ESC> (=1B  HEX).  I 
  229. preferred this to ^C since an extra ^C will be read by CP/M as  a 
  230. Warm Boot.
  231.  
  232. The only screen output is the number of strings replaced and,  if 
  233. you  use wildcards,  the names & total number of files processed.  
  234. If  you want to see the replacement procedure in  action,  use  a 
  235. word-processor!
  236.  
  237. Notes:
  238.  
  239. 1.  FINREP  will modify files of any length;  it uses the  entire 
  240. memory  below the CCP as its buffer,  and writes to disk whenever 
  241. the  buffer  fills up.  Since it doesn't overwrite  the  CCP,  it 
  242. doesn't have to end with a Warm Boot.
  243.  
  244. 2.  There  is no intrinsic limit on the number of  files  allowed 
  245. under the wildcard filename option;  for sanity's sake,  you will 
  246. get an error message if there are more than 255.
  247.  
  248. 3.  If  you want to create a version of FINREP with some  of  the 
  249. switches preset,  run the program without a filename:      finrep 
  250. /[sw1][sw2]../  After  it  returns to the CP/M  prompt,  save  11
  251. finrep1.com  will  keep  the switches  as  you  like  them.  This 
  252. procedure  is  NOT  REVERSIBLE,  so  keep  your  original  FINREP 
  253. unchanged.
  254.  
  255. 4.  In deciding whether to capitalize a whole word/string, FINREP 
  256. looks  at the first two letters.  If the find string has only one 
  257. letter,  only the first letter of the replacement string will  be 
  258. capitalized.   If   the   word  to  be   replaced   has   unusual 
  259. captalization (e.g.  BBrrOOOmm),  use the "C" switch and/or enter 
  260. separate replacement strings for different variants.
  261.  
  262. 5.   In using indeterminate wildcards, you should usually use the 
  263. "W"  switch,  since  without it BOTH HALVES of the search  string 
  264. must  begin and end on word boundaries.   This is only likely  if 
  265. you are replacing whole words.
  266.  
  267. 6.  Re  speed,  FINREP  is  somewhat faster than  Wordstar's  ^QA 
  268. command.  But  if all you want to do is replace a string,  it  is 
  269. over  three  times faster,  since its time includes  loading  and 
  270. saving the file.  Measured on a long (84 K) file,  FINREP took 27 
  271. seconds and WS 34 for a typical search/replace.  But WS needs  at 
  272. least  10 seconds to load and a good minute to save the file  and 
  273. exit.  With a little practice, the command line can be entered as 
  274. fast  as  WS's,  and  it  can  be included  in  SUBMIT  files  or 
  275. reproduced by programs like SYNONYM or my SYN.COM.
  276.  
  277.                               *****
  278.  
  279. FINREP  was  written  at the request of  John-Mark  Stensvaag  of 
  280. Vanderbilt University.   At first I couldn't see the use for  it, 
  281. but  he  convinced me (he is a professor of  Law).  The  wildcard 
  282. features  added  in v1.1 and v2.0 were also his  idea.   I  would 
  283. appreciate  hearing  from you about (a) bugs and (b)  suggestions 
  284. for further enhancements.
  285.