home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol096 / inuse.a86 < prev    next >
Encoding:
Text File  |  1984-04-29  |  10.2 KB  |  437 lines

  1. ;  PROGRAM:  INUSE
  2. ;  AUTHOR:  RICHARD CONN
  3. ;  VERSION:  1.0
  4. ;  DATE:  12 JAN 82
  5. ;
  6. ; Translated with XLT86 for CP/M-86 use, April 2, 1982; by Kelly Smith
  7. ;
  8. ;  DERIVATION:  From BANNER Version 1.0 by Richard Conn ... which was from:
  9. ;  DERIVATION:  From Public Domain BANNER Program, Author Unknown
  10. ;  PREVIOUS VERSIONS:  None
  11. VERS    EQU    10            ;VERSION NUMBER
  12. ;********************************
  13. ;                *
  14. ;   I N U S E  P R I N T    *
  15. ;                *
  16. ;********************************
  17. ;
  18. ;  INUSE is a program which prints large (5x7) block letters
  19. ; on the CON: Device the word 'INUSE'.  When first started up, INUSE
  20. ; asks for a password, to which the user gives a desired password.
  21. ; INUSE is intended to be terminated by the user typing an Escape Character
  22. ; and then giving the original password.
  23. ;
  24. ;  INUSE is executed in one of two forms:
  25. ;    INUSE -- Normal operation
  26. ;    INUSE /? -- Prints HELP Info
  27. ;
  28. ;********************************
  29. ;  User-Customized Parameters    *
  30. ;********************************
  31. ESC    EQU    1BH            ; ESCAPE CHARACTER TO INPUT PASSWORD
  32. ;********************************
  33. ;  Constants            *
  34. ;********************************
  35. BDOS    EQU    0005H
  36. FCB    EQU    005CH
  37. BUFF    EQU    0080H
  38. CTRLC    EQU    03H
  39. CR    EQU    0DH
  40. LF    EQU    0AH
  41. TAB    EQU    09H
  42. INCHAR    EQU    1            ;INPUT FROM CON:
  43. PRLINE    EQU    9            ;Print Line Routine
  44. READLN    EQU    10            ;Input Line Editor
  45. OUTC    EQU    2            ;OUTPUT TO CON:
  46. M    EQU    BYTE PTR 0[BX]        ; XLT86'S WAY OF MAKING 8080 'M'
  47.  
  48.     ORG    100H
  49.     CALL    PMSG            ; PRINT PROMPT
  50.     DB    CR,LF,'INUSE Version ',VERS/10+'0','.',(VERS MOD 10)+'0',CR,LF
  51.     DB    0
  52.     MOV    AL,Byte Ptr .FCB+1    ; GET FIRST CHAR OF FCB
  53.     CMP    AL,'/'            ; QUERY?
  54.     JZ    L_1    
  55.     JMP    IN1
  56. L_1:
  57.     CALL    PMSG
  58.     DB    CR,LF,'    INUSE is employed to print a banner on a user''s'
  59.     DB    CR,LF,'terminal that said terminal is in use and by whom.  A'
  60.     DB    CR,LF,'comment is asked for when INUSE is executed by the'
  61.     DB    CR,LF,'command line -- '
  62.     DB    CR,LF,'        INUSE'
  63.     DB    CR,LF,'and this comment is printed with the INUSE Banner.'
  64.     DB    CR,LF,'After being asked for the comment, he is then asked for'
  65.     DB    CR,LF,'a password which should be typed to restore control.'
  66.     DB    CR,LF,'Both the comment and the password are typed in the'
  67.     DB    CR,LF,'usual fashion followed by a <CR>.'
  68.     DB    CR,LF,'    After INUSE prints the Banner and the Comment, it'
  69.     DB    CR,LF,'waits for a user to hit the <ESCAPE> key, at which'
  70.     DB    CR,LF,'time it asks for the password.  If the correct password'
  71.     DB    CR,LF,'is entered, control is restored to CP/M; otherwise,'
  72.     DB    CR,LF,'the Banner and Comment are reprinted and INUSE waits'
  73.     DB    CR,LF,'for the <ESCAPE> key again.'
  74.     DB    CR,LF,'    The INUSE command takes two forms --'
  75.     DB    CR,LF,'        INUSE -- Runs INUSE'
  76.     DB    CR,LF,'        INUSE / -- Prints this HELP Message'
  77.     DB    CR,LF,0
  78.     JMP    EXIT
  79. IN1:
  80.     CALL    PMSG
  81.     DB    '   Comment? ',0
  82.     MOV    DX,(Offset COMMENT)    ; GET RESPONSE
  83.     MOV    CL,READLN        ; INPUT LINE VIA BDOS
  84.     INT    224
  85.     CALL    PMSG
  86.     DB    CR,LF,'   Password? ',0
  87.     MOV    DX,(Offset INLINE)    ; GET RESPONSE
  88.     MOV    CL,READLN        ; INPUT LINE VIA BDOS
  89.     INT    224
  90. INUSE:
  91.     CALL    SPACER            ; SPACE DOWN ON SCREEN
  92.     CALL    BANNER            ; PRINT INUSE MESSAGE
  93.     CALL    PRCMT            ; PRINT COMMENT ON NEXT LINE
  94.     CALL    SPACER            ; SPACE DOWN ON SCREEN
  95. INUSE1:
  96.     MOV    CL,INCHAR        ; BDOS CHAR INPUT
  97.     INT    224
  98.     AND    AL,7FH            ; MASK MSB
  99.     CMP    AL,61H            ; SMALL A?
  100.     JB    INUSE2
  101.     CMP    AL,61H+26+1        ; > SMALL Z?
  102.     JNB    INUSE2
  103.     SUB    AL,20H            ; CAPITALIZE
  104. INUSE2:
  105.     CMP    AL,ESC            ; ESCAPE CHAR?
  106.     JNZ    INUSE1
  107.     CALL    PMSG
  108.     DB    CR,LF,'   Password? ',0
  109.     MOV    DX,(Offset RDLINE)    ; GET RESPONSE
  110.     MOV    CL,READLN
  111.     INT    224
  112.     MOV    BX,(Offset INLINE)+1    ; COMPARE PASSWORDS
  113.     MOV    DX,(Offset RDLINE)+1
  114.     MOV    SI,DX            ; GET CHAR COUNT
  115.     MOV    AL,[SI]
  116.     CMP    AL,M            ; COMPARE CHAR COUNT
  117.     JNZ    INUSE            ; REPRINT BANNER IF NO MATCH
  118.     MOV    CH,AL            ; CHAR COUNT IN B
  119.     OR    AL,AL            ; NO CHARS?
  120.     JZ    EXIT            ; EXIT IF SO
  121. INUSE3:
  122.     INC    BX            ; PT TO NEXT CHAR
  123.     INC    DX
  124.     MOV    SI,DX            ; GET NEXT CHAR
  125.     MOV    AL,[SI]
  126.     CMP    AL,M            ; COMPARE
  127.     JNZ    INUSE            ; NEW BANNER IF NO MATCH
  128.     DEC    CH            ; COUNT DOWN
  129.     JNZ    INUSE3
  130. ;
  131. ;  Exit INUSE
  132. ;
  133. EXIT:
  134.     MOV    CL,0    ; BACK TO WHENCE WE CAME...
  135.     INT    224
  136. ;
  137. ;  PRINT BANNER CONTAINED IN BLINE BUFFER
  138. ;
  139. BANNER:
  140.     MOV    DH,80H            ;PT TO MSB+1
  141. CBAN:
  142.     MOV    BX,(Offset BLINE)    ;SET PTR TO FIRST CHAR
  143.     MOV    Word Ptr NEXTCH,BX
  144.     CALL    CRLF            ;NEW LINE
  145.     MOV    AL,DH            ;GET BIT PTR
  146.     ROR    AL,1            ;ROTATE
  147.     AND    AL,7FH            ;MASK OUT MSB
  148.     MOV    DH,AL            ;SET BIT PTR
  149.     JZ    CB2            ;NEW LINE AND THEN EXIT
  150. CB1:
  151.     CALL    CONIN            ;GET NEXT CHAR
  152.     MOV    CL,AL            ;CHAR IN C
  153.     OR    AL,AL            ;DONE?
  154.     JZ    CBAN            ;DO NEXT LINE IF SO
  155.     CALL    CONV            ;GET ADDRESS OF DATA IN HL
  156.     JB    CB1            ;SKIP IF ERROR
  157.     CALL    PRINT            ;PRINT 5 CHARS FOLLOWED BY TWO SPACES
  158.     JMPS    CB1            ;CONTINUE
  159. CB2:
  160.     CALL    CRLF            ;1 CRLF
  161.     RET
  162. ;
  163. ;  COMPUTE POINTER TO TABLE ENTRY OF CHAR IN REG A
  164. ;    ON INPUT, A=CHAR; ON OUTPUT, HL=PTR TO TABLE ENTRY (1ST BYTE)
  165. ;
  166. CONV:
  167.     PUSH    CX            ;SAVE BC
  168.     PUSH    DX            ;SAVE DE
  169.     SUB    AL,' '            ;CONVERT <SP> TO 0
  170.     JNB    L_2    
  171.     RET                ;INVALID CHAR
  172. L_2:
  173.     CMP    AL,7BH-' '        ;IN RANGE?
  174.     JNB    CNVER            ;INVALID CHAR
  175.     MOV    DL,AL            ;VALUE IN E
  176.     MOV    DH,0            ;VALUE IN DE
  177.     MOV    BH,DH            ;VALUE IN HL
  178.     MOV    BL,DL
  179.     SHL    BX,1            ;VALUE * 2
  180.     SHL    BX,1            ;VALUE * 4
  181.     ADD    BX,DX            ;HL = VALUE * 5
  182.     MOV    DX,(Offset CHARS)    ;POINT TO BEGINNING OF TABLE
  183.     ADD    BX,DX            ;HL PTS TO ELEMENT IN TABLE
  184.     POP    DX            ;RESTORE DE
  185.     POP    CX            ;RESTORE BC
  186.     OR    AL,AL            ;CLEAR CARRY
  187.     RET
  188. CNVER:
  189.     STC                ;SET CARRY FOR INVALID CHAR
  190.     POP    DX            ;RESTORE DE
  191.     POP    CX            ;RESTORE BC
  192.     RET
  193. ;
  194. ;  PRINT CHAR IN C ACCORDING TO THE ENTRY PTED TO BY HL
  195. ;    BIT MASK IS IN D
  196. ;
  197. PRINT:
  198.     PUSH    CX            ;SAVE BC (C=CHAR)
  199.     MOV    CH,5            ;5 BYTES/CHAR
  200. PRINT1:
  201.     MOV    AL,M            ;GET BIT SET
  202.     AND    AL,DH            ;MASK FOR BIT IN QUESTION
  203.     JZ    PRINT3            ;IF ZERO, PRINT <SP>
  204.     CALL    CONOUT            ;PRINT CHAR IN C
  205. PRINT2:
  206.     LAHF                ;PT TO NEXT BYTE
  207.     INC    BX
  208.     SAHF
  209.     DEC    CH            ;COUNT DOWN
  210.     JNZ    PRINT1
  211.     MOV    CL,' '            ;PRINT THREE SPACES
  212.     CALL    CONOUT
  213.     CALL    CONOUT
  214.     CALL    CONOUT
  215.     POP    CX            ;RESTORE BC
  216.     RET
  217. PRINT3:
  218.     MOV    DL,CL            ;SAVE CHAR
  219.     MOV    CL,' '            ;PRINT <SP>
  220.     CALL    CONOUT
  221.     MOV    CL,DL            ;GET CHAR
  222.     JMPS    PRINT2
  223. ;
  224. ;  PRINT COMMENT ON SCREEN IF ANY
  225. ;
  226. PRCMT:
  227.     CALL    CRLF            ; NEW LINE
  228.     MOV    BX,(Offset COMMENT)+1    ; PT TO CHAR COUNT
  229.     MOV    AL,M            ; GET CHAR COUNT
  230.     INC    BX            ; PT TO FIRST CHAR
  231.     OR    AL,AL            ; ANY?
  232.     JNZ    L_3
  233.     RET
  234. L_3:
  235.     PUSH    BX            ; SAVE PTR TO FIRST CHAR
  236.     ADD    AL,BL            ; POINT TO AFTER LAST CHAR
  237.     MOV    BL,AL
  238.     MOV    AL,BH
  239.     ADC    AL,0
  240.     MOV    BH,AL
  241.     MOV    M,'$'            ; STORE ENDING '$'
  242.     POP    DX            ; PT TO LINE
  243.     MOV    CL,PRLINE        ; BDOS PRINT
  244.     INT    224
  245.     CALL    CRLF            ; NEW LINE
  246.     RET
  247. ;
  248. ;  SUPPORT ROUTINES
  249. ;
  250. SPACER:
  251.     MOV    CH,8            ; GO DOWN SCREEN
  252. SPACE0:
  253.     CALL    CRLF            ; NEW LINE
  254.     DEC    CH            ; COUNT DOWN
  255.     JNZ    SPACE0
  256.     RET
  257. PMSG:
  258.     MOV    BP,SP            ;GET PTR TO STRING
  259.     XCHG    BX,[BP]
  260.     MOV    CH,0            ;SET TAB COUNTER
  261. PMSG1:
  262.     MOV    AL,M            ;GET NEXT BYTE
  263.     INC    BX            ;PT TO NEXT
  264.     OR    AL,AL            ;DONE?
  265.     JZ    PMSG2
  266.     CMP    AL,TAB            ;TABULATE?
  267.     JZ    PMSG@TAB
  268.     MOV    CL,AL            ;CHAR IN C
  269.     CALL    CONOUT            ;PRINT CHAR
  270.     INC    CH            ;INCR CHAR COUNT
  271.     JMPS    PMSG1
  272. PMSG@TAB:
  273.     MOV    CL,' '            ;PRINT <SP>
  274.     CALL    CONOUT            ;PRINT
  275.     INC    CH            ;INCR POSITION COUNT
  276.     MOV    AL,CH            ;GET IT
  277.     AND    AL,7            ;DONE?
  278.     JNZ    PMSG@TAB
  279.     JMPS    PMSG1            ;PROCESS NEXT CHAR
  280. PMSG2:
  281.     MOV    BP,SP            ;RESTORE HL, PTR
  282.     XCHG    BX,[BP]
  283.     RET
  284. CRLF:
  285.     MOV    CL,CR
  286.     CALL    CONOUT
  287.     MOV    CL,LF
  288.     CALL    CONOUT
  289.     MOV    CL,0            ; 2 <NULL>S
  290.     CALL    CONOUT            ; FALL THRU FOR 2ND
  291. CONOUT:
  292.     PUSH    BX    
  293.     PUSH    CX    
  294.     PUSH    DX
  295.     MOV    DL,CL
  296.     MOV    CL,OUTC            ;OUTPUT TO CON:
  297.     INT    224
  298.     POP    DX    
  299.     POP    CX    
  300.     POP    BX
  301.     RET
  302. CONIN:
  303.     PUSH    BX    
  304.     PUSH    DX    
  305.     PUSH    CX
  306.     MOV    BX,Word Ptr NEXTCH    ;GET NEXT CHAR PTR
  307.     MOV    AL,M            ;GET CHAR
  308.     INC    BX            ;PT TO NEXT
  309.     MOV    Word Ptr NEXTCH,BX
  310.     AND    AL,7FH            ;MASK MSB IF ANY
  311.     POP    CX    
  312.     POP    DX    
  313.     POP    BX
  314.     RET
  315. L_4    EQU    $
  316.     DSEG
  317.     ORG    Offset L_4
  318. ;
  319. ;  CHARACTER TABLE
  320. ;    THE CHARACTERS REPRESENTED IN THIS TABLE ARE IN A 5X7 FORMAT
  321. ;    THE FIRST BYTE IN EACH ENTRY REPRESENTS THE FIRST CHAR TO PRINT, ETC
  322. ;    THE BITS 6 TO 0 REPRESENT LINES (SUCCESSIVE) TO PRINT FOR THE CHAR
  323. ;
  324. CHARS    RS    0
  325.     DB    00H,00H,00H,00H,00H    ;<SP>
  326.     DB    00H,00H,7DH,00H,00H    ;EXCLAMATION MARK
  327.     DB    00H,70H,00H,70H,00H    ;"
  328.     DB    14H,7FH,14H,7FH,14H    ;#
  329.     DB    12H,2AH,7FH,2AH,24H    ;$
  330.     DB    62H,64H,08H,13H,23H    ;%
  331.     DB    36H,49H,35H,02H,05H    ;&
  332.     DB    00H,00H,70H,00H,00H    ;'
  333.     DB    1CH,22H,41H,00H,00H    ;(
  334.     DB    00H,00H,41H,22H,1CH    ;)
  335.     DB    22H,14H,7FH,14H,22H    ;*
  336.     DB    08H,08H,3EH,08H,08H    ;+
  337.     DB    00H,01H,06H,00H,00H    ;,
  338.     DB    08H,08H,08H,08H,08H    ;-
  339.     DB    00H,03H,03H,00H,00H    ;.
  340.     DB    02H,04H,08H,10H,20H    ;/
  341.     DB    3EH,45H,49H,51H,3EH    ;0
  342.     DB    11H,31H,7FH,01H,01H    ;1
  343.     DB    21H,43H,45H,49H,31H    ;2
  344.     DB    22H,41H,49H,49H,36H    ;3
  345.     DB    0CH,14H,24H,7FH,04H    ;4
  346.     DB    7AH,49H,49H,49H,46H    ;5
  347.     DB    3EH,49H,49H,49H,26H    ;6
  348.     DB    43H,44H,48H,50H,60H    ;7
  349.     DB    36H,49H,49H,49H,36H    ;8
  350.     DB    30H,49H,49H,49H,3EH    ;9
  351.     DB    00H,00H,36H,00H,00H    ;:
  352.     DB    00H,01H,16H,00H,00H    ;;
  353.     DB    08H,14H,22H,41H,00H    ;<
  354.     DB    14H,14H,14H,14H,14H    ;=
  355.     DB    00H,41H,22H,14H,08H    ;>
  356.     DB    20H,40H,4DH,50H,20H    ;?
  357.     DB    7EH,41H,5DH,4DH,39H    ;@
  358.     DB    3FH,48H,48H,48H,3FH    ;A
  359.     DB    7FH,49H,49H,49H,36H    ;B
  360.     DB    7FH,41H,41H,41H,41H    ;C
  361.     DB    7FH,41H,41H,41H,3EH    ;D
  362.     DB    7FH,49H,49H,49H,41H    ;E
  363.     DB    7FH,48H,48H,48H,40H    ;F
  364.     DB    7FH,41H,41H,49H,4FH    ;G
  365.     DB    7FH,08H,08H,08H,7FH    ;H
  366.     DB    41H,7FH,41H,80H,80H    ;I
  367.     DB    03H,01H,01H,01H,7FH    ;J
  368.     DB    7FH,08H,14H,22H,41H    ;K
  369.     DB    7FH,01H,01H,01H,01H    ;L
  370.     DB    7FH,20H,10H,20H,7FH    ;M
  371.     DB    7FH,30H,08H,06H,7FH    ;N
  372.     DB    7FH,41H,41H,41H,7FH    ;O
  373.     DB    7FH,48H,48H,48H,78H    ;P
  374.     DB    7FH,41H,45H,43H,7FH    ;Q
  375.     DB    7FH,48H,4CH,4AH,79H    ;R
  376.     DB    32H,49H,49H,49H,26H    ;S
  377.     DB    40H,40H,7FH,40H,40H    ;T
  378.     DB    7FH,01H,01H,01H,7FH    ;U
  379.     DB    70H,0CH,03H,0CH,70H    ;V
  380.     DB    7FH,02H,04H,02H,7FH    ;W
  381.     DB    63H,14H,08H,14H,63H    ;X
  382.     DB    60H,10H,0FH,10H,60H    ;Y
  383.     DB    43H,45H,49H,51H,61H    ;Z
  384.     DB    7FH,41H,41H,41H,00H    ;[
  385.     DB    20H,10H,08H,04H,02H    ;\
  386.     DB    00H,41H,41H,41H,7FH    ;]
  387.     DB    04H,08H,10H,08H,04H    ;^
  388.     DB    01H,01H,01H,01H,01H    ;_
  389.     DB    00H,40H,20H,10H,00H    ;@
  390.     DB    3FH,48H,48H,48H,3FH    ;A
  391.     DB    7FH,49H,49H,49H,36H    ;B
  392.     DB    7FH,41H,41H,41H,41H    ;C
  393.     DB    7FH,41H,41H,41H,3EH    ;D
  394.     DB    7FH,49H,49H,49H,41H    ;E
  395.     DB    7FH,48H,48H,48H,40H    ;F
  396.     DB    7FH,41H,41H,49H,4FH    ;G
  397.     DB    7FH,08H,08H,08H,7FH    ;H
  398.     DB    41H,7FH,41H,80H,80H    ;I
  399.     DB    03H,01H,01H,01H,7FH    ;J
  400.     DB    7FH,08H,14H,22H,41H    ;K
  401.     DB    7FH,01H,01H,01H,01H    ;L
  402.     DB    7FH,20H,10H,20H,7FH    ;M
  403.     DB    7FH,30H,08H,06H,7FH    ;N
  404.     DB    7FH,41H,41H,41H,7FH    ;O
  405.     DB    7FH,48H,48H,48H,78H    ;P
  406.     DB    7FH,41H,45H,43H,7FH    ;Q
  407.     DB    7FH,48H,4CH,4AH,79H    ;R
  408.     DB    32H,49H,49H,49H,26H    ;S
  409.     DB    40H,40H,7FH,40H,40H    ;T
  410.     DB    7FH,01H,01H,01H,7FH    ;U
  411.     DB    70H,0CH,03H,0CH,70H    ;V
  412.     DB    7FH,02H,04H,02H,7FH    ;W
  413.     DB    63H,14H,08H,14H,63H    ;X
  414.     DB    60H,10H,0FH,10H,60H    ;Y
  415.     DB    43H,45H,49H,51H,61H    ;Z
  416. ;
  417. ;  BUFFERS
  418. ;
  419.     RS    40            ;20-ELT STACK
  420. STACK    RS    0
  421.     RS    2            ;TOP OF BANNER STACK; CP/M STACK
  422. NEXTCH    RS    0
  423.     RS    2
  424. LLEN    EQU    80            ;NUMBER OF CHARS IN LINE, MAX
  425. INLINE    RS    0
  426.     DB    LLEN            ;CHAR COUNT FOR INLINE
  427.     RS    LLEN+1
  428. RDLINE    RS    0
  429.     DB    LLEN            ;CHAR COUNT FOR RDLINE
  430.     RS    LLEN+1
  431. COMMENT    RS    0
  432.     DB    LLEN
  433.     RS    LLEN+1
  434. BLINE    RS    0
  435.     DB    '* INUSE *',0        ; MESSAGE
  436.     END
  437.