PROGRAM SHOTSK C C Routine to Show the attributes of a task image. Information displayed: C C Name C Partition C Task Ident C Size C Creation date C Priority C Number of Luns C Libraries C Attributes including: privileged checkpointable C generates_pmd external_header C contains_pic memory_overlays C maps_i/o_page C C Output can be directed to a file or to TI: by default. C C If installed, command line is: SHT task_filename output_info_filename C C Task label block info taken from Task Builder manual Appendix B C C Compile and taskbuild commands C FORTRAN/F77 SHOWTASK C SHOWTASK=SHOWTASK C / C UNITS=3 C ACTFIL=2 C ASG=TI:3 C MAXBUF=512 C TASK=...SHT C IDENT=V1.1 C // C C Modifications: C C V1.0 15-OCT-84 BLT C C V1.1 19-NOV-84 BLT Replaced the System Id field with the C task IDENT field. C Offsets LBPRI and up are occasionally C off by 112. Could not find the key. C Size reported is that of I space if task C supports seperate I/D space. Ok otherwise. C IMPLICIT INTEGER (A-Z) CHARACTER*80 CMDLIN,TSKFIL*32,SHOFIL*32,NUMBER*8,TEMP3*3 CHARACTER TSKNAM*9,PARNAM*6,ATTR1*65,ATTR2*65,LIBS*65,TIDENT*6 CHARACTER*3 MONTHS(12),MONTH DIMENSION ILBBLK(256) INTEGER*4 SIZE BYTE LABBLK(512) EQUIVALENCE (ILBBLK,LABBLK) C PARAMETER (TSK=1,SHO=2,CRT=3) C C Word indeces into Label Block 0. Names in the manual are of the C form L$Bxxx C PARAMETER (LBTSK=1, LBPAR=3, LBMXV=7, LBSYS=12) PARAMETER (LBPRI=116, LBDAT=14, LBLUN=122, LBFLG=13) PARAMETER (LBLIB=17, LBHRB=120 ) C C Task flag word bit assignments. Names in the manual are of the C form TS$xxx C PARAMETER (TSPRV="400, TSCHK="100, TSIOP="20 ) PARAMETER (TSXHR="4, TSPMD="10000, TSPIC="100000) PARAMETER (TSNSD="2000, TSSUP="10) C C Library flag word bit assignments. Names in the manual are of the C form LD$xxx C PARAMETER (LDACC="100000, LDCLS="20000, LDSUP="10) PARAMETER (LDREL="4 , LDTYP="2) C C Word indeces into the Task Header block. Names in the manual are C of the form H.xxxx C PARAMETER (HHDLN=2) C DATA MONTHS/ 'JAN','FEB','MAR','APR','MAY','JUN', $ 'JUL','AUG','SEP','OCT','NOV','DEC'/ C CALL ERRSET(29,.TRUE.,.FALSE.,.TRUE.,.FALSE.) CALL GETMCR(CMDLIN,CMDLEN) IF (CMDLEN.GT.3) THEN I = INDEX(CMDLIN,' ')+1 ! Strip off SHT CMDLIN = CMDLIN(I:CMDLEN) CMDLEN = CMDLEN-I+1 I = INDEX(CMDLIN,' ')-1 ! Strip off Task filename IF (I.LT.0.OR.I.EQ.CMDLEN) THEN TSKFIL = CMDLIN(1:CMDLEN) N = CMDLEN SHOFIL = 'TI:TMP.DAT' ELSE TSKFIL = CMDLIN(1:I) N = I SHOFIL = CMDLIN(I+2:CMDLEN) ENDIF GO TO 15 ENDIF C C Get the goodies from the user now, no command line supplied C 5 WRITE (CRT,6) 6 FORMAT ('$Enter the task filename to show [.TSK] : ') READ (CRT,7,ERR=5,END=99) N,TSKFIL 7 FORMAT (Q,A32) IF (N.EQ.0) GO TO 5 10 WRITE (CRT,11) 11 FORMAT ('$Enter the output information filename [TI:] : ') READ (CRT,7,ERR=10,END=99) N1,SHOFIL IF (N1.EQ.0) SHOFIL = 'TI:TMP.DAT' C C Open up the task file C 15 IF (INDEX(TSKFIL,'.').EQ.0) THEN TSKFIL(N+1:N+4) = '.TSK' N = N+4 ENDIF OPEN (UNIT=TSK,FILE=TSKFIL,STATUS='OLD',READONLY, $ ACCESS='DIRECT',FORM='UNFORMATTED',ERR=16) GO TO 18 16 CALL ERRSNS(ERR) IF (ERR.EQ.29) THEN WRITE (CRT,17) 17 FORMAT (' no such file') ENDIF GO TO 99 C C Now let's get on with it, read the Label block 0 (record 1) C 18 READ (TSK,REC=1) LABBLK C C Break out the codes C CALL R50ASC(6,ILBBLK(LBTSK),TSKNAM) ! Task name IF (TSKNAM(1:6).EQ.' ') THEN TSKNAM = 'undefined' TNLEN = 9 ELSE TNLEN = 6 ENDIF C CALL R50ASC(6,ILBBLK(LBPAR),PARNAM) ! Partition name C IF (ILBBLK(LBHRB).EQ.0) THEN ! Check if that 112 BLKOFF = 112 ! offset is required ELSE BLKOFF = 0 ENDIF C PRI = ILBBLK(LBPRI+BLKOFF) ! Priority C LUNS = ILBBLK(LBLUN+BLKOFF) ! Number of luns C HEDREC = ILBBLK(LBHRB+BLKOFF)+1 ! Record # of header C SIZE = ILBBLK(LBMXV)/2 ! Get task size IF (SIZE.LT.0) SIZE = 32768+SIZE C YEAR = ILBBLK(LBDAT) ! Creation date MONTH = MONTHS(ILBBLK(LBDAT+1)) DAY = ILBBLK(LBDAT+2) C LIB = LBLIB ! Setup library string LIBS = ' none' LL = 5 L = 2 20 IF (ILBBLK(LIB).EQ.0) GO TO 25 ! Loop till no more CALL R50ASC(6,ILBBLK(LIB),LIBS(L:L+5)) ! Get library name L = L+6 LIBS(L:L) = '(' L = L+1 LIBFLG = ILBBLK(LIB+10) IF (IAND(LIBFLG,LDTYP).NE.0) THEN ! Common or Library LIBS(L:L+3) = 'com,' L = L+4 ELSE LIBS(L:L+3) = 'lib,' L = L+4 ENDIF IF (IAND(LIBFLG,LDACC).NE.0) THEN ! Read-Only or Read-Write LIBS(L:L+2) = 'rw,' L = L+3 ELSE LIBS(L:L+2) = 'ro,' L = L+3 ENDIF IF (IAND(LIBFLG,LDREL).NE.0) THEN ! Position Independent Code LIBS(L:L+3) = 'pic,' L = L+4 ENDIF IF (IAND(LIBFLG,LDCLS).NE.0) THEN ! Clustered LIBS(L:L+3) = 'cls,' L = L+4 ENDIF IF (IAND(LIBFLG,LDSUP).NE.0) THEN ! Super mode LIBS(L:L+3) = 'sup,' L = L+4 ENDIF C L = L-1 LIBS(L:L+1) = ') ' ! Finish this library L = L+2 LL = L-1 IF (LL.GE.55) GO TO 25 ! Limit number on line LIB = LIB+14 ! Go back to see if more GO TO 20 C 25 ATTR = ILBBLK(LBLIB) ! Set up for attributes M = 1 ! Allow up to 2 lines of MM = 1 ! them ATTR1 = ' ' ATTR2 = ' ' IF (IAND(ATTR,TSPRV).NE.0) THEN ATTR1(M:M+10) = ' privileged' M = M+11 IF (IAND(ATTR,TSPMD).EQ.0) THEN ATTR1(M:M+13) = ' maps_i/o_page' M = M+14 ENDIF ENDIF IF (IAND(ATTR,TSCHK).EQ.0) THEN ATTR1(M:M+14) = ' checkpointable' M = M+15 ENDIF IF (IAND(ATTR,TSPMD).NE.0) THEN IF (M.LT.50) THEN ATTR1(M:M+13) = ' generates_pmd' M = M+14 ELSE ATTR2(MM:MM+13) = ' generates_pmd' MM = MM+14 ENDIF ENDIF IF (IAND(ATTR,TSXHR).NE.0) THEN IF (M.LT.50) THEN ATTR1(M:M+15) = ' external_header' M = M+16 ELSE ATTR2(MM:MM+15) = ' external_header' MM = MM+16 ENDIF ENDIF IF (IAND(ATTR,TSRES).NE.0) THEN IF (M.LT.50) THEN ATTR1(M:M+15) = ' memory_overlays' M = M+16 ELSE ATTR2(MM:MM+15) = ' memory_overlays' MM = MM+16 ENDIF ENDIF IF (IAND(ATTR,TSPIC).NE.0) THEN IF (M.LT.50) THEN ATTR1(M:M+12) = ' contains_pic' M = M+13 ELSE ATTR2(MM:MM+12) = ' contains_pic' MM = MM+13 ENDIF ENDIF C C Get the Task Ident from the variable part of the Task header C READ (TSK,REC=HEDREC) LABBLK CLOSE (UNIT=TSK) C IOFF = ILBBLK(HHDLN)/2-5 ! Get offset CALL R50ASC(6,ILBBLK(IOFF),TIDENT) ! Get the ident field TEMP3 = TIDENT(1:3) ! Words are swapped for TIDENT = TIDENT(4:6) ! some reason TIDENT(4:6) = TEMP3 C C Now tell the world all about it C OPEN (UNIT=SHO,FILE=SHOFIL,STATUS='NEW',CARRIAGECONTROL='LIST') C C Start with the Taskname, Partition name, and Ident. C WRITE (SHO,30) TSKNAM,PARNAM,TIDENT 30 FORMAT ('Taskname',T15,A,/, $ 'Partition',T15,A6,/, $ 'Task Ident',T15,A6) C C Get the size next, but let's left justify it for appearence C ENCODE (6,31,NUMBER) SIZE 31 FORMAT (I6) S = 6 CALL LJUST(NUMBER,S) WRITE (SHO,32) NUMBER 32 FORMAT ('Size',T15,A,' words') C C Now the creation date C WRITE (SHO,34) DAY,MONTH,YEAR 34 FORMAT ('Created',T15,I2.2,'-',A3,'-',I2) C C And the priority. If it is 0, then it was not defined by C the PRI= option and is displayed here as "undefined". C IF (PRI.NE.0) THEN ENCODE (6,31,NUMBER) PRI S = 6 CALL LJUST(NUMBER,S) WRITE (SHO,35) NUMBER 35 FORMAT ('Priority',T15,A) ELSE WRITE (SHO,36) 36 FORMAT ('Priority',T15,'undefined') ENDIF C C Display the number of Luns allocated C ENCODE (6,31,NUMBER) LUNS S = 6 CALL LJUST(NUMBER,S) WRITE (SHO,37) NUMBER 37 FORMAT ('Number luns',T15,A) C C Give the list of libraries that are linked to as well as their C attributes, and the task attributes list. C WRITE (SHO,39) LIBS,ATTR1,ATTR2 39 FORMAT ('Libraries',T14,A/'Attributes',T14,A/T14,A) C C That was it! C 99 END SUBROUTINE LJUST(STRING,LEN) C C Routine to left justify a character string STRING of length LEN C and return the new length in LEN and the justified string in STRING. C The minimum length returned will be 1. C IMPLICIT INTEGER(A-Z) CHARACTER STRING*8 C DO 5 I=1,LEN IF (STRING(I:I).NE.' ') GO TO 10 5 CONTINUE LEN = 1 RETURN C 10 STRING = STRING(I:LEN) LEN = LEN-I+1 RETURN END