CONTEXT

From Atari Wiki
Revision as of 12:22, 12 October 2011 by Admin (talk | contribs)
Jump to navigation Jump to search

===========================================================================

          ***************       ConTEXT v2        ****************
                       
                           A Programming Editor

                   (C) Don Milne and MicroPack Ltd 1986 

===========================================================================

Here at last (yet again) the long promised version two of my programming
editor. I finally decided to call it ConTEXT (as opposed to Context,
ConText or CONTEXT). I originally used that name partly because that seems
a nice name for an editor, and partly because it was the name I had thought
up for a context-sensitive editor that I never got around to writing (I
went off the context-sensitive idea before I had written a line). 

When I released version one of this program I said in the docs that I was
reasonably sure that there was no serious bugs in it. Boy was I wrong! The
basis of my original confidence was that I was using the program myself
every day and had found no bugs, but I had not appreciated just how much
some peoples working practices differed from mine - and some of those
different but quite valid practices turned up bugs that I had not.

My grateful thanks goes to Ron Sprunger who put in a great deal of his time
and provided me with two detailed lists of bugs, misfeatures and
improvement suggestions. These were invaluable to me in preparing ConTEXT
v2. My thanks also to Jim Fox for uploading the code to BIX at a time when
I did not myself have the necessary software (well, I had CrossTalk (on a
PC) which supports Xmodem, but Xmodem is just too slow and expensive for
uploading from the UK). 

I had hoped to provide multiple editing windows in this version of ConTEXT,
but that will take a certain amount of work to achieve, and I simply cannot
afford the time at the moment (not unless ConTEXT becomes a paying concern
at any rate). So, rather than withhold the program until every last feature
is added I have decided to get it out *now* and start getting feedback
*now*. Do let me know what you think of my work either on BIX (my BIX-ID is
"mpack"), or by phone or mail (see below for the address). 

ConTEXT is distributed on a shareware basis - it is not public domain. I
like the shareware concept because I am a programmer who does not believe
in copy protection, or in charging rip-off prices for a piece of code.
However I *do* believe that a programmer should be payed a fair price for
his work, and I have put a great deal of work into this. If you use this
program and feel that it is worth something then I would be grateful if you
could send me whatever you think it is worth (I think that around $40 is
about right - or 40 pounds if you live in the UK). Remember that the amount
of time I devote to this program in future will depend greatly on how much
you make it worth my while - I have to eat you know!

As an incentive, users who register register will receive a copy of the
latest version of the editor, and will be informed when later versions are
available, and will be able to get those updates for the price of a disk
and the return postage. The Modula-2 program source will also be available
to registered users for a further payment of $50 (or 50 pounds in the UK),
you can order it when you register if you like.

Our address is in the 'About ConTEXT' box in the editor. Payment is by
bankers draft, or by cheque drawn on a UK bank made payable to 'MicroPack
Ltd'. We can also accept payment by VISA or American Express, if you want
to do so then please drop me a line (on BIX, or by phone or mail), giving
me the card number, the expiry date, and the name of the card holder.

---------------------------------------------------------------------------

ConTEXT's sole reason for existance is that TDI's editor was so bad,
I was prepared to write my own rather than use theirs. 1st Word is a
good editor in many ways (and still is for real word processing), but
as a programming editor just couldn't hack it (I'm spoiled - I can't work
without autoindent by default, plus integration with the compiler). Note
that if you want to use this editor from the TDI Desktop, you should
rename CONTEXT.PRG as EDITOR.PRG (that's what the Desktop looks for when
you invoke the editor).

ConTEXT can be operated using the standard GEM mouse and menu interface, or
entirely from the keyboard. The keyboard commands are totally configurable,
and comes ready configured with commands which are almost all WordStar (tm)
compatable - users of the Turbo Pascal (tm) editor will also find these
commands familiar. ConTEXT also makes use of some of the special purpose
keys on the Atari ST keyboard. 

