SUBROUTINE SUBRTT(ICMD,ITYP,ISW) C C C COMPONENT: SUBRTT C C DATE: 02-AUG-79 C C AUTHOR: GR JOHNSON C BATTELLE NORTHWEST C P O BOX 999 C RICHLAND WA 99352 C C SOURCE: FORTRAN IV-PLUS C C CALLER: FORTRAN IV-PLUS C C RESTRICTIONS: C C USER MUST HAVE REALTIME PRIVILEGES C C CALLING SEQUENCE: C C CALL SUBRTT(COMMAND,ITYP,ISW) C C COMMAND = VALID COMMAND LINE FOR THE SUBTASK. C (LAST BYTE OF COMMAND STRING MUST BE NULL) C C ITYP = ARGUMENT SPECIFYING TYPE OF TASK. C C 02 COMMAND IS FOR AN MCR TASK (...XYZ). C 03 COMMAND IS FOR A SYSTEM LIBRARY TASK ($$$XYZ). C 04 COMMAND IS FOR AN INSTALLED TASK. C C ISW = VARIABLE TO RECEIVE THE INTEGER STATUS WORD. C C 00 TASK SUCCESSFUL (OR STATUS NOT RETURNED) C C 01 TASK SUCCESSFUL, WARNING DIAGNOSTICS OCCURED C 02 TASK SUCCESSFUL, NON-FATAL ERRORS OCCURED C 04 TASK FAILED, FATAL ERRORS C C -02 TASK NOT INSTALLED C -63 INVALID ARGUMENT LIST C -80 DIRECTIVE PRIVILEGE VIOLATION C C C DESCRIPTION: C C "SUBRTT" IS A FORTRAN-CALLABLE SUBROUTINE TO SPAWN A REALTIME C TASK. THE ROUTINE IS PERFORMS THE SAME OPERATIONS AS THE SYSTEM C "SPAWN" DIRECTIVE, BUT IS PROVIDED FOR REALTIME COMPATIBILITY WITH C "SUBTSK". THE CALLING ROUTINE WILL WAIT FOR A SUBTASK EVENT, EITHER C SUCCESSFULL COMPLETION OF THE TASK OR AN ABORT ON FAILURE. C C C PARAMETERS AND VARIABLES C PARAMETER IEFN=1 ! EVENT FLAG C PARAMETER DOTS='...' ! SYSTEM TASK PARAMETER DOLS='$$$' ! SYSTEM LIBRARY TASK C INTEGER ITSK(2) ! RADIX-50 TASK NAME INTEGER IOP(6) ! OPTIONAL PARAMETERS INTEGER IESB(8) ! EXIT STATUS BUFFER BYTE ICMD(1) ! COMMAND LINE BUFFER INTEGER ICMDL ! COMMAND LINE LENGTH C DATA IOP/0,0,"110,0,0,0/ ! RUN PRIORITY = 110 C C C C GENERATE RADIX-50 TASK NAME C GO TO (101,102,103,104),ITYP C 101 ISW=-63 RETURN C 102 CALL IRAD50(3,DOTS,ITSK(1)) CALL IRAD50(3,ICMD,ITSK(2)) ICMDL=LENGTH(ICMD) GO TO 20 C 103 CALL IRAD50(3,DOLS,ITSK(1)) CALL IRAD50(3,ICMD,ITSK(2)) ICMDL=LENGTH(ICMD) GO TO 20 C 104 CALL IRAD50(6,ICMD,ITSK(1)) ICMDL=0 C C C SPAWN REAL-TIME TASK AND WAIT FOR SINGLE EVENT C 20 CALL SPAWN(ITSK,IOP,IEFN,IESB,ICMD,ICMDL,,ISW) IF(ISW.LT.0) RETURN CALL WAITFR(IEFN) C C C RETURN WITH EXIT STATUS C ISW=0 IF(IESB(1).EQ.0) ISW=1 IF(IESB(1).EQ.2) ISW=2 IF(IESB(1).EQ.4) ISW=4 C 9999 RETURN END