mirror of
https://github.com/PDP-10/stacken.git
synced 2026-02-28 17:09:15 +00:00
2056 lines
62 KiB
Fortran
2056 lines
62 KiB
Fortran
C 4-Jun-80/BAH V1(2) Convert USAH20.FOR to USAH10.FOR.
|
||
C 25-Sep-81/BAH V1(3) Modify the CLOSE statements so this program can run
|
||
C under V6 of FOROTS.
|
||
C ************************************************************************
|
||
C PROGRAM V1(1) TO READ A RATE FILE, USAG10.CHG, AND A FILE IN THE USAGE
|
||
C FORMAT AND CREATE A BILLING SUMMARY LISTING
|
||
C ************************************************************************
|
||
|
||
PROGRAM USAH10
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL FRATE,FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU,FCRDCR,FDSKPA
|
||
REAL FRUNTI,FCONNE,FCHARG
|
||
DOUBLE PRECISION INFIL,OUTFIL
|
||
DIMENSION CDATE(3),IDATE(5),FDATE(5),LDATE(5)
|
||
DIMENSION PROGNA(6),PROVER(15),MODVER(15),NODE(6)
|
||
DIMENSION ZSYSNA(39),A(40)
|
||
EQUIVALENCE (IDATE(1),YEAR), (IDATE(2),MONTH), (IDATE(3),DAY),
|
||
1 (IDATE(4),HOUR), (IDATE(5),MINUTE)
|
||
TYPE 2001
|
||
|
||
C GET THE RATES FOR RUNTIMES, CONNECT TIME, AND DISK PAGES
|
||
|
||
OPEN (FILE='USAG10.CHG', DEVICE='DSK', UNIT=1, ACCESS='SEQIN')
|
||
1 READ (1,1001,END=2) CHGCOD,FRATE
|
||
IF (CHGCOD.EQ.'SESCO') FSESCO=FRATE
|
||
IF (CHGCOD.EQ.'SESRU') FSESRU=FRATE
|
||
IF (CHGCOD.EQ.'PAGRU') FPAGRU=FRATE
|
||
IF (CHGCOD.EQ.'PAGPA') FPAGPA=FRATE
|
||
IF (CHGCOD.EQ.'CRDRU') FCRDRU=FRATE
|
||
IF (CHGCOD.EQ.'CRDCR') FCRDCR=FRATE
|
||
IF (CHGCOD.EQ.'DSKPA') FDSKPA=FRATE
|
||
GO TO 1
|
||
2 CLOSE ( UNIT=1)
|
||
|
||
C ************************************************************************
|
||
C THIS IS THE BEGINNING OF THE MAIN LOOP.
|
||
C ************************************************************************
|
||
|
||
C ASK THE USER FOR INPUT, OUTPUT FILENAMES, TYPE OF REPORT AND SORT
|
||
|
||
3 CALL QUEST (INFIL,OUTFIL,REPORT,SORTBY)
|
||
|
||
C GET THE CURRENT DATE AND TIME OF THE RUN
|
||
|
||
CALL DATE (CDATE)
|
||
CALL TIME (CDATE(3))
|
||
IF ( (REPORT.EQ.'S') .AND. (SORTBY.EQ.'N') ) GO TO 400
|
||
IF ( (REPORT.EQ.'S') .AND. (SORTBY.EQ.'A') ) GO TO 400
|
||
IF ( (REPORT.EQ.'D') .AND. (SORTBY.EQ.'N') ) GO TO 500
|
||
IF ( (REPORT.EQ.'D') .AND. (SORTBY.EQ.'A') ) GO TO 500
|
||
GO TO 3
|
||
|
||
C ************************************************************************
|
||
C END OF MAIN LOOP
|
||
C ************************************************************************
|
||
|
||
C ************************************************************************
|
||
C REPORT OF SYSTEM USAGE SORTED ON NAME OR ACCOUNT SECTION
|
||
C ************************************************************************
|
||
|
||
400 OPEN (FILE=INFIL, DEVICE='DSK', UNIT=1, ACCESS='SEQIN')
|
||
OPEN (FILE='INSRT.TMP', DEVICE ='DSK', UNIT=2, ACCESS='SEQOUT')
|
||
|
||
C INITIALIZE THE FIRST DATE-TIME AND LAST DATE-TIME SO THE ENTRY TIME
|
||
C RANGE CAN BE REPORTED.
|
||
|
||
401 READ (1,1049,END=450) ENTRY,OS,RECSEQ,DECREV,CUSREV,A
|
||
IF (RECSEQ.NE.1) GO TO 401
|
||
DECODE (65,1050,A) JOB,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,
|
||
1 TERMD,LINENO,PROGNA,PROVER,MODVER,NODE
|
||
DO 402 I=1,5
|
||
FDATE(I)=IDATE(I)
|
||
LDATE(I)=IDATE(I)
|
||
402 CONTINUE
|
||
GO TO 408
|
||
|
||
C THIS POINT IS THE ACTUAL BEGINNING OF THE MAIN LOOP FOR REPORT BY
|
||
C SYSTEM USAGE
|
||
|
||
403 READ (1,1049,END=450) ENTRY,OS,RECSEQ,DECREV,CUSREV,A
|
||
404 IF (RECSEQ.NE.1) GO TO 403
|
||
DECODE (65,1050,A) JOB,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,
|
||
1 TERMD,LINENO,PROGNA,PROVER,MODVER,NODE
|
||
|
||
C NOW GO PROCESS THE ENTRY
|
||
|
||
408 IF ( (ENTRY.EQ.1) .OR. (ENTRY.EQ.4) )
|
||
1 CALL PRORES (ZSYSNA,$405,$406,$407)
|
||
IF ( (ENTRY.EQ.2) .OR. (ENTRY.EQ.3) )
|
||
1 CALL PROSES (FSESCO,FSESRU,$405,$406,$407)
|
||
IF (ENTRY.EQ.7) CALL PROINP (FCRDRU,FCRDCR,$405,$406,$407)
|
||
IF (ENTRY.EQ.8) CALL PROOUT (FPAGRU,FPAGPA,$405,$406,$407)
|
||
GO TO 403
|
||
|
||
C HERE IF NO ERRORS ENCOUNTERED. SORT RECORD HAS BEEN WRITTEN
|
||
C NOW CALL THE SUBROUTINE THAT CHECKS THE DATE-TIME RANGE OF THE ENTRIES
|
||
405 CALL CHKDAT (IDATE,FDATE,LDATE)
|
||
GO TO 403
|
||
|
||
C HERE IF AN INCOMPLETE ENTRY IS FOUND
|
||
406 REREAD 1049,ENTRY,OS,RECSEQ,DECREV,CUSREV,A
|
||
GO TO 404
|
||
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING THE USAGE FILE
|
||
407 GO TO 450
|
||
|
||
C HERE TO PRODUCE REPORT. BUT FIRST CLOSE OPEN FILES AND THEN SORT
|
||
C THE TEMPORARY FILE INSRT.TMP ACCORDING TO WHAT REPORT HAS BEEN CHOSEN
|
||
|
||
450 CLOSE (UNIT=1)
|
||
CLOSE (UNIT=2)
|
||
IF (SORTBY.EQ.'A') GO TO 451
|
||
|
||
C HERE TO DO REPORT BY NAME
|
||
|
||
CALL SORT ('OUTSRT.TMP=INSRT.TMP/RECORD:160/KEY:1:12:A
|
||
1 /KEY:13:6:A/KEY:19:6:A/KEY:79:39:A/KEY:40:39:A/ASCII')
|
||
|
||
OPEN (FILE='INSRT.TMP', DEVICE='DSK', UNIT=1)
|
||
CLOSE (FILE='INSRT.TMP', DISPOSE='DELETE', DEVICE='DSK', UNIT=1)
|
||
CALL REPNAM (OUTFIL,ZSYSNA,CDATE,FDATE,LDATE,FSESCO,FSESRU,FPAGRU,
|
||
1 FPAGPA,FCRDRU,FCRDCR)
|
||
GO TO 3
|
||
|
||
C HERE TO DO REPORT BY ACCOUNT
|
||
|
||
451 CALL SORT ('OUTSRT.TMP=INSRT.TMP/RECORD:160/KEY:79:39:A
|
||
1 /KEY:1:12:A/KEY:13:6:A/KEY:19:6:A/KEY:40:39:A/ASCII')
|
||
|
||
OPEN (FILE='INSRT.TMP', DEVICE='DSK', UNIT=1)
|
||
CLOSE (FILE='INSRT.TMP', DEVICE='DSK', UNIT=1, DISPOSE='DELETE')
|
||
CALL REPACT (OUTFIL,ZSYSNA,CDATE,FDATE,LDATE,FSESCO,FSESRU,
|
||
1 FPAGRU,FPAGPA,FCRDRU,FCRDCR)
|
||
GO TO 3
|
||
|
||
|
||
C ALL DONE WITH REPORT. RETURN TO MAIN LOOP
|
||
|
||
C ************************************************************************
|
||
C END OF REPORT OF SYSTEM USAGE SORTED ON NAME OR ACCOUNT SECTION
|
||
C ************************************************************************
|
||
|
||
C ************************************************************************
|
||
C REPORT BY DISK USAGE SORTED ON DIRECTORY OR ACCOUNT SECTION
|
||
C ************************************************************************
|
||
|
||
500 OPEN (FILE=INFIL, DEVICE='DSK', UNIT=1, ACCESS='SEQIN')
|
||
OPEN (FILE='INSRT.TMP', DEVICE ='DSK', UNIT=2, ACCESS='SEQOUT')
|
||
|
||
C INITIALIZE THE FIRST DATE-TIME AND LAST DATE-TIME SO THE ENTRY TIME
|
||
C CAN BE REPORTED.
|
||
|
||
501 READ (1,1049,END=550) ENTRY,OS,RECSEQ,DECREV,CUSREV,A
|
||
IF (RECSEQ.NE.1) GO TO 501
|
||
DECODE (65,1050,A) JOB,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,
|
||
1 TERMD,LINENO,PROGNA,PROVER,MODVER,NODE
|
||
DO 502 I=1,5
|
||
FDATE(I)=IDATE(I)
|
||
502 CONTINUE
|
||
GO TO 508
|
||
|
||
C THIS POINT IS THE ACTUAL BEGINNING OF THE MAIN LOOP FOR REPORT BY
|
||
C DISK USAGE
|
||
|
||
503 READ (1,1049,END=550) ENTRY,OS,RECSEQ,DECREV,CUSREV,A
|
||
504 IF (RECSEQ.NE.1) GO TO 503
|
||
DECODE (65,1050,A) JOB,YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,
|
||
1 TERMD,LINENO,PROGNA,PROVER,MODVER,NODE
|
||
|
||
C NOW GO PROCESS THE ENTRY
|
||
|
||
508 IF ( (ENTRY.EQ.1) .OR. (ENTRY.EQ.4) )
|
||
1 CALL PRORES (ZSYSNA,$505,$506,$507)
|
||
IF (ENTRY.EQ.9) CALL PRODSK (FDSKPA,$505,$506,$507)
|
||
GO TO 503
|
||
|
||
C HERE IF NO ERRORS ENCOUNTERED WHEN READING RESTART ENTRY
|
||
C NOW CALL THE SUBROUTINE THAT CHECKS THE DATE-TIME OF THE ENTRIES
|
||
505 CALL CHKDAT (IDATE,FDATE,LDATE)
|
||
GO TO 503
|
||
|
||
C HERE IF ANOTHER ENTRY IS FOUND
|
||
C NOW CALL THE SUBROUTINE THAT CHECKS THE DATE-TIME OF THE ENTRIES
|
||
506 CALL CHKDAT (IDATE,FDATE,LDATE)
|
||
REREAD 1049,ENTRY,OS,RECSEQ,DECREV,CUSREV,A
|
||
GO TO 504
|
||
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING THE USAGE FILE
|
||
507 GO TO 550
|
||
|
||
C HERE TO PRODUCE REPORT. BUT FIRST CLOSE OPEN FILES AND THEN SORT
|
||
C THE TEMPORARY FILE INSRT.TMP ACCORDING TO WHAT REPORT HAS BEEN CHOSEN
|
||
|
||
550 CLOSE (UNIT=1)
|
||
CLOSE (UNIT=2)
|
||
IF (SORTBY.EQ.'A') GO TO 551
|
||
|
||
C HERE TO DO REPORT BY DIRECTORY
|
||
|
||
C CALL SORT ('SORT/RECORD:109/KEY:1,39,ASCENDING
|
||
C 1 /KEY:46,39,ASCENDING/KEY:40,6,ASCENDING /ASCII INSRT.TMP
|
||
C 2 OUTSRT.TMP')
|
||
|
||
CALL SORT ('OUTSRT.TMP=INSRT.TMP/RECORD:109/KEY:1:12:A
|
||
1 /KEY:46:39:A/KEY:40:6:A/ASCII')
|
||
|
||
OPEN (FILE='INSRT.TMP', DEVICE='DSK', UNIT=1)
|
||
CLOSE (FILE='INSRT.TMP', DISPOSE='DELETE', DEVICE='DSK', UNIT=1)
|
||
CALL REPDNA (OUTFIL,ZSYSNA,CDATE,FDATE,FDSKPA)
|
||
GO TO 3
|
||
|
||
C HERE TO DO REPORT BY ACCOUNT
|
||
|
||
C551 CALL SORT ('SORT/RECORD:109/KEY:46:39:ASCENDING
|
||
C 1 /KEY:1,39,ASCENDING/KEY:40,6,ASCENDING /ASCII INSRT.TMP
|
||
C 2 OUTSRT.TMP')
|
||
|
||
551 CALL SORT ('OUTSRT.TMP=INSRT.TMP/RECORD:109/KEY:46:39:A
|
||
1 /KEY:1:12:A/KEY:40:6:A/ASCII')
|
||
|
||
OPEN (FILE='INSRT.TMP', DEVICE='DSK', UNIT=1)
|
||
CLOSE (FILE='INSRT.TMP', DEVICE='DSK', UNIT=1, DISPOSE='DELETE')
|
||
CALL REPDAC (OUTFIL,ZSYSNA,CDATE,FDATE,FDSKPA)
|
||
GO TO 3
|
||
|
||
|
||
C ALL DONE WITH REPORT. RETURN TO MAIN LOOP
|
||
|
||
C ************************************************************************
|
||
C END OF REPORT BY DISK USAGE SORTED ON DIRECTORY OR ACCOUNT SECTION
|
||
C ************************************************************************
|
||
|
||
C ************************************************************************
|
||
C INPUT FORMAT STATEMENTS FOR THE MAIN PROGRAM
|
||
C ************************************************************************
|
||
|
||
1001 FORMAT (A5,2X,F6.2)
|
||
|
||
C ***********
|
||
C FORMAT STATEMENTS FOR ALL OTHER RECORD DESCRIPTIONS OF THE USAGE FILE
|
||
C ARE IN THEIR RESPECTIVE ENTRY PROCESSING SUBROUTINES CALLED PROXXX,
|
||
C (E.G., PROSES PROCESSES THE SESSION ENTRY)
|
||
C ***********
|
||
|
||
C ENTRY HEADER RECORD
|
||
1050 FORMAT (2I4,5I2,A1,I4,6A1,2(15A1),6A1)
|
||
1049 FORMAT (I4,2I1,2I2,10X,40A5)
|
||
|
||
C ************************************************************************
|
||
C OUTPUT FORMAT STATEMENTS FOR THE MAIN PROGRAM
|
||
C ************************************************************************
|
||
|
||
2001 FORMAT (' TOPS10 Accounting System')
|
||
|
||
C ************************************************************************
|
||
C END OF USAH10 PROGRAM - FOLLOWING ARE THE SUBROUTINES
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
SUBROUTINE QUEST(INFIL,OUTFIL,REPORT,SORTBY)
|
||
C ************************************************************************
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DOUBLE PRECISION INFIL,OUTFIL
|
||
|
||
C NOW ASK FOR THE INPUT FILE NAME. DEFAULT IS USAGE.OUT.
|
||
|
||
1 TYPE 2001
|
||
ACCEPT 1001,INFIL
|
||
IF (INFIL.EQ.'?') GO TO 2
|
||
IF (INFIL.EQ.'EXIT') CALL EXIT
|
||
IF (INFIL.EQ.' ') INFIL='USAGE.OUT'
|
||
TYPE 2002,INFIL
|
||
GO TO 3
|
||
|
||
C HELP FOR INPUT FILE QUESTION
|
||
|
||
2 TYPE 2003
|
||
TYPE 2004
|
||
GO TO 1
|
||
|
||
C NOW ASK FOR THE TYPE OF REPORT. DEFAULT IS SYSTEM USAGE.
|
||
|
||
3 TYPE 2005
|
||
ACCEPT 1002,REPORT
|
||
IF (REPORT.EQ.'?') GO TO 4
|
||
IF (REPORT.EQ.'EXIT') CALL EXIT
|
||
IF (REPORT.EQ.' ') REPORT='S'
|
||
GO TO 5
|
||
|
||
C HELP FOR REPORT QUESTION. DEFAULT IS SYSTEM USAGE.
|
||
|
||
4 TYPE 2006
|
||
TYPE 2004
|
||
GO TO 3
|
||
|
||
C NOW ASK FOR TYPE OF SORT. DEFAULT IS BY NAME/DIRECTORY
|
||
|
||
5 TYPE 2007
|
||
ACCEPT 1002,SORTBY
|
||
IF (SORTBY.EQ.'?') GO TO 6
|
||
IF (SORTBY.EQ.'EXIT') CALL EXIT
|
||
IF (SORTBY.EQ.' ') SORTBY='N'
|
||
GO TO 7
|
||
|
||
C HELP FOR SORT QUESTION.
|
||
|
||
6 TYPE 2008
|
||
TYPE 2004
|
||
GO TO 5
|
||
7 TYPE 2009
|
||
ACCEPT 1001,OUTFIL
|
||
IF (OUTFIL.EQ.'?') GO TO 8
|
||
IF (OUTFIL.EQ.'EXIT') CALL EXIT
|
||
IF (OUTFIL.EQ.' ') OUTFIL='USAGE.RPT'
|
||
TYPE 2011, OUTFIL
|
||
RETURN
|
||
|
||
C HELP FOR OUTPUT FILE QUESTION
|
||
|
||
8 TYPE 2010
|
||
TYPE 2004
|
||
GO TO 7
|
||
|
||
1001 FORMAT (A30)
|
||
1002 FORMAT (A5)
|
||
2001 FORMAT (' READ USAGE FILE: '$)
|
||
2002 FORMAT (' Input file name: ',A30)
|
||
2003 FORMAT (' Type file name of input file containing USAGE'
|
||
1' entries.'/' Default is USAGE.OUT.')
|
||
2004 FORMAT (' Type EXIT to return to monitor mode. Type ? to'
|
||
1' get this' / ' help message.')
|
||
2005 FORMAT (' Report by [System usage (S) or Disk usage (D)]: '$)
|
||
2006 FORMAT (' Type S for system usage report. Type D for disk usage'/
|
||
1' report. Default is S.')
|
||
2007 FORMAT (' Sort by [Name (N) or Account (A)]: '$)
|
||
2008 FORMAT (' Type N if reports are broken down by name. Type A if'
|
||
1/' reports are broken down by account. Default is N.')
|
||
2009 FORMAT (' Write to file: ' $)
|
||
2010 FORMAT (' Type file name of new output file. Default is'
|
||
1' USAGE.RPT.')
|
||
2011 FORMAT (' Output file name: ', A30)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE QUEST
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
SUBROUTINE CHKDAT (IDATE,FDATE,LDATE)
|
||
C ************************************************************************
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION IDATE(5),FDATE(5),LDATE(5)
|
||
DO 1 I=1,5
|
||
1 IF (FDATE(I).LT.IDATE(I)) GO TO 4
|
||
DO 2 I=1,5
|
||
2 FDATE(I)=IDATE(I)
|
||
RETURN
|
||
4 DO 5 I=1,5
|
||
5 IF (LDATE(I).LT.IDATE(I)) GO TO 6
|
||
RETURN
|
||
6 DO 7 I=1,5
|
||
7 LDATE(I)=IDATE(I)
|
||
RETURN
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE CHKDAT
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PROCESS A SYSTEM RESTART ENTRY OR A USAGE FILE
|
||
C HEADER ENTRY - PRORES
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE PRORES (ZSYSNA,*,*,*)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION ZSYSNA(39), SYSNAM(39), MONVER(15),A(40)
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.2) GO TO 2
|
||
IF ( (ENTRY.NE.1) .AND. (ENTRY.NE.4) ) GO TO 2
|
||
DECODE (125,1051,A) SYSNAM,MONVER,MBYEAR,MBMON,MBDAY,MBHOUR,
|
||
1 MBMIN,MBSEC,MONUP,CPUNO,CPU0,CPU1,CPU2,CPU3,CPU4,CPU5,CHYEAR,
|
||
2 CHMON,CHDAY,CHHOUR,CHMIN,CHSEC
|
||
DO 4 I=1,39
|
||
4 ZSYSNA(I)=SYSNAM(I)
|
||
GO TO 1
|
||
|
||
C HERE IF NO ERRORS ENCOUNTERED. SORT RECORD HAS BEEN WRITTEN
|
||
1 LABEL=1
|
||
RETURN (LABEL)
|
||
C HERE IF AN INCOMPLETE ENTRY IS FOUND
|
||
2 LABEL=2
|
||
RETURN (LABEL)
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING THE USAGE FILE
|
||
3 LABEL=3
|
||
RETURN (LABEL)
|
||
|
||
C **********
|
||
|
||
C MONITOR RESTART RECORD OR FILE HEADER RECORD
|
||
1049 FORMAT (I4,2I1,2I2,10X,40A5)
|
||
1051 FORMAT (39A1,15A1,I4,5A2,I18,I1,7I4,5I2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE PRORES
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PROCESS A SESSION ENTRY - PROSES
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE PROSES (FSESCO,FSESRU,*,*,*)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION ACCOUN(39), BATNAM(6), REMARK(39), NAME(12), A(40)
|
||
REAL FRUNTI,FCONNE,FCHARG,FSESCO,FSESRU
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.2) GO TO 2
|
||
IF ( (ENTRY.NE.2) .AND. (ENTRY.NE.3) ) GO TO 2
|
||
DECODE (121,1053,A) ACCOUN,RUNTIM,STYEAR,STMON,STDAY,STHOUR,
|
||
1 STMIN,STSEC,JOBTYP,BATNAM,BATSEQ,REMARK,CONNEC
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.3) GO TO 2
|
||
IF ( (ENTRY.NE.2) .AND. (ENTRY.NE.3) ) GO TO 2
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.4) GO TO 2
|
||
IF ( (ENTRY.NE.2) .AND. (ENTRY.NE.3) ) GO TO 2
|
||
DECODE (39,1052,A) PROJ,PROG,NAME
|
||
FRUNTI=FLOAT(RUNTIM)/1000.
|
||
FCONNE=FLOAT(CONNEC)/3600.
|
||
FCHARG=FRUNTI * FSESRU + FCONNE * FSESCO
|
||
|
||
C NOW CHECK TO SEE IF THE ACCOUNT STRING IS ALL SPACES. IF IT IS, PUT
|
||
C UNSPECIFIED ACCOUNT IN THE ACCOUNT FIELD.
|
||
|
||
J=0
|
||
DO 4 I=1,39
|
||
IF (ACCOUN(I).EQ.' ') J=J+1
|
||
4 CONTINUE
|
||
IF (J.EQ.39) GO TO 5
|
||
WRITE (2,2002) NAME,PROJ,PROG,REMARK,ACCOUN,FCONNE,FRUNTI,FCHARG
|
||
GO TO 1
|
||
5 WRITE (2,2003) NAME,PROJ,PROG,REMARK,FCONNE,FRUNTI,FCHARG
|
||
GO TO 1
|
||
|
||
C HERE IF NO ERRORS ENCOUNTERED. SORT RECORD HAS BEEN WRITTEN
|
||
1 LABEL=1
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF AN INCOMPLETE ENTRY IS FOUND
|
||
2 LABEL=2
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING THE USAGE FILE
|
||
3 LABEL=3
|
||
RETURN (LABEL)
|
||
|
||
C **********
|
||
|
||
|
||
C TOPS10 USER IDENTIFICATION RECORD
|
||
1049 FORMAT (I4,2I1,2I2,10X,40A5)
|
||
1052 FORMAT (2I6,12A1)
|
||
|
||
C SESSION RECORD #1
|
||
1053 FORMAT (39A1,I9,I4,5I2,I1,6A1,I6,39A1,I7)
|
||
|
||
C FORMAT OF FILE TO BE SORTED
|
||
2002 FORMAT (12A1,I6,I6,15X,2(39A1),F8.2,F8.1,14X,F10.2)
|
||
2003 FORMAT (12A1,I6,I6,15X,39A1,' UNSPECIFIED ACCOUNT',
|
||
1 19X,F8.2,F8.1,14X,F10.2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE PROSES
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PROCESS AN INPUT SPOOLER ENTRY - PROINP
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE PROINP (FCRDRU,FCRDCR,*,*,*)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION ACCOUN(39), JOBNAM(6), QUENAM(3), DEVNAM(6)
|
||
DIMENSION DISPOS(6), DITEXT(39), NAME(12),A(40)
|
||
REAL FCRDRU,FCRDCR,FRUNTI,FCHARG
|
||
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.2) GO TO 2
|
||
IF (ENTRY.NE.7) GO TO 2
|
||
DECODE (163,1054,A) ACCOUN,RUNTIM,CORETI,DSKRED,DSKWRI,JOBNAM,
|
||
1 QUENAM,DEVNAM,SEQNUM,CARDS,CDYEAR,CDMON,CDDAY,CDHOUR,CDMIN,
|
||
2 CDSEC,DISPOS,DITEXT,PRIOR
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.3) GO TO 2
|
||
IF (ENTRY.NE.7) GO TO 2
|
||
DECODE (39,1052,A) PROJ,PROG,NAME
|
||
FRUNTI = FLOAT(RUNTIM)/1000.
|
||
FCHARG = FRUNTI * FCRDRU + FLOAT(CARDS) * FCRDCR
|
||
|
||
C NOW CHECK TO SEE IF THE ACCOUNT STRING IS ALL SPACES. IF IT IS, PUT
|
||
C UNSPECIFIED ACCOUNT IN THE ACCOUNT FIELD.
|
||
|
||
J=0
|
||
DO 4 I=1,39
|
||
IF (ACCOUN(I).EQ.' ') J=J+1
|
||
4 CONTINUE
|
||
IF (J.EQ.39) GO TO 5
|
||
WRITE (2,2002) NAME,PROJ,PROG,ACCOUN,FRUNTI,CARDS,FCHARG
|
||
GO TO 1
|
||
5 WRITE (2,2003) NAME,PROJ,PROG,FRUNTI,CARDS,FCHARG
|
||
GO TO 1
|
||
|
||
C HERE IF NO ERRORS ENCOUNTERED. SORT RECORD HAS BEEN WRITTEN
|
||
1 LABEL=1
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF AN INCOMPLETE ENTRY IS FOUND
|
||
2 LABEL=2
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING THE USAGE FILE
|
||
3 LABEL=3
|
||
RETURN (LABEL)
|
||
|
||
C **********
|
||
|
||
C READ FORMAT BEFORE THE DECODE
|
||
1049 FORMAT (I4,2I1,2I2,10X,40A5)
|
||
|
||
C TOPS10 USER IDENTIFICATION RECORD
|
||
1052 FORMAT (2I6,12A1)
|
||
|
||
C INPUT SPOOLER RECORD
|
||
1054 FORMAT (39A1,I9,I11,I8,I8,6A1,3A1,6A1,2I6,I4,5I2,6A1,39A1,I2)
|
||
|
||
C FORMAT OF FILE TO BE SORTED
|
||
2002 FORMAT (12A1,I6,I6,15X,'INPUT SPOOLER CHARGES',18X,39A1,
|
||
1 8X,F8.1,I7,7X,F10.2)
|
||
2003 FORMAT (12A1,I6,I6,15X,'INPUT SPOOLER CHARGES',18X,
|
||
1 ' UNSPECIFIED ACCOUNT',19X,8X,F8.1,I7,7X,F10.2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE PROINP
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PROCESS AN OUTPUT SPOOLER ENTRY - PROOUT
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE PROOUT (FPAGRU,FPAGPA,*,*,*)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION ACCOUN(39), JOBNAM(6), QUENAM(3), DEVNAM(6)
|
||
DIMENSION FORMS(6), DISPOS(6), DITEXT(39),NAME(12),A(40)
|
||
REAL FPAGRU,FPAGPA,FRUNTI,FCHARG
|
||
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.2) GO TO 2
|
||
IF (ENTRY.NE.8) GO TO 2
|
||
DECODE (188,1055,A) ACCOUN,RUNTIM,CORETI,DSKRED,DSKWRI,JOBNAM,
|
||
1 QUENAM,DEVNAM,SEQNUM,PAGES,FILES,CDYEAR,CDMON,CDDAY,CDHOUR,
|
||
2 CDMIN,CDSEC,SDYEAR,SDMON,SDHOUR,SDMIN,SDSEC,FORMS,DISPOS,
|
||
3 DITEXT,PRIOR
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.3) GO TO 2
|
||
IF (ENTRY.NE.8) GO TO 2
|
||
DECODE (39,1052,A) PROJ,PROG,NAME
|
||
FRUNTI = FLOAT(RUNTIM)/1000.
|
||
FCHARG = FRUNTI * FPAGRU + FLOAT(PAGES) * FPAGPA
|
||
|
||
C NOW CHECK TO SEE IF THE ACCOUNT STRING IS ALL SPACES. IF IT IS, PUT
|
||
C UNSPECIFIED ACCOUNT IN THE ACCOUNT FIELD.
|
||
|
||
J=0
|
||
DO 4 I=1,39
|
||
IF (ACCOUN(I).EQ.' ') J=J+1
|
||
4 CONTINUE
|
||
IF (J.EQ.39) GO TO 5
|
||
WRITE (2,2002) NAME,PROJ,PROG,ACCOUN,FRUNTI,PAGES,FCHARG
|
||
GO TO 1
|
||
5 WRITE (2,2003) NAME,PROJ,PROG,FRUNTI,PAGES,FCHARG
|
||
GO TO 1
|
||
|
||
C HERE IF NO ERRORS ENCOUNTERED. SORT RECORD HAS BEEN WRITTEN
|
||
1 LABEL=1
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF AN INCOMPLETE ENTRY IS FOUND
|
||
2 LABEL=2
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING THE USAGE FILE
|
||
3 LABEL=3
|
||
RETURN (LABEL)
|
||
|
||
C **********
|
||
|
||
1049 FORMAT (I4,2I1,2I2,10X,40A5)
|
||
|
||
C TOPS10 USER IDENTIFICATION RECORD
|
||
1052 FORMAT (2I6,12A1)
|
||
|
||
C OUTPUT SPOOLER RECORD
|
||
1055 FORMAT (39A1,I9,I11,2I8,6A1,3A1,6A1,2I6,I5,I4,
|
||
1 5I2,I4,5I2,6A1,6A1,39A1,I2)
|
||
|
||
C FORMAT OF FILE TO BE SORTED
|
||
2002 FORMAT (12A1,I6,I6,15X,'OUTPUT SPOOLER CHARGES',17X,39A1,
|
||
1 8X,F8.1,7X,I7,F10.2)
|
||
2003 FORMAT (12A1,I6,I6,15X,'OUTPUT SPOOLER CHARGES',17X,
|
||
1 ' UNSPECIFIED ACCOUNT',19X,8X,F8.1,7X,I7,F10.2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE PROOUT
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PROCESS A DISK USAGE ENTRY - PRODSK
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE PRODSK (FDSKPA,*,*,*)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL FDSKPA,FCHARG
|
||
DIMENSION STRNAM(6), ACCOUN(39), A(40)
|
||
|
||
READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.2) GO TO 2
|
||
IF (ENTRY.NE.9) GO TO 2
|
||
DECODE (122,1056,A) RECNUM,TOTALL,
|
||
1 TOTACT,TOTFIL,STRNAM,PROJ,PROG,STRTYP,CONTYP,DEVTYP,QUOIN,QUOOUT,
|
||
2 LLYEAR,LLMON,LLDAY,LLHOUR,LLMIN,LLSEC,LAYEAR,LAMON,LADAY,LAHOUR,
|
||
3 LAMIN,LASEC,EXPDIR,FODIR
|
||
4 READ (1,1049,END=3) ENTRY,OS,RECSEQ,DECVER,CUSVER,A
|
||
IF (RECSEQ.NE.3) GO TO 2
|
||
IF (ENTRY.NE.9) GO TO 2
|
||
DECODE (116,1057,A) ACCOUN,PROJ,PROG,
|
||
1 DSKALL,PAGES,FILES,STRNAM,STRTYP,CONTYP,DEVTYP
|
||
FCHARG = FLOAT(PAGES) * FDSKPA
|
||
J=0
|
||
DO 5 I=1,39
|
||
5 IF (ACCOUN(I).EQ.' ') J=J+1
|
||
IF (J.EQ.39) GO TO 6
|
||
WRITE (2,2004) PROJ,PROG,STRNAM,ACCOUN,PAGES,FILES,FCHARG
|
||
GO TO 4
|
||
6 WRITE (2,2005) PROJ,PROG,STRNAM,PAGES,FILES,FCHARG
|
||
GO TO 4
|
||
|
||
C HERE IF A NEW ENTRY HAS BEEN FOUND
|
||
2 LABEL = 2
|
||
RETURN (LABEL)
|
||
|
||
C HERE IF END OF FILE HAS BEEN REACHED WHEN READING USAGE FILE
|
||
3 LABEL = 3
|
||
RETURN (LABEL)
|
||
|
||
C **********
|
||
|
||
C READ FORMAT BEFORE DECODE
|
||
1049 FORMAT (I4,2I1,2I2,10X,40A5)
|
||
|
||
C DISK USAGE DIRECTORY RECORD
|
||
1056 FORMAT (I3,2I10,I5,6A1,2I6,27X,I1,2I3,2I6,2(I4,5I2),2A1)
|
||
|
||
C DISK USAGE ACCOUNT STRING RECORD
|
||
1057 FORMAT (2I6,27X,39A1,2I10,I5,6A1,I1,2I3)
|
||
|
||
C FORMATS OF FILE TO BE SORTED
|
||
2004 FORMAT (2I6,6A1,39A1,I10,I5,F10.2)
|
||
2005 FORMAT (2I6,6A1,' UNSPECIFIED ACCOUNT',19X,I10,I5,F10.2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINE PRODSK
|
||
C ************************************************************************
|
||
END
|
||
|
||
C ************************************************************************
|
||
C ************************************************************************
|
||
C BEGINNING OF REPORT WRITING SUBROUTINES
|
||
C ************************************************************************
|
||
C ************************************************************************
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PRODUCE A SYSTEM USAGE REPORT SORTED BY NAME, ACCOUNT,
|
||
C AND REMARK - REPNAM
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE REPNAM (OUTFIL,ZSYSNA,CDATE,FDATE,LDATE,FSESCO,
|
||
1 FSESRU,FPAGRU,FPAGPA,FCRDRU,FCRDCR)
|
||
IMPLICIT INTEGER (A-Z)
|
||
DOUBLE PRECISION OUTFIL
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39)
|
||
DIMENSION ACCOUN(39),NAME(12),REMARK(39)
|
||
DIMENSION LACCOU(39),LNAME(12),LREMAR(39)
|
||
|
||
REAL FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU,FCRDCR
|
||
REAL FCHARG,FCONNE,FRUNTI
|
||
REAL XCHARG,XCONNE,XRUNTI
|
||
REAL YCHARG,YCONNE,YRUNTI
|
||
REAL ZCHARG,ZCONNE,ZRUNTI
|
||
|
||
OPEN (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',ACCESS='SEQIN')
|
||
OPEN (FILE=OUTFIL,UNIT=2,DEVICE='DSK',ACCESS='SEQOUT')
|
||
|
||
C FIRST INITIALIZE ACCOUNT, NAME AND REMARK (ITEMS BEGINNING WITH L, E.G.,
|
||
C LACCOU, LREMAR, LNAME). THESE ARE THE CONTROLS OF THE REPORT.
|
||
C WHEN THE NAME READ IN IS DIFFERENT FROM LNAME, A REPORT FOOTING
|
||
C IS OUTPUT, A PAGE HEADER IS OUTPUT, ETC. ALSO INITIALIZE THE
|
||
C ACCUMULATORS FOR RUNTIME, CONNECT TIME, PAGES, CARDS, AND CHARGES.
|
||
C IF THE REMARK JUST READ IN IS DIFFERENT, THE X* (E.G., XRUNTI,
|
||
C XCONNE, XPAGE, ETC.) ARE OUTPUT AND ZEROED. WHEN THE ACCOUNT
|
||
C CHANGES, THE ITEMS BEGINNING WITH Y* WILL BE OUTPUT AND THE X*
|
||
C AND Y* ITEMS ARE ZEROED. WHEN THE NAME CHANGES, THE ITEMS
|
||
C BEGINNING WITH Z* ARE OUTPUT AND ALL ITEMS (X*, Y*, Z*) WILL BE
|
||
C ZEROED.
|
||
|
||
READ (1,1000,END=500) NAME,PROJ,PROG,REMARK,ACCOUN,FCONNE,
|
||
1 FRUNTI,CARDS,PAGES,FCHARG
|
||
1 DO 2 I=1,39
|
||
LACCOU(I)=ACCOUN(I)
|
||
2 LREMAR(I)=REMARK(I)
|
||
DO 20 I=1,12
|
||
20 LNAME(I)=NAME(I)
|
||
LPROJ=PROJ
|
||
LPROG=PROG
|
||
XCONNE=FCONNE
|
||
YCONNE=FCONNE
|
||
ZCONNE=FCONNE
|
||
XRUNTI=FRUNTI
|
||
YRUNTI=FRUNTI
|
||
ZRUNTI=FRUNTI
|
||
XCARDS=CARDS
|
||
YCARDS=CARDS
|
||
ZCARDS=CARDS
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=PAGES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=FCHARG
|
||
CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG,LINENO)
|
||
3 READ (1,1000,END=500) NAME,PROJ,PROG,REMARK,ACCOUN,FCONNE,
|
||
1 FRUNTI,CARDS,PAGES,FCHARG
|
||
J=0
|
||
DO 4 I=1,12
|
||
4 IF (NAME(I).NE.LNAME(I)) J=J+1
|
||
IF (PROJ.NE.LPROJ) J=J+1
|
||
IF (PROG.NE.LPROG) J=J+1
|
||
IF (J.EQ.0) GO TO 5
|
||
CALL NAMERS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL NAMEAS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL NAMENS (LINENO,ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG,FSESCO,FSESRU,FPAGRU,
|
||
2 FPAGPA,FCRDRU,FCRDCR)
|
||
GO TO 1
|
||
5 J=0
|
||
DO 6 I=1,39
|
||
6 IF (ACCOUN(I).NE.LACCOU(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 8
|
||
CALL NAMERS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL NAMEAS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
DO 7 I=1,39
|
||
LACCOU(I)=ACCOUN(I)
|
||
7 LREMAR(I)=REMARK(I)
|
||
XCONNE=FCONNE
|
||
YCONNE=FCONNE
|
||
ZCONNE=ZCONNE+FCONNE
|
||
XRUNTI=FRUNTI
|
||
YRUNTI=FRUNTI
|
||
ZRUNTI=ZRUNTI+FRUNTI
|
||
XCARDS=CARDS
|
||
YCARDS=CARDS
|
||
ZCARDS=ZCARDS+CARDS
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
GO TO 3
|
||
8 J=0
|
||
DO 9 I=1,39
|
||
9 IF (REMARK(I).NE.LREMAR(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 11
|
||
CALL NAMERS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
|
||
DO 10 I=1,39
|
||
10 LREMAR(I)=REMARK(I)
|
||
XCONNE=FCONNE
|
||
YCONNE=YCONNE+FCONNE
|
||
ZCONNE=ZCONNE+FCONNE
|
||
XRUNTI=FRUNTI
|
||
YRUNTI=YRUNTI+FRUNTI
|
||
ZRUNTI=ZRUNTI+FRUNTI
|
||
XCARDS=CARDS
|
||
YCARDS=YCARDS+CARDS
|
||
ZCARDS=ZCARDS+CARDS
|
||
XPAGES=PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XCHARG=FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
GO TO 3
|
||
11 XCONNE=XCONNE+FCONNE
|
||
YCONNE=YCONNE+FCONNE
|
||
ZCONNE=ZCONNE+FCONNE
|
||
XRUNTI=XRUNTI+FRUNTI
|
||
YRUNTI=YRUNTI+FRUNTI
|
||
ZRUNTI=ZRUNTI+FRUNTI
|
||
XCARDS=XCARDS+CARDS
|
||
YCARDS=YCARDS+CARDS
|
||
ZCARDS=ZCARDS+CARDS
|
||
XPAGES=XPAGES+PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XCHARG=XCHARG+FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
GO TO 3
|
||
|
||
C **********
|
||
C HERE WHEN END OF FILE HAS BEEN READ IN SORT FILE. OUTPUT LAST
|
||
C REPORT AND FINISH UP.
|
||
C **********
|
||
|
||
500 CALL NAMERS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL NAMEAS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL NAMENS (LINENO,ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG,FSESCO,FSESRU,FPAGRU,
|
||
2 FPAGPA,FCRDRU,FCRDCR)
|
||
CLOSE (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',DISPOSE='DELETE')
|
||
CLOSE (UNIT=2)
|
||
RETURN
|
||
|
||
C INPUT FORMAT STATEMENT
|
||
1000 FORMAT (12A1,I6,I6,15X,2(39A1),F8.2,F8.1,2I7,F10.2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINES TO REPORT SYSTEM USAGE SORTED BY NAME, ACCOUNT,
|
||
C AND REMARK - REPNAM
|
||
C ************************************************************************
|
||
END
|
||
|
||
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT THE PAGE HEADER FOR SYSTEM USAGE REPORT BY
|
||
C NAME
|
||
C **********
|
||
SUBROUTINE NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39),LNAME(12)
|
||
DIMENSION LETMON(12)
|
||
DATA (LETMON(I),I=1,12)/'-Jan-','-Feb-','-Mar-','-Apr-',
|
||
1 '-May-','-Jun-','-Jul-','-Aug-','-Sep-','-Oct-','-Nov-',
|
||
2 '-Dec-'/
|
||
|
||
WRITE (2,107)
|
||
LINENO=0
|
||
WRITE (2,100) CDATE,ZSYSNA
|
||
LINENO=LINENO+1
|
||
WRITE (2,101) LNAME,LPROJ,LPROG
|
||
LINENO=LINENO+1
|
||
WRITE (2,102) FDATE(3),LETMON(FDATE(2)),FDATE(1),FDATE(4),
|
||
1 FDATE(5),LDATE(3),LETMON(LDATE(2)),LDATE(1),LDATE(4),LDATE(5)
|
||
LINENO=LINENO+1
|
||
WRITE (2,103)
|
||
LINENO=LINENO+2
|
||
WRITE (2,104)
|
||
LINENO=LINENO+1
|
||
WRITE (2,105)
|
||
LINENO=LINENO+1
|
||
WRITE (2,106)
|
||
LINENO=LINENO+2
|
||
RETURN
|
||
|
||
C OUTPUT FORMATS FOR THE PAGE HEADER
|
||
100 FORMAT ('*','Run Date:', T12,A5,T17,A5,T22,A5,T47,39A1)
|
||
101 FORMAT ('*','User ',12A1,1X,'[',I6,',',I6,']',T53,
|
||
1 'TOPS10 System USAGE Report')
|
||
102 FORMAT ('*',T39,'USAGE Entries From: ',I2,A5,I4,1X,I2,':',I2,
|
||
1 1X,'to: ',I2,A5,I4,1X,I2,':',I2)
|
||
103 FORMAT ('*',/'*',T56,'Connect',T76,'Input',T84,'Output')
|
||
104 FORMAT ('*',T46,'Total',T57,'Time',T66,'Runtime',T75,
|
||
1 'Spooler',T83,'Spooler')
|
||
105 FORMAT ('*',T15,'Account',T45,'Charge',T56,'(Hours)',T67,
|
||
1 '(Sec.)',T76,'Cards',T84,'Pages',T91,'Remark')
|
||
106 FORMAT ('*',T15,'-------',T43,'-----------',T55,'---------',
|
||
1 T65,'---------',T75,'-------',T83,'-------',T91,'------'/
|
||
2 '*')
|
||
107 FORMAT ('1')
|
||
|
||
END
|
||
|
||
C ********
|
||
C SUBROUTINE TO OUTPUT DETAIL LINE WHENEVER A REMARK, ACCOUNT, OR
|
||
C NAME CHANGES IN SYSTEM USAGE REPORT SORTED BY NAME
|
||
C **********
|
||
SUBROUTINE NAMERS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,
|
||
1 XCARDS,XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL XCONNE,XRUNTI,XCHARG
|
||
DIMENSION LREMAR(39),LACCOU(39),CDATE(3),FDATE(5),LDATE(5)
|
||
DIMENSION ZSYSNA(39),LNAME(12)
|
||
|
||
IF (XCARDS.EQ.0) GO TO 1
|
||
WRITE (2,100) LACCOU,XCHARG,XRUNTI,XCARDS,LREMAR
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
GO TO 3
|
||
1 IF (XPAGES.EQ.0) GO TO 2
|
||
WRITE (2,101) LACCOU,XCHARG,XRUNTI,XPAGES,LREMAR
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
GO TO 3
|
||
2 WRITE (2,102) LACCOU,XCHARG,XCONNE,XRUNTI,LREMAR
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
3 XCHARG=0.
|
||
XCONNE=0.
|
||
XRUNTI=0.
|
||
XCARDS=0
|
||
XPAGES=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',39A1,T41,'$',F10.2,T65,F8.1,T75,I7,T91,39A1)
|
||
101 FORMAT ('*',39A1,T41,'$',F10.2,T65,F8.1,T83,I7,T91,39A1)
|
||
102 FORMAT ('*',39A1,T41,'$',F10.2,T55,F8.2,T65,F8.1,T91,39A1)
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT ACCOUNT SUBTOTAL FOOTING WHEN ACCOUNT OR
|
||
C NAME CHANGES IN SYSTEM USAGE REPORT SORTED BY NAME
|
||
C **********
|
||
SUBROUTINE NAMEAS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,
|
||
1 CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL YCHARG,YCONNE,YRUNTI
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39),LNAME(12)
|
||
|
||
WRITE (2,100)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,101) YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
1 YCHARG=0.
|
||
YRUNTI=0.
|
||
YCONNE=0.
|
||
YPAGES=0
|
||
YCARDS=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',T41,'-----------',T55,'---------',T65,'---------',
|
||
1 T75,'-------',T83,'-------')
|
||
101 FORMAT ('*','* * * Account Subtotal * * *',T41,'$',F10.2,T55,
|
||
1 F8.2,T65,F8.1,T75,I7,T83,I7)
|
||
102 FORMAT ('*')
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT REPORT FOOTING WHEN THE NAME CHANGES IN
|
||
C SYSTEM USAGE REPORT SORTED BY NAME
|
||
C **********
|
||
|
||
SUBROUTINE NAMENS (LINENO,ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES,
|
||
1 CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG,FSESCO,FSESRU,
|
||
2 FPAGRU,FPAGPA,FCRDRU,FCRDCR)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL ZCHARG,ZCONNE,ZRUNTI,FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU
|
||
REAL FCRDCR
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39),LNAME(12)
|
||
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,101)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,102) ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,100)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,104) LNAME,LPROJ,LPROG
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,105)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,106) FSESCO,FSESRU
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,107) FCRDCR,FCRDRU
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL NAMEPH (CDATE,FDATE,LDATE,ZSYSNA,LNAME,
|
||
1 LPROJ,LPROG,LINENO)
|
||
WRITE (2,108) FPAGPA,FPAGRU
|
||
RETURN
|
||
|
||
100 FORMAT ('*')
|
||
101 FORMAT ('*',T41,'===========',T55,'=========',T65,'=========',
|
||
1 T75,'=======',T83,'=======')
|
||
102 FORMAT ('*','* * * Totals * * *',T41,'$',F10.2,T55,F8.2,T65,
|
||
1 F8.1,T75,I7,T83,I7)
|
||
103 FORMAT ('*','******************************')
|
||
104 FORMAT ('*','* End of Report for User ',12A1,1X,'[',I6,',',I6,']')
|
||
105 FORMAT ('*','Rates:')
|
||
106 FORMAT ('*',T5,'Session Connect Time = $',F5.2,
|
||
1 '/Hour, Session Runtime',8X,'= $',F5.2,'/Second')
|
||
107 FORMAT ('*',T5,'Input Spooler Unit = $',F5.2,
|
||
1 '/Card, Input Spooler Runtime = $',F5.2,'/Second')
|
||
108 FORMAT ('*',T5,'Output Spooler Unit = $',F5.2,
|
||
1 '/Page, Output Spooler Runtime = $',F5.2,'/Second')
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PRODUCE A SYSTEM USAGE REPORT SORTED BY ACCOUNT, NAME,
|
||
C AND REMARK - REPACT
|
||
C ************************************************************************
|
||
|
||
SUBROUTINE REPACT (OUTFIL,ZSYSNA,CDATE,FDATE,LDATE,FSESCO,
|
||
1 FSESRU,FPAGRU,FPAGPA,FCRDRU,FCRDCR)
|
||
IMPLICIT INTEGER (A-Z)
|
||
DOUBLE PRECISION OUTFIL
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39)
|
||
DIMENSION ACCOUN(39),NAME(12),REMARK(39)
|
||
DIMENSION LACCOU(39),LNAME(12),LREMAR(39)
|
||
|
||
REAL FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU,FCRDCR
|
||
REAL FCHARG,FCONNE,FRUNTI
|
||
REAL XCHARG,XCONNE,XRUNTI
|
||
REAL YCHARG,YCONNE,YRUNTI
|
||
REAL ZCHARG,ZCONNE,ZRUNTI
|
||
|
||
OPEN (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',ACCESS='SEQIN')
|
||
OPEN (FILE=OUTFIL,UNIT=2,DEVICE='DSK',ACCESS='SEQOUT')
|
||
|
||
C FIRST INITIALIZE ACCOUNT, NAME AND REMARK (ITEMS BEGINNING WITH L, E.G.,
|
||
C LACCOU, LREMAR, LNAME). THESE ARE THE CONTROLS OF THE REPORT.
|
||
C WHEN THE NAME READ IN IS DIFFERENT FROM LNAME, A REPORT FOOTING
|
||
C IS OUTPUT, A PAGE HEADER IS OUTPUT, ETC. ALSO INITIALIZE THE
|
||
C ACCUMULATORS FOR RUNTIME, CONNECT TIME, PAGES, CARDS, AND CHARGES.
|
||
C IF THE REMARK JUST READ IN IS DIFFERENT, THE X* (E.G., XRUNTI,
|
||
C XCONNE, XPAGE, ETC.) ARE OUTPUT AND ZEROED. WHEN THE NAME
|
||
C CHANGES, THE ITEMS BEGINNING WITH Y* WILL BE OUTPUT AND THE X*
|
||
C AND Y* ITEMS ARE ZEROED. WHEN THE ACCOUNT CHANGES, THE ITEMS
|
||
C BEGINNING WITH Z* ARE OUTPUT AND ALL ITEMS (X*, Y*, Z*) WILL BE
|
||
C ZEROED.
|
||
|
||
READ (1,1000,END=500) NAME,PROJ,PROG,REMARK,ACCOUN,FCONNE,
|
||
1 FRUNTI,CARDS,PAGES,FCHARG
|
||
1 DO 2 I=1,39
|
||
LACCOU(I)=ACCOUN(I)
|
||
2 LREMAR(I)=REMARK(I)
|
||
DO 20 I=1,12
|
||
20 LNAME(I)=NAME(I)
|
||
LPROJ=PROJ
|
||
LPROG=PROG
|
||
XCONNE=FCONNE
|
||
YCONNE=FCONNE
|
||
ZCONNE=FCONNE
|
||
XRUNTI=FRUNTI
|
||
YRUNTI=FRUNTI
|
||
ZRUNTI=FRUNTI
|
||
XCARDS=CARDS
|
||
YCARDS=CARDS
|
||
ZCARDS=CARDS
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=PAGES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=FCHARG
|
||
CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,LINENO)
|
||
|
||
3 READ (1,1000,END=500) NAME,PROJ,PROG,REMARK,ACCOUN,FCONNE,
|
||
1 FRUNTI,CARDS,PAGES,FCHARG
|
||
J=0
|
||
DO 4 I=1,39
|
||
4 IF (ACCOUN(I).NE.LACCOU(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 5
|
||
CALL ACCTRS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL ACCTNS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LACCOU)
|
||
CALL ACCTAS (LINENO,ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LACCOU,FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU,
|
||
2 FCRDCR)
|
||
GO TO 1
|
||
5 J=0
|
||
DO 6 I=1,12
|
||
6 IF (NAME(I).NE.LNAME(I)) J=J+1
|
||
IF (PROJ.NE.LPROJ) J=J+1
|
||
IF (PROG.NE.LPROG) J=J+1
|
||
IF (J.EQ.0) GO TO 8
|
||
CALL ACCTRS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL ACCTNS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LACCOU)
|
||
DO 7 I=1,39
|
||
7 LREMAR(I)=REMARK(I)
|
||
DO 21 I=1,12
|
||
21 LNAME(I)=NAME(I)
|
||
LPROJ=PROJ
|
||
LPROG=PROG
|
||
XCONNE=FCONNE
|
||
YCONNE=FCONNE
|
||
ZCONNE=ZCONNE+FCONNE
|
||
XRUNTI=FRUNTI
|
||
YRUNTI=FRUNTI
|
||
ZRUNTI=ZRUNTI+FRUNTI
|
||
XCARDS=CARDS
|
||
YCARDS=CARDS
|
||
ZCARDS=ZCARDS+CARDS
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
GO TO 3
|
||
8 J=0
|
||
DO 9 I=1,39
|
||
9 IF (REMARK(I).NE.LREMAR(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 11
|
||
CALL ACCTRS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
DO 10 I=1,39
|
||
10 LREMAR(I)=REMARK(I)
|
||
|
||
XCONNE=FCONNE
|
||
YCONNE=YCONNE+FCONNE
|
||
ZCONNE=ZCONNE+FCONNE
|
||
XRUNTI=FRUNTI
|
||
YRUNTI=YRUNTI+FRUNTI
|
||
ZRUNTI=ZRUNTI+FRUNTI
|
||
XCARDS=CARDS
|
||
YCARDS=YCARDS+CARDS
|
||
ZCARDS=ZCARDS+CARDS
|
||
XPAGES=PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XCHARG=FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
GO TO 3
|
||
11 XCONNE=XCONNE+FCONNE
|
||
YCONNE=YCONNE+FCONNE
|
||
ZCONNE=ZCONNE+FCONNE
|
||
XRUNTI=XRUNTI+FRUNTI
|
||
YRUNTI=YRUNTI+FRUNTI
|
||
ZRUNTI=ZRUNTI+FRUNTI
|
||
XCARDS=XCARDS+CARDS
|
||
YCARDS=YCARDS+CARDS
|
||
ZCARDS=ZCARDS+CARDS
|
||
XPAGES=XPAGES+PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XCHARG=XCHARG+FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
GO TO 3
|
||
|
||
C **********
|
||
C HERE WHEN END OF FILE HAS BEEN READ IN SORT FILE. OUTPUT LAST
|
||
C REPORT AND FINISH UP.
|
||
C **********
|
||
|
||
500 CALL ACCTRS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,XCARDS,
|
||
1 XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
CALL ACCTNS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LACCOU)
|
||
CALL ACCTAS (LINENO,ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES,CDATE,
|
||
1 FDATE,LDATE,ZSYSNA,LACCOU,FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU,
|
||
2 FCRDCR)
|
||
CLOSE (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',DISPOSE='DELETE')
|
||
CLOSE (UNIT=2)
|
||
RETURN
|
||
|
||
C INPUT FORMAT STATEMENT
|
||
1000 FORMAT (12A1,2I6,15X,2(39A1),F8.2,F8.1,2I7,F10.2)
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINES TO REPORT SYSTEM USAGE SORTED BY ACCOUNT, NAME
|
||
C AND REMARK - REPACT
|
||
C ************************************************************************
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT THE PAGE HEADER FOR SYSTEM USAGE REPORT BY
|
||
C ACCOUNT
|
||
C **********
|
||
SUBROUTINE ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,LINENO)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39),LACCOU(39)
|
||
DIMENSION LETMON(12)
|
||
DATA (LETMON(I),I=1,12)/'-Jan-','-Feb-','-Mar-','-Apr-',
|
||
1 '-May-','-Jun-','-Jul-','-Aug-','-Sep-','-Oct-','-Nov-',
|
||
2 '-Dec-'/
|
||
|
||
WRITE (2,107)
|
||
LINENO=0
|
||
WRITE (2,100) CDATE,ZSYSNA
|
||
LINENO=LINENO+1
|
||
WRITE (2,101) LACCOU
|
||
LINENO=LINENO+1
|
||
WRITE (2,102) FDATE(3),LETMON(FDATE(2)),FDATE(1),FDATE(4),
|
||
1 FDATE(5),LDATE(3),LETMON(LDATE(2)),LDATE(1),LDATE(4),LDATE(5)
|
||
LINENO=LINENO+1
|
||
WRITE (2,103)
|
||
LINENO=LINENO+2
|
||
WRITE (2,104)
|
||
LINENO=LINENO+1
|
||
WRITE (2,105)
|
||
LINENO=LINENO+1
|
||
WRITE (2,106)
|
||
LINENO=LINENO+2
|
||
RETURN
|
||
|
||
C OUTPUT FORMATS FOR THE PAGE HEADER
|
||
100 FORMAT ('*','Run Date:', T12,A5,T17,A5,T22,A5,T47,39A1)
|
||
101 FORMAT ('*','Account ',39A1,T53,'TOPS10 System USAGE Report')
|
||
102 FORMAT ('*',T39,'USAGE Entries From: ',I2,A5,I4,1X,I2,':',I2,
|
||
1 1X,'to: ',I2,A5,I4,1X,I2,':',I2)
|
||
103 FORMAT ('*',/'*',T56,'Connect',T76,'Input',T84,'Output')
|
||
104 FORMAT ('*',T46,'Total',T57,'Time',T66,'Runtime',T75,
|
||
1 'Spooler',T83,'Spooler')
|
||
105 FORMAT ('*',T17,'Name',T45,'Charge',T56,'(Hours)',T67,
|
||
1 '(Sec.)',T76,'Cards',T84,'Pages',T91,'Remark')
|
||
106 FORMAT ('*',T17,'----',T43,'-----------',T55,'---------',
|
||
1 T65,'---------',T75,'-------',T83,'-------',T91,'------'/
|
||
2 '*')
|
||
107 FORMAT ('1')
|
||
|
||
END
|
||
|
||
C ********
|
||
C SUBROUTINE TO OUTPUT DETAIL LINE WHENEVER A REMARK, ACCOUNT, OR
|
||
C NAME CHANGES IN SYSTEM USAGE REPORT SORTED BY ACCOUNT
|
||
C **********
|
||
SUBROUTINE ACCTRS (LINENO,LREMAR,LACCOU,XCHARG,XCONNE,XRUNTI,
|
||
1 XCARDS,XPAGES,CDATE,FDATE,LDATE,ZSYSNA,LNAME,LPROJ,LPROG)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL XCONNE,XRUNTI,XCHARG
|
||
DIMENSION LREMAR(39),LACCOU(39),CDATE(3),FDATE(5),LDATE(5)
|
||
DIMENSION ZSYSNA(39),LNAME(12)
|
||
|
||
IF (XCARDS.EQ.0) GO TO 1
|
||
WRITE (2,100) LNAME,LPROJ,LPROG,XCHARG,XRUNTI,XCARDS,LREMAR
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
GO TO 3
|
||
1 IF (XPAGES.EQ.0) GO TO 2
|
||
WRITE (2,101) LNAME,LPROJ,LPROG,XCHARG,XRUNTI,XPAGES,LREMAR
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
GO TO 3
|
||
2 WRITE (2,102) LNAME,LPROJ,LPROG,XCHARG,XCONNE,XRUNTI,LREMAR
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
3 XCHARG=0.
|
||
XCONNE=0.
|
||
XRUNTI=0.
|
||
XCARDS=0
|
||
XPAGES=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',12A1,1X,'[',I6,',',I6,']',T41,'$',F10.2,T65,
|
||
1 F8.1,T75,I7,T91,39A1)
|
||
101 FORMAT ('*',12A1,1X,'[',I6,',',I6,']',T41,'$',F10.2,T65,
|
||
1 F8.1,T83,I7,T91,39A1)
|
||
102 FORMAT ('*',12A1,1X,'[',I6,',',I6,']',T41,'$',F10.2,T55,
|
||
1 F8.2,T65,F8.1,T91,39A1)
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT NAME SUBTOTAL FOOTING WHEN ACCOUNT OR
|
||
C NAME CHANGES IN SYSTEM USAGE REPORT SORTED BY ACCOUNT
|
||
C **********
|
||
SUBROUTINE ACCTNS (LINENO,YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES,
|
||
1 CDATE,FDATE,LDATE,ZSYSNA,LACCOU)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL YCHARG,YCONNE,YRUNTI
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39),LACCOU(39)
|
||
|
||
WRITE (2,100)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,101) YCHARG,YCONNE,YRUNTI,YCARDS,YPAGES
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
1 YCHARG=0.
|
||
YRUNTI=0.
|
||
YCONNE=0.
|
||
YPAGES=0
|
||
YCARDS=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',T41,'-----------',T55,'---------',T65,'---------',
|
||
1 T75,'-------',T83,'-------')
|
||
101 FORMAT ('*','* * * User Subtotal * * *',T41,'$',F10.2,T55,
|
||
1 F8.2,T65,F8.1,T75,I7,T83,I7)
|
||
102 FORMAT ('*')
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT REPORT FOOTING WHEN THE ACCOUNT CHANGES IN
|
||
C SYSTEM USAGE REPORT SORTED BY ACCOUNT
|
||
C **********
|
||
|
||
SUBROUTINE ACCTAS (LINENO,ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES,
|
||
1 CDATE,FDATE,LDATE,ZSYSNA,LACCOU,FSESCO,FSESRU,FPAGRU,FPAGPA,
|
||
2 FCRDRU,FCRDCR)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL ZCHARG,ZCONNE,ZRUNTI,FSESCO,FSESRU,FPAGRU,FPAGPA,FCRDRU
|
||
REAL FCRDCR
|
||
DIMENSION CDATE(3),FDATE(5),LDATE(5),ZSYSNA(39),LACCOU(39)
|
||
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,101)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,102) ZCHARG,ZCONNE,ZRUNTI,ZCARDS,ZPAGES
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,100)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,104) LACCOU
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,105)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,106) FSESCO,FSESRU
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,107) FCRDCR,FCRDRU
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL ACCTPH (CDATE,FDATE,LDATE,ZSYSNA,LACCOU,
|
||
1 LINENO)
|
||
WRITE (2,108) FPAGPA,FPAGRU
|
||
RETURN
|
||
|
||
100 FORMAT ('*')
|
||
101 FORMAT ('*',T41,'===========',T55,'=========',T65,'=========',
|
||
1 T75,'=======',T83,'=======')
|
||
102 FORMAT ('*','* * * Totals * * *',T41,'$',F10.2,T55,F8.2,T65,
|
||
1 F8.1,T75,I7,T83,I7)
|
||
103 FORMAT ('*','******************************')
|
||
104 FORMAT ('*','* End of Report for Account ',39A1)
|
||
105 FORMAT ('*','Rates:')
|
||
106 FORMAT ('*',T5,'Session Connect Time = $',F5.2,
|
||
1 '/Hour, Session Runtime',8X,'= $',F5.2,'/Second')
|
||
107 FORMAT ('*',T5,'Input Spooler Unit = $',F5.2,
|
||
1 '/Card, Input Spooler Runtime = $',F5.2,'/Second')
|
||
108 FORMAT ('*',T5,'Output Spooler Unit = $',F5.2,
|
||
1 '/Page, Output Spooler Runtime = $',F5.2,'/Second')
|
||
END
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PRODUCE A DISK USAGE REPORT SORTED BY DIRECTORY,
|
||
C ACCOUNT AND STRUCTURE - REPDNA
|
||
C ************************************************************************
|
||
SUBROUTINE REPDNA(OUTFIL,ZSYSNA,CDATE,FDATE,FDSKPA)
|
||
IMPLICIT INTEGER (A-Z)
|
||
DOUBLE PRECISION OUTFIL
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39)
|
||
DIMENSION STRNAM(6),ACCOUN(39)
|
||
DIMENSION LSTRNA(6),LACCOU(39)
|
||
REAL FDSKPA,FCHARG,XCHARG,YCHARG,ZCHARG
|
||
|
||
OPEN (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',ACCESS='SEQIN')
|
||
OPEN (FILE=OUTFIL,UNIT=2,DEVICE='DSK',ACCESS='SEQOUT')
|
||
|
||
C FIRST INITIALIZE ACCOUNT, DIRECTORY, AND STRUCTURE (ITEMS BEGINNING
|
||
C WITH L, E.G., LACCOU, LSTRNA, LDIREC). THESE ARE THE CONTROLS
|
||
C OF THE REPORT. WHEN THE DIRECTORY READ IN IS DIFFERENT FROM
|
||
C LDIREC, A REPORT FOOTING IS OUTPUT, A PAGE HEADER IS OUTPUT, ETC.
|
||
C ALSO INITIALIZE THE ACCUMULATORS FOR DISK PAGES, FILES, AND CHARGE.
|
||
C IF THE STRUCUTRE NAME JUST READ IN IS DIFFERENT, THE X* (E.G.,
|
||
C XCHARG, XPAGES, XFILES, ETC.) ARE OUTPUT AND ZEROED. WHEN
|
||
C THE ACCOUNT CHANGES, THE ITEMS BEGINNING WITH Y* WILL BE OUTPUT
|
||
C AND THE X* ITEMS AND Y* ITEMS ARE ZEROED. WHEN THE DIRECTORY
|
||
C CHANGES, THE ITEMS BEGINNING WITH Z* ARE OUTPUT AND ALL ITEMS
|
||
C (X*,Y*,Z*) WILL BE ZEROED.
|
||
|
||
READ (1,1000,END=500) PROJ,PROG,STRNAM,ACCOUN,PAGES,FILES,FCHARG
|
||
1 DO 2 I=1,39
|
||
2 LACCOU(I)=ACCOUN(I)
|
||
DO 12 I=1,6
|
||
12 LSTRNA(I)=STRNAM(I)
|
||
LPROJ=PROJ
|
||
LPROG=PROG
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=PAGES
|
||
XFILES=FILES
|
||
YFILES=FILES
|
||
ZFILES=FILES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=FCHARG
|
||
XRECRD=1
|
||
YRECRD=1
|
||
ZRECRD=1
|
||
CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,LPROG,LINENO)
|
||
3 READ (1,1000,END=500) PROJ,PROG,STRNAM,ACCOUN,PAGES,FILES,FCHARG
|
||
J=0
|
||
IF (PROJ.NE.LPROJ) J=J+1
|
||
IF (PROG.NE.LPROG) J=J+1
|
||
IF (J.EQ.0) GO TO 5
|
||
CALL DNAMRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
CALL DNAMAS (LINENO,YCHARG,YPAGES,YFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LPROJ,LPROG,YRECRD)
|
||
CALL DNAMDS (LINENO,ZCHARG,ZPAGES,ZFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LPROJ,LPROG,FDSKPA,ZRECRD)
|
||
GO TO 1
|
||
5 J=0
|
||
DO 6 I=1,39
|
||
6 IF (ACCOUN(I).NE.LACCOU(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 8
|
||
CALL DNAMRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
CALL DNAMAS (LINENO,YCHARG,YPAGES,YFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LPROJ,LPROG,YRECRD)
|
||
DO 7 I=1,39
|
||
7 LACCOU(I)=ACCOUN(I)
|
||
DO 13 I=1,6
|
||
13 LSTRNA(I)=STRNAM(I)
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XFILES=FILES
|
||
YFILES=FILES
|
||
ZFILES=ZFILES+FILES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
XRECRD=1
|
||
YRECRD=1
|
||
ZRECRD=ZRECRD+1
|
||
GO TO 3
|
||
8 J=0
|
||
DO 9 I=1,6
|
||
9 IF (STRNAM(I).NE.LSTRNA(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 11
|
||
CALL DNAMRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
DO 10 I=1,6
|
||
10 LSTRNA(I)=STRNAM(I)
|
||
XPAGES=PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XFILES=FILES
|
||
YFILES=YFILES+FILES
|
||
ZFILES=ZFILES+FILES
|
||
XCHARG=FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
XRECRD=1
|
||
YRECRD=YRECRD+1
|
||
ZRECRD=ZRECRD+1
|
||
GO TO 3
|
||
11 XPAGES=XPAGES+PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XFILES=XFILES+FILES
|
||
YFILES=YFILES+FILES
|
||
ZFILES=ZFILES+FILES
|
||
XCHARG=XCHARG+FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
XRECRD=XRECRD+1
|
||
YRECRD=YRECRD+1
|
||
ZRECRD=ZRECRD+1
|
||
GO TO 3
|
||
|
||
C **********
|
||
C HERE WHEN END OF FILE HAS BEEN READ IN SORT FILE. OUTPUT LAST REPORT
|
||
C AND FINISH UP
|
||
C *********
|
||
|
||
500 CALL DNAMRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
CALL DNAMAS (LINENO,YCHARG,YPAGES,YFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LPROJ,LPROG,YRECRD)
|
||
CALL DNAMDS (LINENO,ZCHARG,ZPAGES,ZFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LPROJ,LPROG,FDSKPA,ZRECRD)
|
||
CLOSE (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',DISPOSE='DELETE')
|
||
CLOSE (UNIT=2)
|
||
RETURN
|
||
|
||
C INPUT FORMAT STATEMENT
|
||
1000 FORMAT (2I6,6A1,39A1,I10,I5,F10.2)
|
||
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT THE PAGE HEADER FOR DISK USAGE REPORT
|
||
C SORTED BY DIRECTORY
|
||
C **********
|
||
SUBROUTINE DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,LPROG,LINENO)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39)
|
||
DIMENSION LETMON(12)
|
||
DATA (LETMON(I),I=1,12)/'-Jan-','-Feb-','-Mar-','-Apr-',
|
||
1 '-May-','-Jun-','-Jul-','-Aug-','-Sep-','-Oct-','-Nov-',
|
||
2 '-Dec-'/
|
||
|
||
WRITE (2,106)
|
||
LINENO=0
|
||
WRITE (2,100) CDATE,ZSYSNA
|
||
LINENO=LINENO+1
|
||
WRITE (2,101) LPROJ,LPROG
|
||
LINENO=LINENO+1
|
||
WRITE (2,102) FDATE(3),LETMON(FDATE(2)),FDATE(1),FDATE(4),FDATE(5)
|
||
LINENO=LINENO+1
|
||
WRITE (2,103)
|
||
LINENO=LINENO+2
|
||
WRITE (2,104)
|
||
LINENO=LINENO+1
|
||
WRITE (2,105)
|
||
LINENO=LINENO+2
|
||
RETURN
|
||
|
||
C OUTPUT FORMATS FOR THE PAGE HEADER
|
||
100 FORMAT ('*','Run Date: ',3A5,T47,39A1)
|
||
101 FORMAT ('*','[',I6,',',I6,']',T54,'TOPS10 Directory USAGE Report')
|
||
102 FORMAT ('*',T48,'USAGE Entries on: ',I2,A5,I4,1X,I2,':',I2)
|
||
103 FORMAT ('*',/'*',T45,'Total',T56,'Disk',T65,'Number',T74,
|
||
1 'Avg. No.',T84,'Structure')
|
||
104 FORMAT ('*',T15,'Account',T44,'Charge',T56,'Blocks',T64,
|
||
1 'of Files',T74,'of Blocks',T86,'Name')
|
||
105 FORMAT ('*',T15,'-------',T42,'-----------',T54,'---------',T64,
|
||
1 '---------',T74,'---------',T84,'---------'/'*')
|
||
106 FORMAT ('1')
|
||
|
||
END
|
||
|
||
C ********
|
||
C SUBROUTINE TO OUTPUT DETAIL LINE WHENEVER A STRUCTURE, ACCOUNT, OR
|
||
C DIRECTORY CHANGES IN DISK USAGE REPORT SORTED BY DIRECTORY
|
||
C **********
|
||
SUBROUTINE DNAMRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,
|
||
1 CDATE,FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL XCHARG,AVGPAG
|
||
DIMENSION LSTRNA(6),LACCOU(39),CDATE(3),FDATE(5)
|
||
DIMENSION ZSYSNA(39)
|
||
|
||
AVGPAG=FLOAT(XPAGES)/FLOAT(XRECRD)
|
||
WRITE (2,100) LACCOU,XCHARG,XPAGES,XFILES,AVGPAG,LSTRNA
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
XCHARG=0.
|
||
XPAGES=0
|
||
XFILES=0
|
||
XRECRD=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',39A1,T41,'$',F10.2,T54,I9,T64,I9,T75,F8.1,T84,6A1)
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT ACCOUNT SUBTOTAL FOOTING WHEN ACCOUNT OR
|
||
C DIRECTORY CHANGES IN DISK USAGE REPORT SORTED BY DIRECTORY
|
||
C **********
|
||
SUBROUTINE DNAMAS (LINENO,YCHARG,YPAGES,YFILES,
|
||
1 CDATE,FDATE,ZSYSNA,LPROJ,LPROG,YRECRD)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL YCHARG,AVGPAG
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39)
|
||
|
||
AVGPAG=FLOAT(YPAGES)/FLOAT(YRECRD)
|
||
WRITE (2,100)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,101) YCHARG,YPAGES,YFILES,AVGPAG
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
YCHARG=0.
|
||
YPAGES=0
|
||
YFILES=0
|
||
YRECRD=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',T41,'-----------',T54,'---------',T64,'---------',
|
||
1 T74,'---------')
|
||
101 FORMAT ('*','* * * Account Subtotal * * *',T41,'$',F10.2,T54,
|
||
1 I9,T64,I9,T75,F8.1)
|
||
102 FORMAT ('*')
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT REPORT FOOTING WHEN THE DIRECTORY CHANGES IN
|
||
C DISK USAGE REPORT SORTED BY DIRECTORY
|
||
C **********
|
||
|
||
SUBROUTINE DNAMDS (LINENO,ZCHARG,ZPAGES,ZFILES,
|
||
1 CDATE,FDATE,ZSYSNA,LPROJ,LPROG,FDSKPA,ZRECRD)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL ZCHARG,FDSKPA,AVGPAG
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39)
|
||
|
||
AVGPAG=FLOAT(ZPAGES)/FLOAT(ZRECRD)
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,101)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,102) ZCHARG,ZPAGES,ZFILES,AVGPAG
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,100)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,104) LPROJ,LPROG
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,105)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
WRITE (2,106) FDSKPA
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DNAMPH (CDATE,FDATE,ZSYSNA,LPROJ,
|
||
1 LPROG,LINENO)
|
||
RETURN
|
||
|
||
100 FORMAT ('*')
|
||
101 FORMAT ('*',T41,'===========',T54,'=========',T64,'=========',
|
||
1 T74,'=========')
|
||
102 FORMAT ('*','* * * Totals * * *',T41,'$',F10.2,T54,I9,T64,
|
||
1 I9,T75,F8.1)
|
||
103 FORMAT ('*','******************************')
|
||
104 FORMAT ('*','* End of Report for ','[',I6,',',I6,']')
|
||
105 FORMAT ('*','Rates:')
|
||
106 FORMAT ('*',T5,'Disk Usage = $',F5.2,'/Block')
|
||
END
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINES TO REPORT DISK USAGE BY DIRECTORY, ACCOUNT,
|
||
C AND STRUCTURE - REPDNA
|
||
C ************************************************************************
|
||
|
||
C ************************************************************************
|
||
C SUBROUTINE TO PRODUCE A DISK USAGE REPORT SORTED BY ACCOUNT,
|
||
C DIRECTORY AND STRUCTURE - REPDAC
|
||
C ************************************************************************
|
||
SUBROUTINE REPDAC(OUTFIL,ZSYSNA,CDATE,FDATE,FDSKPA)
|
||
IMPLICIT INTEGER (A-Z)
|
||
DOUBLE PRECISION OUTFIL
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39)
|
||
DIMENSION STRNAM(6),ACCOUN(39)
|
||
DIMENSION LSTRNA(6),LACCOU(39)
|
||
REAL FDSKPA,FCHARG,XCHARG,YCHARG,ZCHARG
|
||
|
||
OPEN (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',ACCESS='SEQIN')
|
||
OPEN (FILE=OUTFIL,UNIT=2,DEVICE='DSK',ACCESS='SEQOUT')
|
||
|
||
C FIRST INITIALIZE ACCOUNT, DIRECTORY, AND STRUCTURE (ITEMS BEGINNING
|
||
C WITH L, E.G., LACCOU, LSTRNA, LDIREC). THESE ARE THE CONTROLS
|
||
C OF THE REPORT. WHEN THE ACCOUNT READ IN IS DIFFERENT FROM
|
||
C LACCOU, A REPORT FOOTING IS OUTPUT, A PAGE HEADER IS OUTPUT, ETC.
|
||
C ALSO INITIALIZE THE ACCUMULATORS FOR DISK PAGES, FILES, AND CHARGE.
|
||
C IF THE STRUCUTRE NAME JUST READ IN IS DIFFERENT, THE X* (E.G.,
|
||
C XCHARG, XPAGES, XFILES, ETC.) ARE OUTPUT AND ZEROED. WHEN
|
||
C THE DIRECTORY CHANGES, THE ITEMS BEGINNING WITH Y* WILL BE OUTPUT
|
||
C AND THE X* ITEMS AND Y* ITEMS ARE ZEROED. WHEN THE ACCOUNT
|
||
C CHANGES, THE ITEMS BEGINNING WITH Z* ARE OUTPUT AND ALL ITEMS
|
||
C (X*,Y*,Z*) WILL BE ZEROED.
|
||
|
||
READ (1,1000,END=500) PROJ,PROG,STRNAM,ACCOUN,PAGES,FILES,FCHARG
|
||
1 DO 2 I=1,39
|
||
2 LACCOU(I)=ACCOUN(I)
|
||
DO 12 I=1,6
|
||
12 LSTRNA(I)=STRNAM(I)
|
||
LPROJ=PROJ
|
||
LPROG=PROG
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=PAGES
|
||
XFILES=FILES
|
||
YFILES=FILES
|
||
ZFILES=FILES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=FCHARG
|
||
XRECRD=1
|
||
YRECRD=1
|
||
ZRECRD=1
|
||
CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
3 READ (1,1000,END=500) PROJ,PROG,STRNAM,ACCOUN,PAGES,FILES,FCHARG
|
||
J=0
|
||
DO 4 I=1,39
|
||
4 IF (ACCOUN(I).NE.LACCOU(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 5
|
||
CALL DACTRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
CALL DACTDS (LINENO,YCHARG,YPAGES,YFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LACCOU,YRECRD)
|
||
CALL DACTAS (LINENO,ZCHARG,ZPAGES,ZFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LACCOU,FDSKPA,ZRECRD)
|
||
GO TO 1
|
||
5 J=0
|
||
IF (PROJ.NE.LPROJ) J=J+1
|
||
IF (PROG.NE.LPROG) J=J+1
|
||
IF (J.EQ.0) GO TO 8
|
||
CALL DACTRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
CALL DACTDS (LINENO,YCHARG,YPAGES,YFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LACCOU,YRECRD)
|
||
LPROJ=PROJ
|
||
LPROG=PROG
|
||
DO 13 I=1,6
|
||
13 LSTRNA(I)=STRNAM(I)
|
||
XPAGES=PAGES
|
||
YPAGES=PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XFILES=FILES
|
||
YFILES=FILES
|
||
ZFILES=ZFILES+FILES
|
||
XCHARG=FCHARG
|
||
YCHARG=FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
XRECRD=1
|
||
YRECRD=1
|
||
ZRECRD=ZRECRD+1
|
||
GO TO 3
|
||
8 J=0
|
||
DO 9 I=1,6
|
||
9 IF (STRNAM(I).NE.LSTRNA(I)) J=J+1
|
||
IF (J.EQ.0) GO TO 11
|
||
CALL DACTRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
DO 10 I=1,6
|
||
10 LSTRNA(I)=STRNAM(I)
|
||
XPAGES=PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XFILES=FILES
|
||
YFILES=YFILES+FILES
|
||
ZFILES=ZFILES+FILES
|
||
XCHARG=FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
XRECRD=1
|
||
YRECRD=YRECRD+1
|
||
ZRECRD=ZRECRD+1
|
||
GO TO 3
|
||
11 XPAGES=XPAGES+PAGES
|
||
YPAGES=YPAGES+PAGES
|
||
ZPAGES=ZPAGES+PAGES
|
||
XFILES=XFILES+FILES
|
||
YFILES=YFILES+FILES
|
||
ZFILES=ZFILES+FILES
|
||
XCHARG=XCHARG+FCHARG
|
||
YCHARG=YCHARG+FCHARG
|
||
ZCHARG=ZCHARG+FCHARG
|
||
XRECRD=XRECRD+1
|
||
YRECRD=YRECRD+1
|
||
ZRECRD=ZRECRD+1
|
||
GO TO 3
|
||
|
||
C **********
|
||
C HERE WHEN END OF FILE HAS BEEN READ IN SORT FILE. OUTPUT LAST REPORT
|
||
C AND FINISH UP
|
||
C *********
|
||
|
||
500 CALL DACTRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,CDATE,
|
||
1 FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
CALL DACTDS (LINENO,YCHARG,YPAGES,YFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LACCOU,YRECRD)
|
||
CALL DACTAS (LINENO,ZCHARG,ZPAGES,ZFILES,CDATE,FDATE,ZSYSNA,
|
||
1 LACCOU,FDSKPA,ZRECRD)
|
||
CLOSE (FILE='OUTSRT.TMP',UNIT=1,DEVICE='DSK',DISPOSE='DELETE')
|
||
CLOSE (UNIT=2)
|
||
RETURN
|
||
|
||
C INPUT FORMAT STATEMENT
|
||
1000 FORMAT (2I6,6A1,39A1,I10,I5,F10.2)
|
||
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT THE PAGE HEADER FOR DISK USAGE REPORT
|
||
C SORTED BY ACCOUNT
|
||
C **********
|
||
SUBROUTINE DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39),LACCOU(39)
|
||
DIMENSION LETMON(12)
|
||
DATA (LETMON(I),I=1,12)/'-Jan-','-Feb-','-Mar-','-Apr-',
|
||
1 '-May-','-Jun-','-Jul-','-Aug-','-Sep-','-Oct-','-Nov-',
|
||
2 '-Dec-'/
|
||
|
||
WRITE (2,106)
|
||
LINENO=0
|
||
WRITE (2,100) CDATE,ZSYSNA
|
||
LINENO=LINENO+1
|
||
WRITE (2,101) LACCOU
|
||
LINENO=LINENO+1
|
||
WRITE (2,102) FDATE(3),LETMON(FDATE(2)),FDATE(1),FDATE(4),FDATE(5)
|
||
LINENO=LINENO+1
|
||
WRITE (2,103)
|
||
LINENO=LINENO+2
|
||
WRITE (2,104)
|
||
LINENO=LINENO+1
|
||
WRITE (2,105)
|
||
LINENO=LINENO+2
|
||
RETURN
|
||
|
||
C OUTPUT FORMATS FOR THE PAGE HEADER
|
||
100 FORMAT ('*','Run Date: ',3A5,T47,39A1)
|
||
101 FORMAT ('*','Account ',39A1,T54,'TOPS10 Directory USAGE Report')
|
||
102 FORMAT ('*',T48,'USAGE Entries on: ',I2,A5,I4,1X,I2,':',I2)
|
||
103 FORMAT ('*',/'*',T45,'Total',T56,'Disk',T65,'Number',T74,
|
||
1 'Avg. No.',T84,'Structure')
|
||
104 FORMAT ('*',T14,'Directory',T44,'Charge',T56,'Blocks',T64,
|
||
1 'of Files',T74,'of Blocks',T86,'Name')
|
||
105 FORMAT ('*',T14,'---------',T42,'-----------',T54,'---------',T64,
|
||
1 '---------',T74,'---------',T84,'---------'/'*')
|
||
106 FORMAT ('1')
|
||
|
||
END
|
||
|
||
C ********
|
||
C SUBROUTINE TO OUTPUT DETAIL LINE WHENEVER A STRUCTURE, ACCOUNT, OR
|
||
C DIRECTORY CHANGES IN DISK USAGE REPORT SORTED BY ACCOUNT
|
||
C **********
|
||
SUBROUTINE DACTRS (LINENO,LSTRNA,LACCOU,XCHARG,XFILES,XPAGES,
|
||
1 CDATE,FDATE,ZSYSNA,LPROJ,LPROG,XRECRD)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL XCHARG,AVGPAG
|
||
DIMENSION LSTRNA(6),LACCOU(39),CDATE(3),FDATE(5)
|
||
DIMENSION ZSYSNA(39)
|
||
|
||
AVGPAG=FLOAT(XPAGES)/FLOAT(XRECRD)
|
||
WRITE (2,100) LPROJ,LPROG,XCHARG,XPAGES,XFILES,AVGPAG,LSTRNA
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
XCHARG=0.
|
||
XPAGES=0
|
||
XFILES=0
|
||
XRECRD=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*','[',I6,',',I6,']',T41,'$',F10.2,T54,I9,T64,
|
||
1 I9,T75,F8.1,T84,6A1)
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT DIRECTORY SUBTOTAL FOOTING WHEN ACCOUNT OR
|
||
C DIRECTORY CHANGES IN DISK USAGE REPORT SORTED BY ACCOUNT
|
||
C **********
|
||
SUBROUTINE DACTDS (LINENO,YCHARG,YPAGES,YFILES,
|
||
1 CDATE,FDATE,ZSYSNA,LACCOU,YRECRD)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL YCHARG,AVGPAG
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39),LACCOU(39)
|
||
|
||
AVGPAG=FLOAT(YPAGES)/FLOAT(YRECRD)
|
||
WRITE (2,100)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,101) YCHARG,YPAGES,YFILES,AVGPAG
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,102)
|
||
LINENO = LINENO + 1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
YCHARG=0.
|
||
YPAGES=0
|
||
YFILES=0
|
||
YRECRD=0
|
||
RETURN
|
||
|
||
100 FORMAT ('*',T41,'-----------',T54,'---------',T64,'---------',
|
||
1 T74,'---------')
|
||
101 FORMAT ('*','* * * Directory Subtotal * * *',T41,'$',F10.2,T54,
|
||
1 I9,T64,I9,T75,F8.1)
|
||
102 FORMAT ('*')
|
||
END
|
||
|
||
C **********
|
||
C SUBROUTINE TO OUTPUT REPORT FOOTING WHEN THE ACCOUNT CHANGES IN
|
||
C DISK USAGE REPORT SORTED BY ACCOUNT
|
||
C **********
|
||
|
||
SUBROUTINE DACTAS (LINENO,ZCHARG,ZPAGES,ZFILES,
|
||
1 CDATE,FDATE,ZSYSNA,LACCOU,FDSKPA,ZRECRD)
|
||
|
||
IMPLICIT INTEGER (A-Z)
|
||
REAL ZCHARG,FDSKPA,AVGPAG
|
||
DIMENSION CDATE(3),FDATE(5),ZSYSNA(39),LACCOU(39)
|
||
|
||
AVGPAG=FLOAT(ZPAGES)/FLOAT(ZRECRD)
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,101)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,102) ZCHARG,ZPAGES,ZFILES,AVGPAG
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,100)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,104) LACCOU
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,103)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,105)
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
WRITE (2,106) FDSKPA
|
||
LINENO=LINENO+1
|
||
IF (LINENO.EQ.58) CALL DACTPH (CDATE,FDATE,ZSYSNA,LACCOU,LINENO)
|
||
RETURN
|
||
|
||
100 FORMAT ('*')
|
||
101 FORMAT ('*',T41,'===========',T54,'=========',T64,'=========',
|
||
1 T74,'=========')
|
||
102 FORMAT ('*','* * * Totals * * *',T41,'$',F10.2,T54,I9,T64,
|
||
1 I9,T75,F8.1)
|
||
103 FORMAT ('*','******************************')
|
||
104 FORMAT ('*','* End of Report for Account ',39A1)
|
||
105 FORMAT ('*','Rates:')
|
||
106 FORMAT ('*',T5,'Disk Usage = $',F5.2,'/Block')
|
||
END
|
||
|
||
C ************************************************************************
|
||
C END OF SUBROUTINES TO REPORT DISK USAGE BY ACCOUNT, DIRECTORY,
|
||
C AND STRUCTURE - REPDAC
|
||
C ************************************************************************
|