home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / abc / part04 < prev    next >
Text File  |  1991-01-08  |  55KB  |  1,580 lines

  1. Subject:  v23i083:  ABC interactive programming environment, Part04/25
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: b30008ad 31bc8e3d 16e942b6 b8ebc527
  5.  
  6. Submitted-by: Steven Pemberton <steven@cwi.nl>
  7. Posting-number: Volume 23, Issue 83
  8. Archive-name: abc/part04
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then feed it
  12. # into a shell via "sh file" or similar.  To overwrite existing files,
  13. # type "sh file -c".
  14. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  15. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  16. # Contents:  abc/abc.1 abc/bed/e1tabl.c abc/ex/wsgroup.abc
  17. # Wrapped by rsalz@litchi.bbn.com on Mon Dec 17 13:27:53 1990
  18. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  19. echo If this archive is complete, you will see the following message:
  20. echo '          "shar: End of archive 4 (of 25)."'
  21. if test -f 'abc/abc.1' -a "${1}" != "-c" ; then 
  22.   echo shar: Will not clobber existing file \"'abc/abc.1'\"
  23. else
  24.   echo shar: Extracting \"'abc/abc.1'\" \(23759 characters\)
  25.   sed "s/^X//" >'abc/abc.1' <<'END_OF_FILE'
  26. X.if t \{\
  27. X.\" replace this with some constant width font (for ABC characters):
  28. X.ds <: \\fC
  29. X.\" we filled in \\fC (Courier) for Postscript printers;
  30. X.\" use \\f(CW on Versatec;
  31. X.\" use \\f(lp on Harris typesetter.
  32. X.ds :> \\fP
  33. X.ds [ [\\s-2
  34. X.ds ] \\s+2]
  35. X.ds _ \\v'+0u'\(ru\\v'-0u'\|
  36. X.ds * \\v'+18u'\s+2*\s0\\v'-18u'\"lower and larger
  37. X.ds dg \\(dg
  38. X.ds <= \\(<=
  39. X.ds Q \&`
  40. X.ds U \&'
  41. X.ds uA \\(ua
  42. X.ds dA \\(da
  43. X.ds .5 .5v
  44. X.ds .3 .3v\}
  45. X.if n \{\
  46. X.ds <: \\fR
  47. X.ds :> \\fP
  48. X.ds [ [
  49. X.ds ] ]
  50. X.ds _ _
  51. X.ds * *
  52. X.ds dg *
  53. X.ds <= <=
  54. X.ds Q \&'
  55. X.ds U \&'
  56. X.ds uA ^
  57. X.ds dA v
  58. X.ds .5 1v
  59. X.ds .3 1v\}
  60. X.TH ABC 1 local
  61. X.tr **
  62. X.SH NAME
  63. Xabc \-
  64. XABC interpreter & environment
  65. X.br
  66. Xabckeys \-
  67. Xchange key bindings for \*Qabc\*U
  68. X.SH SYNOPSIS
  69. X.B "abc\ \ \ "
  70. X[workspace and editor options]  [file ...]
  71. X.br
  72. X.B "abc\ \ \ "
  73. X[workspace and task options]
  74. X.br
  75. X.B "abckeys"
  76. X.SH DESCRIPTION
  77. XWithout options or files, the ABC interpreter is started, using the
  78. XABC editor, in the last workspace used or in workspace \*Q\fIfirst\fP\*U
  79. Xif this is your first abc session.
  80. XA workspace is kept as a group of files in a directory,
  81. Xwith separate files for each how-to and location.
  82. XThe workspace directories themselves are kept by default in the
  83. Xdirectory $HOME/abc.
  84. XOn non-Unix machines, $HOME is the disk you are working on.
  85. X.PP
  86. XWorkspace Options:
  87. X.TP 14n
  88. X.B "-W" "dir"
  89. Xuse group of workspaces in \*Qdir\*U instead of $HOME/abc.
  90. X.TP
  91. X.B "-w" "name"
  92. Xstart in workspace \*Qname\*U instead of last workspace used.
  93. X.TP
  94. X.B "-w" "path"
  95. Xuse \*Qpath\*U as workspace (no -W option allowed).
  96. X.PP
  97. XEditor option:
  98. X.TP 14n
  99. X.B "-e"
  100. XUse $EDITOR as editor to edit definitions, instead of ABC editor (Unix only).
  101. X.TP
  102. X.B "file" "..."
  103. XRead commands from file(s) instead of from standard input;
  104. Xinput for \*(<:READ\*(:> commands is taken from standard input.
  105. XIf a file is called \*Q-\*U and standard input is the keyboard,
  106. Xthe ABC system is started up interactively for that entry.
  107. X.PP
  108. XSpecial tasks:
  109. X.TP 14n
  110. X.B "-i" "tab"
  111. XFill table \*Qtab\*U with text lines from standard input
  112. X.TP
  113. X.B "-o" "tab"
  114. XWrite text lines from table \*Qtab\*U to standard output
  115. X.TP
  116. X.B "-l"
  117. XList the how-to's in workspace on standard output
  118. X.TP
  119. X.B "-r"
  120. XRecover a workspace when its index is lost: useful after a machine
  121. Xcrash if the ABC internal administration files didn't get written out.
  122. X.TP
  123. X.B "-R"
  124. XRecover the index of a group of workspaces
  125. X.SH USAGE
  126. X(This is necessarily a very brief description; see \*QThe ABC
  127. XProgrammer's Handbook\*U for full details.)
  128. X.sp \*(.3
  129. XUse \*Q\*(<:QUIT\*(:>\*U to finish an ABC session.
  130. X.sp \*(.3
  131. XWhen ABC starts up interactively, it displays a prompt and awaits
  132. Xinput.
  133. X.sp \*(.3
  134. XTYPING AND SUGGESTIONS:
  135. Xas you type, the system tries to suggest a possible continuation for
  136. Xwhat you have typed;
  137. Xto accept the suggestion, press [accept] (by default this is bound to
  138. Xthe \*[TAB\*] key;
  139. Xtype \*Q\*(<:?\*(:>\*U to find out the bindings for the keyboard you
  140. Xare using).
  141. XIf you don't want to accept the suggestion, just carry on typing (you
  142. Xcan always type character for character, ignoring the suggestions).
  143. XUsually the system knows where a letter must be capital and where not,
  144. Xand you usually don't have to use the shift key; however, in the few
  145. Xplaces where both a lower-case and an upper-case letter would be
  146. Xlegal (for instance for \*(<:AND\*(:>), you have to type the letter upper-case.
  147. X.sp \*(.3
  148. XWhen you type a control command, like \*(<:WHILE\*(:>, the system provides
  149. Xindentation automatically for the body of the command; to reduce the
  150. Xindentation one level, type [return].
  151. X.sp \*(.3
  152. XCORRECTING AND EDITING:
  153. Xthe [undo] key (by default bound to backspace) undoes the last key you
  154. Xtyped.
  155. XRepeatedly typing it undoes more and more, up to a certain maximum
  156. Xnumber of keypresses.
  157. X.sp \*(.3
  158. XTo correct other parts, you must put the \*Qfocus\*U onto the part you
  159. Xwant to change.
  160. XThe focus is displayed by underlining or reverse video.
  161. X[Widen] and [extend] make the focus larger,
  162. X[first] and [last] make it smaller.
  163. X.sp \*(.3
  164. X[Delete] deletes the contents of the focus.
  165. X.sp \*(.3
  166. X[Copy] copies the contents of the focus to a buffer, or if the focus
  167. Xis not focussed on anything, copies the contents of the buffer back to
  168. Xwhere you are positioned.
  169. X.sp \*(.3
  170. XMOVING THE FOCUS:
  171. X[Upline] and [downline] focus on one line above or below.
  172. X[Previous] and [next] move the focus left and right.
  173. X[Up], [down], [left], and [right] move an empty focus around.
  174. X[Goto] widens the focus to the largest thing at the current position.
  175. X.sp \*(.3
  176. XOTHER OPERATIONS:
  177. X[Look] redraws the screen; [record] records all keystrokes until the
  178. Xnext time you press [record] \(em [play] replays them.
  179. X[Redo] redoes the last key(s) undone; [interrupt] interrupts a running
  180. Xcommand.
  181. X.sp \*(.3
  182. XWORKSPACES:
  183. XTo create a new workspace, or go to an existing workspace, type
  184. X\*Q\*(<:>name\*(:>\*U.
  185. XTo go to the last workspace you were in, type a single \*Q\*(<:>\*(:>\*U.
  186. XTo get a list of workspace names, type \*Q\*(<:>>\*(:>\*U.
  187. X.sp \*(.3
  188. XHOW-TO's:
  189. XTo create a new how-to, just type the first line of the how-to.
  190. XThis creates the new how-to, and allows you to type the body.
  191. XUse [exit] to finish it (by default \*[ESC\*]\*[ESC\*]).
  192. X.sp \*(.3
  193. XTo visit a how-to, type a colon, followed by the name of the how-to.
  194. XAgain, use [exit] to exit.
  195. XTo visit the last how-to again, or the last how-to you got an error
  196. Xmessage for, type a single \*Q\*(<::\*(:>\*U.
  197. XTo get a list of the how-to's in this workspace, type \*Q\*(<:::\*(:>\*U.
  198. X.sp \*(.3
  199. XTo edit a location, type a \*Q\*(<:=\*(:>\*U followed by the name of the location.
  200. XTo re-edit it, type a single \*Q\*(<:=\*(:>\*U.
  201. XTo get a list of the locations in the workspace, type \*Q\*(<:=\|=\*(:>\*U.
  202. X.SH KEY BINDINGS
  203. XThe binding of editing operations like [accept] to keys
  204. Xmay be different for your keyboard;
  205. Xtype a \*Q\*(<:?\*(:>\*U at the prompt to find out what the bindings are
  206. Xfor your keyboard.
  207. X.br
  208. XTo redefine the keys used for editor operations, run \*Qabckeys\*U.
  209. XThis produces a private key definitions file.
  210. XYou will be given instructions on how to use it.
  211. X.br
  212. XKeys labeled
  213. X.I f1...f8
  214. Xare
  215. X.I "function keys."
  216. XOn Unix, the way to type these is terminal-dependent.
  217. XThe codes they send must be defined by the termcap entry for your terminal.
  218. X.br
  219. XIf a terminal has arrow keys 
  220. X.if t \*(uA, \(<-, \(->, \*(dA
  221. Xwhich transmit codes to the computer,
  222. Xthese should be used for Up, Down, Left and Right.
  223. XAgain, the termcap entry must define the codes.
  224. X.br
  225. XThe Goto operation is of most use if the cursor can be moved
  226. Xlocally at the terminal, or if the terminal has a mouse;
  227. Xthe Goto operation will sense the terminal for the cursor or mouse position.
  228. XOn Unix, we use two extra non-standard termcap capabilities for this:
  229. X\&\*Qsp\*U which gives the
  230. Xstring that must be sent to the terminal to sense the cursor position,
  231. Xand \*Qcp\*U which defines the format of the reply (in the same format as
  232. Xother cursor-addressing strings in termcap).
  233. XIf your terminal's mouse-click sends the position of the click
  234. Xautomatically, just set \*Qsp\*U to the empty string.
  235. XSee
  236. X.IR termcap (5)
  237. Xfor more details.
  238. X.SH FILES
  239. X.ta 5c
  240. X.if n .ta 25
  241. X.nf
  242. X\&$HOME/copybuf.abc    copy buffer between sessions
  243. X\&$HOME/abc/wsgroup.abc    table mapping workspace names to directory names
  244. X\&$HOME/abc/abckeys\*_$TERM    private key definitions file (Unix only)
  245. X\&$HOME/abc/abc.key    private key definitions file (non-Unix)
  246. X\&position.abc    focus position of edited how-to's in workspace
  247. X\&perm.abc    table mapping object names to file names
  248. X\&suggest.abc    suggestion list for user-defined commands
  249. X\&types.abc    table with codes for typechecking between how-to's
  250. X\&\**.cmd    command how-to's in this workspace
  251. X\&\**.zfd, \&\**.mfd, \&\**.dfd    function how-to's in this workspace
  252. X\&\**.zpd, \&\**.mpd, \&\**.dpd    predicate how-to's in this workspace
  253. X\&\**.cts    permanent locations in this workspace
  254. Xabc.msg    messages file, used for errors (not on Macintosh)
  255. Xabc.hlp    helpfile with this text (MacABC.help on Macintosh)
  256. X.fi
  257. X.sp \*(.3
  258. XThe latter two are searched for first in your startup directory,
  259. Xthen in $HOME/abc, and finally, on Unix,
  260. Xin a directory determined by the installer of ABC.
  261. XOn the IBM PC and Atari ST the directories in your $PATH are used
  262. Xin the last stage
  263. X(if you have a hard disk place these files
  264. Xin the workspaces directory \*(<:abc\*(:>).
  265. X.SH ATARI ST IMPLEMENTATION
  266. XThere are four files supplied: the program \*(<:abc.tos\*(:> itself,
  267. X\&\*(<:abckeys.tos\*(:> for changing your key bindings,
  268. Xthe help file \&\*(<:abc.hlp\*(:>,
  269. Xand the error messages file \*(<:abc.msg\*(:>.
  270. X(See FILES above.)
  271. X.br
  272. XIf you start ABC up from the desktop, and you want to use the options given
  273. Xabove, like \*(<:-w\*(:>,
  274. Xyou should rename \*(<:abc.tos\*(:> to \*(<:abc.ttp\*(:>.
  275. XThere is an additional facility for redirecting input and output:
  276. Xthe parameter \*(<:>outfile\*(:> redirects all output from ABC to the file
  277. Xcalled \*(<:outfile\*(:>,
  278. Xand similarly \*(<:<infile\*(:> takes its input from the file called \*(<:infile\*(:>.
  279. X.SH IBM PC IMPLEMENTATION
  280. XThere are four files for running ABC, the program \*(<:abc.exe\*(:> itself,
  281. X\&\*(<:abckeys.exe\*(:> for changing your key bindings,
  282. Xthe help file \*(<:abc.hlp\*(:>,
  283. Xand the error messages file \*(<:abc.msg\*(:>.
  284. X(See FILES above.)
  285. X.br
  286. XIf your screen size is non-standard, or your machine is not 100% BIOS
  287. Xcompatible (which is unusal these days), you can specify the screen-size,
  288. Xand whether to use the BIOS or ANSI.SYS for output, by typing after
  289. Xthe \*(<:A>\*(:> prompt, before you start ABC up, one of the following:
  290. X.RS
  291. X.nf
  292. X\&\*(<:SET SCREEN=ANSI \*(:>\fIlines cols\fP
  293. X\&\*(<:SET SCREEN=BIOS \*(:>\fIlines cols\fP
  294. X.fi
  295. X.RE
  296. XIf you are going to use \*(<:ANSI.SYS\*(:>,
  297. Xbe sure you have the line
  298. X.RS
  299. X\&\*(<:DEVICE=ANSI.SYS\*(:>
  300. X.RE
  301. Xin your \*(<:CONFIG.SYS\*(:> file.
  302. XConsult the DOS manual for further details.
  303. X.SH APPLE MACINTOSH IMPLEMENTATION
  304. XThere are three files supplied: \*(<:MacABC\*(:>, the application itself,
  305. X\&\*(<:MacABC.help\*(:>, the help file,
  306. Xand \*(<:MacABC.doc\*(:>, a MacWrite document containing a variant
  307. Xof this text.
  308. XThe help file should be in the same folder as MacABC,
  309. Xor in your System Folder.
  310. X.br
  311. XMacABC runs in a single window.
  312. XYou'll notice that most operations are menu entries,
  313. Xas well as being possible from the keyboard.
  314. XYou can start ABC up by double-clicking the MacABC icon
  315. Xin which case you start up in the last workspace used,
  316. Xor by double-clicking on any icon in a workspace,
  317. Xin which case you start in that workspace.
  318. XIn this latter case, if the filename of the icon you clicked on
  319. Xends in \*(<:.cmd\*(:>, that how-to is executed,
  320. Xbut the how-to may not have any parameters.
  321. X.br
  322. XInstead of the special option flags mentioned above, most of the tasks,
  323. Xlike recovering a workspace, can be done from the File menu.
  324. X.br
  325. X.ps 8
  326. X.vs 10p
  327. X\*(dg Notes for Macintosh guru's:
  328. X.br
  329. XThe messages are \*(<:STR#\*(:> resources in MacABC; you must use a
  330. Xresource editor to change them.
  331. X.br
  332. XMacABC uses \*(<:Monaco 9\*(:> for the screen, and \*(<:Courier 10\*(:>
  333. Xfor printing.
  334. XYou can change them with ResEdit,
  335. Xby editing the resource with type \*(<:Conf\*(:>
  336. Xand ID \*(<:0\*(:>.
  337. XThe horizontal and vertical window-size and the window-title can
  338. Xalso be adapted there.
  339. XTo facilitate this,
  340. Xfirst Paste the \*(<:TMPL\*(:> resource with ID \*(<:5189\*(:>
  341. Xnamed \*(<:Conf\*(:> from MacABC to (a copy of) ResEdit.
  342. XBut beware, MacABC only works properly with Fixed-width Fonts like
  343. X\&\*(<:Monaco\*(:> and \*(<:Courier\*(:>.
  344. X.ps
  345. X.vs
  346. X.SH SEE ALSO
  347. X.in +.5i
  348. X.ti -.5i
  349. XLeo Geurts, Lambert Meertens and Steven Pemberton,
  350. X.I "The ABC Programmer's Handbook,"
  351. XPrentice-Hall, Englewood Cliffs, New Jersey, 1989,
  352. XISBN\ 0-13-000027-2.
  353. X.ti -.5i
  354. XSteven Pemberton,
  355. X.I "An Alternative Simple Language and Environment for PCs,"
  356. XIEEE Software, Vol. 4, No. 1, January 1987, pp. 56-64.
  357. X.ti -.5i
  358. X.I "The ABC Newsletter."
  359. XAvailable free from CWI.
  360. X.SH AUTHORS
  361. XFrank van Dijk,
  362. XLeo Geurts,
  363. XTimo Krijnen,
  364. XLambert Meertens,
  365. XSteven Pemberton,
  366. XGuido van Rossum.
  367. X.SH ADDRESS
  368. XABC Distribution,
  369. XCWI/AA,
  370. XPostbox 4079,
  371. X1009 AB Amsterdam,
  372. XThe Netherlands.
  373. X.br
  374. XE-mail: \*Qabc@cwi.nl\*U.
  375. X.fl
  376. X.ne 5v
  377. X.SH SUMMARY OF SPECIAL ACTIONS
  378. X.rs
  379. X.ta 2.5c
  380. X.if n .ta 8
  381. X.nf
  382. X.sp
  383. X\*(<::\*(:>\fIname\fP    Visit how-to called \*Qname\*U
  384. X\*(<::\*(:>    Visit last how-to refered to
  385. X\*(<:::\*(:>    Display headings of how-to's in this workspace
  386. X.sp \*(.3
  387. X\*(<:=\*(:>\fIname\fP    Visit contents of location
  388. X\*(<:=\*(:>    Visit last location visited
  389. X\*(<:==\*(:>    Display names of permament locations in this workspace
  390. X.sp \*(.3
  391. X\*(<:>\*(:>\fIname\fP    Visit workspace \*Qname\*U
  392. X\*(<:>\*(:>    Visit last workspace visited
  393. X\*(<:>>\*(:>    Display list of workspace names
  394. X.sp \*(.3
  395. X\*(<:QUIT\*(:>    Leave ABC
  396. X.fi
  397. X.ne 5v
  398. X.SH SUMMARY OF EDITING OPERATIONS
  399. X.rs
  400. X.ta 2.5c 5.5c
  401. X.if n .ta 10 27
  402. X.nf
  403. X.sp
  404. XName    Default Keys\*(dg    Short description
  405. X.sp \*(.3
  406. XAccept    \*[TAB\*]    Accept suggestion, focus to hole or end of line
  407. XReturn    \*[RETURN\*]    Add line or decrease indentation
  408. X.sp \*(.3
  409. XWiden    \fIf1\fP, \*[ESC\*] w    Widen focus
  410. XExtend    \fIf2\fP, \*[ESC\*] e    Extend focus (usually to the right)
  411. XFirst    \fIf3\fP, \*[ESC\*] f    Move focus to first contained item
  412. XLast    \fIf4\fP, \*[ESC\*] l    Move focus to last contained item
  413. X.sp \*(.3
  414. XPrevious    \fIf5\fP, \*[ESC\*] p    Move focus to previous item
  415. XNext    \fIf6\fP, \*[ESC\*] n    Move focus to next item
  416. XUpline    \fIf7\fP, \*[ESC\*] u    Move focus to whole line above
  417. XDownline    \fIf8\fP, \*[ESC\*] d    Move focus to whole line below
  418. X.sp \*(.3
  419. XUp    \*(uA, \*[ESC\*] U    Make new hole, move up
  420. XDown    \*(dA, \*[ESC\*] D    Make new hole, move down
  421. XLeft    \(<-, \*[ESC\*] ,    Make new hole, move left
  422. XRight    \(->, \*[ESC\*] .    Make new hole, move right
  423. X.sp \*(.3
  424. XGoto    \*[ctrl-G\*], \fImouseclick\fP      New focus at cursor position
  425. X.sp \*(.3
  426. XUndo    \*[BACKSPACE\*]    Undo effect of last key pressed (may be repeated)
  427. XRedo    \*[ctrl-U\*]    Redo last UNDOne key (may be repeated)
  428. X.sp \*(.3
  429. XCopy    \fIf9\fP, \*[ctrl-C\*], \*[ESC\*]c      Copy buffer to hole, or focus to buffer
  430. XDelete    \*[ctrl-D\*]    Delete contents of focus (to buffer if empty)
  431. X.sp \*(.3
  432. XRecord    \*[ctrl-R\*]    Start/stop recording keystrokes
  433. XPlay    \*[ctrl-P\*]    Play back recorded keystrokes
  434. X.sp \*(.3
  435. XLook    \*[ctrl-L\*]    Redisplay screen
  436. XHelp    \fIf10\fP, \*[ESC\*]?    Print summary of editing operations
  437. X.sp \*(.3
  438. XExit    \*[ctrl-X\*]    Finish changes or execute command
  439. XInterrupt (as set by \*Qstty\*U)    Interrupt command execution
  440. XSuspend (as set by \*Qstty\*U)    Suspend ABC (only for shell with job control)
  441. X.fi
  442. X.sp
  443. X\*(dg Notes:
  444. X.sp \*(.3
  445. X\*[Ctrl-D\*] means: hold the \*[CTRL\*] (or \*[CONTROL\*]) key down while pressing d.
  446. X.br
  447. X\&\*[ESC\*] w means: press the \*[ESC\*] key first, then w.
  448. X.fl
  449. X.if t .bp
  450. X.SH ABC QUICK REFERENCE
  451. X.PD 0v
  452. X.nh
  453. X.de Sh
  454. X.fl
  455. X.if t .ne 5
  456. X.sp \*(.5
  457. X.LP
  458. X.if t .ft 3
  459. X\&\\$1
  460. X.if t .ft 1
  461. X.sp \*(.5
  462. X..
  463. X.de Lp
  464. X.sp \*(.3
  465. X..
  466. X.de LI
  467. X.fl
  468. X.if t .ft 2
  469. X.if t .TP 36n
  470. X.if n .TP 30n
  471. X.if n .nr LL 81m
  472. X..
  473. X.de IS
  474. X.if t .ft 1
  475. X..
  476. X.rs
  477. X.Sh "COMMANDS"
  478. X.LI
  479. X\*(<:WRITE\*(:> expr
  480. X.IS
  481. XWrite to screen;
  482. X.if n .br
  483. X\*(<:/\*(:> before or after \fIexpr\fP gives new line
  484. X.LI
  485. X\*(<:READ\*(:>\ address\ \*(<:EG\*(:>\ expr
  486. X.IS
  487. XRead expression from terminal to \fIaddress\fP;
  488. X.if n .br
  489. X\fIexpr\fP is example
  490. X.LI
  491. X\*(<:READ\*(:> address \*(<:RAW\*(:>
  492. X.IS
  493. XRead line of text
  494. X.LI
  495. X\*(<:PUT\*(:> expr \*(<:IN\*(:> address
  496. X.IS
  497. XPut value of \fIexpr\fP in \fIaddress\fP
  498. X.LI
  499. X\*(<:SET\ RANDOM\*(:>\ expr
  500. X.IS
  501. XStart random sequence for \*(<:random\*(:> and \*(<:choice\*(:>
  502. X.LI
  503. X\*(<:REMOVE\*(:> expr \*(<:FROM\*(:> list
  504. X.IS
  505. XRemove one element from \fIlist\fP
  506. X.LI
  507. X\*(<:INSERT\*(:> expr \*(<:IN\*(:> list
  508. X.IS
  509. XInsert in right place
  510. X.LI
  511. X\*(<:DELETE\*(:> address
  512. X.IS
  513. XDelete permanent location or table entry
  514. X.LI
  515. X\*(<:PASS\*(:>
  516. X.IS
  517. XDo nothing
  518. X.LI
  519. X\*(<:\fIKEYWORD\fR\*(:>\ expr \*(<:\fIKEYWORD\fR\*(:>\ .\^.\^.
  520. X.IS
  521. XExecute user-defined command
  522. X.LI
  523. X\*(<:\fIKEYWORD\fR\*(:>
  524. X.IS
  525. XExecute refined command
  526. X.Lp
  527. X.LI
  528. X\*(<:CHECK\*(:> test
  529. X.IS
  530. XCheck \fItest\fP and stop if it fails
  531. X.LI
  532. X\*(<:IF\*(:> test\*(<::\*(:>
  533. X.IS
  534. XIf \fItest\fP succeeds, execute \fIcommands\fP;
  535. X.LI
  536. X\*(<:   \*(:>commands
  537. X.IS
  538. X    no \*(<:ELSE\*(:> allowed
  539. X.fl
  540. X.ne 4
  541. X.LI
  542. X\*(<:SELECT:\*(:>
  543. X.IS
  544. XSelect one alternative:
  545. X.LI
  546. X\*(<:    \*(:>test\*(<::\*(:> commands
  547. X.IS
  548. X     try each \fItest\fP in order
  549. X.LI
  550. X\*(<:    \*(:>.\^.\^.
  551. X.IS
  552. X     (one must succeed;
  553. X.LI
  554. X\*(<:    \*(:>test\*(<::\*(:> commands
  555. X.IS
  556. X     the last \fItest\fP may be \*(<:ELSE\*(:>)
  557. X.LI
  558. X\*(<:WHILE\*(:> test\*(<::\*(:>
  559. X.IS
  560. XAs long as \fItest\fP succeeds
  561. X.LI
  562. X\*(<:   \*(:>commands
  563. X.IS
  564. X    execute \fIcommands\fP
  565. X.LI
  566. X\*(<:FOR\*(:>\ name\*(<:,\*(:>\^.\^.\^.\ \*(<:IN\*(:>\ train\*(<::\*(:>
  567. X.IS
  568. XTake each element of \fItrain\fP in turn
  569. X.LI
  570. X\*(<:   \*(:>commands
  571. X.IS
  572. X.Sh "HOW-TO's"
  573. X.LI
  574. X\*(<:HOW\ TO\ \fIKEYWORD\fR\*(:>\ .\^.\^.\*(<::\*(:>
  575. X.IS
  576. XDefine new command \fIKEYWORD\fP\ .\^.\^.
  577. X.LI
  578. X\*(<:   \*(:>commands
  579. X.IS
  580. X.LI
  581. X\*(<:HOW\ TO\ RETURN\*(:>\ f\*(<::\*(:>
  582. X.IS
  583. XDefine new function \fIf\fP with no arguments
  584. X.LI
  585. X\*(<:   \*(:>commands
  586. X.IS
  587. X   (returns a value)
  588. X.LI
  589. X\*(<:HOW\ TO\ RETURN\*(:>\ f\ x\*(<::\*(:>
  590. X.IS
  591. XDefine new function \fIf\fP with one argument
  592. X.LI
  593. X\*(<:   \*(:>commands
  594. X.IS
  595. X.LI
  596. X\*(<:HOW\ TO\ RETURN\*(:> x f y\*(<::\*(:>
  597. X.IS
  598. XDefine new function \fIf\fP with two arguments
  599. X.LI
  600. X\*(<:   \*(:>commands
  601. X.IS
  602. X.LI
  603. X\*(<:HOW\ TO\ REPORT\*(:> pr\*(<::\*(:>
  604. X.IS
  605. XDefine new predicate \fIpr\fP with no arguments
  606. X.LI
  607. X\*(<:   \*(:>commands
  608. X.IS
  609. X   (succeeds/fails) 
  610. X.LI
  611. X\*(<:HOW\ TO\ REPORT\*(:> pr x\*(<::\*(:>
  612. X.IS
  613. XDefine new predicate \fIpr\fP with one argument
  614. X.LI
  615. X\*(<:   \*(:>commands
  616. X.IS
  617. X.LI
  618. X\*(<:HOW\ TO\ REPORT\*(:> x pr y\*(<::\*(:>
  619. X.IS
  620. XDefine new predicate \fIpr\fP with two arguments
  621. X.LI
  622. X\*(<:   \*(:>commands
  623. X.IS
  624. X.Lp
  625. X.LI
  626. X\*(<:SHARE\*(:> name\*(<:,\*(:>.\^.\^.
  627. X.IS
  628. XShare permanent locations
  629. X.if n .br
  630. X(before commands of how-to)
  631. X.Sh "Refinements (after the commands of a how-to)"
  632. X.LI
  633. XKEYWORD \*(<::\*(:> commands
  634. X.IS
  635. XDefine command refinement
  636. X.LI
  637. Xname\*(<::\*(:> commands
  638. X.IS
  639. XDefine expression- or test-refinement
  640. X.Sh "Terminating commands" ""
  641. X.LI
  642. X\*(<:QUIT\*(:>
  643. X.IS
  644. XLeave command how-to or command refinement,
  645. X.br
  646. Xor leave ABC
  647. X.LI
  648. X\*(<:RETURN\*(:> expr
  649. X.IS
  650. XLeave function how-to or expression refinement,
  651. X.if t .br
  652. Xreturn value of \fIexpr\fP
  653. X.LI
  654. X\*(<:REPORT\*(:> test
  655. X.IS
  656. XLeave predicate how-to or test-refinement,
  657. X.br
  658. Xreport outcome of \fItest\fP
  659. X.LI
  660. X\*(<:SUCCEED\*(:>
  661. X.IS
  662. XThe same, report success
  663. X.LI
  664. X\*(<:FAIL\*(:>
  665. X.IS
  666. XThe same, report failure
  667. X.Sh "EXPRESSIONS AND ADDRESSES"
  668. X.LI
  669. X\*(<:666\*(:>,\ \*(<:3.14\*(:>,\ \*(<:3.14e-9\*(:>
  670. X.IS
  671. XExact constants
  672. X.Lp
  673. X.LI
  674. Xexpr\*(<:,\*(:>expr\*(<:,\*(:>\^.\^.\^.
  675. X.IS
  676. XCompound
  677. X.LI
  678. Xname\*(<:,\*(:>name\*(<:,\*(:>\^.\^.\^.
  679. X.IS
  680. XNaming (may also be used as address)
  681. X.Lp
  682. X.LI
  683. Xtext\|\*(<:@\*(:>\|p
  684. X.IS
  685. X\*(<:"ABCD"@2 = "BCD"\*(:> (also address)
  686. X.\"Trimmed text, from p-th character on (also address)
  687. X.LI
  688. Xtext\*(<:|\*(:>q
  689. X.IS
  690. X\*(<:"ABCD"|3 = "ABC"\*(:> (also address)
  691. X.\"The same, first q characters (also address)
  692. X.LI
  693. Xtext\|\*(<:@\*(:>\|p\*(<:|\*(:>q
  694. X.IS
  695. X\*(<:"ABCD"@2|1 = "BCD"|1 = "B"\*(:>
  696. X.\"The same, from p-th on, first q characters (also location)
  697. X.Lp
  698. X.LI
  699. Xtable\*(<:[\*(:>expr\*(<:]\*(:>
  700. X.IS
  701. XTable selection (also address)
  702. X.Lp
  703. X.LI
  704. X\*(<:"Jan"\*(:>,\ \*(<:'Feb'\*(:>,\ \*(<:'Won''t!'\*(:>
  705. X.IS
  706. XTextual displays (empty: \*(<:""\*(:> or \*(<:''\*(:>)
  707. X.LI
  708. X\*(<:"value\ =\ `\*(:>expr\*(<:`;"\*(:>
  709. X.IS
  710. XConversion of \fIexpr\fP to text
  711. X.Lp
  712. X.LI
  713. X\*(<:{1;\ 2;\ 2;\*(:>\ .\^.\^.\^\*(<:}\*(:>
  714. X.IS
  715. XList display (empty: \*(<:{}\*(:>)
  716. X.LI
  717. X\*(<:{1..9;\*(:>\ .\^.\^.\^\*(<:}\*(:>,\ \*(<:{"a".."z";\*(:>\ .\^.\^.\^\*(<:}\*(:>
  718. X.IS
  719. XList of consecutive values
  720. X.Lp
  721. X.LI
  722. X\*(<:{["Jan"]: 1; ["Feb"]: 2; \*(:>.\^.\^.\^\*(<:}\*(:>
  723. X.IS
  724. XTable display (empty: \*(<:{}\*(:>)
  725. X.Lp
  726. X.LI
  727. Xf,\ f x,\ x f y
  728. X.IS
  729. XResult of function \fIf\fP (no permanent effects)
  730. X.LI
  731. Xname
  732. X.IS
  733. XResult of refinement (no permanent effects)
  734. X.Sh "TESTS"
  735. X.LI
  736. Xx \*(<:<\*(:> \|y,\ x \*(<:<=\*(:> \|y,\ x \*(<:>=\*(:> \|y,\ x \*(<:>\*(:> \|y
  737. X.IS
  738. XOrder tests
  739. X.LI
  740. Xx \*(<:=\*(:> \|y,\ x \*(<:<>\*(:> \|y
  741. X.IS
  742. X     (\*(<:<>\*(:> means \*Qnot equals\*U)
  743. X.LI
  744. X\*(<:0\ <=\ d\ <\ 10\*(:>
  745. X.Lp
  746. X.LI
  747. Xpr,\ pr x,\ x pr y
  748. X.IS
  749. XOutcome of predicate \fIpr\fP (no permanent effects)
  750. X.LI
  751. Xname
  752. X.IS
  753. XOutcome of refinement (no permanent effects)
  754. X.Lp
  755. X.LI
  756. Xtest\ \*(<:AND\*(:>\ test\ \*(<:AND\*(:>\ .\^.\^.
  757. X.IS
  758. XFails as soon as one of the tests fails
  759. X.LI
  760. Xtest\ \*(<:OR\*(:>\ test\ \*(<:OR\*(:>\ .\^.\^.
  761. X.IS
  762. XSucceeds as soon as one of the tests succeeds
  763. X.LI
  764. X\*(<:NOT\*(:>\ test
  765. X.Lp
  766. X.LI
  767. X\*(<:SOME \*(:>name\*(<:,\*(:>\^.\^.\^. \*(<:IN\*(:> train \*(<:HAS\*(:> test
  768. X.IS
  769. X.if n .br
  770. XSets \fIname\fP, .\^.\^. on success
  771. X.LI
  772. X\*(<:EACH \*(:>name\*(<:,\*(:>\^.\^.\^. \*(<:IN\*(:> train \*(<:HAS\*(:> test
  773. X.IS
  774. X.if n .br
  775. XSets \fIname\fP, .\^.\^. on failure
  776. X.LI
  777. X\*(<:NO   \*(:>name\*(<:,\*(:>\^.\^.\^. \*(<:IN\*(:> train \*(<:HAS\*(:> test
  778. X.IS
  779. X.if n .br
  780. XSets \fIname\fP, .\^.\^. on failure
  781. X.ne 5
  782. X.Sh "PREDEFINED FUNCTIONS AND PREDICATES"
  783. X.ns
  784. X.Sh "Functions and predicates on numbers"
  785. X.LI
  786. X\*(<:~\*(:>x
  787. X.IS
  788. XApproximate value of \fIx\fP
  789. X.LI
  790. X\*(<:exactly\*(:>\ x
  791. X.IS
  792. XExact value of \fIx\fP
  793. X.LI
  794. X\*(<:exact\*(:> x
  795. X.IS
  796. XTest if \fIx\fP is exact
  797. X.LI
  798. X\*(<:+\*(:>x,\ x\*(<:+\*(:>y,\ x\*(<:-\*(:>y,\ \*(<:-\*(:>x,\ x\*(<:*\*(:>y,\ x\*(<:/\*(:>y
  799. X.IS
  800. XPlain arithmetic
  801. X.LI
  802. Xx\*(<:**\*(:>y
  803. X.IS
  804. X\fIx\fP raised to the power \fIy\fP
  805. X.LI
  806. X\*(<:root\*(:>\ x,\ n\ \*(<:root\*(:>\ x
  807. X.IS
  808. XSquare root, \fIn\fP-th root
  809. X.LI
  810. X\*(<:abs\*(:>\ x,\ \*(<:sign\*(:>\ x
  811. X.IS
  812. XAbsolute value, sign (= \(mi1, 0, or +1)
  813. X.LI
  814. X\*(<:round\*(:>\ x,\ \*(<:floor\*(:>\ x,\ \*(<:ceiling\*(:>\ x
  815. X.IS
  816. XRounded to whole number
  817. X.LI
  818. Xn\ \*(<:round\*(:>\ x
  819. X.IS
  820. X\fIx\fP rounded to \fIn\fP digits after decimal point
  821. X.LI
  822. Xa\ \*(<:mod\*(:>\ n
  823. X.IS
  824. XRemainder of \fIa\fP on division by \fIn\fP
  825. X.LI
  826. X\*(<:*/\*(:>x
  827. X.IS
  828. XNumerator of exact number \fIx\fP
  829. X.LI
  830. X\*(<:/*\*(:>x
  831. X.IS
  832. XDenominator
  833. X.LI
  834. X\*(<:random\*(:>
  835. X.IS
  836. XRandom approximate number \fIr\fP, 0 \*(<= \fIr\fP < 1
  837. X.LI
  838. X\*(<:e\*(:>,\ \*(<:exp\*(:>\ x
  839. X.IS
  840. XBase of natural logarithm, exponential function
  841. X.LI
  842. X\*(<:log\*(:>\ x,\ b\ \*(<:log\*(:>\ x
  843. X.IS
  844. XNatural logarithm, logarithm to the base \fIb\fP
  845. X.LI
  846. X\*(<:pi\*(:>,\ \*(<:sin\*(:>\ x,\ \*(<:cos\*(:>\ x,\ \*(<:tan\*(:>\ x,\ \*(<:arctan\*(:>\ x
  847. X.IS
  848. X.if n .br
  849. XTrigonometric functions, with \fIx\fP in radians
  850. X.LI
  851. X\*(<:angle\*(:>\ (x,\ y),\ \*(<:radius\*(:>\ (x,\ y)
  852. X.IS
  853. XAngle of and radius to point \fI(x,\ y)\fP
  854. X.LI
  855. Xc\ \*(<:sin\*(:>\ x,\ c\ \*(<:cos\*(:>\ x,\ c\ \*(<:tan\*(:>\ x
  856. X.IS
  857. XSimilar, with the circle divided into \fIc\fP parts
  858. X.LI
  859. Xc\ \*(<:arctan\*(:>\ x,\ c\ \*(<:angle\*(:>\ (x,\ y)
  860. X.IS
  861. X    (e.g. 360 for degrees)
  862. X.LI
  863. X\*(<:now\*(:>
  864. X.IS
  865. Xe.g. \*(<:(1999, 12, 31, 23, 59, 59.999)\*(:>
  866. X.Sh "Functions on texts"
  867. X.LI
  868. Xt\*(<:^\*(:>u
  869. X.IS
  870. X\fIt\fP and \fIu\fP joined into one text
  871. X.LI
  872. Xt\*(<:^^\*(:>n
  873. X.IS
  874. X\fIt\fP repeated \fIn\fP times
  875. X.LI
  876. X\*(<:lower\*(:>\ t
  877. X.IS
  878. X\*(<:lower "aBc" = "abc"\*(:>
  879. X.LI
  880. X\*(<:upper\*(:>\ t
  881. X.IS
  882. X\*(<:upper "aBc" = "ABC"\*(:>
  883. X.LI
  884. X\*(<:stripped\*(:>\ t
  885. X.IS
  886. XStrip leading and trailing spaces from \fIt\fP
  887. X.LI
  888. X\*(<:split\*(:>\ t
  889. X.IS
  890. XSplit text \fIt\fP into words
  891. X.Sh "Function on tables"
  892. X.LI
  893. X\*(<:keys\*(:> table
  894. X.IS
  895. XList of all keys in \fItable\fP
  896. X.Sh "Functions and predicates on trains"
  897. X.LI
  898. X\*(<:#\*(:>train
  899. X.IS
  900. XNumber of elements in \fItrain\fP
  901. X.LI
  902. Xe\*(<:#\*(:>train
  903. X.IS
  904. XNumber of elements equal to \fIe\fP
  905. X.LI
  906. Xe \*(<:in\*(:> train,\ e \*(<:not.in\*(:> train
  907. X.IS
  908. XTest for presence or absence
  909. X.LI
  910. X\*(<:min\*(:> train
  911. X.IS
  912. XSmallest element of \fItrain\fP
  913. X.LI
  914. Xe \*(<:min\*(:> train
  915. X.IS
  916. XSmallest element larger than \fIe\fP
  917. X.LI
  918. X\*(<:max\*(:> train,\ e \*(<:max\*(:> train
  919. X.IS
  920. XLargest element
  921. X.LI
  922. Xtrain \*(<:item\*(:> n
  923. X.IS
  924. X\fIn\fP-th element
  925. X.LI
  926. X\*(<:choice\*(:> train
  927. X.IS
  928. XRandom element
  929. X.Sh "Functions on all types"
  930. X.LI
  931. Xx\*(<:<<\*(:>n
  932. X.IS
  933. X\fIx\fP converted to text, aligned left in width \fIn\fP
  934. X.LI
  935. Xx\*(<:><\*(:>n
  936. X.IS
  937. XThe same,\ centred
  938. X.LI
  939. Xx\*(<:>>\*(:>n
  940. X.IS
  941. XThe same, aligned right
  942. X.Sh "THE CHARACTERS"
  943. X.LI
  944. X\&\*(<: !"#$%&'()*+,-./\*(:>
  945. X.IS
  946. XThis is the order of all characters
  947. X.LI
  948. X\&\*(<:0123456789:;<=>?\*(:>
  949. X.IS
  950. Xthat may occur in a text.
  951. X.LI
  952. X\*(<:@ABCDEFGHIJKLMNO\*(:>
  953. X.IS
  954. X(The first is a space.)
  955. X.LI
  956. X\*(<:PQRSTUVWXYZ[\e]^_\*(:>
  957. X.LI
  958. X\*(<:`abcdefghijklmno\*(:>
  959. X.LI
  960. X\*(<:pqrstuvwxyz{|}~\*(:>
  961. X\fR
  962. END_OF_FILE
  963.   if test 23759 -ne `wc -c <'abc/abc.1'`; then
  964.     echo shar: \"'abc/abc.1'\" unpacked with wrong size!
  965.   fi
  966.   # end of 'abc/abc.1'
  967. fi
  968. if test -f 'abc/bed/e1tabl.c' -a "${1}" != "-c" ; then 
  969.   echo shar: Will not clobber existing file \"'abc/bed/e1tabl.c'\"
  970. else
  971.   echo shar: Extracting \"'abc/bed/e1tabl.c'\" \(27315 characters\)
  972.   sed "s/^X//" >'abc/bed/e1tabl.c' <<'END_OF_FILE'
  973. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1988. */
  974. X
  975. X/* Data file with grammar tables. */
  976. X
  977. X/* WARNING: this file is constructed by 'mktable'. */
  978. X/* If you want to change the grammar, see ../boot/README. */
  979. X
  980. X#include "b.h"
  981. X#include "bedi.h"
  982. X#include "tabl.h"
  983. X
  984. Xclasselem s0[]= {95,0};
  985. Xclasselem i0[]= {58,95,0};
  986. Xclasselem s1[]= {1,0};
  987. Xclasselem i1[]= {58,1,0};
  988. Xclasselem s2[]= {96,0};
  989. Xclasselem i2[]= {26,96,27,96,28,96,29,96,30,96,31,96,32,96,33,96,34,96,
  990. X    35,96,36,96,37,96,38,96,39,96,40,96,41,96,42,96,43,96,44,96,45,
  991. X    96,46,96,47,96,48,96,49,96,50,96,51,96,0};
  992. Xclasselem s3[]= {2,0};
  993. Xclasselem i3[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
  994. 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,
  995. X    49,2,50,2,51,2,0};
  996. Xclasselem s4[]= {97,0};
  997. Xclasselem i4[]= {16,97,18,97,0};
  998. Xclasselem s5[]= {3,0};
  999. Xclasselem i5[]= {16,3,18,3,0};
  1000. Xclasselem s6[]= {98,0};
  1001. Xclasselem i6[]= {53,98,0};
  1002. Xclasselem s7[]= {4,0};
  1003. Xclasselem i7[]= {53,4,0};
  1004. Xclasselem s8[]= {99,0};
  1005. Xclasselem i8[]= {2,99,3,99,4,99,5,99,6,99,7,99,8,99,10,99,11,99,12,99,
  1006. X    13,99,14,99,15,99,16,99,17,99,18,99,19,99,20,99,21,99,22,99,23,
  1007. X    99,24,99,25,99,26,99,27,99,28,99,29,99,30,99,31,99,32,99,33,99,
  1008. X    34,99,35,99,36,99,37,99,38,99,39,99,40,99,41,99,42,99,43,99,44,
  1009. X    99,45,99,46,99,47,99,48,99,49,99,50,99,51,99,52,99,53,99,54,99,
  1010. X    55,99,56,99,58,99,59,99,60,99,61,99,62,99,0};
  1011. Xclasselem s9[]= {5,0};
  1012. 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,
  1013. 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,
  1014. 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,
  1015. 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,
  1016. X    5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,0};
  1017. Xclasselem s10[]= {100,0};
  1018. Xclasselem i10[]= {2,100,3,100,5,100,6,100,7,100,8,100,9,100,10,100,11,
  1019. X    100,12,100,13,100,14,100,15,100,16,100,17,100,18,100,19,100,20,
  1020. X    100,21,100,22,100,23,100,24,100,25,100,26,100,27,100,28,100,29,
  1021. X    100,30,100,31,100,32,100,33,100,34,100,35,100,36,100,37,100,38,
  1022. X    100,39,100,40,100,41,100,42,100,43,100,44,100,45,100,46,100,47,
  1023. X    100,48,100,49,100,50,100,51,100,52,100,53,100,54,100,55,100,56,
  1024. X    100,58,100,59,100,60,100,61,100,62,100,0};
  1025. Xclasselem s11[]= {6,0};
  1026. 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,
  1027. 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,
  1028. 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,
  1029. 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,
  1030. X    6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,0};
  1031. Xclasselem s12[]= {101,0};
  1032. Xclasselem i12[]= {5,101,12,101,13,101,15,101,17,101,21,101,22,101,23,101,
  1033. X    25,101,55,101,60,101,62,101,0};
  1034. Xclasselem s13[]= {7,0};
  1035. Xclasselem i13[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1036. X    7,62,7,0};
  1037. Xclasselem s14[]= {102,0};
  1038. Xclasselem i14[]= {2,102,3,102,4,102,5,102,6,102,7,102,8,102,9,102,10,102,
  1039. X    11,102,12,102,13,102,14,102,15,102,16,102,17,102,18,102,19,102,
  1040. X    20,102,21,102,22,102,23,102,24,102,25,102,26,102,27,102,28,102,
  1041. X    29,102,30,102,31,102,32,102,33,102,34,102,35,102,36,102,37,102,
  1042. X    38,102,39,102,40,102,41,102,42,102,43,102,44,102,45,102,46,102,
  1043. X    47,102,48,102,49,102,50,102,51,102,52,102,53,102,54,102,55,102,
  1044. X    56,102,57,102,58,102,59,102,60,102,61,102,62,102,0};
  1045. Xclasselem s15[]= {8,0};
  1046. 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,
  1047. 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,
  1048. 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,
  1049. 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,
  1050. 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};
  1051. Xclasselem s16[]= {103,0};
  1052. Xclasselem s17[]= {104,0};
  1053. Xclasselem s18[]= {9,11,12,7,13,1,3,10,14,18,20,0};
  1054. Xclasselem i18[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1055. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1056. Xclasselem a18[]= {44,9,32,12,91,13,0};
  1057. Xclasselem j18[]= {1,11,2,12,0};
  1058. Xclasselem s19[]= {93,9,11,12,7,13,1,3,10,14,18,20,0};
  1059. Xclasselem i19[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1060. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1061. Xclasselem a19[]= {44,9,32,12,91,13,0};
  1062. Xclasselem j19[]= {1,11,2,12,0};
  1063. Xclasselem s20[]= {11,12,7,13,1,3,10,14,18,20,0};
  1064. Xclasselem i20[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1065. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1066. Xclasselem a20[]= {32,12,91,13,0};
  1067. Xclasselem j20[]= {1,11,2,12,0};
  1068. Xclasselem s21[]= {7,13,1,3,10,14,18,20,0};
  1069. Xclasselem i21[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1070. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1071. Xclasselem a21[]= {91,13,0};
  1072. Xclasselem s22[]= {11,7,13,1,3,10,14,18,20,0};
  1073. Xclasselem i22[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1074. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1075. Xclasselem a22[]= {91,13,0};
  1076. Xclasselem j22[]= {1,11,0};
  1077. Xclasselem s23[]= {13,1,3,10,14,18,20,0};
  1078. Xclasselem i23[]= {58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1079. Xclasselem a23[]= {91,13,0};
  1080. Xclasselem s24[]= {93,15,11,12,7,13,1,3,10,14,18,20,16,17,0};
  1081. Xclasselem i24[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1082. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,52,17,0};
  1083. Xclasselem a24[]= {59,15,32,12,91,13,59,16,0};
  1084. Xclasselem j24[]= {1,11,2,12,0};
  1085. Xclasselem s25[]= {11,12,7,13,1,3,10,14,18,20,15,0};
  1086. Xclasselem i25[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1087. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1088. Xclasselem a25[]= {32,12,91,13,59,15,0};
  1089. Xclasselem j25[]= {1,11,2,12,0};
  1090. Xclasselem s26[]= {11,12,7,13,1,3,10,14,18,20,0};
  1091. Xclasselem i26[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1092. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1093. Xclasselem a26[]= {32,12,91,13,0};
  1094. Xclasselem j26[]= {1,11,2,12,0};
  1095. Xclasselem s27[]= {17,0};
  1096. Xclasselem i27[]= {52,17,0};
  1097. Xclasselem s28[]= {16,17,0};
  1098. Xclasselem i28[]= {52,17,0};
  1099. Xclasselem a28[]= {59,16,0};
  1100. Xclasselem s29[]= {93,5,22,19,0};
  1101. 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,
  1102. 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,
  1103. 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,
  1104. 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,
  1105. X    5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,57,22,0};
  1106. Xclasselem j29[]= {1,19,0};
  1107. Xclasselem s30[]= {5,22,0};
  1108. 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,
  1109. 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,
  1110. 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,
  1111. 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,
  1112. X    5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,57,22,0};
  1113. Xclasselem s31[]= {5,22,19,0};
  1114. 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,
  1115. 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,
  1116. 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,
  1117. 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,
  1118. X    5,53,5,54,5,55,5,56,5,58,5,59,5,60,5,61,5,62,5,57,22,0};
  1119. Xclasselem j31[]= {1,19,0};
  1120. Xclasselem s32[]= {93,6,22,21,0};
  1121. 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,
  1122. 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,
  1123. 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,
  1124. 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,
  1125. X    6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,57,22,0};
  1126. Xclasselem j32[]= {1,21,0};
  1127. Xclasselem s33[]= {6,22,0};
  1128. 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,
  1129. 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,
  1130. 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,
  1131. 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,
  1132. X    6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,57,22,0};
  1133. Xclasselem s34[]= {6,22,21,0};
  1134. 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,
  1135. 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,
  1136. 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,
  1137. 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,
  1138. X    6,53,6,54,6,55,6,56,6,58,6,59,6,60,6,61,6,62,6,57,22,0};
  1139. Xclasselem j34[]= {1,21,0};
  1140. Xclasselem s35[]= {23,1,24,25,26,27,0};
  1141. Xclasselem i35[]= {58,1,10,24,0};
  1142. Xclasselem a35[]= {44,23,91,25,64,26,124,27,0};
  1143. Xclasselem s36[]= {1,24,25,26,27,0};
  1144. Xclasselem i36[]= {58,1,10,24,0};
  1145. Xclasselem a36[]= {91,25,64,26,124,27,0};
  1146. Xclasselem s37[]= {28,1,29,0};
  1147. Xclasselem i37[]= {58,1,10,29,0};
  1148. Xclasselem a37[]= {44,28,0};
  1149. Xclasselem s38[]= {1,29,0};
  1150. Xclasselem i38[]= {58,1,10,29,0};
  1151. Xclasselem s39[]= {31,32,33,34,35,36,11,12,7,13,1,3,10,14,18,20,0};
  1152. Xclasselem i39[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
  1153. 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,
  1154. X    4,20,0};
  1155. Xclasselem a39[]= {32,35,32,36,32,12,91,13,0};
  1156. Xclasselem j39[]= {2,35,2,36,1,11,2,12,0};
  1157. Xclasselem s40[]= {30,31,32,33,34,35,36,11,12,7,13,1,3,10,14,18,20,0};
  1158. Xclasselem i40[]= {30,30,39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,
  1159. 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,
  1160. X    9,18,4,20,0};
  1161. Xclasselem a40[]= {32,35,32,36,32,12,91,13,0};
  1162. Xclasselem j40[]= {2,35,2,36,1,11,2,12,0};
  1163. Xclasselem s41[]= {31,32,33,34,11,12,7,13,1,3,10,14,18,20,0};
  1164. Xclasselem i41[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
  1165. 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,
  1166. X    4,20,0};
  1167. Xclasselem a41[]= {32,12,91,13,0};
  1168. Xclasselem j41[]= {1,11,2,12,0};
  1169. Xclasselem s42[]= {9,31,32,33,34,35,36,11,12,7,13,1,3,10,14,18,20,0};
  1170. Xclasselem i42[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
  1171. 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,
  1172. X    4,20,0};
  1173. Xclasselem a42[]= {44,9,32,35,32,36,32,12,91,13,0};
  1174. Xclasselem j42[]= {2,35,2,36,1,11,2,12,0};
  1175. Xclasselem s43[]= {37,0};
  1176. Xclasselem i43[]= {26,37,0};
  1177. Xclasselem s44[]= {38,0};
  1178. Xclasselem i44[]= {40,38,0};
  1179. Xclasselem s45[]= {31,32,33,34,35,11,12,7,13,1,3,10,14,18,20,0};
  1180. Xclasselem i45[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
  1181. 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,
  1182. X    4,20,0};
  1183. Xclasselem a45[]= {32,35,32,12,91,13,0};
  1184. Xclasselem j45[]= {2,35,1,11,2,12,0};
  1185. Xclasselem s46[]= {31,32,33,34,36,11,12,7,13,1,3,10,14,18,20,0};
  1186. Xclasselem i46[]= {39,31,44,32,30,33,39,34,5,7,12,7,13,7,15,7,17,7,21,7,
  1187. 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,
  1188. X    4,20,0};
  1189. Xclasselem a46[]= {32,36,32,12,91,13,0};
  1190. Xclasselem j46[]= {2,36,1,11,2,12,0};
  1191. Xclasselem s47[]= {4,58,53,40,42,41,60,47,54,61,48,49,50,43,46,62,56,55,
  1192. X    44,45,57,52,51,91,2,63,59,39,0};
  1193. Xclasselem i47[]= {53,4,34,58,31,53,44,60,44,47,42,54,43,61,48,48,43,49,
  1194. X    43,50,41,43,29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,
  1195. 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,
  1196. 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,
  1197. X    2,51,2,48,59,0};
  1198. Xclasselem a47[]= {32,63,32,39,0};
  1199. Xclasselem j47[]= {1,40,1,42,1,41,2,63,2,39,0};
  1200. Xclasselem s48[]= {47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,51,91,2,
  1201. X    63,0};
  1202. Xclasselem i48[]= {44,47,42,54,43,61,48,48,43,49,43,50,41,43,29,46,43,62,
  1203. X    31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,2,28,2,29,2,
  1204. 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,
  1205. X    2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,0};
  1206. Xclasselem a48[]= {32,63,0};
  1207. Xclasselem j48[]= {2,63,0};
  1208. Xclasselem s49[]= {58,53,47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,51,
  1209. X    91,2,63,59,40,41,39,0};
  1210. Xclasselem i49[]= {34,58,31,53,44,47,42,54,43,61,48,48,43,49,43,50,41,43,
  1211. X    29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,
  1212. 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,
  1213. 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,
  1214. X    59,0};
  1215. Xclasselem a49[]= {32,63,32,39,0};
  1216. Xclasselem j49[]= {2,63,1,40,1,41,2,39,0};
  1217. Xclasselem s50[]= {58,59,53,41,0};
  1218. Xclasselem i50[]= {34,58,48,59,31,53,0};
  1219. Xclasselem j50[]= {1,41,0};
  1220. Xclasselem s51[]= {58,59,53,0};
  1221. Xclasselem i51[]= {34,58,48,59,31,53,0};
  1222. Xclasselem s52[]= {9,11,12,7,13,1,3,10,14,18,20,2,64,63,0};
  1223. Xclasselem i52[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1224. 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,
  1225. 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,
  1226. X    42,2,43,2,44,2,45,2,46,2,47,2,48,2,49,2,50,2,51,2,0};
  1227. Xclasselem a52[]= {44,9,32,12,91,13,32,64,32,63,0};
  1228. Xclasselem j52[]= {1,11,2,12,2,64,2,63,0};
  1229. Xclasselem s53[]= {2,63,0};
  1230. Xclasselem i53[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
  1231. 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,
  1232. X    49,2,50,2,51,2,0};
  1233. Xclasselem a53[]= {32,63,0};
  1234. Xclasselem j53[]= {2,63,0};
  1235. Xclasselem s54[]= {65,0};
  1236. Xclasselem i54[]= {1,65,0};
  1237. Xclasselem s55[]= {93,65,0};
  1238. Xclasselem i55[]= {1,65,0};
  1239. Xclasselem s56[]= {93,58,53,47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,
  1240. X    51,91,2,63,59,40,41,39,65,0};
  1241. Xclasselem i56[]= {34,58,31,53,44,47,42,54,43,61,48,48,43,49,43,50,41,43,
  1242. X    29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,
  1243. 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,
  1244. 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,
  1245. X    59,1,65,0};
  1246. Xclasselem a56[]= {32,63,32,39,0};
  1247. Xclasselem j56[]= {2,63,1,40,1,41,2,39,0};
  1248. Xclasselem s57[]= {58,53,47,54,61,48,49,50,43,46,62,56,55,44,45,57,52,51,
  1249. X    91,2,63,59,40,41,39,65,0};
  1250. Xclasselem i57[]= {34,58,31,53,44,47,42,54,43,61,48,48,43,49,43,50,41,43,
  1251. X    29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,52,44,51,26,2,27,
  1252. 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,
  1253. 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,
  1254. X    59,1,65,0};
  1255. Xclasselem a57[]= {32,63,32,39,0};
  1256. Xclasselem j57[]= {2,63,1,40,1,41,2,39,0};
  1257. Xclasselem s58[]= {66,0};
  1258. Xclasselem i58[]= {1,66,0};
  1259. Xclasselem s59[]= {93,66,0};
  1260. Xclasselem i59[]= {1,66,0};
  1261. Xclasselem s60[]= {93,4,0};
  1262. Xclasselem i60[]= {53,4,0};
  1263. Xclasselem s61[]= {67,0};
  1264. Xclasselem i61[]= {33,67,0};
  1265. Xclasselem s62[]= {68,67,0};
  1266. Xclasselem i62[]= {33,67,0};
  1267. Xclasselem j62[]= {1,68,0};
  1268. Xclasselem s63[]= {71,72,2,75,0};
  1269. Xclasselem i63[]= {43,71,43,72,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,
  1270. 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,
  1271. X    2,47,2,48,2,49,2,50,2,51,2,0};
  1272. Xclasselem a63[]= {32,75,0};
  1273. Xclasselem j63[]= {2,75,0};
  1274. Xclasselem s64[]= {73,74,1,29,75,0};
  1275. Xclasselem i64[]= {58,1,10,29,0};
  1276. Xclasselem a64[]= {32,74,32,75,0};
  1277. Xclasselem j64[]= {1,73,2,74,2,75,0};
  1278. Xclasselem s65[]= {1,29,0};
  1279. Xclasselem i65[]= {58,1,10,29,0};
  1280. Xclasselem s66[]= {73,1,29,0};
  1281. Xclasselem i66[]= {58,1,10,29,0};
  1282. Xclasselem j66[]= {1,73,0};
  1283. Xclasselem s67[]= {28,1,29,2,76,75,0};
  1284. Xclasselem i67[]= {58,1,10,29,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,
  1285. 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,
  1286. X    47,2,48,2,49,2,50,2,51,2,0};
  1287. Xclasselem a67[]= {44,28,32,76,32,75,0};
  1288. Xclasselem j67[]= {2,76,2,75,0};
  1289. Xclasselem s68[]= {2,75,0};
  1290. Xclasselem i68[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
  1291. 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,
  1292. X    49,2,50,2,51,2,0};
  1293. Xclasselem a68[]= {32,75,0};
  1294. Xclasselem j68[]= {2,75,0};
  1295. Xclasselem s69[]= {67,68,69,70,0};
  1296. Xclasselem i69[]= {33,67,0};
  1297. Xclasselem j69[]= {1,68,1,69,1,70,0};
  1298. Xclasselem s70[]= {93,78,0};
  1299. Xclasselem i70[]= {1,78,0};
  1300. Xclasselem s71[]= {78,0};
  1301. Xclasselem i71[]= {1,78,0};
  1302. Xclasselem s72[]= {1,2,79,0};
  1303. Xclasselem i72[]= {58,1,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,
  1304. 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,
  1305. X    48,2,49,2,50,2,51,2,0};
  1306. Xclasselem a72[]= {32,79,0};
  1307. Xclasselem j72[]= {2,79,0};
  1308. Xclasselem s73[]= {2,79,0};
  1309. Xclasselem i73[]= {26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,2,36,
  1310. 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,
  1311. X    49,2,50,2,51,2,0};
  1312. Xclasselem a73[]= {32,79,0};
  1313. Xclasselem j73[]= {2,79,0};
  1314. Xclasselem s74[]= {93,67,68,69,70,77,0};
  1315. Xclasselem i74[]= {33,67,0};
  1316. Xclasselem j74[]= {1,68,1,69,1,70,1,77,0};
  1317. Xclasselem s75[]= {93,11,12,7,13,1,3,10,14,18,20,0};
  1318. Xclasselem i75[]= {5,7,12,7,13,7,15,7,17,7,21,7,22,7,23,7,25,7,55,7,60,
  1319. X    7,62,7,58,1,16,3,18,3,10,10,59,14,9,18,4,20,0};
  1320. Xclasselem a75[]= {32,12,91,13,0};
  1321. Xclasselem j75[]= {1,11,2,12,0};
  1322. Xclasselem s76[]= {93,4,67,58,53,40,42,41,60,47,54,61,48,49,50,43,46,62,
  1323. X    56,55,44,45,57,52,51,91,2,63,59,39,68,83,85,87,0};
  1324. Xclasselem i76[]= {53,4,33,67,34,58,31,53,44,60,44,47,42,54,43,61,48,48,
  1325. X    43,49,43,50,41,43,29,46,43,62,31,56,44,55,34,44,43,45,28,57,41,
  1326. 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,
  1327. 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,
  1328. X    49,2,50,2,51,2,48,59,19,83,22,85,23,87,0};
  1329. Xclasselem a76[]= {32,63,32,39,0};
  1330. Xclasselem j76[]= {1,40,1,42,1,41,2,63,2,39,1,68,0};
  1331. Xclasselem s77[]= {93,1,2,79,84,92,0};
  1332. Xclasselem i77[]= {58,1,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,34,2,35,
  1333. 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,
  1334. X    48,2,49,2,50,2,51,2,19,84,0};
  1335. Xclasselem a77[]= {32,79,0};
  1336. Xclasselem j77[]= {2,79,0};
  1337. Xclasselem s78[]= {93,1,86,0};
  1338. Xclasselem i78[]= {58,1,22,86,0};
  1339. Xclasselem s79[]= {93,1,88,0};
  1340. Xclasselem i79[]= {58,1,23,88,0};
  1341. Xclasselem s80[]= {93,8,0};
  1342. 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,
  1343. 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,
  1344. 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,
  1345. 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,
  1346. 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};
  1347. X
  1348. Xstruct classinfo cl[81] = {
  1349. X   {s0, i0, 0, 0},    /* name-body */
  1350. X   {s1, i1, 0, 0},    /* name */
  1351. X   {s2, i2, 0, 0},    /* keyword-body */
  1352. X   {s3, i3, 0, 0},    /* keyword */
  1353. X   {s4, i4, 0, 0},    /* number-body */
  1354. X   {s5, i5, 0, 0},    /* number */
  1355. X   {s6, i6, 0, 0},    /* comment-body */
  1356. X   {s7, i7, 0, 0},    /* comment */
  1357. X   {s8, i8, 0, 0},    /* text1-body */
  1358. X   {s9, i9, 0, 0},    /* text1 */
  1359. X   {s10, i10, 0, 0},    /* text2-body */
  1360. X   {s11, i11, 0, 0},    /* text2 */
  1361. X   {s12, i12, 0, 0},    /* operator-body */
  1362. X   {s13, i13, 0, 0},    /* operator */
  1363. X   {s14, i14, 0, 0},    /* rawinput-body */
  1364. X   {s15, i15, 0, 0},    /* rawinput */
  1365. X   {s16, 0, 0, 0},    /* suggestion-body */
  1366. X   {s17, 0, 0, 0},    /* sugghowname-body */
  1367. X   {s18, i18, a18, j18},    /* expression */
  1368. X   {s19, i19, a19, j19},    /* optional_expression */
  1369. X   {s20, i20, a20, j20},    /* single_expression */
  1370. X   {s21, i21, a21, 0},    /* block */
  1371. X   {s22, i22, a22, j22},    /* group */
  1372. X   {s23, i23, a23, 0},    /* primary */
  1373. X   {s24, i24, a24, j24},    /* optional_list_or_table_filler_series */
  1374. X   {s25, i25, a25, j25},    /* list_filler_series_tail */
  1375. X   {s26, i26, a26, j26},    /* list_filler */
  1376. X   {s27, i27, 0, 0},    /* table_filler */
  1377. X   {s28, i28, a28, 0},    /* table_filler_series_tail */
  1378. X   {s29, i29, 0, j29},    /* txt1 */
  1379. X   {s30, i30, 0, 0},    /* text1_conv */
  1380. X   {s31, i31, 0, j31},    /* text1_next */
  1381. X   {s32, i32, 0, j32},    /* txt2 */
  1382. X   {s33, i33, 0, 0},    /* text2_conv */
  1383. X   {s34, i34, 0, j34},    /* text2_next */
  1384. X   {s35, i35, a35, 0},    /* address */
  1385. X   {s36, i36, a36, 0},    /* single_address */
  1386. X   {s37, i37, a37, 0},    /* naming */
  1387. X   {s38, i38, 0, 0},    /* single_naming */
  1388. X   {s39, i39, a39, j39},    /* test */
  1389. X   {s40, i40, a40, j40},    /* e_test */
  1390. X   {s41, i41, a41, j41},    /* r_test */
  1391. X   {s42, i42, a42, j42},    /* coll_test */
  1392. X   {s43, i43, 0, 0},    /* and */
  1393. X   {s44, i44, 0, 0},    /* or */
  1394. X   {s45, i45, a45, j45},    /* and_test */
  1395. X   {s46, i46, a46, j46},    /* or_test */
  1396. X   {s47, i47, a47, j47},    /* cmd */
  1397. X   {s48, i48, a48, j48},    /* simple_cmd */
  1398. X   {s49, i49, a49, j49},    /* shortcmd */
  1399. X   {s50, i50, 0, j50},    /* c_ifforwhile */
  1400. X   {s51, i51, 0, 0},    /* ifforwhile */
  1401. X   {s52, i52, a52, j52},    /* kw_next */
  1402. X   {s53, i53, a53, j53},    /* exp_next */
  1403. X   {s54, i54, 0, 0},    /* suite */
  1404. X   {s55, i55, 0, 0},    /* optional_suite */
  1405. X   {s56, i56, a56, j56},    /* optional_cmdsuite */
  1406. X   {s57, i57, a57, j57},    /* cmdsuite */
  1407. X   {s58, i58, 0, 0},    /* t_suite */
  1408. X   {s59, i59, 0, 0},    /* optional_t_suite */
  1409. X   {s60, i60, 0, 0},    /* optional_comment */
  1410. X   {s61, i61, 0, 0},    /* head */
  1411. X   {s62, i62, 0, j62},    /* commented_head */
  1412. X   {s63, i63, a63, j63},    /* formal_cmd */
  1413. X   {s64, i64, a64, j64},    /* formal_formula */
  1414. X   {s65, i65, 0, 0},    /* ff_block */
  1415. X   {s66, i66, 0, j66},    /* ff_group */
  1416. X   {s67, i67, a67, j67},    /* formal_kw_next */
  1417. X   {s68, i68, a68, j68},    /* naming_next */
  1418. X   {s69, i69, 0, j69},    /* refpred */
  1419. X   {s70, i70, 0, 0},    /* optional_refinements */
  1420. X   {s71, i71, 0, 0},    /* refinements */
  1421. X   {s72, i72, a72, j72},    /* name_or_keyword */
  1422. X   {s73, i73, a73, j73},    /* kwltail */
  1423. X   {s74, i74, 0, j74},    /* unit_edit */
  1424. X   {s75, i75, a75, j75},    /* address_edit */
  1425. X   {s76, i76, a76, j76},    /* imm_cmd */
  1426. X   {s77, i77, a77, j77},    /* ed_unit */
  1427. X   {s78, i78, 0, 0},    /* ed_address */
  1428. X   {s79, i79, 0, 0},    /* ws_cmd */
  1429. X   {s80, i80, 0, 0}    /* raw_input */
  1430. X};
  1431. X
  1432. Xstatic struct table abc_grammar[95] = {
  1433. X   /* 0   */ {"Rootsymbol", {0,0,0,0,0}, {&cl[76],0,0,0}, 0},
  1434. X   /* 1   */ {"Name", {0,0,0,0,0}, {&cl[0],0,0,0}, 0},
  1435. X   /* 2   */ {"Keyword", {0,0,0,0,0}, {&cl[2],0,0,0}, 0},
  1436. X   /* 3   */ {"Number", {0,0,0,0,0}, {&cl[4],0,0,0}, 0},
  1437. X   /* 4   */ {"Comment", {0,0,0,0,0}, {&cl[6],0,0,0}, 0},
  1438. X   /* 5   */ {"Text1", {0,0,0,0,0}, {&cl[8],0,0,0}, 0},
  1439. X   /* 6   */ {"Text2", {0,0,0,0,0}, {&cl[10],0,0,0}, 0},
  1440. X   /* 7   */ {"Operator", {0,0,0,0,0}, {&cl[12],0,0,0}, 0},
  1441. X   /* 8   */ {"Rawinput", {0,0,0,0,0}, {&cl[14],0,0,0}, 0},
  1442. X   /* 9   */ {"Collateral", {0,", ",0,0,0}, {&cl[20],&cl[18],0,0}, 0},
  1443. X   /* 10  */ {"Compound", {"(",")",0,0,0}, {&cl[42],0,0,0}, 0},
  1444. X   /* 11  */ {"Blocked", {0,0,0,0,0}, {&cl[21],&cl[22],0,0}, 0},
  1445. X   /* 12  */ {"Grouped", {0," ",0,0,0}, {&cl[22],&cl[20],0,0}, 0},
  1446. X   /* 13  */ {"Sel_expr", {0,"[","]",0,0}, {&cl[23],&cl[18],0,0}, 0},
  1447. X   /* 14  */ {"List_or_table_display", {"{","}",0,0,0}, {&cl[24],0,0,0}, 0},
  1448. X   /* 15  */ {"List_filler_series", {0,"; ",0,0,0}, {&cl[26],&cl[25],0,0}, 0},
  1449. X   /* 16  */ {"Table_filler_series", {0,"; ",0,0,0}, {&cl[27],&cl[28],0,0}, 0},
  1450. X   /* 17  */ {"Table_filler", {"[","]: ",0,0,0}, {&cl[18],&cl[20],0,0}, 0},
  1451. X   /* 18  */ {"Text1_display", {"'","'",0,0,0}, {&cl[29],0,0,0}, 0},
  1452. X   /* 19  */ {"Text1_plus", {0,0,0,0,0}, {&cl[30],&cl[31],0,0}, 0},
  1453. X   /* 20  */ {"Text2_display", {"\"","\"",0,0,0}, {&cl[32],0,0,0}, 0},
  1454. X   /* 21  */ {"Text2_plus", {0,0,0,0,0}, {&cl[33],&cl[34],0,0}, 0},
  1455. X   /* 22  */ {"Conversion", {"`","`",0,0,0}, {&cl[19],0,0,0}, 0},
  1456. X   /* 23  */ {"Multiple_address", {0,", ",0,0,0}, {&cl[36],&cl[35],0,0}, 0},
  1457. X   /* 24  */ {"Compound_address", {"(",")",0,0,0}, {&cl[35],0,0,0}, 0},
  1458. X   /* 25  */ {"Selection", {0,"[","]",0,0}, {&cl[35],&cl[18],0,0}, 0},
  1459. X   /* 26  */ {"Behead", {0,"@",0,0,0}, {&cl[35],&cl[22],0,0}, 0},
  1460. X   /* 27  */ {"Curtail", {0,"|",0,0,0}, {&cl[35],&cl[22],0,0}, 0},
  1461. X   /* 28  */ {"Multiple_naming", {0,", ",0,0,0}, {&cl[38],&cl[37],0,0}, 0},
  1462. X   /* 29  */ {"Compound_naming", {"(",")",0,0,0}, {&cl[37],0,0,0}, 0},
  1463. X   /* 30  */ {"Else_kw", {"ELSE",0,0,0,0}, {0,0,0,0}, 0},
  1464. X   /* 31  */ {"Not", {"NOT ",0,0,0,0}, {&cl[41],0,0,0}, 0},
  1465. X   /* 32  */ {"Some_in", {"SOME "," IN "," HAS ",0,0}, {&cl[37],&cl[20],&cl[41],0}, 0},
  1466. X   /* 33  */ {"Each_in", {"EACH "," IN "," HAS ",0,0}, {&cl[37],&cl[20],&cl[41],0}, 0},
  1467. X   /* 34  */ {"No_in", {"NO "," IN "," HAS ",0,0}, {&cl[37],&cl[20],&cl[41],0}, 0},
  1468. X   /* 35  */ {"And", {0," ",0,0,0}, {&cl[20],&cl[43],0,0}, 0},
  1469. X   /* 36  */ {"Or", {0," ",0,0,0}, {&cl[20],&cl[44],0,0}, 0},
  1470. X   /* 37  */ {"And_kw", {"AND ",0,0,0,0}, {&cl[45],0,0,0}, 0},
  1471. X   /* 38  */ {"Or_kw", {"OR ",0,0,0,0}, {&cl[46],0,0,0}, 0},
  1472. X   /* 39  */ {"Cmt_cmd", {0," ",0,0,0}, {&cl[48],&cl[7],0,0}, 0},
  1473. X   /* 40  */ {"Short_comp", {0,"\t","\b",0,0}, {&cl[51],&cl[49],0,0}, 0},
  1474. X   /* 41  */ {"Cmt_comp", {0,0,0,0,0}, {&cl[51],&cl[7],0,0}, 0},
  1475. X   /* 42  */ {"Long_comp", {0,"\t","\b",0,0}, {&cl[50],&cl[54],0,0}, 0},
  1476. X   /* 43  */ {"Put", {"PUT "," IN ",0,0,0}, {&cl[18],&cl[35],0,0}, 0},
  1477. X   /* 44  */ {"Insert", {"INSERT "," IN ",0,0,0}, {&cl[18],&cl[35],0,0}, 0},
  1478. X   /* 45  */ {"Remove", {"REMOVE "," FROM ",0,0,0}, {&cl[18],&cl[35],0,0}, 0},
  1479. X   /* 46  */ {"Delete", {"DELETE ",0,0,0,0}, {&cl[35],0,0,0}, 0},
  1480. X   /* 47  */ {"Share", {"SHARE ",0,0,0,0}, {&cl[37],0,0,0}, 0},
  1481. X   /* 48  */ {"Write", {"WRITE ",0,0,0,0}, {&cl[18],0,0,0}, 0},
  1482. X   /* 49  */ {"Read", {"READ "," EG ",0,0,0}, {&cl[35],&cl[20],0,0}, 0},
  1483. X   /* 50  */ {"Read_raw", {"READ "," RAW",0,0,0}, {&cl[35],0,0,0}, 0},
  1484. X   /* 51  */ {"Set", {"SET RANDOM ",0,0,0,0}, {&cl[18],0,0,0}, 0},
  1485. X   /* 52  */ {"Pass", {"PASS",0,0,0,0}, {0,0,0,0}, 0},
  1486. X   /* 53  */ {"For", {"FOR "," IN ",": ",0,0}, {&cl[37],&cl[20],0,0}, 0},
  1487. X   /* 54  */ {"Quit", {"QUIT",0,0,0,0}, {0,0,0,0}, 0},
  1488. X   /* 55  */ {"Succeed", {"SUCCEED",0,0,0,0}, {0,0,0,0}, 0},
  1489. X   /* 56  */ {"Fail", {"FAIL",0,0,0,0}, {0,0,0,0}, 0},
  1490. X   /* 57  */ {"Check", {"CHECK ",0,0,0,0}, {&cl[39],0,0,0}, 0},
  1491. X   /* 58  */ {"If", {"IF ",": ",0,0,0}, {&cl[39],0,0,0}, 0},
  1492. X   /* 59  */ {"While", {"WHILE ",": ",0,0,0}, {&cl[39],0,0,0}, 0},
  1493. X   /* 60  */ {"Select", {"SELECT: ","\t","\b",0,0}, {&cl[60],&cl[58],&cl[60],0}, 0},
  1494. X   /* 61  */ {"Return", {"RETURN ",0,0,0,0}, {&cl[18],0,0,0}, 0},
  1495. X   /* 62  */ {"Report", {"REPORT ",0,0,0,0}, {&cl[39],0,0,0}, 0},
  1496. X   /* 63  */ {"Kw_plus", {0," ",0,0,0}, {&cl[3],&cl[52],0,0}, 0},
  1497. X   /* 64  */ {"Exp_plus", {0," ",0,0,0}, {&cl[18],&cl[53],0,0}, 0},
  1498. X   /* 65  */ {"Suite", {"\n",0,0,0,0}, {&cl[47],&cl[55],0,0}, 0},
  1499. X   /* 66  */ {"Test_suite", {"\n",": ","\t","\b",0}, {&cl[40],&cl[60],&cl[57],&cl[59]}, 0},
  1500. X   /* 67  */ {"Head", {"HOW TO ",": ",0,0,0}, {&cl[63],0,0,0}, 0},
  1501. X   /* 68  */ {"Cmt_head", {0,0,0,0,0}, {&cl[61],&cl[7],0,0}, 0},
  1502. X   /* 69  */ {"Long_unit", {0,"\t","\b",0,0}, {&cl[62],&cl[54],0,0}, 0},
  1503. X   /* 70  */ {"Short_unit", {0,"\t","\b",0,0}, {&cl[61],&cl[49],0,0}, 0},
  1504. X   /* 71  */ {"Formal_return", {"RETURN ",0,0,0,0}, {&cl[64],0,0,0}, 0},
  1505. X   /* 72  */ {"Formal_report", {"REPORT ",0,0,0,0}, {&cl[64],0,0,0}, 0},
  1506. X   /* 73  */ {"Blocked_ff", {0,0,0,0,0}, {&cl[65],&cl[66],0,0}, 0},
  1507. X   /* 74  */ {"Grouped_ff", {0," ",0,0,0}, {&cl[66],&cl[64],0,0}, 0},
  1508. X   /* 75  */ {"Formal_kw_plus", {0," ",0,0,0}, {&cl[3],&cl[67],0,0}, 0},
  1509. X   /* 76  */ {"Formal_naming_plus", {0," ",0,0,0}, {&cl[37],&cl[68],0,0}, 0},
  1510. X   /* 77  */ {"Ref_join", {0,0,0,0,0}, {&cl[69],&cl[71],0,0}, 0},
  1511. X   /* 78  */ {"Refinement", {"\n",": ","\t","\b",0}, {&cl[72],&cl[60],&cl[57],&cl[70]}, 0},
  1512. X   /* 79  */ {"Keyword_list", {0," ",0,0,0}, {&cl[3],&cl[73],0,0}, 0},
  1513. X   /* 80  */ {"Unit_edit", {0,0,0,0,0}, {&cl[74],0,0,0}, 0},
  1514. X   /* 81  */ {"Target_edit", {0,0,0,0,0}, {&cl[75],0,0,0}, 0},
  1515. X   /* 82  */ {"Imm_cmd", {0,0,0,0,0}, {&cl[76],0,0,0}, 0},
  1516. X   /* 83  */ {"Edit_unit", {":",0,0,0,0}, {&cl[77],0,0,0}, 0},
  1517. X   /* 84  */ {"Colon", {":",0,0,0,0}, {0,0,0,0}, 0},
  1518. X   /* 85  */ {"Edit_address", {"=",0,0,0,0}, {&cl[78],0,0,0}, 0},
  1519. X   /* 86  */ {"Equals", {"=",0,0,0,0}, {0,0,0,0}, 0},
  1520. X   /* 87  */ {"Workspace_cmd", {">",0,0,0,0}, {&cl[79],0,0,0}, 0},
  1521. X   /* 88  */ {"Right", {">",0,0,0,0}, {0,0,0,0}, 0},
  1522. X   /* 89  */ {"Expression", {0,0,0,0,0}, {&cl[18],0,0,0}, 0},
  1523. X   /* 90  */ {"Raw_input", {0,0,0,0,0}, {&cl[80],0,0,0}, 0},
  1524. X   /* 91  */ {"Suggestion", {0,0,0,0,0}, {&cl[16],0,0,0}, 0},
  1525. X   /* 92  */ {"Sugghowname", {0,0,0,0,0}, {&cl[17],0,0,0}, 0},
  1526. X   /* 93  */ {"Optional", {0,0,0,0,0}, {0,0,0,0}, 0},
  1527. X   /* 94  */ {"Hole", {"?",0,0,0,0}, {0,0,0,0}, 0}
  1528. X};
  1529. X
  1530. Xstruct table *table= abc_grammar;
  1531. X
  1532. Xstatic struct lexinfo abc_lexicals[10] = {
  1533. X   {"abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz0123456789'\"."},    /* NAME */
  1534. X   {"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'\"."},    /* KEYWORD */
  1535. X   {"0123456789.", "0123456789."},    /* NUMBER */
  1536. X   {"\\", "^"},    /* COMMENT */
  1537. X   {"^'`", "^'`"},    /* TEXT1 */
  1538. X   {"^\"`", "^\"`"},    /* TEXT2 */
  1539. X   {"+-*/#^~@|<=>", ""},    /* OPERATOR */
  1540. X   {"^", "^"},    /* RAWINPUT */
  1541. X   {"", ""},    /* SUGGESTION */
  1542. X   {"", ""}    /* SUGGHOWNAME */
  1543. X};
  1544. X
  1545. Xstruct lexinfo *lextab= abc_lexicals;
  1546. END_OF_FILE
  1547.   if test 27315 -ne `wc -c <'abc/bed/e1tabl.c'`; then
  1548.     echo shar: \"'abc/bed/e1tabl.c'\" unpacked with wrong size!
  1549.   fi
  1550.   # end of 'abc/bed/e1tabl.c'
  1551. fi
  1552. if test -f 'abc/ex/wsgroup.abc' -a "${1}" != "-c" ; then 
  1553.   echo shar: Will not clobber existing file \"'abc/ex/wsgroup.abc'\"
  1554. else
  1555.   echo shar: Extracting \"'abc/ex/wsgroup.abc'\" \(116 characters\)
  1556.   sed "s/^X//" >'abc/ex/wsgroup.abc' <<'END_OF_FILE'
  1557. X{[">"]:"try";[">>"]:"generate";["generate"]:"generate";["hanoi"]:"hanoi";["pi"]:"pi";["try"]:"try";["xref"]:"xref"}
  1558. END_OF_FILE
  1559.   if test 116 -ne `wc -c <'abc/ex/wsgroup.abc'`; then
  1560.     echo shar: \"'abc/ex/wsgroup.abc'\" unpacked with wrong size!
  1561.   fi
  1562.   # end of 'abc/ex/wsgroup.abc'
  1563. fi
  1564. echo shar: End of archive 4 \(of 25\).
  1565. cp /dev/null ark4isdone
  1566. MISSING=""
  1567. 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
  1568.     if test ! -f ark${I}isdone ; then
  1569.     MISSING="${MISSING} ${I}"
  1570.     fi
  1571. done
  1572. if test "${MISSING}" = "" ; then
  1573.     echo You have unpacked all 25 archives.
  1574.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1575. else
  1576.     echo You still must unpack the following archives:
  1577.     echo "        " ${MISSING}
  1578. fi
  1579. exit 0 # Just in case...
  1580.