.TITLE SMCALL .IDENT /V01/ ; FORTRAN SEMAPHORE SUBROUTINE CALLS ; WRITTEN 6/8/77 BY HARRY ATHERTON ; SEMP:: MOV (PC)+,R0 ;PICK UP APPROPRIATE DIC .BYTE 13.,2 BR SEMCOM ;USE COMMON CODE SEMV:: MOV (PC)+,R0 .BYTE 15.,2 SEMCOM: MOV (R5)+,R1 ;GET NUMBER OF ARGUMENTS TSTB R1 ;IS IT VALID ? BLE ERROR ;MUST BE AT LEAST ONE ARGUMENT MOV (R5)+,R2 ;ADDRESS OF FIRST ARGUMENT CMP #-1,R2 ;IS IT NULL ? BEQ ERROR ;TOO BAD IF YES MOV @R2,-(SP) ;PUT SEMAPHORE NUMBER ON STACK MOV R0,-(SP) ;AND APPROPRIATE DIC EMT ^O<377> ;CALL EXEC ;WE HAVE RETURNED, SEE WHAT HAPPENED CMPB #2,R1 ;IS THERE A SECOND ARGUMENT ? BGT RET ;BRANCH IF NOT MOV (R5)+,R3 ;GET 2ND ARGUMENT ADDRESS CMP #-1,R3 ;IS IT NULL ? BEQ RET ;BRANCH IF YES ;HE WANTS THE DSW MOV @#$DSW,@R3 ;KEEP PROGRAM PI ;NOW RETURN RET: RETURN ; ERROR: ;CALL WITH NO ARGUMENTS IS A FATAL ERROR TRAP 228. ;ERROR CODE 100. ;THAT'S IT !! .END