home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 September / Simtel20_Sept92.cdr / msdos / editor / ichi.arc / ICHI.MNL < prev    next >
Text File  |  1989-01-18  |  54KB  |  864 lines

  1.     This uncompromised trial copy of the ICHI editor is available in the Los
  2. Angeles area Computer Swap Meets for the price of $5.00.  It is also available
  3. in the IBM software application forum of Compuserv. If you use this program and
  4. find it thoroughly useful and to your complete satisfaction, you are asked to
  5. send an additional $20.00 to the author, Fook H. Eng, c/o Computer ERA, Inc,
  6. 428-B South Ramona Ave, Monterey Park, CA 91754, to support his effort in such
  7. creativities.  In return, your name will be on file for purpose of notification
  8. of updates and support.  Complete source code, for an additional $10.00,  will
  9. be provided so that you may modify the program to suit your own biases and
  10. needs.  A $5.00 handling fee for each major update is required. Minor updates
  11. and blatant bug fixes are free.  You are encouraged to make copies of the
  12. program and pass them on to your friends. If you come by this program as such
  13. a recipient, you are also encouraged to subsidize the author's well being
  14. subject to the same condition of being satisfied with the program's usefulness.
  15.  
  16.     The ICHI editor supports text screen formats of any number of columns by
  17. any number of rows.  To realize this further capability of ICHI, you must first
  18. have the required monitor and graphic card to provide the proper text screen
  19. setting.  In general, most EGA cards are sold with supporting software which
  20. selects a specific variety of screen column and row formats.  Universal with
  21. these EGA cards is the 80 column by 43 line format which can be invoked with
  22. the .EXE file EGA43.EXE furnished on this diskette.  On invocation, Ichi will
  23. inquire your video bios of the current number of columns and rows and prepares
  24. itself accordingly to function in this environment. ICHI supports monochrome
  25. and EGA adapters, but with the CGA adapter there will be a certain amount of
  26. screen flickering.  It is the current design decision to ignore this 'snow'
  27. problem in order to escape the performance degradation penalty which would be
  28. in the order of ten to one.
  29.  
  30.     The IBM enhanced keyboard was introduced with the IBM RT and it is now
  31. standard on the PS/2 family. It features two more F-Keys (F11, F12) and it
  32. recognizes additional alt/ctl combinations of special keys. For example, ctrl
  33. up/down arrows and shifted left/right arrows were not supported by the earlier
  34. bios. If your system bios has the support for the enhanced keyboard, you will
  35. be able to enjoy the benefits of ICHI's exploitation of the new power.
  36.  
  37.     The ICHI editor will retain the text foreground and background attributes
  38. that is found at the time of invocation. Therefore the desired editing color
  39. attributes should be established before calling ICHI. (Norton's SA.COM is
  40. handy-dandy for this purpose.)
  41.  
  42.     The ideas and features of the ICHI editor are culled from many sources.
  43. Among these are the XTC editor from Wendin, the Vi editor from UNIX, the Turbo
  44. Pascal Editor Toolbox, IBM's SPF editor, Solution System's Brief, and WordStar.
  45. Because the design of the ICHI editor is free from the considerations of porta-
  46. bility and generalities which commercial packages must necessarily emphasize,
  47. a higher level of performance is maintained.
  48.  
  49.     The keyboard input commands, though adhering to the WordStar standard, are
  50. vastly extended and improved upon. Several of the ICHI keystrokes have different
  51. meanings depending on the situation.  For example, the HOME key sends the cursor
  52. to the left edge of the screen.  But if it is already there, it sends the cursor
  53. to the top of the current window.  And if it is already there too, it goes all
  54. the way to the beginning of the file.  Multiple meanings are also assigned to
  55. the Left/Right arrows, the DelKey, PgUp/PgDn, EndKey, and others.  The editing
  56. situation should make it perfectly clear as to which meaning is in effect.
  57.  
  58.     First, we briefly summarize some of the keystrokes here.
  59.  
  60.     Adopted WordStar            Meaning                     Alternate Ichi
  61.     keystroke                                               keystroke
  62.  
  63.     ^E                  Cursor up one line                  up arrow
  64.     ^X                  Cursor down one line                dn arrow
  65.     ^Q^E                Cursor up to top line               HOME HOME
  66.     ^Q^X                Cursor down to bottom line          END END
  67.     ^S                  Cursor left one char                left arrow
  68.     ^D                  Cursor right one char               right arrow
  69.     ^Q^S                Cursor left to begin of line        HOME, ^J
  70.     ^Q^D                Cursor right to end of line         END, ^J
  71.     ^A                  Cursor left one word                ^ left arrow
  72.     ^F                  Cursor right one word               ^ right arrow
  73.  
  74.     ^R                  Scroll up one screen length         PgDn
  75.     ^C                  Scroll down one screen length       PgUp
  76.     ^W                  Scroll up one line                  up arrow + scrollLock
  77.     ^Z                  Scroll down one line                Dn arrow + scrollLock
  78.     ^Q^R                Scroll screen to top of file        ^PgUp
  79.     ^Q^C                Scroll screen to bottom of file     ^PgDown
  80.  
  81. Adopted WordStar deletion commands:
  82.  
  83.     ^G or Del           Delete character at cursor
  84.     ^H or backspace     Delete character left of cursor
  85.     ^Y                  Delete one line
  86.     ^T                  Delete one word
  87.  
  88. ICHI extended cursor movement, scrolling, and deletion commands:
  89.  
  90.     Ctrl Up/Down        Cursor up/down line until a nonblank character
  91.     Alt_E               Move cursor line to top window
  92.     Alt_C               Move cursor line to bottom window
  93.     Alt_D               Move cursor line to mid window
  94.     Alt_R               Move cursor line half way to top of window
  95.     Alt_V               Move cursor line half way to bottom of window
  96.     Home/End            Cursor to top/bottom or left/right of screen
  97.     Ctrl_Home/End       Cursor half way to top/bottom of screen
  98.     Home Home           Cursor to top of file
  99.     End End             Cursor to bottom of file
  100.  
  101.                       Trying out the ICHI editor.
  102.                       ═══════════════════════════
  103. 1.  Place the diskette with ICHI.COM in a drive.
  104. 2.  Type ICHI. The program loads, the screen will clear, and a Welcome
  105.     message with suitable fanfare will appear.
  106. 3.  Press the 'Esc' key and you will be in text entry mode.
  107. 4.  The status line says your file is 'NONAME'. Let's change that first.
  108.     Type ^K^E which invokes the function to rename the current filename.
  109.     ICHI will cue you to enter a new name for the text stream. Enter the
  110.     name 'hello' then hit the Enter key. You will then see the text 'hello'
  111.     appear on the window status line. You have renamed the current file
  112.     to 'hello'.
  113. 5.  Your cursor should be at column one, line 1, a fact confirmed by the
  114.     information at the right hand side of the status line. Now enter the
  115.     text 'hello' and press return.
  116. 6.  Now the cursor is at column 1 of row 2, confirmed by the status line
  117.     again. Let's save this file. Press the F9 key. A very brief message
  118.     which reminds you that you will overwrite the existing file, if any,
  119.     will appear.  Upon confirmation that that is your intention, the editor
  120.     will then write the edited file to disk.
  121. 7.  Now let's terminate the editing session. Press the F10 key and ICHI will
  122.     ask you to confirm your intention to leave the editing session.
  123.     Answer 'y' and you are back to Dos.
  124. 8.  At the Dos prompt, type 'dir hello' and press Enter. Dos shows that this
  125.     is a file of seven characters.  We know these characters are the letters
  126.     'hello', a newline character and a carriage return character.
  127.  
  128.                 Some basic editor design philosophy.
  129.                 ════════════════════════════════════
  130.  
  131.     This editor is designed for program code maintenance. That thought was
  132. uppermost in mind through out the design. Not all or nearly all the bells
  133. and whistles that more 'Advanced' editors might have are present. But
  134. then you may also find several features that they don't include but which
  135. we happen to believe are essential. There is a trade off between offering
  136. the user a highly complex editor, and therefore an editor which requires
  137. the user to participate in a complex interface, and that of a simpler design.
  138. While ICHI is in no sense a simple editor, it does lack many of the options
  139. redundant in its requirement for multiple user decisions at every turn.
  140.  
  141.     You will not find word wrap offered. (We recommend WordPerfect). But
  142. rather we make sure that you have autoindentation which is quite essential
  143. for coding in a structured style, using, say  C, Pascal, PL/I, or Fortran.
  144. (a structured programmer can write structured code in any language).
  145.  
  146.     We do not offer the user a large number of split screens.  If you really
  147. want to view ten different files, one line at a time, we failed you badly.  We
  148. only offer you a single split screen, but we spare you unnecessary dialogs as
  149. to how many lines you want for the new window and from which existing window to
  150. acquire the resources.  Yet we still allow you to resize or switch windows on
  151. the run. With the dual screen and four phantom windows you may open six files
  152. to work on at the same time.  Or, if you wish, you may open only one file, but
  153. have the capability to work on six different parts of it, while viewing any two
  154. parts simultaneously.
  155.  
  156.  
  157.             Brief highlight summary of the ICHI editor.
  158.             ═══════════════════════════════════════════
  159.  
  160. 1   WordStar type keyboard input and ^K-^Q-^O option commands.
  161.  
  162. 2   One additional split screen plus four phantom windows which may
  163.     be linked.  Intelligent processing of data amongst them when they
  164.     are linked.  Screen sizes are conveniently adjustable.
  165.  
  166. 3   Extended cursor movements and scrolling techniques. Half screen
  167.     scrolling up or down and incorporation of placement of the cursor
  168.     line at top, middle, and bottom. With Scroll Lock On, directional
  169.     keys scroll window up/down as well as left/right.
  170.  
  171. 4   Text may be blocked and hidden. (SPF calls this text exclusion).
  172.     Processing of hidden text such as deletion, movement, copying, and
  173.     saving are conditionally permitted. Blocked text may be shifted
  174.     with the left or right arrow keys.
  175.  
  176. 5   Running Dos 3.1 or higher, exit to Dos is permitted. You may exit to
  177.     Dos to compile and test your program without abandoning your editor
  178.     session. Typically, you temporarily exit to Dos to check or change
  179.     the directory or run some other Dos command. You reenter ICHI by
  180.     typing 'exit', and you are returned to the editing session exactly
  181.     as you left it. CAVEAT: This command creates a child process that
  182.     runs Dos just as if you booted the system afreshed. You may forget
  183.     that you are in the child process and reexecute ICHI which works OK,
  184.     except that you may run out memory sooner than normally expected.
  185.  
  186. 6   Four F-keys are used for switching between screen windows and phantom
  187.     windows. Eight other F-keys are user definable macro keys. These macros
  188.     can be predefined by the user in a file, ICHI.MAC, so that they are read
  189.     in during program load.  If your system do not recognize the F11 and F12
  190.     key, then you only have six user definable macros.
  191.  
  192. 7   OnScreen menus are always there, ala Lotus 1-2-3, to help you.
  193.  
  194.                       ╔════════════════╗
  195.                       ║ The Ctrl_U key ║
  196.                       ╚════════════════╝
  197.  
  198.     The Ctrl_U key is used whenever you wish abort from whatever bad situation
  199.     that you might have gotten into. It is a very important key which we
  200.     designate for the S.O.S scenario. Under no circumstance can it be have any
  201.     meaning other than 'get me out of here as safely as possible'.
  202.  
  203.                       ╔═══════════════════════════╗
  204.                       ║ The versatile Home-Endkey ║
  205.                       ╚═══════════════════════════╝
  206.  
  207.         The HOME key moves the cursor to column 1 of the current line. But
  208.     if the cursor is already at column 1, then it moves the cursor to the top
  209.     line of the active window. And again, if it is already there, it moves
  210.     the cursor to the beginning of the text stream.  Similarly, the END key
  211.     moves the cursor to the end of the cursor line...unless it is already at
  212.     that location, it would move the cursor to the end of line of the bottom
  213.     line of the window ...unless it is already there, it would move the cursor
  214.     to the end of line of the last line in the text stream.
  215.  
  216.         When the Ctrl key is simultaneously pressed, the HOME key would cause
  217.     the cursor to advance half way toward the top of the screen.  Similarly,
  218.     Ctrl_END moves the cursor half way toward the bottom of the screen.
  219.  
  220.                       ╔════════════════════════╗
  221.                       ║   H E L P   M E N U S  ║
  222.                       ╚════════════════════════╝
  223.  
  224.         In addition to the Lotus 1-2-3 inspired menus which appear on the
  225.     message line when either a Ctrl-K, Ctrl-O, or a Ctrl-Q is pressed, ICHI
  226.     supports a more verbose set of three HELP MENUS triggered by Alt_H(elp).
  227.     By keying Alt_H, these help menus will pop up on the screen.  These menus
  228.     may be successively cycled through by pressing <Space Bar>, or they may be
  229.     summarily dismissed by pressing <Esc>.  Information on box drawing char-
  230.     acters and ASCII character codes are also available by pop down windows.
  231.     These are triggered by Alt_B(ox) and Alt_A(scii) respectively.
  232.  
  233.                          ╔═════════════════╗
  234.                          ║ General Editing ║
  235.                          ╚═════════════════╝
  236.  
  237. 2.1     To create a new file or add text to an existing file just type.
  238.     The characters you type will be added to the text stream at the cursor
  239.     position. If the window status line shows 'INS' indicating the insert
  240.     mode, the text on the current line to the right of the cursor is shoved
  241.     over to the right. In a word, what you type is inserted into the text
  242.     stream. If the status line shows 'OVR' then the typeover mode is on, and
  243.     what you type will overwrite the existing text. The maximum text line
  244.     length is 255. The 'INS' key or ^V toggles between insert mode and
  245.     typeover mode.
  246.         The editor comes up in autoindent mode with tab at 4 spaces. The
  247.     autoindent mode can be toggled. The tab setting can be redefined.
  248.  
  249. 2.2     Cursor movements. On the IBM compatible keyboards, cursor movements
  250.     are most easily accomplished by the left-right-up-down arrow keys. In
  251.     addition, Ctrl left and Ctrl right moves the cursor a word left and right
  252.     respectively. I also find the HOME-END key combination very useful. Among
  253.     other things, they moves the cursor to either column one or to the space
  254.     after the last nonblank of the current line. The ^J key shuttles the cur-
  255.     sor between column 1 and the space after the last character of the current
  256.     line.  Upon usage, you will find that the latter redundant implementation
  257.     is a friendly feature indeed.
  258.         The ^Q^W and ^Q^Z group moves the cursor to the top line and bottom
  259.     line repectively, keeping the column position of the cursor the same.
  260.     Duplicating the effects of ^Q^W and ^Q^Z, the keys PgUp and PgDn also
  261.     moves the cursor to the top and bottom of the screen respectively, if it
  262.     isn't already there.  Additionally, ctrl-HOME moves the cursor from its
  263.     present position half way toward the top of screen and ctrl-END moves it
  264.     half way toward the bottom of the screen.
  265.         The ctrl_Up/ctrl_Down keys moves the cursor up/down until a non-
  266.     blank character is encountered.  Depending on the coding style, this can
  267.     be very useful for matching the 'begin' and 'end' of Pascal source codes
  268.     or finding the '}' which terminates a logical block in C source codes.
  269.         The Alt_F key initiates cursor movement to the letter specified by
  270.     the key pressed.  If no letter matches the key pressed, the cursor moves
  271.     to the space after the last non-space character on the current line.
  272.  
  273. 2.3     Scrolling. The PgUp/PgDn key moves the cursor to the top/bottom of
  274.     screen.  Subsequent pressing of PgUp/PgDn scrolls up/down a screen length
  275.     in the text stream.
  276.         To scroll a single line up or down, use the ^W and ^Z commands
  277.     respectively.  Single line scrolls may also be done with the up/down
  278.     arrow keys when the scroll lock key is pressed.  Horizontal scrolling
  279.     may be done with the left/right arrow keys when scroll lock is toggled.
  280.         To scroll the screen so that the cursor line is at the top, middle,
  281.     or bottom of the screen, use Alt_E, Alt_D, or Alt_C.  This is much more
  282.     pleasant than repeatedly hitting the up or down arrow keys. Look at the
  283.     positions of the E, D, C keys on the keyboard and deduce why these
  284.     designations are made.  To scroll the screen so that the cursor line is
  285.     half towards the top or bottom use Alt_R or Alt_V respectively.  Again,
  286.     look at the positions of the R and V keys and you will see the mneumonic
  287.     rationale that motivated these designations.
  288.         To scroll to the first or last line of the file use ^Q^R or ^Q^C
  289.     respectively.  Remember the HOME and END key pair moves the cursor to
  290.     the top and bottom line of the window respectively.  Well, if the cursor
  291.     is already at the top line of the window, pressing the HOME key will scroll
  292.     the text a great distance, placing the cursor at the first line of the file.
  293.     Similarly, double pressing the END key will place the cursor at the last
  294.     line of the text stream.
  295.         The Alt_G key initiates scrolling to the line number subsequently
  296.     specified by the user. If the line number exceeds the total number of
  297.     lines of the editing text, the maximum number of lines is scrolled.
  298.     Goto line number may also be done relative to current line.  If the user
  299.     precedes the number by a plus or minus sign, the cursor will move ahead
  300.     or go back that number of lines, scrolling the screen, if necessary, in
  301.     order to keep the current line within the window boundary.
  302.  
  303. 2.4     DELETION and UNDO. The keys ^H and Backspace deletes the character
  304.     which precedes the cursor.  The keys ^G and Del deletes the character at
  305.     the cursor.  If the cursor is at a blank and there are no subsequent non-
  306.     blanks on the line, then ^G or Del effects a line join with the next line.
  307.         ^T deletes right word.  That is it deletes the contiguous string of
  308.     'Alphas' to the right of the cursor position plus a contiguous string of
  309.     white spaces which may follow.  The command ^Q^T deletes a bit more,
  310.     namely to the end of the current line.
  311.         The command Alt_T initiates deletion until a designated character
  312.     is encountered.  The text 'Delete to character..press Esc to terminate'
  313.     will appear on the message line.  Press the character to which deletion is
  314.     desired, and a span of characters up to the first occurrence of the char-
  315.     acter pressed is hilited.  If another character is pressed, the hilited
  316.     string is extended until the first occurrence of that character is met.
  317.     The span of hilited characters can also be extended or shorten by the left
  318.     and right arrow key. This span can extend at most to the last character of
  319.     the line.  To accept the deletion of the hilited character string, press
  320.     Escape.  Very often it is desired to delete to the nth occurrence of a
  321.     certain letter. This is accomplished by pressing the same letter the
  322.     appropriate number of times followed by the Esc key.  To delete until end
  323.     of line, simply press Alt_T followed by the ENTER key. Ichi will hilite
  324.     characters until a ^M is encountered.  Most likely there is no ^M on the
  325.     line (unless a ^M was deliberately entered via the ^P option), so the rest
  326.     of the line is hilited for deletion.
  327.         ^Y deletes an entire line. ^Q^Y deletes even more, namely the entire
  328.     stream.  ^K^Y deletes any defined block of text as will be explained in
  329.     the following Ctrl_K paragraph.  Actually ^Y (and DelKey) is a versatile
  330.     command.  If the cursor line is within a marked block, ^Y (and DelKey) is
  331.     the same as ^K^Y, deleting the marked block.
  332.         Any deletions or changes to a line, can be undone by the ^Q^L command,
  333.     provided, that the cursor has not left the line in question.  As Ctrl_Y
  334.     deletes an entire line, Alt_Y inserts the deleted line above the current
  335.     cursor position.  Thus if you pressed ^Y, deleting a line by mistake, you
  336.     may recover by pressing Alt_Y.  ICHI saves the last 12 deleted lines in an
  337.     array.  The Alt_Y command recall these deleted lines in LIFO order and
  338.     inserts them just before the cursor line.  Alt_K is the undelete block
  339.     command.  If there were no blocks deleted, this command is ignored. Only
  340.     the latest two deleted blocks may be reclaimed. These are the only UNDO
  341.     features in ICHI with the exception of the ultimate UNDOer; namely, to exit
  342.     the editing session without saving the changes. By not saving the changes,
  343.     the original file is not written over, thereby remaining intact.
  344.  
  345. 2.5     Changing the case of a character. You can change the case of the
  346.     character under the cursor by pressing Alt_U to toggle the ChangeCaseMode
  347.     on and then use the left or right arrow to move away for it.  You will
  348.     witness a rapid sequence of case changes as long as the arrow key remains
  349.     depressed.  Only the left-right arrow keys will effect the case change,
  350.     not Ctrl_Left or Ctrl_Right, not the Up-Down keys, nor PgUp-PgDn, nor
  351.     Home-End, nor anyother cursor movement keys will bring about the case
  352.     change effect.  If you wish to capitalize the first letters of a sequence
  353.     of words, say, you may use a combination of these cursor movement commands
  354.     together with ChangeCaseON to bring about the desired results handily.
  355.         For some of the more advanced keyboards supported by more advanced
  356.     bios, case changing can be done by holding the shift key down while
  357.     pressing the left or right arrow keys.  By holding the shift key down
  358.     and pressing the up or down arrow, a whole line is changed to upper or
  359.     lowercase.  While you experiment with this feature, be reminded that you
  360.     can always restore the current line to its original form by ^Q^L.
  361.  
  362.                        ╔═════════════════════╗
  363.                        ║ The Ctrl_K Commands ║
  364.                        ╚═════════════════════╝
  365. 3.0     Exiting the editor. The command ^K^X indicates to ICHI that you wish
  366.     to terminate the editing session. ICHI will prompt you for a yes/no
  367.     response just in case something was amiss. An extra chance for you to
  368.     save the editing file, for example. On entry to ICHI the macro key F10
  369.     is defaulted to ^K^X.  Alt_X is the non-verbose version of editor exit.
  370.     Use it cautiously.
  371.  
  372. 3.1     Reading files.  To read a disk file into the current window, use
  373.     the ^K^R command. ICHI will prompt you for the filename. If the file
  374.     does exist, it will be inserted into the text stream after the cursor
  375.     line.  If the current filename indicated in the window status line
  376.     is not NONAME then the new filename will take effect. Otherwise, the
  377.     old filename is retained. On entry to ICHI the macro key F6 is defaulted
  378.     to ^K^R.
  379.  
  380. 3.2     Writing files.  ICHI has two commands which allows you to write
  381.     files to the disk. ^K^S will write to a file by the name of the
  382.     current filename indicated in the window status line, even if it is
  383.     NONAME.  The current text stream can be renamed, however,(use ^K^E) to
  384.     whatever name you wish. So you may want to exercise this option before
  385.     executing ^K^S(see next para). On program load, the macro key F9 is set
  386.     to ^K^S. Because writing or overwriting to disk is such an irrevocable
  387.     act, ICHI will cue you once for a confirmation. You will learn how to
  388.     circumvent this safety device when you get to the Macro redefinition
  389.     paragraph.
  390.  
  391.         A second way to write to disk is the ^K^W option. This option will
  392.     prompt you for a filename. After you have responded with a filename
  393.     ICHI will write the entire text stream to the disk ONLY if there is
  394.     currently no block defined in the text stream. If a block is defined,
  395.     then ICHI enters its SMART mode and writes only the defined block to
  396.     disk.  More, you may also use ^K^W to send the stream or block of text
  397.     to the file PRN which is the printer.
  398.  
  399. 3.3     Renaming text stream.   ICHI has the command ^K^E which allows
  400.     you to rename the current text stream. This does not change the name
  401.     of any file on disk. But if a filesave command is executed after the
  402.     rename process, a file of the new name will be created or if a file by
  403.     that new name already exist, it will be overwritten. If the current window
  404.     is linked to other windows when the file is renamed, the current window
  405.     will become unlinked from its former links.  The renamed stream may be a
  406.     complete pathname such as 'A:\PASCAL\NEWNAME.INC'. In this event, when the
  407.     file save command is subsequently invoked, a file by the name, NEWNAME.INC,
  408.     will be saved in the directory PASCAL on the drive A. If the directory
  409.     PASCAL does not exist or drive A is not active, the program will summarily
  410.     fail without honor, losing all your entire editing session.  Be careful!
  411.  
  412. 3.4     Defining blocks. The pair of commands ^K^B and ^K^K are used to
  413.     define a block of text. The cursor is placed anywhere on the line
  414.     where the block begins and the ^K^B commmand is executed. Then the
  415.     cursor is moved to the line where the block ends and ^K^K is executed.
  416.     When this definition is complete, the text within the block will be
  417.     dimmed. Now, you can do a whole host of block operation with the block
  418.     of text so designated.
  419.         The command pair ^K^B,^K^K are used so frequently that we assigned
  420.     the F7 and F8 to represent them.
  421.  
  422. 3.5     Unblocking.  The command ^K^H cancels the blocking definition.
  423.     The text display attributes will return to normal. Don't confuse this
  424.     with WordStar's original meaning of block hiding which merely changes
  425.     the appearance of the screen. ICHI does offer the block hide option,
  426.     as we shall see, but not IN THIS SENSE.  However, we will use the same
  427.     key press sequence for the unblocking command.
  428.  
  429. 3.6     Block moving.  A block of text may be moved from one location to
  430.     another. The command ^K^V moves the block text from its old location
  431.     to the location immediately following the line the cursor is on. If
  432.     the cursor is within the block when the ^K^V command is executed, the
  433.     block move request is not valid and ICHI will let you hear about it.
  434.     Block moving from any of six windows to the current window is permitted.
  435.  
  436. 3.7     Block copying. The command ^K^C copies the text immediately after
  437.     the line following the line the cursor is on. The blocked text will
  438.     remain dim and blocked, so you may make as many copy of the block to
  439.     wherever you want. Copying blocks from one window to another is also
  440.     permitted.
  441.  
  442. 3.8     Block shifting. A defined textblock may be shifted left or right.
  443.     After pressing ^K and a left or right arrow the defined block is moved
  444.     one space in that direction. Subsequent presses of the left or right
  445.     arrow key will move the block another space accordingly. This continues
  446.     until the ESC or any other key is pressed to exit the block shift mode.
  447.     (If the cursor line is within the defined block, the ^K key need not
  448.     precede the left or right arrow). This is an invaluable tool for editing
  449.     structured source codes where blocks are judiciously indented to make
  450.     its logic stand out.
  451.  
  452. 3.9     Block delete and undelete.  The blocked text may be deleted with the
  453.     command ^K^Y. (if the cursor lies within the highlighted block, a simple
  454.     ^Y or DelKey suffices to delete the block). Deleting a block of text from
  455.     another window is permitted, but there is little practical use for this.
  456.         The Alt_K command inserts the last block deleted immediately following
  457.     the cursor line. ICHI permits undoing the latest four block deletions.
  458.  
  459. 3.10    Block hiding (collapsing). The command ^K^P will remove the text block
  460.     from the display. In its place will be a single message line saying how
  461.     many lines not shown and the block number with which the text is associated.
  462.     ICHI has a limit of four blocks which can be hidden.
  463.         Block hiding or block exclusion or block cacheing are different terms
  464.     pertaining to this option. It is a very powerful code maintenance feature
  465.     which is also offer on the IBM mainframe SPF editor. When you want to
  466.     concentrate on two segments of a text stream separated by a block of
  467.     non-relevant text, simply block-hide it and the two pertinent portions of
  468.     the text stream will appear together so that proper attention can be
  469.     addressed more effectively.
  470.         The command ^P is normally a leadin character for ctrl charcter entry.
  471.     However, if a block is marked and the cursor is within the marked block,
  472.     ^P will be interpreted as ^K^P, so that in this common situation, a sim-
  473.     ple ^P suffices to hide a block.
  474.  
  475. 3.11    Block recovery (uncollapse). The block-hidden text can be re-expanded
  476.     in place by the ^K^O command.  ICHI will ask you for the block number to
  477.     recover, even if there is only one hidden block.  However, if the cursor is
  478.     on a block-hidden message line when the ^K^O (or simply, ^O) command is
  479.     issued, ICHI will quietly redisplay the hidden text associated with the
  480.     message line rather than querying for a block number.
  481.  
  482. 3.12    In general, when the cursor is on the block hidden message line, most
  483.     key entries that are not reasonable are suspended.  For example, deleting
  484.     a character or deleting a line, or cursor movement left or right will
  485.     simply be ignored.
  486.  
  487. 3.13    Macro key definition. The eight keys, F5..F12, are user defineable.
  488.     On program load, (if not overridden by a user specified macro file,
  489.     ICHI.MAC), they are defined as ^Q^Y, ^K^R, ^K^B, ^K^K, ^K^S, ^K^X,
  490.     ^Q^F, and ^Q^A  which are window text delete, file read, blockbegin,
  491.     blockend, file save, editor exit, search, search&replace respectively.
  492.     The user may redefine them, using conventional editing keys, by the
  493.     ^K^A command. ICHI will ask for the macro key to be redefined. Then
  494.     ICHI will display the current definition of the key and permit the
  495.     user to modify this definition.  When the user signals completion by
  496.     pressing the Enter key, ICHI will accept the new macro value.
  497.         To enter a Ctrl character, type the Ctrl character directly. Of
  498.     course, certain Ctrl characters cannot be entered, such as ^H and ^U,
  499.     for very obvious reasons. Also ^M cannot be entered directly. Indeed, it
  500.     is often that we really want to enter a carriage return, so we decided to
  501.     confiscate tilde, '~', for that purpose. For example, programming in
  502.     Pascal, you might want to define F5 as 'begin~^I'. You accomplish this by
  503.     backspacing twice to delete ^Q^Y (yes, ICHI knows that there is only two
  504.     characters on the prompt line, although she displays this information to
  505.     you using four characters.), then you type the six characters from 'b' to
  506.     '~' and press the tab key followed by the Enter key.
  507.         You can view the macro definition by using the ^K^A command too.
  508.     When ICHI displays the macro definition for you to modify, simply accept
  509.     it the way it is by pressing ENTER.
  510.         The file DEFICHI.MAC created using the ICHI editor is an example of how
  511.     to specify the values of the F5..F10 macro keys. Trailing spaces are not
  512.     allowed, but you may circumvent that limitation by an additional space
  513.     followed by a Ctrl_H (entered by ^P^H). As described above, to enter a
  514.     carriage return, enter the preempted tilde. If your file ICHI.MAC has
  515.     only n lines (n < 6) then only the first n macros are user specified. The
  516.     others will maintain their default values.
  517.         You may have pet editor features that are not directly implemented in
  518.     the ICHI editor. It is very likely some of them can be realized by proper
  519.     usage of macros.
  520.  
  521. 3.13    Exit to Dos without leaving ICHI. If your version of Dos is 3.1 or
  522.     above, and the root directory of the current drive has a compatible
  523.     copy of Command.Com, then you may exit to Dos using the ^K^D command.
  524.     A message will inform you that you have shelled to Dos. You must type
  525.     'Exit' to exit Dos to return to ICHI. This is a highly useful feature in
  526.     that it permits you to go to Dos, compile your source code and test it
  527.     out without leaving a possibly incomplete editing session. Alt_Z is a
  528.     second way to 'goto' Dos. (if your machine recognizes F12, you got a
  529.     third way).
  530.  
  531.  
  532.               ╔════════════════════════════════════╗
  533.               ║ Ctrl_O commands (Windows and Tabs) ║
  534.               ╚════════════════════════════════════╝
  535.  
  536. 4.1     Window creation. The ^O group manages the window options. To create
  537.     another window, type ^O^O or Alt_O. ICHI will immediately allocate half
  538.     of the screen as your new window.  After the new window is create, ICHI
  539.     switches you directly to it, as can be ascertained by the location of
  540.     the cursor.  ICHI permits only one additional window to be created.
  541.  
  542. 4.2     Window deletion.  Window deletion occurs when ^O^O or Alt_O is pressed.
  543.     This is exactly the same command for window creation!  Because ICHI only
  544.     permits a single additional window to be added, deletion and creation are
  545.     mutually exclusive events.  Thus there can be no ambiguity as to which
  546.     event will occur.  The window that is deleted is always the active window,
  547.     i.e. the one in which the cursor is cursoring. In addition to the effect
  548.     of deletion of all Window text, the window itself also disappear, and the
  549.     remaining window will immediately claim the additional display space.
  550.         If you did not save your text before deleting the window, the fruit of
  551.     your fine labor is lost , but if the window was linked to another then the
  552.     text stream will remain intact.
  553.         There must always be one active window. So the only time you can delete
  554.     a window is when you have a second actively displayed window. The phantom
  555.     windows are not deletable.
  556.  
  557. 4.3     Window switching. The keystrokes ^OS and Alt_S will switch from one
  558.     active window to the other.  Each window has its own top line, current
  559.     line, and cursor position which are preserved during window switches.
  560.     You can switch back and forth and verify this.  When you only have two
  561.     windows and you indicate you wish to switch, ICHI doesn't ask you which
  562.     window you want to switch to.  Elimination of undesired dialog is typical
  563.     of efficient and friendly features that ICHI editor strives for.
  564.  
  565. 4.4     Window size adjustments. To adjust the window size, type ^O. Now if
  566.     you press the up arrow, the lower window is enlarged by one line as the
  567.     upper window is shrunk by the same amount. Keep pressing the up/down
  568.     arrow until you are satisfied with the window size adjustment, then
  569.     press escape and you will be back in text mode. You can adjust the
  570.     window size to maximum or minimum by the PgUp or PgDn key instead of
  571.     slow way of the Up/Down arrow keys. Maximum size is 21 lines (assuming
  572.     you are editing in the normal 80x25 screen format) as the smaller window
  573.     must retain one line - a design decision.
  574.  
  575. 4.5     Window exchange. This can only happen between a phantom window
  576.     and the active display window. There are four phantom windows, each
  577.     initially set up with a NONAME file and a text stream of 16 characters
  578.     (all blanks). When you exchange your current window (the one with the
  579.     blinking cursor). You effectively have another clean window or another
  580.     file to work with. To exchange with phantom window one, press the F1 key.
  581.     Similarly, F2 thru F4 correspond to the other phantom windows.
  582.  
  583. 4.6     Window linkage. Two display windows may be linked so that they share
  584.     the same text stream. Once they are linked, they may be scrolled indep-
  585.     endently. (^O1 or ^O2 causes the linkage to occur). Any changes in
  586.     one window will show up in the other. If one of these windows are
  587.     exchanged with a phantom window, then the other display window is linked
  588.     to the exchanged-to phantom window. Any changes to the other display
  589.     window will also occur in the phantom. And if you now link your current
  590.     NONAME window with the non-blank display window, you have three windows
  591.     all linked together.
  592.         When two windows, each with non-empty text streams are linked with
  593.     each other, one text stream will be appended to the other. The order in
  594.     which the concatenation occurs will depend on which window is linked to
  595.     which. The common text stream will take the name of the first window
  596.     text stream to which the second window was linked.
  597.         The usefulness of window linkage cannot be overemphasized. For
  598.     example, you might be working on a large code file in which you are
  599.     interested in only three sections. Link three windows together and
  600.     scroll to these area of interest independently. At the tap of an F-key
  601.     you are instantly at the portion of code you want. This is much better
  602.     than scrolling and/or searching and finding.
  603.  
  604. 4.7     Window Text Deletion. When you finish editing one particular text
  605.     stream, you may save the stream to disk (^K^S) and clear the window
  606.     text stream (^Q^Y) in preparation for further editing activities. By
  607.     pressing ^Q^Y you essentially 'Quickly' do many ^Y's, deleting every
  608.     line of the stream, and thereby returning data space to the Operating
  609.     System. The window will become blank and the NONAME filename will
  610.     appear on the status line. If you did not save your text, you will
  611.     have lost the fruit of all your effort. In anticipation of such human
  612.     fallacy, ICHI will ask if you really want to delete the entire text
  613.     stream, giving you one last chance to avoid a crucial mistake. If this
  614.     safeguard is a nuisance, you may use a macro to represent ^Q^Y followed
  615.     by the yes response. (We've discussed macros in paragraph 3.11)
  616.         Incidently, ICHI doesn't always return data space to the System on
  617.     clearing the window. It is gifted enough to recognize the situation when
  618.     this should not be done. That is, when there are other windows linked
  619.     to the current window.
  620.  
  621. 4.8     Detab.  Text created by ICHI are without tabs. When the tab key is
  622.     pressed, the proper count of spaces are entered into the text stream.
  623.     When text are created by MicroSoft C Compiler, or Masm, or EDLIN, the
  624.     embedded tabs will show up as extended ascii symbols on the screen.
  625.     When the command ^O^D is executed, ICHI expands the tabs of the text
  626.     on the spot, using a tab setting of 8 spaces. Detabbing starts from the
  627.     cursor position forward.
  628.  
  629. 4.9     Entab.  ICHI has an Entab option which replaces spaces with tabs.
  630.     When a text is in the current window, the ^O^B command replaces all
  631.     appropriate spaces with tabs at tab spacing = 8.  The entabbed stream
  632.     will normally occupy less space when saved.
  633.  
  634. 4.10    Set tab.   Set tab applies to the particular editing session. On
  635.     initial program load, the default tab setting is 4 spaces. This setting
  636.     may be changed by the ^O^T option.  When ^O^T is entered, ICHI will ask
  637.     for the tab spacing.  If the response is, say 8, then the tab columns
  638.     will be multiples of 8 plus 1.
  639.  
  640. 4.11    AutoIndentation.  On entry to ICHI, autoindent is the default mode.
  641.     The letters 'AI' on the status line affirms the default autoindent mode.
  642.     When this mode is on, the next new line starts at the same column as the
  643.     previous line. This is convenient for programming structuredly where
  644.     blocks of code are frequently indented to the same depth. ^O^I is a
  645.     toggle that switches the AutoIndent mode on/off.
  646.  
  647.  
  648.         ╔══════════════════════════════════════════════════════════════╗
  649.         ║ Ctrl_Q commands (cursoring, scrolls, find/replace, restore). ║
  650.         ╚══════════════════════════════════════════════════════════════╝
  651.  
  652. 5.1     Move cursor quickly on the screen. ^Q^E and ^Q^X  places the cursor
  653.     quickly on the top and bottom line respectively. Moving quickly to the
  654.     beginning and end of line is effected by ^Q^S and ^Q^D.
  655.         The Home/End and PgUp/PgDn keys in their various modes can also bring
  656.     about these top/bottom line and begin/end line cursor movements.
  657.  
  658. 5.2     Scroll screen quickly. ^Q^R scrolls the screen to the top of the
  659.     file, while ^Q^C scroll to the bottome of the file.
  660.         The screen may also be scrolled so that the cursor line is at the top,
  661.     middle, or bottom of the screen.  The commands Alt_E, _D, _C will cause
  662.     these effects to occur, as described in paragraph 2.3.
  663.  
  664. 5.3     Quick deletion.  ^Q^Y deletes all text associated with the current
  665.     window. So it has the result of a lot of ^Y's.  Because this command has
  666.     a lasting and irreversible effect, a safeguard is introduced.  When ^Q^Y
  667.     is executed, ICHI prompts the user for a yes/no response to continue.
  668.     The macro key F5 is defined as ^Q^Y.  When the user becomes comfortable
  669.     with the editor and acquires the derring-do, he may modify this macro to
  670.     be ^Q^Yy, thus by-passing the 'bothersome' safeguard, shouldering the
  671.     responsibility for all calamity that may befall.
  672.  
  673. 5.4     Search and Replace (or Find and Alter).  ^Q^F will initiate the find
  674.     text activity. The user will be prompted for the text pattern to find.
  675.     When ICHI finds the pattern it will move the cursor to the first match in
  676.     the text stream. The search may be repeated by just typing a ^L.
  677.         Find text and Alter is initiated by the command ^Q^A. The user will
  678.     be prompted for both a search string and a replacement string. When ICHI
  679.     finds the pattern, it will move the cursor to the matched string and cues
  680.     the user for a yes/no answer to replace the found pattern. This activity
  681.     can also be repeated by simply entering ^L.
  682.         When the user is prompted for a search string, he may simply type in
  683.     the pattern and ICHI will accept the pattern exactly as entered.  If he
  684.     types in the search pattern followed by the option strings /i, /w, or /wi.
  685.     ICHI will ignore case, consider whole words only, or both in its search.
  686.         Inherently, any global search and replace is a dangerous option.  One
  687.     should almost always use the ^L to repeat a search and replace.  The only
  688.     global search and replacement that ICHI condescended to implement is the
  689.     global replacement confined to a defined block.  Therefore, if a block is
  690.     specified, then the search and replace will be global.  The block will re-
  691.     mained defined after the replacements and the cursor is placed on the last
  692.     line of the block.  A count of the total replacements will be displayed on
  693.     the message line.  Use this option with care.
  694.         Similar to the global search and replace a blocked global find is also
  695.     available.  The defined block will be searched for the pattern, and the
  696.     total count of pattern occurrences will be noted on the message line.  At
  697.     the end of the search, the cursor is at the top of the defined block.
  698.  
  699. 5.5     Line restoration. ^Q^L will restore the current line to the way
  700.     it was when the cursor was moved there. So, if you made some changes
  701.     and leave the line, those changes are no longer restorable by ^Q^L.
  702.  
  703.                            ╔══════════════╗
  704.                            ║ Special Keys ║
  705.                            ╚══════════════╝
  706. 6.0     Special keys are the ten F-keys and the Home End PgUp PgDn and the
  707.     four arrow keys on the numeric keypad. Each key by itself or in con-
  708.     junction with the Scroll Lock or Caps Lock plays an individual role in
  709.     the editing scenario. In some cases, its meaning depends on whether the
  710.     cursor is within a marked block or in the message line of a compressed
  711.     block.  Therefore, be on the lookout for multiple effects of these keys
  712.     as they are discribed in the following sections.
  713.  
  714. 6.1     The F1 key switches the current window with phantom window #1.
  715.     Similarly, F2 thru F4 switches current window with windows #2 thru #4.
  716.     When the phantom window is switched with the current window, the display
  717.     will be exactly as it was when last switched, if at all possible. The
  718.     stream will be restored with the same Topline and the cursor will be
  719.     where it was last. The case where it is not possible occurs when the
  720.     window sizes have been altered or when the stream is linked to another
  721.     window and some change has taken place.
  722.  
  723. 6.2     The F5 thru F12 keys are user redefinable macro keys. On program load,
  724.     these macros are set as follows:
  725.  
  726.                 F5 = ^Q^Y   (delete stream from current window)
  727.                 F6 = ^K^R   (read a text file)
  728.                 F7 = ^K^B   (mark beginning of block)
  729.                 F8 = ^K^K   (mark end of block)
  730.                 F9 = ^K^S   (save current text stream)
  731.                 F10 = ^K^X  (quit editing session)
  732.                 F11 = ^Q^F  (search for string)
  733.                 F12 = ^Q^A  (search and replace string)
  734.  
  735.         The user may initiate redefinition of these keys by entering ^K^A.
  736.     The current definition of the selected key will be shown on the message
  737.     line.  Modify the current definition, using normal editing methods, then
  738.     press <Enter> when finish. Control keys are entered as you would normally
  739.     enter a control character, not as I did on the six lines previous to this
  740.     line.  A carriage return must be entered as '~'.
  741.  
  742. 6.3     The End key moves the cursor to the end of the current line, if the
  743.     cursor is not already there.  If it is already at the end of line, then
  744.     the cursor is moved to the end of line at the bottom of the screen. Again,
  745.     if it is already there, the cursor is moved to the end of line at the
  746.     bottom of the stream.  Similarly, the Home key causes cursor movement in
  747.     opposite direction in a analogous manner contingent on the current cursor
  748.     position. Therefore, Home Home Home will always take you to the start of
  749.     file and End End End will always locate the end of file.  Ctrl_Home moves
  750.     the cursor half way towards the top of the window from the cursor's present
  751.     position.  Similarly for Ctrl_End. Selective uses of these two keys and
  752.     the Ctrl key prefix will move the cursor very efficiently to the line of
  753.     interest.
  754.  
  755. 6.4     The PgUp key moves the cursor to the top line of the window, if it is
  756.     not already there.  If it is already there, a full screen length of text
  757.     is scrolled downward.  Similarly, the PgDown key performs the service in
  758.     the other direction.
  759.         When the PgUp/PgDn key is accompanied by the Ctrl key, the cursor line
  760.     will scroll to the top/bottom of the window. These are redundant to the
  761.     Alt_E, Alt_C commands but are useful because the Ctrl Home/End, Up/Down,
  762.     Left/Right, PgUp/PgDn are located close together and as a group, they
  763.     constitute a highly effective line scrolling and cursor movement tool.
  764.         If split screen is in effect, then the PgUp/PgDn keys, preceded by ^O,
  765.     maximizes one of the two windows while minimizing the other.
  766.  
  767. 6.5     The Up/Down arrows move the cursor up or down one line. If the
  768.     cursor is on the top line, then Up_Arr scrolls the window down one line
  769.     and moves the cursor to the revealed line. Similar result occurs when
  770.     the cursor is at the bottom line of the window.
  771.         Word Up/Down.  As Ctrl Lf/Rt giving us word Left/Right, Ctrl Up/Dn
  772.     gives us word Up/Down. That is, the cursor will cursor upward/downward
  773.     in the same column until a nonblank character is encountered.  This is
  774.     a very powerful feature, allowing you to identify blocks of logical codes
  775.     quickly, providing that you are dealing with codes that are written in
  776.     some structured fashion using clearly thought out indentations.
  777.         If ScrollLockOn then Up/Dn will scroll the window up/down one line.
  778.         If split screen is in effect, then the Up/Dn arrow, preceded by the ^O,
  779.     alters the sizes of the windows by moving the top line of the lower window
  780.     accordingly.
  781.         If the shift key is depressed, the Up/Dn key cause a line of text to
  782.     change entirely to upper/lower case. (Supported enhanced keyboards only)
  783.  
  784. 6.6     The INTELLIGENT left and right arrows keys.  Here's what they do.
  785.  
  786.         IF a block is marked and the cursor is within the block, then
  787.             the left/right arrow shifts the marked block accordingly.
  788.         ELSE, if scrollLock is ON then
  789.             the left/right arrow scrolls the window accordingly.
  790.         ELSE, if (ChangeCaseMode is toggled On by Alt_U) or
  791.                             (the shift key is depressed) then
  792.             the left/right arrow performs a case change moving left/right.
  793.         ELSE, it simply moves the cursor left/right.
  794.  
  795.         If you have an enhanced keyboard and your system rom supports it,
  796.     you have the additional keys F11, F12, Ctrl-Up/Dn_arrows and shifted
  797.     Lft/Rt_arrows.  In this event, ICHI will allow you to change cases by
  798.     merely pressing shift left or shift right instead of the inconvenient
  799.     method of toggling ChangeCaseMode by means of Alt_U.
  800.  
  801. 6.7 The following Alt keys are defined:
  802.         Alt_E makes the current line the top line.
  803.         Alt_D makes the current line the middle line.
  804.         Alt_C makes the current line the bottom line.
  805.         Alt_R moves the current line half the distance to the top.
  806.         Alt_V moves the current line half the distance to the bottom.
  807.     If you look at the positions of this group of five keys on the keyboard,
  808.     you will readily deduce the logic employed for these designations.
  809.  
  810.         Alt_A pops the ASCII character code table.
  811.         Alt_B pops the BOX drawing characters onto the screen.
  812.         Alt_H pops the help menu onto the screen.
  813.     These are the only three ICHI popdown helpful screens.
  814.  
  815.         Alt_F initiates the go-to-char option.
  816.         Alt_G initiates the relative/absolute goto line number option.
  817.         Alt_K undeletes deleted blocks LIFO like for at most 4 blocks.
  818.         Alt_O either create a 2nd window or delete the active window.
  819.         Alt_S switches active window if another window exist.
  820.         Alt_T initiates delete to a designated character
  821.         Alt_U toggles the ChangeCaseMode on/off.
  822.         Alt_X nonverbosely abandons all files and terminates ICHI session.
  823.         Alt_Y undeletes deleted lines in a LIFO manner 12 deep.
  824.         Alt_Z temporarily suspends the editor and goes to DOS.
  825.  
  826.  
  827. On Window Linkage:
  828. ══════════════════
  829.     ICHI permits two display windows and four phantom windows. Any subset
  830. of these six window may be linked together.  By this we mean a file may be
  831. shared between windows.  Their text stream will be known by the same name.
  832. Any changes to the file from the current display window will occur in its
  833. linked components if its reasonable that that should happen.
  834.     Specifically, global effect takes place for the following editing
  835. operations: Blockmove(^K^V), Blockcopy(^K^C), Blockhide(^K^P), Blockrecov-
  836. ery(^K^O), Blockshift(^K->/<-), all text deletions and entries, and file
  837. reading(^K^R).
  838.     The following three operations will have only local effects on linked
  839. windows. (1) Window deletion(^O^Y). When one of the two displayed window
  840. is deleted, the display area is recovered and donated to the other window.
  841. The storage occupied by its text stream will be reclaimed only if the
  842. deleted window is not linked to someother. (2) Stream deletion(^Q^Y).
  843. When the text stream is deleted from a window, the stream name will revert
  844. to NONAME. If the current window is not linked to someother, then and only
  845. then, the storage occupied by the stream will be restored to the system.
  846. (3) Scrolling and cursor movement are also local to the active window only.
  847.  
  848. Well Located Principle:
  849. ═══════════════════════
  850.     The command ^K^Y deletes a marked block of text.  However, if the cursor
  851. is located within the marked block, a simple ^Y or Del will suffice.  In the
  852. same vein of logic, ^P alone will hide a block and simple Lf/Rt will shift a
  853. block if the cursor lies within the marked block.  Also if the cursor is on
  854. the message line of the associated hidden block, block recovery will be less
  855. verbose; furthermore, a simple ^O will be adequate rather than the otherwise
  856. complete command ^K^O accompanied by a stream of verbosity.
  857.     Rules are constrained or liberalized according to the situation.  For
  858. example, if the cursor is within the marked block, blockmove will be denied.
  859. In general, block copy will be denied too, unless the cursor is also on the
  860. line of the marked block.  If the cursor is on the message line of a
  861. collapsed block, character insertion, deletion, and a whole host of other
  862. illogically actions are summarily forbidden.
  863.     Such is the philosophic frame of mind that permeates the development
  864. of this program.