home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume4 / vms-vi-2 / part07 < prev    next >
Text File  |  1989-02-03  |  29KB  |  790 lines

  1. Path: xanth!mcnc!gatech!bloom-beacon!bu-cs!mirror!necntc!ncoast!allbery
  2. From: gregg@a.cs.okstate.edu (Gregg Wonderly)
  3. Newsgroups: comp.sources.misc
  4. Subject: v04i098: TPUVI for VMS part 7 of 17
  5. Message-ID: <8809210844.AA27517@uunet.UU.NET>
  6. Date: 27 Sep 88 01:51:50 GMT
  7. Sender: allbery@ncoast.UUCP
  8. Reply-To: gregg@a.cs.okstate.edu (Gregg Wonderly)
  9. Lines: 778
  10. Approved: allbery@ncoast.UUCP
  11.  
  12. Posting-number: Volume 4, Issue 98
  13. Submitted-by: "Gregg Wonderly" <gregg@a.cs.okstate.edu>
  14. Archive-name: vms-vi-2/Part07
  15.  
  16. $ show default
  17. $ if f$search("DOC.DIR;1") .eqs. "" then -
  18.      CREATE/LOG/DIRECTORY [.DOC]
  19. $ write sys$output "Creating [.DOC]VI_2.RNO"
  20. $ create [.DOC]VI_2.RNO
  21. $ DECK/DOLLARS="*$*$*EOD*$*$*"
  22. .if system
  23. .I-1
  24. 2 Set_options
  25. .else system
  26. .send toc .ifnot global
  27. .hl 1 ^*Set options\*
  28. .send toc .endif global
  29. .endif system
  30. .s
  31. The ":set", EX, command allows you to change the behavior of VI under certain
  32. circumstances.  There are several characteristics that you may or may not
  33. wish to make use of.  Therefore, these can be altered by setting options.
  34. Below is a list of options that you can set using the ":set" command.
  35. Some of these options are either ON or OFF, and some have values.  The
  36. proper syntax for changing the option therefore varies, and is outlined
  37. with each option.
  38. .s
  39. .if system
  40. .I-1
  41. 3 Auto_Send_to_DCL
  42. .else system
  43. .send toc .ifnot global
  44. .hl 2 ^*Auto Send to DCL\*
  45. .send toc .endif global
  46. .endif system
  47. .s
  48. .LT
  49. :set [no]senddcl            Determines whether or not pressing
  50.                             <RETURN> while in the DCL buffer, and
  51.                             while in insert mode, causes the
  52.                             current line to be sent to the DCL
  53.                             subprocess.  If senddcl is in effect,
  54.                             then pressing return while you are in
  55.                             the DCL buffer will cause the current
  56.                             line to be sent to the DCL
  57.                             subprocess.  The line typed, as well
  58.                             as the output from the DCL command is
  59.                             part of the undo region that is
  60.                             deleted if you use undo after the DCL
  61.                             command output appears in the DCL
  62.                             buffer.  See the HELP section on the
  63.                             DCL process for more information.
  64. .EL
  65. .if system
  66. .I-1
  67. 3 Auto_line_wrap
  68. .else system
  69. .send toc .ifnot global
  70. .hl 2 ^*Auto line wrap\*
  71. .send toc .endif global
  72. .endif system
  73. .s
  74. .LT
  75. :set wrapmargin=integer     Sets the number of columns from the
  76.                             right margin at which VI will wrap
  77.                             text to the beginning of the next
  78.                             line.  Normally, no wrapping is done,
  79.                             i.e. wrapmargin=0 is in effect. 
  80. .EL
  81. .if system
  82. .I-1
  83. 3 Auto_write
  84. .else system
  85. .send toc .ifnot global
  86. .hl 2 ^*Auto write\*
  87. .send toc .endif global
  88. .endif system
  89. .s
  90. .LT
  91. :set [no]autowrite          Determines whether or not modified
  92.                             buffers are automatically written out
  93.                             when you map a different buffer to
  94.                             the window that a modified buffer is
  95.                             mapped to. 
  96. .EL
  97. .if system
  98. .I-1
  99. 3 Case_insensitive_search
  100. .else system
  101. .send toc .ifnot global
  102. .hl 2 ^*Case insensitive search\*
  103. .send toc .endif global
  104. .endif system
  105. .s
  106. .LT
  107. :set [no]ignorecase         Determines whether or not case is
  108.                             ignored during string search
  109.                             operations.  Normally, case is
  110.                             ignored. 
  111. .EL
  112. .if system
  113. .I-1
  114. 3 Change_file_list
  115. .else system
  116. .send toc .ifnot global
  117. .hl 2 ^*Change file list\*
  118. .send toc .endif global
  119. .endif system
  120. .s
  121. .LT
  122. :set file[s] <file spec>    Changes the list of files to edit to
  123.                             be those specified by <file spec>.
  124.                             <file spec> should be a single
  125.                             filespec, or a comma separated list. 
  126. .EL
  127. .if system
  128. .I-1
  129. 3 Error_bells
  130. .else system
  131. .send toc .ifnot global
  132. .hl 2 ^*Error Bells\*
  133. .send toc .endif global
  134. .endif system
  135. .s
  136. .LT
  137. :set [no]errorbells         Determines whether or not a bell is
  138.                             sounded when certain errors occur.
  139. .EL
  140. .if system
  141. .I-1
  142. 3 Expand_tabs
  143. .else system
  144. .send toc .ifnot global
  145. .hl 2 ^*Expand tabs\*
  146. .send toc .endif global
  147. .endif system
  148. .s
  149. .LT
  150. :set [no]tabs               Determines whether or not tabs are
  151.                             expanded to the proper number of
  152.                             spaces as you type.  "notabs" will
  153.                             cause tabs to be expanded. 
  154. .EL
  155. .if system
  156. .I-1
  157. 3 Line_report
  158. .else system
  159. .send toc .ifnot global
  160. .hl 2 ^*Line report\*
  161. .send toc .endif global
  162. .endif system
  163. .s
  164. .LT
  165. :set report=integer         Sets the number of lines at which VI
  166.                             will tell you what you did.  E.g. if
  167.                             you type, 2yy, then VI will quietly
  168.                             yank 2 lines.  If you type, 10yy,
  169.                             then VI will tell you "10 lines
  170.                             yanked", providing report is set to
  171.                             some number less than 10. The same
  172.                             thing occurs for deletion, and put
  173.                             operations. If more than 'report'
  174.                             lines are added/deleted, then VI
  175.                             tells you about it.  Report is set to
  176.                             5 by default. 
  177. .EL
  178. .if system
  179. .I-1
  180. 3 No_write
  181. .else system
  182. .send toc .ifnot global
  183. .hl 2 ^*No write\*
  184. .send toc .endif global
  185. .endif system
  186. .s
  187. .LT
  188. :set [no]write              Modifies the internal TPU flags for
  189.                             the current buffer that tell TPU
  190.                             whether or not to ignore
  191.                             modifications to a buffer.  This flag
  192.                             is examined during exit from VI to
  193.                             determine whether or not to prompt
  194.                             you to write out the buffer.  ":quit"
  195.                             will ignore modified buffers that
  196.                             have this flag set. 
  197. .EL
  198. .if system
  199. .I-1
  200. 3 Paragraph_delimiters
  201. .else system
  202. .send toc .ifnot global
  203. .hl 2 ^*Paragraph delimiters\*
  204. .send toc .endif global
  205. .endif system
  206. .s
  207. .LT
  208. :set paragraphs=<pairs>     Sets pairs of characters that are
  209.                             assumed to occur at the beginning of
  210.                             the line following a ".".  It is
  211.                             usually the case that these pairs of
  212.                             characters are RUNOFF commands.  In
  213.                             VI under UNIX, these pairs are NROFF
  214.                             formatting commands.  A single
  215.                             character, as in .P, should be
  216.                             followed by a space in the string of
  217.                             pairs of characters.  If a paragraph
  218.                             movement (i.e. } or {) fails to
  219.                             locate any of the specified patterns,
  220.                             then the next blank line will be
  221.                             searched for. 
  222. .EL
  223. .if system
  224. .I-1
  225. 3 Read_only_files
  226. .else system
  227. .send toc .ifnot global
  228. .hl 2 ^*Read Only Files\*
  229. .send toc .endif global
  230. .endif system
  231. .s
  232. .LT
  233. :set [no]readonly           Changes the /READONLY attributes of a 
  234.                             buffer.  If /READONLY is present on
  235.                             the command line when the editor
  236.                             starts, then all buffers during that
  237.                             session of the editor will be created 
  238.                             with the attribute, readonly.  These
  239.                             buffers can not be written out on
  240.                             exit, and if any are modified, you
  241.                             must use the :q! command to exit the
  242.                             editor.  A buffer that is :set
  243.                             noreadonly will be written out apon
  244.                             exit.
  245. .EL
  246. .if system
  247. .I-1
  248. 3 Regular_expression_use
  249. .else system
  250. .send toc .ifnot global
  251. .hl 2 ^*Regular expression use\*
  252. .send toc .endif global
  253. .endif system
  254. .s
  255. .LT
  256. :set [no]magic              Determines whether or not regular
  257.                             expressions are used in search
  258.                             strings.  By default, regular
  259.                             expressions are used. 
  260. .EL
  261. .if system
  262. .I-1
  263. 3 Screen_length
  264. .else system
  265. .send toc .ifnot global
  266. .hl 2 ^*Screen length\*
  267. .send toc .endif global
  268. .endif system
  269. .s
  270. .LT
  271. :set window=lines           Sets the length of the screen in
  272.                             lines that is used by VI.  The UNIX
  273.                             version of VI chooses to use the
  274.                             bottom of the screen as the base of a
  275.                             small window.  The TPU version uses
  276.                             the top of the screen.  The maximum
  277.                             number of lines is terminal
  278.                             dependent, the minimum is 3. 
  279. .EL
  280. .if system
  281. .I-1
  282. 3 Screen_width
  283. .else system
  284. .send toc .ifnot global
  285. .hl 2 ^*Screen width\*
  286. .send toc .endif global
  287. .endif system
  288. .s
  289. .LT
  290. :set width=cols             Sets the width of the current window
  291.                             to the specified value. The maximum
  292.                             setting is terminal dependent, while
  293.                             the minimum is left up to the user. 
  294. .EL
  295. .if system
  296. .I-1
  297. 3 Scroll_amount
  298. .else system
  299. .send toc .ifnot global
  300. .hl 2 ^*Scroll amount\*
  301. .send toc .endif global
  302. .endif system
  303. .s
  304. .LT
  305. :set scroll=integer         Sets the default number of lines that
  306.                             the window scrolls when ^D or ^U is
  307.                             typed.  This number can also be set
  308.                             by preceeding ^D or ^U with a count. 
  309. .EL
  310. .if system
  311. .I-1
  312. 3 Section_delimiters
  313. .else system
  314. .send toc .ifnot global
  315. .hl 2 ^*Section delimiters\*
  316. .send toc .endif global
  317. .endif system
  318. .s
  319. .LT
  320. :set sections=<pairs>       Sets pairs of characters that are
  321.                             assumed to occur at the beginning of
  322.                             the line following a ".".  It is
  323.                             usually the case that these pairs of
  324.                             characters are RUNOFF commands.  In
  325.                             VI under UNIX, these pairs are NROFF
  326.                             formatting commands.  A single
  327.                             character, as in .P, should be
  328.                             followed by a space in the string of
  329.                             pairs of characters.  There are some
  330.                             pairs of characters that are
  331.                             exceptions.  The pair of characters,
  332.                             +c, really means a single '{' at the
  333.                             beginning of the line.  The pair of
  334.                             characters, +f, really means the
  335.                             string, subroutine, or the string,
  336.                             function, anywhere in the line.  The
  337.                             pair of characters, +t, really means
  338.                             the string, procedure, at the
  339.                             beginning of the line.  If a section
  340.                             movement (i.e. ]] or [[) fails, then
  341.                             the next blank line will also be
  342.                             searched for. 
  343. .EL
  344. .if system
  345. .I-1
  346. 3 Shift_width
  347. .else system
  348. .send toc .ifnot global
  349. .hl 2 ^*Shift width\*
  350. .send toc .endif global
  351. .endif system
  352. .s
  353. .LT
  354. :set shiftwidth=integer     Sets the number of columns that text
  355.                             is to be shifted by when the shift
  356.                             left or shift right commands are
  357.                             executed.
  358. .EL 
  359. .if system
  360. .I-1
  361. 3 Show_settings
  362. .else system
  363. .send toc .ifnot global
  364. .hl 2 ^*Show settings\*
  365. .send toc .endif global
  366. .endif system
  367. .s
  368. .LT
  369. :set all                    Displays the current values of the
  370.                             options.
  371. .EL
  372. .if system
  373. .I-1
  374. 3 Tab_stops
  375. .else system
  376. .send toc .ifnot global
  377. .hl 2 ^*Tab stops\*
  378. .send toc .endif global
  379. .endif system
  380. .s
  381. .LT
  382. :set tabstops=integer       Sets the number of columns on the
  383.                             screen that is used to represent a
  384.                             tabstop.  The default is eight. 
  385. .EL
  386. .if system
  387. .I-1
  388. 3 Tag_Case
  389. .else system
  390. .send toc .ifnot global
  391. .hl 2 ^*Tag Case\*
  392. .send toc .endif global
  393. .endif system
  394. .s
  395. .LT
  396. :set [no]tagcase            Determines whether or not the case of
  397.                             a tag is recognized when searching
  398.                             for it.  For case insensitive
  399.                             languages or facilities, set
  400.                             notagcase should be used, otherwise
  401.                             the default, tagcase, is sufficient. 
  402. .EL
  403. .if system
  404. .I-1
  405. 3 Tags_files
  406. .else system
  407. .send toc .ifnot global
  408. .hl 2 ^*Tags files\*
  409. .send toc .endif global
  410. .endif system
  411. .s
  412. .LT
  413. :set tags=<file list>       Sets the list of files that are used
  414.                             to resolve tag references.  Each file
  415.                             name should be separated by a space. 
  416. .EL
  417. .if system
  418. .I-1
  419. 3 Type_ahead
  420. .else system
  421. .send toc .ifnot global
  422. .hl 2 ^*Type ahead\*
  423. .send toc .endif global
  424. .endif system
  425. .s
  426. .LT
  427. :set [no]update             Determines whether or not an explicit
  428.                             TPU UPDATE is done after each
  429.                             keystroke.  Normally, TPU will
  430.                             process typeahead by not updating the
  431.                             window until there is no typeahead.
  432.                             ":set update" will foil these
  433.                             attempts, and force an update to
  434.                             occur after each keystroke during
  435.                             command level processing. 
  436. .EL
  437. .if system
  438. .I-1
  439. 3 Undo_and_maps
  440. .else system
  441. .send toc .ifnot global
  442. .hl 2 ^*Undo and maps\*
  443. .send toc .endif global
  444. .endif system
  445. .s
  446. .LT
  447. :set [no]undomap            Controls whether or not an attempt
  448.                             is made to make it possible to undo
  449.                             all buffer operations that occur
  450.                             during the execution of a map or
  451.                             learned key sequence (see the :map
  452.                             and :learn commands). Normally, maps
  453.                             are undoable because a copy of the
  454.                             entire buffer is saved before a map
  455.                             is executed.  While editing large
  456.                             buffers, this makes it rather slow to
  457.                             use maps, so you can turn this
  458.                             feature off when it is deemed not
  459.                             necessary. 
  460. .EL
  461. .if system
  462. .I-1
  463. 3 Wrap_on_search
  464. .else system
  465. .send toc .ifnot global
  466. .hl 2 ^*Wrap on search\*
  467. .send toc .endif global
  468. .endif system
  469. .s
  470. .LT
  471. :set [no]wrapscan           Determines whether or not search
  472.                             operations are continued at the
  473.                             end/beginning of a buffer by moving
  474.                             to the beginning/end, respecively.
  475.                             Normally, wrapscan is in effect. 
  476. .EL
  477. .ifnot system
  478. .send toc .ifnot global
  479. .hl 1 ^*Additional key strokes\*
  480. .send toc .endif global
  481. .else system
  482. .I-1
  483. 2 Additional_key_strokes
  484. .s
  485. .endif system
  486. There are some additional key strokes available that pertain to using added
  487. features of this version of VI.  Below is an outline of the added key strokes.
  488. .ifnot system
  489. .send toc .ifnot global
  490. .hl 2 ^*Key pad keys used\*
  491. .send toc .endif global
  492. .else system
  493. .s
  494. .endif system
  495. .lm+5
  496. .LT
  497. KP0                         Temporarily creates a window that
  498.                             is the size of the entire
  499.                             screen, and maps the current
  500.                             buffer to that window.  Use KP1
  501.                             (Delete window) to remove this
  502.                             window, and uncover the windows
  503.                             that were occluded by the
  504.                             created window.  This command only
  505.                             works when there is more than one
  506.                             window on the screen.
  507.  
  508. KP1                         Delete the current window from
  509.                             the screen and release its space
  510.                             to one of the surrounding
  511.                             windows. 
  512.  
  513. KP2                         Split the current window into
  514.                             two windows divided by a status
  515.                             line place at the line that the
  516.                             cursor currently occupies. 
  517.  
  518. KP3                         Move down the screen to the next
  519.                             window.
  520.  
  521. KP4                         Shrink the size of the current
  522.                             window by one line, making the
  523.                             window above, or below larger.
  524.                             An attempt is made to shrink the
  525.                             window by pulling up the bottom
  526.                             line, if that fails, then an
  527.                             attempt is made to pull down the
  528.                             top line.  If that fails, then
  529.                             the window can not be shrunk. 
  530.  
  531. KP5                         Enlarge the current window by
  532.                             one line.  The same algorithym
  533.                             as for shrink is used to
  534.                             determine how to alter the size
  535.                             of the window. 
  536.  
  537. KP6                         Move up the screen to the next
  538.                             window.
  539.  
  540. PF1                         When using VI on a VT100 series
  541.                             terminal, it is not possible to
  542.                             have TPU recognize the ESCAPE
  543.                             character, ASCII 27, it its
  544.                             primary processing loop.  When
  545.                             using a VT200 series terminal,
  546.                             this is circumvented by using
  547.                             F11 as if it were ESCAPE.  PF1
  548.                             provides this functionality for
  549.                             the VT100 series of terminals. 
  550.  
  551. PF2                         PF2 envokes the help facilities
  552.                             available for VI.
  553.  
  554. .EL
  555. .ifnot system
  556. .send toc .ifnot global
  557. .hl 2 ^*Keyboard keys used\*
  558. .send toc .endif global
  559. .else system
  560. .s
  561. .lm-5
  562. KEY BOARD KEYS USED
  563. .lm+5
  564. .endif system
  565. .s
  566. .LT
  567. CTRL-X                      The CTRL-X key is used to send a
  568.                             DCL command to the DCL subprocess
  569.                             that is bound to the DCL buffer.
  570.  
  571. CTRL-R                      The CTRL-R key is used to remember
  572.                             a learn sequence any bind it to a
  573.                             key.  The :learn command initiates
  574.                             the learning process.
  575. .EL
  576. .lm-5
  577. .ifnot system
  578. .send toc .ifnot global
  579. .hl 1 ^*Windows and buffers\*
  580. .send toc .endif global
  581. .else system
  582. .I-1
  583. 2 Windows_and_buffers
  584. .s
  585. .endif system
  586. The multiple window features of this implementation of VI make it possible to
  587. view multiple portions of a single file, or different portions of different
  588. files simultaneously.  It is also possible to yank/delete text from one
  589. window/buffer and place it into another buffer.  To accomplish this, all
  590. named buffers, and numbered, deletion buffers are globally available.  I.E.
  591. there are no buffers that are local to a buffer, with a single exception being
  592. the information pertaining to the undo operation.
  593. .s
  594. If you type 'u' while in a buffer different from the one that you made
  595. the last change in, you will see the message
  596. .s
  597. .lm+5
  598. Undo not in this buffer.
  599. .s
  600. .lm-5
  601. displayed at the bottom of the screen.
  602. .s
  603. For more information on using multiple buffers and window, consult the
  604. section on additional key strokes.
  605. .ifnot system
  606. .send toc .ifnot global
  607. .hl 1 ^*Display differences\*
  608. .send toc .endif global
  609. .else system
  610. .I-1
  611. 2 Display_differences
  612. .s
  613. .endif system
  614. Due to certain characteristics of the TPU screen management facilities,
  615. certain activities on the display differ from those found in UNIX VI.  One
  616. difference is TPU's inability to display control characters in an expanded
  617. format, such as "^H" for a literal backspace character in the text.  While
  618. commands are being entered in EX mode, you will see that control characters
  619. are displayed as "^?" where the "?" character is replaced by the appropriate
  620. character corresponding to the control character typed.  This type of
  621. expansion is possible here, but it is not possible to do it in the text
  622. buffers displayed on the screen. If a key typed does not correspond to a
  623. printable ASCII character, then a backward question mark will be displayed
  624. when that key is typed. 
  625. .ifnot system
  626. .send toc .ifnot global
  627. .hl 1 ^*Tag files\*
  628. .send toc .endif global
  629. .else system
  630. .I-1
  631. 2 Tag_files
  632. .s
  633. .endif system
  634. A tags file is a file that contains one or more lines each of which contains 3
  635. columns of text.  Each column is separated by exactly one tab character. The
  636. first column of text is the "tag" string.  The second column is the file with
  637. which that tag is associated, and the remainder of the line contains an EX mode
  638. command that will perform an action associated with that tag. Usually, the
  639. action locates a specific line in the file that is associated with the tag.  VI
  640. will position the cursor at the bottom of the buffer prior to the execution of
  641. the EX mode command.  Typically, a tags file is used to locate the definition
  642. of a languange procedure, or text formatter macro. 
  643. .s
  644. A simple tags file can be constructed by using a program to analyze the text
  645. of a file, and locate the lines that should be tagged.  In the UNIX operating
  646. system, there is a program called CTAGS(1) that analyzes C language source
  647. files, and creates a 'tags' file that allows access to the functions contained
  648. in the files specified.
  649. .ifnot system
  650. .send toc .ifnot global
  651. .hl 1 ^*Kept Editors\*
  652. .send toc .endif global
  653. .else system
  654. .I-1
  655. 2 Kept_Editors
  656. .s
  657. .endif system
  658. VAX/VMS and TPU support the notion of a "Kept Editor".  A "Kept Editor" is
  659. a subprocess that can be ATTACH'd to and from at will.  The
  660. VI$ROOT:[EXE]VI.COM command procedure takes care of all of the details of
  661. carrying out the operation of the "Kept Editor".  It knows how to locate,
  662. and attach to an existing "Kept Editor", and how to automatically create
  663. a new one if there is not one running.
  664. .ifnot system
  665. .send toc .ifnot global
  666. .hl 1 ^*Other TPU's\*
  667. .send toc .endif global
  668. .else system
  669. .I-1
  670. 2 Other_Tpus
  671. .s
  672. .endif system
  673. If you wish to use other TPU applications, besides VI, there is a
  674. program that can help in the negotiation of which CALL_USER routines and which
  675. section file to use.  VI$ROOT:[SRC]VI.MAR is the source to this program.  It
  676. translates the logical names VISECINI and VI$CALLUSER instead of the normal
  677. TPUSECINI and TPU$CALLUSER logical names.  VI$ROOT:[EXE]VI.CLD is a CLD file
  678. that makes VI.EXE accessable to your current process.  You
  679. can make VI.EXE by using the command "@MAKE EXE" from within the VI$ROOT:[SRC]
  680. directory.  Then you will need to use the command
  681. .s
  682. .lm+5
  683. $ SET COMMAND VI$ROOT:[EXE]VI
  684. .lm-5
  685. .s
  686. If you desire to use VI$ROOT:[EXE]VI.COM to run VI in a subprocess, then
  687. you should install VI.CLD into SYS$SHARE:DCLTABLES.EXE.  See the Command
  688. Language Definition manual for more information on doing this, if you
  689. are not familiar with the procedure.  This is necessary because the command
  690. tables are not propagated to a subprocess when it is created.
  691. .ifnot system
  692. .send toc .ifnot global
  693. .hl 1 ^*The DCL buffer\*
  694. .send toc .endif global
  695. .else system
  696. .I-1
  697. 2 DCL_buffer
  698. .s
  699. .endif system
  700. There is a special buffer that is always associated with a DCL subprocess.
  701. The "DCL buffer" can be used as an alternate method of collecting DCL output
  702. if the filter_region (!<movement><command>) and read_from_command (:r!<command>)
  703. capabilities do not fit your needs.  Any line in any buffer can be sent to
  704. the DCL subprocess by placing the cursor on that line, and typing a ^X
  705. (Control-X).
  706. .s
  707. When you type ^X, several actions can happen.  If you are not
  708. already in the DCL buffer, then the current window will be split, and the
  709. top window will be mapped to the DCL buffer, and you will be positioned there.
  710. In either case, the command will be copied into the DCL buffer, and will also
  711. be sent to the DCL subprocess.  If the subprocess does not exist, then it
  712. will be created.  There are several ways that any one of these steps can
  713. fail.  If they do, an appropriate diagnostic will be issued to allow you
  714. to resolve the problem.
  715. .s
  716. The setable option, senddcl, allows you to use the DCL buffer interactively,
  717. somewhat. When senddcl is in effect, you can place yourself in insert mode,
  718. using A, a, I, i, R, O, or o, and then type a DCL command. When you press enter
  719. at the end of the line, that line is sent to the DCL subprocess as input.  The
  720. output of the DCL command is placed into the DCL buffer as if you had typed it
  721. in addition to the command line.  Thus, undo will allow you to remove both the
  722. command line, and the output from the DCL buffer with a minimum of trouble. 
  723. .ifnot system
  724. .send toc .ifnot global
  725. .hl 1 ^*TPU bugs revealed\*
  726. .send toc .endif global
  727. .else system
  728. .I-1
  729. 2 TPU_Bugs_Revealed
  730. .s
  731. .endif system
  732. There are several problems with TPU that cause problems with this implementation
  733. of VI.  Outlined below are some of the more major problems.  There are probably
  734. some that I have forgotten by now.
  735. .s
  736. Every place that there is a TPU statement of the form:
  737. .s
  738. .lm+5
  739. EXECUTE (COMPILE ("vi$global_var := ...."));
  740. .lm-5
  741. .s
  742. there is a statement preceeding that line that initializes vi$global_var to
  743. zero.  This is necessary to get around a bug in TPU that causes the storage
  744. that vi$global_var is associated with before the EXECUTE (COMPILE ()), to
  745. not be disassociated.  TPU would randomly scribble on string and buffer
  746. descriptors until it would stop with an "internal error, please SPR this",
  747. message.
  748. .s
  749. Another problems has to do with the KEY_NAME() values of keys.  It appears
  750. that GET_INFO (DEFINED_KEY...) does not return proper KEY_NAME() values
  751. for certain keys.  In particular, you will notice that maps to keys like
  752. q, v, and others will be displayed with the key as a backward question
  753. mark, instead of the proper letter, when you issue the :map command to
  754. display the current maps.  This is currently (apparently) unsurmountable.
  755. Some trickery (hacking I like to call it) could be done to coerce the
  756. bogus key values into something reasonable, but I decided not to do that.
  757. .s
  758. Still another problem has to do with the fact that ASCII (CTRL_?_KEY) always
  759. returns ASCII(0) instead of ASCII(1) through ASCII(26) as would be convienent.
  760. I have written some code (hacks at best) to get around this problem by
  761. normalizing the values around the value of CTRL_A_KEY.  An expression of
  762. the form:
  763. .s
  764. .lm+5
  765. keyname-CTRL_A_KEY/(CTRL_B_KEY-CTRL_A_KEY)
  766. .lm-5
  767. .s
  768. will result in a value of 0 through 25 when keyname has a value in the
  769. range of CTRL_A_KEY to CTRL_Z_KEY.  This code is really bogus, but I
  770. did not see a more feasible way of doing this.  KEY_NAME() values should
  771. really comprise another TPU data type so that ASCII could distinguish
  772. between those values and integer values.  Then it could return the entire
  773. string that represents the key stroke, e.g. "<ESC>[23~".
  774. .s
  775. TPU's pattern matching code is mostly broken.  The regular expression compiler
  776. in VI generates TPU patterns that correspond to the RE's passed to it.  The
  777. biggest problem with the TPU pattern matching is that it does not know how to
  778. back out of a match, and try an alternative.  If two adjacent pieces of an RE
  779. have a non-null intersection, then they can cause a pattern match failure
  780. because the first pattern can consume a character that would match the
  781. second pattern.  The SEARCH() routine will not backout of a match once
  782. it has been made (even in the somewhat 'kludgy' incremental mode).
  783. .s
  784. The first time that you here a bell sound because you hit ESCAPE an extra
  785. time, the screen will scroll up one line.  You MUST use ^L to redraw the
  786. screen or you will be off by one line.  This is a bug in the screen management
  787. routines used by TPU.
  788. *$*$*EOD*$*$*
  789. $ exit
  790.