*************************************************************************
* >E-Cursors	Documents a cursor block format.			*
*************************************************************************

Zap currently supports 3 cursors. Each has a cursor block. The addresses of
the blocks can be read via Zap_ReadVar (See E-Vars). I will call them after
the names of their pointers, ie, car_cursor, car_input, car_selection. The
second is not usually used. It is used in cursor mode 2, when the cursors are
split for keyboard copying.

The current cursor mode is stored in a variable called car_mode. Use
Zap_ReadVar to get at this. Currently modes 0-5 are defined as below:

Mode:	Cursors updated on screen:	Use:

0	car_selection			Zap hasn't got the input.
	square where input should be

1	car_cursor & car_selection	Standard editing
					cursor and input carets combined.

2	car_cursor			Split cursor copying
	car_input			car_cursor=moving cursor
	car_selection			car_input=where input goes

3	car_selection			Select area via keyboard
					car_cursor=current posn
					
4	car_selection			Select area via mouse
					car_cursor=current posn
					
5	car_input & car_selection	Select via mouse with CTRL held
					car_cursor=current posn
					car_input=fixed cursor

Internally, Zap also uses the modes:

-1	square where input should be	Caret 'temporarily' lost by Zap.
	car_selection			(Eg it is in a menu item)

-2	car_selection only		Used as a temporary value to scrub
					carets from the screen.

The offsets of a cursor block have names beginning 'c_'. As usual, the
E-Library file defines these offsets for you. They are described below. By
convention, R10 is used to point to a cursor block.

c_wind
Window offset of associated window (use Zap_ConvWindOff). This offset is -1
if the cursor is not being used.

c_line		Current line cursor is on.
c_col		Current column cursor is on (including margin).
c_off		Current file offset of cursor.
c_loff		Current file offset of start of physical line of cursor.
c_width		Width of cursor in characters.

c_owind		Window of old cursor position.
c_oline		Line of old cursor position.
c_ocol		Column of old cursor position.
c_owidth	Old cursor width.

c_charoff	Contains the offset (in columns) into the character at the
		cursor. This will normally be 0, except in BASIC mode where
		the cursor is not over the start of a token.

The above meanings hold for car_cursor and car_input. For car_selection the
current cursor position is the start of the selection and the old cursor
position gives the end of the selection. Also c_owidth gives the end offset
of the selection. c_width is unused. Start and end here refer to the logical
start and end. Thus, it may not hold that the start comes before the end in
the file.

To alter a cursor's position you should first store the new position in the
current position variables. The easiest way to do this is to store the new
offset in c_off and then call Zap_UpdateCaret. You should then call Zap_Plot
caret to move the caret on screen and update the old offset to the current
offset. Zap_ReflectCaret combines these.