As a consequence of various tricks being used to speed up Screen IO,
ConTEXT does not interact all that well with some Desk Accessories, one
unfortunate example being the M2 Options Accessory. This is one bug that
has remained from the original version of the editor, mainly because it is
not much of a problem - in fact the only accessory I have found which gives
problems is TDI's one, so now I just don't use it within ConTEXT.

ConTEXT requires an Atari 520 or 1040 ST, Monochrome or Medium Res Color.

Don Milne.
MicroPack Ltd.

------------------------------------------------------------------------

The Files on the Disk
=====================

These are the files which you recieve with ConTEXT:-


CONTEXT.PRG            - ConTEXT, the program itself.

CONTEXT2.RSC           - the resource file for ConTEXT, usable in mono or
                         medium res. This must be in the current directory
                         when ConTEXT is run.

CCONTEXT.PRG           - Configure ConTEXT. Use this program to change the
                         keyboard commands to some you like better. Also
                         used to load the compiler error messages, and the
                         "built-in" macros.

CONTEXT.CFG            - ConTEXT's configuration file, produced by
                         CCONTEXT. This must be in the current directory
                         when ConTEXT is run.


ERRORS.TXT             - A list of errors reported by the compiler. This
                         file is required by CCONTEXT.

MACROS.TXT             - A list of macros to be bound in to the editor as
                         if they were normal, built-in commands. This file
                         is used by CCONTEXT but is not required.

CONTEXT.DOC            - This file.


------------------------------------------------------------------------


WordStar Command Summary
========================

The following sections describe the default, WordStar/Turbo-compatible
command set that I provide as the standard configuration with ConTEXT. If
you have reconfigured with your own prefered commands then this will not be
of much use to you, but then you ought to know what you did yourself! 


CURSOR CONTROL
--------------

WordStar Cursor movement keys are intended to be mnemonic because of
the physical organisation of the keys on a standard keyboard, and not
because of the letters on the keys themselves.

Unlike the Turbo Pascal editor, all cursor movement commands wrap onto
next or previous lines. For example typing cursor-right when the cursor
is already at the right of a line causes the cursor to be moved to the
beginning of the next line. If your intention was actually to insert a
space at the end of the line you should use the space bar instead.

Also unlike the Turbo editor is the feature that lines deleted using
the "Delete Line" command (^Y or FKey10), are copied into the paste
buffer before deletion. The line can be restored by typing the UNDO
key. In fact several lines may be deleted at a time, (using consecutive
"Delete Line" commands), and all will be restored by typing the UNDO key AS
LONG AS YOU DO NOTHING WHICH AFFECTS THE PASTE BUFFER BEFOREHAND. The paste
buffer is affected by block operations, and by delete operations. Besides
adding a touch of protection against disasters, this feature is often used
in preference to a WordStar block command. Where just a few lines are
involved this method is usually more convenient.

Text removed using the Block Delete command is also copied into the paste
buffer and may be restored by typing UNDO.

The only major deviation from Turbo is that ConTEXT uses the "^Q-E"
sequence to mean "Find Error" (find a compiler-reported error). In
WordStar/Turbo, ^Q-E means "move to top-of-page". The opposite command
(^Q-X, "move to bottom-of-page"), is also removed to preserve symmetry.
Also note that ConTEXT interpretes the "Global" flag in replace
operations somewhat differently - In the Turbo editor setting "Global"
means "Replace all occurrences of the target", while ConTEXT interpretes it
as "Replace all occurrences of the target STARTING FROM THE CURRENT CURSOR
POSITION". To achieve the same results as the Turbo example you need to
jump to the top of the file before executing the replace.


Movement Commands
-----------------

Command Description           Keystroke(s)          ST Alternate

