.TITLE ATTAST - ATTACH LUN FOR UNSOLICITED CHARACTER TRAPS .IDENT \LMF01A\ .MCALL SETF$,ASTX$S,EXIT$S,QIOW$,DIR$ ; ; WRITTEN: ; L. M. FRASER 14-JUN-79 ; ;+ ; ** ATTAST ; THIS ROUTINE SETS UP A FORTRAN CALLABLE AST SERVICE FUNCTION TO ; ALLOW FORTRAN PROGRAMMERS TO INPUT ASYNCHRONOUS CONTROL INFORMATION ; INTO AN ACTIVELY WORKING PROGRAM ; ; ENTRY POINTS AND CALL SYNTAX: ; ; CALL ATTAST (LUN,[EFN]) - ATTACH LUN FOT AST SERVICE AND ; SPECIFY EFN TO BE SET ON ANY INPUT ; CHARACTER. DEFAULT IS LUN = 5 AND ; NO EFN SETTING ; ; CALL DETACH [(LUN)] - RELEASE LUN ; ; DATA RETURNED IN COMMON ; ; COMMON /ASTDAT/ICHAR*1 - DATA FROM THE AST IS RETURNED BYTE ; FORM AS IS THE ERROR RETURN FROM THE ; ATTACH AND DETACH FUNCTIONS ($DSW) ; ; SPECIAL CHARACTER CHECKING -- ; ; TWO CHARACTERS ARE SPECIFICALLY MONITORED. C AND Z ; ; C - CAUSES AN IMMEDIATE DETACH FOR MCR ACCESS ; ; Z - CAUSES AN IMMEDIATE TASK EXIT SAME AS ABORT ; ;- ; DIRRECTIVE STORAGE SETF: SETF$ 0 EFN = SETF+S.ETEF ; LOCATION FR STORAGE OF EFN QIO: QIOW$ IO.ATA,5,,,,, LUN = QIO+Q.IOLU ; LOCATION FOR LUN STORAGE .PSECT ASTDAT,RW,D,GBL,REL,OVR CHAR: .WORD 0 .PSECT .ENABL LSB ATTAST:: ; ENTRY POINT CLR EFN ; NO EVENT FLAG WANTED MOV #QIO,R0 ; POINT TO DPB CMPB (R5),#1 ; CHECK ARGUMENTS GIVEN? BMI 5$ ; NO, USE DEFAULTS BEQ 1$ ; ONLY ONE,CHECK FOR LUN ; MOV 4(R5),R2 ; GET SECOND ADDRESS CMP #-1,R2 ; WAS ONE GIVEN? BEQ 1$ ; NO, SKIP IT MOV (R2),EFN ; YES, SET IT UP ; 1$: MOV 2(R5),R1 ; GET 1ST ADDRESS CMP #-1,R1 ; IS IT PRESENT? BEQ 5$ ; NO, USE DEFAULTS MOV (R1),LUN ; YES, SET UP LUN BR 10$ ; USE COMMON CODE ; 5$: MOV #5,LUN ; SET UP DEFAULTS ; 10$: MOV #IO.ATA,Q.IOFN(R0) ; SET UP FUNCTION ; 20$: MOV #1,CHAR ; ASSUME SUCCESS DIR$ R0 ; ISSUE FUNCTION BCC 30$ ; SKIP IF NO RROR MOVB @#$DSW,CHAR ; RETURN ERROR CODE 30$: MOV CHAR,R0 ; RETURN AS FUNCTION ALSO RETURN ; DETACH:: ; ENTRY POINT MOV #QIO,R0 ; POINT TO DPB MOV #IO.DET,Q.IOFN(R0) ; SET UP FUNCTION BR 20$ ; ; AST SERVICE ROUTINE ; AST: MOVB (SP)+,CHAR ; CLEAN STACK AND RETURN CHARACTER CMPB CHAR,#<'Z-100> ; ^Z? BNE 100$ EXIT$S ; CRASH PROGRAM 100$: CMPB CHAR,#<'C-100> ; ^C? BNE 110$ MOV R0,-(SP) ; SAVE REG CALL DETACH ; REMOVE AST SERVICE MOV (SP)+,R0 ; RESTORE 110$: TST EFN ; ANY FLAG TO SET? BEQ 200$ ; NO,ALL DONE DIR$ #SETF ; SET THE FLAG 200$: ASTX$S ; RETURN FROM AST .END