3;PASCAL DIRECT INPUT INTERFACE ROUTINES - RM-80031733;                                         CT-8005143;;F;*********************************************************************F*; AVAIL - TEST IF NEXT CHARACTER AVAILABLE*;; FUNCTION AVAIL: BOOLEAN;F;*********************************************************************F;AVAIL::LHLD    SPIL       MOV     A,M       MVI     C,0       ANA     A       JZ      AVAI1       INR     C0AVAI1: POP     H       ;RETURN ADDRESS TO PASCAL0       POP     D       POP     D       POP     D       POP     D%       PUSH    B       ;LOGICAL VALUE%       PCHL;;F;*********************************************************************F(; NEXT - WAIT FOR AND GET NEXT CHARACTER(;; FUNCTION NEXT: CHAR;F;*********************************************************************F;9NEXT:: LHLD    SPIL    ;ADDRESS OF DIRECT INPUT SEMAPHORE9       MOV     B,H       MOV     C,L       CALL    WAIT;       LHLD    BPIL       MOV     E,M       MVI     D,0       INX     H       MOV     A,M       INR     A       JNZ     NEXT1;       INX     H       MOV     A,M       INX     H       MOV     H,M       MOV     L,ANEXT1: SHLD    BPIL;<       POP     H       ;RETURN ADDRESS TO PASCAL INTERPRETER<       POP     B       POP     B       POP     B       POP     B&       PUSH    D       ;FUNCTION VALUE&       PCHL;;F;*********************************************************************F!; SETUP - INITIALIZE DIRECT INPUT!;A; PROCEDURE SETUP( VAR BUFFER: PACKED ARRAY( 1..LENGTH ) OF CHAR;A%;                  LENGTH: INTEGER );%F;*********************************************************************F;5SETUP::POP     B       ;RETURN ADDRESS TO INTERPRETER5%       POP     D       ;BUFFER LENGTH%&       POP     H       ;BUFFER POINTER&5       PUSH    B       ;RETURN ADDRESS TO INTERPRETER5&       PUSH    H       ;BUFFER POINTER&       SHLD    BPIL;       MOV     B,H       MOV     C,LE       DCR     E       ;LAST 3 CHARACTERS OF BUFFER USED FOR OVERHEADE       DCR     E       DCR     E0G1:    MVI     M,0     ;ZERO REMAINDER OF BUFFER0       INX     H       DCR     E       JNZ     G1;4       MVI     M,0FF   ;SET UP BUFFER STOP CHARACTER4       INX     H7       MOV     M,C     ; AND POINTER TO START OF BUFFER7       INX     H       MOV     M,B;.       LXI     H,6     ;GET AREA FOR SEMAPHORE.       CALL    ALLOC5       MOV     A,D     ;SEE IF WE GOT ANYTHING AT ALL5       ORA     E       JZ      GERR;       XCHG:       PUSH    H       ;POINTER TO START OF SEMAPHORE AREA:       SHLD    SPIL6       MOV     A,E     ;NUMBER OF CHARACTERS ALLOCATED6       STA     SLEN+       MVI     E,6     ;LENGTH OF SEMAPHORE++G2:    MVI     M,0     ;ZERO SEMAPHORE AREA+       INX     H       DCR     E       JNZ     G2;,       CALL    F]INI   ;GET A MESSAGE BUFFER,2       MVI     M,9     ;DEFINE DIRECT INPUT OPCODE2       INX     H       INX     H,       POP     B       ;POINTER TO SEMAPHORE,       MOV     M,C       INX     H       MOV     M,B;       LXI     B,4       DAD     B&       POP     B       ;BUFFER POINTER&       MOV     M,C       INX     H       MOV     M,B;       LHLD    CSEMA       MOV     B,H       MOV     C,L       XCHG+       CALL    SEND    ;DEFINE DIRECT INPUT+;
       RET
;;#GERR:  POP     H       ;CLEAR STACK#       MVI     A,-#10$       STA     IORSLT  ;SET IORESULT$
       RET
;;F;*********************************************************************F'; FINIS - CANCEL DIRECT INPUT CONDITION';; PROCEDURE FINIS;F;*********************************************************************F;,FINIS::CALL    F]INI   ;GET A MESSAGE BUFFER,       PUSH    D.       MVI     M,7     ;DEFINE BREAK SEMAPHORE.       INX     H       INX     H=       LXI     B,OPMES ;OPERATOR COMMUNICATION MAIN SEMAPHORE=       MOV     M,C       INX     H       MOV     M,B       LXI     B,4       DAD     BA       LXI     D,TMPIL ;PUT POINTER TO TERMINAL AREA INTO MESSAGEA       MVI     B,2       CALL    MOVE       LHLD    CSEMA       MOV     B,H       MOV     C,L       POP     HD       CALL    SEND    ;DEFINE BREAK SEMAPHORE (CANCEL DIRECT INPUT)D;1       LHLD    SPIL    ;DEALLOCATE SEMAPHORE AREA1       XCHG       LDA     SLEN       MOV     L,A       MVI     H,0       CALL    DELOC;
       RET
;;;CBPIL:  DS      2       ;ADDRESS WHERE NEXT CHARACTER WILL BE PLACEDCSPIL:  DS      2SLEN:  DS      1;;
       END
  cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc