home *** CD-ROM | disk | FTP | other *** search
- *************************************************************************
- * >E-Windows Documents a zap window block format. *
- *************************************************************************
-
- By convention, window blocks are pointed to by R8. However, as with files,
- the pointer address may change whenever a window is created. Thus, as for
- files, block pointers should be changed to window offsets for storing. Use
- the calls Zap_GetWindOff, Zap_ConvWindOff. The first two paragraphs of E-File
- hold if you replace 'file block' by 'window block' and R9 by R8. Please read
- the E-File file first.
-
- Window block offsets have names beginning 'w_'. See E-Library for a complete
- list. Each window determines uniquely a file via the offset w_file.
-
- As far as Zap and the extension modes are concerned, a Zap text window
- consists of a rectangle of characters. Coordinates are usually given in terms
- of row and column in R2,R3. Ie, by convention,
-
- R2=column offset from left hand edge, in characters.
- R3=offset in lines from the top of the display, in lines.
-
- R2 includes the margin which may contain the line numbers. The line numbers
- are handled automatically by zap. Thus a window looks like:
-
- 0 w_margin w_width
- 0 -------------------------
- | | |
- | | |
- | | |
- | | |
- | | |
- w_height -------------------------
-
- The quantity w_width-w_margin is usually stored in the mode dependent byte
- w_bpl (bytes per line). However for byte/word modes this is not true, and the
- number of bytes in the file that the line represents is stored in w_bpl. It
- is up to the mode concerned to fill in w_bpl.
-
- The are two ways of numbering lines in Zap. These are called PHYSICAL line
- numbers and LOGICAL line numbers. The PHYSICAL line number of a file offset
- is the line offset from the top of the file in the display. Ie, it is the 'y'
- value of that character starting from 0 on the first line. All line counts
- start from zero within zap, though the number w_stline is added before the
- line number is printed on screen for the user. The LOGICAL line number of a
- file offset is determined entirely by the extension mode and Zap doesn't care
- what it is. For example, in text mode it is taken to be the number of
- carriage returns before the offset (ie the physical line it would have been
- on if the display hadn't been wrapped). In BASIC mode, it is taken to be the
- actual number of the line as encoded in the program.
-
- A further complication is that the window text display is cached. The start
- of the cached area is used as a reference point for working out the file
- offset of a given physical or logical line number. Thus it is not necessary
- to start counting from the start of the file to find out where a line is. All
- line references work locally from this value, which is the start of the
- cached display, which is where the user is likely to be editing! The calls
- Zap_FindOffset and Zap_OffLineCol use this fact. These calls use the mode
- entry points 'e_cln*'. Thus these entry points should use this reference
- point. Thus the mode will need a piece of code (usually called cln_backward)
- for tracing lines backwards up the file. (See the docs on these entry
- points).
-
- The cache itself consists of a number of lines of width w_txtw. This width is
- usually w_width rounded up to the next multiple of 8. An extension mode need
- not usually concern itself with this cache unless it is drawing its own
- display. See the mode entry point e_redrawline in which you are asked to fill
- a line in the cache. I reserve the right to change the format of the cache,
- so don't access it directly.
-
- The window block offsets are described below. Use E-Library to set up the
- definitions.
-
- w_handle
- Window handle for this window or -1 if the window has been deleted and this
- block is now 'dead'. Dead blocks should be skipped if you are going through
- the windows in sequence.
-
- w_minx
- w_miny
- w_maxx
- w_maxy
- w_scrollx
- w_scrolly
- w_infront
- w_windowflags
- These are as for a wimp window block. See PRM if in doubt. You can use
- the code MOV R1,R8:SYS "XOS_GetWindowState" to update these values.
-
- w_file
- Gives the file offset of the associated file. Use Zap_ConvFileOff to convert
- this to a file pointer in R9. This is done automatically for you by
- Zap_ConvWindOff.
-
- w_format
- Gives the display format flags and the mode the window is in. See E-Flags for
- details.
-
- w_width
- Width of window in columns (including the margin).
-
- w_height
- Height of window in lines.
-
- w_txt
- Address of text cache.
-
- w_txth
- Number of lines claimed for txt cache. Each line consists of w_txtw number of
- characters followed by a foreground mask (of length w_txtw) and then a
- background mask (of length w_txtw). Thus the size of the cache is
- w_txth*w_txtw*3. w_txtw*3, the 'actual length' of a cached line is stored in
- the variable w_txtlen. See e_redraw line for more details.
-
- w_txtw
- Width of a text cache line in characters. Must be a multiple of 8.
-
- w_txtn
- Number of lines cached in the txt cache.
-
- w_coff
- Reference point giving the file offset of the start of the first cached
- physical line.
-
- w_cline
- Reference point giving the physical line number (first line 0) of the start
- of the first cached physical line.
-
- w_clogl
- As for w_cline but gives the logical line number.
-
- w_tab
- Gives the coltab width.
-
- w_tabc
- Gives the character code tab mask (x4) eg &09090909. Set this to the same as
- w_cr if you want the tabs to be invisible.
-
- w_cr
- Gives the line terminator mask (x4) eg &0A0A0A0A.
-
- w_flags
- Gives the flags status for this window. See E-Flags. When a window is created
- the default value is taken from opt_flags.
-
- w_title
- Points to the window title string.
-
- w_bpl
- Mode dependent word. Usually stores the width of the display in characters.
- Byte mode stores the number of bytes shown on each line etc.
-
- w_margin
- Width of the left hand margin in characters (including any line numbers - so
- this may be non zero even if the user has not set a margin).
-
- w_rl
- Height in pixels of each character including the line spacing.
-
- w_rw
- Width in pixels of each character.
-
- w_rh
- Height in pixels of each character excluding line spacing.
-
- w_addr
- Address to show in margin for file offset 0.
-
- w_stline
- Line number to show in margin for line offset 0.
-
- w_titlelen
- w_titbuf
- w_titlen
- Used internally for title update.
-
- w_mwidth
- User required margin width before space for line numbers added.
-
- w_tabchar
- User required tab character code x4 (eg &09090909) before tab visibility
- taken into account. w_tabc contains the one actually being used.
-
- w_linesp
- User required line spacing in 1/8ths char.
-
- w_savedo
- Used internally by Zap_DoCommand to store the offset of the first shiftable
- line after a command, and by Zap_SaveWinStatus to store the file offset of
- the character whose position should remain fixed when the window is
- recreated.
-
- w_savedl
- Used internally by Zap_DoCommand to store the physical line number of the
- first shiftable line after a command, and by Zap_SaveWinStatus to store the y
- offset from the top of the window in pixels of the character whose position
- should remain fixed when the window is recreated.
-
- w_savedc
- Used internally by Zap_DoCommand to store the number of physical lines text
- after the first shiftable line should be shifted down after a command
- (signed).
-
- w_savedh
- Used internally by Zap_DoCommand to save the window height before a sequence
- of commands was performed.
-
- w_savedlc
- Used internally by Zap_DoCommand and Zap_SaveWinStatus
-
- w_wrapwidth
- Wordwrap width.
-
- w_togminx
- w_togminy
- w_togmaxx
- w_togmaxy
- These save the 'small' window position for the toggle size key (scG).
-
- w_txtlen
- Actual length of a cache line including the foreground and background masks.
-
- w_palette
- Pointer to current redraw palette. This consists of 32 words. The first 16
- give the 24 bit colour translations (&BBGGRRxx) for Zap colours 0-15
- (0/1=background 2=foreground etc) and is used by VDU mode redraws. The 16
- words after that give the corresponding bitmap masks for poking into the
- screen during a fast redraw.
-
- w_pwind
- w_pline
- w_pcol
- w_poff
- w_ploff
- w_pwidth
- This is the 'cursor block' of the 'point' position. This is the file offset
- of the current 'input' position in the file when the file does not contain
- the cursor. It is updated when the cursor moves from one file to another.
- This position is usually marked with an empty square cursor. See the file
- E-Cursors for what the variables store - w_poff is the most useful giving the
- file offset of the 'point'. w_pwind is set up as the window offset of this
- current window. This in its self is not useful but enables you to call
- cursor handling routines with R10=R8+w_pwind (provided the routine doesn't
- use any of the 'old' offsets).
-
- w_saveds
- Used internally by Zap_DoCommand. Saves the first file offset to be updated
- on screen after the command has finished.
-
- w_modedata
- This points to a block which stores the mode dependant data handled by Zap.
- The block consists of blocks of the same format as in the Zap dependant bit
- of the !Config file - see E-Vars, and is liable to change with different
- versions. Use Zap calls (eg Zap_ModeColour) to read/write the contents of
- this block.
-
- w_res10-w_res16
- Reserved words
-
- w_mode0-w_mode15
- Mode words. Each mode has one word in each in window in which to store the
- options pertaining to that mode. If bit 10 of the flags in the modes e_mode
- entry point is SET then instead of storing data, the mode word holds
- a pointer to a block of data in Zap's heap (or 0 if the block has not been
- created). In this case, the first word of the block MUST contain the length
- of the block (including the first word). The block will be copied
- automatically by Zap, for example, on a New View. The block will be freed
- automatically when the window is closed. The block is created automatically
- when a window is opened, and filled with the contents of the default block
- stored in the !Config file and accessed via Zap_Read/Write Var - see E-Vars.
-