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