;
                                      V.COM                                   

             Size (recs) CRC   Version    Author/Latest Issue      Disk
               8k (58)   85DA  0.6        Bridger Mitchell 4/90    Z3COM16

  1- Syntax  2- TCAP Requirements  3- Multi-file Viewing  4- Configuration    

   V is a quad-directional file-viewer for ZCPR3.   It uses an in-memory cache 
to make the most recently read sectors of  a  file  available  for  re-viewing 
without additional disk reads.  This allows reverse viewing of crunched files,
up to the limit of available memory.   If, when going in reverse, the cache is
exhausted,  V will  automatically restart  the  uncrunching  process  from the 
beginning of the file and display the first lines.

   Viewing of adjacent lines/screens  is  rapid  for  both  ascii and crunched 
files.   Going to the End is  also  quick in ascii,  but results in some delay 
uncrunching a large file -- the entire file must be uncrunched first.
:1

   Syntax   V filename.typ
            V //                           <--  help screen
            V filespec1 ... filespecN      <--  multiple-file viewing

               ^C  -->  moves to next file           "
               ^R  -->  moves to previous file       "
               ^X  -->  exits the program            " 

A filespec is an ambiguous filename and type, preceded by  an optional  DU: or
DIR: specification (e.g., *.DOC; WORK:MENU??.TXT; A15:*.*; FOO.BAR).
    
To search forward, enter "Gstring<cr>"
   UPPERcase matches exactly
   lowercase matches lower or upper
   '?' matches any character
"G<cr>" finds next match

See control menu at top of screen.  
The Z-system 'arrow' keys are also supported.
:2
 TCAP Requirements - 1/2 

   The termcap requirement is the  addition of three  strings to  the standard
Z-System termcap.  These definitions are already setup in files of type ".NZT"
(New Z-System Termcap),  available on major Z-Nodes.   If your  terminal isn't 
already there,  you  can  add  definitions  following the  initialization  and 
deinitialization strings.   Here's  an example for the Wyse-50.   NOTE:   This 
uses the  STANDARD termcap specification  (not the one in  experimental use in 
early 1989 by J. W. Wright).

	DEFB	'TERMINALNAME'	; 13 bytes
	db	0		; reserved

	[ ... next part of termcap omitted...]

	DEFB	ESC,')',0	; SO - Standout on string
	DEFB	ESC,'(',0	; SE - Standout end string
	DEFB	0		; TI - Terminal init string
	DEFB	0		; TE - Terminal de-init string
 TCAP Requirements - 2/2 

;
; 3 extensions to standard TCAP follow immediately after "TE"
;
	DEFB	ESC,'R',0	; DL - Line Delete
	DEFB	ESC,'E',0	; IL - Line Insert
	DEFB	ESC,'Y',0	; CD - Clear to End of Screen String
;
; ... the rest of the termcap ...
;
:3
 Multi-File Viewing 

   V maintains a ring of all  matching files.   ^X will move to the next file; 
^R moves back to the previous file.  ^C exits the program.   Because  the ring 
is virtual,  V should  work  on  any  size disk,  regardless  of the number of
directory entries.   (These and all other control commands may be rebound; see 
below).   A list of excluded filespecs is tested; files such as COM, REL, LBR,
!!!TIME&.DAT,  etc. will be skipped automatically.   You can extend this table
by patching near the start of V.

	
   V uses an in-memory cache to make the most recently read sectors of  a file 
available for re-viewing without additional disk reads.   This  allows reverse 
viewing of crunched files,  up to the limit  of  available  memory.   If, when 
going in reverse, the cache is  exhausted,  V  will  automatically restart the 
uncrunching  process  from the  beginning of  the file and  display  the first
lines.
:4
 Configuration - 1/11 

You can change the keys that control V by assembling a modified version of the
code below:

;
; offsets from 100h for configuration areas
;
CONFIGBUF	equ	20h
HELPBUF		equ	80h
EXCLUDEBUF	equ	200h

SPACE	equ	20h
TAB	equ	09h
CR	equ	0dh
LF	equ	0ah
 Configuration - 2/11 

   1. These are the bindings that control the  V screen.  In  addition  to the 
      one to three keys for each command, V automatically picks up the cursor-
      control keys ("arrow" keys) from  the  Z-System  tcap and uses them,  in 
      addition to the bindings in these tables.

   2. To change the bindings, set the equates for your preferences, reassemble
      this file to HEX, and overlay onto V.COM.  

   3. Enter exactly 3 bytes for each binding.   Use uppercase for all keys.  V 
      automatically converts a  typed lower case key to upper case.  Use a nul 
      to indicate the absence of a binding.

   4. Edit the help screen to match your choice of bindings.
 Configuration - 3/11 
;
K_up1	equ	','
K_up2	equ	'P'-'@'	
K_up3	equ	0
; and, automatically, Z3TCP's left arrow key
;
k_pgup1	equ	'<'
K_pgup2	equ	TAB
K_pgup3	equ	'Z'-'@'
; and, automatically, Z3TCP's left arrow key

