This is the README file for the distribution of ISpell Version 3.3LJR with ARexx Server Mode! Fri Nov 20 01:16:13 1992 by Loren J. Rittle IMPORTANT NOTE: Additions and modifications copyright (C) 1990, 1991, 1992 Loren J. Rittle. Special thanks to Tom Rokicki of Radical Eye Software for the MinRexx code. Thanks to Mike Meyer for the mg interface to ISpell. Thanks to Willy G. J. Langeveld for enhanced TurboText interface to ISpell. Thanks to Christopher A. Wichura for the TurboText interface to GUISpell. Thanks to Steve Koren for the GNU EMACS interface to ISpell. Thanks to all who hacked on ISpell before me. In particular, Luis Soltero and Tom Rokicki worked on the Amiga port before I added the ARexx port. Original version of ISpell copyright (C) 1983 Pace Willisson. Permission for non-profit use is hereby granted. All other rights reserved. Currently, the TurboText interface to ISpell contributed by Willy L. *may* be broken. My fault, not Willy's. This problem, if it exists, will be addressed in a soon to be released update. The reason that this couldn't be avoided/fixed before public release is due to the fact that I currently have no way to make things privately available via ftp from within my work site (in the name of security :-( ). I don't have TurboText and thus couldn't test it myself. I tried to hack his macros to conform to the new method, but who knows if I got it right? I have been dragging my feet on this release for too long and thus decided to get it out the door! :-) GUISpell is now included with the ISpell distribution. GUISpell and all other included interfaces (vlt, shell, wshell, ced) were done by myself. This release of ISpell requires AmigaOS 2.04 or later. ANOTHER *REAL* IMPORTANT NOTE: This is the first distribution of ISpell (that I know of, at least) that has been compiled with SAS/C v6.0 instead of SAS/C v5.x. Because v5.x and v6.0 use different bit field ordering, all old hashed dictionaries need to be regenerated from source (dict.2 or dict.191, etc) via the buildhash command. Hopefully, people with smaller machines will be able to obtain the new ispell.hash file from the same place you got this distribution. FINAL IMPORTANT NOTE: Currently, the Amiga version of ISpell is my pet project. You get source, but if you make any neat (or useful) enhancements it would probably be best if you were to send them to me for inclusion in the next major release. Your input will be plainly acknowledged in the README file and greatly appreciated by myself and users of the Amiga version of ISpell everywhere. I will take anything: new or improved front ends, new features, improvements in WorkBench support (currently nil:). To install ISpell from binary: a) Unlharc this archive (you most likely did this if you are reading this). b) copy c/ispell to c: c) copy c/GUISpell to c: d) copy s/ispell.hash to s: e) make sure that the t: logical assign exists. f) look at README's in the interfaces/ directory tree. Follow any directions related to an interface you would like to install. g) Read notes below. To install ISpell from source: Takes some work these days. :-) a) cd ISpell & smake b) cd interfaces/GUISpell-1.1 & smake c) install as above (except get binaries from the source directory) Memory requirements to run ISpell: The ISpell dictionary comes in several flavors. The big dictionary distribution requires an amiga w/ LOTS of ram. To compile the dict.2 version you will need 1.4 megs of ram. To run this version you need 750k. This dictionary supports Capitalization mode. Currently dict.2 is the only one shipped with the ISpell package. Notes on the ARexx Server Mode of ISpell: Quick Overview of Servers Servers are a big deal in the UNIX world. I like the way things work under UNIX most of the time, the way servers work under UNIX is no exception. A server is a program that stays in core waiting for requests from other programs. In general, when a server receives a request for service, it performs a given action or a sequence of actions and then replies to the requester. The requests to the server can come from a number of sources: front-end client programs running on the local host (with any type of message passing scheme, e.g. EXEC's or ARexx's message passing facility) or a remote host (with the appropriate networking software, e.g. TCP/IP), and directly from the user via some form of command line (e.g. via ARexx). Some advantages to usings servers instead of classic approaches are as follows, 1. The client and the server can be run on different machines with the appropriate networking software. 2. User can customize the front-end (client) software without having to know how the server works internally. User must only know the client-server interface. 3. Servers can sometimes perform a given operation much faster than the standard load, run, terminate cycle. For example, if one wants to spell check even one word with ISpell about 700KB of information must be loaded into memory. Later, if another single word must be checked, then the entire 700KB of data must be reloaded into memory. With ISpell's new server mode, small client programs can connect up with the running ISpell server to spell check words or documents, while avoiding the reload time. Overview of the ARexx Server Mode of ISpell By no surprise, currently under the AmigaOS client-server relations are most easily implemented with ARexx. Requests and replies take the form of ARexx messages. The only limitation of using ARexx in order to implement client-server relations is that the client and the server must run on the same Amiga. Hopefully, this restriction will be lifted with the advent of support on the Amiga for real networking protocols (TCP/IP and others). ISpell can be started up in server mode with the following command: run nil: ispell -r nil: Once the server has been started, it is a good idea to wait for the ISpell ARexx port to show up before trying to use it. The ISpell's ARexx port name is IRexxSpell and the easiest way to wait for it's arrival is with the following command, waitforport 'IRexxSpell' For thoses of you who are excited to see the ISpell ARexx server work type, rx "options results;address 'IRexxSpell' check ites;say result" at a Shell prompt. You should see the computer respond with, & BITES CITES ICES IRES ITEM ITEMS ITS KITES RITES SITES TIES Or, if you have installed the ARexx front-end scripts into your REXX: directory then try typing, spell ites The computer should respond with, The word 'ites' is not found. Try these words: bites cites ices ires item items its kites rites sites ties Please see the README's interfaces/ directory tree for other interfaces available. Feel free to write your own front-ends or modify the ones that I have supplied. Below are the ARexx commands that ISpell knows how to respond to. See my examples in the rexx directory for exact usage. Have fun and please give the improved or new front-ends to ISpell away for all to see and play with. Commands that the ISpell Server Will Respond To ADD --- Adds a word to the `global personal dictionary' and immediately save the personal dictionary to disk. QUICKADD --- Adds a word as above, without saving changes to the file on disk. An ADD command will record any QUICKADD's since the last ADD. If the server is shut down (or the Amiga's power is lost), then all QUICKADD'ed words are lost if no ADD was performed. CHECK --- The ISpell server checks the stated word in its dictionary and returns a string that describes if the word was found or, if not, replacements. This return string is documented in man/ispell.1, it is the same as if words were piped in via standard in. See rexx/spell.rexx and rexx/ced/WordSpell.ced for how to parse the returned string in ARexx. Excerpt taken from man/ispell.1: If the word was found in the main dictionary, or your personal dictionary, then the line contains only a '*'. If the word was found through suffix removal, then the line contains a '+', a space, and the root word. If the word is not in the dictionary, but there are near misses, then the line contains an '&', a space, and a list of the near misses separated by spaces. Also, each near miss is capitalized the same as the input word if unless such capitalization is illegal; in the latter case each near miss is capitalized correctly according to the dictionary. Finally, if the word neither appears in the dictionary, and there are no near misses, then the line contains only a '#'. This mode is also suitable for interactive use when you want to figure out the spelling of a single word. QUICKCHECK --- As above, but only checks to see if the word is in the dictionary. Does not try to find close matches, etc. See rexx/ced/QuickWordSpell.ced for Usage. Will return the string 'ok' or 'bad' depending on if the word is found or not. LOOKUP --- Looks up word (really a grep pattern). See rexx/lookup.rexx for usage. `.*' is the match anything wild-card :-). `.' is the match one character wild-card, see a manual on grep or src/regex.c for more information. FILECHECK --- The ISpell server checks the named file, returns the filename of a temporary file that contains a list of words not found in the dictionary. The client is required to delete the temporary file when done with it. Be sure to include the complete path in the filename as there are no good ways to know the current directory of the ISpell server. See rexx/spellfile.rexx and rexx/ced/Spell.ced for usage. EXTENDEDFILECHECK --- The ISpell server checks the named file and return the list of mispelled words and locations in a stem variable called ispellresult. On return: ispellresult. is the stem name. ispellresult.count is the number of errors. ispellresult.1.word is the first word in error. ispellresult.1.line is the line position of the first word in error. ispellresult.1.column is the column position of the first word in error. ispellresult.j.word is the j'th word in error. ispellresult.j.line is the line position of the j'th word in error. ispellresult.j.column is the column position of the j'th word in error. This is a real hack. Please expect this to be cleaned up. There may be bugs here. Not well tested. Be careful. Etc... VERSION --- The ISpell server replies with its version string and a line of the currently compiled in ARexx commands that it will response to. EXIT --- Causes the ISpell server to terminate after replying to the request. Please direct comments and bug reports to Loren J. Rittle 1008 Landing Rd. Naperville, IL 60540 wk: (708) 576-7794 hm: (708) 420-7942