home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cpm / zutils / lbrhlp22.lbr / LBRHLP22.ZZ0 / LBRHLP22.Z80
Text File  |  1992-05-09  |  35KB  |  1,557 lines

  1. ; PROGRAM NAME:lbrhlp.z80
  2.  
  3. ; AUTHOR:bOB pEDDICORD
  4.  
  5. ; DATE:jAN 88
  6.  
  7. ; VERSION:1.0
  8.  
  9. ;
  10.  
  11. ; DERIVATION:  HELP53 BY rICHARD cONN
  12.  
  13. ; SOME HELP ROUTINES FROM HELP52
  14.  
  15. ; i WANT TO THANK sTEVE gREENBERG FOR HIS UNCRUNCH CODE
  16.  
  17. ;
  18.  
  19. ; vERSION 2.2 BY gENE pIZZETTA, 5/10/92.
  20.  
  21. ; sEE lbrhlp.his FOR REVISION HISTORY.
  22.  
  23.  
  24.  
  25. VEREQU22
  26.  
  27. REVEQU' '
  28.  
  29.  
  30.  
  31. FALSEEQU0
  32.  
  33. NOEQUFALSE
  34.  
  35. NEQUFALSE
  36.  
  37. TRUEEQUNOT FALSE
  38.  
  39. YESEQUNOT FALSE
  40.  
  41. YEQUNOT FALSE
  42.  
  43.  
  44.  
  45. ; sELECT DECOMPRESSION METHOD
  46.  
  47.  
  48.  
  49. .ACCEPT'eNTER "y" FOR UNCRUNCHING OR "n" FOR UNSQUEEZING: ',UNCR
  50.  
  51.  
  52.  
  53. ;
  54.  
  55. ; DIRECTORY OF HELP FILES IF HELP DIRECTORY NOT FOUND
  56.  
  57. ;
  58.  
  59. DISKEQU'a'-'a' ; DISK
  60.  
  61. USEREQU15 ; USER
  62.  
  63. ;
  64.  
  65. ; ENTER/EXIT STANDOUT MODE
  66.  
  67. ;
  68.  
  69. DIMEQU1
  70.  
  71. NDIMEQU2
  72.  
  73. ;
  74.  
  75. ; CONSTANTS
  76.  
  77. ;
  78.  
  79. UDFLAGEQU4; ADDRESS OF USER/DISK FLAG
  80.  
  81. BDOSEEQU5; ADDRESS OF BDOS ENTRY POINT
  82.  
  83. FCB1EQU5CH
  84.  
  85. FCB2EQU6CH
  86.  
  87. TBUFFEQU80H; ADDRESS OF DMA BUFFER
  88.  
  89.  
  90.  
  91. INBUFSZEQU1; INPUT BUFFER SIZE (1 PAGE)
  92.  
  93.  
  94.  
  95. TABEQU9; <HT>
  96.  
  97. CREQU0DH; <CR>
  98.  
  99. LFEQU0AH; <LF>
  100.  
  101. ESCEQU1BH; ESCAPE
  102.  
  103. BELEQU'g'-'@'; ^G
  104.  
  105. FFEQU'l'-'@'; ^L = FORM FEED
  106.  
  107. CTRLZEQU'z'-'@'; ^Z
  108.  
  109. CTRLCEQU'c'-'@'; ^C
  110.  
  111. ;
  112.  
  113. ; HELP CONTROL CHARACTERS
  114.  
  115. ;
  116.  
  117. IHCHAREQU';'; FLAG INDICATING INDEXED BY USER
  118.  
  119. SECTCHAREQU':'; DEFINED TO BE COLON
  120.  
  121. BACKUPCHAREQU'l'; BACK UP TO PREVIOUS FRAME CHAR
  122.  
  123. STRTCHAREQU's'; JUMP TO START OF INFORMATION CHAR
  124.  
  125. MENUCHAREQU'm'; CHAR TO ABORT TO MENU
  126.  
  127. CPMABORTCHAREQUCTRLC; CHAR TO EXIT
  128.  
  129. EXITCHAREQUESC; CHAR TO EXIT (ALTERNATE)
  130.  
  131. LRCHAREQU'^'; RETURN TO PREVIOUS HELP LEVEL
  132.  
  133. LRCHAR2EQU','; RETURN TO PREVIOUS HELP LEVEL (ALTERNATE)
  134.  
  135. ROOTCHAREQU'.'; RETURN TO ROOT OF HELP
  136.  
  137. PRCHAREQU'p'; PRINT CURRENT FRAME
  138.  
  139. CPRCHAREQU'p'-'@'; PRINT CURRENT INFORMATION SECTION
  140.  
  141. ;
  142.  
  143.  if uncr
  144.  
  145.  
  146.  
  147. sigrevequ20h; "SIGNIFICANT" REVISION LEVEL (COMPATIBILITY)
  148.  
  149.  
  150.  
  151. nopredequ0ffffh; "NO PREDECESSOR"
  152.  
  153. impredequ07fffh; pRED THAT CAN'T BE MATCHED OR BUMPED
  154.  
  155.  
  156.  
  157. ; --- RESERVED CODES ---
  158.  
  159. eofcodequ100h; eof CODE
  160.  
  161. rstcodequ101h; aDAPTIVE RESET CODE
  162.  
  163. nulcodequ102h; nULL CODE
  164.  
  165. sprcodequ103h; sPARE CODE
  166.  
  167.  
  168.  
  169.  endif; uncr
  170.  
  171. ;______________________________________________________________________________
  172.  
  173. ;
  174.  
  175. ; mACROS TO FACILITATE "HORIZONTAL" MOVEMENT THROUGH THE TABLE.
  176.  
  177. ; sEE "tABLE STRUCTURE" COMMENT NEAR "INITBL" FOR MORE INFORMATION.
  178.  
  179. ;
  180.  
  181. right1 macro
  182.  
  183. lda,h; {$7d}
  184.  
  185. adda,10h; {$7d} MOVE "RIGHT" ONE COLUMN (SAME ROW)
  186.  
  187. ldh,a; {$7d}
  188.  
  189.  endm
  190.  
  191. ;
  192.  
  193. ; EXTERNAL ROUTINES
  194.  
  195. ;
  196.  
  197. .REQUESTZSLIB,Z3LIB,SYSLIB
  198.  
  199. ;
  200.  
  201. EXTHVTINIT,HVDINIT,HVCLS,HVON,HVOFF,HPRINT,HPSTR; zslib
  202.  
  203. EXTEATSPC,GCOMNAM,COMNAM
  204.  
  205. EXTZ3INIT,Z3LOG,DIRTDU,ZSYSCHK,ZPRSFN,PUTER2; z3lib
  206.  
  207. EXTGETVID,GETCRT,GETPRT,GETWHL
  208.  
  209. EXTGETUD,PUTUD,LOGUD,SETDMA,INITFCB,BOUT,CAPS; syslib
  210.  
  211. EXTPFN2,PAFDC,F$EXIST,F$OPEN,F$READ,LUINIT,LUREAD
  212.  
  213. EXTLUOPEN,BDOS,BIOS,CAPIN,CODEND
  214.  
  215.  
  216.  
  217. PUBLICCIN,COUT
  218.  
  219.  
  220.  
  221. JPSTART
  222.  
  223.  
  224.  
  225. DB'z3env'
  226.  
  227. DB1
  228.  
  229. Z3EADR:DW0
  230.  
  231. ;
  232.  
  233. ; cONFIGURATION AREA FOR zcnfg
  234.  
  235. ;
  236.  
  237. HDU:DBUSER
  238.  
  239. DBDISK; a=0,b=1 ETC.
  240.  
  241. DB'lbrhlp',VER/10+'0',VER MOD 10+'0'; FOR zcnfg
  242.  
  243. HELPDIR:
  244.  
  245. DB'help    '; HELP DIR
  246.  
  247. DEFFN:DB'menu    '; HELP FILE
  248.  
  249. DEFLBR:DB'hlpfiles'; DEFAULT LBR FILE NAME
  250.  
  251. DEFTYP:DB'h?p'
  252.  
  253. DEFLTYP:
  254.  
  255. DB'lbr'
  256.  
  257. PTRCHK:DB0FFH; 0FFH TO DO PRINTER-READY TEST
  258.  
  259. ;
  260.  
  261. ; START OF PROGRAM -- INITIALIZE ZCPR3 ENVIRONMENT
  262.  
  263. ;
  264.  
  265. START:LDHL,(Z3EADR);PT TO ZCPR3 ENVIRONMENT
  266.  
  267. CALLZSYSCHK;CHECK FOR Z-SYSTEM RUNNING
  268.  
  269. RETNZ;EXIT IF NOT
  270.  
  271. LDSP,STACK; SET LOCAL STACK
  272.  
  273. CALLZ3INIT;INITIALIZE THE ZCPR3 ENV
  274.  
  275. CALLHVTINIT; INITIALIZE THE TERMINAL
  276.  
  277. LDHL,(BDOSE+1)
  278.  
  279. LD(OBUFHI),HL; PTR TO END OF BUFFER
  280.  
  281. CALLMEMBUF; sET UP POINTERS TO BURRERS
  282.  
  283.  
  284.  
  285. XORA; A=0
  286.  
  287. LD(HLPLVL),A; SET HELP LEVEL TO 0 (NO RETURN FILE)
  288.  
  289. LD(STDALN),A; SET TO NOT READING STANDALONE FILE
  290.  
  291. LD(SGLHDU),A; FLAG ALTERNATE DIR NOT TRIED YET
  292.  
  293. LDHL,DFTNAM; POINT TO DEFAULT NAME
  294.  
  295. CALLGCOMNAM; GET DISK NAME
  296.  
  297. LDA,(FCB1+1); GET FIRST CHAR OF FIRST ARG
  298.  
  299. CP'/'
  300.  
  301. JPNZ,NOHELP; SKIP HELP IF NOT /
  302.  
  303. ;
  304.  
  305. ; USAGE SCREEN
  306.  
  307. ;
  308.  
  309. CALLHPRINT
  310.  
  311. DFTNAM:DB'lbrhlp  '
  312.  
  313.  if uncr
  314.  
  315. DB'uncr'
  316.  
  317.  else; unsq
  318.  
  319. DB'unsq'
  320.  
  321.  endif; uncr ELSE unsq
  322.  
  323. DB' vERSION ',VER/10+'0','.',VER MOD 10+'0'
  324.  
  325. DBREV,CR,LF
  326.  
  327. DC'uSAGE:',CR,LF,'  '
  328.  
  329. LDHL,COMNAM
  330.  
  331. CALLHPSTR
  332.  
  333. CALLHPRINT
  334.  
  335. DB' {$7b}-{$7b}DIR:{$7d}LIBRARY{$7d} {$7b}{$7b}DIR:{$7d}HLPFILE{$7d}',CR,LF
  336.  
  337. DB'tHE "-" REQUIRED IF lbr IS SPECIFIED.'
  338.  
  339. DCCR,LF,'  dEFAULT lbr fILE: '
  340.  
  341. LDDE,DEFLBR
  342.  
  343. CALLPLIB
  344.  
  345. CALLHPRINT
  346.  
  347. DCCR,LF,'  dEFAULT hlp fILE: '
  348.  
  349. LDDE,DEFFN
  350.  
  351. CALLPLIB
  352.  
  353. CALLHPRINT
  354.  
  355. DCCR,LF,'  aLTERNATE dir   : '
  356.  
  357. CALLDEFDU
  358.  
  359. JRZ,HLPINF1
  360.  
  361. EXDE,HL
  362.  
  363. CALLPLIB
  364.  
  365. JRHLPINF2
  366.  
  367.  
  368.  
  369. HLPINF1:
  370.  
  371. LDA,B
  372.  
  373. ADDA,'a'
  374.  
  375. CALLBOUT
  376.  
  377. LDA,C
  378.  
  379. CALLPAFDC
  380.  
  381. HLPINF2:
  382.  
  383. CALLHPRINT
  384.  
  385. DB':',CR,LF
  386.  
  387. DB'iF ONLY "HLPFILE" IS GIVEN, PRECEDED BY A DIRECTORY'
  388.  
  389. DBCR,LF
  390.  
  391. DB'SPEC OR COLON, STAND-ALONE hlp FILE IS DISPLAYED.'
  392.  
  393. DBCR,LF
  394.  
  395. DC'iF FILE IS NOT FOUND, "aLTERNATE dir" IS ALSO SEARCHED.'
  396.  
  397. JPHLPEXIT
  398.  
  399.  
  400.  
  401. NOHELP:LDHL,TBUFF+1; GET 1ST TOKEN FROM COMMAND TAIL
  402.  
  403. CALLEATSPC; SKIP LEADING SPACES
  404.  
  405. CP'-'; LIBRARY SPECIFIED?
  406.  
  407. JRNZ,NOLIB
  408.  
  409.  
  410.  
  411. LD(FCB1+1),A; INDICATE THAT 1ST TOKEN WAS LBR NAME
  412.  
  413. INCHL; PT TO LBR NAME
  414.  
  415. JRNOLIB1
  416.  
  417. NOLIB:
  418.  
  419. LDL,TBUFF; h = 0
  420.  
  421. LDC,(HL)
  422.  
  423. LDB,H; b = h = 0, SO bc HAS cpir LEASH
  424.  
  425. INCHL; bUMP PAST COUNT
  426.  
  427. INCBC; gUARD AGAINST bc = 00
  428.  
  429. LDA,':'; sCAN FOR COLON
  430.  
  431. CPIR
  432.  
  433. JRNZ,NOLIB0; nO COLON, CHECK IN DEFAULT lbr
  434.  
  435. LD(STDALN),A; oTHERWISE, FLAG STANDALONE MODE
  436.  
  437. LDDE,FCB1; pOINT TO DEFAULT fcb
  438.  
  439. CALLZ3LOG; lOG IN AS PER cpr
  440.  
  441. CALLPUTUD; sAVE DIRECTORY
  442.  
  443. EXDE,HL; pOINTER TO hl
  444.  
  445. INCHL; bUMP TO NAME
  446.  
  447. LDA,(HL); gRAB FIRST CHARACTER
  448.  
  449. CP' '; bLANK?
  450.  
  451. JPZ,NOFIL; yES, USE DEFAULT HELP FILE NAME
  452.  
  453. JPYESFIL; oTHERWISE USE OURS
  454.  
  455. ;
  456.  
  457. NOLIB0:LDHL,DEFLBR; PT TO DEFAULT LBR NAME
  458.  
  459. ;
  460.  
  461. ; LOOK IN CURRENT DIR
  462.  
  463. ;
  464.  
  465. NOLIB1:LDDE,LUDFCB
  466.  
  467. XORA; DIR: BEFORE DU:
  468.  
  469. CALLZPRSFN; PARSE IN LBR NAME
  470.  
  471. ORA; a HAS COUNT OF "?"S IN ludfcb
  472.  
  473. JRNZ,LFNFND; WHICH MUST BE ZERO FOR z3pLUS
  474.  
  475. LDHL,DEFLTYP
  476.  
  477. PUSHDE
  478.  
  479. LDDE,LBRTYP; MOVE "lbr"
  480.  
  481. LDBC,3
  482.  
  483. LDIR
  484.  
  485. POPDE
  486.  
  487. CALLZ3LOG; LOG INTO FCB'S DU
  488.  
  489. XORA; CLEAR AUTO DRIVE SELECT BYTE IN FCB
  490.  
  491. LD(DE),A
  492.  
  493. CALLF$EXIST; IS LBR IN CURRENT DU?
  494.  
  495. JRNZ,LBRFND
  496.  
  497. ;
  498.  
  499. ; LOOK IN HELP FILE DIRECTORY
  500.  
  501. ;
  502.  
  503. CALLDEFDU
  504.  
  505. CALLLOGUD
  506.  
  507. CALLF$EXIST; LOOK FOR FILE
  508.  
  509. JRNZ,LBRFND
  510.  
  511. ;
  512.  
  513. ; LIBRARY NOT FOUND
  514.  
  515. ;
  516.  
  517. LFNFND:CALLHPRINT
  518.  
  519. DC' lIBRARY fILE '
  520.  
  521. INCDE; PT TO NAME
  522.  
  523. CALLPLIB; PRINT LIBRARY NAME
  524.  
  525.  
  526.  
  527. JRNZ,AMBERR
  528.  
  529. CALLHPRINT
  530.  
  531. NOTFND:DC' nOT fOUND'
  532.  
  533. JRLFNFN1
  534.  
  535. AMBERR:CALLHPRINT
  536.  
  537. DC' HAS AMBIGUOUS CHARACTERS'
  538.  
  539. LFNFN1:JPHLPEXIT1
  540.  
  541. ;
  542.  
  543. ; LIBRARY FOUND SO OPEN IT
  544.  
  545. ;
  546.  
  547. LBRFND:LDDE,LUD
  548.  
  549. CALLLUINIT
  550.  
  551. ;
  552.  
  553. ; CHECK IF LBR NAME GIVEN
  554.  
  555. ;
  556.  
  557. LDHL,FCB1+1; PT TO DEFAULT FCB
  558.  
  559. LDA,(HL); GET FIRST CHAR OF FILE NAME
  560.  
  561. CP' '
  562.  
  563. JRZ,NOFIL; IF NO FILE OR LIBRARY
  564.  
  565.  
  566.  
  567. CP'-'; WAS LBR SPECIFIED?
  568.  
  569. JRNZ,CHKFIL; NO
  570.  
  571.  
  572.  
  573. LDHL,FCB2+1; GET SECOND ARG
  574.  
  575. LDA,(HL)
  576.  
  577. CHKFIL:CP' '
  578.  
  579. JRZ,NOFIL
  580.  
  581.  
  582.  
  583. CP'?'; IS IT A WILD CARD?
  584.  
  585. JRNZ,YESFIL; IT WASN'T
  586.  
  587.  
  588.  
  589. ; OTHERWISE LOAD DEFAULT FILENAME
  590.  
  591. NOFIL:LDHL,DEFFN; GET DEFAULT FILENAME
  592.  
  593. YESFIL:LDDE,LFCB; MOVE FILENAME IN
  594.  
  595. LDBC,8
  596.  
  597. LDIR
  598.  
  599. ;
  600.  
  601. ; START/RESTART HELP PROGRAM (START ON INITIAL ENTRY, RESTART ON NODE LOAD)
  602.  
  603. ;
  604.  
  605. STRT1:LDSP,STACK; RESET THE STACK
  606.  
  607. LDDE,LFCB+8
  608.  
  609. LDHL,DEFTYP; GET DEFAULT TYPE
  610.  
  611. LDBC,3
  612.  
  613. LDIR; MOVE TYPE
  614.  
  615. LDHL,LFCB; PT TO FILE NAME
  616.  
  617. LDA,(STDALN)
  618.  
  619. ORA
  620.  
  621. JRNZ,STRT2
  622.  
  623. LDDE,LUD; PT TO LBR BUFFERS
  624.  
  625. CALLLUOPEN; OPEN FILE
  626.  
  627. JPZ,FILFND
  628.  
  629. JRHFNF1
  630.  
  631. STRT2:EXDE,HL
  632.  
  633. DECDE
  634.  
  635. CALLGETUD
  636.  
  637. STRT3:LDHL,TBUFF
  638.  
  639. CALLNZ,SETDMA
  640.  
  641. CALLINITFCB
  642.  
  643. CALLF$EXIST
  644.  
  645. STRT4:JRZ,HFNFND
  646.  
  647. DECA
  648.  
  649. RRCA
  650.  
  651. RRCA
  652.  
  653. RRCA
  654.  
  655. ADDA,L
  656.  
  657. LDL,A
  658.  
  659. PUSHHL
  660.  
  661. LDBC,10
  662.  
  663. ADDHL,BC
  664.  
  665. LDA,(HL)
  666.  
  667. POPHL
  668.  
  669. AND7FH
  670.  
  671.  if uncr
  672.  
  673. CP'z'
  674.  
  675.  else; unsq
  676.  
  677. CP'q'
  678.  
  679.  endif; uncr ELSE unsq
  680.  
  681. JRZ,HFOPEN
  682.  
  683. CP'l'
  684.  
  685. JRZ,HFOPEN
  686.  
  687. LDC,18
  688.  
  689. CALLBDOS
  690.  
  691. LDHL,TBUFF
  692.  
  693. INCA
  694.  
  695. JRSTRT4
  696.  
  697.  
  698.  
  699. HFOPEN:LDDE,LUDFN-1
  700.  
  701. LDBC,12
  702.  
  703. PUSHDE
  704.  
  705. PUSHHL
  706.  
  707. LDIR
  708.  
  709. POPHL
  710.  
  711. LDDE,LFCB-1
  712.  
  713. LDC,12; b = 0
  714.  
  715. LDIR
  716.  
  717. POPDE
  718.  
  719. CALLINITFCB
  720.  
  721. CALLF$OPEN
  722.  
  723. JRZ,FILFND
  724.  
  725. ;
  726.  
  727. ; FILE NOT FOUND SO PRINT FILE NAME AND EXIT
  728.  
  729. ;
  730.  
  731. HFNFND:LDHL,SGLHDU
  732.  
  733. LDA,(HL)
  734.  
  735. ORA
  736.  
  737. JRNZ,HFNF1
  738.  
  739. DEC(HL)
  740.  
  741. CALLDEFDU
  742.  
  743. CALLLOGUD
  744.  
  745. XORA
  746.  
  747. JRSTRT3
  748.  
  749. HFNF1:CALLHPRINT
  750.  
  751. HFSTR:DC' hELP fILE '
  752.  
  753. LDDE,LFCB; PT TO FILE NAME
  754.  
  755. CALLPFN2; PRINT NAME
  756.  
  757. LDHL,NOTFND
  758.  
  759. CALLHPSTR
  760.  
  761. LDA,(STDALN)
  762.  
  763. ORA
  764.  
  765. JRNZ,HFNF2
  766.  
  767. CALLHPRINT
  768.  
  769. DC' IN '
  770.  
  771. LDDE,LBRNAME
  772.  
  773. CALLPFN2
  774.  
  775. HFNF2:JRJRHLPX
  776.  
  777. ;
  778.  
  779. ; CHECK FILE TYPE FOR 'q' OR 'z'
  780.  
  781. ; IF CRUNCHED RUN THROUGH UNCRUNCH
  782.  
  783. ; OTHERWISE WRITE OUT FILE TO HELP BUFFER
  784.  
  785. ;
  786.  
  787. FILFND:LDA,(LUDTYP)
  788.  
  789. AND7FH; CLEAR ANY ATTRIBUTES
  790.  
  791.  if uncr
  792.  
  793. CP'z'
  794.  
  795. JPZ,UNCRIT
  796.  
  797.  else; unsq
  798.  
  799. CP'q'
  800.  
  801. JPZ,UNSQIT
  802.  
  803.  endif; uncr ELSE unsq
  804.  
  805. CP'l'
  806.  
  807. JRZ,NCMPRS
  808.  
  809.  
  810.  
  811. LDHL,HFSTR
  812.  
  813. CALLHPSTR
  814.  
  815. LDDE,LUDFN; PT TO FILE NAME
  816.  
  817. CALLPLIB; PRINT NAME
  818.  
  819. CALLHPRINT
  820.  
  821. DC' IN '
  822.  
  823. LDDE,LBRNAME
  824.  
  825. CALLPFN2
  826.  
  827. CALLHPRINT
  828.  
  829. DCCR,LF,' HAS THE UNSUPPORTED FILETYPE "'
  830.  
  831. CALLHVON
  832.  
  833. LDB,3
  834.  
  835. LDHL,LUDTYP-1
  836.  
  837. WRGTYP:LDA,(HL)
  838.  
  839. CALLCOUT
  840.  
  841. INCHL
  842.  
  843. DJNZWRGTYP
  844.  
  845. CALLHVOFF
  846.  
  847. LDA,'"'
  848.  
  849. CALLCOUT
  850.  
  851. JRHLPX:JRHLPEXIT1
  852.  
  853. ;
  854.  
  855. ; THIS IS USED TO EXTRACT FILES AND NOT UNSQ OR UNCR
  856.  
  857. ;
  858.  
  859. NCMPRS:LDHL,(OBUFHI); GET HIGHEST AVAILABLE MEMORY
  860.  
  861. LDDE,-80H; .. MINUS 1 SECTOR
  862.  
  863. ADDHL,DE
  864.  
  865. LDC,L; MOVE TO BC
  866.  
  867. LDB,H
  868.  
  869. CALLCODEND; OUTPUT BUFFER STARTS JUST ABOVE PROGRAM
  870.  
  871. LD(OUTBUF),HL
  872.  
  873. LDDE,LUD
  874.  
  875.  
  876.  
  877. ; READ FILE DIRECTLY INTO OUTPUT BUFFER
  878.  
  879.  
  880.  
  881. INLOOP:CALLSETDMA
  882.  
  883. LDA,(STDALN)
  884.  
  885. ORA
  886.  
  887. JRNZ,INLP1
  888.  
  889. CALLLUREAD; READ A SECTOR FROM LBR
  890.  
  891. JRINLP2
  892.  
  893. INLP1:LDDE,LUDFN-1
  894.  
  895. CALLF$READ
  896.  
  897. INLP2:JRNZ,HELP; DONE IF END OF FILE
  898.  
  899. LDA,B; SAVE b
  900.  
  901. LDB,80H
  902.  
  903. MASKLP:RES7,(HL); CLEAR HIGH BIT
  904.  
  905. INCHL; ..OF EACH CHARACTER READ
  906.  
  907. DJNZMASKLP
  908.  
  909. LDB,A; RESTORE b
  910.  
  911. SBCHL,BC; CHECK FOR OVERFLOW
  912.  
  913. ADDHL,BC; RESTORE VALUE IN HL WITHOUT AFFECTING FLAGS
  914.  
  915. JRC,INLOOP
  916.  
  917. JPTOOBIG
  918.  
  919. ;
  920.  
  921. ; START OF HELP PROGRAM
  922.  
  923. ;
  924.  
  925. HELP:LDSP,STACK; INSURE GOOD STACK
  926.  
  927. LDHL,(OUTBUF); PT TO BUFFER
  928.  
  929. XORA; SET NO FRAME
  930.  
  931. LD(FRNUM),A
  932.  
  933. LD(SGLHDU),A; rESET ALTERNATE DIR FLAG
  934.  
  935. LDA,(HL); NO HEADER SECTION?
  936.  
  937. AND7FH; MASK OUT MSB
  938.  
  939. CPSECTCHAR
  940.  
  941. JRNZ,HELP1; HEADER SECTION EXISTS
  942.  
  943. INCHL; SKIP OVER SECTCHAR
  944.  
  945. CALLCLSCR; NEW SCREEN
  946.  
  947. CALLPRINFO; PRINT HELP INFO PTED TO BY HL
  948.  
  949. LDA,(HLPLVL); CHECK TO SEE IF WE ARE NOT AT LEVEL 0
  950.  
  951. ORA; 0=LEVEL 0
  952.  
  953. JPNZ,LRURN; GO TO PREVIOUS LEVEL IF NOT
  954.  
  955. ;
  956.  
  957. ; EXIT POINT FOR ANY EXIT FROM THE REST OF THE HELP PROGRAM
  958.  
  959. ;
  960.  
  961. HLPEXIT:
  962.  
  963. XORA; CLEAR ERROR FLAG
  964.  
  965. JRHLPEXT2
  966.  
  967. HLPEXIT1:
  968.  
  969. LDA,0FFH; SET ERROR FLAG
  970.  
  971. HLPEXT2:
  972.  
  973. CALLPUTER2; SET OR CLEAR ERROR FLAG
  974.  
  975. CALLHVDINIT
  976.  
  977. RST0; REBOOT BECAUSE WE MAY HAVE OVERWRITTEN ccp
  978.  
  979.  
  980.  
  981. ; sUBROUTINE TO RETURN "dEFAULT dir" DU IN bc REGISTER
  982.  
  983.  
  984.  
  985. DEFDU:LDHL,HELPDIR; LOOK FOR HELP DIRECTORY
  986.  
  987. PUSHHL
  988.  
  989. CALLDIRTDU; CONVERT TO DU IN BC
  990.  
  991. POPHL
  992.  
  993. RETNZ; LOG INTO DU IN BC IF FOUND
  994.  
  995. LDBC,(HDU); LOG INTO HELP DIRECTORY
  996.  
  997. RET
  998.  
  999. ;
  1000.  
  1001. ; PRINT HEADER INFORMATION AND SELECT AN OPTION
  1002.  
  1003. ;
  1004.  
  1005. HELP1:CALLPRHEADER; PRINT HEADER
  1006.  
  1007. PUSHBC; SAVE C (NUMBER OF VALID SELECTIONS)
  1008.  
  1009. CALLCRLF1; NEW LINE
  1010.  
  1011. CALLHVON; GOTO DIM
  1012.  
  1013. CALLPRLEVEL; PRINT LEVEL NUMBER
  1014.  
  1015. CALLHPRINT
  1016.  
  1017. DC'eNTER sELECTION  '
  1018.  
  1019. CALLPRP1; PRINT LEVEL MOVEMENT PROMPT
  1020.  
  1021. CALLHVOFF; GOTO BRIGHT
  1022.  
  1023. POPBC; GET C
  1024.  
  1025. CALLCIN; GET RESPONSE
  1026.  
  1027. CALLCAPS; CAPITALIZE
  1028.  
  1029. PUSHAF
  1030.  
  1031. CALLCLSCR; CLEAR SCREEN
  1032.  
  1033. POPAF
  1034.  
  1035. CALLCKABORT; EXIT?
  1036.  
  1037. JRZ,HLPEXIT
  1038.  
  1039. CPROOTCHAR; GO TO ROOT
  1040.  
  1041. JPZ,GOROOT
  1042.  
  1043. CALLCKLEVEL; RETURN TO PREVIOUS LEVEL?
  1044.  
  1045. JPZ,LRURN
  1046.  
  1047. LDB,A; USER INPUT IN B
  1048.  
  1049. LDA,(HTYPE); TYPE OF HELP FILE
  1050.  
  1051. CPIHCHAR; INDEXED BY USER?
  1052.  
  1053. JRZ,HELP5; FIND INFORMATION SECTION VIA INDEX SCAN
  1054.  
  1055. LDA,B; FIND INFORMATION SECITON VIA COUNT
  1056.  
  1057. SUB'a'-1; ADJUST FOR COUNT
  1058.  
  1059. LDB,A; SAVE COUNT
  1060.  
  1061. JRZ,BADRESPONSE
  1062.  
  1063. JRNC,HELP2
  1064.  
  1065. ;
  1066.  
  1067. ; INVALID RESPONSE
  1068.  
  1069. ;
  1070.  
  1071. BADRESPONSE:
  1072.  
  1073. CALLSAK; RING BELL
  1074.  
  1075. JRHELP1
  1076.  
  1077. ;
  1078.  
  1079. ; VALID RESPONSE -- LOOK FOR AND PRINT INFORMATION SECTION
  1080.  
  1081. ;
  1082.  
  1083. HELP2:INCC; 1 MORE THAN NUMBER OF POSSIBLE SELECTIONS
  1084.  
  1085. CPC; GREATER THAN NUMBER OF POSSIBLE SELECTIONS?
  1086.  
  1087. JRNC,BADRESPONSE
  1088.  
  1089. LDHL,(FIRSTENTRY); GET PTR TO FIRST ENTRY
  1090.  
  1091. ;
  1092.  
  1093. ; PRINT INFORMATION WHEN COUNT IS ZERO
  1094.  
  1095. ;
  1096.  
  1097. HELP3:DJNZHELP4; COUNT DOWN SELECTIONS
  1098.  
  1099. INCHL; SKIP OVER SECTCHAR
  1100.  
  1101. CALLPRINFO; PRINT INFO PTED TO BY HL
  1102.  
  1103. JRHELP1
  1104.  
  1105. ;
  1106.  
  1107. ; LOCATE NEXT INFORMATION SECTION
  1108.  
  1109. ;
  1110.  
  1111. HELP4:CALLFINDI; SKIP TO NEXT INFORMATION SECTION
  1112.  
  1113. CPCTRLZ; END OF FILE?
  1114.  
  1115. JRNZ,HELP3; CONTINUE LOOPING IF NOT ELSE FALL THRU TO HELPERR
  1116.  
  1117. ;
  1118.  
  1119. ; ERROR -- REACHED END OF HELP FILE
  1120.  
  1121. ;
  1122.  
  1123. HELPERR:
  1124.  
  1125. CALLHPRINT
  1126.  
  1127. DCCR,LF,' eof ON hELP fILE'
  1128.  
  1129. JPHELP1
  1130.  
  1131. ;
  1132.  
  1133. ; LOCATE NEXT INFORMATION SECTION VIA INDEX SCAN
  1134.  
  1135. ;
  1136.  
  1137. HELP5:LDHL,(FIRSTENTRY); PT TO FIRST ENTRY
  1138.  
  1139. ;
  1140.  
  1141. ; LOOK FOR USER INDEX
  1142.  
  1143. ;
  1144.  
  1145. HELP6:PUSHHL; SAVE PTR TO THIS LINE
  1146.  
  1147. HELP7:INCHL; SKIP OVER SECTION CHAR
  1148.  
  1149. LDA,(HL); GET CHAR
  1150.  
  1151. CALLCAPS; CAPITALIZE
  1152.  
  1153. CP' '; SKIP SPACES
  1154.  
  1155. JRZ,HELP7
  1156.  
  1157. CPSECTCHAR; NEW SECTION?
  1158.  
  1159. JRZ,HELP8; FIND NEXT SECTION
  1160.  
  1161. CPCR; END OF LINE?
  1162.  
  1163. JRZ,HELP8; FIND NEXT SECTION
  1164.  
  1165. CPCTRLZ; EOF?
  1166.  
  1167. JRZ,HELP8
  1168.  
  1169. CPB; CHECK FOR USER INPUT
  1170.  
  1171. JRNZ,HELP7
  1172.  
  1173. POPHL; FOUND IT -- PRINT IT
  1174.  
  1175. INCHL; SKIP OVER SECTION CHAR
  1176.  
  1177. HELP7A:LDA,(HL); SKIP TO BEGINNING FOR 1ST LINE
  1178.  
  1179. INCHL; PT TO NEXT
  1180.  
  1181. AND7FH
  1182.  
  1183. CPCTRLZ; TRAP EOF
  1184.  
  1185. JRZ,BADRESPONSE
  1186.  
  1187. CPSECTCHAR; FILE SPECIFIED?
  1188.  
  1189. JRZ,HELP7B; PROCESS IT
  1190.  
  1191. CPLF; BEGIN NEW LINE
  1192.  
  1193. JRZ,HELP7C
  1194.  
  1195. CPCR; AT END OF INDEX LINE?
  1196.  
  1197. JRNZ,HELP7A
  1198.  
  1199. LDA,(HL); GET LF
  1200.  
  1201. AND7FH
  1202.  
  1203. CPLF; SKIP FOLLOWING LF IF ANY
  1204.  
  1205. JRNZ,HELP7C
  1206.  
  1207. INCHL; SKIP LF
  1208.  
  1209. JRHELP7C
  1210.  
  1211. ;
  1212.  
  1213. ; LOAD NEXT HELP LEVEL
  1214.  
  1215. ;
  1216.  
  1217. HELP7B:DECHL; PT TO SECTION CHAR
  1218.  
  1219. ;
  1220.  
  1221. ; PROCESS HELP LEVEL OR LOAD AND PROCESS NEXT LEVEL PTED TO BY HL
  1222.  
  1223. ;
  1224.  
  1225. HELP7C:CALLPRINFO; PRINT INFORMATION SECTION
  1226.  
  1227. JPHELP1; RESUME
  1228.  
  1229. HELP8:
  1230.  
  1231. POPHL; PT TO INFO SECTION
  1232.  
  1233. CALLFINDI; FIND NEXT INFO SECTION
  1234.  
  1235. CPCTRLZ; EOF?
  1236.  
  1237. JRNZ,HELP6; KEEP LOOKING
  1238.  
  1239. JPBADRESPONSE
  1240.  
  1241. ;
  1242.  
  1243. ; SKIP TO NEXT INFORMATION SECTIONS
  1244.  
  1245. ;   RETURN WITH A=SECTCHAR IF FOUND OR A=^Z IF NOT
  1246.  
  1247. ;
  1248.  
  1249. FINDI:LDA,(HL); <CTRL-Z>?
  1250.  
  1251. AND7FH; MASK OUT MSB
  1252.  
  1253. INCHL; PT TO NEXT BYTE
  1254.  
  1255. CPCTRLZ
  1256.  
  1257. RETZ
  1258.  
  1259. CPLF; LINE FEED?
  1260.  
  1261. JRZ,FINDI1
  1262.  
  1263. CPCR; <CR>?
  1264.  
  1265. JRNZ,FINDI
  1266.  
  1267. LDA,(HL); MAKE SURE LF
  1268.  
  1269. AND7FH
  1270.  
  1271. CPLF
  1272.  
  1273. JRNZ,FINDI1
  1274.  
  1275. INCHL; SKIP OVER LF
  1276.  
  1277. FINDI1:LDA,(HL); GET CHAR
  1278.  
  1279. AND7FH; MASK OUT MSB
  1280.  
  1281. CPSECTCHAR; NEW SECTION?
  1282.  
  1283. JRNZ,FINDI; CONTINUE LOOPING
  1284.  
  1285. RET
  1286.  
  1287. ;
  1288.  
  1289. ; HELP SUPPORT ROUTINE SECTION
  1290.  
  1291. ;
  1292.  
  1293. ; PRINT ONE LINE OF INFO SECTION; HL PTS TO LINE UPON ENTRY;
  1294.  
  1295. ;HL PTS TO FIRST CHAR OF NEXT LINE UPON EXIT
  1296.  
  1297. ;
  1298.  
  1299. PRLINE:LDA,(HL); GET CHAR
  1300.  
  1301. AND7FH; MASK OUT MSB
  1302.  
  1303. CPCR; EOL?
  1304.  
  1305. JRZ,CRLF
  1306.  
  1307. CPLF; LINE FEED? (WS FILE)
  1308.  
  1309. JRZ,CRLF0
  1310.  
  1311. CPCTRLZ; END OF FILE?
  1312.  
  1313. JRZ,CRLFC; DONE IF SO
  1314.  
  1315. INCHL; PT TO NEXT
  1316.  
  1317. CPDIM; GOTO STANDOUT MODE?
  1318.  
  1319. JRZ,PRLDIM
  1320.  
  1321. CPNDIM; GOTO NORMAL MODE?
  1322.  
  1323. JRZ,PRLNDIM
  1324.  
  1325. CALLBOUT; PRINT CHAR
  1326.  
  1327. JRPRLINE
  1328.  
  1329. PRLDIM:
  1330.  
  1331. CALLHVON; ENTER STANDOUT MODE
  1332.  
  1333. JRPRLINE
  1334.  
  1335. PRLNDIM:
  1336.  
  1337. CALLHVOFF; END STANDOUT MODE
  1338.  
  1339. JRPRLINE
  1340.  
  1341. ;
  1342.  
  1343. ; PRINT CRLF, PT TO FIRST CHAR OF NEXT LINE, AND PAGE IF NECESSARY
  1344.  
  1345. ;
  1346.  
  1347. CRLF:INCHL; PT TO LF
  1348.  
  1349. CRLF0:INCHL; PT TO 1ST CHAR OF NEXT LINE
  1350.  
  1351. CRLFC:CALLCRLF1; PRINT CRLF
  1352.  
  1353. LDA,(LCOUNT); GET LINE COUNT
  1354.  
  1355. DECA
  1356.  
  1357. LD(LCOUNT),A
  1358.  
  1359. RETNZ; OK -- CONTINUE
  1360.  
  1361. LDA,(HL); GET NEXT CHAR
  1362.  
  1363. AND7FH
  1364.  
  1365. CPSECTCHAR; NEW SECTION?
  1366.  
  1367. RETZ; DON'T PAGE IF SO
  1368.  
  1369. CPFF; FORMFEED?
  1370.  
  1371. RETZ
  1372.  
  1373. CPCTRLZ; EOF
  1374.  
  1375. RET Z
  1376.  
  1377. CRLFC1:
  1378.  
  1379. SET7,(HL); SET MSB OF FIRST CHAR OF NEXT LINE
  1380.  
  1381. CALLPRPROMPT; PRINT PROMPT AND PROCESS COMMON OPTIONS
  1382.  
  1383. CPBACKUPCHAR; BACK UP?
  1384.  
  1385. JPZ,FBACKUP
  1386.  
  1387. CPSTRTCHAR; JUMP TO START OF INFO
  1388.  
  1389. JPZ,INFOSTRT
  1390.  
  1391. FRESUME:
  1392.  
  1393. LD(STRTFRAME),HL
  1394.  
  1395. JPSETLCOUNT
  1396.  
  1397. ;
  1398.  
  1399. ; PRINT PROMPT AND PROCESS COMMON OPTIONS
  1400.  
  1401. ;
  1402.  
  1403. PRPROMPT:
  1404.  
  1405. CALLHVON; GOTO DIM
  1406.  
  1407. CALLPRLEVEL; PRINT LEVEL NUMBER
  1408.  
  1409. LDA,(FRNUM); INCREMENT FRAME NUMBER
  1410.  
  1411. INCA
  1412.  
  1413. LD(FRNUM),A
  1414.  
  1415. CALLPRP1; PRINT FUNDAMENTAL LEVEL DATA PROMPT
  1416.  
  1417. CALLHPRINT
  1418.  
  1419. DBMENUCHAR,'=mENU ' ; ABORT TO MENU CHAR
  1420.  
  1421. DBSTRTCHAR,'=sTART ' ; JUMP TO START OF INFORMATION CHAR
  1422.  
  1423. DCBACKUPCHAR,'=lAST ' ; BACK UP TO PREVIOUS FRAME CHAR
  1424.  
  1425. CALLGETWHL
  1426.  
  1427. JRZ,PRPR1
  1428.  
  1429. CALLHPRINT
  1430.  
  1431. DCPRCHAR,'=pRINT ' ; PRINT CURRENT FRAME
  1432.  
  1433. PRPR1:CALLHVOFF; GOTO BRIGHT
  1434.  
  1435. CALLCAPIN; GET RESPONSE
  1436.  
  1437. PUSHAF
  1438.  
  1439. CALLCLSCR; CLEAR SCREEN
  1440.  
  1441. POPAF
  1442.  
  1443. POPDE; CLEAR STACK
  1444.  
  1445. CALLCKABORT; ABORT TO OS?
  1446.  
  1447. JPZ,HLPEXIT
  1448.  
  1449. LDB,A; SAVE COMMAND CHAR
  1450.  
  1451. CALLGETWHL
  1452.  
  1453. LDA,B
  1454.  
  1455. JRZ,PRPR2
  1456.  
  1457. CPPRCHAR; PRINT FRAME?
  1458.  
  1459. JPZ,LIST0INFO
  1460.  
  1461. CPCPRCHAR; PRINT INFORMATION SECTION?
  1462.  
  1463. JPZ,LIST1INFO
  1464.  
  1465. PRPR2:
  1466.  
  1467. CPROOTCHAR; GO TO ROOT
  1468.  
  1469. JPZ,GOROOT
  1470.  
  1471. CALLCKLEVEL; RETURN TO HIGHER LEVEL?
  1472.  
  1473. JPZ,LRURN
  1474.  
  1475. PUSHDE; RESTORE STACK
  1476.  
  1477. CPMENUCHAR; REDISPLY MENU?
  1478.  
  1479. RETNZ
  1480.  
  1481.  
  1482.  
  1483. LDHL,(OUTBUF); PT TO BUFFER
  1484.  
  1485. LDA,(HL); NO HEADER SECTION?
  1486.  
  1487. AND7FH; MASK OUT MSB
  1488.  
  1489. CPSECTCHAR
  1490.  
  1491. JPZ,LRURN; GO TO HIGHER LEVEL IF NO HEADER SECTION
  1492.  
  1493. JPHELP; ELSE START FROM HEADER SECTION AT THIS LEVEL
  1494.  
  1495. ;
  1496.  
  1497. ; PRINT FUNDAMENTAL LEVEL PROMPT
  1498.  
  1499. ;
  1500.  
  1501. PRP1:CALLHPRINT
  1502.  
  1503. DC'esc=eXIT '
  1504.  
  1505. LDA,(HLPLVL); DON"T PRINT IF AT LEVEL 0
  1506.  
  1507. ORA
  1508.  
  1509. RETZ
  1510.  
  1511. CALLHPRINT
  1512.  
  1513. DBLRCHAR2,'=^lEVEL ' ; RETURN TO HIGHER NODE
  1514.  
  1515. DCROOTCHAR,'=rOOT ' ; RETURN TO ROOT
  1516.  
  1517. RET
  1518.  
  1519. ;
  1520.  
  1521. ; JUMP TO START OF INFORMATION
  1522.  
  1523. ;
  1524.  
  1525. INFOSTRT:
  1526.  
  1527. LDHL,(STRTINFO); PT TO START OF INFO
  1528.  
  1529. LDA,1; RESET FRAME COUNT
  1530.  
  1531. LD(FRNUM),A
  1532.  
  1533. JPFRESUME; CONTINUE PROCESSING
  1534.  
  1535. ;
  1536.  
  1537. ; BACK UP TO PREVIOUS FRAME
  1538.  
  1539. ;
  1540.  
  1541. FBACKUP:
  1542.  
  1543. CALLBOICHECK; AT BEGINNING OF INFORMATION?
  1544.  
  1545. JRZ,INFOSTRT
  1546.  
  1547. FB1:
  1548.  
  1549. DECHL; BACK UP UNTIL BYTE WITH MSB SET IS FOUND
  1550.  
  1551. BIT7,(HL)
  1552.  
  1553. JRZ,FB1
  1554.  
  1555. LDA,(FRNUM); DECREMENT FRAME NUMBER
  1556.  
  1557. DECA; BACK UP TO CURRENT FRAME NUMBER
  1558.  
  1559. DECA; BACK UP TO PREVIOUS FRAME NUMBER
  1560.  
  1561. LD(FRNUM),A
  1562.  
  1563. JPFRESUME; CONTINUE PROCESSING
  1564.  
  1565. ;
  1566.  
  1567. ; cLEAR SCREEN; PRINT CRLF IF NO tcap
  1568.  
  1569. ;
  1570.  
  1571. CLSCR:PUSHHL
  1572.  
  1573. CALLGETVID
  1574.  
  1575. JRZ,NOCLS
  1576.  
  1577. PUSHDE
  1578.  
  1579. LDDE,17H
  1580.  
  1581. ADDHL,DE
  1582.  
  1583. LDA,(HL)
  1584.  
  1585. POPDE
  1586.  
  1587. ORA
  1588.  
  1589. NOCLS:POPHL
  1590.  
  1591. JPNZ,HVCLS
  1592.  
  1593. ; FALL THRU TO CRLF1 IF NO CLS FUNCTION
  1594.  
  1595. ;
  1596.  
  1597. ; PRINT CR AND LF ONLY
  1598.  
  1599. ;
  1600.  
  1601. CRLF1:LDA,CR; PRINT CR
  1602.  
  1603. CALLBOUT
  1604.  
  1605. LDA,LF; PRINT LF
  1606.  
  1607. JPBOUT
  1608.  
  1609. ;
  1610.  
  1611. ; SET LCOUNT VARIABLE TO SCREEN SIZE
  1612.  
  1613. ;
  1614.  
  1615. SETLCOUNT:
  1616.  
  1617. PUSHHL
  1618.  
  1619. CALLGETCRT
  1620.  
  1621. INCHL; GET NUMBER OF LINES ON CRT
  1622.  
  1623. LDA,(HL)
  1624.  
  1625. DECA; 1 LESS FOR PROMPT
  1626.  
  1627. LD(LCOUNT),A
  1628.  
  1629. POPHL
  1630.  
  1631. RET
  1632.  
  1633. ;
  1634.  
  1635. ; PRINT THE HEADER SECTION AND LOAD FIRSTENTRY PTR
  1636.  
  1637. ;   ON RETURN, C=NUMBER OF POSSIBLE SELECTIONS
  1638.  
  1639. ;
  1640.  
  1641. PRHEADER:
  1642.  
  1643. XORA; SET NO FRAME
  1644.  
  1645. LD(FRNUM),A
  1646.  
  1647. CALLSETLCOUNT
  1648.  
  1649. SUB3; -3 LINES FOR TOP AND BOTTOM
  1650.  
  1651. LD(LCOUNT),A
  1652.  
  1653. LDA,'a'; INIT SELECTION CHAR
  1654.  
  1655. LD(SELCHAR),A
  1656.  
  1657. CALLCLSCR; CLEAR SCREEN
  1658.  
  1659. CALLHPRINT
  1660.  
  1661. DB'lBRHLP '
  1662.  
  1663. DB(VER/10)+'0','.',(VER MOD 10)+'0'
  1664.  
  1665. DCREV,'   '
  1666.  
  1667. LDDE,LUDFN; PT TO FCB
  1668.  
  1669. CALLPLIB; PRINT WITH NO SPACES
  1670.  
  1671. CALLHPRINT
  1672.  
  1673. DC' iNDEX',CR,LF,LF
  1674.  
  1675. LDC,0; COUNT NUMBER OF SELECTIONS
  1676.  
  1677. LDHL,(OUTBUF); PT TO BUFFER
  1678.  
  1679. LDA,(HL); GET FIRST CHAR
  1680.  
  1681. LD(HTYPE),A; SET TYPE OF HELP FILE
  1682.  
  1683. CPIHCHAR; INDEXED HELP TYPE?
  1684.  
  1685. JRNZ,PH1
  1686.  
  1687. INCHL; SKIP OVER INDEX HELP TYPE FLAG
  1688.  
  1689. ;
  1690.  
  1691. ; PRINT LINE UNTIL FIRST INFORMATION SECTION FOUND
  1692.  
  1693. ;
  1694.  
  1695. PH1:LDA,(HL); GET CHAR
  1696.  
  1697. AND7FH; MASK OUT MSB
  1698.  
  1699. CPSECTCHAR
  1700.  
  1701. JRZ,PH2
  1702.  
  1703. CPCTRLZ; EOF? -- ABORT
  1704.  
  1705. JPZ,HLPEXIT
  1706.  
  1707. INCC; INCREMENT SELECTION COUNT
  1708.  
  1709. LDA,(HTYPE); CHECK FOR INDEX
  1710.  
  1711. CPIHCHAR
  1712.  
  1713. JRZ,PH1A; SKIP LETTERS IF INDEXED
  1714.  
  1715. LDA,(SELCHAR); DISPLAY SELECTION CHAR
  1716.  
  1717. CALLBOUT
  1718.  
  1719. INCA; INCR CHAR
  1720.  
  1721. LD(SELCHAR),A
  1722.  
  1723. CALLHPRINT
  1724.  
  1725. DC'. '
  1726.  
  1727. PH1A:CALLPRLINE; PRINT HEADER LINE
  1728.  
  1729. JRPH1
  1730.  
  1731. ;
  1732.  
  1733. ; SAVE PTR TO FIRST ENTRY
  1734.  
  1735. ;
  1736.  
  1737. PH2:LD(FIRSTENTRY),HL
  1738.  
  1739. LDA,(LCOUNT); GET COUNT OF REMAINING LINES
  1740.  
  1741. LDB,A; ... IN B
  1742.  
  1743. ORA; ANY LEFT?
  1744.  
  1745. RETZ
  1746.  
  1747. SKIPOUT:
  1748.  
  1749. CALLCRLF1; NEW LINE
  1750.  
  1751. DJNZSKIPOUT
  1752.  
  1753. RET
  1754.  
  1755. ;
  1756.  
  1757. ; PRINT AN INFORMATION SECTION
  1758.  
  1759. ;   INFORMATION SECTION IS PTED TO BY HL
  1760.  
  1761. ;
  1762.  
  1763. PRINFO:LD(STRTINFO),HL; SET START OF INFORMATION POINTER
  1764.  
  1765. CALLLDNOD; LOAD NEW NODE IF DUAL SECTCHAR
  1766.  
  1767. LD(STRTFRAME),HL; SET FRAME POINTER
  1768.  
  1769. SET7,(HL); SET MSB
  1770.  
  1771. CALLSETLCOUNT
  1772.  
  1773. LDA,1; A=1
  1774.  
  1775. LD(FRNUM),A; SET FRAME NUMBER
  1776.  
  1777. PI1:CALLPRLINE; PRINT LINE FROM INFO FILE
  1778.  
  1779. LDA,(HL); DONE?
  1780.  
  1781. AND7FH; MASK OUT MSB
  1782.  
  1783. CPCTRLZ; EOF?
  1784.  
  1785. JRZ,PI2
  1786.  
  1787. CPSECTCHAR; NEXT SECTION
  1788.  
  1789. JRZ,PI2
  1790.  
  1791. CPFF; FORM FEED?
  1792.  
  1793. JRNZ,PI1
  1794.  
  1795. INCHL; PT TO CHAR AFTER FORM FEED
  1796.  
  1797. CALLFORMFEED; FEED SCREEN
  1798.  
  1799. JRPI1
  1800.  
  1801. ;
  1802.  
  1803. ; FORM FEED SCREEN
  1804.  
  1805. ;
  1806.  
  1807. FORMFEED:
  1808.  
  1809. LDA,(LCOUNT); GET LINE COUNT
  1810.  
  1811. LDB,A; ... IN B
  1812.  
  1813. ORA; 0 ALREADY?
  1814.  
  1815. CALLNZ,SKIPOUT; PRINT BLANK LINES IF NOT
  1816.  
  1817. JPCRLFC1; GO TO END OF SCREEN PROCESSING
  1818.  
  1819. ;
  1820.  
  1821. ; END OF INFO
  1822.  
  1823. ;
  1824.  
  1825. PI2:SET7,(HL); SET MSB OF NEXT BYTE
  1826.  
  1827. LDA,(LCOUNT); GET LINE COUNT
  1828.  
  1829. ORA
  1830.  
  1831. LDB,A
  1832.  
  1833. CALLNZ,SKIPOUT
  1834.  
  1835. PI2MSG:
  1836.  
  1837. CALLHPRINT; PRINT END OF INFORMATION INDICATOR
  1838.  
  1839. DC'eoi '
  1840.  
  1841. CALLPRPROMPT; PRINT PROMPT AND PROCESS COMMON OPTIONS
  1842.  
  1843. CPBACKUPCHAR; BACK UP FROM EOI?
  1844.  
  1845. JRZ,PI2BACKUP
  1846.  
  1847. CPSTRTCHAR; START OF INFO?
  1848.  
  1849. JRZ,PI2STRT
  1850.  
  1851. JPSETLCOUNT; RESET LINE COUNT IN CASE OF ALL
  1852.  
  1853. ;
  1854.  
  1855. ; JUMP TO START OF INFO FROM EOI
  1856.  
  1857. ;
  1858.  
  1859. PI2STRT:
  1860.  
  1861. LDHL,(STRTINFO); PT TO START OF INFO
  1862.  
  1863. CALLFRESUME; RESET POINTERS
  1864.  
  1865. LDA,1; RESET FRAME COUNT
  1866.  
  1867. LD(FRNUM),A
  1868.  
  1869. JRPI1; CONTINUE PROCESSING
  1870.  
  1871. ;
  1872.  
  1873. ; BACK UP TO PREVIOUS FRAME FROM EOI
  1874.  
  1875. ;
  1876.  
  1877. PI2BACKUP:
  1878.  
  1879. CALLBOICHECK; AT BEGINNING OF INFORMATION?
  1880.  
  1881. JRZ,PI2STRT
  1882.  
  1883. PI2BACK:
  1884.  
  1885. CALLFB1; BACK UP TO PREVIOUS FRAME
  1886.  
  1887. JRPI1; CONTINUE PROCESSING
  1888.  
  1889. ;
  1890.  
  1891. ; CHECK FOR POSITION AT BEGINNING OF INFORMATION SECTION
  1892.  
  1893. ;   IF SO, PRINT BACKUP ERROR MSG AND RETURN W/ZERO SET
  1894.  
  1895. ;
  1896.  
  1897. BOICHECK:
  1898.  
  1899. LDHL,(STRTINFO); START ADDRESS
  1900.  
  1901. EXDE,HL; ... IN DE
  1902.  
  1903. LDHL,(STRTFRAME); FRAME ADDRESS
  1904.  
  1905. LDA,D; EQUAL?
  1906.  
  1907. CPH
  1908.  
  1909. RETNZ
  1910.  
  1911. LDA,E
  1912.  
  1913. CPL
  1914.  
  1915. RETNZ
  1916.  
  1917. CALLSAK; ERROR BELL
  1918.  
  1919. XORA; ZERO FLAG SET
  1920.  
  1921. LD(FRNUM),A; SET FRAME NUMBER
  1922.  
  1923. RET
  1924.  
  1925. ;
  1926.  
  1927. ; THIS BODY OF CODE LISTS INFORMATION FROM HELP2 TO THE
  1928.  
  1929. ; PRINTER
  1930.  
  1931. ;
  1932.  
  1933. ; LIST ONE LINE OF INFO SECTION; HL PTS TO LINE UPON ENTRY;
  1934.  
  1935. ;HL PTS TO FIRST CHAR OF NEXT LINE UPON EXIT
  1936.  
  1937. ;Z FLAG SET IF USER ABORTS
  1938.  
  1939. ;
  1940.  
  1941. LISTLINE:
  1942.  
  1943. LDA,(HL); GET CHAR
  1944.  
  1945. AND7FH; MASK OUT MSB
  1946.  
  1947. CPCR; EOL?
  1948.  
  1949. JRZ,LCRLF
  1950.  
  1951. CPLF; LINE FEED? (WS FILE)
  1952.  
  1953. JRZ,LCRLF0
  1954.  
  1955. CPCTRLZ; END OF FILE?
  1956.  
  1957. JRZ,LCRLFC; DONE IF SO
  1958.  
  1959. INCHL; PT TO NEXT
  1960.  
  1961. CPTAB
  1962.  
  1963. JRZ,LTAB; EXPAND TAB
  1964.  
  1965. CPCTRLC
  1966.  
  1967. JRC,LISTLINE; DON'T PRINT HIGHLIGHT CONTROL CHARS
  1968.  
  1969. INCB; BUMP CHAR COUNT
  1970.  
  1971. CALLLSTOUT; PRINT CHAR
  1972.  
  1973. RETZ; ABORT
  1974.  
  1975. JRLISTLINE
  1976.  
  1977. ;
  1978.  
  1979. ; EXPAND TABS
  1980.  
  1981. ;
  1982.  
  1983. LTAB:LDA,' '
  1984.  
  1985. CALLLSTOUT; PRINT A SPACE
  1986.  
  1987. RETZ; USER ABORT?
  1988.  
  1989. INCB; BUMP CHAR COUNT
  1990.  
  1991. LDA,B
  1992.  
  1993. AND7; AT TAB STOP?
  1994.  
  1995. JRNZ,LTAB; NO, PRINT MORE SPACES
  1996.  
  1997. JRLISTLINE
  1998.  
  1999. ;
  2000.  
  2001. ; LIST CRLF, PT TO FIRST CHAR OF NEXT LINE, AND PAGE IF NECESSARY
  2002.  
  2003. ;
  2004.  
  2005. LCRLF:INCHL; PT TO LF
  2006.  
  2007. LCRLF0:INCHL; PT TO 1ST CHAR OF NEXT LINE
  2008.  
  2009. LCRLFC:CALLLCRLF1; PRINT CRLF
  2010.  
  2011. RETZ; ABORT
  2012.  
  2013. LDA,(LCOUNT); GET LINE COUNT
  2014.  
  2015. DECA
  2016.  
  2017. LD(LCOUNT),A
  2018.  
  2019. RETNZ; OK -- CONTINUE
  2020.  
  2021. CALLLFORMFEED; ADVANCE TO NEXT PAGE
  2022.  
  2023. SETPLC:PUSHHL; SAVE HL
  2024.  
  2025. CALLGETPRT; PT TO PRINTER INFO IN ENV
  2026.  
  2027. INCHL
  2028.  
  2029. INCHL; PT TO LINES OF TEXT
  2030.  
  2031. LDA,(HL)
  2032.  
  2033. LD(LCOUNT),A; SET LINE COUNT
  2034.  
  2035. POPHL; RESTORE HL
  2036.  
  2037. RET
  2038.  
  2039. LCRLF1:
  2040.  
  2041. LDA,CR; SEND <CRLF> TO PRINTER
  2042.  
  2043. CALLLSTOUT
  2044.  
  2045. RETZ; ABORT
  2046.  
  2047. LDA,LF; FALL THRU TO LSTOUT
  2048.  
  2049. ;
  2050.  
  2051. ; PRINT CHARACTER IN A ON PRINTER; AFFECT NO REGISTERS
  2052.  
  2053. ;
  2054.  
  2055. LSTOUT:PUSHHL; SAVE REGS
  2056.  
  2057. PUSHDE
  2058.  
  2059. PUSHBC
  2060.  
  2061. LDE,A; CHAR IN E
  2062.  
  2063. LDC,5; BDOS PRER OUTPUT ROUTINE
  2064.  
  2065. CALLBDOSE
  2066.  
  2067. LDE,0FFH; CONDITIONAL INPUT
  2068.  
  2069. LDC,6; DIRECT CONSOLE I/O
  2070.  
  2071. CALLBDOSE
  2072.  
  2073. POPBC; RESTORE REGS
  2074.  
  2075. POPDE
  2076.  
  2077. POPHL
  2078.  
  2079. CALLCKABORT; ABORT?
  2080.  
  2081. RET
  2082.  
  2083. ;
  2084.  
  2085. ; LIST THE CURRENT INFORMATION SECTION
  2086.  
  2087. ;   INFORMATION SECTION IS PTED TO BY STRTINFO
  2088.  
  2089. ;
  2090.  
  2091. ; LIST0INFO -- LIST CURRENT FRAME ONLY
  2092.  
  2093. ; LIST1INFO -- LIST CURRENT INFORMATION SECTION
  2094.  
  2095. ;
  2096.  
  2097. LIST0INFO:
  2098.  
  2099. LDHL,(STRTFRAME); LIST CURRENT FRAME ONLY
  2100.  
  2101. LDA,0FFH; SET FLAG
  2102.  
  2103. LD(LFRFLAG),A; LIST FRAME ONLY
  2104.  
  2105. JRLIST2INFO
  2106.  
  2107. LIST1INFO:
  2108.  
  2109. LDHL,(STRTINFO); PREPARE TO LIST ENTIRE INFO SECTION
  2110.  
  2111. XORA; CLEAR FRAME LIST FLAG
  2112.  
  2113. LD(LFRFLAG),A
  2114.  
  2115. LIST2INFO:
  2116.  
  2117. CALLLISTINFO; DO PRINT
  2118.  
  2119. CALLCLSCR; CLEAR SCREEN
  2120.  
  2121. LDA,(FFFLG); DID WE JUST DO A FORMFEED?
  2122.  
  2123. ORA
  2124.  
  2125. CALLZ,LFORMFEED; FORM FEED PRINTER IF NOT
  2126.  
  2127. LDSP,STACK-2; FIX STACK POINTER
  2128.  
  2129. LDHL,(STRTFRAME); RETURN TO FRAME WE WERE ON
  2130.  
  2131. CALLFRESUME
  2132.  
  2133. LDA,(FRNUM); ADJUST FRAME NUMBERING
  2134.  
  2135. DECA
  2136.  
  2137. LD(FRNUM),A
  2138.  
  2139. JPPI1; RESUME AT PI1
  2140.  
  2141. ;
  2142.  
  2143. ; MAIN PRINT ROUTINE
  2144.  
  2145. ; Z FLAG SET ON EXIT IF USER ABORTS
  2146.  
  2147. ;
  2148.  
  2149. LISTINFO:
  2150.  
  2151. LDA,(PTRCHK); DO PRINTER CHECK?
  2152.  
  2153. ORA
  2154.  
  2155. JRZ,PRTRDY; NO, ASSUME PRINTER IS READY
  2156.  
  2157. LDA,15; BIOS LIST STATUS
  2158.  
  2159. CALLBIOS; CHECK FOR PRINTER READY
  2160.  
  2161. ORA
  2162.  
  2163. JRNZ,PRTRDY
  2164.  
  2165. DECA
  2166.  
  2167. LD(FFFLG),A; SET NO FORM FEED IF NO PRINTER...
  2168.  
  2169. CALLHPRINT
  2170.  
  2171. DBBEL
  2172.  
  2173. DBCR,LF,'pRINTER oFF lINE - pRESS aNY kEY tO rECHECK'
  2174.  
  2175. DB' (q=qUIT)',0
  2176.  
  2177. CALLCAPIN
  2178.  
  2179. CP'q'; AN ESCAPE ROUTE, IF NEEDED
  2180.  
  2181. JRNZ,LISTINFO; TRY AGAIN
  2182.  
  2183. RET
  2184.  
  2185. ;
  2186.  
  2187. PRTRDY:CALLCLSCR; PRINT FRAME OR INFO SECTION
  2188.  
  2189. CALLHPRINT
  2190.  
  2191. DCCR,LF,' pRINTING '
  2192.  
  2193. CALLSETPLC; SET PRINTER LINE COUNT
  2194.  
  2195. XORA
  2196.  
  2197. LD(FFFLG),A; CLEAR FORMFEED FLAG
  2198.  
  2199. LI1:LDB,0; INIT COUNT OF CHARS ON LINE FOR TAB EXPANSION
  2200.  
  2201. CALLLISTLINE; LIST LINE FROM INFO FILE
  2202.  
  2203. RETZ; FEED PRINTER AND EXIT IF ABORT
  2204.  
  2205. LDA,(HL); DONE?
  2206.  
  2207. AND7FH; MASK OUT MSB
  2208.  
  2209. CPCTRLZ; EOF?
  2210.  
  2211. RETZ; RESUME IF AT END OF INFO
  2212.  
  2213. CPSECTCHAR; NEXT SECTION
  2214.  
  2215. RETZ; RESUME IF AT END OF INFO
  2216.  
  2217. CPFF; FORM FEED?
  2218.  
  2219. JRNZ,LI1
  2220.  
  2221. LDA,(LFRFLAG); LIST FRAME ONLY?
  2222.  
  2223. ORA; 0=NO
  2224.  
  2225. RETNZ
  2226.  
  2227. INCHL; PT TO CHAR AFTER FORM FEED
  2228.  
  2229. CALLLCRLFC; NEW LINE
  2230.  
  2231. RETZ; ABORT
  2232.  
  2233. LDB,10; PRINT SEPARATOR
  2234.  
  2235. LI2:LDA,'-'; DASHES
  2236.  
  2237. CALLLSTOUT
  2238.  
  2239. RETZ; ABORT?
  2240.  
  2241. DJNZLI2
  2242.  
  2243. CALLLCRLFC; 2 NEW LINES
  2244.  
  2245. RETZ
  2246.  
  2247. CALLLCRLFC
  2248.  
  2249. RETZ
  2250.  
  2251. JRLI1
  2252.  
  2253. ;
  2254.  
  2255. ; FORM FEED PRINTER
  2256.  
  2257. ;
  2258.  
  2259. LFORMFEED:
  2260.  
  2261. CALLLCRLF1; NEW LINE
  2262.  
  2263. LDA,FF; OUTPUT FORM FEED
  2264.  
  2265. LD(FFFLG),A; SET FORMFEED FLAG
  2266.  
  2267. JPLSTOUT
  2268.  
  2269. ;
  2270.  
  2271. ; END OF BODY OF CODE WHICH LISTS INFORMATION FROM HELP2 TO
  2272.  
  2273. ; THE PRINTER
  2274.  
  2275. ;
  2276.  
  2277. ; AT THE BEGINNING OF AN INFORMATION SECTION (HL PTS TO FIRST CHAR)
  2278.  
  2279. ;   CHECK TO SEE IF ANOTHER SECTCHAR FOLLOWS, AND, IF SO, LOAD THE
  2280.  
  2281. ;   SPECIFIED FILE AS A NEW NODE AND BEGIN PROCESSING IT
  2282.  
  2283. ;
  2284.  
  2285. LDNOD:LDA,(HL); GET IT
  2286.  
  2287. AND7FH; MASK MSB
  2288.  
  2289. CPSECTCHAR; ANOTHER ONE?
  2290.  
  2291. RETNZ; PROCESS NORMALLY IF NOT
  2292.  
  2293. ;
  2294.  
  2295. ; WE HAVE A NEW NODE -- CHECK TO SEE IF WE CAN NEST AGAIN
  2296.  
  2297. ;
  2298.  
  2299. LDA,(HLPLVL); GET CURRENT HELP LEVEL
  2300.  
  2301. CP25; AT MAXIMUM?
  2302.  
  2303. JRNZ,LDNOD1
  2304.  
  2305. CALLHPRINT
  2306.  
  2307. DCCR,LF,' nODE lEVEL lIMIT'
  2308.  
  2309. JPHLPEXIT1
  2310.  
  2311. ;
  2312.  
  2313. ; WE HAVE NOT REACHED LEVEL LIMIT, SO CONTINUE
  2314.  
  2315. ; AT THIS TIME, A=HELP LEVEL INDEX AND HL = PTR TO CURRENT SECTION (::)
  2316.  
  2317. ;
  2318.  
  2319. LDNOD1:
  2320.  
  2321. ;
  2322.  
  2323. ; SAVE CURRENT HELP FILE NAME FOR RETURN
  2324.  
  2325. ;
  2326.  
  2327. INCHL; NOW POINTING TO FILE NAME
  2328.  
  2329. PUSHHL; SAVE PTR
  2330.  
  2331. CALLCOMPTR; HL=POINTER TO STACK ELT INDEXED BY A
  2332.  
  2333. EXDE,HL; DE=ADDRESS OF NEXT ELEMENT
  2334.  
  2335. ;
  2336.  
  2337. ; COPY CURRENT NODE ELEMENT NAME INTO NEXT STACK ELEMENT
  2338.  
  2339. ;
  2340.  
  2341. LDHL,LFCB; PT TO FILE NAME
  2342.  
  2343. LDBC,8; 8 BYTES
  2344.  
  2345. LDIR
  2346.  
  2347. ;
  2348.  
  2349. ; INCREMENT HELP LEVEL
  2350.  
  2351. ;
  2352.  
  2353. INCA; SET NEW LEVEL
  2354.  
  2355. LD(HLPLVL),A
  2356.  
  2357. ;
  2358.  
  2359. ; SET UP FCB FOR NEW FILE
  2360.  
  2361. ;
  2362.  
  2363. POPHL; GET PTR TO NEW FILE NAME
  2364.  
  2365. LDDE,LFCB; PT TO FCB NAME
  2366.  
  2367. LDB,8; 8 CHARS MAX
  2368.  
  2369. CALLLDFCB; PLACE INTO FCB WITH ERROR CHECKING
  2370.  
  2371. ;
  2372.  
  2373. ; PRINT LOADING HELP FILE MESSAGE
  2374.  
  2375. ;
  2376.  
  2377. PLHFM:CALLHPRINT
  2378.  
  2379. DCCR,LF,' lOADING help fILE '
  2380.  
  2381. LDDE,LFCB; PRINT FILE NAME
  2382.  
  2383. CALLPLIB
  2384.  
  2385. CALLCRLF1
  2386.  
  2387. JPSTRT1; LOAD NEW HELP FILE
  2388.  
  2389. ;
  2390.  
  2391. ; LOAD FCB PTED TO BY DE WITH "NORMAL" FILE NAME PTED TO BY HL FOR B BYTES
  2392.  
  2393. ;
  2394.  
  2395. LDFCB:LDA,(HL); GET CHAR
  2396.  
  2397. INCHL; PT TO NEXT
  2398.  
  2399. CP'.'; DONE IF DECIMAL
  2400.  
  2401. JRZ,LDFCB2
  2402.  
  2403. CP' '+1; DONE IF <= <SP>
  2404.  
  2405. JRC,LDFCB2
  2406.  
  2407. CALLCAPS; CAPITALIZE
  2408.  
  2409. LD(DE),A; STORE CHAR
  2410.  
  2411. INCDE; PT TO NEXT
  2412.  
  2413. DJNZLDFCB
  2414.  
  2415. LDFCB1:
  2416.  
  2417. LDA,(HL); CHECK FOR ERROR
  2418.  
  2419. AND7FH; MASK MSB
  2420.  
  2421. INCHL; PT TO NEXT CHAR
  2422.  
  2423. CP'.'; OK IF '.'
  2424.  
  2425. RETZ
  2426.  
  2427. CP' '+1; OK IF <= <SP>
  2428.  
  2429. RETC
  2430.  
  2431. JRLDFCB1
  2432.  
  2433.  
  2434.  
  2435. LDFCB2:LDC,A; SAVE CHAR THAT TERMINATED STRING
  2436.  
  2437. LDFCB3:LDA,' '; <SP> FILL REST OF FCB
  2438.  
  2439. LD(DE),A; STORE <SP>
  2440.  
  2441. INCDE; PT TO NEXT
  2442.  
  2443. DJNZLDFCB3
  2444.  
  2445. LDA,C; GET CHAR THAT TERMINATED STRING
  2446.  
  2447. RET
  2448.  
  2449. ;
  2450.  
  2451. ; GO TO ROOT
  2452.  
  2453. ;
  2454.  
  2455. GOROOT:LDA,(HLPLVL); AT ROOT?
  2456.  
  2457. ORA; 0=YES
  2458.  
  2459. JPZ,HELP; RETURN TO HELP
  2460.  
  2461. XORA; SET ROOT INDEX
  2462.  
  2463. JRGORET
  2464.  
  2465. ;
  2466.  
  2467. ; RETURN TO PREVIOUS HELP LEVEL
  2468.  
  2469. ;
  2470.  
  2471. LRURN:LDA,(HLPLVL); ARE WE AT THE LOWEST LEVEL?
  2472.  
  2473. ORA; 0=YES
  2474.  
  2475. JRNZ,LRET
  2476.  
  2477. CALLSAK; ERROR BELL
  2478.  
  2479. JPHELP
  2480.  
  2481. ;
  2482.  
  2483. ; SET NEW HELP LEVEL
  2484.  
  2485. ;
  2486.  
  2487. LRET:DECA; DOWN 1 AND FALL THRU TO GORET
  2488.  
  2489. ;
  2490.  
  2491. ; GO TO HELP LEVEL INDEXED IN A
  2492.  
  2493. ;
  2494.  
  2495. GORET:LD(HLPLVL),A; SET NEW HELP LEVEL
  2496.  
  2497. CALLCOMPTR; HL=POINTER TO TARGET HELP FILE NAME
  2498.  
  2499. LDDE,LFCB; COPY ELEMENT INTO FCB
  2500.  
  2501. LDBC,8; 8 BYTES
  2502.  
  2503. LDIR
  2504.  
  2505. JRPLHFM; PRINT LOADING MESSAGE AND LOAD
  2506.  
  2507. ;
  2508.  
  2509. ; COMPUTE POINTER TO HELP NAME ENTRY INDEXED BY HELP LEVEL IN A
  2510.  
  2511. ;
  2512.  
  2513. COMPTR:LDL,A; VALUE IN HL
  2514.  
  2515. LDH,0; COMPUTE OFFSET AS INDEX*11
  2516.  
  2517. ADDHL,HL; *2
  2518.  
  2519. ADDHL,HL; *4
  2520.  
  2521. ADDHL,HL; *8
  2522.  
  2523. LDDE,HLPNS; PT TO BASE OF HELP NAMES
  2524.  
  2525. ADDHL,DE; ADD IN OFFSET
  2526.  
  2527. RET
  2528.  
  2529. ;
  2530.  
  2531. ; PRINT LEVEL NUMBER
  2532.  
  2533. ;
  2534.  
  2535. PRLEVEL:
  2536.  
  2537. LDA,(HLPLVL); DONT PRINT LEVEL 0
  2538.  
  2539. ORA; 0?
  2540.  
  2541. JRZ,PRFRAME
  2542.  
  2543. CALLHPRINT
  2544.  
  2545. DC'lEVEL '
  2546.  
  2547. CALLPAFDC; PRINT AS DECIMAL
  2548.  
  2549. LDA,(FRNUM); GET FRAME NUMBER
  2550.  
  2551. ORA; SET FLAGS
  2552.  
  2553. LDA,'/'; PREP TO PRINT SLASH
  2554.  
  2555. CALLNZ,BOUT; PRINT SLASH IF FRAME IS NON-ZERO
  2556.  
  2557. PRFRAME:
  2558.  
  2559. LDA,(FRNUM); GET NUMBER
  2560.  
  2561. ORA
  2562.  
  2563. LDA,' '; PREP TO PRINT SPACE ON EXIT
  2564.  
  2565. JPZ,BOUT
  2566.  
  2567. LDA,(FRNUM); GET FRAME NUMBER AGAIN
  2568.  
  2569. CALLPAFDC; PRINT AS DECIMAL
  2570.  
  2571. CALLHPRINT
  2572.  
  2573. DC': '
  2574.  
  2575. RET
  2576.  
  2577. ;
  2578.  
  2579. ; CHECK FOR USER ABORT VIA ^c OR esc CHARACTERS (RETURNS z IF SO)
  2580.  
  2581. ;
  2582.  
  2583. CKABORT:
  2584.  
  2585. CPCPMABORTCHAR; ABORTING?
  2586.  
  2587. RETZ; (YES)
  2588.  
  2589. CPEXITCHAR; ABORTING VIA ALTERNATE CHARACTER?
  2590.  
  2591. RET
  2592.  
  2593. ;
  2594.  
  2595. ; CHECK FOR REQUEST TO MOVE UP A LEVEL (RETURNS z IF SO)
  2596.  
  2597. ;
  2598.  
  2599. CKLEVEL:
  2600.  
  2601. CPLRCHAR; UP A LEVEL?
  2602.  
  2603. RETZ; (YES)
  2604.  
  2605. CPLRCHAR2; UP VIA ALTERNATE CHARACTER?
  2606.  
  2607. RET
  2608.  
  2609.  
  2610.  
  2611. ;===============================
  2612.  
  2613.  if uncr
  2614.  
  2615. ;-------------------------------
  2616.  
  2617. UNCRIT:; MAIN UNCRUNCH ROUTINE
  2618.  
  2619. LDHL,(ENDALL)
  2620.  
  2621. CALLSETUP
  2622.  
  2623. CALLUNCREL
  2624.  
  2625. JPNC,HELP
  2626.  
  2627.  
  2628.  
  2629. DECA
  2630.  
  2631. JRZ,TOONEW
  2632.  
  2633. CALLhprint
  2634.  
  2635. DC' iNVALID CRUNCHED FILE'
  2636.  
  2637. JRERREXIT
  2638.  
  2639. TOONEW:
  2640.  
  2641. CALLhprint
  2642.  
  2643. DC' fILE NEEDS NEWER REVISION'
  2644.  
  2645. ERREXIT:
  2646.  
  2647. JPHLPEXIT1
  2648.  
  2649. ;-------------------------------
  2650.  
  2651.  else; unsq
  2652.  
  2653. ;-------------------------------
  2654.  
  2655. UNSQIT:; MAIN UNSQUEEZE ROUTINE
  2656.  
  2657. LDHL,(ENDALL)
  2658.  
  2659. CALLSETUP
  2660.  
  2661. CALLUSQREL
  2662.  
  2663. JPNC,HELP
  2664.  
  2665. CALLhprint
  2666.  
  2667. DC' uNSQUEEZE eRROR: '
  2668.  
  2669. CP1
  2670.  
  2671. JRZ,DCODERR
  2672.  
  2673. CP3
  2674.  
  2675. JRZ,CHKSUMERR
  2676.  
  2677. CP4
  2678.  
  2679. JRZ,NOTSQED
  2680.  
  2681. CALLhprint
  2682.  
  2683. DC'pREMATURE eof'
  2684.  
  2685. JRERREXIT
  2686.  
  2687.  
  2688.  
  2689. DCODERR:
  2690.  
  2691. CALLhprint
  2692.  
  2693. DC'dECODE sIZE'
  2694.  
  2695. JRERREXIT
  2696.  
  2697.  
  2698.  
  2699. CHKSUMERR:
  2700.  
  2701. CALLhprint
  2702.  
  2703. DC'cHECKSUM'
  2704.  
  2705. ERREXIT:
  2706.  
  2707. JPHLPEXIT1
  2708.  
  2709.  
  2710.  
  2711. NOTSQED:
  2712.  
  2713. CALLHPRINT
  2714.  
  2715. DC'nOT A VALID SQUEEZED FILE'
  2716.  
  2717. JRERREXIT
  2718.  
  2719. ;-------------------------------
  2720.  
  2721.  endif; uncr ELSE unsq
  2722.  
  2723. ;===============================
  2724.  
  2725. ;
  2726.  
  2727. ; "A" <-- NEXT BYTE FROM ("PHYSICAL") INPUT STREAM.
  2728.  
  2729. ;  RETURNS WITH CARRY SET ON EOF.
  2730.  
  2731.  
  2732.  
  2733. GETCHREQU$
  2734.  
  2735. GETBYTEQU$
  2736.  
  2737.  
  2738.  
  2739. EXX; SWITCH TO I/O REGS
  2740.  
  2741. ORA; BE SURE CARRY IS CLEAR
  2742.  
  2743. INCL; POINT TO NEXT CHAR LOC IN BUFFER
  2744.  
  2745. CALLZ,RDSEC; READ ANOTHER SECTOR IF AT 0
  2746.  
  2747. LDA,(HL); GET BYTE TO RETURN (GARBAGE IF EOF)
  2748.  
  2749. EXX; BACK TO NORMAL REGS & RTN
  2750.  
  2751. RET;
  2752.  
  2753. ;................................
  2754.  
  2755. ;
  2756.  
  2757. ; SUBR FOR [ NON MULTI-] RELOAD, READS 128 BYTES TO DEFAULT DMA
  2758.  
  2759. ;
  2760.  
  2761. RDSEC:PUSHDE; SAVE DE BEFORE CLOBBERING IT WITH FCB
  2762.  
  2763. LDA,(STDALN)
  2764.  
  2765. ORA
  2766.  
  2767. JRNZ,RDSEC1
  2768.  
  2769. LDDE,LUD; INPUT FCB
  2770.  
  2771. CALLLUREAD; READ A RECORD
  2772.  
  2773. JRRDSEC2
  2774.  
  2775. RDSEC1:LDDE,LUDFN-1
  2776.  
  2777. CALLF$READ
  2778.  
  2779. RDSEC2:POPDE; RESTORE DE TO VALUE ON ENTRY
  2780.  
  2781. LDHL,TBUFF
  2782.  
  2783. RETZ; RETURN IF SUCCESSFUL
  2784.  
  2785. SCF; INDICATE EOF REACHED
  2786.  
  2787. RET
  2788.  
  2789.  
  2790.  
  2791. ;______________________________________________________________________________
  2792.  
  2793. ;
  2794.  
  2795. ; OUTPUT CHAR IN 'a' TO THE OUTPUT BUFFER.
  2796.  
  2797. ;
  2798.  
  2799. OUT:EXX; SWITCH TO I/O REGS
  2800.  
  2801. AND7FH; CLEAR HIGH BIT
  2802.  
  2803. LD(DE),A; PUT BYTE INTO THE NEXT AVAIL POSITION
  2804.  
  2805. INCDE; PT TO NEXT POSITION IN BUFFER
  2806.  
  2807. PUSHHL
  2808.  
  2809. LDHL,(OBUFHI); HIGHEST MEMORY AVAILABLE
  2810.  
  2811. SBCHL,DE; COMPARE
  2812.  
  2813. POPHL
  2814.  
  2815. EXX; FLIP REGS
  2816.  
  2817. RETNZ; rETURN IF LIMIT NOT REACHED
  2818.  
  2819.  
  2820.  
  2821. TOOBIG:CALLHPRINT
  2822.  
  2823. DC' mEMORY oVERFLOW, fILE TOO LARGE'
  2824.  
  2825. JPHLPEXIT1
  2826.  
  2827.  
  2828.  
  2829. ;-----------------------------------------------------------------------------
  2830.  
  2831.  
  2832.  
  2833. ; ENTER WITH HL POINTING TO FIRST BYTE OF OUTPUT BUFFER AREA
  2834.  
  2835. ; sETUP - USED TO INIT BUFFERS
  2836.  
  2837. SETUP:LD(OUTBUF),HL; THIS POINTS TO THE PROPER PLACE
  2838.  
  2839. EXX
  2840.  
  2841. LDHL,0FFH
  2842.  
  2843. LDDE,(OUTBUF)
  2844.  
  2845. EXX
  2846.  
  2847. RET
  2848.  
  2849.  
  2850.  
  2851. PLIB:PUSHAF
  2852.  
  2853. PUSHBC
  2854.  
  2855. PUSHDE
  2856.  
  2857. LDB,8; PRT 8 CHARS ONLY
  2858.  
  2859. PLIB1:LDA,(DE)
  2860.  
  2861. AND7FH
  2862.  
  2863. CP' '
  2864.  
  2865. CALLNZ,BOUT
  2866.  
  2867. INCDE
  2868.  
  2869. DJNZPLIB1
  2870.  
  2871. POPDE
  2872.  
  2873. POPBC
  2874.  
  2875. POPAF
  2876.  
  2877. RET
  2878.  
  2879.  
  2880.  
  2881. SAK:LDA,BEL
  2882.  
  2883.  
  2884.  
  2885. COUT:JPBOUT
  2886.  
  2887.  
  2888.  
  2889. ; GET A CHAR FROM CONSOLE VIA DOS DCONIO
  2890.  
  2891.  
  2892.  
  2893. CIN:PUSHHL
  2894.  
  2895. PUSHDE
  2896.  
  2897. PUSHBC
  2898.  
  2899. CIN1:LDC,6; DIRECT CONSOLE I/O
  2900.  
  2901. LDE,0FFH; GET CHARACTER
  2902.  
  2903. CALLBDOSE
  2904.  
  2905. ORA; GOT A CHARACTER?
  2906.  
  2907. JRZ,CIN1; NO, TRY AGAIN
  2908.  
  2909. POPBC
  2910.  
  2911. POPDE
  2912.  
  2913. POPHL
  2914.  
  2915. RET
  2916.  
  2917. ;
  2918.  
  2919. ;===============================
  2920.  
  2921.  if uncr
  2922.  
  2923.  
  2924.  
  2925. INCLUDELH-UNCR; UNCRUNCH ROUTINES
  2926.  
  2927.  
  2928.  
  2929.  else; unsq
  2930.  
  2931.  
  2932.  
  2933. INCLUDELH-UNSQ; UNSQUEEZE ROUTINES
  2934.  
  2935.  
  2936.  
  2937.  endif; uncr ELSE unsq
  2938.  
  2939. ;===============================
  2940.  
  2941. ;
  2942.  
  2943.  
  2944.  
  2945. dseg
  2946.  
  2947.  
  2948.  
  2949.  if uncr
  2950.  
  2951. ; THE  FOLLOWING  RAM LOCS MUST BE RE-INITIALIZED EACH TIME THE PROGRAM IS
  2952.  
  2953. ; EXECUTED (FOR EACH FILE WHEN WILDCARDS ARE USED). THE AREA CALLED  "SHADOW"
  2954.  
  2955. ; IN lh-uncr.lib IS USED TO ACCOMPLISH THIS.
  2956.  
  2957.  
  2958.  
  2959. RAMEQU$
  2960.  
  2961.  
  2962.  
  2963. FULFLG:DS1; BECOMES "FF" WHEN TABLE IS FULL
  2964.  
  2965. LASTPR:DS2; "LAST PRED"
  2966.  
  2967. ENTFLG:DS1; FLAG PREVENTS DUPLICATING ENTRIES
  2968.  
  2969. ENTRY:DS2; CURRENT ENTRY (CODE) NUMBER.
  2970.  
  2971. CSAVE:DS1
  2972.  
  2973. CODLEN:DS1; CURRENT CODE LENGTH, IN BITS.
  2974.  
  2975. TRGMSK:DS1; MASK CONTAINS "1" BIT IN POS OF NEXT CODE LEN
  2976.  
  2977. ;..............................................................................
  2978.  
  2979. ;______________________________________________________________________________
  2980.  
  2981. CHAR:DS1; LAST CHAR OF THE PREVIOUSLY DECODED STRING
  2982.  
  2983. AVAIL:DS2; *
  2984.  
  2985. FFFLAG:DS1; *
  2986.  
  2987. DISP:DS2;
  2988.  
  2989. ;................................
  2990.  
  2991.  
  2992.  
  2993. TABLE:DS1
  2994.  
  2995. TABLHI:DS1
  2996.  
  2997. EOTBL:
  2998.  
  2999. XLATBL:DS1
  3000.  
  3001. XLATBH:DS1
  3002.  
  3003. EXLATB:
  3004.  
  3005. BOTSTK:DS2
  3006.  
  3007. TOPSTK:
  3008.  
  3009. ENDALL:DS2
  3010.  
  3011. STKLIM:DS2
  3012.  
  3013. HASHER:DS2
  3014.  
  3015.  
  3016.  
  3017.  else; unsq
  3018.  
  3019.  
  3020.  
  3021. TABLE:DS1
  3022.  
  3023. TABLHI:DS1
  3024.  
  3025. TABTOP:
  3026.  
  3027. STKBOT:DS2
  3028.  
  3029. STKTOP:
  3030.  
  3031. ENDALL:DS2
  3032.  
  3033.  
  3034.  
  3035.  endif; uncr ELSE unsq
  3036.  
  3037.  
  3038.  
  3039. STDALN:DS1
  3040.  
  3041. SGLHDU:DS1
  3042.  
  3043. FFFLG:DS1; FORMFEED INDICATOR
  3044.  
  3045. HTYPE:DS1; TYPE OF HELP FILE (IF = IHCHAR, IT IS INDEXED BY USR)
  3046.  
  3047. LFRFLAG:
  3048.  
  3049. DS1; LIST FRAME ONLY FLAG (FOR PRINT FUNCTION)
  3050.  
  3051. STRTINFO:
  3052.  
  3053. DS2; PTR TO START OF CURRENT INFORMATION BLOCK
  3054.  
  3055. STRTFRAME:
  3056.  
  3057. DS2; PTR TO START OF CURRENT FRAME
  3058.  
  3059. SELCHAR:
  3060.  
  3061. DS1; SELECTION TABLE OPTION CHAR
  3062.  
  3063. FIRSTENTRY:
  3064.  
  3065. DS2; PTR TO FIRST ENTRY OF INFORMATION SECTION
  3066.  
  3067. LCOUNT:DS1; LINE COUNT BUFFER
  3068.  
  3069. HLPLVL:DS1; NUMBER OF HELP LEVEL CURRENT NODE IS AT (0=BOTTOM)
  3070.  
  3071. FRNUM:DS1; NUMBER OF CURRENT FRAME
  3072.  
  3073. OBUFHI:DS2; HI BYTE OF OUTPUT BUFFER
  3074.  
  3075. OUTBUF:DS2; PTR TO OUTPUT BUFFER
  3076.  
  3077. LUD:DS2; LENGTH OF DU DIR
  3078.  
  3079. DS2; INDEX
  3080.  
  3081. DS2; LENGTH OF CURRENT ENTRY
  3082.  
  3083. LUDFN:DS8; FILENAME
  3084.  
  3085. DS1; FIRST BYTE OF TYPE
  3086.  
  3087. LUDTYP:DS2; PTR TO TYPE FOR 'q' OR 'z'
  3088.  
  3089. LUDFCB:DS1
  3090.  
  3091. LBRNAME:
  3092.  
  3093. DS8
  3094.  
  3095. LBRTYP:DS27
  3096.  
  3097. LFCB:DS11; NAME OF CURRENT HELP FILE
  3098.  
  3099. DS22; EXTRA ROOM FOR SEARCH FIRST/NEXT CALLS
  3100.  
  3101. STKSAV:DS2; UNCRUNCH STACK LOCATION
  3102.  
  3103. HLPNS:DS200; ROOM FOR 25 HELP FILE NAMES
  3104.  
  3105. DS60
  3106.  
  3107. STACK:DS2
  3108.  
  3109. ;
  3110.  
  3111. END
  3112.  
  3113.