SUBROUTINE MCRREQ (TSKNAM,CMDLIN,WAIT,STATUS) C C .IDENT /02JUN7/ ;11:00:00, EM C .ENTRY MCRREQ - MCR TASK REQUEST C;+ C - M C R R E Q C C PURPOSE: THIS ROUTINE IS THE FORTRAN INTERFACE TO C THE MCRREQ TASK WRITTEN BY HENRI VAN DER BECKEN C OF LASL. WITH IT ANY PROGRAM CAN REQUEST AN C MCR TASK, AND PASS IT A COMMAND LINE. NOTE THAT C MULTI-LINE OPERATIONS MAY BE EXECUTED BY WRITING C AN INDIRECT FILE AND SENDING THE INDIRECT AS THE C COMMAND LINE. PROVISIONS ARE INCLUDED FOR WAITING C UNTIL THE MCR TASK HAS RUN, AND ERROR NOTIFICATION. C C INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) C CALL MCRREQ (TSKNAM [,CMDLIN] [,WAIT] [,STATUS]) C C INPUT: TSKNAM = (BYTE ARRAY): THREE LETTER MCR NAME C C CMDLIN = (BYTE ARRAY): ASCII COMMAND LINE TO C BE PASSED TO MCR FUNCTION. NOTE THAT C THIS IS ONLY THE DATA, NOT THE MCR C NAME, AND DOES NOT INCLUDE A C TERMINATOR. THE LINE MUST BE TERMINATED C BY A ZERO BYTE (AUTOMATIC IN F4P). MAY C BE DEFAULTED IF NO DATA TO BE SENT. C C WAIT = (DUMMY ARGUMENT): IF THIS ARGUMENT C IS NON-NULL, THIS ROUTINE WILL NOT C RETURN UNTIL THE MCR TASK HAS EXITED. C IF NULL, THE RETURN WILL BE DIRECTLY C AFTER REQUESTING THE MCR TASK. C C OUTPUT: STATUS = (INTEGER): REQUEST STATUS, ONE C OF THE FOLLOWING: C +1 - SUCCESSFUL COMPLETION C -65 - NO NODES AVAILABLE TO REQUEST C -66 - REQUEST FAILED C C C EXAMPLES: C C PROGRAM BACKUP C CALL MCRREQ ('MOU','DK0:BACKUP',WAIT) C CALL MCRREQ ('PIP','DK0:[52,1]=SY:[52,1]*.*',WAIT) C CALL MCRREQ ('DMO','DK0:') C CALL EXIT C END C C PROGRAM RUN C >>> HERE'S HOW TO INSTALL, RUN, AND REMOVE A TASK FROM ANOTHER C TASK: C C CALL MCRREQ ('RUN','MYTASK') C CALL EXIT C END C C LANGUAGE: FORTRAN C C RESTRICTIONS: THIS ROUTINE IS NOT USABLE UNDER RSX-11M. C;- C REVISIONS: C DEC-75 RK WRITTEN C 02-JUN-77 EM UPDATED TO CONFORM TO STANDARDS C C 2. PROGRAM DETAIL C C 2.1 DECLARATIONS-- C IMPLICIT INTEGER (A-Z) C LOGICAL*1 CMDLIN(80),BYTBUF(80),TSKNAM(3) C DIMENSION SEND(43),RECEIV(3) C REAL REQTSK C EQUIVALENCE (SEND(4),BYTBUF),(SEND(3),BUFIND), 1 (SEND,RECEIV),(RECEIV(3),RSTAT) C C 2.2 DATA INITIALIZATION-- C DATA REQTSK /6RMCRREQ/ DATA ALTMOD /"33/, SPACE /"40/ C C 2.4 PROGRAM FLOW-- C C MAKE SURE ENOUGH ARGUMENTS WERE SUPPLIED C CALL ARGS(NARGS,BITMAP) D TYPE 90,BITMAP D90 FORMAT (' BITMAP IS ',O2) IF (NARGS.GE.1) GOTO 105 TYPE 100 100 FORMAT (' MCRREQ -- NOT ENOUGH ARGUMENTS IN CALL') CALL ABORT C C PUT MCR TASK NAME INTO FRONT OF BUFFER C 105 CONTINUE DO 107 I=1,3 BYTBUF(I)=TSKNAM(I) 107 CONTINUE BUFIND=3 C C PUT MCR TASK NAME INTO SEND BUFFER C CALL IRAD50 (3,TSKNAM,SEND(1)) SEND(2)=SEND(1) C C COPY COMMAND LINE INTO SEND BUFFER C IF ((BITMAP.AND."2).EQ.0) GOTO 120 BUFIND=BUFIND+1 BYTBUF(BUFIND)=SPACE INDEX=1 110 CONTINUE IF (CMDLIN(INDEX).EQ.0) GOTO 120 BUFIND=BUFIND+1 IF (BUFIND.LE.80) GOTO 115 TYPE 112 112 FORMAT (' MCRREQ -- TOO MANY CHARACTERS IN CMDLIN') CALL ABORT 115 CONTINUE BYTBUF(BUFIND)=CMDLIN(INDEX) INDEX=INDEX+1 GOTO 110 C C ADD ALTMODE TERMINATOR TO END OF COMMAND STRING AND SET LENGTH C 120 CONTINUE IF (BUFIND.EQ.4) GOTO 121 BUFIND=BUFIND+1 121 CONTINUE BYTBUF(BUFIND)=ALTMOD C C SET FLAG WORD IF WE HAVE TO WAIT FOR MCR TASK TO FINISH C SEND(1)=0 IF ((BITMAP.AND."4).NE.0) SEND(1)=1 C C SEND THE DATA TO THE MCRREQ TASK AND REQUEST IT C D TYPE 122,SEND(1),SEND(3),(BYTBUF(I),I=1,SEND(3)) D122 FORMAT(' WAIT IS ',I1,' BUFLEN IS ',I2,' BUFFER IS:', D 1 /,1X,80O4) CALL VSEND (REQTSK,SEND,,(((BUFIND+1)/2)+3),,,RSTAT) IF (RSTAT.EQ.1) GOTO 130 TYPE 125,RSTAT 125 FORMAT (' SEND TO MCRREQ FAILED. ERROR = ',I4,' TASK ABORTED') CALL ABORT 130 CONTINUE CALL REQUES (REQTSK,,RSTAT) IF (RSTAT.EQ.1) GOTO 140 TYPE 135,RSTAT 135 FORMAT (' REQUEST OF MCRREQ FAILED. ERROR = ',I4,' TASK ABORTED') CALL ABORT C C SUSPEND, AND WAIT FOR RESUMPTION C 140 CONTINUE CALL SUSPND C C WE'VE BEEN RESUMED, DO A RECEIVE DATA TO GET STATUS CODE C CALL VRECEV (REQTSK,RECEIV,1) C C IF USER WANTS STATUS RETURNED, DO SO C IF ((BITMAP.AND."10).NE.0) STATUS=RSTAT C C ALL DONE C RETURN END