ßÈ È ` € V CYM+ È È ` ` V DOC,5èNÈ È € € ÿ výV.COMM"Èy7¼þǃŠ»Ëå/u@ÿç÷çùü\n· µ=4ýþ×mš«OÑ‹ñ²zI³ù×ÔÕõ³hè€ü‹­Zÿ¡Þ…-xïr?JRL~=þd9›Œ†¢Äœqu)^ËÄøî­OùX4KlÖ¬S8Ö²÷ÓDø×sPöÙ}Æýv>ëEöVfÙba$cý²/VO nùó2RØà‹ÚƒVÉ”‚¢�˜JÜýîÇZ½—“ìÇ~÷ÆA0ô/ê]Õ†ézeùoÅ4E-˜ï`¯;ÝÀµù¢ƒ~mJâ‡ÿ8G‰|=ÃYfõ5O‚ ‘ y2Ò…»>ˆ¶IV¹ž¸€°kÓ–”F±ƒˆ%¶]X󊊾_ÃPø$v.Ša«^q+u4Jê\´üÙ0æM¾4èÓ››§%Öñ´ ï~^$·ðlÿîUó­àªŸU]�©þ ÃϵË<i3°¬׌¸*ã•×án¦0VJ些ÿË�¾A;î˜Ú“Õ{€gÄèüh‘¿{$qì§Ltã3äˆÖ?@Õ™ßjB?€’;�6ùåGb–Уƒz*²Núg=q–f]²ÙŒ•å°š®×äq°{ 7ùv7A´Ñ,Œî•ÔÀæs cBnÊ%íšËbi ùUæô]Œ…l¨šõ#LUŸ®ÿPÝ`Õ#¡^fÞ²¥m›þ^쑚©?îé ÚL¦:ÕQ¬‰TD ÒÓGkJ‘Hõ „ Xd°(”ÐTs_€r7n�|4ΰâS{éËg¯,çÚ¥ÈWÏAφŒ°‚UïÚSéÝ3j¶–3½YE«­&À™L�¿DÃB¿þ÷úµþ‡ªfüI P¶ÁeÃ!Á…ú^{þ=wä?柾Cº]±y—yŒ|wv„¢Ý¯´7HìQ9ëz½xúªM§�v!ÃVoìÙß�Êü$ÿwø+ôëÏ~À�[¹i;,‚5?sd…’gWÀžö}b°?7 &˰È{ž&^¿[‰—ÓIìÓùØ%>7‘Ú–)Èäå-ɹ�s°ïx4y©)Œa0.|ÌxÊÁo×€»±�C!>¦XdÐk)щ¿O¨ –.9Zý]s³ÖFýφ»îZÊ­¾¥ÞºëtA¥Ùl#¤Õ;Ý:Bè—y5FS0½4%[ 9Ùgþ½EØ;õý{>  Ú7Û ].•gÎSBŽ�%V½ÐIý¬¼èÛõƒ»û@NOùâÝwÙ¥ñøHaà�ñ¦GËoÍ/`ÓÀ7Ìg†‘à%4 NÏ} µ]FYóqŒ§òÿ¼¼ö=±ûç:"ã­²{Õ”åX9 Y�wl#s®SòQû4¶øs¢®äL­›y‚è"­�cº>áέWĶ@M¿†-³e.»ç9ÙpÃÞ»�Ýß ëFñ–órÏR’e¼€>nÃtî9wÓ¨6´Ê†Q¬½‡¡¹kW]¡ÄÛ”}T,ù>×&¾– ³|W[8…NŽQ Bd•VkŸvf1=Z¶vÅã 3¥Kw³X¾L²ì¿%úKþ$“¿†æ~¡2÷¥Oƒ‹uøö±YÊa9‡ëOP—:Ò+ uvê·ÜЇpN™xOºnËu•¨}+¨Î´§ñõ\,ôÂgùð¬ï{FÔN·£ÞS0î±þ]ÊÈbõ…�ûX¼/x›Õ`g04Ïî†ä¼°ÍÒe2dc‡�ï½�L7R£=>úæs#Y¿o%™éjÞ©›ÌÎ'_Xî8*UÞ+%®gµ’b½ã‘Á²†—‚�»PTÚõc[ÀÅ?Y¾'¨ÇSÐýz¢P²eý’X((†YBrjìªïž0±¦¨¢JZ�û } ~n€nSp<Ëhð]�vˆJ÷†Ë©¤ÐÉ^ƒÛ£Ôú'$:ö#~ä:¿¨aTE3·Ç÷ÌÅ y`0;wã"°°Ž)ÎM¶ö ëo‰Ù› üØ»Â[ÝÎy*x,CK öT¥Ü특Ù©g **f5 /‘s�næs^:ÿÍåÑÍíÓ©�<‚péãm ·ß®Å6šŽÅ½µADØâÄYÁn·hSn ih#Q„~3±ýç–Ї:Oèm“|¢Ëã•-ÐáY£PøñP� 8xþ©zκåýß¶Mþ‹÷ùtʇâ[YÛNà\KÛWFIÍ#Ì ù<ÇÄ ¢C,0 ~üa¤Œ—Ýóü³%9 ðÏ;šìû> ³ˆã®¶"ÄC�Î;)é¹nG:!ØÛÁmeÅK8”ãz!LõxCj8`Ýÿø+ÁKK6·r;U/ßÁ¥¢åywu@Áý)`ѯôõ1�y«{w%Nô!Æ(­UþwÚF³™ÍòÊsqu¶nÜ�YŽHYc®…’:ÏY}Ï�aƺ‡×¼ñêË<&lB3}Ú­‹².6³UŸ¯øº¤=峦t‚bMu4ݾÃ�ÀÉ>ÅÚŸÝo²(wx¨èkP´ëÝo†¯÷̃œætÓho¸×£’À²�Ïe¶….ÇG�­ë/ôKª‡PcçÍ6ŽzªFqôÝÄð­ˆVJòèxµÍ­ãVé”BîF7pÛ‡“x×1 ?ykêy´~\†6‰ÿ5z vœ.àiÉ¥ÆÜÔûz¦�8úÓ¢ÕT¯BÐlQïðÏ��'ò¹˜>0ïð$6Câ�-Q�åJÙÖšè(y jN,çcç›w¿*㌯µ ›YœôRö¤<¾L£—aªd�÷f¿6üÒ¹¥ò£z‰Úô®@¾cÛÙú¿ŸµCmŠ¡ƒÿºðœlñ» ¥6*÷@J>®äL7^Xƒâòè~ÇûÏî ?þ&WäZ G©yÒв&{™÷R1ð‘”vχY $3̸Ãx–à{)WɰT•í�·ç»* ’#šÖ€P)?G”{56ËU¦P„æÿFÍòeƒáŸ„”¯=Án„õ·$ ò4InB\¬Õ¤û™²tÿ(’+Buº6aSp=}âìHÕ¿‰y}šzƒÏß—àÖ#ì?Í$”Ìå îàÄ4`�èW+”qà^ï(p ­$LLM>£qôGÌ᜴?�¶±› Xýo”žDò§–tg#"ß;)™¡u‚äÔÒ ¸7àã…ad¦Ñ1ZïÈk8¸ .MdîjÔ~A=óèúÇÙF‹;~'&ÒðÑ1°Gn|qçËK(ⱟóIRúO8XÀûŒÍm`Lj?q {0#H>¢’ÌZ²ôjUý ½D«ÒK ƒMà«6lY)»Ùx¶¯ÂÝ Žá@CimÏŠø“ ñÇY²Q~=û·(z°íªß¼7ÀMqñ?"~×ÝÍž£ç_�ó?­zÎåeâjö W‰–·¡oãvã`û�~/ï!}…ÎTJkµæPšp¿ÿØ:üŽÝ€L_Õd`�jAn‚ï³Öç61©sèFPñͱơç\FOŠ“²Æ±ß=»9ÿ‰AGw:u•¬žÂ#XÖˆ‰¾’<‡HÓôK _ ˆvº‹1:‘þt©7Öžã)#ÑZ‚»‹ ‹Öì\¬‘žº[ØLEý»¯ÖÞ�\>r¦œ_7¸3‘‰‹‡µÓ‰j¹ÌrçÇ›foÂäÇxÓÐ3qÁn#:¾6›s\-f Ÿ§;p"ÌqÄø�ä­#…²[އ`aøí†= 8�: Á•¥ËœÖÿ~agòÖZ´çÒ¼U­;Ëîî-¿³Šp‚Í ,’õÒZ=itvƒ@ŠQ6*-b>fVbìxɪW 6Èê*j¨“Yú�7Ù§2]¥-Ãf>n$ð„¹KþB 09„0Ü3ó]«Õyq<K Zwr<æNœézýâfKÐÄþ· «º =²‡Žýáä'éÈ œ´þ¸¶s|»�yN¾AÙf‡ œ3uz¶³^©‘æ2 êÐÂÑ8k�åÕô«•h~bW! xçbÓ¾] ò^zþÏÅóè×jâ� ž›_=&¢É¶ú0gÜ•c•êÊž(×>&[°LªïöGl¶:ajµiÑåÑþQ[äÑÿ‡Y8WÌUE·ôDdîça�”0Y¡ ²ÏÝüg:·þl$uÌ-•]=¬Wp^|pRüåÚ¤Œ-�ž�TÇTíŒòÀ?x×é¥ß™¶*‚2X­Œb!3XkÉGíh|¡ Ûz>„`Aþ »žíæ1œ½­yz{è·Ù´HLAØ_ÝøKR¥Úå_²–@<ù ðITzj0¶“å`4 MmE„I¨<ž*òÙ:³Û$>íakÀsΛÀ7¤¿ÌùKHí‘ÓŠ%óÑ7Dx31­™>Ç3¿Ô/O,UÙÚ³ß~øgü,M]@–±è9,’3UˆÐ¶ü%�aO�'’œ:¶Ãa¸Æn$ HÉÕŠÏø° %¨ÝÐIÓMˆYrI= ‰K$B¥ù‡n“žÃí_ MñGügö+Òâ÷õ²GÒoè~ßê& AÀA¯¸jŒ/«úlßÞu –\`Îñ¯P–‚ÚpzÍèdíìÄð<Ö¢G°Z,Rÿ»ò»HFg½k—©H‡¨žîFô9gŒ¬Ñ×e��€½L¿•½ºm¹;¾Ó—šC£7=©Öb0iOþÛÖÔ ’ÈÖ/ëãÒ£ÖÙ�•£Gûq! ´4Ïf˜ßŒ¯˜E3¾Â†77–ö‰DZÏ [ÒS\ͧ1k1Yç ò·áÑ—®v§Ü=º²YkŸyŸ3¶õ4?xXÄšJÙÎv°^µ„·= zàn9w>Ë'¼¢ß)ˆþ‘ 1e2†Q‘c÷'9�ìÄŒ°÷�d©·kõ N™ á­à´àA`½½@ñ$Dx"÷Ùÿ>0øBGÀ0MÅdž‚ÖÐtàBéI�Øî!mÏð¤|FèW ²³º Ý–¼Ë¿Á¥Xdã{tŒòùÇ`sj=–Q”ÕçdO åVI›zê85TŠ5xî &‡í·xÜi(`í$%ït·y$z:´vf|XìÆbÝUkÈN,1pkƒÆøF̱ìó÷Þæçå'nÇðY}‘üœp E©sòï*ìÏtŵ¤�R7÷sö߀³?�¨`LÝØd:ç^ˆ ›ELstÛ{�.Wcs~óˆù'Z%'ÉÌKy—!œŒþ"‘؃æCG¨F ûY‚ÕW)7``ȱ¦„•ˆ”sü�IœM![F›ÆIO/>’_ïý�AnÜúì‰LÿvKhÎL!£ÚŽ+Œî°Z5„ËŽP uÇÔ1Ö59·U‘äc‡•¦½[�9ž Û�ñ|M�z.ÿ˜Xˆà›á‘oTöMú�Y¦Ó5FìÃ|#ï ¤hž¼SûH“áµ²HCt¨eŇìǸLt~†`Ÿìò Œ(Ÿ±ÇóeÜH¦�âÞ÷˜Þüß+Šm}öò�7ž¾ŸnjzaÕþö™¨ÍKp X;½ªÕ0˜/Wrt�ï÷ÛŠ«{¥ýë Ö ú¹èjª‡â^�!ˆƒÝצuppù„äþßÜë³p�=’‡.îSÆ4�­¬U»û�«ë8ûoÁ¶KŽ&òŠ´7TA=¦é³÷·�‹Ÿ±~Òã!µµnl³Ž‹Âb( &øv.doc vers. 0.6 4/12/90 Bridger Mitchell (Plu*Perfect Systems) V -- quad-directional Z-System file viewer V now supports multiple files, with usage: V filespec1 ... filespecN A filespec is an ambiguous filename and type, preceded by an optional DU: or DIR: specification. Some valid filespecs are: *.DOC WORK:MENU??.TXT A15:*.* FOO.BAR 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. 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. TERMCAP requirements 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. NOTE: This uses the STANDARD termcap specification (not the one in experimental use in early 1989 by J. W. Wright). Here's an example for the Wyse-50. 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 ; ; 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 ... CONFIGURATION You can change the keys that control V by assembling a modified version of the code below and ; ; 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 ; 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. ; 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 ; 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 ; 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 ; ; 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 ; 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 ; 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 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 ; 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: ; 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  1 line up