K_dn1	equ	'.'
K_dn2	equ	SPACE
K_dn3	equ	'N'-'@'
; and, automatically, Z3TCP's up arrow key

K_pgdn1	equ	'>'
K_pgdn2	equ	CR
K_pgdn3	equ	'V'-'@'
; and, automatically, Z3TCP's down arrow key
 Configuration - 4/11 

;
K_left1	equ	'L'
K_left2	equ	'A'-'@'
K_left3	equ	0
;
K_rt1 equ	'R'
K_rt2 equ	'E'-'@'
K_rt3 equ	0
;
K_beg1	equ	'B'
K_beg2	equ	0
K_beg3	equ	0
;
K_end1	equ	'E'
K_end2	equ	0
K_end3	equ	0
 Configuration - 5/11 

;
K_goto1	equ	'G'
K_goto2	equ	'S'
K_goto3	equ	0
;
K_nxtf1	equ	'X'-'@'
K_nxtf2	equ	0
K_nxtf3	equ	0
;
K_prvf1	equ	'R'-'@'
K_prvf2	equ	0
K_prvf3	equ	0
;
K_exit1	equ	'C'-'@'
K_exit2	equ	0
K_exit3	equ	0
;
 Configuration - 6/11 

;
subttl	'---------- KEY BINDINGS ----------'
;
; Each V function has three possible key values.
; V ignores case.
; If you use fewer than three keys, use nulls for the remainder.
;
;;	org	CONFIGBUF
;
beginconfig:
;
	db '__UP:'	
k.up:	db	K_up1,K_up2,K_up3	; Scroll one line up	
;
	db 'PGUP:'
k.pgup:db	K_pgup1,K_pgup2,K_pgup3	; Scroll one page (screen) up	
 Configuration - 7/11 

;
	db '__DN:'
k.down:	db	K_dn1,K_dn2,K_dn3	; Scroll one line down
;
	db 'PGDN:'
k.pgdown:db	K_pgdn1,K_pgdn2,K_pgdn3	; Scroll one page (screen) down
;
	db 'LEFT:'
k.left:	db	K_left1,K_left2,K_left3	; Scroll to left
;
	db 'RGHT:'
k.right:db	K_rt1,K_rt2,K_rt3	; Scroll to right
;
	db 'BEGN:'
k.begin:db	K_beg1,K_beg2,K_beg3	; Display beginning of file
;
	db '_END:' 	
k.end:	db	K_end1,K_end2,K_end3	; Display end of file
 Configuration - 8/11 

;
	db 'GOTO:'
k.goto:	db	K_goto1,K_goto2,K_goto3	; Goto (search) for string 
;
	db 'NXTF:'
k.nextfile:db	K_nxtf1,K_nxtf2,K_nxtf3	; View next file
;
	db 'PRVF:'
k.prevfile:db	K_prvf1,K_prvf2,K_prvf3	; View previous file
;
	db 'EXIT:'
k.exit:db	K_exit1,K_exit2,K_exit3	; Exit from V.
;
.list
configlen	equ	$-beginconfig
;
test0 equ 	HELPBUF-CONFIGBUF-configlen
	ds	HELPBUF-CONFIGBUF-configlen	
.xlist
 Configuration - 9/11 

subttl	'---------- HELP AND USAGE ----------'
;
;;	org	HELPBUF
;
; Edit the message to correspond to the key bindings.
;
helpmessage:
;
db 'V  commands (in addition to Z-System arrow keys):',cr,lf
db lf
db '1 line down  .  SP ^N       1 line up   , ^P',cr,lf
db '1 page down  >  CR ^V       1 page up   < ^Z',cr,lf
db 'n pages      digit          n pages     digit',cr,lf
db lf
db 'right        R              left        L',cr,lf
db 'beginning    B              end         E',cr,lf
db 'next file    ^X             prev. file  ^R',cr,lf
db 'goto/search  G              exit        ^C',cr,lf
db 0
 Configuration - 10/11 

;
helpmsglen equ $-helpmessage
.list
;!!! ERROR -- help message is too long.

test2 equ 	EXCLUDEBUF-HELPBUF-helpmsglen
	ds	EXCLUDEBUF-HELPBUF-helpmsglen
;
.xlist
subttl	'---------- FILE EXCLUSION LIST ----------'
;
;
exclude_cnt:
	db	??excnt		;; number of items in list
.xlist
exclude_tbl:
 Configuration - 11/11 

; ruler:	'--11 bytes-'
	db	'!!!TIME&DAT'
	db	'????????SWP'
	db	'????????BIN'
	db	'????????C?M'
	db	'????????R?L'
	db	'????????Z?L'
	db	'?????????Y?'
	db	'????????LBR'
	db	'????????BSX'
	db	'????????RSX'
	rept	5*11		;; space for more
	db	0FFh		;; list terminator
	endm
??excnt equ ($-exclude_tbl)/11
	db	0
;
; end vkeys.lib
