C SUBROUTINE TO RUN A SUBTASK. C CALLED FROM SUBTSK, PROCEDURE DO-RUN-OPERATION C C Submitted by: C C R. N. Stillwell C Institute for Lipid Research C Baylor College of Medicine C Houston, Texas 77030 C C (who would be glad to receive comments, suggestions, bug fixes, etc., but C who promises no support whatever). C C Literature reference: C C R. N. Stillwell. A low-overhead laboratory data management system C for the PDP11. Comput. Biomed. Res., 15, 29-38(1982). C C Acknowledgement: C C This software was developed under National Institutes of Health grants C GM-13901 and GM-26611. C C General permission is hereby granted to copy, modify, or distribute this C program, but not for profit. Copyright to this software is and shall C remain in the public domain. C SUBROUTINE SUBRUN (LTRACE,INVER,VARER) C C INCLUDE 'COMMON.FLX' C C Declare common blocks. C COMMON /TABDAT/ NREC,NCOLS,LENREC,OFFSET,IPTRD,TABREC, 1 DATA,IALT,IDUM INTEGER NREC,NCOLS,LENREC,OFFSET,IPTRD(41),TABREC BYTE DATA(1000) LOGICAL*1 IALT,IDUM !1-82 COMMON /LUN/ INLUN,OUTLUN,TILUN,TABLUN,TAILUN,RDFLUN INTEGER INLUN,OUTLUN,TILUN,TABLUN,TAILUN,RDFLUN COMMON /INPUT/ IREC,INPTR,LLINE,INLINE BYTE INLINE(132) DATA MAXIN/132/ COMMON /OUTPUT/ OUTLIN,OUTPTR,OUTEND BYTE OUTLIN (132) INTEGER OUTPTR,OUTEND DATA MAXOUT /132/ COMMON /FILES/ FILNAM,MAXFNM,MODNAM,LFNAM,FLREC, 1 MAXLVL,INLVL,OLDLVL,ULBUF,CARCTL,TERM 1 ,OUTOPN,TBOPEN C C File stack. C BYTE FILNAM(26,5) DATA MAXFNM/26/ REAL*4 MODNAM(5) !9-OCT-81 RAD50 MODULE NAMES INTEGER LFNAM(5) !LENGTHS OF NAMES C !POINTERS TO START OF CURRENT C !OR NEXT RECORD REAL*4 FLREC(5) !9-OCT-81 CHANGED FROM C !RECORD PTR TO BYTE PTR C D INTEGER IFLREC(2,5) D EQUIVALENCE (IFLREC,FLREC) DATA MAXLVL/5/ INTEGER INLVL !CURRENT LEVEL POINTER INTEGER OLDLVL !PREVIOUS LEVEL POINTER INTEGER ULBUF (7) BYTE CARCTL LOGICAL*1 TERM,OUTOPN,TBOPEN C C Scratch memory. Definitions may differ from subroutine to subroutine, C or may use equivalence statements. C COMMON /SCRATC/ SCRATC BYTE SCRATC (576) C C Local declarations. C C C IMPLEMENTATION NOTE: the TDB'S and the variable TSKACT C must be in a root-segment .PSECT. Also, for IAS, if this C module is in an overlay segment, then the root segment must C contain the module PILUN from SYSLIB. C COMMON/SUBCOM/ IDUMM(123),TSKACT LOGICAL*1 LTRACE,FILERR,EVALER LOGICAL*1 QUOTED,TSKACT,EQUAL LOGICAL*1 INVER,VARER INTEGER TDPRIV,RUNTS,SENTS,RECV INTEGER GETVAR BYTE STR1(256) EQUIVALENCE (STR1,SCRATC) DATA MAXSTR /255/ REAL*8 VARNAM BYTE VBYTE(8) EQUIVALENCE (VARNAM,VBYTE) REAL*8 VARN1 EQUIVALENCE (VARN1,STR1) INTEGER LEN1,LEN2 BYTE DQUOTE DATA DQUOTE /'"'/ C C If another subtask is still active, wait for it. D WRITE (5,2) TSKACT D2 FORMAT (' SUBTASK. TSKACT = ',L1) WHILE (TSKACT) CALL CHKEVW(1) READ-AND-INTERPRET-TASK-EVENTS FIN C GET COMMAND LINE GET-STRING-1 LNAM = INDEX(STR1,' ',LEN1)-1 IF (LNAM.LE.0) LNAM = LEN1 CONDITIONAL (INDEX(STR1,'.TSK',LNAM).GT.0) ITYPE = 1 (EQUAL(STR1,'...',3)) ITYPE = 2 (EQUAL(STR1,'$$$',3)) ITYPE = 3 (OTHERWISE) ITYPE = 4 FIN IF (LTRACE) WRITE (TILUN,4) (STR1(I),I=1,LEN1),DQUOTE 4 FORMAT (' %SUbtask RUn: "',30A1/(1X,40A1)) IF (ITYPE.EQ.2.OR.ITYPE.EQ.3) CALL MVSTR(STR1(1),STR1(4)) LEN1 = LEN1 - 3 FIN C Pass on privileges to subtask IRET = TDPRIV(1,1) D IF (IRET.NE.1) WRITE (5,9902) IRET IRET = RUNTS(STR1,1,ITYPE) D WRITE (5,9902) IRET TSKACT = .TRUE. INVER = .FALSE. VARER = .FALSE. RETURN TO GET-STRING-1 IF (INPTR.GT.LLINE) REPORT-INVALID-OPERAND C One level of indirection. CALL GETNAM(1,STR1,MAXSTR,LEN1,FILERR,QUOTED,EVALER) IF (FILERR.OR.EVALER) RETURN IF (LEN1.LE.0) REPORT-INVALID-OPERAND D WRITE (5,10) QUOTED,LEN1,(STR1(I),I=1,LEN1) D10 FORMAT (' GET-STRING-1: QUOTED,LEN1,STR1:',L4,I5/(1X,80A1)) FIN TO READ-AND-INTERPRET-TASK-EVENTS CALL RDEVTS(ISTAT,1) D WRITE (5,14) ISTAT D14 FORMAT (' RDEVTS: ISTAT =',O8) TSKACT = (ISTAT.AND."27).NE.0 FIN TO REPORT-INVALID-OPERAND INVER = .TRUE. RETURN FIN END