home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol084 / help14.asm < prev    next >
Assembly Source File  |  1984-04-29  |  15KB  |  594 lines

  1. ;  PROGRAM NAME:  HELP
  2. ;  AUTHOR:  RICHARD CONN
  3. ;  DATE:  6 July 1982
  4. ;  VERSION:  1.4
  5. ;  PREVIOUS VERSIONS, Latest version first:
  6. ;
  7. ; 16/Jul/82  Changed default HLP file to THIS-SYS and modified
  8. ;       internal messages for RCPM use. Version 1.4. Bill Bolton
  9. ;
  10. ; 06/Jun/82 Modifications for RCPM system use. Line noise
  11. ;    was resulting in false answers to "go on" prompts.
  12. ;    Test for <CR> response changed to accept only <CR>.
  13. ;    Messages tightened up and an alternative end of
  14. ;    category message added for the "all categories"
  15. ;    condition. Console input changed to Direct Console
  16. ;    I/O (BDOS 6) making CP/M 2.2 or later mandatory.
  17. ;    Version 1.3. Bill Bolton
  18. ;
  19. ; 22/Jun/81 Added code for standard or modified CP/M.  Changed "*"
  20. ;    in Col 1 to ";".  Changed labels so that the program would
  21. ;    assemble with other assemblers. Version 1.2 Ted Shapin.
  22. ;
  23. ; 06/Oct/80 Version 1.1 (changes undocumented). Richard Conn.
  24. ;
  25. ; 18/Nov/79 Version 1.0 Original release. Richard Conn.
  26. ;
  27. ;
  28. ;****************************************************************
  29. ;*                                *
  30. ;*  HELP -- DISPLAY HELP FILE INFORMATION TO USER ON CON:    *
  31. ;*                                *
  32. ;*    THE HELP COMMAND IS OF THE GENERAL FORM:        *
  33. ;*        HELP <FILENAME>.<EXT>                *
  34. ;*                                *
  35. ;*    <FILENAME>.<EXT> IS OPTIONAL; IF OMITTED COMPLETELY,    *
  36. ;* 'THIS-SYS.HLP' IS ASSUMED; IF JUST <EXT> IS OMITTED,        *
  37. ;* EXTENSION IS ASSUMED TO BE '.HLP'                *
  38. ;*                                *
  39. ;*    THE HELP COMMAND DISPLAYS THE INFORMATION IN A HELP    *
  40. ;* FILE TO THE USER.  THERE ARE TWO BASIC TYPES OF HELP FILES -    *
  41. ;* (1) INDEXED AND (2) NON-INDEXED.  INDEXED HELP FILES ARE     *
  42. ;* THOSE WHICH CONTAIN SEVERAL SECTIONS; THE INDIVIDUAL MAY    *
  43. ;* READ ALL OF SUCH A HELP FILE OR JUST SELECTED SECTIONS OF    *
  44. ;* THIS FILE.  NON-INDEXED HELP FILES CONTAIN ONLY ONE SECTION.    *
  45. ;*    STRUCTURALLY SPEAKING, HELP FILES CONSIST OF TWO PARTS:    *
  46. ;* THE HEADER PART AND THE INFORMATION PART.  THE INFORMATION    *
  47. ;* PART OF A HELP FILE BEGINS WITH A LINE WHOSE FIRST CHARACTER    *
  48. ;* IS A COLON.  THE TITLE OF THE INFORMATION SECTION IS ON THIS    *
  49. ;* LINE.  THE INFORMATION SECTION CONTINUES UNTIL THE NEXT    *
  50. ;* INFORMATION SECTION (LINE STARTING WITH A COLON) OR THE END    *
  51. ;* OF THE FILE IS ENCOUNTERED.  THE HEADER PART CONSISTS OF A    *
  52. ;* GROUP OF LINES BEFORE THE FIRST INFORMATION SECTION.  IF THE    *
  53. ;* FIRST LINE OF A HELP FILE STARTS WITH A COLON, THEN THERE IS    *
  54. ;* NO HEADER PART, AND THE HELP FILE IS DUMPED AS ONE        *
  55. ;* INFORMATION SECTION.                        *
  56. ;*    THERE MUST BE THE SAME NUMBER OF LINES IN THE HEADER    *
  57. ;* PART AS THERE ARE INFORMATION SECTIONS.  IF NOT, A HELP    *
  58. ;* FILE ERROR WILL BE ISSUED IF THE HELP COMMAND ATTEMPTS TO    *
  59. ;* READ BEYOND THE END OF THE HELP FILE IN ITS SEARCH FOR AN    *
  60. ;* INFORMATION SECTION.                        *
  61. ;*                                *
  62. ;****************************************************************
  63. ;
  64. ;
  65. ;****************************************************************
  66. ;*                                *
  67. ;*  THE HELP PROGRAM IS COMPLETELY TRANSPORTABLE BETWEEN CP/M    *
  68. ;*  SYSTEMS.                            *
  69. ;*                                *
  70. ;****************************************************************
  71. ;
  72. ;
  73. ;
  74. ;****************************************************************
  75. ;*  CP/M AND BASIC CHARACTER DEFINITIONS            *
  76. ;****************************************************************
  77.  
  78. BIAS    EQU    0        ; STANDARD CP/M
  79. ;BIAS    EQU    4200H        ; OFFSET CP/M
  80.  
  81. BDOS    EQU    5+BIAS        ; ADDRESS OF BDOS ENTRY POINT
  82. FCB    EQU    5CH+BIAS    ; ADDRESS OF FILE CONTROL BLOCK
  83. BUFF    EQU    80H+BIAS    ; ADDRESS OF DMA BUFFER
  84.  
  85. CR    EQU    0DH        ; <CR>
  86. LF    EQU    0AH        ; <LF>
  87. FF    EQU    'L'-40H        ; CTRL-L = FORM FEED
  88. CTRLZ    EQU    'Z'-40H        ; CTRL-Z
  89. CTRLC    EQU    'C'-40H        ; CTRL-C
  90.  
  91. ;****************************************************************
  92. ;*  CHARACTER WHICH MARKS START OF INFORMATION SECTION        *
  93. ;****************************************************************
  94.  
  95. SECT$CHAR    EQU    ':'    ; DEFINED TO BE COLON
  96. ALL$CHAR    EQU    '*'    ; ALL OF HELP FILE DESIGNATOR
  97.  
  98. ;****************************************************************
  99. ;*  USER CUSTOMIZATION -- LINES PER SCREEN DISPLAY        *
  100. ;****************************************************************
  101.  
  102. LINES$PER$SCREEN    EQU    24    ; ASSUME 24 LINES/SCREEN
  103.  
  104.  
  105. ;****************************************************************
  106. ;*  START OF PROGRAM                        *
  107. ;****************************************************************
  108.  
  109.     ORG    100H + BIAS
  110.  
  111. START:
  112.     LXI    H,0    ; GET SP
  113.     DAD    SP
  114.     SHLD    STACK
  115.     XRA    A    ; TURN OFF DEFAULT FILE FLAG
  116.     STA    DFFLG
  117.     LXI    D,HELPMS    ; PRINT OPENING MSG
  118.     CALL    PRINT$MESSAGE
  119.     LXI    H,FCB+1    ; CHECK FOR FILE NAME
  120.     MOV    A,M
  121.     CPI    ' '    ; NONE?
  122.     JZ    DEFAULT$FN
  123.     ORA    A    ; ALSO NONE
  124.     JNZ    START1
  125.  
  126. ;  INSERT 'THIS-SYS.HLP' INTO FCB
  127. DEFAULT$FN:
  128.     DCX    H    ; PT TO FCB
  129.     LXI    D,DEFFN
  130.     MVI    B,12    ; 12 BYTES
  131.     XCHG
  132.     CALL    MOVE    ; MOVE (HL) TO (DE) FOR (B) BYTES
  133.     MVI    A,1    ; TURN ON DEFAULT FILE FLAG
  134.     STA    DFFLG
  135.     JMP    START2
  136.  
  137. ;  CHECK FOR EXTENSION TO FILE NAME
  138. START1:
  139.     LXI    H,FCB+9    ; CHECK FOR EXTENSION
  140.     MOV    A,M
  141.     CPI    ' '    ; NONE?
  142.     JZ    DEFAULT$EXT
  143.     ORA    A    ; NONE ALSO
  144.     JNZ    START2
  145.  
  146. ;  PLACE DEFAULT EXTENSION OF '.HLP' IN FCB
  147. DEFAULT$EXT:
  148.     LXI    D,DEFEXT
  149.     MVI    B,3
  150.     XCHG
  151.     CALL    MOVE    ; MOVE (HL) TO (DE) FOR (B) BYTES
  152.  
  153. ;  OPEN FILE
  154. START2:
  155.     LXI    D,FCB    ; PT TO FCB
  156.     MVI    C,15    ; OPEN FILE
  157.     CALL    BDOS
  158.     CPI    255    ; NOT PRESENT?
  159.     JNZ    START3
  160.  
  161. ;  CHECK FOR DEFAULT FILE SEARCH
  162.     LDA    DFFLG    ; GET DEFAULT FILE FLAG
  163.     ORA    A    ; 1=YES, SEARCH FOR DEFAULT FAILED
  164.     JNZ    HELP    ; DISPLAY DEFAULT HELP FILE INFORMATION
  165.  
  166. ;  FILE NOT FOUND -- FATAL ERROR
  167.     LXI    D,ERR1    ; FILE NOT FOUND
  168.     CALL    PRINT$MESSAGE
  169.     RET
  170.  
  171. ;  LOAD HELP FILE INFORMATION
  172. START3:
  173.     LXI    H,HELP$BUF    ; PT TO BUFFER
  174.     SHLD    NEXT$ADR    ; SET PTR
  175.  
  176. ;  READ RECORDS UNTIL EOF
  177. START4:
  178.     CALL    READ$RECORD    ; READ INFO
  179.     ORA    A    ; DONE? 0=NO
  180.     JZ    START4
  181.  
  182. ;
  183. ;  START OF HELP PROGRAM
  184. ;
  185. HELP:
  186.     LXI    SP,STACK    ; RESET STACK
  187.     LXI    H,HELP$BUF    ; PT TO BUFFER
  188.     MOV    A,M    ; NO HEADER SECTION?
  189.     CPI    SECT$CHAR
  190.     JNZ    HELP1    ; HEADER SECTION EXISTS
  191.     CALL    PRINT$INFO    ; PRINT HELP INFO PTED TO BY HL
  192.  
  193. ;  EXIT POINT FOR ANY EXIT FROM THE REST OF THE HELP PROGRAM
  194. HELP$EXIT:
  195.     LHLD    STACK    ; GET CP/M SP
  196.     SPHL
  197.     RET        ; DONE
  198.  
  199. ;  PRINT HEADER INFORMATION AND SELECT AN OPTION
  200. HELP1:
  201.     MVI    A,0
  202.     STA    ALLFLAG        ; RESET ALL CATEGORIES FLAG
  203.     CALL    PRINT$HEADER    ; PRINT HEADER
  204.     LXI    D,PROMPT$MESSAGE    ; PRINT PROMPT
  205.     CALL    PRINT$MESSAGE
  206.     CALL    CHAR$IN        ; GET RESPONSE
  207.     CPI    CTRLC        ; RETURN TO CP/M
  208.     JZ    HELP$EXIT
  209.     CALL    CHAR$OUT    ; DISPLAY ENTERED CHAR
  210.     CPI    ALL$CHAR    ; ALL OF HELP FILE?
  211.     JZ    HELP$ALL
  212.     ANI    0DFH    ; CAPITALIZE
  213.     PUSH    PSW    ; SAVE CHAR
  214.     CALL    CRLF1
  215.     POP    PSW    ; GET CHAR
  216.     SUI    'A'-1        ; ADJUST FOR COUNT
  217.     MOV    B,A        ; SAVE COUNT
  218.     JZ    BAD$RESPONSE
  219.     JNC    HELP2
  220.  
  221. ;  INVALID RESPONSE
  222. BAD$RESPONSE:
  223.     LXI    D,ERR2    ; INVALID RESPONSE
  224.     CALL    PRINT$MESSAGE
  225.     JMP    HELP1
  226.  
  227. ;  VALID RESPONSE -- LOOK FOR AND PRINT INFORMATION SECTION
  228. HELP2:
  229.     INR    C    ; 1 MORE THAN NUMBER OF POSSIBLE SELECTIONS
  230.     CMP    C    ; GREATER THAN NUMBER OF POSSIBLE SELECTIONS?
  231.     JNC    BAD$RESPONSE
  232.     LHLD    FIRST$ENTRY    ; GET PTR TO FIRST ENTRY
  233.  
  234. ;  PRINT INFORMATION WHEN COUNT IS ZERO
  235. HELP3:
  236.     DCR    B    ; COUNT DOWN
  237.     JNZ    HELP4
  238.     INX    H    ; SKIP OVER COLON
  239.     CALL    PRINT$INFO    ; PRINT INFO PTED TO BY HL
  240.     JMP    HELP1
  241.  
  242. ;  LOCATE NEXT INFORMATION SECTION
  243. HELP4:
  244.     MOV    A,M    ; <CTRL-Z>?
  245.     INX    H    ; PT TO NEXT BYTE
  246.     CPI    CTRLZ
  247.     JZ    HELP$ERR    ; HELP FILE FORMAT ERROR
  248.     CPI    LF    ; LINE FEED (WS FILE)?
  249.     JZ    HELP5
  250.     CPI    CR    ; <CR>?
  251.     JNZ    HELP4
  252.     INX    H    ; 1ST BYTE OF NEXT LINE
  253. HELP5    MOV    A,M    ; GET CHAR
  254.     CPI    SECT$CHAR    ; NEW SECTION?
  255.     JZ    HELP3    ; CONTINUE LOOP IF SO
  256.     CPI    CTRLZ    ; EOF?
  257.     JNZ    HELP4    ; CONTINUE IF NOT
  258.  
  259. ;  ERROR -- REACHED END OF HELP FILE
  260. HELP$ERR:
  261.     LXI    D,ERR3    ; FORMAT ERROR
  262.     CALL    PRINT$MESSAGE
  263.     JMP    HELP1
  264.  
  265. ;  PRINT ALL OF HELP FILE
  266. HELP$ALL:
  267.     STA    ALLFLAG        ; FOR LATER
  268.     CALL    CRLF1        ; START ON NEW LINE
  269.     LHLD    FIRST$ENTRY    ; PT TO FIRST ENTRY
  270.     CALL    SET$LINE$CNT    ; SET LINE COUNT
  271. ;  EXECUTE UNTIL A CTRL-Z IS ENCOUNTERED
  272. HA1:
  273.     INX    H    ; SKIP OVER COLON
  274.     CALL    PI1    ; PRINT INFO W/OUT LINE CNT INFO
  275.     MOV    A,M    ; GET LAST CHAR
  276.     CPI    CTRLZ
  277.     JNZ    HA1
  278.     JMP    HELP
  279.  
  280.  
  281.  
  282. ;********************************************************
  283. ;*                            *
  284. ;*  HELP SUPPORT ROUTINE SECTION            *
  285. ;*                            *
  286. ;********************************************************
  287.  
  288. ;
  289. ;  INPUT CHAR; CHAR IS IN A
  290. ;
  291. CHAR$IN:
  292.     PUSH    B
  293.     PUSH    D
  294.     PUSH    H
  295.     MVI    C,6    ; DIRECT CONSOLE I/O
  296.     MVI    E,0FFH    ; INPUT
  297.     CALL    BDOS
  298.     POP    H
  299.     POP    D
  300.     POP    B
  301.     ORA    A    ; CHARACTER?
  302.     JZ    CHAR$IN    ; NO, KEEP LOOKING
  303.     RET
  304.  
  305. ;
  306. ;  PRINT CHAR IN A ON CON:
  307. ;
  308. CHAR$OUT:
  309.     PUSH    PSW
  310.     PUSH    B
  311.     PUSH    D
  312.     PUSH    H
  313.     MVI    C,2    ; WRITE
  314.     MOV    E,A    ; CHAR IN E
  315.     CALL    BDOS
  316.     POP    H
  317.     POP    D
  318.     POP    B
  319.     POP    PSW
  320.     RET
  321.  
  322. ;
  323. ;  PRINT ERROR MSG PTED TO BY DE; ENDS IN '$'
  324. ;
  325. PRINT$MESSAGE:
  326.     PUSH    B
  327.     PUSH    D
  328.     PUSH    H
  329.     MVI    C,9    ; PRINT BUFFER
  330.     CALL    BDOS
  331.     POP    H
  332.     POP    D
  333.     POP    B
  334.     RET
  335.  
  336. ;
  337. ;  MOVE BYTES PTED TO BY HL TO AREA PTED TO BY DE; B BYTES TO MOVE
  338. ;
  339. MOVE:
  340.     MOV    A,M    ; GET BYTE
  341.     ANI    7FH    ; MASK OFF MSB -- IN CASE A WS FILE
  342.     STAX    D    ; PUT BYTE
  343.     INX    H    ; PT TO NEXT
  344.     INX    D
  345.     DCR    B    ; COUNT DOWN
  346.     JNZ    MOVE
  347.     RET
  348.  
  349. ;
  350. ;  READ RECORD FROM DISK; NEXT$ADR CONTAINS ADDRESS TO READ TO
  351. ;    ON RETURN, BDOS ERROR CODE IS IN A (0=NO ERROR)
  352. ;
  353. READ$RECORD:
  354.     MVI    C,20    ; READ NEXT RECORD
  355.     LXI    D,FCB    ; PT TO FCB
  356.     CALL    BDOS
  357.     PUSH    PSW    ; SAVE RETURN CODE
  358.     LHLD    NEXT$ADR    ; PT TO LOAD ADDRESS
  359.     LXI    D,BUFF    ; PT TO BUFFER TO LOAD FROM
  360.     MVI    B,128    ; NUMBER OF BYTES TO MOVE
  361.     XCHG
  362.     CALL    MOVE
  363.     XCHG
  364.     SHLD    NEXT$ADR    ; PT TO NEXT LOAD ADDRESS
  365.     POP    PSW    ; GET RETURN CODE
  366.     RET
  367.  
  368. ;
  369. ;  PRINT ONE LINE OF INFO SECTION; HL PTS TO LINE UPON ENTRY;
  370. ;    HL PTS TO FIRST CHAR OF NEXT LINE UPON EXIT
  371. ;
  372. PRINT$LINE:
  373.     MOV    A,M    ; GET CHAR
  374.     CPI    CR    ; EOL?
  375.     JZ    CRLF
  376.     CPI    LF    ; LINE FEED? (WS FILE)
  377.     JZ    CRLF0
  378.     CALL    CHAR$OUT    ; PRINT CHAR
  379.     INX    H    ; PT TO NEXT
  380.     JMP    PRINT$LINE
  381.  
  382. ;
  383. ;  PRINT CRLF, PT TO FIRST CHAR OF NEXT LINE, AND PAGE IF NECESSARY
  384. ;
  385. CRLF:
  386.     INX    H    ; PT TO LF
  387. CRLF0:
  388.     INX    H    ; PT TO 1ST CHAR OF NEXT LINE
  389. CRLFC:
  390.     CALL    CRLF1    ; PRINT CRLF
  391.     LDA    LINE$CNT    ; GET LINE COUNT
  392.     DCR    A
  393.     STA    LINE$CNT
  394.     RNZ        ; OK -- CONTINUE
  395.     LXI    D,PAGEMS
  396.     CALL    PRINT$MESSAGE    ; PRINT PAGE MESSAGE
  397. NXTLOOP:
  398.     CALL    CHAR$IN    ; GET RESPONSE
  399.     ANI    0DFH    ; CAPITALIZE
  400.     CPI    'A'    ; ABORT?
  401.     JZ    HELP    ; YES, START OVER
  402.     CPI    CTRLC    ; CP/M ABORT
  403.     JZ    HELP$EXIT
  404.     CPI    CR    ; NEXT PAGE?
  405.     JNZ    NXTLOOP    ; NO, TRY AGAIN
  406.     CALL    SET$LINE$CNT
  407.     CALL    CRLF1    ; NEW LINE
  408.     RET
  409.  
  410. ;
  411. ;  PRINT CR AND LF ONLY
  412. ;
  413. CRLF1:
  414.     MVI    A,CR    ; PRINT CR
  415.     CALL    CHAR$OUT
  416.     MVI    A,LF    ; PRINT LF
  417.     CALL    CHAR$OUT
  418.     RET
  419.  
  420. ;
  421. ;  SET LINE$CNT VARIABLE TO SCREEN SIZE
  422. ;
  423. SET$LINE$CNT:
  424.     MVI    A,LINES$PER$SCREEN-1
  425.     STA    LINE$CNT
  426.     RET
  427.  
  428. ;
  429. ;  PRINT THE HEADER SECTION AND LOAD FIRST$ENTRY PTR
  430. ;
  431. PRINT$HEADER:
  432.     LXI    H,HELP$BUF
  433.     CALL    SET$LINE$CNT
  434.     MVI    A,'A'    ; INIT SELECTION CHAR
  435.     STA    SEL$CHAR
  436.     LXI    D,SELECTMS
  437.     CALL    PRINT$MESSAGE
  438.     MVI    C,0    ; COUNT NUMBER OF SELECTIONS
  439.  
  440. ; PRINT LINE UNTIL FIRST INFORMATION SECTION FOUND
  441. PH1:
  442.     MOV    A,M    ; GET CHAR
  443.     CPI    SECT$CHAR
  444.     JZ    PH2
  445.     CPI    CTRLZ    ; EOF? -- ABORT
  446.     JZ    HELP$EXIT
  447.     INR    C    ; INCREMENT SELECTION COUNT
  448.     LDA    SEL$CHAR    ; DISPLAY SELECTION CHAR
  449.     CALL    CHAR$OUT
  450.     INR    A    ; INCR CHAR
  451.     STA    SEL$CHAR
  452.     MVI    A,'.'
  453.     CALL    CHAR$OUT
  454.     MVI    A,' '
  455.     CALL    CHAR$OUT
  456.     CALL    PRINT$LINE    ; PRINT HEADER LINE
  457.     JMP    PH1
  458.  
  459. ;  SAVE PTR TO FIRST ENTRY
  460. PH2:
  461.     SHLD    FIRST$ENTRY
  462.     RET
  463.  
  464. ;
  465. ;  PRINT AN INFORMATION SECTION
  466. ;
  467. PRINT$INFO:
  468.     CALL    SET$LINE$CNT
  469. PI1:
  470.     CALL    PRINT$LINE    ; PRINT LINE FROM INFO FILE
  471.     MOV    A,M    ; DONE?
  472.     CPI    CTRLZ    ; EOF?
  473.     JZ    PI2
  474.     CPI    SECT$CHAR    ; NEXT SECTION
  475.     JZ    PI2
  476.     CPI    FF    ; FORM FEED?
  477.     JNZ    PI1
  478.     CALL    FORM$FEED    ; FEED SCREEN
  479.     JMP    PI1
  480.  
  481. ;  FORM FEED SCREEN
  482. FORM$FEED:
  483.     LDA    LINE$CNT    ; GET LINE COUNT
  484.     MOV    B,A    ; ... IN B
  485. FEED$LOOP:
  486.     PUSH    B    ; SAVE B
  487.     CALL    CRLFC    ; NEW LINE
  488.     POP    B    ; GET B
  489.     DCR    B    ; COUNT DOWN
  490.     JNZ    FEED$LOOP
  491.     RET
  492.  
  493. ;  END OF INFO
  494. PI2:
  495.     CALL    CRLF1    ; NEW LINE
  496.     LDA    LINE$CNT    ; COUNT DOWN
  497.     DCR    A
  498.     STA    LINE$CNT
  499.     JNZ    PI2
  500.     LDA    ALLFLAG
  501.     ORA    A        ; DISPLAY ALL CATEGORIES?
  502.     LXI    D,CONTMS
  503.     JNZ    PI2CONT        ; YES
  504.     LXI    D,ENDMS        ; PRINT END OF INFORMATION MSG
  505. PI2CONT:
  506.     CALL    PRINT$MESSAGE
  507. PI2LOOP:
  508.     CALL    CHAR$IN    ; GET ANY CHAR
  509.     CPI    CTRLC    ; CP/M ABORT
  510.     JZ    HELP$EXIT
  511.     CPI    CR    ; BACK TO MENU
  512.     JNZ    PI2LOOP    ; NO, KEEP LOOKING
  513.     CALL    CRLF1    ; NEW LINE
  514.     CALL    SET$LINE$CNT    ; RESET LINE COUNT IN CASE OF ALL
  515.     RET
  516.  
  517. ;********************************************************
  518. ;*  MESSAGE AND BUFFER SECTION                *
  519. ;********************************************************
  520.  
  521. HELPMS:
  522.     DB    'HELP V1.4',CR,LF,'$'
  523. ENDMS:
  524.     DB    '+ End of Category +'
  525.     DB    '    Type CTRL-C=CP/M, <CR>=Menu --$'
  526. CONTMS:
  527.     DB    '+ End of Category +'
  528.     DB    '    Type CTRL-C=CP/M, <CR>=Next Category -$'
  529.  
  530. SELECTMS:
  531.     DB    CR,LF,'  HELP File Selections are --',CR,LF,'$'
  532. DEFFN:
  533.     DB    0,'THIS-SYS'
  534. DEFEXT:
  535.     DB    'HLP'
  536. PAGEMS:
  537.     DB    '    Type "A"=Abort, CTRL-C=CP/M, <CR>=More -$'
  538. ERR1:
  539.     DB    CR,LF,'HELP FATAL ERROR -- File not Found$'
  540. ERR2:
  541.     DB    CR,LF,'HELP ERROR -- Invalid Response',CR,LF,'$'
  542. ERR3:
  543.     DB    CR,LF,'HELP ERROR -- EOF on HELP File',CR,LF,'$'
  544. PROMPT$MESSAGE:
  545.     DB    CR,LF,'Type CTRL-C to exit to CP/M, "*" to select'
  546.     DB    ' all, or category -$'
  547.  
  548. ALLFLAG:
  549.     DS    1    ; DISPLAY ALL CATEGORIES FLAG
  550. SEL$CHAR:
  551.     DS    1    ; SELECTION TABLE OPTION CHAR
  552. FIRST$ENTRY:
  553.     DS    2    ; PTR TO FIRST ENTRY OF INFORMATION SECTION
  554. LINE$CNT:
  555.     DS    1    ; LINE COUNT BUFFER
  556. DFFLG:
  557.     DS    1    ; DEFAULT FILE FLAG (0=NOT SEARCH FOR, 1=YES)
  558. NEXT$ADR:
  559.     DS    2    ; NEXT LOAD ADDRESS
  560.     DS    80    ; STACK SPACE
  561. STACK:
  562.     DS    2    ; CP/M STACK PTR
  563.  
  564.  
  565. ;
  566. ;  DEFAULT HELP MESSAGE
  567. ;
  568. HELP$BUF:
  569.     DB    ':The HELP Subsystem for Online Documentation',CR,LF
  570.     DB    '     This  is HELP,  the Online Documentation  Subsystem.  The',CR,LF
  571.     DB    'purpose  of  HELP is to allow you to interactively  query  the',CR,LF
  572.     DB    '*.HLP  files  on this system to get information  summaries  on',CR,LF
  573.     DB    'various aspects of the system, CP/M, applications programs and',CR,LF
  574.     DB    'languages.',CR,LF
  575.     DB    CR,LF
  576.     DB    '     When  you  type  ''HELP'',  a search is done for  the  file',CR,LF
  577.     DB    '''THIS-SYS.HLP''.   If found, the contents of this HELP File are',CR,LF
  578.     DB    'displayed for you;  if not found, the HELP Information you are',CR,LF
  579.     DB    'now reading is displayed.',CR,LF
  580.     DB    CR,LF
  581.     DB    '     If  you  desire information on a specific topic and  have',CR,LF
  582.     DB    'found  a  HELP File in the system directory with  a  promising',CR,LF
  583.     DB    'name (ie, CPM.HLP is a HELP File on CP/M), try the command:',CR,LF
  584.     DB    CR,LF
  585.     DB    '               HELP d:topic',CR,LF
  586.     DB    'Where:',CR,LF
  587.     DB    '     "d:"      is the disk the HELP File resides on (optional)',CR,LF
  588.     DB    '     "topic"   is the name of the HELP File (like CPM.HLP).',CR,LF
  589.     DB    '',CR,LF
  590.     DB    'Please refer to the HELP File "HELP.HLP" for more information.',CR,LF
  591.     DB    CTRLZ        ; END OF FILE
  592.  
  593.     END
  594.