home *** CD-ROM | disk | FTP | other *** search
- CHAPTER 4. PROGRAMMING TOOLS
-
-
-
-
- In this chapter we will discussed the most useful utility words which are
- either unique in F-PC or have different behavior than those in F83. We
- assume that the user is familiar with F83 so that those words adopted
- unmodified from F83 are not presented. Reference material such as Inside
- F83 and F83 Reference Manual by C. H. Ting are useful in obtaining an
- overview on F83. Dr. Ting's companion F-PC Technical Reference Manual is
- is devoted to the internal structure of F- PC.
-
-
- 4.1. DUMP
-
-
- The dump utility gives you a formatted hex dump with the ASCII text
- corresponding to the bytes on the right hand side of the screen. Data
- and addresses are displayed in hex, with 16 bytes to a line. Both the
- segment and offset addresses are displayed for easy reference.
-
- DUMP displays memory in the Code Segment, where code, strings, and other
- data are stored. XDUMP displays memory in the List Segment, where colon
- definitions are stored. YDUMP displays memory in the Head Segment.
- These dump utilities are derived from the generic dump function LDUMP,
- which displays a range of memory from a memory segment whose segment
- address is given on the stack with an offset address and byte count.
- DUMP, XDUMP, and YDUMP set DUMPSEG to the corresponding segment and then
- do LDUMP.
-
- DUMP, XDUMP and YDUMP change DUMPSEG to cs:, es:, and ys:, respectively.
- Their behavior takes a little bit of getting use to, but they allow you
- to navigate through the entire segmented memory space. XDUMP is unique
- in that it takes a segment pointer and a count as parameters. It is made
- so that you will able to dump colon definitions beyond the 64K boundary.
-
- DUMP ( address length -- ) Dump Code segment
- LDUMP ( segment offset length -- ) Dump any segment
- XDUMP ( relative-segment length -- ) Dump List segment
- YDUMP ( offset length -- ) Dump Head segment
-
- DU displays 64 bytes in the dump segment and increments the memory
- address by 64 so that you can continue dumping the next 64 bytes with
- another DU.
-
-
- 4.2. THE DEBUGGER
-
-
- The F-PC debugger is very similar to the F83 debugger. Some features
- have been added to enhance its operation. The decompiled source for the
- current definition being debugged is displayed while debugging. A
- typical command sequence might be as follows:
-
- DEBUG WORDS <return>
-
- which sets up the debugger so that WORDS will be debugged as soon as it
- is executed. DEBUG only sets the debugger up to debug a word. The
- debugging process does not start until the word is executed. A new
- debugging command DBG is added, which caused the following word to be
- executed and debugged immediately. The command sequence is:
-
- DBG <word_name> <return>
-
- It is much easier to use and makes much of the intricate behavior of the
- F83 DEBUG transparent to the user.
-
- Once in the debugger, you will be shown a special debugger display. The
- decompiled source code is shown in the top half of the screen. The
- debugging information is shown in the bottom window. At this point,
- pressing return will cause the word highlighted to be executed, and the
- debugger will print the stack after execution, and step to the next word
- in the list and wait for a command.
-
- Notice the fields in the bottom debugging window. The number on the left
- is the address in memory where the debugger is currently working. The
- next field is the word the debugger is about to execute. The next symbol
- "?>" is a marker pointing to what will be the printed stack contents
- after we press <return>. The bar of text shown in the middle of screen
- is the command menu:
-
- C-cont, D-done, F-forth, N-nest, Q-quit, S-skipto, U-unnest, X-source-on/off
-
- These are the commands you can use in the debugger. Their detailed
- functions are as follows:
-
- C-cont Trace continuously until a key is pressed.
- D-done Stop debugging and enter the browser. Press F10
- to return.
- F-forth Allow entry of Forth command lines until <return>
- is pressed on an empty line.
- N-nest Nest into the ":" definition we were about to
- execute. Only works on ":" definitions, and
- deferred words.
- Q-quit Quit the debugger, and unpatch next.
- S-skipto Using + or - to skip to the desired word. Press
- <return> to continue debugging from there.
- U-Unnest Unnest the current definition to the next higher
- level.
- X-source-on/off Toggle on and off the source code display and
- devote the whole screen for debugging.
-
- You will have noticed that the upper portion of the screen is filled with
- the source code of the word you are currently debugging. This is to make
- it easier to follow the debug process. You may want to turn off the
- source display, if it interferes the debugging process, by using the X
- command while debugging or used SRCOFF before debugging:
-
- SRCOFF Turn off the source display
- SRCON Turn on the source display
-
- The default state is SRCON.
-
- During debugging, only the topmost 4 numbers on the data stack are
- displayed, with the total depth of stack shown in square brackets. This
- is designed so that all debugging text fits in one line. As .S is used
- to display the stack contents, its behavior is modified from the .S in
- F83, which displays all items on the data stack. Sometimes it is
- inconvenient to have the bottom of the stack hidden from you, you can
- change the contents of variable MAX.S to the desired number of stack
- items to be shown. MAX.S has a default value of 4.
-
-
- 4.3. VALUES: CONSTANTS AS VARIABLES
-
-
- "Constants aren't; variables won't".
-
- A set of operators has been included for manipulating data values stored
- in the parameter fields in constants and variables. Constants are faster
- at run time than variables. You can improve performance in critical
- operations taking advantage of them. Since variables are more often
- fetched than stored, using a constant to store a variable provides a
- somewhat more readable source by eliminating lots of @'s. In order to
- preserve the appearance of constants with their values not modifiable,
- F-PC defines a new type of data called VALUE. VALUE is an alias of
- CONSTANT, with the stated intention that their values are to be changed
- at run-time.
-
- Here is a list of words which manipulate the contents of a value from the
- keyboard or in colon words:
-
- =: <name> ( n -- ) Store integer to value. It looks nice.
- !> <name> ( n -- ) Store integer into value. Identical to =:
- @> <name> ( -- n ) Return contents of a value.
- +!> <name> Increment value-name by integer
- INCR> <name> Increment value-name by one
- DECR> <name> Decrement value-name by one
- ON> <name> Store -1 into value-name
- OFF> <name> Store 0 into value-name
-
- These operators are written in assembly, so they are very fast. The name
- following these value operators should be defined with VALUE. However,
- these operators will work on constants, variables, and even deferred
- words, but you will have to take responsibility of the consequences.
-
- Variable-constants or VALUE's are very useful in passing data among many
- program modules. One module sets the value in a constant or VALUE and
- many other modules can use it. As VALUE's, constants and variables are
- global in Forth, you have to watch them very carefully in a large
- program. Changing the value of a constant can be deadly if you are not
- aware of its consequences. Use this tool with caution.
-
- The constants -1, 0, 1, 2, and 3 defined in F83 are eliminated in F-PC
- because in F-PC literals are much faster than constants. In-line
- literals are faster than constants and values in F-PC, because (LIT) is
- simply:
-
- CODE (LIT) LODSW ES: 1PUSH END-CODE
-
- However, excessive use of literal numbers will make code very difficult
- to understand. It is much preferred to name the constants and values to
- help documenting your intentions.
-
-
- 4.4. HELP WORDS
-
-
- F-PC provides the standard F83 decompiler command SEE. SEE has been
- modified to display a decompiled source that is in most cases very
- similar to the original source on disk. This capability does not come
- free. The price we pay in F-PC is that every word must have a unique
- address in the Code segment, even when the words have identical code,
- such as IF, UNTIL, and WHILE, which all compile the same ?BRANCH. The
- unique code addresses enable the decompiler to identify and recover the
- proper names to be displayed. The debugger DEBUG and DBG also uses this
- decompiler to display the definition under examination.
-
- REF is the inverse of SEE.
-
- REF <wordname>
-
- searches through all colon words defined in the dictionary and displays
- the names of words which contains <wordname>. This tool is very useful
- in analyzing where a word is used and how often it is used in any
- application.
-
- The help mechanism in F-PC 3.5 is much more polished and powerful than
- that in F83 and F-PC 2.25, because of the hypertext based browser.
- Whenever help is requested, the editor is invoked and the system is put
- into the browsing mode. If a word name is given after a HELP word, a
- .HLP text file is opened and the text about the word is display in the
- editor window. The user can then use the browser to move around looking
- at source code or help text.
-
- The principal help command in F-PC 3.5 is BROWSE. VIEW is made an alias
- of BROWSE to maintain F83 compatibility. B and V are also aliases of
- BROWSE for convenience.
-
- BROWSE <wordname>
-
- opens the .SEQ file in which <wordname> was defined and displays the
- source code of <wordname>.
-
- HELP <wordname>
-
- opens the companion .HLP file to the .SEQ file in which a word is defined
- and displays the help message in the HLP file associated with <wordname>.
- It assumes that the help file exists; otherwise, an error message will be
- displayed.
-
- Used without a word name, HELP enters the editor's browsing mode and
- displays the root help screen of the hypertext help system to assist you
- start ing the investigation of F-PC. While you are browsing a file,
- position the cursor on any word and press <return> or F9. The source
- code of this word will be displayed. If you want to see the help text
- about a word, press Alt-H.
-
- WORDS behaves identically to that in F83 when used normally to display
- the names of definitions in the context vocabulary. It is enhanced in
- F-PC such that if the following string is not a valid name in the context
- vocabulary, it will use the string as a substring template and prints the
- names of all definitions in all vocabularies, whose name contains the
- substring. Two substrings can be attached to WORDS. Many special strings
- can be used after WORDS to show different classes of Forth words. For
- example, WORDS *.* causes all words in all vocabularies to be
- displayed.
-
- The behavior of these very useful help words is summarized as follows:
-
- BROWSE <wordname> Drop into the browsing mode in editor and display the
- source of <wordname>.
- B Shorthand for BROWSE.
- ED <wordname> Drop into the editing mode in editor, display the
- source of <wordname> and ready for editing.
- E Shorthand for ED.
- HELP Drop into the editor and display system help message.
- HELP <wordname> Display help message associated with <wordname>.
- H Shorthand for HELP.
- REF <wordname> Display all words which compile ,wordname>.
- SEE <wordname> Decompile <wordname>.
- VIEW <wordname> Alias of BROWSE.
- V Shorthand for VIEW.
- WORDS Display words in the context vocabulary.
- WORDS xyz Display all words containing the substring 'xyz'.
- WORDS xy ab Display all words containing both 'xy' and 'ab'.
- WORDS *.* Display all words in F-PC.
- WORDS :.* Display all colon words.
- WORDS code.* Display all code words.
- WORDS constant.* Display all constants.
- WORDS defer.* Display all deferred words.
- WORDS total.* Display number of words.
- WORDS udefer.* Display all user deferred words.
- WORDS uvariable.* Display all user variables.
- WORDS value.* Display all value words.
- WORDS variable.* Display all variables.
-
-
- 4.5. DATE AND TIME
-
-
- A complete set of time and date manipulation words has been included in
- F-PC. They call appropriate DOS service functions to provide the
- requested services. The words for getting and setting the date and time
- are as follows:
-
- GETDATE ( -- d1 ) Return d1 a 32 bit binary date
- from the operating system. Bytes
- in d1 are arranged as
- year/month/day/day-of-week.
- SETDATE ( d1 -- ) Given the binary date d1, set the
- system clock to that date.
- GETTIME ( -- d1 ) Return d1 with bytes arranged in
- the order hr/min/sec/100th- sec
- from the operating system.
- SETTIME ( d1 -- ) Given the binary time d1, set the
- system clock to that time.
- .DATE ( -- ) Print to the screen the current date, in the
- format MM/DD/YY, where MM is
- month, DD is day, and YY is year.
- Y-M-D sets the format to
- YY-MM-DD, and D.M.Y sets it to
- DD.MM.YY.
- .TIME ( -- ) Print to the screen the current
- time, in the format HH:MM:SS.HR,
- where HH is in hours, MM in
- minutes, SS in seconds, and HR
- in hundredths of a second.
-
- A special word set is defined in F-PC for measuring elapsed time for real
- time experiments and for characterization of program performance.
-
- TIMER <name> TIMER performs the Forth words following on the
- same command line, and when they finish
- execution, TIMER prints the elapsed time required
- for their execution.
- TIME-RESET Reset the accumulated time value in the double
- variable STIME to zero, in effect resetting the
- current elapsed time to zero.
- .ELAPSED Print the time elapsed since the last TIME_RESET.
-
- TIMER-RESET is used at the beginning of a sequence of operations you want
- to time. The word .ELAPSED is used at the end of the operations to print
- the elapsed time since the last TIME- RESET.
-
- The following words are used to change different fields in the timer:
-
- TENTHS ( tenths_of_a_second -- )
- SECONDS ( seconds -- )
- MINUTES ( minutes -- )
- HOURS ( hours -- )
-
- Time delay words use the DOS time function to obtain very accurate time
- delays. Background processing continues, as pause is called in the wait
- loop. Another deferred word, PAUSE-FUNC, is also in the loop, which can
- be re-assigned to perform any function you want done while the delay is
- occurring.
-
-
- 4.6. COMMENTS
-
-
- All comment words in F83, like (, .(, \, \S are preserved and they behave
- identically in F-PC. However, a file in F-PC is similar to a block in F83
- and \S stops the compilation of the rest of the file. To accommodate
- documentation which spans over many lines, additional comment words are
- defined in F-PC. Multiple line comment in F-PC starts with COMMENT: and
- terminates at COMMENT; . It looks like:
-
- COMMENT:
- <text>
- <more text>
- ...
- <even more text>
- COMMENT;
-
- To print multiple line comments during compiling,
-
- .COMMENT:
- ...
- ...
- COMMENT;
-
- .COMMENT: starts a group of lines that are to be printed to the terminal,
- until a terminating COMMENT; is found.
-
- /* and */ pair can be used to enclose comments similar to the COMMENT:
- and COMMENT; pair. They make the source code look even closer to C code.
-
- Plenty of documentation tools are provided in F-PC. There is no excuse
- not using them to beautify your program.
-
-
- 4.7. SCREEN CONTROL WORDS IN F-PC
-
-
- F-PC allows you to control the CRT screen to generate very fancy text
- displays.
-
- FAST Select the fast screen output routines
- that are very hardware dependent.
-
- The fast mode of screen display is much faster than what BDOS can do, but
- requires very compatible hardware. As FAST stores characters directly
- into the hardware screen buffer, you have to make sure that a carriage
- return is inserted before a line runs over the 79'th column. If you want
- line wrap, use:
-
- SLOW Select the SLOW screen output routines.
-
- The BDOS display routines are less hardware dependent than FAST.
-
- When F-PC is loaded into PC, it asks DOS what kind of video board is in
- the PC and sets the video display mode accordingly. It also allows you
- to change the attributes of displayed characters very conveniently.
-
- In the monochrome mode, you can select from the following list different
- types of characters to be displayed on the screen:
-
- >NONE Normal character display
- >UL Underlined
- >BOLD Bold
- >REV Reversed. Black character on white background.
- >BOLDUL Bold underlined
- >BOLDBLNK Bold blinking
- >REVBLNK Reversed blinking
-
- Characters EMITed to the screen are not affected by the attribute
- selection. To show characters with the selected attribute, used FEMIT or
- TYPE.
-
- F-PC also supports color cards. It asks DOS which card is installed and
- configures the output routines accordingly. In color mode, F-PC gives
- you the following choices:
-
- >BUGN Blue background, green foreground
- >RDWT Red background, white foreground
- >GNWT Green background, white foreground
-
- There are many other choices of background/foreground combinations. The
- following word set allows you to specified any combination of foreground
- and background colors:
-
- >FG ( n1 -- ) Select foreground
- >BG ( n1 -- ) Select background
-
- Words from the COLOR.SEQ file that allow setting the foreground and
- background colors on a color monitor are:
-
- >ATTRIB1 to >ATTRIB8 ( -- )
-
- They are deferred words to allow selection of the various display
- attributes for the current display board. They default to the following
- attributes for Monochrome or Color Card:
-
- MONOCHROME COLOR
- Word bkgrnd frgrnd
-
- >ATTRIB1 UNDERLINE BLUE GREEN
- >ATTRIB2 BOLD UNDERLINE RED WHITE
- >ATTRIB3 BOLD BLUE WHITE
- >ATTRIB4 REVERSE RED WHITE
-
- These values can be changed by changing either COLOR.SEQ, or MONOCROM.SEQ
- and re- generating the system with EXTEND.BAT.
-
- SAVESCR ( -- ) Save screen
- RESTSCR ( -- ) Restore screen
- RECOVERSCR ( -- ) Copy rather than pop the screen stack.
- RECOVERLINE ( n -- ) Copy a line from saved screen stack.
-
- These words give you the ability to save the screen contents and later
- restore the screen to its original appearance in a simple way. SAVESCR
- may be used and nested up to three times before RESTSCR needs to be done.
- That is, three screens can be saved and sequentially restored.
-
-
- 4.8. COMPILATION CONTROL WORDS
-
-
- To load a source file, the most convenient way is to use the command
- FLOAD or its alias INCLUDE:
-
- FLOAD <file-name> <return>
- INCLUDE <file-name> <return>
-
- will open the file and compile the source code starting at the beginning.
- After the file is compiled, FLOAD closes the file so that other files can
- be loaded.
-
- If a file is opened by the editor or by the OPEN command,
-
- OK <return>
-
- compiles the currently open file, starting at the beginning, and
- continuing through the end of the file or until an error is encountered.
-
- <line-number> LOAD <return>
-
- Start loading the current file starting at the <line_number> specified.
- If the stack is empty (no line- number specifier), it starts at line 1.
- It loads through the end of the file or until an error or an \S is
- encountered. OK is defined as 1 LOAD.
-
- The names of all files loaded into the F-PC system are stored in a
- vocabulary FILES. The word .LOADED displays their names.
-
- The word #IF has been added, which accepts a Boolean flag, and determines
- if the lines following #IF are compiled up until the #ENDIF. A TRUE flag
- causes the lines to be compiled. A FALSE flag causes the lines to be
- skipped.
-
- TRUE #IF
- .( This message will be printed.)
- #ENDIF
-
-
- 4.9. PRINTING SOURCE FILES IN F-PC
-
-
- Files can of course be printed while in the editor, but you can also
- print files from a Forth command line as follows:
-
- OPEN <filename> <return> \ Open a file
- LISTING <return> \ Print the file
-
- The print format is the same as the default format for the editor. Every
- page is printed with a header and a footer, suitable for framing. The
- header is taken from the first line in the file. You can thus customize
- the header according to your taste by carefully designing the text in the
- first line. The footer provides the file name, page number, date and
- time. A command which combines the two commands above is:
-
- FPRINT <filespec> <return>
-
- It opens the file and performs a LISTING. Wildcard characters can be
- used in the file specification so that many files are printed with a
- single FPRINT command.
-
- INDEX <filespec> <return>
-
- behaves similarly to FPRINT. However, it displays only the first line of
- each file specified and thus produces a nice table of contents for the
- files selected.
-
- Another very useful word is PRINT. PRINT turns on the printer and
- interprets the commands following it. All the characters sent to the
- screen are now sent to the printer.
-
-
- 4.10. GLOBAL SEARCH
-
-
- One of the neat additions to F-PC is EDITALL. EDITALL is used as
- follows:
-
- EDITALL <string> <filespecs> ... <return>
-
- All files specified are searched for <string>. If the string is found,
- the editor is entered on that line in the file, ready for you to perform
- an edit or replace on the string. If you use F8, the replacement is made
- and the next occurrence is found. Otherwise, only the first occurrence
- of string is located, and repeated Alt-F6 commands can locate additional
- occurrences of string in the file. Shift-F8 Replace-All can also be used
- while in a file to replace all occurrences of a string with another
- string. When you are done editing, press ESC to terminate edit, and the
- search will continue through the filespecs specified for additional
- occurrences of string, until all files have been searched through. This
- has been very valuable in maintaining a system by making global changes
- to all occurrences of a Forth word.
-
- If you want to search a string containing spaces, just type EDITALL
- <return> and you will be prompted for a string to search for.
-
- Another interesting addition to F-PC is:
-
- FLOOK <name> <filespecs> <return>
-
- It performs similarly to EDITALL in searching for a string through many
- files, but it just displays the line number and the line contents of all
- occurrences found without doing anything to the strings found. It is
- very useful to print a report on where a particular string occurred in a
- set of files.
-
-
- 4.11. ALIAS
-
-
- In many occasions, there is a need to shorten the name of a word which we
- expect the user to use very often, like BROWSE, HELP, etc. It is
- wasteful to redefine the function using a short name. ALIAS is a defining
- word which generates a new definition with a head only. Its
- code-pointer- field points to the code field of an existing word. It
- does not need its own code field at all. Examples of its uses are:
-
- ' BROWSE ALIAS B
- ' HELP ALIAS H
-
- The code field address returned by ' is then stored in the head of the
- new word, forcing it to perform the function of a word already defined in
- the dictionary.
-
-
- 4.12. BROWSING A LARGE FILE
-
-
- F-PC generally reads an entire file into the editor buffer for editing
- and browsing. It can handle a file up to about 120K bytes on a 640K byte
- machine. However, if you have to examine a file larger than what the
- memory can hold, you can read in a part of it and browsing through that
- part. VIEWFROM and its alias VF is included to allow viewing very large
- files from a specified starting line number. It is used in the form:
-
- OPEN FPCGLOS.TXT \ A very large file
- 300 VIEWFROM <return>
-
- The above commands skip the first 300 lines of the file and starts
- reading at line 300. This is useful for examining very large files. You
- should of course be careful not to switch to editing mode and change such
- a file lest it get written back to the original file on disk. You can use
- Alt-W to write the read portion of the file out to a new file.
-
-
- 4.13. THE NEWZ EDITOR
-
-
- This is Tom Zimmer's new and improved editor. The execution file and its
- documentation files are put in the NEWZ directory, separated from F-PC.
- This NEWZ editor includes some additional features that make it very
- useful when examining someone else's source code for a program you have
- been given. Tom had experienced the pain associated with taking over
- another person's program for maintenance and change. It can be very
- painful if the program is large and consists of many files. NEWZ can now
- compile an index file of all symbols in your source files. It then
- provides a hypertext browsing environment where you can easily view,
- change, and explore a multitude of source files. You can nest file
- searches and return to where you were. Locating any symbol in a
- multi-thousand symbol index file on an 80286 machine takes less than one
- second. This version of NEWZ supports Forth type words, and assembly
- symbols. Support for additional languages will be provided shortly on an
- as requested basis. See NEWZ's hypertext help under configuration for
- details of how to setup and build an index file of your source files.
-
- NEWZ includes many new features, here is a brief summary:
-
- 1. Work with up to 20 files at one time. (Only one file is in memory
- but switching between files with a hard disk is very quick, and
- requires only a single keystroke.)
-
- 2. Searching is supported within a file, and across multiple files,
- to help find any file that contains a particular character
- sequence.
-
- 3. You can set the default file extension to any three characters.
- The specified extension will be applied to a file when no
- extension is specified.
-
- 4. Maximum file size is limited by available memory, and will
- typically be greater than 250k on a 640k machine.
-
- 5. EGA/VGA high resolution text modes are supported, NEWZ will
- automatically adjust to whatever screen size your display is set
- for up to 132 columns by 60 lines.
-
- 6. You can create your own hypertext systems for training.
-
- 7. NEWZ is very fast, moving around a document, or from one end to
- the other, is limited by the repeat rate of your keyboard, not
- NEWZ's redisplay speed. On a 4.7 MHZ 8088 machine, NEWZ can
- redisplay more than ten full (80x24) screens per second.
-
- 8. NEWZ automatically recognizes and supports a mouse when a driver
- is present. The mouse can be used with pulldown menus, cursor
- positioning, scanning through a document, and text line selection
- for Cut and Copy operations.
-
- 9. You can specify in the NEWZ.CFG configuration file whether you
- want backup copies kept of your edits.
-
- The NEWZ editor is shareware. If you find NEWZ useful in your daily work,
- join other satisfied users and register your copy by sending a check for
- $50.00 to the address below.
-
- Tom Zimmer, 292 Falcato Drive, Milpitas, CA 95035,
- Tel. (408) 263-8859.
-
- You will receive the next upgrade free, and you will be notified of new
- releases about twice a year. Each upgrade will be about $25.00. Be sure
- to send your NEWZ revision date (displayed in the upper right hand corner
- after you leave NEWZ).
-
-
- 4.14. THE SZ EDITOR
-
-
- This is another one of Tom Zimmer's new and improved editors. The major
- improvement is its size, only 18K bytes! It is produced by Tom's new
- target compiler, which is designed to generate tight and secure
- application programs from F-PC source. It only compiles what is needed
- in the application and discards Forth words which are not used by the
- application.
-
- SZ is very simple to use. Type:
-
- SZ <filename> <return>
-
- and you can edit the file immediately. Press F1 or ESC pops up and help
- screen showing all the commands available. It has the general look and
- feel of SED, without the complications. It is quite sufficient for
- writing programs and research papers.
-
- SZ is a public domain program. You can distribute it freely. Contact
- Tom if you need a customized editor, or if you are interested in his
- target compiler.