home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / editor / ae / ae.txt < prev    next >
Text File  |  1994-01-30  |  32KB  |  851 lines

  1. Andys Editor Help-file
  2.  
  3. /*...smove to this line\44\ press escape\44\ select \39\fold\39\\44\ select \39\in\39\:0:*/
  4. To navigate a folded file use the arrows/keypad as normal but also use fold
  5. 'in' and fold 'out' primitives to enter and leave folds. These are accessible
  6. thus :-
  7.  
  8.     Fold in  - press escape, select 'fold', select 'in'.
  9.            or press F3 (if configuration is unaltered).
  10.     Fold out - press escape, select 'fold', select 'out'.
  11.            or press F4 (if configuration is unaltered).
  12.  
  13. So press escape, select 'fold', select 'out' to return to the top level fold.
  14. /*...e*/
  15. /*...sintroduction:0:*/
  16. Welcome to Andys Editor. This editor was designed as a language configurable
  17. folding source code editor. This editor provides these features :-
  18.  
  19.     Folding. The ability to group lines into a larger 'meta-line'.
  20.     Block operations.
  21.     Yank and put model for line copying etc.
  22.     Deleted item stack to allow multiple undeletes.
  23.     Extended regular expression searching.
  24.     Multiple buffers at any one time.
  25.     Portability across many machines.
  26.     Bracket matching.
  27.     User configurable keyboard binding.
  28.     Shelling of nested processes (and filtering of folds through commands).
  29.     The editor is relatively small for what it does.
  30.  
  31. This editor is a folding editor. This is a highly useful feature. Once you have
  32. got used to the folding paradigm, you will not want to use a flat editor again!
  33. /*...e*/
  34. /*...swhat is a folding editor\63\:0:*/
  35. Folding is an idea borrowed from the language occam by INMOS. A fold is a group
  36. of lines that may be considered a unit and described by a single line.
  37.  
  38. Eg: Consider the flat piece of code :-
  39.  
  40.     while not eof(f) do
  41.       begin
  42.         read(f, c);
  43.         write(c)
  44.       end
  45.  
  46. This could be folded to give :-
  47.  
  48.     while not eof(f) do
  49. /*...secho out another character from the file:10:*/
  50. begin
  51.   read(f, c);
  52.   write(c)
  53. end
  54. /*...e*/
  55.  
  56. The ... line hides away the details of whats going on. Obviously it makes more
  57. sense to fold larger and more complicated peices of code away. Its a bit like
  58. inline subroutines. A particularly nice way to fold Pascal programs looks like
  59. this :-
  60.  
  61.     program fred(input, output);
  62.  
  63.       {highly trivial example of folding}
  64.  
  65.     var
  66.       i: integer;
  67.  
  68. /*...sinitialise:10:*/
  69. procedure initialise;
  70.  
  71. /*...ssign_on:12:*/
  72. procedure sign_on;
  73.  
  74. begin
  75.   writeln('FRED version 1.0')
  76. end {sign_on};
  77. /*...e*/
  78.  
  79. begin
  80.   sign_on;
  81.   i := 1
  82. end {initialise};
  83. /*...e*/
  84. /*...smain_body:10:*/
  85. procedure main_body;
  86.  
  87. begin
  88.   writeln('i is ',i:1)
  89. end {main_body};
  90. /*...e*/
  91.  
  92.     begin
  93.       initialise;
  94.       main_body
  95.     end.
  96.  
  97. As you can see, this style of folding allows you to rapidly find any given
  98. procedure and enables you to see the structure of the program as a whole. Also,
  99. you no longer need to page up miles to find the variables!
  100.  
  101. Folds can be open or closed. The ones shown already were closed, but if they
  102. are opened they look like this :-
  103.  
  104.     while not eof(f) do
  105. /*...Secho out another character from the file:10:*/
  106. begin
  107.   read(f, c);
  108.   write(c)
  109. end
  110. /*...e*/
  111.  
  112. This allows the user to see whats in them without actually entering them.
  113.  
  114. There is a second kind of fold, called a virtual fold which allows links to
  115. other files to be made. For example you might see :-
  116.  
  117.     program fred(input, output)
  118.     
  119.     {$I 'header.inc'}
  120. /*...vheader\46\inc:8:*/
  121.  
  122.     begin
  123.       etc.
  124.  
  125. If you use 'fold_in' on the virtual fold line, then the file is read and
  126. selected. I suggest you don't try it on the virtual fold above, since it is
  127. unlikely you have a file header.inc for AE to load!
  128.  
  129. If you later use 'fold_out' from within the top fold of header.inc file, then
  130. the file is optiobally written if modified, discarded, then the original buffer
  131. is selected. In this way many files may edited as if they were only one file.
  132.  
  133. Virtual folds may also be opened, in which case they look like this :-
  134.  
  135. /*...Vheader\46\inc:8:*/
  136.  
  137. You cannot see the contents of an open virtual fold, since they are in another
  138. file, and are not loaded until the virtual fold is entered.
  139.  
  140. The significance of opening virtual folds becomes apparent in searching, where
  141. it is possible to search just open virtual folds, and to skip closed ones,
  142. during a global search.
  143. /*...e*/
  144. /*...swhat is on the screen\63\:0:*/
  145. If you are in the editor now, looking at this fold you should see the following
  146. on the top 3 lines :-
  147.  
  148.     1) The name of this help file (probably c:ae.txt) at the top left.
  149.     2) The current folds tag just below that (whats on the screen?).
  150.     3) A blank line below that (where prompts and error messages appear).
  151.     4) The language name (probably top) for the current buffer.
  152.     5) The current line and column numbers at the top right.
  153.        The line number is the 'flat' line number (ie: over the whole file).
  154.     6) One or more of the words 'autoindent', 'overtype' and 'insert'.
  155.        These specify the current editing mode.
  156.     7) Either ^I or a number specifying either the number of spaces
  157.        per press of the tab key or that real chr$(9) tabs are in force.
  158.  
  159. Below that, you should see this text.
  160.  
  161. You will also see a line with a single ^ on it below this text. This marks the
  162. end of the current fold. Typing on it automatically inserts a new line. Any
  163. unused lines are marked with a ~ in UNIX vi(1) style.
  164. /*...e*/
  165. /*...scommand line and startup:0:*/
  166. When this editor loads it does the following :-
  167.  
  168. Processes the command line arguments :-
  169.  
  170.     ae -lrt {filename}
  171.  
  172.     -l        means load filename arguments into buffers
  173.     -r        restricted version (no shelling allowed)
  174.     -t        alternate terminal
  175.  
  176. Trys to initialise the screen driver. If -t is supplied an alternate screen
  177. mode is used. On DOS this forces 25 line mode, even if EGA/VGA is present.
  178.  
  179. Next a buffer is created with no name. A virtual fold line is created for each
  180. filename argument. On closedown the editor will not write this buffer, since it
  181. has no name.
  182.  
  183. Then the configuration file is executed, line by line, stopping if an error
  184. occurs. If an error occurs, the line number is given, and AE will continue
  185. when the user presses a key.
  186.  
  187. If the -l switch is given the editor attempts to create a buffer for each
  188. filename argument and then to load them.
  189.  
  190. If there is only one file, and the -l switch is not given, the file is read
  191. in anyway.
  192.  
  193. If there is only one file, it is selected.
  194.  
  195. Then the editor signs on with its version date.
  196. /*...e*/
  197. /*...seditor commands:0:*/
  198. This fold lists all the commands available in the editor to the user. These
  199. may be executed in 3 ways :-
  200.  
  201.     1) By pressing escape and selecting them from the menu system.
  202.        The main menu gives a list of sub-menus, grouped by function.
  203.        These sub-menus give command names, and prompt the user for
  204.        arguments.
  205.  
  206.     2) By pressing escape, selecting 'COMMAND' and typing them in.
  207.        The 'COMMAND' menu selection is special in that it does not give
  208.        a second level menu, but rather it prompts the user for a
  209.        command string to be executed.
  210.  
  211.     3) By using a key-binding that uses the required commands.
  212.        A key-binding is a connection between a key or a pair of keys and
  213.        a command string.
  214.  
  215. A command string is a list of command names followed by arguments.
  216.  
  217. /*...sarguments:0:*/
  218. Arguments may be supplied with the commands, or interactively.
  219.  
  220. Character arguments may be supplied as unsigned decimal ASCII codes,
  221. or as single quoted characters.
  222.  
  223. String arguments may be supplied quoted in "'s. Real quotes may be supplied
  224. by escaping them with \'s and real \'s may be supplied by quoting themseleves.
  225.  
  226. Numbers may be supplied as unsigned decimal numbers.
  227.  
  228. Yes/No responses may be supplied as 'yes' or 'no'.
  229.  
  230. 'When' responses (when to enter a fold during searching for example) may
  231. be supplied as 'always', 'if_open' or 'never'.
  232.  
  233. Buffer and language arguments may be supplied by stating their names in
  234. double quotes. Alternatively '.' may be supplied to indicate the current
  235. buffer or language of the current buffer.
  236.  
  237. With all the arguments specifying ? will cause the user to be prompted
  238. for the arguments value. This is usually via a menu.
  239.  
  240. Eg:    character_overtype 65        overtype the current character with A
  241.     character_type 'A'        type A
  242.     character_insert ?        insert a character (to be decided later)
  243.     line_goto 100            goto 'flat' line number 100
  244.     buffer_write . no        write the current buffer, no appending
  245.     line_insert "Hello \"Ace\""    insert Hello "Ace" as a new line
  246. /*...e*/
  247.  
  248. /*...scharacter:0:*/
  249. character_left            Move the cursor one character keft.
  250. character_right            Ditto - but right.
  251. character_insert c        Insert character and move right.
  252. character_overtype c        Overtype character over existing one
  253.                 or if at end of line then insert.
  254. character_type c        Either insert or overtype, depending on flag.
  255.                 None of the 3 character entering routines
  256.                 will do anything if supplied the NUL (ASCII 0)
  257.                 character since this is used internally within
  258.                 the program (written in "C").
  259. character_delete_left        Delete the character to the left of the cursor.
  260.                 If the character is no an end of line mark,
  261.                 the character is placed on the deleted stack,
  262.                 along with a flag to say that if it is
  263.                 undeleted then the cursor should move one
  264.                 right afterwards.
  265. character_delete_right        Delete the character to the right of the
  266.                 cursor. If it is not an end of line mark, it
  267.                 is placed on the deleted item stack along
  268.                 with a flag to say that if it is undeleted,
  269.                 simply insert it at the cursor position and do
  270.                 not move the cursor.
  271. character_delete_eol        Delete to end of line. Store the end of the
  272.                 line on the deleted stack.
  273. character_tab            Inserts or overtypes as with either a tab
  274.                 character (^I) or as many spaces as are
  275.                 necessary to pad to the next tab stop.
  276.  
  277. eg:
  278.  
  279. character_type 'A'
  280. character_delete_right
  281. /*...e*/
  282. /*...sstring:0:*/
  283. string_insert s            Insert a string (repeatedly character_insert's).
  284. string_overtype s        Overtype a string (repeatedly
  285.                 character_overtype's).
  286. string_type s            Type a string (repeatedly character_type's).
  287.  
  288. eg:
  289.  
  290. string_insert "Hello World"
  291. /*...e*/
  292. /*...sword:0:*/
  293. word_left            Move left by a word (scope is current fold).
  294. word_right            Ditto - but right.
  295. /*...e*/
  296. /*...sline:0:*/
  297. line_insert string        Insert a new line, text of which is string.
  298. line_insert... string open indent
  299.                 Insert a fold line.
  300. line_insert::: string open indent
  301.                 Insert a virtual fold line.
  302. line_delete            Delete current line (if not last line).
  303.                 Line is put onto deleted line stack.
  304. line_yank            Copy current line and put on stack.
  305. line_up                Move to the previous line in current fold.
  306. line_down            Ditto - but next.
  307. line_start            Move to the start of the line.
  308. line_end            Ditto - but end.
  309. line_goto            Goto a 'flat' line-number.
  310. line_split            Splits line at cursor and move to start of
  311.                 new line
  312.  
  313. eg:
  314.  
  315. line_insert... "tag" yes 0
  316. /*...e*/
  317. /*...spage:0:*/
  318. page_up                Scroll a page up.
  319. page_down            Ditto - but down.
  320. page_scroll_up            Scroll the visible area up a line.
  321. page_scroll_down        Ditto - but down.
  322. /*...e*/
  323. /*...ssearch:0:*/
  324. search_for pattern case_sens reg_exp ... ::: dir n confirm
  325.                 Search for a pattern, which may or may not be
  326.                 a regular expression, searching in either
  327.                 direction, n times, possibly confirming each's
  328.                 position.
  329.                 Can specify when to enter nested folds and
  330.                 virtual folds.
  331. search_replace pattern replacement case_sens reg_exp ... ::: dir n confirm
  332.                 Ditto - but replace occurences.
  333. search_again            Repeat last search or search and replace.
  334. search_bracket            If currently on a bracket character, find the
  335.                 matching bracket. Scope of search is limited to
  336.                 current fold.
  337.  
  338. eg:
  339.  
  340. search_for ".*\.c" yes yes if_open if_open yes 5 no
  341. /*...e*/
  342. /*...stag:0:*/
  343. tag_line            Place/remove a tag on current line.
  344.                 There is no limit on the number of tags that
  345.                 may be inserted into each buffer.
  346. tag_error            Examine current line after cursor and extract
  347.                 a filename and line-number if present. Then
  348.                 if we are editing such a file, place a tag in
  349.                 the file's buffer at the given line number.
  350.                 This is intended for use with the output of
  351.                 the UNIX/DOS make(1) utility.
  352. tag_goto dir            Move to the next or previous tag in the
  353.                 current buffer.
  354. /*...e*/
  355. /*...sfold:0:*/
  356. fold_start            Move to the first line in the current fold.
  357. fold_end            Ditto - but last.
  358. fold_open open            The cursor must be on a fold line.
  359.                 Make the fold either open or closed.
  360. fold_in                The cursor must be on a fold line.
  361.                 Enter the fold.
  362. fold_out            Leave the current fold and go to its parent.
  363. /*...e*/
  364. /*...sblock:0:*/
  365. block_mark_1            Place marker one at the current line.
  366. block_mark_2            Ditto - but marker two.
  367. block_unmark            Remove both markers.
  368. block_to_mark_1            Move the cursor to the line with the first
  369.                 marker. Do nothing if it is not set.
  370. block_to_mark_2            Ditto - but marker two.
  371. block_fold tag open indent    Create a fold and insert the marked area into
  372.                 it. If there is no marked area, simply create
  373.                 the fold.
  374. block_unfold            The cursor must be on a fold line.
  375.                 Unfold the fold and make the nested lines
  376.                 be marked.
  377. block_entab            For each line in the block, insert a tab at
  378.                 its start. Error if line would become too long.
  379. block_detab            For each line in block starting with a full tab
  380.                 remove the tab.
  381. block_read filename        Read filename into fold and mark as a block.
  382. block_write filename append    Write the marked block to a file, possibly
  383.                 appending to it.
  384. block_filter command        Write marked block to temporary file 1.
  385.                 Run the command with temporary file 1 as
  386.                 its standard input and temporary file 2 as
  387.                 its standard output. Delete marked block.
  388.                 Read in temporary file 2 as the new block.
  389.                 Important: fold information is also written out
  390.                 for any nested folds. Therefore, if you pass
  391.                 a fold through 'sort' the folding structure of
  392.                 the file would almost certainly be corrupted. #
  393.                 This takes a copy of the 'before' block on the
  394.                 deleted item stack.
  395. block_delete            Delete currently marked block. Put on deleted
  396.                 item stack. If this is subsequently undeleted,
  397.                 the resulting lines will be re-marked as a
  398.                 block.
  399. block_yank            Put a copy of the current block on the deleted
  400.                 item stack.
  401.  
  402. /*...sproblems with block_filter:0:*/
  403. # This is a problem caused by the way fold information is stored in the file.
  404.   eg:
  405.  
  406. The fold used as the argument    File before "sort"    File after "sort"
  407.  
  408. {{{ this fold            /*...sthis fold:0:*/    contents
  409.     contents        contents        /*...e*/
  410. }}}                /*...e*/        /*...sthis fold:0:*/
  411.  
  412. Note that the resulting file has its end reserved comment before its start!
  413. If you passed the above file through an "uppercaseifier" then you would
  414. find that the reserved comments would be "uppercaseified" as well. In the
  415. reserved comment ...s implies closed fold, ...S would imply open. Therfore
  416. such a command would, as a side effect, open all nested folds! Moral: only
  417. use block filter on text, unless you know the program knows about folding.
  418. /*...e*/
  419. /*...e*/
  420. /*...sbuffer:0:*/
  421. buffer_create filename read select
  422.                 Create a new buffer of name filename.
  423.                 If read requested, read it in too.
  424.                 If select requested, select the buffer too.
  425. buffer_delete filename        Delete the buffer and its contents.
  426.                 Do not delete the file.
  427. buffer_select filename        Select a buffer for editing.
  428. buffer_rename filename filename    Change the name of a buffer.
  429. buffer_read filename        Read in the file into its buffer.
  430. buffer_write filename append    Write the buffer to its file.
  431.  
  432. eg:
  433.  
  434. buffer_write . no
  435. /*...e*/
  436. /*...slanguage:0:*/
  437. language_create langname rc_st rc_end match auto tab seps
  438.                 Create a language which has reserved comments
  439.                 rc_st and rc_end, matches filenames with an
  440.                 extended regular expression, possibly
  441.                 has autoindent, and has a tab size of tab.
  442.                 The seps string determines what characters,
  443.                 apart from white space seperate words.
  444.                 as making up a word. eg: for "C" use "_" since
  445.                 identifiers may contains _'s.
  446. language_delete langname    Delete a language.
  447. language_select langname    Change the language of the current buffer.
  448. language_rename langname langname
  449.                 Change the name of a given language.
  450.  
  451. eg:
  452.  
  453. language_create "pascal" "{..." "}" ".*\.pas" yes 0 "_"
  454. /*...e*/
  455. /*...skey:0:*/
  456. key_prefix key_name        This is used to allow multiple key bindings.
  457.                 eg: to get wordstar like block bindings
  458.                     you should use key_prefix "^K".
  459. key_bind key_name(s) stuff_to_end_of_line
  460.                 Make key key_name(s) execute the commands on the
  461.                 rest of the line each time it is pressed.
  462.                 If the first key_name is a prefixed key then
  463.                 a second key name will be expected, to complete
  464.                 the binding.
  465.  
  466. eg:
  467.  
  468. key_bind "^B ^S" "buffer_select ?"
  469. /*...e*/
  470. /*...sother:0:*/
  471. other_visible            Toggle the white space visibility flag.
  472. other_insert            Toggle the insert/overtype flag.
  473. other_shell command        Execute subprocess command.
  474. other_redraw            Redraw the entire screen.
  475. other_exit confirm        Leave Andys Editor. You will be prompted
  476.                 about saving edited buffers.
  477. other_abort confirm        Leave Andys Editor. No prompts.
  478. other_undelete            Last deleted item is replaced at cursor
  479.                 position into the text.
  480. other_put            Last deleted item is copied from deleted item
  481.                 stack to text.
  482. other_squeeze            Discards deleted stack to free up memory.
  483. other_colours t f s mt mf ms    Set the colours used by the editor for
  484.                 the text, fold lines, status information and
  485.                 also their marked counterparts. These numeric
  486.                 values used for the arguments vary from
  487.                 machine to machine.
  488.  
  489. eg:
  490.  
  491. other_shell "ls -al"
  492. /*...e*/
  493. /*...e*/
  494. /*...sdefault key bindings:0:*/
  495. The configuration file is accessable from these virtual folds (provided you
  496. are currently in the right directory).
  497.  
  498. /*...vae\46\ini \45\ DOS\44\ OS\47\2 and Amiga versions:0:*/
  499. /*...v\46\aerc \45\ UNIX and XENIX versions:0:*/
  500.  
  501. Any line in these files starting with a ; is ignored by the editor. Any other
  502. line is executed as-is by the editor at load time only. AE makes no attempt to
  503. re-read this file after it has been edited. Any line in these files may be fed
  504. to AE directly by pressing escape and typing in the line as a command (except
  505. for comment lines).
  506. /*...e*/
  507. /*...smisc stuff:0:*/
  508. /*...sphilosophy and design aims:0:*/
  509. The design aims when writing this editor were as follows :-
  510.  
  511.     To design an editor for an experienced user. This editor is not overly
  512.     explanatory. This file is here for explanations!
  513.  
  514.     To design an editor specifically for program editing. Formatting and
  515.     word processing were not incorporated.
  516.  
  517.     To try to keep it as small as possible, without having to recourse to
  518.     assembler.
  519.  
  520.     To make the editor perform best with small, heavily folded files (so
  521.     that the current fold is always quite small) since most modern
  522.     programming languages support seperate compilation and include files.
  523.  
  524.     To support editing of flat files, though not necessarily as fast.
  525.  
  526.     To provide a minimal set of operations for everyday use. This is not an
  527.     all singing, all dancing, play the national anthem at load time, editor.
  528.  
  529.     To write it so it could be easily ported to other machines. This
  530.     includes making the configuration file ASCII so that it too can be
  531.     easliy modified for each new machine.
  532. /*...e*/
  533. /*...sadding to AE:0:*/
  534. Probably the easiest way of "adding" functionality to AE is to write a small
  535. filter program and to bind a key like so :-
  536.  
  537.     key_bind "^R" "b_filter \"reform -\""
  538.  
  539. The example uses a program reform to reformat a block. The program reform is
  540. simply a filter that reforms its standard input to its output. This paragraph
  541. itself was formatted using the very same key-binding.
  542.  
  543. Other filters could supply 'line-drawing-mode', 'white space stripping'.
  544.  
  545. Note that such filters could cause problems if you send folds through them.
  546. /*...e*/
  547. /*...smachines supported:0:*/
  548. At present there are versions for :-
  549.  
  550.     DOS on IBM-PC or hardware compatible.
  551.     OS/2 on any OS/2 machine.
  552.     Any generic UNIX machine (both Berkeley and SYS V).
  553.     SunOS UNIX.
  554.     Microsoft XENIX machines.
  555.     Commodore Amiga (with a bug at present). *
  556.  
  557. * Pending test compilation
  558.  
  559. The editor is written in portable "C" and may easily be ported to new machines,
  560. provided they have suitable screen and keyboard control.
  561.  
  562. The only things that change from version to version are available keys for
  563. binding, colours and filename conventions. In the case of filename conventions,
  564. to ensure portability of folded files, the filenames are converted to a
  565. suitable internal format for passing to the operating system.
  566.  
  567. Machine specifics :-
  568.  
  569.  
  570. DOS
  571.  
  572. Bindable keys are all special (non ASCII) keys on the keyboard except
  573. Ctrl-Break, Caps-Lock, Num-Lock, Scroll-Lock and Sys-Req. Filenames may be
  574. supplied in normal DOS notation but internally they are converted to lower
  575. case using forward slashes.
  576.  
  577. Colours are made up of a foreground colour, a background colour, a flash and a
  578. brightness value. Values are :-
  579.  
  580.     Black        0            Flashing    1
  581.     Blue        1            Static        0
  582.     Green        2
  583.     Cyan        3
  584.     Red        4
  585.     Magenta        5
  586.     Yellow        6            Extra bright    1
  587.     White        7            Low brightness    0
  588.  
  589. The complete colour is calculated as :-
  590.  
  591.     foreground_colour +
  592.     background_colour * 16 +
  593.     brightness * 8 +
  594.     flashing * 128
  595.  
  596. eg: bright yellow on red is 6 + (4 * 16) + (1 * 8) + (0 * 128)
  597.  
  598. The seasoned IBM-PC user will note that these are simply the screen colour
  599. attribute values. Also that on a black and white system, these colours will be
  600. completely different for the same values!
  601.  
  602.  
  603. OS/2
  604.  
  605. Keys as DOS, colours as DOS.
  606.  
  607.  
  608. UNIX
  609.  
  610. Bindable keys are limited to F1-F10 as available via their termcap(5) entries.
  611. The cursor pad should work provided your terminal is in the correct mode.
  612. Backslashes are automatically converted to slashes in filenames.
  613.  
  614. There are 4 'colour' settings available on a UNIX terminal. Some or all of them
  615. may be supported, depending on the terminal. They are :-
  616.  
  617.     Normal        0
  618.     Underline    1
  619.     Standout    2    -- this is usually invert or bold
  620.     Alternate    3    -- this could be an alternate character set
  621.  
  622. It is important the user be aware of potential problems operating AE over
  623. a network or a pad system. Note that ^Q and ^S are usually used for flow
  624. control, and typing these can hang a connection. Also note that AE needs to
  625. know accurately, what sort of terminal it is on. If the TERMCAP is not set
  626. properly then AE will either refuse to load, or will put junk on the screen.
  627.  
  628.  
  629. SunOS UNIX
  630.  
  631. As UNIX except that suntools(1) permitting, L1-L10 and R1-R15 are also
  632. bindable. Also note that the keys Left, Right, Up and Down no longer exist.
  633. You should use the relevant R keys. AE is not designed to be a full Sun
  634. Windows application. Judicious use of setkeys(1) is required to get access
  635. to the Sun Function Keys. When adding Andys Editor to the rootmenu then
  636. the following line should be used :-
  637.  
  638.     "Andys Editor"    shelltool -Wl "Andys Editor"    \
  639.                   -Wi                   \
  640.                   -WI /fullpath/ae.icon \
  641.                   -WL ""                \
  642.                   /fullpath/ae
  643.  
  644. 'fullpath' is the full path to the directory with AE stuff in it.
  645. 'ae.icon' is an icon generated by the Icon Editor for AE.
  646. The AE environment variable should be set :-
  647.  
  648.     setenv AE /fullpath
  649.  
  650. It may also be necessary to set up the screen support on the Sun :-
  651.  
  652.     set term=sun
  653.  
  654.  
  655. XENIX
  656.  
  657. All the Fn keys, Shift Fn keys, Ctrl Fn Keys, and Shift Ctrl keys. Alt key
  658. combinations are reserved for use by the XENIX multi-terminal system. The
  659. keypad is also accessible. Filenames as UNIX. Colours as UNIX.
  660.  
  661.  
  662. Amiga
  663.  
  664. Bindable keys are the Fn keys, shift Fn keys, Arrow keys and shift arrow keys
  665. and most of the Alt keys. For some unexplained reason Alt e to Alt h and Alt j
  666. to Alt k are unaccessable. The Amiga version contains the bug that when disk
  667. access is requested, a pop-up box may appear asking the user if he wishes to
  668. abort. Somehow Intuition thinks a break has been requested. The workaround is
  669. simply to click on continue. The cause is unknown - I 'borrowed' my terminal
  670. code from Emacs and I can only assume they have the same problem. Backslashes
  671. in filename are converted to slashes internally.
  672.  
  673. Colours on the Amiga are simply numbered from 0 to 3. They are whatever
  674. intuition currently has them set up as.
  675. /*...e*/
  676. /*...scopying this editor:0:*/
  677. Go to it!
  678.  
  679. This editor may be freely distributed provided no money changes hands, that the
  680. software remains unchanged and all the files are distributed.
  681.  
  682. The editor is supplied AS-IS, and is not guaranteed.
  683.  
  684. Help stamp out software hoarding - Share and enjoy!
  685. /*...e*/
  686. /*...sAE compared to FE:0:*/
  687. FE was the first language configurable folding editor. It was written as my
  688. third year project at Southampton University.
  689.  
  690. AE is written with the benefit of hindsight. As a result AE took much less time
  691. to write and has much cleaner logic than FE. AE is a complete rewrite of FE,
  692. only a few utility librarys are in common.
  693.  
  694. AE allows fold tags and virtual fold tags to be as long as normal lines, ie:
  695. 240 characters. FE restricted tags and virtual fold tags to 80 characters. This
  696. means that FE may truncate long tags generated by AE.
  697.  
  698. AE searches much faster than FE. It a recent test it was over twice as fast for
  699. a case-sensitive regular expression search!
  700.  
  701. AE's screen handler can delay update of the screen. This means that during a
  702. global search and replace, the screen is not redrawn at each match as it was in
  703. FE. This makes it a little faster too.
  704.  
  705. AE uses the yank-put paradigm for line/fold moving/copying.
  706.  
  707. AE has a set of block markers for each fold. In FE there are only 2 markers for
  708. each buffer. This allows you to mark areas in each fold.
  709.  
  710. AE is able to yank, put, delete and now undelete blocks and folds too. A
  711. deleted block or fold in FE is lost forever.
  712.  
  713. AE has a deleted item stack that is able to hold characters, lines and folds.
  714. In FE only lines and characters could be put on the stack.
  715.  
  716. AE does not use temporary files for operations such as block_fold. FE did and
  717. so could have been much slower.
  718.  
  719. AE has an ASCII configuration file. This makes for easy porting of setup from
  720. machine to machine. FE used a machine dependant binary file.
  721.  
  722. AE has bracket matching, FE does not. This is my concession to Lisp
  723. programmers!
  724.  
  725. The DOS and OS/2 versions of AE determines the drive of each file and so does
  726. not make mistakes with filepath inheritance for nested virtual folds like FE.
  727.  
  728. AE does not have the interactive key-binding layer. Instead the keys are
  729. configured in the ASCII configuration file.
  730.  
  731. AE does not have a flatten operation. A seperate utility, FLATTEN, can be
  732. used to do this.
  733. /*...e*/
  734. /*...srevision history:0:*/
  735. Summary of last few revisions :-
  736.  
  737.     15/1/89        Initial version (Alpha-Test).
  738.     29/1/89        Bugfixes for :-
  739.                 Position within a line.
  740.                 Filename language guessing.
  741.                 Block markers becoming invalid.
  742.                 Initial highlight on menu selection.
  743.             Addition of :-
  744.                 -l flag.
  745.                 (, ), [ and ] as a temporary measure.
  746.     17/2/89        Bugfixes for :-
  747.                 Filename display being scrolled too far left.
  748.                 f_filter command on DOS version (stack size).
  749.                 w_left and w_right over line boundarys.
  750.             Corrections to this file.
  751.     23/2/89        Bugfix for language delete.
  752.     27/2/89        Modifications to support compilation under Masscomp UNIX
  753.     8/3/89        Addition of :-
  754.                 b_ commands.
  755.                 cs_ commands.
  756.                 typeless undelete and put.
  757.             Removal of :-
  758.                 (, ), [ and ] removed.
  759.                 f_ commands superseded by b_ commands.
  760.             Made a better default configuration file.                
  761.     10/3/89        Bugfix for version 8/3/89. 8/3/89 can crash.
  762.     20/3/89        Bugfix for insert char when column > 128
  763.     29/3/89        Changes to IBM-PC terminal handler to :-
  764.                 Not require saving of screen as a prerequisite
  765.                 to initialising the screen.
  766.                 Force mode 3 if not already in it.
  767.                 Use 50 lines if VGA present.
  768.     2/4/89        Bugfixes for :-
  769.                 The way ae reads AE= environment variable.
  770.                 Bad redraw after failed shell command.
  771.                 ^C visible on screen in version 29/3/89 only.
  772.     9/4/89        Bugfixes for :-
  773.                 Full parameters not passed to char_insert().
  774.                 Inappropriate tolower() of filenames on UNIX.
  775.             Change to make files in root fold appear open ( >>> ).
  776.     26/4/89        Bugfixes for :-
  777.                 Long menu lists scrolling badly.
  778.                 Cursor always moving to left edge in b_delete.
  779.                 Filepath inheritance with \ at start.
  780.     19/5/89        Reduced memory overhead for each fold.
  781.             Bugfix for searching for 0 length regular expressions.
  782.             Addition of :-
  783.                 Menu selection, FE style.
  784.                 Ctrl-Break testing in search on DOS version.
  785.             Changed configuration drastically, to fit with menus.
  786.     6/6/89        Bugfixes for :-
  787.                 No block with block_entab and block_detab.
  788.                 Ctrl-C detection by DOS.
  789.                 Tab-insertion and display of tab setting.
  790.     13/6/89        Changed language detection for block_read etc.
  791.     9/7/89        Made CR on end of fold insert a line.
  792.             Modified block_mark_1/2 to set (not remove) markers.
  793.     23/7/89        Modified :-
  794.                 word_left to move to left edge of word.
  795.                 Now enters file if only one specified.
  796.             Bugfix for bottom right corner of screen on DOS.
  797.             Problem remains on UNIX/XENIX/Amiga for time being.
  798.     31/7/89        Bugfix for open folds off end of line.
  799.     1/9/89        Made initialisation continue after errors.
  800.     1/10/89        Corrections to this file.
  801.             Changed the way return and tab are implemented.
  802.             Accelerated forwards case of search_bracket.
  803.             Substantial improvements to source code.
  804.             Critical error handler added to Terminal Handler
  805.             to eliminate Abort/Retry/Ignore? on DOS version.
  806.             Better bad filename/directory/device detection.
  807.             Addition of 102 key keyboard support.
  808.     1/11/89        Bugfixes for :-
  809.                 Alt-224.
  810.                 word_left behaving strangely - now consistent.
  811.             Improvement to search done message.
  812.             Addition of :-
  813.                 Please wait message for large copys.
  814.                 OS/2 version!
  815.                 Sticky cursor.
  816.                 $(ENV) vars in virtual fold names for DOS+OS/2.
  817.             DOS+OS/2 versions determines .INI file from argv [0].
  818.             Corrections to this file.
  819.             Modification of default AE.INI file.
  820.     1/1/90        Bugfix for write error detection.
  821.             Improvement for search_ scope detection.
  822.             Reduction of memory requirements on reg_exp search.
  823.             Addition of language definitions to default .INI file.
  824.     1/3/90        Addition of :-
  825.                 Ctrl-Break trapping on OS/2 version.
  826.                 Silly icon for OS/2 version.
  827.                 Extended regular expression support.
  828.                 Scrolling on string input.
  829.             Change in word definition.
  830.             Bugfix for reverse reg_expresion search and replace.
  831.     1/4/90        Modification for single file autoload.
  832.     1/7/90        Bugfixes for :-
  833.                 Detection of illegal reserved comments.
  834.                 Filepath inheritance on UNIX version.
  835.             Change to OS/2 screen handler (TH) caused :-
  836.                 Runs using current screen size.
  837.                 -t now forces 25x80 mode.
  838.                 Allows min of 10, max of 60 lines.
  839.             Bugfixes to UNIX screen handler (TH) caused :-
  840.                 Correctly deletes to end of line.
  841.                 Compiles correctly on a Sun.
  842.                 Delete key (0x7f) correctly detected.
  843.                 Edits files on a network drive on OS/2.
  844.             Minor speed increases in :-
  845.                 Screen redraw (only noticable on UNIX)
  846.                 Fold manipulation.
  847.     Proposed    Addition of :-
  848.                 Envionment variable for command line opts.
  849. /*...e*/
  850. /*...e*/
  851.