; ; SUBROUTINE VARSRR ; LOADABLE BASIC SUBROUTINE ; TO SEND DATA TO A SPECIFIED TASK AND REQUEST OR RESUME IT. ; BASIC CALL: ; CALL "VARSRR"(N$,D$,P,S) ; WHERE: ; N$ IS A STRING CONTAINING NAME OF RECEIVING TASK ; D$ IS A STRING CONTAINING DATA TO BE SENT ; P IS PRIORITY FOR REQUEST ; S IS RETURNED DIRECTIVE STATUS WORD ; .MCALL ULODHD ULODHD START,END,VARSRR ; ; DEFINE FLOATING POINT REGISTERS ; AC0=%0 START: VARSRR: JSR R4,@#GTRGPI ;GET ARGUMENTS (ON STACK) .BYTE 3,3,1,2,0 ;ARG TYPE LIST .EVEN JSR PC,@#PARCHK ;CHECK FOR TRAILING PAREN MOV SP,R5 ;ARG LIST ADD -> R5 MOV R1,-(SP) ;SAVE TEXT PTR MOV 4(R5),-(SP) ;LEN OF DATA STRING INC (SP) ;ROUND UP TO ASR (SP) ;NEAREST WORD CLR -(SP) ;NO EVENT FLAG MOV 6(R5),-(SP) ;ADDRESS OF DATA STRING CLR -(SP) ;NO EXPLICIT UIC LDF 10(R5),AC0 ;GET PRIORITY STCFI AC0,-(SP) ;PUT IT ON STACK CLR -(SP) ;NO PARTITION CLR -(SP) ;NAME CLR -(SP) ;SPACE FOR 2ND HALF OF NAME MOV 2(R5),R0 ;ADDRESS OF TASK NAME MOV #1,R1 ;FLAG TO INCLUDE PERIODS JSR PC,@#$CAT5 ;DO CONVERSION MOV R1,-(SP) ;FIRST HALF OF NAME -> STACK BCS 1$ ;IF NAME TERMINATED, BRANCH JSR PC,@#$CAT5 ;CONVERT 2ND HALF MOV R1,2(SP) ;PUT IT AWAY 1$: MOV #73.+<400*12>,-(SP) ;DIRECTIVE CODE ON STACK EMT 377 ;DO IT MOV (SP)+,R1 ;RESTORE TEXT PTR LDCIF @#0,AC0 ;DIRECTIVE CODE -> AC0 ADD #14,R5 ;MAKE R5 POINT TO STORE ADDRESS JSR PC,@#NSTORE ;AND GO DO IT ADD #22,SP ;CLEAN STACK RTS PC END: .END