home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / PROGRAMS / SPELL / SPELL20.DOC < prev    next >
Text File  |  2000-06-30  |  19KB  |  428 lines

  1.  
  2.  
  3.  
  4.                     SPELL V2.0 DOCUMENTATION
  5.                         Michael C. Adler
  6.                        December 22, 1982
  7.  
  8.     (C) 1982 Michael C. Adler
  9.     This  program  has been released into the public domain  by 
  10.     the author.  It may neither be sold for profit nor included 
  11.     in  a  sold  software package  without  permission  of  the 
  12.     author.
  13.  
  14.     The  first SPELL using this dictionary was probably written 
  15.     by Ralph Gorin at Stanford.   It was transported to MIT  by 
  16.     Wayne Mattson.   Both the program at MIT and the dictionary 
  17.     were  most  recently  revised by William Ackerman  at  MIT.  
  18.     Section 5 of this document was copied from portions of  Mr. 
  19.     Ackerman's documentation.
  20.  
  21.           Thanks to all for the effort spent designing the
  22.           dictionary!
  23.  
  24.      Spell is a program, written for Z80 processors running CP/M, 
  25. designed to detect misspellings in a document.
  26.  
  27. 1.  USING SPELL
  28.  
  29.      The  minimum  configuration  of  SPELL  requires  the  files 
  30. SPELL.COM  and  DICT.DIC (the main dictionary).   At the time  of 
  31. execution,  DICT.DIC must be on either the default drive or drive 
  32. A:.
  33.  
  34.      The name of the file to be corrected must be included on the 
  35. command  line that is used to invoke spell.   If a drive name  is 
  36. specified as a second file name, output is directed to the speci-
  37. fied drive.  Thus,
  38.  
  39.                SPELL useless.doc
  40.  
  41. will  check  the  file  "useless.doc" and direct  output  to  the 
  42. default drive and
  43.  
  44.                SPELL b:useless.doc c:
  45.  
  46. will check the file "b:useless.doc" and direct output to disk c.
  47.  
  48.      Spell will check the input file for errors by comparing each 
  49. word in the file to the dictionary.   If a word is not  found,  a 
  50. null (ascii 0) is placed before the word.  To change this marking 
  51. character,  see section 4,  PATCHING SPELL.   If a backup version 
  52. (.BAK  file type) of the input file exists,  it will be  deleted.  
  53. The  input file will be renamed to a backup file and the  checked 
  54. file will replace the input file.
  55.  
  56. 2.  USER DICTIONARIES
  57.  
  58.      A  user  dictionary is a list of correct words that  can  be 
  59.  
  60.  
  61.                                 1
  62.  
  63.  
  64.  
  65. loaded  by SPELL to augment the main dictionary.   Words such  as 
  66. proper  nouns can be placed in user dictionaries to inhibit error 
  67. marking.   User dictionary files may be formatted in any way that 
  68. the user desires,  as long as words are delimited by non-alphabe-
  69. tic characters.
  70.  
  71.      SPELL  will  automatically  search for the  user  dictionary 
  72. SPELL.DIC  on the default drive and on drive A:  if it is not  on 
  73. the default one.   It's contents are then loaded and  temporarily 
  74. added to the dictionary.   It must be loaded again to be included 
  75. in subsequent executions of SPELL.
  76.  
  77.      SPELL  will also automatically search for d:file.UDC,  where 
  78. file is the name of the file being corrected and d:  is the drive 
  79. on which file is found.   If found,  it is also loaded and tempo-
  80. rarily augments the dictionary.   Thus, users may create separate 
  81. dictionaries for each text file being corrected.   After locating 
  82. d:file.UDC,  SPELL  will search file d:file.ADD.   This  file  is 
  83. created  by WordStar's ^QL command (see section 3) and is not  an 
  84. ASCII  file.   d:file.ADD contains commands generated by WordStar 
  85. to include specific words in the user dictionary associated  with 
  86. d:file.   SPELL  will temporarily place all of the words in it in 
  87. the dictionary and will also save the words by copying them  into 
  88. d:file.UDC.
  89.  
  90.      It  is  possible  to load additional  user  dictionaries  by 
  91. specifying them on the SPELL command line.   A list of user  dic-
  92. tionaries  must  be preceded by a dollar sign.   A dictionary  is 
  93. specified by a file name and an optional drive name.  If no drive 
  94. is specified,  the default drive is searched and then drive A: is 
  95. checked.  Extensions are ignored and default to .DIC.  Hence, the 
  96. the command line:
  97.  
  98.      SPELL useless.doc b: $dict1 c:dict2 dict3.fun
  99.  
  100. would  correct useless.doc and direct output to drive  B:.   User 
  101. dictionary  DICT1.DIC  would be loaded from the default drive  or 
  102. drive  A:,   dictionary DICT2.DIC would be loaded from drive  C:, 
  103. and DICT3.DIC would be loaded from the default drive or drive A:.  
  104. Notice that the extension .fun was ignored.
  105.  
  106. 3.  WordStar's ^QL COMMAND
  107.  
  108.      Files checked by SPELL can be corrected using WordStar.   In 
  109. response  to ^QL,  the user is asked which portions of  the  file 
  110. should  be searched.   WordStar will then position the cursor  on 
  111. the  first marked word and print a menu offering F (Fix word),  B 
  112. (Bypass word), I (Ignore word), D (Add to dictionary), and S (Add 
  113. to  supplemental  dictionary).   The F option deletes  the  error 
  114. marker and returns to the WordStar main menu,  allowing the  user 
  115. to  correct  the  word.   B will leave the word marker  and  will 
  116. search for the next misspelled word.   In this implementation  of 
  117. SPELL,  the  I,  D  and S options all perform the  same  function 
  118. (although  I  is  easier to use because no question is  asked  by 
  119. WordStar).   If either of these options (I, D, S) are chosen, the 
  120.  
  121.  
  122.                                 2
  123.  
  124.  
  125.  
  126. mark  will  be removed and the word will be  added  to  file.ADD.  
  127. Thus,  choosing these options informs SPELL that the word is cor-
  128. rect and should not be marked again.   The D and S options do not 
  129. add  the word to SPELL's main dictionary because the  compression 
  130. method  used to store the dictionary is too complicated to  allow 
  131. such modification efficiently.  After choosing all of the options 
  132. except F,  WordStar will automatically search for the next marked 
  133. word.
  134.  
  135. 4.  PATCHING SPELL
  136.  
  137.      It is not necessary to recompile SPELL to change the charac-
  138. ter that marks misspelled words.   The byte at 0800H contains the 
  139. marking character.   In the distribution version of SPELL,  it is 
  140. null,  or 0.  DDT or another debugger can be used to change 0800H 
  141. to the ASCII value of the desired marker.
  142.  
  143. 5.  PROGRAM AND DICTIONARY CHARACTERISTICS
  144.  
  145. 5.1 Word identification algorithm
  146.  
  147.      A   word  is  any  uninterrupted  sequence  of  letters  and 
  148. apostrophes,  which  does not begin or end with  an   apostrophe.    
  149. Any  punctuation,   digit,  or control character separates words.    
  150. Any  word consisting of a single  letter,   or any word more than 
  151. 40 letters long, is considered to be correctly spelled.
  152.  
  153. 5.2  Dictionary policy
  154.  
  155.      It   is   the  policy  of this program to contain  only  one 
  156. spelling of a word,   even  if  ordinary  dictionaries  show  two  
  157. or   more   "acceptable"  spellings.    Hence,   the   dictionary 
  158. contains  LABELED  and LABELING,  but not LABELLED or  LABELLING, 
  159. even  though all four are actually acceptable.     The  intention  
  160. is  to  enforce  uniformity  within  each  document.   The author 
  161. apologizes  for the  restriction  on  creativity  and   diversity  
  162. that  this necessitates,  but believes that it is the best policy 
  163. for this program.
  164.  
  165.      The   dictionary   contains  many  technical   and  computer 
  166. terms  such as MICROPROGRAM and DEBUGGER,  but does  not  contain 
  167. extreme  jargon   words  such as  CONTROLIFY  or   VALRET.    The 
  168. dictionary contains no proper names other than names of countries 
  169. and  states  of the United States.     The  reason  is  that   it  
  170. would  be virtually impossible to contain all of the proper names 
  171. that  commonly arise in normal use.   Users should  keep   proper  
  172. names   (and  other  correctly  spelled  words)  that   arise  in 
  173. their own work in private dictionaries to avoid having to repeat-
  174. edly tell SPELL to accept them.
  175.  
  176.      The dictionary is significantly  smaller  than  that   found  
  177. in  other spelling  checkers,   such  as the DEC TOPS-20 program.  
  178. The  author believes that the larger dictionary would not  reduce 
  179. the number of false misspelling indications by very much.
  180.  
  181.  
  182.  
  183.                                 3
  184.  
  185.  
  186.  
  187. [Note:   I  believe that this dictionary is actually MUCH  larger 
  188. than  any dictionaries currently available for microcomputers.
  189. -Michael]
  190.  
  191. 5.3  Dictionary flags
  192.  
  193.      Words  in SPELL's main dictionary (but not the other dictio-
  194. naries)  may have flags associated with  them  to  indicate   the  
  195. legality   of   suffixes  without  the  need  to  keep  the  full 
  196. suffixed words in the dictionary.  The flags have "names" consis-
  197. ting of single  letters.    Their  meaning  is  as follows:
  198.  
  199. Let   #  and  @  be  "variables"  that can stand for any  letter.  
  200. Upper  case  letters  are constants.   "..."   stands   for   any  
  201. string   of  zero  or  more letters,   but note that no word  may 
  202. exist in the dictionary which is not at least 2 letters long, so, 
  203. for example,  FLY may not be produced  by  placing the  "Y"  flag  
  204. on  "F".   Also,  no  flag is effective unless the word  that  it 
  205. creates is at least 4 letters  long,   so,   for   example,   WED  
  206. may  not  be produced by placing the "D" flag on "WE".
  207.  
  208. "V" flag:
  209.         ...E --> ...IVE  as in CREATE --> CREATIVE
  210.         if # .ne. E, ...# --> ...#IVE  as in PREVENT --> PREVENTIVE
  211.  
  212. "N" flag:
  213.         ...E --> ...ION  as in CREATE --> CREATION
  214.         ...Y --> ...ICATION  as in MULTIPLY --> MULTIPLICATION
  215.         if # .ne. E or Y, ...# --> ...#EN  as in FALL --> FALLEN
  216.  
  217. "X" flag:
  218.         ...E --> ...IONS  as in CREATE --> CREATIONS
  219.         ...Y --> ...ICATIONS  as in MULTIPLY --> MULTIPLICATIONS
  220.         if # .ne. E or Y, ...# --> ...#ENS  as in WEAK --> WEAKENS
  221.  
  222. "H" flag:
  223.         ...Y --> ...IETH  as in TWENTY --> TWENTIETH
  224.         if # .ne. Y, ...# --> ...#TH  as in HUNDRED --> HUNDREDTH
  225.  
  226. "Y" FLAG:
  227.         ... --> ...LY  as in QUICK --> QUICKLY
  228.  
  229. "G" FLAG:
  230.         ...E --> ...ING  as in FILE --> FILING
  231.         if # .ne. E, ...# --> ...#ING  as in CROSS --> CROSSING
  232.  
  233. "J" FLAG"
  234.         ...E --> ...INGS  as in FILE --> FILINGS
  235.         if # .ne. E, ...# --> ...#INGS  as in CROSS --> CROSSINGS
  236.  
  237. "D" FLAG:
  238.         ...E --> ...ED  as in CREATE --> CREATED
  239.         if @ .ne. A, E, I, O, or U,
  240.                 ...@Y --> ...@IED  as in IMPLY --> IMPLIED
  241.         if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U)
  242.  
  243.  
  244.                                 4
  245.  
  246.  
  247.  
  248.                 ...@# --> ...@#ED  as in CROSS --> CROSSED
  249.                                 or CONVEY --> CONVEYED
  250.  
  251. "T" FLAG:
  252.         ...E --> ...EST  as in LATE --> LATEST
  253.         if @ .ne. A, E, I, O, or U,
  254.                 ...@Y --> ...@IEST  as in DIRTY --> DIRTIEST
  255.         if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U)
  256.                 ...@# --> ...@#EST  as in SMALL --> SMALLEST
  257.                                 or GRAY --> GRAYEST
  258.  
  259. "R" FLAG:
  260.         ...E --> ...ER  as in SKATE --> SKATER
  261.         if @ .ne. A, E, I, O, or U,
  262.                 ...@Y --> ...@IER  as in MULTIPLY --> MULTIPLIER
  263.         if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U)
  264.                 ...@# --> ...@#ER  as in BUILD --> BUILDER
  265.                                 or CONVEY --> CONVEYER
  266.  
  267. "Z FLAG:
  268.         ...E --> ...ERS  as in SKATE --> SKATERS
  269.         if @ .ne. A, E, I, O, or U,
  270.                 ...@Y --> ...@IERS  as in MULTIPLY --> MULTIPLIERS
  271.         if # .ne. E or Y, or (# = Y and @ = A, E, I, O, or U)
  272.                 ...@# --> ...@#ERS  as in BUILD --> BUILDERS
  273.                                 or SLAY --> SLAYERS
  274.  
  275. "S" FLAG:
  276.         if @ .ne. A, E, I, O, or U,
  277.                 ...@Y --> ...@IES  as in IMPLY --> IMPLIES
  278.         if # .eq. S, X, Z, or H,
  279.                 ...# --> ...#ES  as in FIX --> FIXES
  280.         if # .ne. S, X, Z, H, or Y, or (# = Y and @ = A, E, I, O, or U)
  281.                 ...# --> ...#S  as in BAT --> BATS
  282.                                 or CONVEY --> CONVEYS
  283.  
  284. "P" FLAG:
  285.         if @ .ne. A, E, I, O, or U,
  286.                 ...@Y --> ...@INESS  as in CLOUDY --> CLOUDINESS
  287.         if # .ne. Y, or @ = A, E, I, O, or U,
  288.                 ...@# --> ...@#NESS  as in LATE --> LATENESS
  289.                                 or GRAY --> GRAYNESS
  290.  
  291. "M" FLAG:
  292.         ... --> ...'S  as in DOG --> DOG'S
  293.  
  294. Note:    The  existence of a flag on a root word in the directory 
  295. is  not  by  itself sufficient to cause SPELL  to  recognize  the  
  296. indicated   word   ending.   If there is more than one  root  for 
  297. which a flag will indicate a given word,  only  one  of the roots 
  298. is the correct one for which the flag is effective;  generally it 
  299. is  the longest root.   For example,  the "D" rule  implies  that 
  300. either PASS or PASSE,  with a "D" flag,  will yield PASSED.   The 
  301. flag must be on  PASSE;  it  will  be  ineffective on PASS.  This 
  302. is  because,  when SPELL encounters the word PASSED and fails  to  
  303.  
  304.  
  305.                                 5
  306.  
  307.  
  308.  
  309. find  it  in  its  dictionary,   it strips off the "D" and  looks 
  310. up  PASSE.   Upon finding PASSE,  it then accepts PASSED  if  and  
  311. only if PASSE has the "D" flag.  Only if the word PASSE is not in 
  312. the  main dictionary at all does the program strip off  the   "E"  
  313. and search  for PASS.   Furthermore,  some combinations of  flags 
  314. are  forbidden  to allow for dense flag encoding to  save  space.  
  315. For example, only one of  the "P", "J", or "V" flags may be on in 
  316. any one word.
  317.  
  318. 6.  SPELL INTERNALS
  319.  
  320.      SPELL  uses  a number of temporary files  during  execution.  
  321. The file file.D$$ is the union of file.UDC and file.ADD.   At the 
  322. end of execution,  file.UDC and file.ADD are deleted and file.D$$ 
  323. is  renamed to file.UDC.   The file file.$$$ is the output  file.  
  324. At the end of execution,  file.BAK is deleted,  the input file is 
  325. renamed  to file.BAK,  and file.$$$ is renamed to the input  file 
  326. name.   Warning:   if  you  do  not have room on  your  disk  for 
  327. file.BAK,  file.DOC and file.$$$ at the same time, either use two 
  328. drives  or delete file.BAK before you start.
  329.  
  330.      SPELL corrects files with two passes of the input file.   On 
  331. the first pass,  the words in the file are sorted  alphabetically 
  332. and  duplicate words are eliminated.   An attempt is then made to 
  333. search for the words in the dictionary.  Words that are found are 
  334. marked.   On the second pass of the input file,  SPELL determines 
  335. whether  each word was found by locating them  in  memory.   This 
  336. method makes the operation of SPELL more efficient because common 
  337. words  must be looked up only once and because the dictionary can 
  338. be searched sequentially, minimizing disk head travel.  If all of 
  339. the file does not fit in memory on the first pass, the input file 
  340. is partitioned into sections small enough to fit into memory  and 
  341. is  then  corrected in a series of two pass operations until  the 
  342. entire file has been checked.  It is unlikely that memory will be 
  343. filled in large systems by even large text files as 3000 individ-
  344. ual words should fit easily.
  345.  
  346. 7.  DICTIONARY INTERNALS
  347.  
  348.      The dictionary has been compressed,  significantly, in order 
  349. to  save space.   Dictionary records are all 256 bytes  long  and 
  350. each record contains as many words as will fit.  Individual words 
  351. are stored in the following code:
  352.  
  353.      4 bits -- Number  of  characters to copy from  the  previous 
  354.                word.    Because  the  dictionary  is  stored   in 
  355.                alphabetical  order,  this saves a large number of 
  356.                characters.   This field is 0 at the beginning  of 
  357.                each record.
  358.  
  359.  x * 5 bits -- Characters are stored in 5 bit code.  There may be 
  360.                any  number  of  5 bit  characters.   A  character 
  361.                string is terminated by the following field.
  362.  
  363.      3 bits -- Set to 111 binary to indicate the end of the word.  
  364.  
  365.  
  366.                                 6
  367.  
  368.  
  369.  
  370.                Since  11100  binary  is  greater  than  26,   all 
  371.                alphabetic characters can be stored without  using 
  372.                this combination.
  373.  
  374.      4 bits -- Number  of  bits of flag data following the  word.  
  375.                The bit position of the flags has been ordered  so 
  376.                that  the flags most frequently used are earliest.  
  377.                Flags not stored are assumed to be off.
  378.  
  379.      x bits -- Flag data.  x is determined by the previous field.  
  380.                Each bit represents one of the 14 suffix flags.
  381.  
  382. 8.  MODIFYING THE MAIN DICTIONARY
  383.  
  384.      The source for the main dictionary can currently be found in 
  385. the file "[MIT-XX]SRC:<WBA>SPELL.DCT".   In order to make it com-
  386. patible with SPELL,  all of the "/" characters that delimit flags 
  387. must be converted to "%" characters so that flags will be consid-
  388. ered earlier in the alphabet than hyphens (DOG%S should be before 
  389. DOG'S).   The file must then be sorted alphabetically.  No utili-
  390. ties are provided with SPELL to accomplish either of these tasks.  
  391. Without high capacity disk drives,  you may find it necessary  to 
  392. perform the above steps on a larger computer.
  393.  
  394.      Once  a copy of the main dictionary has been placed  on  the 
  395. microcomputer,  use  the  program DICCRE to create a  dictionary.  
  396. Include  the name of the source file on the DICCRE command  line.  
  397. DICCRE will create the files DICT.DIC (compressed dictionary) and 
  398. SPELL0.MAC  (pointer  file  to dictionary) ON  THE  DEFAULT  DISK 
  399. DRIVE.   When  it has finished converting the input file  to  the 
  400. dictionary  file,  it will execute a warm boot if the output file 
  401. is on the same drive as the input file.   However,  if the output 
  402. file is not on the same disk,  it will ask whether another  input 
  403. file exists.  This feature allows the user to put the source file 
  404. on two disks in case it does not fit on one.  DICCRE will combine 
  405. them into one dictionary file.   If no more files exist, answer N 
  406. to the question.   If another file does exist,  put the disk with 
  407. the new file in the input drive and type Y.
  408.  
  409.      After the dictionary file has been created,  it is necessary 
  410. to  recompile SPELL with the new pointer  file,  SPELL0.MAC.   If 
  411. your  assembler does not support the INCLUDE statement,  you will 
  412. have to replace the line INCLUDE SPELL0.MAC in the file SPELL.MAC 
  413. with the contents of SPELL0.MAC.   After SPELL is recompiled,  be 
  414. sure  to  use  the correct copy of DICT.DIC with it or  you  will 
  415. obtain unpredictable results.
  416.  
  417.      For more information about dictionaries, see the file:
  418.           [MIT-XX]SS:<WBA>DICT.LETTER
  419.  
  420. Good luck and happy hacking!
  421.  
  422. Michael Adler       (MADLER@MIT-ML)
  423. 3 Sunny Knoll Terrace
  424. Lexington, MA  02173
  425.  
  426.  
  427.                                 7
  428.