Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1142 lines
33 KiB

  1. The following is a concatenation of the relevent parts of the readme files
  2. that came with the sources.
  3. NOTE: this is an incomplete VI that has not been fully tested. Use at your
  4. own risk.
  5. SEE VERSION.C FOR THE CURRENT STATUS OF THIS PROGRAM
  6. ======================================================
  7. STEVIE Source Release - 3.68
  8. This is a source release of the STEVIE editor, a public domain clone
  9. of the UNIX editor 'vi'. The program was originally developed for the
  10. Atari ST, but has been ported to UNIX, OS/2, DOS, and Minix-ST as well.
  11. Ports done by others, but not directly supported by this release, include
  12. Minix-PC, Amiga, and a Data General system of some sort.
  13. The good news about stevie is that it is extremely portable. It supports
  14. systems with virtually all combinations of integer size, pointer size,
  15. and byte order. The only major issue remaining, for some environments,
  16. is that the file is kept in memory. For most environments, this isn't a
  17. problem, but for Minix-PC it is particularly annoying.
  18. =======================================================
  19. STEVIE - An Aspiring VI Clone
  20. User Reference - 3.69
  21. Tony Andrews
  22. NT port by tedm
  23. 1. Overview
  24. STEVIE is an editor designed to mimic the interface of the
  25. UNIX editor 'vi'. The name (ST Editor for VI Enthusiasts)
  26. comes from the fact that the editor was first written for
  27. the Atari ST. The current version also supports UNIX, Minix
  28. (ST), MS-DOS, and OS/2, but I've left the name intact for
  29. now.
  30. This program is the result of many late nights of hacking
  31. over the last couple of years. The first version was writ-
  32. ten by Tim Thompson and posted to USENET. From there, I
  33. reworked the data structures completely, added LOTS of
  34. features, and generally improved the overall performance in
  35. the process.
  36. I've labelled STEVIE an 'aspiring' vi clone as a warning to
  37. those who may expect too much. On the whole, the editor is
  38. pretty complete. Nearly all of the visual mode commands are
  39. supported. And several of the more important 'ex' commands
  40. are supported as well. I've tried hard to capture the feel
  41. of vi by getting the little things right. Making lines wrap
  42. correctly, supporting true operators, and even getting the
  43. cursor to land on the right place for tabs are all a pain,
  44. but really help make the editor feel right. I've tried to
  45. resist the temptation to deviate from the behavior of vi,
  46. even where I disagree with the original design.
  47. The biggest problem remaining has to do with the fact that
  48. the edit buffer is maintained entirely in memory, limiting
  49. the size of files that can be edited in some environments.
  50. Other missing features include named buffers and macros.
  51. Performance is generally reasonable, although the screen
  52. update code could be more efficient. This is generally only
  53. visible on fairly slow systems.
  54. STEVIE may be freely distributed. The source isn't copy-
  55. righted or restricted in any way. If you pass the program
  56. along, please include all the documentation and, if practi-
  57. cal, the source as well. I'm not fanatical about this, but I
  58. tried to make STEVIE fairly portable and I'd like to see as
  59. many people have access to the source as possible.
  60. The remainder of this document describes the operation of
  61. the editor. This is intended as a reference for users
  62. already familiar with the real vi editor.
  63. - 1 -
  64. STEVIE User Reference
  65. 2. Starting_the_Editor
  66. The following command line forms are supported:
  67. stevie [file ...] Edit the specified file(s)
  68. stevie -t tag Start at the location of the given tag
  69. stevie + file Edit file starting at end
  70. stevie +n file Edit file starting a line number 'n'
  71. stevie +/pat file Edit file starting at pattern 'pat'
  72. If multiple files are given on the command line (using the
  73. first form), the ":n" command goes to the next file, ":N"
  74. goes backward in the list, and ":rew" can be used to rewind
  75. back to the start of the file list.
  76. 3. Set_Command_Options
  77. The ":set" command works as usual to set parameters. Each
  78. parameter has a long and an abbreviated name, either of
  79. which may be used. Boolean parameters are set as in:
  80. set showmatch
  81. or cleared by:
  82. set noshowmatch
  83. Numeric parameters are set as in:
  84. set scroll=5
  85. Several parameters may be set with a single command:
  86. set novb sm report=1
  87. To see the status of all parameters use ":set all". Typing
  88. ":set" with no arguments will show only those parameters
  89. that have been changed. The supported parameters, their
  90. names, abbreviations, defaults, and descriptions are shown
  91. below:
  92. autoindent Short: ai, Default: noai, Type: Boolean
  93. When in insert mode, start new lines at the same
  94. column as the prior line. Unlike vi, you can
  95. backspace over the indentation.
  96. - 2 -
  97. STEVIE User Reference
  98. backup Short: bk, Default: nobk, Type: Boolean
  99. Leave a backup on file writes.
  100. errorbells Short: eb, Default: noeb, Type: Boolean
  101. Ring bell when error messages are shown.
  102. ignorecase Short: ic, Default: noic, Type: Boolean
  103. Ignore case in string searches.
  104. lines Short: lines, Default: lines=25, Type: Numeric
  105. Number of physical lines on the screen. The
  106. default value actually depends on the host
  107. machine, but is generally 25.
  108. list Short: list, Default: nolist, Type: Boolean
  109. Show tabs and newlines graphically.
  110. modelines Short: ml, Default: noml, Type: Boolean
  111. Enable processing of modelines in files.
  112. number Short: nu, Default: nonu, Type: Boolean
  113. Display lines on the screen with their line
  114. numbers.
  115. report Short: report, Default: report=5, Type: Numeric
  116. Minimum number of lines to report operations on.
  117. return Short: cr, Default: cr, Type: Boolean
  118. End lines with cr-lf when writing files.
  119. scroll Short: scroll, Default: scroll=12, Type: Numeric
  120. Number of lines to scroll for ^D & ^U.
  121. showmatch Short: sm, Default: nosm, Type: Boolean
  122. When a ), }, or ] is typed, show the matching (,
  123. {, or [ if it's on the current screen by moving
  124. the cursor there briefly.
  125. showmode Short: mo, Default: nomo, Type: Boolean
  126. Show on status line when in insert mode.
  127. tabstop Short: ts, Default: ts=8, Type: Numeric
  128. Number of spaces in a tab.
  129. terse Short: terse, Default: noterse, Type: Boolean
  130. This option is currently ignored. It is pro-
  131. vided only for compatibility with vi.
  132. tildeop Short: to, Default: noto, Type: Boolean
  133. If set, tilde is an operator. Otherwise, tilde
  134. acts as normal.
  135. - 3 -
  136. STEVIE User Reference
  137. wrapscan Short: ws, Default: ws, Type: Boolean
  138. String searches wrap around the ends of the
  139. file.
  140. vbell Short: vb, Default: vb, Type: Boolean
  141. Use a visual bell, if possible. (novb for audi-
  142. ble bell)
  143. The EXINIT environment variable can be used to modify the
  144. default values on startup as in:
  145. setenv EXINIT="set sm ts=4"
  146. The 'backup' parameter, if set, causes the editor to retain
  147. a backup of any files that are written. During file writes,
  148. a backup is always kept for safety until the write is com-
  149. pleted. At that point, the 'backup' parameter determines
  150. whether the backup file is deleted.
  151. In environments (e.g. OS/2 or TOS) where lines are normally
  152. terminated by CR-LF, the 'return' parameter allows files to
  153. be written with only a LF terminator (if the parameter is
  154. cleared). This parameter is ignored on UNIX systems.
  155. The 'lines' parameter tells the editor how many lines there
  156. are on the screen. This is useful on systems like the ST
  157. (or OS/2 machines with an EGA adapter) where various screen
  158. resolutions may be used. By using the 'lines' parameter,
  159. different screen sizes can be easily handled.
  160. 4. Colon_Commands
  161. Several of the normal 'vi' colon commands are supported by
  162. STEVIE. Some commands may be preceded by a line range
  163. specification. For commands that accept a range of lines,
  164. the following address forms are supported:
  165. addr
  166. addr + number
  167. addr - number
  168. where 'addr' may be one of the following:
  169. a line number
  170. a mark (as in 'a or 'b)
  171. '.' (the current line)
  172. '$' (the last line)
  173. An address range of "%" is accepted as an abbreviation of
  174. "1,$".
  175. - 4 -
  176. STEVIE User Reference
  177. 4.1 Mode_Lines
  178. Mode lines are a little-known, but often useful, feature of
  179. vi. To use this feature, special strings are placed in the
  180. first or last five lines in a file. When the file is
  181. edited, these strings are detected and processed as though
  182. typed as a colon command. One instance where this can be
  183. useful is to set the "tabstop" parameter on a per-file
  184. basis. The following are examples of mode lines:
  185. vi:set ts=4 noai:
  186. ex:45:
  187. Mode lines are characterized by the string "vi" or "ex" fol-
  188. lowed by a command surrounded by colons. Other text may
  189. appear on the line, and multiple mode lines may be present.
  190. No guarantee is made regarding the order in which multiple
  191. mode lines will be processed.
  192. The processing of mode lines is enabled by setting the "ml"
  193. parameter. This should be done in the "EXINIT" environment
  194. variable, so that mode line processing is enabled as soon as
  195. the editor begins. By default, mode lines are disabled for
  196. security reasons.
  197. 4.2 The_Global_Command
  198. A limited form of the global command is supported, accepting
  199. the following command form:
  200. g/pattern/X
  201. where X may be either 'd' or 'p' to delete or print lines
  202. that match the given pattern. If a line range is given,
  203. only those lines are checked for a match with the pattern.
  204. If no range is given, all lines are checked.
  205. If the trailing command character is omitted, 'p' is
  206. assumed. In this case, the trailing slash is also optional.
  207. The current version of the editor does not support the undo
  208. operation following the deletion of lines with the global
  209. command.
  210. 4.3 The_Substitute_Command
  211. The substitute command provides a powerful mechanism for
  212. making more complex substitutions than can be done directly
  213. from visual mode. The general form of the command is:
  214. s/pattern/replacement/g
  215. - 5 -
  216. STEVIE User Reference
  217. Each line in the given range (or the current line, if no
  218. range was given) is scanned for the given regular expres-
  219. sion. When found, the string that matched the pattern is
  220. replaced with the given replacement string. If the replace-
  221. ment string is null, each matching pattern string is
  222. deleted.
  223. The trailing 'g' is optional and, if present, indicates that
  224. multiple occurrences of 'pattern' on a line should all be
  225. replaced.
  226. Some special sequences are recognized in the replacement
  227. string. The ampersand character is replaced by the entire
  228. pattern that was matched. For example, the following com-
  229. mand could be used to put all occurrences of 'foo' or 'bar'
  230. within double quotes:
  231. 1,$s/foo|bar/"&"/g
  232. The special sequence "\n" where 'n' is a digit from 1 to 9,
  233. is replaced by the string the matched the corresponding
  234. parenthesized expression in the pattern. The following com-
  235. mand could be used to swap the first two parameters in calls
  236. to the C function "foo":
  237. 1,$s/foo\(([^,]*),([^,]*),/foo(\2,\1,/g
  238. Like the global command, substitutions can't be undone with
  239. this version of the editor.
  240. 4.4 File_Manipulation_Commands
  241. The following table shows the supported file manipulation
  242. commands as well as some other 'ex' commands that aren't
  243. described elsewhere:
  244. - 6 -
  245. STEVIE User Reference
  246. :w write the current file
  247. :wq write and quit
  248. :x write (if necessary) and quit
  249. ZZ same as ":x"
  250. :e file edit the named file
  251. :e! re-edit the current file, discarding changes
  252. :e # edit the alternate file
  253. :w file write the buffer to the named file
  254. :x,yw file write lines x through y to the named file
  255. :r file read the named file into the buffer
  256. :n edit the next file
  257. :N edit the previous file
  258. :rew rewind the file list
  259. :f show the current file name
  260. :f name change the current file name
  261. :x= show the line number of address 'x'
  262. :ta tag go to the named tag
  263. ^] like ":ta" using the current word as the tag
  264. :help display a command summary
  265. :ve show the version number
  266. :sh run an interactive shell
  267. :!cmd run a command
  268. The ":help" command can also be invoked with the <HELP> key
  269. on the Atari ST. This actually displays a pretty complete
  270. summary of the real vi with unsupported features indicated
  271. appropriately.
  272. The commands above work pretty much like they do in 'vi'.
  273. Most of the commands support a '!' suffix (if appropriate)
  274. to discard any pending changes.
  275. 5. String_Searches
  276. String searches are supported, as in vi, accepting the usual
  277. regular expression syntax. This was done using a modified
  278. form of Henry Spencer's regular expression library. I added
  279. code outside the library to support the '\<' and '\>' exten-
  280. sions. The parameter "ignorecase" can be set to ignore case
  281. in all string searches.
  282. - 7 -
  283. STEVIE User Reference
  284. 6. Operators
  285. The vi operators (d, c, y, !, <, and >) work as true opera-
  286. tors. The tilde command may also be used as an operator if
  287. the parameter "tildeop" has been set. By default, this
  288. parameter is not set.
  289. 7. Tags
  290. Tags are implemented and a fairly simple version of 'ctags'
  291. is supplied with the editor. The current version of ctags
  292. will find functions and macros following a specific (but
  293. common) form. See 'ctags.doc' for a complete discussion.
  294. 8. System-Specific_Comments
  295. The following sections provide additional relevant informa-
  296. tion for the systems to which STEVIE has been ported.
  297. 8.1 Atari_ST
  298. 8.1.1 TOS The editor has been tested in all three resolu-
  299. tions, although low and high res. are less tested than
  300. medium. The 50-line high res. mode can be used by setting
  301. the 'lines' parameter to 50. Alternatively, the environment
  302. variable 'LINES' can be set. The editor doesn't actively set
  303. the number of lines on the screen. It just operates using
  304. the number of lines it was told.
  305. The arrow keys, as well as the <INSERT>, <HELP>, and <UNDO>
  306. keys are all mapped appropriately.
  307. 8.1.2 Minix The editor is pretty much the same under
  308. Minix, but many of the keyboard mappings aren't yet sup-
  309. ported.
  310. 8.2 UNIX
  311. The editor has been ported to UNIX System V release 3 as
  312. well as 4.2 BSD. This was done mainly to get some profiling
  313. data so I haven't put much effort into doing the UNIX ver-
  314. sion right. While the termcap routines are supported, the
  315. editor is still fairly picky about the capabilities it wants
  316. and makes little effort to do clever things with less intel-
  317. ligent terminals.
  318. - 8 -
  319. STEVIE User Reference
  320. 8.3 OS/2
  321. This port was done because the editor that comes with the
  322. OS/2 developer's kit really stinks. Make sure 'ansi' mode is
  323. on (using the 'ansi' command). The OS/2 console driver
  324. doesn't support insert/delete line, so STEVIE bypasses the
  325. driver and makes the appropriate system calls directly.
  326. This is all done in the system-specific part of the editor
  327. so the kludge is at least localized.
  328. The arrow keys, page up/down and home/end all do what you'd
  329. expect. The function keys are hard-coded to some useful mac-
  330. ros until I can get true support for macros into the editor.
  331. The current mappings are:
  332. F1 :N <RETURN>
  333. F2 :n <RETURN>
  334. F3 :e # <RETURN>
  335. F4 :rew <RETURN>
  336. F5 [[
  337. F6 ]]
  338. F7 Convert C declaration to pseudo-english (uses cdecl)
  339. F8 Convert english-style declaration to C (uses cdecl)
  340. F9 :x <RETURN>
  341. F10 :help <RETURN>
  342. S-F1 :N! <RETURN>
  343. S-F2 :n! <RETURN>
  344. The macros for F7 and F8 assume that the "cdecl" program is
  345. available.
  346. 8.4 MSDOS
  347. STEVIE has been ported to MSDOS 3.3 using the Microsoft C
  348. compiler, version 5.1. The keyboard mappings are the same
  349. as for OS/2. The only problem with the PC version is that
  350. the inefficiency of the screen update code becomes painfully
  351. apparent on slower machines.
  352. The DOS version requires the use of an extended console
  353. driver that can insert and delete lines. The distributed
  354. code uses "nansi.sys" which seems to be widely available.
  355. 9. Missing_Features
  356. 1. The ability to edit files larger than the available
  357. memory. This isn't a problem on the machines I use,
  358. but it hits the Minix-PC people pretty hard.
  359. - 9 -
  360. STEVIE User Reference
  361. 2. Macros with support for function keys.
  362. 3. More "set" options.
  363. 4. Many others...
  364. 10. Known_Bugs_and_Problems
  365. 1. The yank buffer uses statically allocated memory, so
  366. large yanks will fail. If a delete spans an area
  367. larger than the yank buffer, the program asks for con-
  368. firmation before proceeding. That way, if you were
  369. moving text, you don't get screwed by the limited yank
  370. buffer. You just have to move smaller chunks at a
  371. time. All the internal buffers (yank, redo, etc.)
  372. need to be reworked to allocate memory dynamically.
  373. The 'undo' buffer is now dynamically allocated, so any
  374. change can be undone.
  375. 2. If you stay in insert mode for a long time, the insert
  376. buffer can overflow. The editor will print a message
  377. and dump you back into command mode.
  378. 3. The current version of the substitute and global com-
  379. mands (i.e. ":s/foo/bar" or ":g/foo/d") can't be
  380. undone. This is due to the current design of the undo
  381. code. To undo these commands would generally involve
  382. unreasonable amounts of memory.
  383. 4. Several other less bothersome glitches...
  384. - 10 -
  385. STEVIE User Reference
  386. 11. Conclusion
  387. The editor has reached a pretty stable state, and performs
  388. well on the systems I use it on, so I'm pretty much in
  389. maintenance mode now. There's still plenty to be done; the
  390. screen update code is still pretty inefficient and the
  391. yank/put code is still primitive. I'm still interested in
  392. bug reports, and I do still add a new feature from time to
  393. time, but the rate of change is way down now.
  394. I'd like to thank Tim Thompson for writing the original ver-
  395. sion of the editor. His program was well structured and
  396. quite readable. Thanks for giving me a good base to work
  397. with. Thanks also to many users of STEVIE who have sent in
  398. their changes. Many of the changes I've received aren't
  399. portable to all the systems I support, but I'm working to
  400. get portable implementations integrated into the editor
  401. where possible.
  402. If you're reading this file, but didn't get the source code
  403. for STEVIE, it can be had by sending a disk with return pos-
  404. tage to the address given below. I can write disks for the
  405. Atari ST (SS or DS) or MSDOS (360K or 1.2M). Please be sure
  406. to include the return postage. I don't intend to make money
  407. from this program, but I don't want to lose any either.
  408. Tony Andrews UUCP: onecom!wldrdg!tony
  409. 5902E Gunbarrel Ave.
  410. Boulder, CO 80301
  411. - 11 -
  412. STEVIE User Reference
  413. Character_Function_Summary
  414. The following list describes the meaning of each character
  415. that's used by the editor. In some cases characters have
  416. meaning in both command and insert mode; these are all
  417. described.
  418. ^@ The null character. Not used in any mode. This char-
  419. acter may not be present in the file, as is the case
  420. with vi.
  421. ^B Backward one screen.
  422. ^D Scroll the window down one half screen.
  423. ^E Scroll the screen up one line.
  424. ^F Forward one screen.
  425. ^G Same as ":f" command. Displays file information.
  426. ^H (Backspace) Moves cursor left one space in command
  427. mode. In insert mode, erases the last character
  428. typed.
  429. ^J Move the cursor down one line.
  430. ^L Clear and redraw the screen.
  431. ^M (Carriage return) Move to the first non-white char-
  432. acter in the next line. In insert mode, a carriage
  433. return opens a new line for input.
  434. ^N Move the cursor down a line.
  435. ^P Move the cursor up a line.
  436. ^U Scroll the window up one half screen.
  437. ^Y Scroll the screen down one line.
  438. ^[ Escape cancels a pending command in command mode,
  439. and is used to terminate insert mode.
  440. ^] Moves to the tag whose name is given by the word in
  441. which the cursor resides.
  442. ^` Same as ":e #" if supported (system-dependent).
  443. - 12 -
  444. STEVIE User Reference
  445. SPACE Move the cursor right on column.
  446. ! The filter operator always operates on a range of
  447. lines, passing the lines as input to a program, and
  448. replacing them with the output of the program. The
  449. shorthand command "!!" can be used to filter a
  450. number of lines (specified by a preceding count).
  451. The command "!" is replaced by the last command
  452. used, so "!!!<RETURN>" runs the given number of
  453. lines through the last specified command.
  454. $ Move to the end of the current line.
  455. % If the cursor rests on a paren '()', brace '{}', or
  456. bracket '[]', move to the matching one.
  457. ' Used to move the cursor to a previously marked posi-
  458. tion, as in 'a or 'b. The cursor moves to the start
  459. of the marked line. The special mark '' refers to
  460. the "previous context".
  461. + Same as carriage return, in command mode.
  462. , Reverse of the last t, T, f, or F command.
  463. - Move to the first non-white character in the previ-
  464. ous line.
  465. . Repeat the last edit command.
  466. / Start of a forward string search command. String
  467. searches may be optionally terminated with a closing
  468. slash. To search for a slash use '\/' in the search
  469. string.
  470. 0 Move to the start of the current line. Also used
  471. within counts.
  472. 1-9 Used to add 'count' prefixes to commands.
  473. : Prefix character for "ex" commands.
  474. ; Repeat last t, T, f, or F command.
  475. < The 'left shift' operator.
  476. > The 'right shift' operator.
  477. ? Same as '/', but search backward.
  478. - 13 -
  479. STEVIE User Reference
  480. A Append at the end of the current line.
  481. B Backward one blank-delimited word.
  482. C Change the rest of the current line.
  483. D Delete the rest of the current line.
  484. E End of the end of a blank-delimited word.
  485. F Find a character backward on the current line.
  486. G Go to the given line number (end of file, by
  487. default).
  488. H Move to the first non-white char. on the top screen
  489. line.
  490. I Insert before the first non-white char. on the
  491. current line.
  492. J Join two lines.
  493. L Move to the first non-white char. on the bottom
  494. screen line.
  495. M Move to the first non-white char. on the middle
  496. screen line.
  497. N Reverse the last string search.
  498. O Open a new line above the current line, and start
  499. inserting.
  500. P Put the yank/delete buffer before the current cursor
  501. position.
  502. R Replace characters until an "escape" character is
  503. received. Similar to insert mode, but replaces
  504. instead of inserting. Typing a newline in replace
  505. mode is the same as in insert mode, but replacing
  506. continues on the new line.
  507. T Reverse search 'upto' the given character.
  508. U Restore the current line to its state before you
  509. started changing it.
  510. W Move forward one blank-delimited word.
  511. - 14 -
  512. STEVIE User Reference
  513. X Delete one character before the cursor.
  514. Y Yank the current line. Same as 'yy'.
  515. ZZ Exit from the editor, saving changes if necessary.
  516. [[ Move backward one C function.
  517. ]] Move forward one C function.
  518. ^ Move to the first non-white on the current line.
  519. ` Move to the given mark, as with '. The distinction
  520. between the two commands is important when used with
  521. operators. I support the difference correctly. If
  522. you don't know what I'm talking about, don't worry,
  523. it won't matter to you.
  524. a Append text after the cursor.
  525. b Back one word.
  526. c The change operator.
  527. d The delete operator.
  528. e Move to the end of a word.
  529. f Find a character on the current line.
  530. h Move left one column.
  531. i Insert text before the cursor.
  532. j Move down one line.
  533. k Move up one line.
  534. l Move right one column.
  535. m Set a mark at the current position (e.g. ma or mb).
  536. n Repeat the last string search.
  537. o Open a new line and start inserting text.
  538. p Put the yank/delete buffer after the cursor.
  539. r Replace a character.
  540. - 15 -
  541. STEVIE User Reference
  542. s Replace characters.
  543. t Move forward 'upto' the given character on the
  544. current line.
  545. u Undo the last edit.
  546. w Move forward one word.
  547. x Delete the character under the cursor.
  548. y The yank operator.
  549. z Redraw the screen with the current line at the top
  550. (zRETURN), the middle (z.), or the bottom (z-).
  551. | Move to the column given by the preceding count.
  552. ~ Invert the case of the current character (if alpha)
  553. and move to the right. If the parameter "tildeop"
  554. is set, this command functions as an operator.
  555. - 16 -
  556. STEVIE - User Guide
  557. CONTENTS
  558. 1. Overview........................................... 1
  559. 2. Starting the Editor................................ 2
  560. 3. Set Command Options................................ 2
  561. 4. Colon Commands..................................... 4
  562. 4.1 Mode Lines.................................... 5
  563. 4.2 The Global Command............................ 5
  564. 4.3 The Substitute Command........................ 5
  565. 4.4 File Manipulation Commands.................... 6
  566. 5. String Searches.................................... 7
  567. 6. Operators.......................................... 8
  568. 7. Tags............................................... 8
  569. 8. System-Specific Comments........................... 8
  570. 8.1 Atari ST...................................... 8
  571. 8.2 UNIX.......................................... 8
  572. 8.3 OS/2.......................................... 9
  573. 8.4 MSDOS......................................... 9
  574. 9. Missing Features................................... 9
  575. 10. Known Bugs and Problems............................ 10
  576. 11. Conclusion......................................... 11
  577. Character Function Summary.............................. 12
  578. - i -