Line Up                          ^E                 Cursor Up
Line Down                        ^X                 Cursor Down
Character Left                   ^S                 Cursor Left  ( <-- )
Character Right                  ^D                 Cursor Right ( --> )
Word Left                        ^A
Word Right                       ^F
Scroll Up                        ^W
Scroll Down                      ^Z
Page Up                          ^R                 '-' key on keypad
Page Down                        ^C                 '+' key on keypad
Left on Text                                        '0' key on keypad
Left on Line                     ^Q-S
Right on Line                    ^Q-D               '.' key on keypad
Top of File                      ^Q-R               '*' key on keypad
End of File                      ^Q-C               'Enter' key on keypad
Start of Block                   ^Q-B
End of Block                     ^Q-K
Jump to Marked Position          ^K-J


Insert and Delete Commands
--------------------------

Command Description           Keystroke(s)          ST Alternate

Insert Mode On/Off               ^V                 Insert
Insert Line                      ^N
Delete Line                      ^Y                 FKey10
Undelete Lines                                      Undo
Delete to End of Line            ^Q-Y
Delete Character under Cursor    ^G                 Delete
Delete Character to Left         ^H                 BackSpace
Delete Word                      ^T^T or ^T-T
Insert Tab (size 1)              ^I                 Tab
Insert Tab (size 2)                                 ALT-TAB



Block Commands
--------------

Command Description           Keystroke(s)          ST Alternate

Mark Block Begin                 ^K-B               FKey7
Mark Block End                   ^K-K               FKey8
Mark Single Word                 ^K-T
Hide/Display Block               ^K-H
Copy Block                       ^K-C
Move Block                       ^K-V
Delete Block                     ^K-Y
Read Block from Disk             ^K-R
Write Block to Disk              ^K-W
Print Block                      ^K-P



Macro Commands
--------------

Command Description           Keystroke(s)          ST Alternate

Execute Macro                                       FKey2
Read Macro                                          FKey3
Record Macro                                        FKey4
Write Macro                                         FKey5



File Commands
-------------

List File on Printer             ^K-L
Save File and Resume Editing     ^K-S
Save to Named File               ^K-N
Save and Edit New File           ^K-D
Save File and Exit               ^K-X
Abandon File                     ^K-Q



Misc. Commands
--------------

Repeat last Find/Replace         ^L
Find                             ^Q-F
Replace                          ^Q-A
Find Compile Error               ^Q-E
Set Marker                       ^K-M
Adjust Indentation               ^K-I
Toggle Word Case                 ^T-U
Toggle Word Capitalisation       ^T-C
Toggle Auto-Indent               ^Q-I
Toggle WP Mode                   ^Q-W  (enables word wrap and paragraph
                                        reformat command)
Reformat Paragraph               ^B
Enter a repeat factor            <ESC>nn (entered before a command or
                                          character causes that command
                                          to be repeated nn times or that
                                          character to be inserted nn
                                          times).


Note that ^L repeats the last find, or the last replace, or the last find
error. A find error is done automatically by ConTEXT when an error file is
detected, so ^L may be used right away in those cases (up until a normal
find or replace operation has been carried out).

The "Repeat" field in Find/Replace dialog boxes is also an undercover
WordStar options field. In other words, as well as being able to enter
digits from 0-9 (specifying a repeat factor), it is also possible to enter
letters from the set "ABGNQUW" each of which correspond to a particular
search option. The meanings of these letters is as follows:- 

 n ---------- A number, repeat the operation n times
 A ---------- Abort Operation (same as clicking on CANCEL), except that
              you still need to press return to confirm.
 B ---------- Search Backwards
 G ---------- Global, only applies to Replace. Repeat replace operation
              for all occurrences of the target string searching from
              the current cursor position.
 U ---------- Convert target and pattern to uppercase before
              comparing (ie ignore case differences).
 W ---------- Whole words only. Patterns match only if the candidate is
              delimited by non-alphanumeric characters.
 Q ---------- Set QUERY mode, ie ask user to confirm before completing
              each replace operation.
 

