.TITLE PBFILS ; ; THIS FILE CONTAINS A SET OF FORTRAN CALLABLE SUBROUTINES TO USE ; LK11 PUSHBUTTON BOX VIA THE PB: DRIVER. (SHORT VERSION) ; ; CALLING PROCEDURES: ; ; CALL PBATT(LUN,[IOST],[IDS]) ; ; ATTACHES THE PB: UNIT, SPECIFIED BY THE "LUN" ARGUMENT ; LUN: LOGICAL UNIT NUMBER ; IOST: I/O STATUS IN LOW ORDER BYTE (OPTIONAL) ; IDS: DIRECTIVE STATUS (OPTIONAL) ; ; CALL PBDET(LUN,[IOST],[IDS]) ; ; DETACHES THE PB: UNIT. ; SAME ARGUMENTS AS IN PBATT. ; ; ; CALL PBSET(LUN,[IOST],[IDS]) ; ; SET UNIT, ASSIGNED TO "LUN". ; SAME ARGUMENTS AS IN PBATT. ; ; CALL PBCLR(LUN,[IOST],[IDS]) ; ; CLEARS UNIT, ASSIGNED TO "LUN". ; SAME ARGUMENTS AS IN PBATT. ; ; IF(PBSTAT(LUN,[IOST],[IDS])) GO TO 10 ; OR: CALL PBSTAT(LUN,[IOST],[IDS],[STAT]) ; ; "PBSTAT" IS A LOGICAL FUNCTION AND WILL REFLECT ; THE STATUS OF THE UNIT SPECIFIED [ON/OFF]. ; IF THE SUBROUTINE IS USED, THE LOGICAL "STAT" WILL ; CONTAIN THE STATUS. ; SAME ARGUMENTS AS IN PBATT. ; ; IF(PBRAL(LUN,[IOST],[IDS])) GO TO 10 ; OR: CALL PBRAL(LUN,[IOST],[IDS],[IVAL]) ; ; "PBRAL" IS AN INTEGER FUNCTION WHICH CONTAINS ; THE 16 BIT STATUS OF THE LK11. ; IF THE SUBROUTINE IS USED, "IVAL" REFLECTS THIS ; STATUS. ; SAME ARGUMENTS AS IN PBATT. ; ;****************************************************************************** ; .MCALL QIO$S .GLOBL PBSET,PBCLR,PBSTAT,PBATT,PBDET,PBRAL ; ; SET: .WORD 0 ;LOCAL STORAGE FOR PBSET AND PBCLR STAT: .WORD 0 ;LOCATION TO RECEIVE THE UNIT STATUS IOST: .BLKW 2 ;I/O STATUS BLOCK ; ; PBATT: TSTB (R5) ;IF NUM OF ARG = 0, RETURN BLE RTS QIO$S #IO.ATT,@2(R5),,,#IOST ;ELSE ATTACH UNIT ; ; COMMON EXIT OF SEVERAL ROUTINES ; COMRTS: CMPB #1,(R5) ;NUMBER OF ARGUMENTS SPECIFIED = 1?? BEQ RTS ;IF EQ YES, SO RETURN TO CALLER CMP #-1,4(R5) ;DUMMY ARGUMENT?? BEQ N0 ;IF EQ YES, SO DON'T FILL IT MOV IOST,@4(R5) ;IF NOT RETURN I/O STATUS N0: CMPB #2,(R5) ;NUM OF ARG = 2?? BEQ RTS ;IF EQ YES, SO RETURN CMP #-1,6(R5) ;DUMMY ARGUMENT?? BEQ RTS ;IF EQ YES, SO RETURN MOV $DSW,@6(R5) ;IF NOT RETURN $DSW ALSO RTS: RTS PC ;RETURN TO CALLER ; ; PBDET: TSTB (R5) ;IF NUM OF ARGUMENTS = 0, RETURN BLE RTS QIO$S #IO.DET,@2(R5),,,#IOST ;ELSE DETACH UNIT BR COMRTS ;BRANCH TO COMMON RETURN ; ; ; PBSET: TSTB (R5) ;IF NUM OF ARG = 0, RETURN BLE RTS MOV #-1,SET ;SET VALUE TO .TRUE. DOIT: QIO$S #IO.WVB,@2(R5),,,#IOST,,<#SET,#2> ;SET/RESET STATUS OF UNIT BR COMRTS ;BRANCH TO COMMON RETURN ; ; PBCLR: CLR SET ;SET VALUE TO .FALSE. BR DOIT ;AND ACTIVATE DRIVER ; ; PBSTAT: TSTB (R5) ;IF NUM OF ARG = 0, RETURN BLE RTS QIO$S #IO.RVB,@2(R5),,,#IOST,,<#STAT,#2> ;GET STATUS PBS0: MOV STAT,R0 ;RETURN VALUE CMPB #4,(R5) ;MORE THAN 3 ARGUMENTS?? BGT N1 ;IF GT NO, SO IT WAS A FUNCTION CALL CMP #-1,10(R5) ;DUMMY ARGUMENT?? BEQ N1 ;IF EQ YES, SO DON'T FILL IT MOV STAT,@10(R5) ;YES, SO COPY STATUS INTO 4TH ARGUMENT. N1: JMP COMRTS ;BRANCH TO COMMON RETURN ; ; PBRAL: TSTB (R5) ;IF NUM OF ARG = 0, RETURN BLE RTS QIO$S #IO.RAL,@2(R5),,,#IOST,,<#STAT,#2> ;GET 16-BIT STATUS BR PBS0 ;RETURN STATUS TO USER ; ; ; .END