*************************************************************************
* >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.

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. By start and end I mean logical start
and end. Thus, it may not hold that the start comes before the end in the
file.

To alter a cursors 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.