The "Set Marker" is used in conjunction with the "Jump to Marker" command
and allows you to quickly return quickly to any point in a file if you have
to leave it for some reason. 


Notes on Mouse/Menu Operations
==============================

The functions provided in the menus are more or less the same as those
provided in the WordStar/Turbo Command Set. Additional features are

   1. The text cursor may be quickly moved to any position on the
      screen by pointing with the mouse and clicking once with the
      left mouse button.
      
   2. Blocks may be marked by pointing with the mouse to the first character
      of the block, then holding down the left mouse button while the
      mouse cursor is moved to the last character of the block. A box
      will be grown around the text to be marked. When the box encloses
      all of the desired text, the mouse button may be released. The
      marked block will be highlighted. Obviously, this method may only
      be used when the entire text is visible on the screen at once,
      otherwise one of the alternative methods (eg menu or WordStar
      command or function keys) must be used.
      
      

Processing of Compile Errors
============================

Errors are handled in the same way as the standard TDI editor. When a
file is selected for editing ConTEXT looks for a matching file ending
in ".ERM" (or ".ERD" if the file is a definition module). ConTEXT uses
information from this file to mark errors in the source file. The
marker used looks like this - '@'.


Macros and Macro Syntax
=======================

The best way to describe the macro syntax is by example, so here is a
simple macro:-

.macro R
REPEAT

UNTIL ;$


All macros (in written form that is), start with the header ".macro c"
where c can be any single character. This entire header (including the
character) is case dependant - ".MACRO" is not acceptable, and 'C' is not
the same as 'c' for the identifying character. The macro itself is then a
sequence of characters terminated by the character '$'.  It is also
possible to invoke functions from within a macro by enclosing a "function
number" in angle brackets - if we elaborate our example a little:-

.macro R
REPEAT

UNTIL ;
<1><6:4><1>$


"<1>" means "Execute function 1" (Function 1 is the Cursor-Up command, a
list of function numbers can be found in Appendix A, and is also displayed
in the CCONTEXT program. You don't need to know function numbers if you use
the "Record Macro" way of creating the macro). The second function looks a
little strange bacause it specifies a repeat factor - "<6:4>" means repeat
function 4 (cursor right), 6 times. Always remember that the repeat factor
is the first number, then a colon, then the function number. It is possible
to specify a repeat factor without specifying a function to execute, in
which case the repeat factor is reserved for the character following the
closing angle bracket, for example the sequence:- 

                  <45:>*

Will write the '*' character 45 times. Finally, the angle bracket can be
used as an escape character to introduce a character that would otherwise
have special meaning to the macro syntax checker, for example the
sequence:-

                  <$

means "insert the character '$' in the text - do not treat this as the end
of the macro". Generally speaking any character may be placed after a left
angle bracket to be literally inserted into the text - the following
characters can ONLY be inserted in this way:-

           '<'    '$'     '|'

Note that when using the '<' escape to enter special characters that you do
not need to enter a closing bracket, in fact if you do you will find it
also inserted into the text!.

The last thing you may find useful to know about macro syntax is that you
can replace any occurrence of a carriage return with the character '|'.
This allows you to write your macros in a more compact form. If we take our
example for the last time we can write it thusly:- 

     .macro R|REPEAT||UNTIL ;|<1><6:4><1>$

The file MACROS.TXT contains examples of several macros that you may find
useful, including one to strip out hard tabs from a text file, plus several
of use to Modula-2 programmers. The macros in this file get bound in to the
configuration file and seem to the ConTEXT user to be built in commands of
the editor - saves having to re-enter your favorite macros every time!

Macros can be created in three ways:-

     1. Write your macro in text form into the MACROS.TXT file and use the
        CCONTEXT program to bind it into the editor.
     2. Write your macro in text form then read it with the "Read Macro"
        command.
     3. Record a macro by invoking the "Record Macro" command, do whatever
        it is once, then invoke the "Record Macro" command again to
        complete the recording.

