Trailing-Edge
-
PDP-10 Archives
-
BB-FP64A-SB_1986
-
10,7/track/xlate.for
There are 4 other files named xlate.for in the archive. Click here to see a list.
! R. Powell Nov 1982 /RBP
C PROGRAM TO ANALIZE TRACK'S
! BINARY FILES
!
PROGRAM XLATE
!
PARAMETER MYVER="304000014 !3D(14)
!
!
!
! GET DEFINITIONS OF VARIABLES, COMMON BLOCKS, ETC:
INCLUDE 'DSK:XLATE.COM'
integer commnt(8) !comment line passed to plots
INTEGER IBAR(20) !HISTOGRAM BARS
INTEGER HISTYP(mxhist)
INTEGER HISNAM(11,MXHIST)
logical hisplt(mxhist) !true if there is data in this
!histogram to be plotted
logical first !true if we have not read in
!a date record from the file
equivalence (IMSI,data(1))
equivalence (IPQ1,data(9))
equivalence (IPQ2,data(10))
equivalence (IMCOR,data(11))
equivalence (IMMUL,data(12))
equivalence (IMREQ,data(13))
equivalence (IMMAX,data(14))
equivalence (ISWP1,data(28))
equivalence (ISWP2,data(29))
equivalence (IFAR1,data(30))
equivalence (IFAR2,data(31))
equivalence (IFAR3,data(32))
equivalence (ISCDC,data(33))
equivalence (IBBAT,data(34))
equivalence (IBSWP,data(34))
! DATA STATEMENTS
! DEFINE TRANSLATION VECTOR FOR CONVERTING TRACKING-TYPE CODE (IWHAT)
! INTO ASCII STRINGS FOR PRINTING
DATA (ITRANS(I),I=1,5)/'SYSTM','JOB','USERS',
1 'PPN','TTY'/
!initial values of plotting arrays
data(xmin(i),i=1,mxhist)/mxhist*1E37/
data(xmax(i),i=1,mxhist)/mxhist*-1E-37/
data(ymin(i),i=1,mxhist)/mxhist*1E37/
data(ymax(i),i=1,mxhist)/mxhist*-1E-37/
data(hisplt(i),i=1,mxhist)/mxhist*.false./
! DEFINE INITIALL POSITION IN THE INPUT VECTOR
DATA INPOS/128/ !FORCE A READ
DATA IRPT/0/ !INITIAL INDEX FOR RPTINF/HISTOT
DATA OLDRNM/99999/ !PREVIOUS REPORT NUMBER
DATA OHR/9999/ !HOUR OF PREVIOUS REPORT
DATA HSTFL1/.FALSE./
data first/.true./
data sink/.false./ !do not sink data until overflow occurs
DATA IVHCNT/0/ !INVALID-HEADER-CODE COUNT
!Initialize Translation Vector converting TRACK block numbers to
!TRKANL numbers
BLKTYP(1,1)="711 !REPORT START
BLKTYP(1,2)=1
BLKTYP(2,1)="721 !SYSTEM DATA INITIALIZATION
BLKTYP(2,2)=2
BLKTYP(3,1)="731 !SYSTEM DATA DISPLAY
BLKTYP(3,2)=3
BLKTYP(4,1)="732 !SCHEDULER PARAPETER DATA DISPLAY
BLKTYP(4,2)=4
BLKTYP(5,1)="741 !SYSTEM DATA ITEM
BLKTYP(5,2)=5
BLKTYP(6,1)="751 !SYSTEM DATA ITEM FREQUENCY INFORMATION
BLKTYP(6,2)=6
BLKTYP(7,1)="761 !TYPE SUMMARY
BLKTYP(7,2)=7
BLKTYP(8,1)="771 !SYSTEM DATA END OF REPORT
BLKTYP(8,2)=8
!ALL TRACK TYPES ABOVE THIS LINE FOR V5 AND LATER
!ALL TRACK TYPES BELOW THIS LINE FOR EARLIER VERSION (BUT NEW TRKANL
! CANNOT READ EARLIER DATA FILES)
BLKTYP(9,1)="10
BLKTYP(9,2)=1
BLKTYP(10,1)="20
BLKTYP(10,2)=2
BLKTYP(11,1)="30
BLKTYP(11,2)=3
BLKTYP(12,1)="40
BLKTYP(12,2)=5
BLKTYP(13,1)="50
BLKTYP(13,2)=6
BLKTYP(14,1)="60
BLKTYP(14,2)=7
BLKTYP(15,1)="70
BLKTYP(15,2)=8
!TO KEEP COPIES OF NAMES FILE SMALL, TRY MAKING THE
!DEFIVE HERE A LOGICAL NAME, AND PUT THE NAMES FILE THERE
OPEN(UNIT=10,DEVICE='DSK',MODE='ASCII',
1 ACCESS='SEQIN',FILE='NAMES.TRK')
DO 6 I=1,MXHIST
READ(10,10050,END=7)HISTYP(I),(HISNAM(J,I),J=1,11)
6 CONTINUE
TYPE 10051
7 CLOSE(UNIT=10)
hihist=i !highest legal histogram
! INITIALIZATION
! DEFINE VERSION NUMBER
IBLKNO=0
! GET SWITCH VALUES:
SWHIST=.FALSE.
SWDTAL=.TRUE.
SWDUMP=.FALSE.
SWNON0=.FALSE.
SWDIST=.FALSE.
SWPLOT=.FALSE.
SWIVHC=.FALSE.
25 CONTINUE
! OPEN FILES
type 10001 !prompt for input file
OPEN(UNIT=UNIINP,ACCESS='SEQIN',MODE='image',
1 FILE='TRACK.TRC',VERSION=MYVER,
1 DEVICE='DSK',DIALOG)
type 10002 !prompt for output file
OPEN(UNIT=UNIOUT,ACCESS='SEQOUT',MODE='ASCII',
1 VERSION=MYVER,DEVICE='DSK',FILE='XLATE.DAT',
1 DIALOG)
type 10007 !prompt for plot output file
open(unit=uniplt,access='seqout',mode='ascii',
1 version=myver,device='dsk',file='xlate.plt',
1 dialog)
type 10009 !prompt for comment line
accept 19903,commnt
75 CALL DATE(INVECT)
CALL TIME(K)
MYVERX=MYVER
myedit=iright(myverx) !get edit number for listings
!writeout header line with version # and comment
write (uniout,10008)myedit,commnt
! TOP OF MAIN PROCESSING LOOP
!
!
! ALL PROCESSING ROUTINES RETURN TO STATEMENT 100
! WHEN EOF IS REACHED, CONTROL GOES TO 11000 (SEE OPEN STATEMENT).
! THE STATUS OF "FLAG1" CONTROLS WHETHER THIS IS THE END OF THE
! INPUT RECORDS, OR EOF IN THE MIDDLE OF A RECORD.
100 CONTINUE
FLAG1=.FALSE. !NOT PROCESSING AN ENTRY
! GET TYPE OF THIS ENTRY
CALL INWORD(ITYPE,$11000)
IF (ITYPE .EQ. 0)GOTO 100 !PASS OVER JUNK WORDS
FLAG1=.TRUE. !NOW PROCESSING AN ENTRY
!VALIDATE BLOCK TYPE
DO 105 I=1,MXBTYP
IF (ITYPE .NE. BLKTYP(I,1) )GOTO 105 !MATCHED?
INDEX = BLKTYP(I,2) !TRANXLATE TO TRKANL BLOCK TYPE
GOTO 110
105 CONTINUE
!HERE IF INVALID BLOCK TYPE
CALL BADHDR(1,$100) !CODE 1 IS BAD BLOCK TYPE
!VALIDATE LENGTH FIELD
110 CONTINUE
CALL INWORD(ILEN,$11000) !GET LENGTH OF RECORD
IF ( (ILEN .GE. 2) .AND.
1 (ILEN .LT. 100) ) GOTO 120 !FROM 2 TO 100??
CALL BADHDR(2,$100) !CODE 2 IS BAD LENGTH
120 CONTINUE
!HEADER IS OK
140 CONTINUE
!GET DATA PORTION OF ENTRY INTO LOCAL VECTOR
160 CALL GETDAT($11000)
!DISPATCH TO CORRECT PROCESSOR
200 GOTO (1000,2000,3000,8000,4000,5000,6000,7000)INDEX
! STRT INIT DSPL SCHD RPRT FREQ SUMM END
!--------------------------------------------------------------------------
! REPORT START ENTRY
1000 CONTINUE
TRKVER=IDATA(1) !VER # OF TRACK
IWHAT=IDATA(2) !WHAT WE ARE TRACKING. SE
!SEE "ITRANS"
! END OF PROCESSING
GOTO 100
!--------------------------------------------------------------------------
! SYSTEM DATA INITIALIZATION ENTRY
2000 CONTINUE
MONVER=IDATA(1) !MONITOR VERSION #
CPUSER=IDATA(2) !CPU SERIAL NUMBER
JOBMAX=IDATA(3) !MAX JOBS MONITOR BUILD FOR
TTYMAX=IDATA(4) !MAX TTYS " " "
USRCOR=IDATA(5)/1000 !PAGES OF USER CORE
TOTMEM=IDATA(6)/1000 !PAGES OF TOTAL CORE
INTRVL=IDATA(7) !INTERVAL THIS RUN
ITERS=IDATA(8) !ITERATIONS THIS RUN
UDATIM=IDATA(9) !UNIVERSAL DATE/TIME
WRITE (UNIOUT,10045)MONVER,CPUSER,JOBMAX,TTYMAX,USRCOR,
1 TOTMEM,INTRVL,ITERS
IDATE=ILEFT(UDATIM)
ITIME=IRIGHT(UDATIM)
CALL PRDTIM(IDATE,ITIME) !AND OUTPUT DATE & TIME
! END OF PROCESSING
2999 GOTO 100
!--------------------------------------------------------------------------
! SYSTEM DATA DISPLAY
3000 CONTINUE
3200 RPTNUM=IDATA(1) !REPORT NUMBER
START=IDATA(2) !UNIV DATE/TIME STARTED
STOP=IDATA(3) !UNIV DATE/TIME ENDED
CORMAX=IDATA(4) !# WORDS OF CORMAX
SCHED=IDATA(5) !SCHED BITS
! OUTPUT INFORMATION
3700 WRITE (UNIOUT,10010) RPTNUM
if (rptnum .lt. mxval) goto 3710 !too many reports to store?
if (sink) goto 3710 !only say this once
i=mxval
type 10018,i
sink=.true. !sink data from now on
lstrpt=rptnum-1 !last good report number
3710 continue
IDATE=ILEFT(START)
ITIME=IRIGHT(START)
!compute x axis value and put in XVAL for later use in summary
!records. X axis value is the time of day, expressed as hours and
!parts of hours
call maktim(idate,itime,jjyr,jjmon,jjday,ihr,imin)
xval=float(ihr) + float(imin)/60.0
if (.not. first) goto 3720 !still need date
!for DATE record?
first=.false.
iiyr=jjyr
iiday=jjday
iimon=jjmon
3720 continue
CALL PRDTIM(IDATE,ITIME) !STARTING DATE/TIME
IDATE=ILEFT(STOP)
ITIME=IRIGHT(STOP)
CALL PRDTIM(IDATE,ITIME)
WRITE(UNIOUT,10013) CORMAX,SCHED
! END OF PROCESSING
3999 GOTO 100
!--------------------------------------------------------------------------
! SYSTEM DATA ITEM REPORT
4000 CONTINUE
ITMNAM=IDATA(1) !ITEM NAME IN ASCII
ITMAUX=IDATA(2) !AUX INFO, IN WHATEVER FORMAT
! HERE TO GET INDEX INTO HISTYP IN 'I'
4200 ITMNUM=item(histyp,itmnam)
! OUTPUT INFORMATION
4900 IF ( (ITMNAM .EQ. 'DISK') .OR.
1 (ITMNAM .EQ. 'CHAN') )
1 GOTO 4950 !GO HANDLE DISK/CHAN ENTRIES
WRITE (UNIOUT,10014) ITMNAM,
1 (HISNAM(I,ITMNUM),I=1,11)
GOTO 4975 !SKIP DISK/CHAN STUFF
4950 CONTINUE
IAUX1=IASCII(ITMAUX,5) !CONVERT FROM SIXBIT
IAUX2=ILSHFT(ITMAUX,30) !GET TO LAST SIXBIT CHARACTER
IAUX2=IASCII(IAUX2,1)
WRITE (UNIOUT,10054)ITMNAM,IAUX1,IAUX2
4975 CONTINUE
! END OF PROCESSING
4999 GOTO 100
!--------------------------------------------------------------------------
! SYSTEM DATA ITEM FREQUENCY ENTRY
5000 IVALOW=IDATA(1)+1 !LOW VALUE FOR THIS ITER
IVALHI=IDATA(2)+1 !HIGH VALUE FOR THIS ITER
VALPCT=DATA(3) !% VALUES IN ABOVE RANGE THIS
! OUTPUT INFORMATION
!MAKE BAR FOR HIST, THEN PRINT IT ALL OUT
IPCT=VALPCT/5.0
DO 5910 I=1,20
5910 IBAR(I)=' '
IF (IPCT .LE. 20) IBAR(IPCT)='*'
WRITE(UNIOUT,10015) IVALOW,IVALHI,VALPCT,(IBAR(I),I=1,20)
! END OF PROCESSING
5999 GOTO 100
!--------------------------------------------------------------------------
! SUMMARY INFORMATION ENTRY
6000 CONTINUE
NUMSMP=IDATA(1) !NUMBER OF SAMPLING THIS ITER
XMEAN=DATA(2) !MEAN VALUE
SIGMA=DATA(3) !SD FOR DISTRIBUTION
6900 WRITE(UNIOUT,10016) NUMSMP,XMEAN,SIGMA
!store data for later plotting
call putplt(itmnum,xmean,xval,hisplt)
! END OF PROCESSING
6999 GOTO 100
!--------------------------------------------------------------------------
! END ENTRY
7000 CONTINUE
WRITE (UNIOUT,10026)
GOTO 100
!--------------------------------------------------------------------------
!SCHEDULER PARAMETER ENTRY
8000 CONTINUE
!FORMAT OF SCHEDULER record:
!1 micro scheduling interval
!2 "5"
!3 5 words:
! b0=fixed quota flag
! b1-b17=class#
! b18-b35=quota
!8 "2"
!9 PQ1 quantum runtime
!8 PQ2 quantum runtime
!11 min core usage per job
!12 nim core usage multiplier
!13 min core usage requeue constant
!14 min core usage maximum
!15 "3"
!16-18 3 words of quantum multiplier information
! LH=queue#
! RH=quantum multiplier
!19 "2"
!20-21 2 words of max quantum runtime information:
! LH=queue#
! RH=max time slice
!22 "5"
!23-27 5 words of secondary class quotas:
! LH=class#
! RH=secondary quota
!28 time % to scan Q swapped in before subqueues
!29 swap scan time
!30 scheduler fairness factor
!31 swapper fairness factor
!32 incore fairness factor
!33 SCDCOR
!34 Q# for background batch subqueue
!35 bacground batch swaptime interval
XMMUL=FLOAT(IMMUL)
WRITE(UNIOUT,10046)
1 IMSI , ISWP2 ,
1 IFAR1 , IFAR2 , IFAR3 ,
1 ISWP2 , ISCDC ,
1 IBBAT , IBSWP ,
1 IPQ1 , IPQ2 , IMCOR ,
1 XMMUL, IMREQ ,
1 IIMMAX
!GET CLASS INFORMATION
WRITE (UNIOUT,10024)
DO 8100 I=1,5
IQUOTA=IRIGHT(DATA(I+2))
ICLASS=ILEFT(DATA(I+2)) .AND. "377777
IFLAG='NO' !ASSUME NOT FIXED
IF (DATA(I+2) .LT. 0) IFLAG='YES'
WRITE (UNIOUT,10047)ICLASS,IQUOTA,IFLAG
ICLASS=ILEFT(DATA(22+I))
IQUOTA=IRIGHT(DATA(22+I)) !SEC QUOTA
WRITE (UNIOUT,10048)ICLASS,IQUOTA
8100 CONTINUE
!GET QUEUE INFORMATION: MULTIPLIERS
WRITE (UNIOUT,10024)
DO 8200 I=1,3
IQ=ILEFT(DATA(I+15))
IMULT=IRIGHT(DATA(I+15))
WRITE (UNIOUT,10049)IQ,IMULT
8200 CONTINUE
!GET QUEUE INFORMATION: MAX TIME SLICE
DO 8300 I=1,2
IQ=ILEFT(DATA(I+19))
IMAX=IRIGHT(DATA(I+19))
WRITE (UNIOUT,10053)IQ,IMAX
8300 continue
!now put into histograms. must fake up itmnum values on the way
call putplt(item(histyp,'MSI'),FLOAT(IMSI),xval,hisplt)
call putplt(item(histyp,'PQ1'),FLOAT(IPQ1),xval,hisplt)
call putplt(item(histyp,'PQ2'),FLOAT(IPQ2),xval,hisplt)
call putplt(item(histyp,'MCOR'),FLOAT(IMCOR),xval,hisplt)
call putplt(item(histyp,'MMUL'),FLOAT(IMMUL),xval,hisplt)
call putplt(item(histyp,'MREQ'),FLOAT(IMREQ),xval,hisplt)
call putplt(item(histyp,'MMAX'),FLOAT(IMMAX),xval,hisplt)
call putplt(item(histyp,'SWP1'),FLOAT(ISWP1),xval,hisplt)
call putplt(item(histyp,'SWP2'),FLOAT(ISWP2),xval,hisplt)
call putplt(item(histyp,'FAR1'),FLOAT(IFAR1),xval,hisplt)
call putplt(item(histyp,'FAR2'),FLOAT(IFAR2),xval,hisplt)
call putplt(item(histyp,'FAR3'),FLOAT(IFAR3),xval,hisplt)
call putplt(item(histyp,'SCDC'),FLOAT(ISCDC),xval,hisplt)
call putplt(item(histyp,'BBAT'),FLOAT(IBBAT),xval,hisplt)
call putplt(item(histyp,'BSWP'),FLOAT(IBSWP),xval,hisplt)
GOTO 100
!--------------------------------------------------------------------------
! ERROR PROCESSING ROUTINES
! HERE ON INPUT EOF
11000 CONTINUE
IF (.NOT. FLAG1) GOTO 30000 !NORMAL EOF
TYPE 10017, IBLKNO
GOTO 30000 !ERROR CLOSEUP
! HERE ON OUTPUT ERROR
12000 CONTINUE
TYPE 10021
GOTO 20000 !ERROR CLOSEUP
! HERE ON ENTRY CODE OUT OF RANGE
13000 CONTINUE
FLAG1=.FALSE.
GOTO 11000 !!TEMPORARY KLUGE!!
TYPE 10020, ITYPE
GOTO 20000 !ERROR CLOSEUP
! HERE TO CLOSE UP FILES ON ERROR
20000 CONTINUE
TYPE 10022 !ABORT MESSAGE
GOTO 30000 !AND INTO FINAL CODE
! HERE TO CLOSE UP
30000 CONTINUE
!put out the plotting data. file format is:
!
!DATE YY MM DD
!TITL 40 character title information
!type 55 character graph name
!type xmin xmax ymin ymax
!type xval yval
!type xval yval
!type xval yval
!.... and so on
!END
!
!where type is the 4 char abbrev used by TRACK
!all records (graph name, scaling values, and data values)
!for a histogram are kept together. the reader
!knows when one histogram finishes and another begins
!by the presence of the END record.
!
write (uniplt,10065)iiyr,iimon,iiday
write (uniplt,10060)commnt
do 39500 i=1,hihist !loop over all histograms
if(.not. hisplt(i) )goto 39500 !skip non-ex graphs
write (uniplt,10061)histyp(i),(hisnam(j,i),j=1,11)
write (uniplt,10062)histyp(i),xmin(i),xmax(i),ymin(i),ymax(i)
do 39400 j=1,mxval
if ( (xvalue(i,j) .eq. 0) .and.
1 (J .gt. 1) )
1 goto 39400 !skip empty entries
write (uniplt,10063)histyp(i),xvalue(i,j),yvalue(i,j)
39400 continue
write (uniplt,10064) !write END record
39500 continue
close (unit=uniplt)
! REPORT ANY INVALID HEADER CODES WHICH MAY HAVE OCCURED:
39550 if(.not. sink) goto 39580 !did we sink any data?
i=rptnum-lstrpt
type 10039,i,lstrpt
39580 CONTINUE
type 10040,rptnum
TYPE 10023 ! CLOSING MESSAGE
CLOSE(UNIT=uniinp)
CLOSE(UNIT=uniout)
CALL EXIT
!--------------------------------------------------------------------------
! FORMAT STATEMENTS
! PROMPTING:
10001 FORMAT(/, ' INPUT FILESPEC?')
10002 FORMAT(/,' OUTPUT FILESPEC?')
10003 FORMAT(' HEADER. TRACK VERSION ',O,5X,
1 'TRACKING TYPE IS ',I2,' (',A5,')' )
10004 FORMAT(1X,/,' SYSTEM DATA. MONITOR VERSION IS ',O,
1 /,' JOBMAX IS ',I3,5X,'TTYMAX IS ',I3)
10005 FORMAT(' WORDS OF USER CORE = ',I8,/,
1 ' WORDS OF TOTAL CORE = ',I8)
10006 FORMAT(' DATE & TIME ARE: ')
10007 format(/,' Plot File''s Filespec?')
10008 format (' XLATE Edit ',o4,': ',8a5)
10009 format (/,' Comments (up to 40 characters): ',$)
10010 FORMAT(////' SYSTEM DATA DISPLAY. REPORT NUMBER ',
1 I5)
!--
10013 FORMAT(' CORMAX WAS ',O8,'W',
1 ' SCHED SET TO ',O12)
10014 FORMAT(/,' ITEM IS "',
1 A4, '" -- ',11A5)
10015 FORMAT(
1 ' LOW =',I10,
1 ' HIGH =',I10,
1 2X,F6.1,' %',20A1)
10016 FORMAT(' SAMPLES = ',I5,2X,
1 'MEAN =',F10.3,
1 ' SIGMA = ',F10.3)
10017 FORMAT(/' ???? EOF IN MIDDLE OF RECORD. BLOCK #',
1 I5,2X,/)
10018 format (/' ??? too many reports seen in input file.',/,
1 ' ??? maximum value is ',i5'. Remaining data will',/,
1 ' ??? not be stored in plotting output files.')
10020 FORMAT(/ ' ??? ENTRY CODE OUT OF RANGE: ',I2,/)
10021 FORMAT (/' ???? ERROR ON OUTPUT FILE'/)
10022 FORMAT (/' ???? ABORTING ????'/)
10023 FORMAT (/' XLATE COMPLETED'/)
10024 FORMAT (/)
10026 FORMAT (' END ENTRY ENCOUNTERED')
10029 FORMAT (1X,' ?? INVALID HEADER CODE: ',O12,
1 ' IN BLOCK#',I6,' ??',/)
10038 FORMAT (1X,'TOTAL # INVALID HEADER CODES: ',I5)
10039 format (1x,i5,' records were not output to plot file:',/,
1 ' Last good report number=',i5)
10040 format (1x,'Total number of TRACK reports read=',i5)
10045 FORMAT(//,' SYSTEM DATA INITIALIZATION RECORD',/
1 ' MONVER=',O12,2X,' CPU SERIAL#=',I5,2X,
1 ' JOBMAX=',I4,/,
1 ' TTYMAX=',I5,2X,' TOTAL USER CORE=',I5,
1 'P',2X,' TOTAL MEMORY=',I5,'P',/,
1 ' INTERVAL TIME=',I5,' SECS',2X,
1 ' # OF ITERATIONS=',
1 I5)
10046 FORMAT(/,' SCHEDULER PERFORMANCE INFORMATION:',/,
1 ' Micro-scheduling Interval=',I5,2x,
1 ' Swap Scan Time=',i5,/,
1 ' Scheduler Fairness Factor=',i5,2x,
1 ' Swapper Fairness=',i5,2x,
1 ' Incore Fairness=',I5,/,
1 ' Time % to scan Q swapped in before subQs=',i5,2x,
1 ' SCDCOR=',i5,/,
1 ' Background Batch subQ #=',i3,2x,
1 ' Background Batch swaptime interval=',i5,/,
1 ' PQ1 Quantum=',i5,2x,
1 ' PQ2 Quantum=',i5,2x,
1 ' Minimum core usage per job=',i10,/,
1 ' Min core usage multiplier=',f8.4,2x,
1 ' Min core usage requeue constant=',i10,/,
1 ' Min core usage maximum=',I10)
10047 FORMAT(' CLASS#=',I2,' QUOTA=',O6,3X,
1 'FIXED=',A3)
10048 FORMAT(' CLASS#=',I2,' SECONDARY QUOTA=',O6)
10049 FORMAT(' QUEUE#=',I2,' QUANTUM MULTIPLIER=',O6)
10053 FORMAT(' QUEUE#=',I2,' MAX TIME SLICE=',O6)
10054 FORMAT(/,' ITEM IS "',
1 A4, '" -- ',A5,A1,49X) !PADD AT RIGHT SO RECORD LENGTH
!IS SAME AS 10014 OUTPUT
10050 FORMAT(A4,1X,11A5)
10051 FORMAT(' MXHIST NEEDS TO BE INCREASED FOR',
1 / ' STORAGE OF MORE HISTOGRAM TYPES FROM NAMES.TRK')
10060 format('TITL',1x,8a5) !for title statements in plots
10061 format(a4,1x,11a5) !for graph names in plots
10062 format(a4,1x,4(f,1x)) !for scaling numbers in plots
10063 format(a4,1x,f,1x,f) !for x and y values in plots
10064 format ('END')
10065 format('DATE',3(1x,i2) ) !for DATE records
! INPUT FORMAT STATEMENTS:
19901 FORMAT (A1)
19902 FORMAT (A3)
19903 format (8a5)
!--------------------------------------------------------------------------
END
SUBROUTINE INWORD(DUMMY,$)
! SUBROUTINE TO READ A WORD FROM INPUT FILE
! FIRST ARGUMENT IS WHERE TO RETURN DATA TO,
! SECOND ARGUMENT IS STATEMENT TO GOTO ON EOF
INCLUDE 'XLATE.COM/NOLIST' !GET DECLARATIONS
INTEGER DUMMY
! CHECK TO SEE IF A NEW BLOCK NEEDED
IF (INPOS .LT. 128) GOTO 100
! SAVE LAST FEW LOCS FROM OLD ARRARY FOR DEBUGGING
DO 25 IND=1,5
25 IOLD(IND)=INVECT(123+IND)
READ(1,END=1000) INVECT !UNFORMATTED DUMP READ
INPOS=0
IBLKNO=IBLKNO+1 !FOR DIAGNOSTICS
100 INPOS=INPOS+1 !MOVE TO NEXT(OR FIRST) WORD
DUMMY=INVECT(INPOS)
RETURN
! HERE ON ERROR
! 1
1000 CONTINUE
RETURN(1)
END
SUBROUTINE GETDAT($)
! SUBROUTINE TO READ DATA PORTION OF AN ENTRY
! GETDAT RETURNS DATA INTO "IDATA"
! '$' IS WHERE TO GOTO ON END-OF-FILE
INCLUDE 'XLATE.COM/NOLIST' !GET DECLARATIONS
LOGICAL FLAG
! CHECK FOR NUL DATA SECTION
IF (ILEN .EQ. 2) RETURN
! CHECK FOR ILEN TOO SMALL OR LARGE
IF ( (ILEN .LE. 40) .AND.
1 (ILEN .GT. 2) ) GOTO 50
35 TYPE 10002,ILEN,ITYPE,IBLKNO !TELL USER
10002 FORMAT(/' ?? ILEN=',I9,' FOR ITYPE=',
1 O4,' IN BLOCK#',I6,' ??'/)
CALL EXITS !EXIT WITHOUT RESET, ETC.
50 DO 100 I=1,ILEN-2
100 CALL INWORD(IDATA(I),$1000)
! CLEAR REST OF OLD ENTRY
IF ((ILEN-2) .EQ. 40) GOTO 200
DO 175 I=ILEN+1,40
175 IDATA(I)=0
200 CONTINUE
500 RETURN
! HERE ON EOF
1000 TYPE 10005,I,ILEN
RETURN(1)
! FORMAT STATEMENS
10003 FORMAT (' ?ZERO WORD SEEN WHERE FLT PT WORD EXPECTED.'/
1 ' AROUND WORD#',I4, 5X, 'IN RECORD#',I6)
10004 FORMAT (' REPLACING IT WITH THE NEXT DATA WORD, WHICH IS',/
1 ' "',O12,'"')
10005 FORMAT (' ?Input EOF after ',I2,' words when ',I2,/,
1 ' words expected in record.')
END
SUBROUTINE PRDTIM(DATE,TIME)
! SUBROUTINE TO TYPE DATE AND TIME
INCLUDE 'XLATE.COM/NOLIST'
integer date,time,year,month,day,hour,min,sec
LOGICAL FLAG !TRUE IF PRINTING TIME
!FALSE IF RETURNING BINARY INFO
! FIRST ARGUMENT IS THE UNIVERSAL DATE
! SECOND ARGUMENT IS THE UNIVERSAL TIME
FLAG = .TRUE. !PRINT THE TIME
GOTO 100
! ENTRY POINT FOR RETURNING BINARY INFO
ENTRY MAKTIM(DATE,TIME,YEAR,MONTH,DAY,HOUR,MIN)
FLAG = .FALSE. !DO NOT PRINT TIME
! CONVERT TO BINARY FORMAT. "UV2BIN" RESIDES IN LIBFOR.MAC
! WHICH ALSO NEEDS AT LOAD-TIME SCAN.REL
100 CONTINUE
CALL UV2BIN(DATE,TIME,YEAR,MONTH,DAY,HOUR,MIN,SEC)
IF (.NOT. FLAG) RETURN !ALL DONE IF NOT PRINTING
WRITE (UNIOUT,1001)MONTH,DAY,YEAR,HOUR,MIN,SEC
1001 FORMAT(1X,2(I2,'/'),I2,5X,2(I2,':'),I2)
RETURN
END
SUBROUTINE BADHDR(ICODE,$)
!SUBROUTINE TO REPORT AND LOG BAD HEADERS
!CODE = REASON FOR CALLING THIS A BAD HEADER:
! 1=HAD BLOCK TYPE
! 2=BAD LENGTH
INCLUDE 'XLATE.COM/NOLIST'
11001 FORMAT (' ?Bad block "',O,'" at word #',I3,' in record #',I5)
11002 FORMAT (' ?Invalid length "',I3,'" at word #',
1 I3,' in record #',I5)
11004 FORMAT (' ??BADHDR called with bad reason code?')
IF ( (ICODE .LT. 1) .OR. (ICODE .GT. 2) ) GOTO 10000
IPOS=INPOS-1 !GET ACTUAL WORD NUMBER IN RECORD
GOTO (100,200)ICODE
!BAD BLOCK TYPE
100 TYPE 11001,ITYPE,IPOS,IBLKNO
RETURN (1)
!BAD LENGTH
200 TYPE 11001,ILEN,IPOS,IBLKNO
RETURN (1)
!BAD BAD REASON!!
10000 TYPE 11004,ICODE
CALL EXIT
END
subroutine putplt(itm,xmean,xval,hisplt)
!subroutine to put data into the histogram arrays
!call is
! call putplt(ihisto,y,x,vector)
!where:
!ihisto is the histo number (ITMnum)
!y is the y-value
!x is the x-value
!vector(ihisto) is set to true when we enter data for ihisto
include 'xlate.com/nolist'
integer hisplt(mxhist)
if (sink) return !sinking excess data?
yvalue(itm,rptnum)=xmean
xvalue(itm,rptnum)=xval
xmin(itm)=amin1(xval,xmin(itm) )
xmax(itm)=amax1(xval,xmax(itm) )
ymin(itm)=amin1(xmean,ymin(itm) )
ymax(itm)=amax1(xmean,ymax(itm) )
hisplt(itm)=.true.
return
end
function item(histyp,iname)
!function to convert a histo name (4-char from track) to
!an item number (from xlate:names.trk file)
!call is:
! ???=item(histyp,iname)
!where:
! histyp is the array containing the 4-char abbrevs
! iname is the name we ae searching for
include 'xlate.com/nolist'
integer histyp(mxhist)
DO 4190 I=1,hiHIST
IF (iname .EQ. HISTYP(I)) GOTO 4200
4190 CONTINUE
WRITE (UNIOUT,10027)iname,RPTNUM
TYPE 10027,iname,RPTNUM
4200 continue
item=i
return
10027 FORMAT(/' ???? UNKNOWN DATA ITEM TYPE: "',
1 A4, '" IN REPORT# ',I5, ' ????',/)
end