v23i083: ABC interactive programming environment, Part04/25

Rich Salz rsalz at bbn.com
Tue Dec 18 05:35:33 AEST 1990


Submitted-by: Steven Pemberton <steven at cwi.nl>
Posting-number: Volume 23, Issue 83
Archive-name: abc/part04

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then feed it
# into a shell via "sh file" or similar.  To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix at uunet.uu.net if you want that tool.
# Contents:  abc/abc.1 abc/bed/e1tabl.c abc/ex/wsgroup.abc
# Wrapped by rsalz at litchi.bbn.com on Mon Dec 17 13:27:53 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
echo If this archive is complete, you will see the following message:
echo '          "shar: End of archive 4 (of 25)."'
if test -f 'abc/abc.1' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'abc/abc.1'\"
else
  echo shar: Extracting \"'abc/abc.1'\" \(23759 characters\)
  sed "s/^X//" >'abc/abc.1' <<'END_OF_FILE'
X.if t \{\
X.\" replace this with some constant width font (for ABC characters):
X.ds <: \\fC
X.\" we filled in \\fC (Courier) for Postscript printers;
X.\" use \\f(CW on Versatec;
X.\" use \\f(lp on Harris typesetter.
X.ds :> \\fP
X.ds [ [\\s-2
X.ds ] \\s+2]
X.ds _ \\v'+0u'\(ru\\v'-0u'\|
X.ds * \\v'+18u'\s+2*\s0\\v'-18u'\"lower and larger
X.ds dg \\(dg
X.ds <= \\(<=
X.ds Q \&`
X.ds U \&'
X.ds uA \\(ua
X.ds dA \\(da
X.ds .5 .5v
X.ds .3 .3v\}
X.if n \{\
X.ds <: \\fR
X.ds :> \\fP
X.ds [ [
X.ds ] ]
X.ds _ _
X.ds * *
X.ds dg *
X.ds <= <=
X.ds Q \&'
X.ds U \&'
X.ds uA ^
X.ds dA v
X.ds .5 1v
X.ds .3 1v\}
X.TH ABC 1 local
X.tr **
X.SH NAME
Xabc \-
XABC interpreter & environment
X.br
Xabckeys \-
Xchange key bindings for \*Qabc\*U
X.SH SYNOPSIS
X.B "abc\ \ \ "
X[workspace and editor options]  [file ...]
X.br
X.B "abc\ \ \ "
X[workspace and task options]
X.br
X.B "abckeys"
X.SH DESCRIPTION
XWithout options or files, the ABC interpreter is started, using the
XABC editor, in the last workspace used or in workspace \*Q\fIfirst\fP\*U
Xif this is your first abc session.
XA workspace is kept as a group of files in a directory,
Xwith separate files for each how-to and location.
XThe workspace directories themselves are kept by default in the
Xdirectory $HOME/abc.
XOn non-Unix machines, $HOME is the disk you are working on.
X.PP
XWorkspace Options:
X.TP 14n
X.B "-W" "dir"
Xuse group of workspaces in \*Qdir\*U instead of $HOME/abc.
X.TP
X.B "-w" "name"
Xstart in workspace \*Qname\*U instead of last workspace used.
X.TP
X.B "-w" "path"
Xuse \*Qpath\*U as workspace (no -W option allowed).
X.PP
XEditor option:
X.TP 14n
X.B "-e"
XUse $EDITOR as editor to edit definitions, instead of ABC editor (Unix only).
X.TP
X.B "file" "..."
XRead commands from file(s) instead of from standard input;
Xinput for \*(<:READ\*(:> commands is taken from standard input.
XIf a file is called \*Q-\*U and standard input is the keyboard,
Xthe ABC system is started up interactively for that entry.
X.PP
XSpecial tasks:
X.TP 14n
X.B "-i" "tab"
XFill table \*Qtab\*U with text lines from standard input
X.TP
X.B "-o" "tab"
XWrite text lines from table \*Qtab\*U to standard output
X.TP
X.B "-l"
XList the how-to's in workspace on standard output
X.TP
X.B "-r"
XRecover a workspace when its index is lost: useful after a machine
Xcrash if the ABC internal administration files didn't get written out.
X.TP
X.B "-R"
XRecover the index of a group of workspaces
X.SH USAGE
X(This is necessarily a very brief description; see \*QThe ABC
XProgrammer's Handbook\*U for full details.)
X.sp \*(.3
XUse \*Q\*(<:QUIT\*(:>\*U to finish an ABC session.
X.sp \*(.3
XWhen ABC starts up interactively, it displays a prompt and awaits
Xinput.
X.sp \*(.3
XTYPING AND SUGGESTIONS:
Xas you type, the system tries to suggest a possible continuation for
Xwhat you have typed;
Xto accept the suggestion, press [accept] (by default this is bound to
Xthe \*[TAB\*] key;
Xtype \*Q\*(<:?\*(:>\*U to find out the bindings for the keyboard you
Xare using).
XIf you don't want to accept the suggestion, just carry on typing (you
Xcan always type character for character, ignoring the suggestions).
XUsually the system knows where a letter must be capital and where not,
Xand you usually don't have to use the shift key; however, in the few
Xplaces where both a lower-case and an upper-case letter would be
Xlegal (for instance for \*(<:AND\*(:>), you have to type the letter upper-case.
X.sp \*(.3
XWhen you type a control command, like \*(<:WHILE\*(:>, the system provides
Xindentation automatically for the body of the command; to reduce the
Xindentation one level, type [return].
X.sp \*(.3
XCORRECTING AND EDITING:
Xthe [undo] key (by default bound to backspace) undoes the last key you
Xtyped.
XRepeatedly typing it undoes more and more, up to a certain maximum
Xnumber of keypresses.
X.sp \*(.3
XTo correct other parts, you must put the \*Qfocus\*U onto the part you
Xwant to change.
XThe focus is displayed by underlining or reverse video.
X[Widen] and [extend] make the focus larger,
X[first] and [last] make it smaller.
X.sp \*(.3
X[Delete] deletes the contents of the focus.
X.sp \*(.3
X[Copy] copies the contents of the focus to a buffer, or if the focus
Xis not focussed on anything, copies the contents of the buffer back to
Xwhere you are positioned.
X.sp \*(.3
XMOVING THE FOCUS:
X[Upline] and [downline] focus on one line above or below.
X[Previous] and [next] move the focus left and right.
X[Up], [down], [left], and [right] move an empty focus around.
X[Goto] widens the focus to the largest thing at the current position.
X.sp \*(.3
XOTHER OPERATIONS:
X[Look] redraws the screen; [record] records all keystrokes until the
Xnext time you press [record] \(em [play] replays them.
X[Redo] redoes the last key(s) undone; [interrupt] interrupts a running
Xcommand.
X.sp \*(.3
XWORKSPACES:
XTo create a new workspace, or go to an existing workspace, type
X\*Q\*(<:>name\*(:>\*U.
XTo go to the last workspace you were in, type a single \*Q\*(<:>\*(:>\*U.
XTo get a list of workspace names, type \*Q\*(<:>>\*(:>\*U.
X.sp \*(.3
XHOW-TO's:
XTo create a new how-to, just type the first line of the how-to.
XThis creates the new how-to, and allows you to type the body.
XUse [exit] to finish it (by default \*[ESC\*]\*[ESC\*]).
X.sp \*(.3
XTo visit a how-to, type a colon, followed by the name of the how-to.
XAgain, use [exit] to exit.
XTo visit the last how-to again, or the last how-to you got an error
Xmessage for, type a single \*Q\*(<::\*(:>\*U.
XTo get a list of the how-to's in this workspace, type \*Q\*(<:::\*(:>\*U.
X.sp \*(.3
XTo edit a location, type a \*Q\*(<:=\*(:>\*U followed by the name of the location.
XTo re-edit it, type a single \*Q\*(<:=\*(:>\*U.
XTo get a list of the locations in the workspace, type \*Q\*(<:=\|=\*(:>\*U.
X.SH KEY BINDINGS
XThe binding of editing operations like [accept] to keys
Xmay be different for your keyboard;
Xtype a \*Q\*(<:?\*(:>\*U at the prompt to find out what the bindings are
Xfor your keyboard.
X.br
XTo redefine the keys used for editor operations, run \*Qabckeys\*U.
XThis produces a private key definitions file.
XYou will be given instructions on how to use it.
X.br
XKeys labeled
X.I f1...f8
Xare
X.I "function keys."
XOn Unix, the way to type these is terminal-dependent.
XThe codes they send must be defined by the termcap entry for your terminal.
X.br
XIf a terminal has arrow keys 
X.if t \*(uA, \(<-, \(->, \*(dA
Xwhich transmit codes to the computer,
Xthese should be used for Up, Down, Left and Right.
XAgain, the termcap entry must define the codes.
X.br
XThe Goto operation is of most use if the cursor can be moved
Xlocally at the terminal, or if the terminal has a mouse;
Xthe Goto operation will sense the terminal for the cursor or mouse position.
XOn Unix, we use two extra non-standard termcap capabilities for this:
X\&\*Qsp\*U which gives the
Xstring that must be sent to the terminal to sense the cursor position,
Xand \*Qcp\*U which defines the format of the reply (in the same format as
Xother cursor-addressing strings in termcap).
XIf your terminal's mouse-click sends the position of the click
Xautomatically, just set \*Qsp\*U to the empty string.
XSee
X.IR termcap (5)
Xfor more details.
X.SH FILES
X.ta 5c
X.if n .ta 25
X.nf
X\&$HOME/copybuf.abc	copy buffer between sessions
X\&$HOME/abc/wsgroup.abc	table mapping workspace names to directory names
X\&$HOME/abc/abckeys\*_$TERM	private key definitions file (Unix only)
X\&$HOME/abc/abc.key	private key definitions file (non-Unix)
X\&position.abc	focus position of edited how-to's in workspace
X\&perm.abc	table mapping object names to file names
X\&suggest.abc	suggestion list for user-defined commands
X\&types.abc	table with codes for typechecking between how-to's
X\&\**.cmd	command how-to's in this workspace
X\&\**.zfd, \&\**.mfd, \&\**.dfd	function how-to's in this workspace
X\&\**.zpd, \&\**.mpd, \&\**.dpd	predicate how-to's in this workspace
X\&\**.cts	permanent locations in this workspace
Xabc.msg	messages file, used for errors (not on Macintosh)
Xabc.hlp	helpfile with this text (MacABC.help on Macintosh)
X.fi
X.sp \*(.3
XThe latter two are searched for first in your startup directory,
Xthen in $HOME/abc, and finally, on Unix,
Xin a directory determined by the installer of ABC.
XOn the IBM PC and Atari ST the directories in your $PATH are used
Xin the last stage
X(if you have a hard disk place these files
Xin the workspaces directory \*(<:abc\*(:>).
X.SH ATARI ST IMPLEMENTATION
XThere are four files supplied: the program \*(<:abc.tos\*(:> itself,
X\&\*(<:abckeys.tos\*(:> for changing your key bindings,
Xthe help file \&\*(<:abc.hlp\*(:>,
Xand the error messages file \*(<:abc.msg\*(:>.
X(See FILES above.)
X.br
XIf you start ABC up from the desktop, and you want to use the options given
Xabove, like \*(<:-w\*(:>,
Xyou should rename \*(<:abc.tos\*(:> to \*(<:abc.ttp\*(:>.
XThere is an additional facility for redirecting input and output:
Xthe parameter \*(<:>outfile\*(:> redirects all output from ABC to the file
Xcalled \*(<:outfile\*(:>,
Xand similarly \*(<:<infile\*(:> takes its input from the file called \*(<:infile\*(:>.
X.SH IBM PC IMPLEMENTATION
XThere are four files for running ABC, the program \*(<:abc.exe\*(:> itself,
X\&\*(<:abckeys.exe\*(:> for changing your key bindings,
Xthe help file \*(<:abc.hlp\*(:>,
Xand the error messages file \*(<:abc.msg\*(:>.
X(See FILES above.)
X.br
XIf your screen size is non-standard, or your machine is not 100% BIOS
Xcompatible (which is unusal these days), you can specify the screen-size,
Xand whether to use the BIOS or ANSI.SYS for output, by typing after
Xthe \*(<:A>\*(:> prompt, before you start ABC up, one of the following:
X.RS
X.nf
X\&\*(<:SET SCREEN=ANSI \*(:>\fIlines cols\fP
X\&\*(<:SET SCREEN=BIOS \*(:>\fIlines cols\fP
X.fi
X.RE
XIf you are going to use \*(<:ANSI.SYS\*(:>,
Xbe sure you have the line
X.RS
X\&\*(<:DEVICE=ANSI.SYS\*(:>
X.RE
Xin your \*(<:CONFIG.SYS\*(:> file.
XConsult the DOS manual for further details.
X.SH APPLE MACINTOSH IMPLEMENTATION
XThere are three files supplied: \*(<:MacABC\*(:>, the application itself,
X\&\*(<:MacABC.help\*(:>, the help file,
Xand \*(<:MacABC.doc\*(:>, a MacWrite document containing a variant
Xof this text.
XThe help file should be in the same folder as MacABC,
Xor in your System Folder.
X.br
XMacABC runs in a single window.
XYou'll notice that most operations are menu entries,
Xas well as being possible from the keyboard.
XYou can start ABC up by double-clicking the MacABC icon
Xin which case you start up in the last workspace used,
Xor by double-clicking on any icon in a workspace,
Xin which case you start in that workspace.
XIn this latter case, if the filename of the icon you clicked on
Xends in \*(<:.cmd\*(:>, that how-to is executed,
Xbut the how-to may not have any parameters.
X.br
XInstead of the special option flags mentioned above, most of the tasks,
Xlike recovering a workspace, can be done from the File menu.
X.br
X.ps 8
X.vs 10p
X\*(dg Notes for Macintosh guru's:
X.br
XThe messages are \*(<:STR#\*(:> resources in MacABC; you must use a
Xresource editor to change them.
X.br
XMacABC uses \*(<:Monaco 9\*(:> for the screen, and \*(<:Courier 10\*(:>
Xfor printing.
XYou can change them with ResEdit,
Xby editing the resource with type \*(<:Conf\*(:>
Xand ID \*(<:0\*(:>.
XThe horizontal and vertical window-size and the window-title can
Xalso be adapted there.
XTo facilitate this,
Xfirst Paste the \*(<:TMPL\*(:> resource with ID \*(<:5189\*(:>
Xnamed \*(<:Conf\*(:> from MacABC to (a copy of) ResEdit.
XBut beware, MacABC only works properly with Fixed-width Fonts like
X\&\*(<:Monaco\*(:> and \*(<:Courier\*(:>.
X.ps
X.vs
X.SH SEE ALSO
X.in +.5i
X.ti -.5i
XLeo Geurts, Lambert Meertens and Steven Pemberton,
X.I "The ABC Programmer's Handbook,"
XPrentice-Hall, Englewood Cliffs, New Jersey, 1989,
XISBN\ 0-13-000027-2.
X.ti -.5i
XSteven Pemberton,
X.I "An Alternative Simple Language and Environment for PCs,"
XIEEE Software, Vol. 4, No. 1, January 1987, pp. 56-64.
X.ti -.5i
X.I "The ABC Newsletter."
XAvailable free from CWI.
X.SH AUTHORS
XFrank van Dijk,
XLeo Geurts,
XTimo Krijnen,
XLambert Meertens,
XSteven Pemberton,
XGuido van Rossum.
X.SH ADDRESS
XABC Distribution,
XCWI/AA,
XPostbox 4079,
X1009 AB Amsterdam,
XThe Netherlands.
X.br
XE-mail: \*Qabc at cwi.nl\*U.
X.fl
X.ne 5v
X.SH SUMMARY OF SPECIAL ACTIONS
X.rs
X.ta 2.5c
X.if n .ta 8
X.nf
X.sp
X\*(<::\*(:>\fIname\fP	Visit how-to called \*Qname\*U
X\*(<::\*(:>	Visit last how-to refered to
X\*(<:::\*(:>	Display headings of how-to's in this workspace
X.sp \*(.3
X\*(<:=\*(:>\fIname\fP	Visit contents of location
X\*(<:=\*(:>	Visit last location visited
X\*(<:==\*(:>	Display names of permament locations in this workspace
X.sp \*(.3
X\*(<:>\*(:>\fIname\fP	Visit workspace \*Qname\*U
X\*(<:>\*(:>	Visit last workspace visited
X\*(<:>>\*(:>	Display list of workspace names
X.sp \*(.3
X\*(<:QUIT\*(:>	Leave ABC
X.fi
X.ne 5v
X.SH SUMMARY OF EDITING OPERATIONS
X.rs
X.ta 2.5c 5.5c
X.if n .ta 10 27
X.nf
X.sp
XName	Default Keys\*(dg	Short description
X.sp \*(.3
XAccept	\*[TAB\*]	Accept suggestion, focus to hole or end of line
XReturn	\*[RETURN\*]	Add line or decrease indentation
X.sp \*(.3
XWiden	\fIf1\fP, \*[ESC\*] w	Widen focus
XExtend	\fIf2\fP, \*[ESC\*] e	Extend focus (usually to the right)
XFirst	\fIf3\fP, \*[ESC\*] f	Move focus to first contained item
XLast	\fIf4\fP, \*[ESC\*] l	Move focus to last contained item
X.sp \*(.3
XPrevious	\fIf5\fP, \*[ESC\*] p	Move focus to previous item
XNext	\fIf6\fP, \*[ESC\*] n	Move focus to next item
XUpline	\fIf7\fP, \*[ESC\*] u	Move focus to whole line above
XDownline	\fIf8\fP, \*[ESC\*] d	Move focus to whole line below
X.sp \*(.3
XUp	\*(uA, \*[ESC\*] U	Make new hole, move up
XDown	\*(dA, \*[ESC\*] D	Make new hole, move down
XLeft	\(<-, \*[ESC\*] ,	Make new hole, move left
XRight	\(->, \*[ESC\*] .	Make new hole, move right
X.sp \*(.3
XGoto	\*[ctrl-G\*], \fImouseclick\fP  	New focus at cursor position
X.sp \*(.3
XUndo	\*[BACKSPACE\*]	Undo effect of last key pressed (may be repeated)
XRedo	\*[ctrl-U\*]	Redo last UNDOne key (may be repeated)
X.sp \*(.3
XCopy	\fIf9\fP, \*[ctrl-C\*], \*[ESC\*]c  	Copy buffer to hole, or focus to buffer
XDelete	\*[ctrl-D\*]	Delete contents of focus (to buffer if empty)
X.sp \*(.3
XRecord	\*[ctrl-R\*]	Start/stop recording keystrokes
XPlay	\*[ctrl-P\*]	Play back recorded keystrokes
X.sp \*(.3
XLook	\*[ctrl-L\*]	Redisplay screen
XHelp	\fIf10\fP, \*[ESC\*]?	Print summary of editing operations
X.sp \*(.3
XExit	\*[ctrl-X\*]	Finish changes or execute command
XInterrupt (as set by \*Qstty\*U)	Interrupt command execution
XSuspend (as set by \*Qstty\*U)	Suspend ABC (only for shell with job control)
X.fi
X.sp
X\*(dg Notes:
X.sp \*(.3
X\*[Ctrl-D\*] means: hold the \*[CTRL\*] (or \*[CONTROL\*]) key down while pressing d.
X.br
X\&\*[ESC\*] w means: press the \*[ESC\*] key first, then w.
X.fl
X.if t .bp
X.SH ABC QUICK REFERENCE
X.PD 0v
X.nh
X.de Sh
X.fl
X.if t .ne 5
X.sp \*(.5
X.LP
X.if t .ft 3
X\&\\$1
X.if t .ft 1
X.sp \*(.5
X..
X.de Lp
X.sp \*(.3
X..
X.de LI
X.fl
X.if t .ft 2
X.if t .TP 36n
X.if n .TP 30n
X.if n .nr LL 81m
X..
X.de IS
X.if t .ft 1
X..
X.rs
X.Sh "COMMANDS"
X.LI
X\*(<:WRITE\*(:> expr
X.IS
XWrite to screen;
X.if n .br
X\*(<:/\*(:> before or after \fIexpr\fP gives new line
X.LI
X\*(<:READ\*(:>\ address\ \*(<:EG\*(:>\ expr
X.IS
XRead expression from terminal to \fIaddress\fP;
X.if n .br
X\fIexpr\fP is example
X.LI
X\*(<:READ\*(:> address \*(<:RAW\*(:>
X.IS
XRead line of text
X.LI
X\*(<:PUT\*(:> expr \*(<:IN\*(:> address
X.IS
XPut value of \fIexpr\fP in \fIaddress\fP
X.LI
X\*(<:SET\ RANDOM\*(:>\ expr
X.IS
XStart random sequence for \*(<:random\*(:> and \*(<:choice\*(:>
X.LI
X\*(<:REMOVE\*(:> expr \*(<:FROM\*(:> list
X.IS
XRemove one element from \fIlist\fP
X.LI
X\*(<:INSERT\*(:> expr \*(<:IN\*(:> list
X.IS
XInsert in right place
X.LI
X\*(<:DELETE\*(:> address
X.IS
XDelete permanent location or table entry
X.LI
X\*(<:PASS\*(:>
X.IS
XDo nothing
X.LI
X\*(<:\fIKEYWORD\fR\*(:>\ expr \*(<:\fIKEYWORD\fR\*(:>\ .\^.\^.
X.IS
XExecute user-defined command
X.LI
X\*(<:\fIKEYWORD\fR\*(:>
X.IS
XExecute refined command
X.Lp
X.LI
X\*(<:CHECK\*(:> test
X.IS
XCheck \fItest\fP and stop if it fails
X.LI
X\*(<:IF\*(:> test\*(<::\*(:>
X.IS
XIf \fItest\fP succeeds, execute \fIcommands\fP;
X.LI
X\*(<:   \*(:>commands
X.IS
X    no \*(<:ELSE\*(:> allowed
X.fl
X.ne 4
X.LI
X\*(<:SELECT:\*(:>
X.IS
XSelect one alternative:
X.LI
X\*(<:    \*(:>test\*(<::\*(:> commands
X.IS
X     try each \fItest\fP in order
X.LI
X\*(<:    \*(:>.\^.\^.
X.IS
X     (one must succeed;
X.LI
X\*(<:    \*(:>test\*(<::\*(:> commands
X.IS
X     the last \fItest\fP may be \*(<:ELSE\*(:>)
X.LI
X\*(<:WHILE\*(:> test\*(<::\*(:>
X.IS
XAs long as \fItest\fP succeeds
X.LI
X\*(<:   \*(:>commands
X.IS
X    execute \fIcommands\fP
X.LI
X\*(<:FOR\*(:>\ name\*(<:,\*(:>\^.\^.\^.\ \*(<:IN\*(:>\ train\*(<::\*(:>
X.IS
XTake each element of \fItrain\fP in turn
X.LI
X\*(<:   \*(:>commands
X.IS
X.Sh "HOW-TO's"
X.LI
X\*(<:HOW\ TO\ \fIKEYWORD\fR\*(:>\ .\^.\^.\*(<::\*(:>
X.IS
XDefine new command \fIKEYWORD\fP\ .\^.\^.
X.LI
X\*(<:   \*(:>commands
X.IS
X.LI
X\*(<:HOW\ TO\ RETURN\*(:>\ f\*(<::\*(:>
X.IS
XDefine new function \fIf\fP with no arguments
X.LI
X\*(<:   \*(:>commands
X.IS
X   (returns a value)
X.LI
X\*(<:HOW\ TO\ RETURN\*(:>\ f\ x\*(<::\*(:>
X.IS
XDefine new function \fIf\fP with one argument
X.LI
X\*(<:   \*(:>commands
X.IS
X.LI
X\*(<:HOW\ TO\ RETURN\*(:> x f y\*(<::\*(:>
X.IS
XDefine new function \fIf\fP with two arguments
X.LI
X\*(<:   \*(:>commands
X.IS
X.LI
X\*(<:HOW\ TO\ REPORT\*(:> pr\*(<::\*(:>
X.IS
XDefine new predicate \fIpr\fP with no arguments
X.LI
X\*(<:   \*(:>commands
X.IS
X   (succeeds/fails) 
X.LI
X\*(<:HOW\ TO\ REPORT\*(:> pr x\*(<::\*(:>
X.IS
XDefine new predicate \fIpr\fP with one argument
X.LI
X\*(<:   \*(:>commands
X.IS
X.LI
X\*(<:HOW\ TO\ REPORT\*(:> x pr y\*(<::\*(:>
X.IS
XDefine new predicate \fIpr\fP with two arguments
X.LI
X\*(<:   \*(:>commands
X.IS
X.Lp
X.LI
X\*(<:SHARE\*(:> name\*(<:,\*(:>.\^.\^.
X.IS
XShare permanent locations
X.if n .br
X(before commands of how-to)
X.Sh "Refinements (after the commands of a how-to)"
X.LI
XKEYWORD \*(<::\*(:> commands
X.IS
XDefine command refinement
X.LI
Xname\*(<::\*(:> commands
X.IS
XDefine expression- or test-refinement
X.Sh "Terminating commands" ""
X.LI
X\*(<:QUIT\*(:>
X.IS
XLeave command how-to or command refinement,
X.br
Xor leave ABC
X.LI
X\*(<:RETURN\*(:> expr
X.IS
XLeave function how-to or expression refinement,
X.if t .br
Xreturn value of \fIexpr\fP
X.LI
X\*(<:REPORT\*(:> test
X.IS
XLeave predicate how-to or test-refinement,
X.br
Xreport outcome of \fItest\fP
X.LI
X\*(<:SUCCEED\*(:>
X.IS
XThe same, report success
X.LI
X\*(<:FAIL\*(:>
X.IS
XThe same, report failure
X.Sh "EXPRESSIONS AND ADDRESSES"
X.LI
X\*(<:666\*(:>,\ \*(<:3.14\*(:>,\ \*(<:3.14e-9\*(:>
X.IS
XExact constants
X.Lp
X.LI
Xexpr\*(<:,\*(:>expr\*(<:,\*(:>\^.\^.\^.
X.IS
XCompound
X.LI
Xname\*(<:,\*(:>name\*(<:,\*(:>\^.\^.\^.
X.IS
XNaming (may also be used as address)
X.Lp
X.LI
Xtext\|\*(<:@\*(:>\|p
X.IS
X\*(<:"ABCD"@2 = "BCD"\*(:> (also address)
X.\"Trimmed text, from p-th character on (also address)
X.LI
Xtext\*(<:|\*(:>q
X.IS
X\*(<:"ABCD"|3 = "ABC"\*(:> (also address)
X.\"The same, first q characters (also address)
X.LI
Xtext\|\*(<:@\*(:>\|p\*(<:|\*(:>q
X.IS
X\*(<:"ABCD"@2|1 = "BCD"|1 = "B"\*(:>
X.\"The same, from p-th on, first q characters (also location)
X.Lp
X.LI
Xtable\*(<:[\*(:>expr\*(<:]\*(:>
X.IS
XTable selection (also address)
X.Lp
X.LI
X\*(<:"Jan"\*(:>,\ \*(<:'Feb'\*(:>,\ \*(<:'Won''t!'\*(:>
X.IS
XTextual displays (empty: \*(<:""\*(:> or \*(<:''\*(:>)
X.LI
X\*(<:"value\ =\ `\*(:>expr\*(<:`;"\*(:>
X.IS
XConversion of \fIexpr\fP to text
X.Lp
X.LI
X\*(<:{1;\ 2;\ 2;\*(:>\ .\^.\^.\^\*(<:}\*(:>
X.IS
XList display (empty: \*(<:{}\*(:>)
X.LI
X\*(<:{1..9;\*(:>\ .\^.\^.\^\*(<:}\*(:>,\ \*(<:{"a".."z";\*(:>\ .\^.\^.\^\*(<:}\*(:>
X.IS
XList of consecutive values
X.Lp
X.LI
X\*(<:{["Jan"]: 1; ["Feb"]: 2; \*(:>.\^.\^.\^\*(<:}\*(:>
X.IS
XTable display (empty: \*(<:{}\*(:>)
X.Lp
X.LI
Xf,\ f x,\ x f y
X.IS
XResult of function \fIf\fP (no permanent effects)
X.LI
Xname
X.IS
XResult of refinement (no permanent effects)
X.Sh "TESTS"
X.LI
Xx \*(<:<\*(:> \|y,\ x \*(<:<=\*(:> \|y,\ x \*(<:>=\*(:> \|y,\ x \*(<:>\*(:> \|y
X.IS
XOrder tests
X.LI
Xx \*(<:=\*(:> \|y,\ x \*(<:<>\*(:> \|y
X.IS
X     (\*(<:<>\*(:> means \*Qnot equals\*U)
X.LI
X\*(<:0\ <=\ d\ <\ 10\*(:>
X.Lp
X.LI
Xpr,\ pr x,\ x pr y
X.IS
XOutcome of predicate \fIpr\fP (no permanent effects)
X.LI
Xname
X.IS
XOutcome of refinement (no permanent effects)
X.Lp
X.LI
Xtest\ \*(<:AND\*(:>\ test\ \*(<:AND\*(:>\ .\^.\^.
X.IS
XFails as soon as one of the tests fails
X.LI
Xtest\ \*(<:OR\*(:>\ test\ \*(<:OR\*(:>\ .\^.\^.
X.IS
XSucceeds as soon as one of the tests succeeds
X.LI
X\*(<:NOT\*(:>\ test
X.Lp
X.LI
X\*(<:SOME \*(:>name\*(<:,\*(:>\^.\^.\^. \*(<:IN\*(:> train \*(<:HAS\*(:> test
X.IS
X.if n .br
XSets \fIname\fP, .\^.\^. on success
X.LI
X\*(<:EACH \*(:>name\*(<:,\*(:>\^.\^.\^. \*(<:IN\*(:> train \*(<:HAS\*(:> test
X.IS
X.if n .br
XSets \fIname\fP, .\^.\^. on failure
X.LI
X\*(<:NO   \*(:>name\*(<:,\*(:>\^.\^.\^. \*(<:IN\*(:> train \*(<:HAS\*(:> test
X.IS
X.if n .br
XSets \fIname\fP, .\^.\^. on failure
X.ne 5
X.Sh "PREDEFINED FUNCTIONS AND PREDICATES"
X.ns
X.Sh "Functions and predicates on numbers"
X.LI
X\*(<:~\*(:>x
X.IS
XApproximate value of \fIx\fP
X.LI
X\*(<:exactly\*(:>\ x
X.IS
XExact value of \fIx\fP
X.LI
X\*(<:exact\*(:> x
X.IS
XTest if \fIx\fP is exact
X.LI
X\*(<:+\*(:>x,\ x\*(<:+\*(:>y,\ x\*(<:-\*(:>y,\ \*(<:-\*(:>x,\ x\*(<:*\*(:>y,\ x\*(<:/\*(:>y
X.IS
XPlain arithmetic
X.LI
Xx\*(<:**\*(:>y
X.IS
X\fIx\fP raised to the power \fIy\fP
X.LI
X\*(<:root\*(:>\ x,\ n\ \*(<:root\*(:>\ x
X.IS
XSquare root, \fIn\fP-th root
X.LI
X\*(<:abs\*(:>\ x,\ \*(<:sign\*(:>\ x
X.IS
XAbsolute value, sign (= \(mi1, 0, or +1)
X.LI
X\*(<:round\*(:>\ x,\ \*(<:floor\*(:>\ x,\ \*(<:ceiling\*(:>\ x
X.IS
XRounded to whole number
X.LI
Xn\ \*(<:round\*(:>\ x
X.IS
X\fIx\fP rounded to \fIn\fP digits after decimal point
X.LI
Xa\ \*(<:mod\*(:>\ n
X.IS
XRemainder of \fIa\fP on division by \fIn\fP
X.LI
X\*(<:*/\*(:>x
X.IS
XNumerator of exact number \fIx\fP
X.LI
X\*(<:/*\*(:>x
X.IS
XDenominator
X.LI
X\*(<:random\*(:>
X.IS
XRandom approximate number \fIr\fP, 0 \*(<= \fIr\fP < 1
X.LI
X\*(<:e\*(:>,\ \*(<:exp\*(:>\ x
X.IS
XBase of natural logarithm, exponential function
X.LI
X\*(<:log\*(:>\ x,\ b\ \*(<:log\*(:>\ x
X.IS
XNatural logarithm, logarithm to the base \fIb\fP
X.LI
X\*(<:pi\*(:>,\ \*(<:sin\*(:>\ x,\ \*(<:cos\*(:>\ x,\ \*(<:tan\*(:>\ x,\ \*(<:arctan\*(:>\ x
X.IS
X.if n .br
XTrigonometric functions, with \fIx\fP in radians
X.LI
X\*(<:angle\*(:>\ (x,\ y),\ \*(<:radius\*(:>\ (x,\ y)
X.IS
XAngle of and radius to point \fI(x,\ y)\fP
X.LI
Xc\ \*(<:sin\*(:>\ x,\ c\ \*(<:cos\*(:>\ x,\ c\ \*(<:tan\*(:>\ x
X.IS
XSimilar, with the circle divided into \fIc\fP parts
X.LI
Xc\ \*(<:arctan\*(:>\ x,\ c\ \*(<:angle\*(:>\ (x,\ y)
X.IS
X    (e.g. 360 for degrees)
X.LI
X\*(<:now\*(:>
X.IS
Xe.g. \*(<:(1999, 12, 31, 23, 59, 59.999)\*(:>
X.Sh "Functions on texts"
X.LI
Xt\*(<:^\*(:>u
X.IS
X\fIt\fP and \fIu\fP joined into one text
X.LI
Xt\*(<:^^\*(:>n
X.IS
X\fIt\fP repeated \fIn\fP times
X.LI
X\*(<:lower\*(:>\ t
X.IS
X\*(<:lower "aBc" = "abc"\*(:>
X.LI
X\*(<:upper\*(:>\ t
X.IS
X\*(<:upper "aBc" = "ABC"\*(:>
X.LI
X\*(<:stripped\*(:>\ t
X.IS
XStrip leading and trailing spaces from \fIt\fP
X.LI
X\*(<:split\*(:>\ t
X.IS
XSplit text \fIt\fP into words
X.Sh "Function on tables"
X.LI
X\*(<:keys\*(:> table
X.IS
XList of all keys in \fItable\fP
X.Sh "Functions and predicates on trains"
X.LI
X\*(<:#\*(:>train
X.IS
XNumber of elements in \fItrain\fP
X.LI
Xe\*(<:#\*(:>train
X.IS
XNumber of elements equal to \fIe\fP
X.LI
Xe \*(<:in\*(:> train,\ e \*(<:not.in\*(:> train
X.IS
XTest for presence or absence
X.LI
X\*(<:min\*(:> train
X.IS
XSmallest element of \fItrain\fP
X.LI
Xe \*(<:min\*(:> train
X.IS
XSmallest element larger than \fIe\fP
X.LI
X\*(<:max\*(:> train,\ e \*(<:max\*(:> train
X.IS
XLargest element
X.LI
Xtrain \*(<:item\*(:> n
X.IS
X\fIn\fP-th element
X.LI
X\*(<:choice\*(:> train
X.IS
XRandom element
X.Sh "Functions on all types"
X.LI
Xx\*(<:<<\*(:>n
X.IS
X\fIx\fP converted to text, aligned left in width \fIn\fP
X.LI
Xx\*(<:><\*(:>n
X.IS
XThe same,\ centred
X.LI
Xx\*(<:>>\*(:>n
X.IS
XThe same, aligned right
X.Sh "THE CHARACTERS"
X.LI
X\&\*(<: !"#$%&'()*+,-./\*(:>
X.IS
XThis is the order of all characters
X.LI
X\&\*(<:0123456789:;<=>?\*(:>
X.IS
Xthat may occur in a text.
X.LI
X\*(<:@ABCDEFGHIJKLMNO\*(:>
X.IS
X(The first is a space.)
X.LI
X\*(<:PQRSTUVWXYZ[\e]^_\*(:>
X.LI
X\*(<:`abcdefghijklmno\*(:>
X.LI
X\*(<:pqrstuvwxyz{|}~\*(:>
X\fR
END_OF_FILE
  if test 23759 -ne `wc -c <'abc/abc.1'`; then
    echo shar: \"'abc/abc.1'\" unpacked with wrong size!
  fi
  # end of 'abc/abc.1'
fi
if test -f 'abc/bed/e1tabl.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'abc/bed/e1tabl.c'\"
else
  echo shar: Extracting \"'abc/bed/e1tabl.c'\" \(27315 characters\)
  sed "s/^X//" >'abc/bed/e1tabl.c' <<'END_OF_FILE'
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1988. */
X
X/* Data file with grammar tables. */
X
X/* WARNING: this file is constructed by 'mktable'. */
X/* If you want to change the grammar, see ../boot/README. */
X
X#include "b.h"
X#include "bedi.h"
X#include "tabl.h"
X
Xclasselem s0[]= {95,0};
Xclasselem i0[]= {58,95,0};
Xclasselem s1[]= {1,0};
Xclasselem i1[]= {58,1,0};
Xclasselem s2[]= {96,0};
Xclasselem i2[]= {26,96,27,96,28,96,29,96,30,96,31,96,32,96,33,96,34,96,
X	35,96,36,96,37,96,38,96,39,96,40,96,41,96,42,96,43,96,44,96,45,
X	96,46,96,47,96,48,96,49,96,50,96,51,96,0};
Xclasselem s3[]= {2,0};
Xclasselem i3[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
X	2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,
X	49,2,50,2,51,2,0};
Xclasselem s4[]= {97,0};
Xclasselem i4[]= {16,97,18,97,0};
Xclasselem s5[]= {3,0};
Xclasselem i5[]= {16,3,18,3,0};
Xclasselem s6[]= {98,0};
Xclasselem i6[]= {53,98,0};
Xclasselem s7[]= {4,0};
Xclasselem i7[]= {53,4,0};
Xclasselem s8[]= {99,0};
Xclasselem i8[]= {2,99,3,99,4,99,5,99,6,99,7,99,8,99,10,99,11,99,12,99,
X	13,99,14,99,15,99,16,99,17,99,18,99,19,99,20,99,21,99,22,99,23,
X	99,24,99,25,99,26,99,27,99,28,99,29,99,30,99,31,99,32,99,33,99,
X	34,99,35,99,36,99,37,99,38,99,39,99,40,99,41,99,42,99,43,99,44,
X	99,45,99,46,99,47,99,48,99,49,99,50,99,51,99,52,99,53,99,54,99,
X	55,99,56,99,58,99,59,99,60,99,61,99,62,99,0};
Xclasselem s9[]= {5,0};
Xclasselem i9[]= {2,5,3,5,4,5,5,5,6,5,7,5,8,5,10,5,11,5,12,5,13,5,14,5,
X	15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26,5,27,
X	5,28,5,29,5,30,5,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,5,39,5,
X	40,5,41,5,42,5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50,5,51,5,52,
X	5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,0};
Xclasselem s10[]= {100,0};
Xclasselem i10[]= {2,100,3,100,5,100,6,100,7,100,8,100,9,100,10,100,11,
X	100,12,100,13,100,14,100,15,100,16,100,17,100,18,100,19,100,20,
X	100,21,100,22,100,23,100,24,100,25,100,26,100,27,100,28,100,29,
X	100,30,100,31,100,32,100,33,100,34,100,35,100,36,100,37,100,38,
X	100,39,100,40,100,41,100,42,100,43,100,44,100,45,100,46,100,47,
X	100,48,100,49,100,50,100,51,100,52,100,53,100,54,100,55,100,56,
X	100,58,100,59,100,60,100,61,100,62,100,0};
Xclasselem s11[]= {6,0};
Xclasselem i11[]= {2,6,3,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,
X	15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,6,27,
X	6,28,6,29,6,30,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,39,6,
X	40,6,41,6,42,6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50,6,51,6,52,
X	6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,0};
Xclasselem s12[]= {101,0};
Xclasselem i12[]= {5,101,12,101,13,101,15,101,17,101,21,101,22,101,23,101,
X	25,101,55,101,60,101,62,101,0};
Xclasselem s13[]= {7,0};
Xclasselem i13[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,0};
Xclasselem s14[]= {102,0};
Xclasselem i14[]= {2,102,3,102,4,102,5,102,6,102,7,102,8,102,9,102,10,102,
X	11,102,12,102,13,102,14,102,15,102,16,102,17,102,18,102,19,102,
X	20,102,21,102,22,102,23,102,24,102,25,102,26,102,27,102,28,102,
X	29,102,30,102,31,102,32,102,33,102,34,102,35,102,36,102,37,102,
X	38,102,39,102,40,102,41,102,42,102,43,102,44,102,45,102,46,102,
X	47,102,48,102,49,102,50,102,51,102,52,102,53,102,54,102,55,102,
X	56,102,57,102,58,102,59,102,60,102,61,102,62,102,0};
Xclasselem s15[]= {8,0};
Xclasselem i15[]= {2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,
X	14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23,8,24,8,25,8,26,
X	8,27,8,28,8,29,8,30,8,31,8,32,8,33,8,34,8,35,8,36,8,37,8,38,8,
X	39,8,40,8,41,8,42,8,43,8,44,8,45,8,46,8,47,8,48,8,49,8,50,8,51,
X	8,52,8,53,8,54,8,55,8,56,8,57,8,58,8,59,8,60,8,61,8,62,8,0};
Xclasselem s16[]= {103,0};
Xclasselem s17[]= {104,0};
Xclasselem s18[]= {9,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i18[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a18[]= {44,9,32,12,91,13,0};
Xclasselem j18[]= {1,11,2,12,0};
Xclasselem s19[]= {93,9,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i19[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a19[]= {44,9,32,12,91,13,0};
Xclasselem j19[]= {1,11,2,12,0};
Xclasselem s20[]= {11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i20[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a20[]= {32,12,91,13,0};
Xclasselem j20[]= {1,11,2,12,0};
Xclasselem s21[]= {7,13,1,3,10,14,18,20,0};
Xclasselem i21[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a21[]= {91,13,0};
Xclasselem s22[]= {11,7,13,1,3,10,14,18,20,0};
Xclasselem i22[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a22[]= {91,13,0};
Xclasselem j22[]= {1,11,0};
Xclasselem s23[]= {13,1,3,10,14,18,20,0};
Xclasselem i23[]= {58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a23[]= {91,13,0};
Xclasselem s24[]= {93,15,11,12,7,13,1,3,10,14,18,20,16,17,0};
Xclasselem i24[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,52,17,0};
Xclasselem a24[]= {59,15,32,12,91,13,59,16,0};
Xclasselem j24[]= {1,11,2,12,0};
Xclasselem s25[]= {11,12,7,13,1,3,10,14,18,20,15,0};
Xclasselem i25[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a25[]= {32,12,91,13,59,15,0};
Xclasselem j25[]= {1,11,2,12,0};
Xclasselem s26[]= {11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i26[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a26[]= {32,12,91,13,0};
Xclasselem j26[]= {1,11,2,12,0};
Xclasselem s27[]= {17,0};
Xclasselem i27[]= {52,17,0};
Xclasselem s28[]= {16,17,0};
Xclasselem i28[]= {52,17,0};
Xclasselem a28[]= {59,16,0};
Xclasselem s29[]= {93,5,22,19,0};
Xclasselem i29[]= {2,5,3,5,4,5,5,5,6,5,7,5,8,5,10,5,11,5,12,5,13,5,14,5,
X	15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26,5,27,
X	5,28,5,29,5,30,5,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,5,39,5,
X	40,5,41,5,42,5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50,5,51,5,52,
X	5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,57,22,0};
Xclasselem j29[]= {1,19,0};
Xclasselem s30[]= {5,22,0};
Xclasselem i30[]= {2,5,3,5,4,5,5,5,6,5,7,5,8,5,10,5,11,5,12,5,13,5,14,5,
X	15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26,5,27,
X	5,28,5,29,5,30,5,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,5,39,5,
X	40,5,41,5,42,5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50,5,51,5,52,
X	5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,57,22,0};
Xclasselem s31[]= {5,22,19,0};
Xclasselem i31[]= {2,5,3,5,4,5,5,5,6,5,7,5,8,5,10,5,11,5,12,5,13,5,14,5,
X	15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26,5,27,
X	5,28,5,29,5,30,5,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,5,39,5,
X	40,5,41,5,42,5,43,5,44,5,45,5,46,5,47,5,48,5,49,5,50,5,51,5,52,
X	5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,57,22,0};
Xclasselem j31[]= {1,19,0};
Xclasselem s32[]= {93,6,22,21,0};
Xclasselem i32[]= {2,6,3,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,
X	15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,6,27,
X	6,28,6,29,6,30,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,39,6,
X	40,6,41,6,42,6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50,6,51,6,52,
X	6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,57,22,0};
Xclasselem j32[]= {1,21,0};
Xclasselem s33[]= {6,22,0};
Xclasselem i33[]= {2,6,3,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,
X	15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,6,27,
X	6,28,6,29,6,30,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,39,6,
X	40,6,41,6,42,6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50,6,51,6,52,
X	6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,57,22,0};
Xclasselem s34[]= {6,22,21,0};
Xclasselem i34[]= {2,6,3,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,
X	15,6,16,6,17,6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,6,27,
X	6,28,6,29,6,30,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,39,6,
X	40,6,41,6,42,6,43,6,44,6,45,6,46,6,47,6,48,6,49,6,50,6,51,6,52,
X	6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,57,22,0};
Xclasselem j34[]= {1,21,0};
Xclasselem s35[]= {23,1,24,25,26,27,0};
Xclasselem i35[]= {58,1,10,24,0};
Xclasselem a35[]= {44,23,91,25,64,26,124,27,0};
Xclasselem s36[]= {1,24,25,26,27,0};
Xclasselem i36[]= {58,1,10,24,0};
Xclasselem a36[]= {91,25,64,26,124,27,0};
Xclasselem s37[]= {28,1,29,0};
Xclasselem i37[]= {58,1,10,29,0};
Xclasselem a37[]= {44,28,0};
Xclasselem s38[]= {1,29,0};
Xclasselem i38[]= {58,1,10,29,0};
Xclasselem s39[]= {31,32,33,34,35,36,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i39[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
X	22,7,23,7,25,7,55,7,60,7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,
X	4,20,0};
Xclasselem a39[]= {32,35,32,36,32,12,91,13,0};
Xclasselem j39[]= {2,35,2,36,1,11,2,12,0};
Xclasselem s40[]= {30,31,32,33,34,35,36,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i40[]= {30,30,39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,
X	7,21,7,22,7,23,7,25,7,55,7,60,7,62,7,58,1,16,3,18,3,10,10,59,14,
X	9,18,4,20,0};
Xclasselem a40[]= {32,35,32,36,32,12,91,13,0};
Xclasselem j40[]= {2,35,2,36,1,11,2,12,0};
Xclasselem s41[]= {31,32,33,34,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i41[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
X	22,7,23,7,25,7,55,7,60,7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,
X	4,20,0};
Xclasselem a41[]= {32,12,91,13,0};
Xclasselem j41[]= {1,11,2,12,0};
Xclasselem s42[]= {9,31,32,33,34,35,36,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i42[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
X	22,7,23,7,25,7,55,7,60,7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,
X	4,20,0};
Xclasselem a42[]= {44,9,32,35,32,36,32,12,91,13,0};
Xclasselem j42[]= {2,35,2,36,1,11,2,12,0};
Xclasselem s43[]= {37,0};
Xclasselem i43[]= {26,37,0};
Xclasselem s44[]= {38,0};
Xclasselem i44[]= {40,38,0};
Xclasselem s45[]= {31,32,33,34,35,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i45[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
X	22,7,23,7,25,7,55,7,60,7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,
X	4,20,0};
Xclasselem a45[]= {32,35,32,12,91,13,0};
Xclasselem j45[]= {2,35,1,11,2,12,0};
Xclasselem s46[]= {31,32,33,34,36,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i46[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
X	22,7,23,7,25,7,55,7,60,7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,
X	4,20,0};
Xclasselem a46[]= {32,36,32,12,91,13,0};
Xclasselem j46[]= {2,36,1,11,2,12,0};
Xclasselem s47[]= {4,58,53,40,42,41,60,47,54,61,48,49,50,43,46,62,56,55,
X	44,45,57,52,51,91,2,63,59,39,0};
Xclasselem i47[]= {53,4,34,58,31,53,44,60,44,47,42,54,43,61,48,48,43,49,
X	43,50,41,43,29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,
X	51,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,
X	38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,
X	2,51,2,48,59,0};
Xclasselem a47[]= {32,63,32,39,0};
Xclasselem j47[]= {1,40,1,42,1,41,2,63,2,39,0};
Xclasselem s48[]= {47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,51,91,2,
X	63,0};
Xclasselem i48[]= {44,47,42,54,43,61,48,48,43,49,43,50,41,43,29,46,43,62,
X	31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,2,28,2,29,2,
X	30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,
X	2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,0};
Xclasselem a48[]= {32,63,0};
Xclasselem j48[]= {2,63,0};
Xclasselem s49[]= {58,53,47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,51,
X	91,2,63,59,40,41,39,0};
Xclasselem i49[]= {34,58,31,53,44,47,42,54,43,61,48,48,43,49,43,50,41,43,
X	29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,
X	2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,
X	40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,48,
X	59,0};
Xclasselem a49[]= {32,63,32,39,0};
Xclasselem j49[]= {2,63,1,40,1,41,2,39,0};
Xclasselem s50[]= {58,59,53,41,0};
Xclasselem i50[]= {34,58,48,59,31,53,0};
Xclasselem j50[]= {1,41,0};
Xclasselem s51[]= {58,59,53,0};
Xclasselem i51[]= {34,58,48,59,31,53,0};
Xclasselem s52[]= {9,11,12,7,13,1,3,10,14,18,20,2,64,63,0};
Xclasselem i52[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,26,2,27,2,28,2,29,
X	2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,
X	42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,0};
Xclasselem a52[]= {44,9,32,12,91,13,32,64,32,63,0};
Xclasselem j52[]= {1,11,2,12,2,64,2,63,0};
Xclasselem s53[]= {2,63,0};
Xclasselem i53[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
X	2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,
X	49,2,50,2,51,2,0};
Xclasselem a53[]= {32,63,0};
Xclasselem j53[]= {2,63,0};
Xclasselem s54[]= {65,0};
Xclasselem i54[]= {1,65,0};
Xclasselem s55[]= {93,65,0};
Xclasselem i55[]= {1,65,0};
Xclasselem s56[]= {93,58,53,47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,
X	51,91,2,63,59,40,41,39,65,0};
Xclasselem i56[]= {34,58,31,53,44,47,42,54,43,61,48,48,43,49,43,50,41,43,
X	29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,
X	2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,
X	40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,48,
X	59,1,65,0};
Xclasselem a56[]= {32,63,32,39,0};
Xclasselem j56[]= {2,63,1,40,1,41,2,39,0};
Xclasselem s57[]= {58,53,47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,51,
X	91,2,63,59,40,41,39,65,0};
Xclasselem i57[]= {34,58,31,53,44,47,42,54,43,61,48,48,43,49,43,50,41,43,
X	29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,
X	2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,2,37,2,38,2,39,2,
X	40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,48,
X	59,1,65,0};
Xclasselem a57[]= {32,63,32,39,0};
Xclasselem j57[]= {2,63,1,40,1,41,2,39,0};
Xclasselem s58[]= {66,0};
Xclasselem i58[]= {1,66,0};
Xclasselem s59[]= {93,66,0};
Xclasselem i59[]= {1,66,0};
Xclasselem s60[]= {93,4,0};
Xclasselem i60[]= {53,4,0};
Xclasselem s61[]= {67,0};
Xclasselem i61[]= {33,67,0};
Xclasselem s62[]= {68,67,0};
Xclasselem i62[]= {33,67,0};
Xclasselem j62[]= {1,68,0};
Xclasselem s63[]= {71,72,2,75,0};
Xclasselem i63[]= {43,71,43,72,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,
X	34,2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,
X	2,47,2,48,2,49,2,50,2,51,2,0};
Xclasselem a63[]= {32,75,0};
Xclasselem j63[]= {2,75,0};
Xclasselem s64[]= {73,74,1,29,75,0};
Xclasselem i64[]= {58,1,10,29,0};
Xclasselem a64[]= {32,74,32,75,0};
Xclasselem j64[]= {1,73,2,74,2,75,0};
Xclasselem s65[]= {1,29,0};
Xclasselem i65[]= {58,1,10,29,0};
Xclasselem s66[]= {73,1,29,0};
Xclasselem i66[]= {58,1,10,29,0};
Xclasselem j66[]= {1,73,0};
Xclasselem s67[]= {28,1,29,2,76,75,0};
Xclasselem i67[]= {58,1,10,29,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,
X	2,35,2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,
X	47,2,48,2,49,2,50,2,51,2,0};
Xclasselem a67[]= {44,28,32,76,32,75,0};
Xclasselem j67[]= {2,76,2,75,0};
Xclasselem s68[]= {2,75,0};
Xclasselem i68[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
X	2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,
X	49,2,50,2,51,2,0};
Xclasselem a68[]= {32,75,0};
Xclasselem j68[]= {2,75,0};
Xclasselem s69[]= {67,68,69,70,0};
Xclasselem i69[]= {33,67,0};
Xclasselem j69[]= {1,68,1,69,1,70,0};
Xclasselem s70[]= {93,78,0};
Xclasselem i70[]= {1,78,0};
Xclasselem s71[]= {78,0};
Xclasselem i71[]= {1,78,0};
Xclasselem s72[]= {1,2,79,0};
Xclasselem i72[]= {58,1,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,
X	2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,
X	48,2,49,2,50,2,51,2,0};
Xclasselem a72[]= {32,79,0};
Xclasselem j72[]= {2,79,0};
Xclasselem s73[]= {2,79,0};
Xclasselem i73[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
X	2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,
X	49,2,50,2,51,2,0};
Xclasselem a73[]= {32,79,0};
Xclasselem j73[]= {2,79,0};
Xclasselem s74[]= {93,67,68,69,70,77,0};
Xclasselem i74[]= {33,67,0};
Xclasselem j74[]= {1,68,1,69,1,70,1,77,0};
Xclasselem s75[]= {93,11,12,7,13,1,3,10,14,18,20,0};
Xclasselem i75[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
X	7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
Xclasselem a75[]= {32,12,91,13,0};
Xclasselem j75[]= {1,11,2,12,0};
Xclasselem s76[]= {93,4,67,58,53,40,42,41,60,47,54,61,48,49,50,43,46,62,
X	56,55,44,45,57,52,51,91,2,63,59,39,68,83,85,87,0};
Xclasselem i76[]= {53,4,33,67,34,58,31,53,44,60,44,47,42,54,43,61,48,48,
X	43,49,43,50,41,43,29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,
X	52,44,51,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
X	2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,48,2,
X	49,2,50,2,51,2,48,59,19,83,22,85,23,87,0};
Xclasselem a76[]= {32,63,32,39,0};
Xclasselem j76[]= {1,40,1,42,1,41,2,63,2,39,1,68,0};
Xclasselem s77[]= {93,1,2,79,84,92,0};
Xclasselem i77[]= {58,1,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,
X	2,36,2,37,2,38,2,39,2,40,2,41,2,42,2,43,2,44,2,45,2,46,2,47,2,
X	48,2,49,2,50,2,51,2,19,84,0};
Xclasselem a77[]= {32,79,0};
Xclasselem j77[]= {2,79,0};
Xclasselem s78[]= {93,1,86,0};
Xclasselem i78[]= {58,1,22,86,0};
Xclasselem s79[]= {93,1,88,0};
Xclasselem i79[]= {58,1,23,88,0};
Xclasselem s80[]= {93,8,0};
Xclasselem i80[]= {2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,
X	14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23,8,24,8,25,8,26,
X	8,27,8,28,8,29,8,30,8,31,8,32,8,33,8,34,8,35,8,36,8,37,8,38,8,
X	39,8,40,8,41,8,42,8,43,8,44,8,45,8,46,8,47,8,48,8,49,8,50,8,51,
X	8,52,8,53,8,54,8,55,8,56,8,57,8,58,8,59,8,60,8,61,8,62,8,0};
X
Xstruct classinfo cl[81] = {
X   {s0, i0, 0, 0},	/* name-body */
X   {s1, i1, 0, 0},	/* name */
X   {s2, i2, 0, 0},	/* keyword-body */
X   {s3, i3, 0, 0},	/* keyword */
X   {s4, i4, 0, 0},	/* number-body */
X   {s5, i5, 0, 0},	/* number */
X   {s6, i6, 0, 0},	/* comment-body */
X   {s7, i7, 0, 0},	/* comment */
X   {s8, i8, 0, 0},	/* text1-body */
X   {s9, i9, 0, 0},	/* text1 */
X   {s10, i10, 0, 0},	/* text2-body */
X   {s11, i11, 0, 0},	/* text2 */
X   {s12, i12, 0, 0},	/* operator-body */
X   {s13, i13, 0, 0},	/* operator */
X   {s14, i14, 0, 0},	/* rawinput-body */
X   {s15, i15, 0, 0},	/* rawinput */
X   {s16, 0, 0, 0},	/* suggestion-body */
X   {s17, 0, 0, 0},	/* sugghowname-body */
X   {s18, i18, a18, j18},	/* expression */
X   {s19, i19, a19, j19},	/* optional_expression */
X   {s20, i20, a20, j20},	/* single_expression */
X   {s21, i21, a21, 0},	/* block */
X   {s22, i22, a22, j22},	/* group */
X   {s23, i23, a23, 0},	/* primary */
X   {s24, i24, a24, j24},	/* optional_list_or_table_filler_series */
X   {s25, i25, a25, j25},	/* list_filler_series_tail */
X   {s26, i26, a26, j26},	/* list_filler */
X   {s27, i27, 0, 0},	/* table_filler */
X   {s28, i28, a28, 0},	/* table_filler_series_tail */
X   {s29, i29, 0, j29},	/* txt1 */
X   {s30, i30, 0, 0},	/* text1_conv */
X   {s31, i31, 0, j31},	/* text1_next */
X   {s32, i32, 0, j32},	/* txt2 */
X   {s33, i33, 0, 0},	/* text2_conv */
X   {s34, i34, 0, j34},	/* text2_next */
X   {s35, i35, a35, 0},	/* address */
X   {s36, i36, a36, 0},	/* single_address */
X   {s37, i37, a37, 0},	/* naming */
X   {s38, i38, 0, 0},	/* single_naming */
X   {s39, i39, a39, j39},	/* test */
X   {s40, i40, a40, j40},	/* e_test */
X   {s41, i41, a41, j41},	/* r_test */
X   {s42, i42, a42, j42},	/* coll_test */
X   {s43, i43, 0, 0},	/* and */
X   {s44, i44, 0, 0},	/* or */
X   {s45, i45, a45, j45},	/* and_test */
X   {s46, i46, a46, j46},	/* or_test */
X   {s47, i47, a47, j47},	/* cmd */
X   {s48, i48, a48, j48},	/* simple_cmd */
X   {s49, i49, a49, j49},	/* shortcmd */
X   {s50, i50, 0, j50},	/* c_ifforwhile */
X   {s51, i51, 0, 0},	/* ifforwhile */
X   {s52, i52, a52, j52},	/* kw_next */
X   {s53, i53, a53, j53},	/* exp_next */
X   {s54, i54, 0, 0},	/* suite */
X   {s55, i55, 0, 0},	/* optional_suite */
X   {s56, i56, a56, j56},	/* optional_cmdsuite */
X   {s57, i57, a57, j57},	/* cmdsuite */
X   {s58, i58, 0, 0},	/* t_suite */
X   {s59, i59, 0, 0},	/* optional_t_suite */
X   {s60, i60, 0, 0},	/* optional_comment */
X   {s61, i61, 0, 0},	/* head */
X   {s62, i62, 0, j62},	/* commented_head */
X   {s63, i63, a63, j63},	/* formal_cmd */
X   {s64, i64, a64, j64},	/* formal_formula */
X   {s65, i65, 0, 0},	/* ff_block */
X   {s66, i66, 0, j66},	/* ff_group */
X   {s67, i67, a67, j67},	/* formal_kw_next */
X   {s68, i68, a68, j68},	/* naming_next */
X   {s69, i69, 0, j69},	/* refpred */
X   {s70, i70, 0, 0},	/* optional_refinements */
X   {s71, i71, 0, 0},	/* refinements */
X   {s72, i72, a72, j72},	/* name_or_keyword */
X   {s73, i73, a73, j73},	/* kwltail */
X   {s74, i74, 0, j74},	/* unit_edit */
X   {s75, i75, a75, j75},	/* address_edit */
X   {s76, i76, a76, j76},	/* imm_cmd */
X   {s77, i77, a77, j77},	/* ed_unit */
X   {s78, i78, 0, 0},	/* ed_address */
X   {s79, i79, 0, 0},	/* ws_cmd */
X   {s80, i80, 0, 0}	/* raw_input */
X};
X
Xstatic struct table abc_grammar[95] = {
X   /* 0   */ {"Rootsymbol", {0,0,0,0,0}, {&cl[76],0,0,0}, 0},
X   /* 1   */ {"Name", {0,0,0,0,0}, {&cl[0],0,0,0}, 0},
X   /* 2   */ {"Keyword", {0,0,0,0,0}, {&cl[2],0,0,0}, 0},
X   /* 3   */ {"Number", {0,0,0,0,0}, {&cl[4],0,0,0}, 0},
X   /* 4   */ {"Comment", {0,0,0,0,0}, {&cl[6],0,0,0}, 0},
X   /* 5   */ {"Text1", {0,0,0,0,0}, {&cl[8],0,0,0}, 0},
X   /* 6   */ {"Text2", {0,0,0,0,0}, {&cl[10],0,0,0}, 0},
X   /* 7   */ {"Operator", {0,0,0,0,0}, {&cl[12],0,0,0}, 0},
X   /* 8   */ {"Rawinput", {0,0,0,0,0}, {&cl[14],0,0,0}, 0},
X   /* 9   */ {"Collateral", {0,", ",0,0,0}, {&cl[20],&cl[18],0,0}, 0},
X   /* 10  */ {"Compound", {"(",")",0,0,0}, {&cl[42],0,0,0}, 0},
X   /* 11  */ {"Blocked", {0,0,0,0,0}, {&cl[21],&cl[22],0,0}, 0},
X   /* 12  */ {"Grouped", {0," ",0,0,0}, {&cl[22],&cl[20],0,0}, 0},
X   /* 13  */ {"Sel_expr", {0,"[","]",0,0}, {&cl[23],&cl[18],0,0}, 0},
X   /* 14  */ {"List_or_table_display", {"{","}",0,0,0}, {&cl[24],0,0,0}, 0},
X   /* 15  */ {"List_filler_series", {0,"; ",0,0,0}, {&cl[26],&cl[25],0,0}, 0},
X   /* 16  */ {"Table_filler_series", {0,"; ",0,0,0}, {&cl[27],&cl[28],0,0}, 0},
X   /* 17  */ {"Table_filler", {"[","]: ",0,0,0}, {&cl[18],&cl[20],0,0}, 0},
X   /* 18  */ {"Text1_display", {"'","'",0,0,0}, {&cl[29],0,0,0}, 0},
X   /* 19  */ {"Text1_plus", {0,0,0,0,0}, {&cl[30],&cl[31],0,0}, 0},
X   /* 20  */ {"Text2_display", {"\"","\"",0,0,0}, {&cl[32],0,0,0}, 0},
X   /* 21  */ {"Text2_plus", {0,0,0,0,0}, {&cl[33],&cl[34],0,0}, 0},
X   /* 22  */ {"Conversion", {"`","`",0,0,0}, {&cl[19],0,0,0}, 0},
X   /* 23  */ {"Multiple_address", {0,", ",0,0,0}, {&cl[36],&cl[35],0,0}, 0},
X   /* 24  */ {"Compound_address", {"(",")",0,0,0}, {&cl[35],0,0,0}, 0},
X   /* 25  */ {"Selection", {0,"[","]",0,0}, {&cl[35],&cl[18],0,0}, 0},
X   /* 26  */ {"Behead", {0,"@",0,0,0}, {&cl[35],&cl[22],0,0}, 0},
X   /* 27  */ {"Curtail", {0,"|",0,0,0}, {&cl[35],&cl[22],0,0}, 0},
X   /* 28  */ {"Multiple_naming", {0,", ",0,0,0}, {&cl[38],&cl[37],0,0}, 0},
X   /* 29  */ {"Compound_naming", {"(",")",0,0,0}, {&cl[37],0,0,0}, 0},
X   /* 30  */ {"Else_kw", {"ELSE",0,0,0,0}, {0,0,0,0}, 0},
X   /* 31  */ {"Not", {"NOT ",0,0,0,0}, {&cl[41],0,0,0}, 0},
X   /* 32  */ {"Some_in", {"SOME "," IN "," HAS ",0,0}, {&cl[37],&cl[20],&cl[41],0}, 0},
X   /* 33  */ {"Each_in", {"EACH "," IN "," HAS ",0,0}, {&cl[37],&cl[20],&cl[41],0}, 0},
X   /* 34  */ {"No_in", {"NO "," IN "," HAS ",0,0}, {&cl[37],&cl[20],&cl[41],0}, 0},
X   /* 35  */ {"And", {0," ",0,0,0}, {&cl[20],&cl[43],0,0}, 0},
X   /* 36  */ {"Or", {0," ",0,0,0}, {&cl[20],&cl[44],0,0}, 0},
X   /* 37  */ {"And_kw", {"AND ",0,0,0,0}, {&cl[45],0,0,0}, 0},
X   /* 38  */ {"Or_kw", {"OR ",0,0,0,0}, {&cl[46],0,0,0}, 0},
X   /* 39  */ {"Cmt_cmd", {0," ",0,0,0}, {&cl[48],&cl[7],0,0}, 0},
X   /* 40  */ {"Short_comp", {0,"\t","\b",0,0}, {&cl[51],&cl[49],0,0}, 0},
X   /* 41  */ {"Cmt_comp", {0,0,0,0,0}, {&cl[51],&cl[7],0,0}, 0},
X   /* 42  */ {"Long_comp", {0,"\t","\b",0,0}, {&cl[50],&cl[54],0,0}, 0},
X   /* 43  */ {"Put", {"PUT "," IN ",0,0,0}, {&cl[18],&cl[35],0,0}, 0},
X   /* 44  */ {"Insert", {"INSERT "," IN ",0,0,0}, {&cl[18],&cl[35],0,0}, 0},
X   /* 45  */ {"Remove", {"REMOVE "," FROM ",0,0,0}, {&cl[18],&cl[35],0,0}, 0},
X   /* 46  */ {"Delete", {"DELETE ",0,0,0,0}, {&cl[35],0,0,0}, 0},
X   /* 47  */ {"Share", {"SHARE ",0,0,0,0}, {&cl[37],0,0,0}, 0},
X   /* 48  */ {"Write", {"WRITE ",0,0,0,0}, {&cl[18],0,0,0}, 0},
X   /* 49  */ {"Read", {"READ "," EG ",0,0,0}, {&cl[35],&cl[20],0,0}, 0},
X   /* 50  */ {"Read_raw", {"READ "," RAW",0,0,0}, {&cl[35],0,0,0}, 0},
X   /* 51  */ {"Set", {"SET RANDOM ",0,0,0,0}, {&cl[18],0,0,0}, 0},
X   /* 52  */ {"Pass", {"PASS",0,0,0,0}, {0,0,0,0}, 0},
X   /* 53  */ {"For", {"FOR "," IN ",": ",0,0}, {&cl[37],&cl[20],0,0}, 0},
X   /* 54  */ {"Quit", {"QUIT",0,0,0,0}, {0,0,0,0}, 0},
X   /* 55  */ {"Succeed", {"SUCCEED",0,0,0,0}, {0,0,0,0}, 0},
X   /* 56  */ {"Fail", {"FAIL",0,0,0,0}, {0,0,0,0}, 0},
X   /* 57  */ {"Check", {"CHECK ",0,0,0,0}, {&cl[39],0,0,0}, 0},
X   /* 58  */ {"If", {"IF ",": ",0,0,0}, {&cl[39],0,0,0}, 0},
X   /* 59  */ {"While", {"WHILE ",": ",0,0,0}, {&cl[39],0,0,0}, 0},
X   /* 60  */ {"Select", {"SELECT: ","\t","\b",0,0}, {&cl[60],&cl[58],&cl[60],0}, 0},
X   /* 61  */ {"Return", {"RETURN ",0,0,0,0}, {&cl[18],0,0,0}, 0},
X   /* 62  */ {"Report", {"REPORT ",0,0,0,0}, {&cl[39],0,0,0}, 0},
X   /* 63  */ {"Kw_plus", {0," ",0,0,0}, {&cl[3],&cl[52],0,0}, 0},
X   /* 64  */ {"Exp_plus", {0," ",0,0,0}, {&cl[18],&cl[53],0,0}, 0},
X   /* 65  */ {"Suite", {"\n",0,0,0,0}, {&cl[47],&cl[55],0,0}, 0},
X   /* 66  */ {"Test_suite", {"\n",": ","\t","\b",0}, {&cl[40],&cl[60],&cl[57],&cl[59]}, 0},
X   /* 67  */ {"Head", {"HOW TO ",": ",0,0,0}, {&cl[63],0,0,0}, 0},
X   /* 68  */ {"Cmt_head", {0,0,0,0,0}, {&cl[61],&cl[7],0,0}, 0},
X   /* 69  */ {"Long_unit", {0,"\t","\b",0,0}, {&cl[62],&cl[54],0,0}, 0},
X   /* 70  */ {"Short_unit", {0,"\t","\b",0,0}, {&cl[61],&cl[49],0,0}, 0},
X   /* 71  */ {"Formal_return", {"RETURN ",0,0,0,0}, {&cl[64],0,0,0}, 0},
X   /* 72  */ {"Formal_report", {"REPORT ",0,0,0,0}, {&cl[64],0,0,0}, 0},
X   /* 73  */ {"Blocked_ff", {0,0,0,0,0}, {&cl[65],&cl[66],0,0}, 0},
X   /* 74  */ {"Grouped_ff", {0," ",0,0,0}, {&cl[66],&cl[64],0,0}, 0},
X   /* 75  */ {"Formal_kw_plus", {0," ",0,0,0}, {&cl[3],&cl[67],0,0}, 0},
X   /* 76  */ {"Formal_naming_plus", {0," ",0,0,0}, {&cl[37],&cl[68],0,0}, 0},
X   /* 77  */ {"Ref_join", {0,0,0,0,0}, {&cl[69],&cl[71],0,0}, 0},
X   /* 78  */ {"Refinement", {"\n",": ","\t","\b",0}, {&cl[72],&cl[60],&cl[57],&cl[70]}, 0},
X   /* 79  */ {"Keyword_list", {0," ",0,0,0}, {&cl[3],&cl[73],0,0}, 0},
X   /* 80  */ {"Unit_edit", {0,0,0,0,0}, {&cl[74],0,0,0}, 0},
X   /* 81  */ {"Target_edit", {0,0,0,0,0}, {&cl[75],0,0,0}, 0},
X   /* 82  */ {"Imm_cmd", {0,0,0,0,0}, {&cl[76],0,0,0}, 0},
X   /* 83  */ {"Edit_unit", {":",0,0,0,0}, {&cl[77],0,0,0}, 0},
X   /* 84  */ {"Colon", {":",0,0,0,0}, {0,0,0,0}, 0},
X   /* 85  */ {"Edit_address", {"=",0,0,0,0}, {&cl[78],0,0,0}, 0},
X   /* 86  */ {"Equals", {"=",0,0,0,0}, {0,0,0,0}, 0},
X   /* 87  */ {"Workspace_cmd", {">",0,0,0,0}, {&cl[79],0,0,0}, 0},
X   /* 88  */ {"Right", {">",0,0,0,0}, {0,0,0,0}, 0},
X   /* 89  */ {"Expression", {0,0,0,0,0}, {&cl[18],0,0,0}, 0},
X   /* 90  */ {"Raw_input", {0,0,0,0,0}, {&cl[80],0,0,0}, 0},
X   /* 91  */ {"Suggestion", {0,0,0,0,0}, {&cl[16],0,0,0}, 0},
X   /* 92  */ {"Sugghowname", {0,0,0,0,0}, {&cl[17],0,0,0}, 0},
X   /* 93  */ {"Optional", {0,0,0,0,0}, {0,0,0,0}, 0},
X   /* 94  */ {"Hole", {"?",0,0,0,0}, {0,0,0,0}, 0}
X};
X
Xstruct table *table= abc_grammar;
X
Xstatic struct lexinfo abc_lexicals[10] = {
X   {"abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz0123456789'\"."},	/* NAME */
X   {"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\"."},	/* KEYWORD */
X   {"0123456789.", "0123456789."},	/* NUMBER */
X   {"\\", "^"},	/* COMMENT */
X   {"^'`", "^'`"},	/* TEXT1 */
X   {"^\"`", "^\"`"},	/* TEXT2 */
X   {"+-*/#^~@|<=>", ""},	/* OPERATOR */
X   {"^", "^"},	/* RAWINPUT */
X   {"", ""},	/* SUGGESTION */
X   {"", ""}	/* SUGGHOWNAME */
X};
X
Xstruct lexinfo *lextab= abc_lexicals;
END_OF_FILE
  if test 27315 -ne `wc -c <'abc/bed/e1tabl.c'`; then
    echo shar: \"'abc/bed/e1tabl.c'\" unpacked with wrong size!
  fi
  # end of 'abc/bed/e1tabl.c'
fi
if test -f 'abc/ex/wsgroup.abc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'abc/ex/wsgroup.abc'\"
else
  echo shar: Extracting \"'abc/ex/wsgroup.abc'\" \(116 characters\)
  sed "s/^X//" >'abc/ex/wsgroup.abc' <<'END_OF_FILE'
X{[">"]:"try";[">>"]:"generate";["generate"]:"generate";["hanoi"]:"hanoi";["pi"]:"pi";["try"]:"try";["xref"]:"xref"}
END_OF_FILE
  if test 116 -ne `wc -c <'abc/ex/wsgroup.abc'`; then
    echo shar: \"'abc/ex/wsgroup.abc'\" unpacked with wrong size!
  fi
  # end of 'abc/ex/wsgroup.abc'
fi
echo shar: End of archive 4 \(of 25\).
cp /dev/null ark4isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 25 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still must unpack the following archives:
    echo "        " ${MISSING}
fi
exit 0 # Just in case...
-- 
Please send comp.sources.unix-related mail to rsalz at uunet.uu.net.
Use a domain-based address or give alternate paths, or you may lose out.



More information about the Comp.sources.unix mailing list