# .NHY.PS 64,80.header mixed .b2.cpi8.prop .C;SPELL -- RSX-11 Version .T SPELLING VERIFICATION PROGRAM .b2.cpi10 .c;Original by: Dave Walesby .c;Revised by: Chris Doran .S2.cpi8 .HL1;INTRODUCTION .cpi12 This program has been designed to facilitate identifying typing errors and spelling mistakes in text or program source files on the PDP#11 computers. By using switches the program will search for text in RUNOFF, FORTRAN, RTL2, BCPL, C, RATFOR, Pascal, AP120B array processor, and SAL and MACRO assembler files according to the rules of the relevant formats. The program produces an output file containing a dictionary of all words used in the text and/or a listing of all words that appear in the file but do not appear in a dictionary file. .cpi8 .HL1;DETAILS OF OPERATION .cpi12 There are two types of input file to SPELL. Firstly the 'dictionary' type and secondly the 'checking' type. Any number of dictionary files may be specified to SPELL. In addition, the files LB:[1,2]SPELL.WRD and SY:[g,m]SPELL.WRD (if they exist) are automatically used by SPELL unless it is instructed otherwise. These files may contain text in any form. To optimize the speed of running it is advantageous to have each word occurring once only in a dictionary file but this is not a requirement as each word will only be loaded on its first occurrence. Also to improve speed the number of separators between words should be kept to a minimum and the dictionary should be alphabetically ordered on the first two letters in each word. The ordering of words in the dictionary has a great effect on the speed of SPELL for the first dictionary loaded (normally LB:[1,2]SPELL.WRD) but for subsequent dictionaries the order does not matter nearly so much. SPELL's output dictionary file is optimally ordered for use as a dictionary file. .P0 To be effective as possible as many words as possible should be in the dictionaries, but this has to be balanced against the amount of memory available in the computer. If the extend task directive is available, SPELL will automatically extend its storage area up to the maximum the operating system allows. When SPELL is started it checks the total length of LB:[1,2]SPELL.WRD and SY:[g,m]SPELL.WRD against the amount of memory available to it and will if necessary prevent long words being loaded from it in order to prevent subsequent running out of memory. If this situation occurs a message is issued by SPELL to the user. No account is taken of the length of other dictionary files. .P Most words in the checking file are examined. Where words contain digits or non printing characters they are ignored. If the last word on a line ends with a hyphen, SPELL will concatenate any letters occurring on the start of the next line with that word as an attempt to dehyphenate words. SPELL also tries to deal with apostrophied words. If the word has an apostrophe in anything but the second letter and the combination 's does not occur, the word will be treated as a legal word with an apostrophe and checked against the dictionary. SPELL also checks that punctuation marks following a word do not immediately precede another word (e.g.# dictionary.SPELL). .p0 The most commonly used output from SPELL is a simple list of unknown words. Unless instructed otherwise, SPELL prints each unknown word, preceded by the line number on which it occurs, in square brackets, facilitating location of errors for editing. However, SPELL can also be told to add each unknown word to its dictionary, in which case each word is listed only once, without a line number. .P0 Another feature that may be disabled is the matching facility. For the checking file words that are not found in the dictionary are matched against all words that start with the same two letters. If there is a word that is reasonably similar, this is printed in brackets following the not-found word. .cpi8 .HL1;USE .cpi12 SPELL can be invoked in any of the usual RSX-11M ways, and takes a command line of the form: .p5.epr >SPE listfile,newdict=sourcefile,dict1,...dictN/switches .P0.prop where all files are optional, and: .LM16.TS16.P-16 dict1,...dictN if specified should contain dictionaries, default filenames SPELL.WRD. Any number of dictionary files may be specified, subject to the normal requirement that the command line is less than 80.# characters long (160.# if the continuation line form is used). For the first dictionary loaded there is considerable advantage in having it alphabetically ordered on the first two letters. Even so, it takes about 20 seconds to load the standard dictionary. .p-16 sourcefile is the file in which spelling mistakes or typing errors are to be searched for. It can be a RUNOFF source file, FORTRAN source file, a MACRO assembler source file etc.. The type of file is indicated to the program via "language" switches detailed below. The default filetype is determined by whichever language switch is currently in use, or .RNO if none is given. .p0 sourcefile may be omitted as long as one or more explicit dictionary files (dict1...) are given. In this case, SPELL just orders and concatenates all the dictionaries into newdict (see below). .p-16 listfile receives a list of all words that occurred in sourcefile but were not in the dictionary file(s). If no dictionary file is specified then this file contains a list of all words found. The default filename is SPELL.LST, unless no name at all appears, in which case the list is printed on the terminal. If a file is given, then it is spooled to the lineprinter by default. .p newdict if given, will be a new dictionary containing all words in the dictionary and source file(s). If no input dictionary files (including the defaults) were specified, then this will list the words in sourcefile. Its default name is SPELL.WRD#. .lm0.P0 Although shown above at the end of the line, switches may appear anywhere on the command line, and are accumulated before file processing starts. If there are no explicit output files, i.e.# only a default listing to the terminal is required, the = sign may be omitted. .cpi8 .hl2;GENERAL SWITCHES .cpi12.lm8.ts8,15.i-8 /BK This special switch is for debugging purposes. It causes a break to ODT if this is installed. If not, it is ignored. This switch is of no interest to the general user, and is documented for completeness only. .p-8,1,6 /DD This switch enables the automatic inclusion of the files LB:[1,2]SPELL.WRD, and SY:[g,m]SPELL.WRD as dictionary files. By default, these files are loaded as necessary -- if SPELL is invoked for multiple command lines, the dictionaries are reloaded only if modifications take place. .p-8,1,7 /EV Every spelling error found is printed, i.e.# each occurrence of each mistake is printed rather than once only. With this option errors are not loaded into SPELL's internal dictionary so newdict does not contain spelling errors or new words. This is the default setting. The EVery switch is the logical complement of the LOad switch (see below). .p-8,1,5 /FR:n Specifies the free space which must be present after default dictionaries have been loaded. The default value is 1500.# bytes. If this much is not available, SPELL reduces the length of dictionary words which may be loaded. .p-8,1,6 /GU The GUess switch controls the facility where SPELL tries to match any errors with the closest word it has in its dictionary. By default this switch is on, and erroneous words are followed in the list file by their nearest known word (if any) in brackets. .p-8,1,3 /HE This switch causes output of a HELP display, giving a summary of the command line format and switches. .p-8,1,3 /IG:n SPELL ignores words of n and less characters. n may range from 1, the default, to 30. .p-8,1,5 /IU If this switch is set, SPELL ignores all words which are written entirely in upper case. This is useful for skipping acronyms. This switch is off by default, and upper case words are checked. .p-8,1,4 /IP If this switch is set, punctuation embedded in words (e.g.# file.typ) is not queried. By default, such constructs are reported as possible typing errors. .p-8,1,6 /KD If this switch is given, the last dictionary, complete with modifications if loaded, is kept for the command line just being entered. By default, the dictionary area is cleared or reloaded with the default dictionaries, for each new command line, even if the latch switch is on. .p-8,1,6 /LA Causes the current switch settings (except /HE and /BK), and the default filetype for sourcefile, to be retained for subsequent command lines, up to the line which follows the next one containing /-LA. Unless this switch is given, defaults are reset at the beginning of each command line. .p-8,1,6 /LO If this switch is on, then words not found are LOaded into the dictionary, and included in newdict, if given. Only single occurrences of unknown words are printed in the list file. By default, load is off, and the dictionary is unchanged. .p-8,1,5 /QU If this switch is on, the user is QUeried as to whether to load each unknown word into the dictionary. SPELL prints a message of the form: .p5 Load "word" [Yes/No/Go/Quit] ? .b1.tp9 and waits for the user to type one of the following four replies:- .lm+7.p-4 Y to put "word" in the dictionary, .i N to leave "word" out of the dictionary, but add it to the queries list, .i Q to leave out this and all subsequent unknown words, add them to the queries list, and stop asking, i.e.# set /-QU/-LO for subsequent words, .i G to load this and all subsequent words without asking, i.e.# set /-QU/LO. .lm-7.p0,1,5 Follow each single-letter response with a carriage-return, or press carriage-return alone to enter the same reply as last time (the initial default is N). Lower-case letters are accepted, but SPELL will repeat the query if any invalid response is given. .p-8,1,4 /LE:n This switch is used to set the maximum number of characters that can occur on a line in the output file newdict to n. The default value is 132. .p-8,1,3 /SP If set, the errors listing file (listfile) is spooled to the lineprinter. This is the default. .p-8,1,3 /UC This switch causes the dictionary to be output in upper case rather than the lower case default. .p-8,1,3 /WI Normally, three errors are printed per line, but if this switch is negated, each error is output on a separate line. .lm0.cpi8 .hl2;LANGUAGE SWITCHES .cpi12 These switches enable portions of text forming comments to be selected for testing from source programs, by knowledge of the different comment delimiters. By default, the processing method is selected according to the filetype for sourcefile, but this may be overridden by giving an explicit language switch. Further, if a language switch is given without an explicit filetype for sourcefile, then the filetype is selected to match the language. .LM8.P-8,1,4 /AP This switch indicates that sourcefile is an AP120B array processor source file, and words are only examined if they occur between an inverted comma and end of line. .p-8,1,3 /BC Specifies a BCPL input file, and only text between a double slash (//) and end of line is examined. .p-8,1,3 /C Specifies a C input file; text between /* and */ only is examined. .p-8,1,5 /FO This switch indicates that sourcefile is a FORTRAN source file the program only examines words that occur on a line starting with the letter C, and text between an exclamation mark and end of line. .p-8,1,4 /MA This switch indicates that sourcefile is a MACRO assembler source file, so words are only examined if they occur between a semicolon and end of line. .p-8,1,3 /PA Specifies a Pascal file, with comments contained in braces ({ and }). .p-8,1,4 /RA This switch indicates that sourcefile is a RATFOR source file the program only examines words that occur on a line after the character _#. .p-8,1,4 /RT This switch indicates that sourcefile is a RTL2 source file the program only examines words that occur on a line between % characters. .p-8,1,5 /RU This switch indicates that sourcefile is a RUNOFF source file and words are ignored between a full stop at the start of a line, or following a semicolon command terminator, and the next semicolon or end of line. .p-8,1,4 /SA indicates that sourcefile is a SAL cross-assembler source file, and comments appear on lines starting with a *, or between a semicolon and end of line. .p-8,1,4 /TE indicates a plain text file, and all text in the program is processed. This mode is automatically used for loading dictionaries. .S.LM0 The language switches are mutually exclusive, and an error occurs if more than one appears on the same command line. The default is determined by the filetype of the input file (default _.RNO set the /RUNOFF switch). The selection is not entirely foolproof, e.g.# comment delimiters in text strings are not ignored. .p0 The following switch may be used in conjunction with one of the language switches to change the comment characters. Text selection takes place as described above, but the comment delimiter characters may be specified by the user. .lm8.p-8 /CC:char1:char2 .br changes comment delimiter characters. char1 and char2 may be the single characters themselves, or octal constants giving ASCII character codes, the latter form normally being used when the actual character is illegal in a command line (e.g.# ! or ;). char2 may be omitted, in which case it is set to a dummy character which can never actually occur in text read by SPELL. .lm0;.p0 This facility may be useful when program in a an unsupported language is being checked, or to eliminate certain comments, e.g.# specifying /FO/CC:C for a FORTRAN file selects only those comments on lines beginning with C, and does not test end of line comments after exclamation marks. .p0 The following table gives default filetypes and comment characters for the various languages. .nf.b1.tp14.lm4.ts15,24,35,45,55.epr Language##Switch##Filetype###char1#####char2 Notes --------##------##--------###-----#####----- ----- AP120B /AP AP1 " BCPL /BC BPL######1st /######2nd / C /C C#######/ of /*###/ of */ *'s can't be redefined MACRO /MA MAC ; FORTRAN /FO FTN C ! Pascal /PA PAS { } RATFOR /RA RAT _# RTL2 /RT RTL % RUNOFF /RU RNO . ; SAL /SA SAL ; * text /TE TXT .prop.lm0;.f.cpi8 .hl1;EXAMPLES .cpi12.lm5.i-5.epr >SPE TEXT .prop Checks all words except RUNOFF commands in file TEXT.RNO against the default dictionaries LB:[1,2]SPELL.WRD and SPELL.WRD in the user's directory (if they exist), and prints on the terminal a table of each occurrence of unknown words of more than 1 letter. The table gives the line number of each occurrence, and, where possible, the nearest matching word in the dictionary. .p-5,1,5.epr >SPE TEXT=TEXT,USER .prop As above, but the errors listing is sent to file TEXT.LST, and spooled to the lineprinter. Words in file USER.WRD are added to the list of acceptable words from the standard dictionaries. .p-5,1,6.epr >SPE ,USER=TEXT,USER/LO .prop Here, all unknown words in TEXT.RNO are added to the dictionary, and a new dictionary file, USER.WRD is created, containing all the words in this file, plus the old USER.WRD, plus the standard dictionaries. Only the first occurrence of each new word is printed on the terminal. .p-5,1,7.epr >SPE NL:,SY:WORDS=SOURCE/-DD/TE/LO .prop Outputs in WORDS.WRD a partially ordered list of all the words used in SOURCE.TXT#. By using the /-DD switch to exclude the default dictionaries, only those words in the input file are placed in the dictionary. Sending the list output to the null device suppresses listing of words as they are found. .p-5,1,5.epr >SPE CONCORD/-SP=SOURCE.TXT/-DD/-WI/-GU .prop Lists every single word of SOURCE.TXT in CONCORD.LST, one word per line (/-WI), and without guesses (/-GU). CONCORD.LST could be sorted into a concordance. .p-5,1,4.epr >SPE ,DICT=TEXT/QU,DICT1,DICT2,DICT3/-DD .prop Merges DICT1.WRD, DICT2.WRD, and DICT3.WRD into a single dictionary, DICT.WRD, also including words from TEXT.RNO, as specified individually by the user. .p-5,1,9.epr >SPE .I SPE>=FILE1.FTN/LO/LA .I SPE>=FILE2.FTN/KD .I SPE>_^Z .prop The first command checks the spelling of FILE1.FTN, loading any unknown words into the dictionary. The /KD on the second line retains this dictionary for checking FILE2, and use of the latch switch keeps the default FORTRAN-type processing and .FTN filetype. .cpi8.lm0 .HL1;ERROR AND OTHER MESSAGES .cpi12 All error messages contain the prefix SPE -- *WARNING*, SPE -- *ERROR* etc., and indicate the exit status which SPELL will return (if the exit with status directive is supported by the host system). If several errors occur in one program run, the exit status is that corresponding to the most serious. SPELL returns success only if no spelling mistakes or other errors are detected. Any spelling mistake or unknown word will set a warning exit status. .lm5.p-5,1,7.epr SPE -- *ERROR*-Faulty command line .prop This error message is associated with any failure in command line processing, usually with a syntax error such as illegal characters in a filename, filename too long, or illegal switches. SPELL abandons processing of the current command line, which should be re-entered correctly. .p-5,1,6.epr SPE -- *ERROR*-File open error nn. .prop This message indicates a failure to open an input or output file. The reason for the error is given by the decimal value printed as nn. A negative value is an FCS error, and a positive one a directive ($DSW) error, as listed in the RSX-11M I/O Operations Reference Manual. The most common ones are -26 = input file not found, and -16 = privilege violation. When an open error is detected, SPELL abandons processing of the current command line. .p-5,1,6.epr SPE -- *ERROR*-File write error nn. .prop This message will occur if any I/O error is reported on file output. reason for the error is given by the decimal value printed as nn, as above. The most common one is likely to be -11 -- disk full. SPELL abandons processing of the current command line. .p-5,1,4.epr SPE -- *ERROR*-File read error nn. .prop As above, but reports an error when attempting to read a source or dictionary file. .p-5,1,5.epr Loading dictionary....................... .prop This message appears as each dictionary is loaded. One dot appears for each 128 words. Dictionary loading is a slow process, and the regular appearence of these dots provides some confidence that the task is still active. .p-5,1,6.epr nnnnn queries in mmmmm words .prop This is the normal message output when SPELL completes checking the input file. nnnnn is the number of times unknown words were found (each occurrence of an unknown word is counted separately), and mmmmm is the total number of words found, including those marked as too short to check, by the /IG:n switch. This message is normally followed by: .p-5,1,4.epr nnnnn words in dictionary, room for mmmmm more letters .prop This is not an error, it simply indicates the amount of dictionary space used and available. .p-5,1,7.epr SPE -- *WARNING*-Limited memory, dictionary words >= nn letters not loaded .prop SPELL estimates the amount of space it will need to load the default dictionaries. If there is insufficient available, and the task space cannot be extended, it limits the length of words that are put in the dictionary. Any longer words will be queried. When this message appears, nn gives the maximum length of dictionary words. .p-5,1,6.epr SPE -- *WARNING*-Memory overflow .prop This message will be given if SPELL runs out of memory when loading words from a dictionary or checking a text file. In either case SPELL continues but forces the /EV option. This has the effect of causing each occurrence of an error SPELL finds to be printed, rather than just the first. .p-5,1,7.epr SPE -- *SEVERE ERROR*-No memory for dictionaries .prop This error occurs only on startup if there is insufficient dictionary space available for even 1500.# dictionary letters. This problem will occur only if SPELL is incorrectly assembled, task-built, and/or installed, and the extend task directive either fails or is not supported by the host system. Try starting SPELL as .p5,1,5.epr >RUN $SPELL/INC=50000.##########under MCR, or .i >RUN $SPELL/EXT=25000###########under DCL .prop.b1 and if this fails, consult the System Manager. .p-5,1,4.epr SPE -- *SEVERE ERROR*-Internal consistency failure .prop This message should never occur, but if it does please report this to the System Manager. Its occurrence causes SPELL to terminate immediately. .cpi8.lm0;.page .hl1;BUILDING SPELL .hl2;DISTRIBUTION KIT .cpi12.LM20;.I-16.ts20 SPELL.MAC Source file of SPELL for RSX-11M/RT-11. .P-16 SPELLBLD.CMD Task-Builder command file, overlaid FCS version. .p-16 SPELLBLD.ODL Task-Builder overlay descriptor file for above. .p-16 SPERESBLD.CMD Task-builder command file, ANSI FCSRES version. .p-16 SPEFCSBLD.CMD Task-builder command file, non-overlaid FCS version. .p-16 SPELLRSX.RNO This documentation in RUNOFF input form. .p-16 SPELLRSX.DOC This documentation in RUNOFF output form. .p-16 SPELLRT.RNO RT-11 version of this documentation in RUNOFF input and .i SPELLRT.DOC output form. .P-16 SPELL.WRD Standard dictionary. .p-16 SPELL.HLP Help text for the RSX-11M HELP utility. .lm0;.p0 Before proceeding, copy SPELL.WRD into directory [1,2] on the system disk, LB:, and all the other files into a working directory. SPELL.HLP may be added to the system help files MCR.HLP and/or DCL.HLP#. .cpi8 .hl2;ASSEMBLY .cpi12 The comments at the beginning of SPELL.MAC indicate a number of symbols which may be defined according to the facilities available in the host RSX-11M system. Semicolons may be inserted at, or removed from, the beginnings of the marked line to indicate the availability of various features, by defining some symbols and leaving others undefined, as follows: .lm14.ts14.p-10,1,4 R$$T11 Define this symbol only if assembling for an RT-11 system. In this case, all the other symbols below are not used, and should be left undefined. .p-10,1,4 R$$11M Define this if assembling for an RSX-11M system. It is important that one and only ^&one\& of R$$T11 or R$$11M be defined -- defining both or neither will give assembly errors. .p-10,1,5 M$$EIS Define this symbol if the extended instruction set instructions MUL, SOB, and ASH are available on the host machine. If it is left undefined, they will be simulated using other instructions, at the expense of increased task size. .p-10,1,4 P$$OFF Define this symbol if SPELL may return exit status to a parent task using the EXST$ directive. If undefined, SPELL always returns success status, using EXIT$. .p-10,1,3 G$$TPP Define this if the Get Partition Parameters directive (GPRT$) is available. .p-10,1,5 G$$TTK Define this if the Get Task Parameters directive (GTSK$) is available. This, together with GPRT$, is required to enable SPELL to find out how much space has been allocated for dictionaries by a task-builder EXTTSK directive and/or run-time increment. If either of these is not available, this information cannot be obtained, and a fixed dictionary area must be used, set by: .p-10,1,5 DICSPC which must be set equal to the size of memory to be permanently allocated in the task image for dictionaries. A value of 42000 (decimal) is required for the dictionary SPELL.WRD given in the distribution kit. .p-10,1,5 P$$GMX Define this if the Get Mapping Context (GMCX$) directive is available. This is required to enable SPELL to find out whether it is linked with FCSRES, and hence determine the maximum dictionary space available. .p-10,1,6 T$$RPR Define this if the terminal read-after-prompt option is available, enabling the reply character in /QUery mode to be fetched immediately after the prompt for it, without possible data loss. If this facility is not available, a separate write and read will be performed. .p-10,1,5 AUTOHT Define this symbol if horizontal tabs may be used for positioning in multi-column listings. Availability of this feature slightly increases the speed of output and reduces the size of listfile. However, tabs must be supported by any hardware and/or device drivers which will be used to view SPELL's list file. This is the case for most recent RSX and RT-11 systems. .lm0;.p0 As supplied, all the above symbols (except R$$T11) are defined. SPELL.MAC should be edited for your target system before assembly. If the system definitions file, LB:[11,10]RSXMC.MAC, is available, you can simply disable all lines containing "$$" symbols (i.e.# all except AUTOHT and DICSPC, which must be set appropriately), and assemble as: .epr.p5 >MAC SPELL,SPELL={LB:[11,10]RSXMC/PA:1,SY:[g,m]}SPELL .prop.b1 where [g,m] is your working directory. .p0 Alternatively, define or undefine the symbols as appropriate, and assemble by: .epr.p5 >MAC SPELL,SPELL=LB:[1,1]EXEMC/ML,SY:[g,m]SPELL .prop.cpi8 .HL2;TASK-BUILDING .cpi12 The task-builder command file, SPERESBLD.CMD, contains the following: .epr.lm5;.nf;.b1 ; Enable the following line to build with an overlaid FCS ;TK:SPELL/-FP/-SE/MM/CP,MP:SPELL/-SP/-WI/MA=SPELLBLD/MP ; Enable the following two lines to build with FCSRES or non-overlaid FCS TK:SPELL/-FP/-SE/MM/CP,MP:SPELL/-SP=SPELL / TASK=...SPE UNITS=4 ACTFIL=2 ASG=SY:2:3,TI:1:4 STACK=48 ; Enable the following line if FCSRES is available and FCS is not overlaid LIBR=FCSRES:RO ; Set initial dictionary space big enough for LB:[1,2]SPELL.WRD EXTTSK=21000 // .prop.lm0.f.p0 This also may be edited according to system facilities available or required: .p0 In the command file as supplied, all the FCS and CSI routines are assumed to be in a resident library, FCSRES, and there is no need for overlaying. However, since FCSRES perforce takes up 4k words, there may be some advantage in not using it, even if it is available on the host system. To disable its use, place a semicolon in front of the line LIBR=FCSRES:RO. This will, of course, increase the size of the task file on the disk. (Alternative file SPEFCSBLD.CMD contains this edit.) .p0 Some further increase in dictionary space may be obtained by overlaying the file opening and command string interpretation routines. To do this, remove the semicolon in front of the first SPELL/-FP...# line, and place one in front of the second. (This gives file SPELLBLD.CMD.) .p0 The chief disadvantage of overlaying or excluding FCSRES is an increase in task size. The following table gives statistics for the three build options. .epr.lm5.nf.ts19,33,43,55,67.lm+12.b1.tp8 task size###task file####max task###max#no of####letters ##words#######blocks####increment####letters####-std#dict ---------###---------###---------###---------###--------- .lm-12 with FCSRES 5760 25 54600 45831 #4949 .b1 w/o FCSRES 9024 38 56300 47491 #6609 .b1 overlaid FCS 6912 43 62400 51711 10829 .prop.lm0.f.p0 (These figures were obtained with RSX-11M V4.0's ANSI FCSRES or non-ANSI FCS. They will obviously vary slightly with other versions of the system and/or SPELL.) .p0 If standard dictionaries will normally be used, their loading can be accelerated by setting a default initial task size extension big enough to hold them. This will save SPELL having to do frequent extend tasks while the dictionaries are loaded. The value in EXTTSK=21000 may be altered to match the number of characters in the default dictionaries, plus the free space set by /FR:n (1500.# bytes by default). Note that the parameter to EXTTSK is in decimal words, and there approximately two characters stored per word. As a rough guideline, one 512-byte file block accommodates about 327 stored characters, after word terminators are accounted for. .p0 Note that if extend task directives are not available in the host system, then the EXTTSK task-builder option MUST be given to set up dictionary space unless SPELL is always RUN /INC=...#. .p0 Having selected task-building options, and thus the build command file, SPELL may be built by .epr.p5 >TKB @SPExxxBLD .prop.p0 TKB will complain of "1 undefined symbol" if ODT is not installed. This is normal, and should be ignored. (To determine whether ODT is installed, and thus whether to enable the /BK switch, SPELL tests for a non-zero value of the special ODT symbol _.ODTL1.) SPELL can then be installed in the running system by .epr.p5 >INS SPELL .prop.p0 It can then be run in any of the usual ways. To install it permanently in an RSX-11M system, copy SPELL.TSK to LB:[1,54], and issue the INS command under VMR. If the standard dictionary is later increased in size, you can extend the fixed task space available for it without rebuilding by installing with an increment, e.g. .epr.p5 >INS SPELL/INC=24000.#########under MCR, or .i >INS SPELL/EXT=12000##########under DCL .prop