However you create your macro you need to remember the character you used
to identify it, because this is asked for when you invoke the "Execute
Macro" command, and when you invoke the "Write Macro" command. The "Write
Macro" command can be used to write *any* macro out in text form -
regardless of how it was created.



The CCONTEXT (Configure ConTEXT) Program
========================================

CCONTEXT should be simple enough to operate (in fact I hope that it is
self-explanetory), however this section will summarise its operation.

The CCONTEXT program is used to configure the keyboard commands, and also
to bind in macros and compiler error messages into the editor. When you run
the program the following menu is displayed:- 


      1.  Edit Keyboard Commands

      2.  Edit Misc Details

      Q.  Quit



Option 1 - Edit Keyboard Commands
---------------------------------

Option one brings up a secondary menu consisting of a list of the editor
commands which you may configure, selectable by function number (the
function numbers shown are the same as those recognised by the macro
processor).

You may then pick a function that you want to configure by typing its
function number. You may provide more than one command sequence for any
function, but there must be no more than 120 sequences in total (this
allows for two sequences for each function, which should be plenty).

After you have picked the function that you want to configure, you are
given the opportunity to add, or remove a function. To add a function just
press 'a', then type the two characters that make up the command. If the
command is only one character then type <CR> for the second character.



Option 2 - Edit Misc Details
----------------------------

This option allows you to configure such details as:-

     a) The background color (black or white).

     b) The tab sizes (two tab commands are provided).

     c) The initial settings of various flags, ie Insert Mode, Auto-Indent
        On/Off, WP Mode.


Q - Quit
--------

Quits the CCONTEXT program and causes it to write out the new configuration
file. For this the ERRORS.TXT file must be in the current directory, and
you should have the MACROS.TXT file also in the current directory if you
want the macros therein to be bound into the configuration. MACROS.TXT is
simply a list of the macros you want bound in, specified using the same
macro syntax used by the Macro Processor which is part of the ConTEXT
editor. The only "extras" in MACROS.TXT is that you may add comments before
and after macros (but not within macros!). Any line starting with a ';' in
the first column is treated as a comment line and is ignored. You may also
have blank lines in your macro file - before and after a macro blank lines
have no significance, within a macro they certainly do!  See the supplied
MACROS.TXT file for an actual example.


APPENDIX A - Macro Processor Function Numbers
---------------------------------------------

   Function     Function
   Number       Description
   --------     -----------
      1         Cursor Up
      2         Cursor Down
      3         Cursor Left
      4         Cursor Right
      5         Backspace
      6         Page Up
      7         Page Down
      8         Word Move Left
      9         Word Move Right
     10         Scroll Up
     11         Scroll Down
     12         Start Of File
     13         End Of File
     14         Delete Char
     15         Delete Line
     16         Delete to EOL
     17         Delete Word
     18         Undelete Lines
     19         Insert Line
     20         Left on Line
     21         Left on Text
     22         Right on Text
     23         Mark Start of Block
     24         Mark End of Block
     25         Mark Single Word
     26         Find Start of Block
     27         Find End of Block
     28         Hide/Display Block
     29         Copy Block
     30         Move Block
     31         Delete Block
     32         Read Block
     33         Write Block
     34         Print Block
     35         Find
     36         Find and Replace
     37         Find Compile Error
     38         Find/Replace again
     39         Set Marker
     40         Jump to Marker
     41         Print File
     42         Save File
     43         Save File As...
     44         Save & Edit new File
     45         Save and Exit
     46         Abandon Changes
     47         Adjust Indent
     48         Switch Window
     49         Execute Macro
     50         Read Macro
     51         Record Macro
     52         Write Macro
     53         Tab
     54         Tab 2
     55         Toggle Word Case
     56         Toggle Capitalisation
     57         Toggle Insert Mode
     58         Toggle Auto-Indent
     59         Toggle WP Mode
     60         Reformat Paragraph