.TITLE RUNTS ; ; FORTRAN-CALLABLE SUBROUTINE TO RUN A TIME-SHARED TASK, ; OPTIONALLY SEND A MESSAGE TO IT, AND OPTIONALLY WAIT FOR A SUBTASK EVENT ; ; FORTRAN CALLING SEQUENCE: ; CALL RUNTS(TASKNAME [,NTDB] [,ITYP] [,MESS] [,WAIT]) ; TASKNAME = COMMAND LINE TERMINATED BY NULL BYTE ; NTDB = ORDINAL # OF SUBTASK (DEFAULT 1) ; ITYP = TYPE OF TASK: ; 1 (DEFAULT) FILENAME FOR AUTO-INSTALL + RUN ; 2 ...XYZ ; 3 $$$XYZ ; 4 INSTALLED TASK (<= 6 CHARS) ; MESS = OPTIONAL MESSAGE (LENGTH; MESSAGE) ; WAIT = IF NON-NULL, STOP FOR SUBTASK TO CAUSE AN EVENT ; .PSECT SUBTAS,RO,I,LCL,REL,CON RUNTS:: MOVB (R5)+,R2 ;# OF ARGS BLE 100$ ;INVALID ARGUMENT LIST INC R5 MOV (R5)+,R0 ;ADDRESS OF STRING BLE 100$ ;INVALID ARGUMENT 4$: CMP #2,R2 ;AT LEAST 2 ARGUMENTS? BGT 20$ ;NO -- USE DEFAULT MOV (R5)+,R3 ;NTDB ADDRESS BLE 20$ ;N.G.--USE DEFAULT MOV (R3),R3 ;NTDB CMP #MAXTD,R3 ;WITHIN RANGE? BLT 20$ ;TOO BIG--USE DEFAULT SUB #1,R3 ASL R3 ;WORD OFFSET BR 21$ 20$: CLR R3 ;SET TO DEFAULT 21$: MOV TDB(R3),R4 ;SET TDB MOV R0,T.CMDA(R4) ;SET ADDRESS OF STRING IN CTDB CLR R1 ;INITIALIZE CHAR. COUNT 2$: TSTB (R0)+ ;CHAR .EQ. 0? BEQ 3$ ;YES--STOP COUNTING INC R1 ;NO. COUNT IT BR 2$ ;LOOP TILL 0 FOUND 3$: CMP #3,R2 ;3 OR MORE ARGS? BGT 5$ ;NO--USE DEFAULT TYPE MOV (R5)+,R0 ;ADDRESS OF TYPE BLE 5$ ;USE DEFAULT MOV (R0),R0 ;TYPE CMP #1,R0 ;TYPE 1? BEQ 5$ ;YES CMP #2,R0 ;TYPE 2? BNE 6$ ;NO MOVB #TS.DOT,T.TTYP(R4) ;SET TYPE BR 11$ 6$: CMP #3,R0 ;TYPE 3? BNE 7$ ;NO MOVB #TS.DOL,T.TTYP(R4) ;SET TYPE BR 11$ 7$: CMP #4,R0 ;TYPE 4? BNE 5$ ;NO!! TRY DEFAULT MOVB #TS.INS,T.TTYP(R4) ;SET TYPE BR 11$ 5$: MOVB #TS.USE,T.TTYP(R4) 11$: MOVB R1,T.CMDL(R4) ; IS THERE A MESSAGE TO SEND? CMP #4,R2 ;IS MESSAGE BUFFER SPECIFIED? BGT 13$ ;NO MOV (R5),R0 ;ADDRESS OF MESSAGE BUFFER BLE 12$ ;INVALID ADDRESS CMP #253.,(R0) ;MESSAGE LENGTH LESS THAN 253? BLT 12$ ;NO--IGNORE MESSAGE MOV SDB(R3),R3 MOV R0,T.SNDA(R3) BR 70$ 12$: CMP #5,R2 ;FIVE ARGUMENTS? BNE 13$ ;NO RUN$T R4,,,,,STOP BCC 101$ BR 99$ 13$: RUN$T R4 ;RUN SUBTASK BCC 101$ 99$: JSR PC,ERRTS ;CALL ERROR ROUTINE RETURN 70$: TDPR$R R4,#JP.PI,#PR.CHN ;ENABLE SEND/RECV PRIV CMP #5,R2 BNE 75$ RUN$T R4,,,,R3,STOP BCC 101$ BR 99$ 75$: RUN$T R4,,,,R3 BCC 101$ BR 99$ 101$: MOV #1,R0 ;SUCCESS INDICATOR RETURN 100$: MOV #-1,R0 ;INVALID ARGUMENT LIST RETURN .END