home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.update.uu.se
/
ftp.update.uu.se.2014.03.zip
/
ftp.update.uu.se
/
pub
/
rainbow
/
msdos
/
decus
/
RB117
/
vehic4.for
< prev
next >
Wrap
Text File
|
1995-05-28
|
10KB
|
353 lines
C
C VEHICLE MAINTENANCE PRGM by Bruce W. Roeckel
C *--------------------------*
C OPTION #4 - REPORTS
C
C
$STORAGE:2
C
C
SUBROUTINE REPORT
C
C GENERATE ALL VEHICLE REPORTS
C
IMPLICIT INTEGER (A-Z)
C
COMMON /REVNO/ PGM,AUTHOR,YEAR,DATE2,REV
CHARACTER PGM*21,AUTHOR*21,YEAR*4,DATE2*8,REV*2
C
COMMON/MONTHS/ IMON
CHARACTER*4 IMON(13)
C
COMMON/MAIN1/ NAME,IDNUM,DATE,RFILE,MFILE
CHARACTER NAME(25)*20,IDNUM(25)*20,DATE(2,25)*8
CHARACTER RFILE(25)*11,MFILE(25)*11
C
COMMON/MAIN2/ COST,ODOM,VNUM
INTEGER VNUM
REAL COST(2,25),ODOM(2,25)
C
COMMON/REPAR1/ RDESC,RDATE
CHARACTER RDESC(500)*25,RDATE(500)*8
C
COMMON/REPAR2/ RCODE,RCOST,RODOM,RNUM
INTEGER RCODE(500),RNUM
REAL RCOST(500),RODOM(500)
C
COMMON/MILE1/ MDESC,MDATE
CHARACTER MDESC(500)*25,MDATE(500)*8
C
COMMON/MILE2/ MCODE,MCOST,MODOM,MNUM
INTEGER MCODE(500),MNUM
REAL MCOST(500),MODOM(500)
C
REAL MSINCE,TMPG,TTLCST,MAX,AVE,LOIL,MPG,GNDAVE,GNDTTL
REAL TPLOT(34),TTL1,TTL2,AVE1,AVE2
CHARACTER OPTION*25,DESCR(9)*25
CHARACTER SUBT1*8,SUBT2*8,TITLE*40
CHARACTER ICODE*1,RAMDSK*80,KIND*6
C
DESCR(1) = 'Oil Change w/ Filter '
DESCR(2) = 'Lubricated Front End '
DESCR(3) = 'Replaced Air Filter '
DESCR(4) = 'Replaced Distibutor Pnts '
DESCR(5) = 'New Spark Plugs '
DESCR(6) = 'Front End Alignment '
DESCR(7) = 'Replaced Front Brakes '
DESCR(8) = 'Replaced Rear Brakes '
DESCR(9) = 'Rotated Tires '
C
C LIST ALL CARS, SELECT ONE TO WORK WITH
C
TYPE=0
OPTION='Vehicle Reports & Graphs '
CALL HEADER(OPTION)
CALL LISTEM(TYPE,SEL)
IF(SEL.EQ.0) GOTO 9900
CALL RDREPS(SEL)
CALL RDMILE(SEL)
C
C CALCULATE MILES SINCE OIL CHANGE
C
DO 10 I=1,RNUM
IF(RCODE(I).EQ.1) THEN
LOIL = MODOM(MNUM) - RODOM(I)
GOTO 50
ENDIF
10 CONTINUE
C
C DISPLAY MENU
C
50 CONTINUE
CALL HEADER(OPTION)
CALL DNAME(SEL)
WRITE(*,100) LOIL
100 FORMAT(//,22X,F7.2,' Miles Since Last Oil Change',
A //,21X,'1. Maintenance & Repair Summary Report',
B /,21X,'2. City & Trip MPG Summary Report ',
C /,21X,'3. Graph *Trip* Miles per Gallon Data ',
D /,21X,'4. Graph *City* Miles per Gallon Data ')
125 CONTINUE
CALL BOLD
CALL MOVEIT(1,23)
WRITE(*,'(5X,A37,\)') ' Enter Choice (H=Help, Q=Quit) : '
READ(*,'(A1)',ERR=125) ICODE
CALL OFF
C
C BRANCH ON REQUEST
C
IF(ICODE.EQ.'Q' .OR. ICODE.EQ.'q') THEN
C
GOTO 9900
C
ELSEIF(ICODE.EQ.'H' .OR. ICODE.EQ.'h') THEN
C
ICODE='4'
IUNIT=15
CALL HELP(ICODE,IUNIT)
GOTO 50
C
ELSEIF(ICODE.EQ.'1' .OR. ICODE.EQ.'2' .OR.
A ICODE.EQ.'3' .OR. ICODE.EQ.'4') THEN
C
WRITE(RAMDSK,'(A1)') ICODE
READ(RAMDSK,'(I1)') KCODE
CALL POINT(KCODE)
C
ELSE
C
CALL BELL
GOTO 125
C
ENDIF
C
C ======================= START OF REPORTS ==========================
C
IF(KCODE.EQ.1 .AND. RNUM.GT.0) THEN
C
UNIT=3
OPEN(UNIT,FILE='OUTPUT.TMP',STATUS='NEW')
CALL MOVEIT(1,23)
CALL BOLD
CALL BLINK
WRITE(*,'(5X,A33,\)') 'Please Wait ... Generating Report'
CALL OFF
LINE=0
PAGE=0
TTLCST=0.0
DO 300 I=1,RNUM
IF(LINE.LE.0) THEN
CALL PHEAD(PAGE,UNIT,PGM,DATE2,YEAR,REV)
WRITE(UNIT,'(//,18X,2A20)') ' Repair Log for : ',NAME(SEL)
WRITE(UNIT,150)
150 FORMAT(/,5X,' ',
A ' Odometer Miles Since',
B /,5X,' Description of Repair Dated ',
C ' Cost$ Reading Repair ',
D /,5X,'------------------------- --------',
E ' --------- --------- ---------')
LINE=40
ENDIF
LINE=LINE-1
IF(MNUM.GT.0) MSINCE=MODOM(MNUM)-RODOM(I)
IF(RCODE(I).EQ.98) THEN
WRITE(UNIT,200) RDESC(I),RDATE(I),RCOST(I),
A RODOM(I),MSINCE
200 FORMAT(5X,A25,2X,A8,2X,F9.2,2X,F9.1,2X,F9.1)
ELSE
WRITE(UNIT,250) DESCR(RCODE(I)),RDATE(I),RCOST(I),
A RODOM(I),MSINCE
250 FORMAT(3X,'* ',A25,2X,A8,2X,F9.2,2X,F9.1,2X,F9.1)
IF(RDESC(I).NE.' ') THEN
WRITE(UNIT,275) RDESC(I)
275 FORMAT(5X,' Note: ',A25)
ENDIF
ENDIF
TTLCST=TTLCST + RCOST(I)
300 CONTINUE
WRITE(UNIT,'(42X,A9,/,42X,A1,F8.2)') '=========','$',TTLCST
WRITE(UNIT,325)
325 FORMAT(///,5X,'NOTE: "*" Indicates Recurring ',
A 'Maintenance Items')
CALL SHOWIT(UNIT)
CLOSE(UNIT,STATUS='DELETE')
C
ELSEIF(KCODE.EQ.2 .AND. MNUM.GT.0) THEN
C
UNIT=3
OPEN(UNIT,FILE='OUTPUT.TMP',STATUS='NEW')
CALL MOVEIT(1,23)
CALL BOLD
CALL BLINK
WRITE(*,'(5X,A33,\)') 'Please Wait ... Generating Report'
CALL OFF
LINE=0
PAGE=0
GNDTTL=0.0
TTL1=0.0
TTL2=0.0
INUM1=0
INUM2=0
DO 500 I=2,MNUM
IF(LINE.LE.0) THEN
CALL PHEAD(PAGE,UNIT,PGM,DATE2,YEAR,REV)
WRITE(UNIT,'(//,18X,2A20)') ' Mileage Data for : ',NAME(SEL)
WRITE(UNIT,350)
350 FORMAT(
A /,3X,' Odometer City Trip ',
B /,3X,' Date Gallons Reading MPG MPG ',
C ' Description of Trip ',
D /,3X,'-------- --------- --------- ----- -----',
E ' -------------------------')
LINE=40
ENDIF
LINE=LINE-1
MPG = (MODOM(I)-MODOM(I-1)) / MCOST(I)
GNDTTL = GNDTTL + MPG
IF(MCODE(I).EQ.1) THEN
TTL1=TTL1 + MPG
INUM1 = INUM1 + 1
WRITE(UNIT,400) MDATE(I),MCOST(I),
A MODOM(I),MPG,MDESC(I)
400 FORMAT(3X,A8,2X,F9.2,2X,F9.1,9X,F5.1,2X,A25)
ELSE
TTL2=TTL2 + MPG
INUM2 = INUM2 + 1
WRITE(UNIT,450) MDATE(I),MCOST(I),
A MODOM(I),MPG
450 FORMAT(3X,A8,2X,F9.2,2X,F9.1,2X,F5.1)
ENDIF
500 CONTINUE
IF(INUM1.GT.0) AVE1 = TTL1 / REAL(INUM1)
IF(INUM2.GT.0) AVE2 = TTL2 / REAL(INUM2)
IF((INUM1.GT.0) .OR. (INUM2.GT.0)) THEN
GNDAVE = GNDTTL / (REAL(INUM1) + REAL(INUM2))
ENDIF
WRITE(UNIT,550) AVE2,AVE1,GNDAVE
550 FORMAT(35X,'===== =====',
A /, 9X,'Trip / City Average MPG : ',F5.1,2X,F5.1,
B //, 9X,' TOTAL Average MPG : ',F5.1)
CALL SHOWIT(UNIT)
CLOSE(UNIT,STATUS='DELETE')
C
ELSEIF(KCODE.EQ.3 .AND. MNUM.GT.0) THEN
C
CALL MOVEIT(1,23)
CALL BOLD
CALL BLINK
WRITE(*,'(5X,A17,\)') 'Please Wait .... '
CALL OFF
C
C MOVE DATA INTO TEMPORARY ARRAY
C
IFRST=0
ILST=0
K=0
DO 600 I=MNUM,2,-1
IF(MCODE(I).EQ.1) THEN
K=K+1
IF(K.GT.34) THEN
K=34
GOTO 650
ENDIF
IF(ILST.EQ.0) ILST=I
IFRST=I
TPLOT(K)=(MODOM(I)-MODOM(I-1))/MCOST(I)
ENDIF
600 CONTINUE
650 CONTINUE
C
C NOW LOAD FILE WITH DATA
C
IUNIT=2
OPEN(IUNIT,FILE='PLOT.TMP',STATUS='NEW')
C
DO 750 I=K,1,-1
WRITE(IUNIT,700) TPLOT(I)
700 FORMAT(12X,F12.2)
750 CONTINUE
ENDFILE IUNIT
C
C DISPLAY THE GRAPH ...........
C
IF((IFRST.LE.0).AND.(ILST.LE.0)) GOTO 50
TLEN=40
TATTR=2
SUBT1=' '
SUBT2='Trip MPG'
WRITE(TITLE,850) NAME(SEL),MDATE(IFRST),MDATE(ILST)
850 FORMAT(A20,1X,A8,' - ',A8)
CALL MOVEIT(1,5)
CALL PLTSCR(IUNIT,TITLE,TLEN,TATTR,SUBT1,SUBT2)
CLOSE(IUNIT,STATUS='DELETE')
READ(*,'(A1)') ICODE
C
ELSEIF(KCODE.EQ.4 .AND. MNUM.GT.0) THEN
C
CALL MOVEIT(1,23)
CALL BOLD
WRITE(*,'(5X,A17,\)') 'Please Wait .... '
CALL OFF
C
C MOVE DATA INTO TEMPORARY ARRAY
C
IFRST=0
ILST=0
K=0
DO 1600 I=MNUM,2,-1
IF(MCODE(I).EQ.2) THEN
K=K+1
IF(K.GT.34) THEN
K=34
GOTO 1650
ENDIF
IF(ILST.EQ.0) ILST=I
IFRST=I
TPLOT(K)=(MODOM(I)-MODOM(I-1))/MCOST(I)
ENDIF
1600 CONTINUE
1650 CONTINUE
C
C NOW LOAD FILE WITH DATA
C
IUNIT=2
OPEN(IUNIT,FILE='PLOT.TMP',STATUS='NEW')
DO 1750 I=K,1,-1
WRITE(IUNIT,700) TPLOT(I)
1750 CONTINUE
ENDFILE IUNIT
C
C DISPLAY THE GRAPH ...........
C
IF((IFRST.LE.0).AND.(ILST.LE.0)) GOTO 50
TLEN=40
TATTR=2
SUBT1=' '
SUBT2='City MPG'
WRITE(TITLE,850) NAME(SEL),MDATE(IFRST),MDATE(ILST)
CALL MOVEIT(1,5)
CALL PLTSCR(IUNIT,TITLE,TLEN,TATTR,SUBT1,SUBT2)
CLOSE(IUNIT,STATUS='DELETE')
READ(*,'(A1)') ICODE
C
ENDIF
GOTO 50
9900 CONTINUE
RETURN
END
C
C
C
SUBROUTINE POINT(KCODE)
C
IH=17
IV=13+KCODE
CALL UPTOP(IH,IV)
CALL BOLD
CALL BLINK
WRITE(*,'(A3)') '==>'
CALL OFF
RETURN
END