C REP C C A PROGRAM TO GIVE A REPORT OF THE TIME WORKED FOR EACH EMPLOYEE C INTEGER TIME(10,6), HRS, MINS, MO, DA, YR, PAGE, MO2, DA2, YR2 INTEGER TERM ! = 0 IF THIS CRT, 1 IF PRINTER: INTEGER PWANT ! IF > 0, NO. OF PERSON DESIRED FOR REPORT INTEGER PAYNO ! PAY PERIOD NUMBER INTEGER PPER1 ! 1ST DAY OF PAY PERIOD INTEGER STATUS ! CURRENT STATUS INTEGER PERSON ! PERSON NUMBER LOOKING AT NOW (1 - 56) INTEGER ID ! IDENTIFICATION NUMBER FOR PERSON INTEGER PAY ! = 0 IF CURRENT, 1 IF LAST INTEGER WOTIME(10,3),EXCESS,REC INTEGER TTIME(5) ! TOTAL TIME INTEGER POS ! FUNCTION TO LOOK FOR MATCH BYTE NULL, BCON(5), BCON2(5), BDAYS(2) BYTE BINFO(160), BUF(80), NAME(20), ALL(4) INTEGER INFO(80) ! SAME AS ABOVE ONLY AS INTEGERS BYTE BVAC(2),TYPE, LUN BYTE LCODE(9) ! LIST OF CODES A, S, OR T FOR ANN LV, ETC LOGICAL*4 LNAME(9) EQUIVALENCE (BINFO(1),INFO(1)), (BINFO,BUF) DATA LCODE/' ',' ','T','A','S','H','L','B',' '/ DATA LNAME/'ERR2','ERR1','NONE','WORK','TRAV','A LV','S LV' 1,'LWOP','SNOW'/ DATA ALL/'A','L','L',0/ OPEN (UNIT=1, NAME='[100,10]CHECK.DAT;1', ACCESS='DIRECT' 1, RECORDSIZE=40, TYPE='OLD', SHARED) NULL = 0 PWANT=5 ! ASSUME WE WANT ONE PERSON 20 FORMAT(20A1) CALL GETMCR(BUF,I) IF(I.LT.5)GO TO 29 CALL SCOPY(BUF, NAME, I-4, 5)! MOVE NO. OF CHAR PICKED UP - 4 CALL TRIM(NAME,20) ! GETS RID OF CARRIAGE RETURN C PROBABLY COULD HAVE DONE THIS ANOTHER WAY USING I-5, NOT I-4 IF(POS(NAME,ALL,1,20,3) .NE. 1) GO TO 39 ! DON'T WANT ALL PEOPLE PWANT=0 ! DO WANT ALL PEOPLE TERM=1 GO TO 39 29 WRITE(5,30) 30 FORMAT('$HIT ENTER FOR CURRENT PAY PERIOD, 1 FOR LAST ONE, 1 2 FOR 2ND PREV, ETC ') READ(5,10) PAY IF(PAY.GT.3) PAY=3 ! MAX PREV PAY PERIOD IS 3 WRITE(5,35) 35 FORMAT('$HIT ENTER FOR THIS CRT, 1 FOR PRINTER ') READ(5,10)TERM 10 FORMAT(I7) CALL LOA(NAME,20,0) ! CLEAR THE ARRAY: NAME WRITE(5,37) 37 FORMAT('$ENTER NAME OR ALL: ') READ(5,20)NAME CALL TRIM(NAME,20) IF(POS(NAME,ALL,1,20,3).GT.0) PWANT=0 ! WANT ALL PEOPLE IF(LEN(NAME).LE.1) GO TO 400 39 IF(TERM.GT.0)CALL ASSIGN(2,'[200,2]CHECK.DMP') ! WRITE TO PRINTER IF(TERM.GT.0)CALL CSIZE(2,3,6) ! SET PRINTER TO SIZE 3, MAR 6 IF(TERM.LE.0)CALL ASNLUN(2,'TI',0) ! WRITE TO TERMINAL DO 200 PERSON=1,56 READ(1'1)BINFO ! PICK UP ID CODES IF (BINFO(PERSON) .LE. 0) GO TO 200 ! THIS PERSON BEEN DELETED PPER1=INFO(48)-14*PAY ! BEGINNING DAY OF PAY PERIOD PAYNO=INFO(47)-PAY ! PAY PERIOD NUMBER ID=BINFO(PERSON) READ(1'PERSON+2) BINFO !READ PERSON'S INFO RECORD IF(PWANT. EQ. 0)GO TO 43 ! WE WANT ALL NAMES J=POS(BINFO,NAME,15,30,LEN(NAME))! DOES THIS MATCH NAME SUBMITTED IF((J .LE. 0).OR.(J.GE.26))GO TO 200 ! WANT ONLY 1, THIS NOT HE LUN=INFO(7) ! MINUTES IN LUNCH PERIOD WRITE(5,42)LUN 42 FORMAT(' LENGTH OF LUNCH PERIOD',I5) 43 WRITE(2,44) (BINFO(K), K=15,44),ID ! WRITE PERSON'S NAME 44 FORMAT(28X,30A1,T65,I3) REC=PERSON*4+55+PAY ! POSITION OF PERSON'S TIME REC ON FILE C ! TAKING PAY PERIOD NO. INTO CONSIDERATION READ(1'REC) BINFO ! READ TIME CARD REC STATUS=BINFO(145) ! GET THE STATUS CALL DATODA(MO, DA, YR, PPER1, 3) ! BEGINNING OF PAY PERIOD I=PPER1 + 12 ! CALCULATE END OF PAY PERIOD CALL DATODA(MO2, DA2, YR2, I, 3) ! END OF PAY PER AS MO DA YR WRITE(2,46) PAYNO,MO,DA,YR,MO2,DA2,YR2, LNAME(STATUS+3) 46 FORMAT(8X,'PAY PERIOD # ', I2,5X,I2,'-',I2,'-',I2,' TO ', 1I2,'-',I2,'-',I2,' STATUS ',A4,/) WRITE(2,47) 47 FORMAT(' M T W TH F M T 1 W TH F ',/) READ(1'REC) BINFO ! READ TIME CARD REC DO 60 I=1,10 DO 50 J=1,6 TIME(I,J)=INFO(6*I+J-4) IF(TIME(I,J).LE.390) TIME(I,J)=0 ! IF TIME IS BEFORE 6:30 50 CONTINUE ! ...CHANGE IT TO 0 C C CALCULATE HOURS OF WORK AND VACATION C C CONVERTS ALL THE PERSONS TIMES TO INTEGERS AND STORES THEM IN C TIME(10,5) WHERE THE FIRST SUBSCRIPT IS THE DAY AND THE SECOND C IS THE TIME. 1 - TIME IN 2 - TIME OUT 3 - VACATION OR TRAVEL C IN 4 - VACATION OR TRAVEL OUT 5 - TYPE OF VACATION. 60 CONTINUE DO 75 K=1,10 DO 65 J=1,3 ! J=1 IS REG TIME, J=2 IS LV TIME WOTIME(K,J)=TIME(K,J*2)-TIME(K,J*2-1) ! GET REG OR LV TIME IF((TIME(K,J*2-1).LT.750).AND.(TIME(K,J*2).GT.750)) 1 WOTIME(K,J)=WOTIME(K,J)-LUN ! SUBTRACT HOUR FOR NOON BREAK IF (WOTIME(K,J) .LT. 0) WOTIME(K,J)=0.0 ! MIN TIME IS 0 IF (TIME(K,J*2-1).LT.300) WOTIME(K,J)=0 ! FAILED TO CHECK IN C WOTIME(K,1) IS THE TOTAL TIME WORKED ON DAY K C WOTIME(K,2) IS THE TOTAL VACTATION TIME TAKEN ON DAY K 65 CONTINUE DO 73 I=3,5,2 IF((TIME(K,1).LE.TIME(K,I)).AND.(TIME(K,2).GE.TIME(K,I+1))) 1WOTIME(K,1)=WOTIME(K,1)-WOTIME(K,I/2+1) C IF((TIME(K,1).LT.TIME(K,5)).AND.(TIME(K,2).GT.TIME(K,6))) C 1WOTIME(K,1)=WOTIME(K,1)-WOTIME(K,3) C IF GET HERE, THERE IS VACATION TIME THAT COMES IN THE MIDDLE OF WORK TIME EXCESS=WOTIME(K,1)+WOTIME(K,2)+WOTIME(K,3)-480 ! AMT IN EXCESS OF 8 HR C IF(((TIME(K,I+1).GT.TIME(K,1)).AND.(TIME(K,I).LT.TIME(K,1))).OR. 1((TIME(K,I+1).GT.TIME(K,2)).AND.(TIME(K,I).LT.TIME(K,2)))) 2WRITE(2,71)K C 71 FORMAT(' ERROR IN LEAVE TIME FOR DAY',I4,' IN THE PAY PERIOD',/) 73 CONTINUE DO 66 I=3,2,-1 IF(EXCESS.LE.0)GO TO 68 WOTIME(K,I)=WOTIME(K,I)-EXCESS EXCESS=-(WOTIME(K,I)) IF(WOTIME(K,I).LT.0)WOTIME(K,I)=0 66 CONTINUE 68 IF (WOTIME(K,1) .GT. 480) WOTIME(K,1)=480! MAX TIME IS 8 HRS. IF (WOTIME(K,2) .GT. 480) WOTIME(K,2)=480! SAME FOR LV TIME 75 CONTINUE C C DO THE ACTUAL WRITING C DO 90 J=1,11 K=J IF(J.GE.5)K=J-2 IF(J.GE.9)K=J-4 DO 85 I=1,10 GO TO (76,76,80,83,76,76,80,83,76,76,80)J 76 HRS=TIME(I,K)/60 ! CALCULATE HOURS MINS=TIME(I,K)-60*HRS! CALCULATE MINUTES CALL NOSUP(MINS, BCON) ! MAKES MINS TO DIGITS (IE 6 IS 06) CALL NOSUP(HRS, BCON2) ! SAME FOR HOURS WRITE(2,78) NULL, BCON2(4), BCON2(5), BCON(4), BCON(5) 78 FORMAT(A1,2A1,':',2A1,2X) C DOING TOTAL HOURS GO TO 85 ! FINISHED LINE 1,2,4,5 80 K=J/3 ! DOING LINES 3,7, AND 11 X=WOTIME(I,K)/60. WRITE(2,82)NULL,X 82 FORMAT(A1,F5.2,2X) GO TO 85 C C WRITE THE SYMBOL FOR TYPE OF LEAVE C 83 K=J/4 ! DOING LINES 4 AND 8 L=BINFO(122+I*2+K) TYPE=LCODE(BINFO(122+I*2+K)+1) WRITE(2,84)NULL,TYPE 84 FORMAT(A1,3X,A1,3X) 85 CONTINUE C C FINNISHED WITH THIS LINE. DO SOME WORK BETWEEN LINES C WRITE(2,87) ! FINISHED THIS LINE 87 FORMAT(' ') ! ADVANCE TO NEXT LINE IF(J.EQ.7)WRITE(2,87) ! EXTRA LINE SPACE IF(J.EQ.3)WRITE(2,87) 90 CONTINUE C C FINISHED WITH FIRST 6 LINES OF REPORT C CALCULATE TOTAL WORK HOURS, ANN LV, AND SICK LV C CALL LOAINT(TTIME,5,0) ! INITIALIZE TOT TIME TO 0 DO 100 I=1,10 TTIME(1)=TTIME(1)+WOTIME(I,1) ! CUMULATE TOT REG TIME DO 95 K=1,2 J=BINFO(122+I*2+K) ! TYPE OF LEAVE IF(J.GT.0)TTIME(J)=TTIME(J)+WOTIME(I,1+K) ! CUMULATE TOT VAC TIME 95 CONTINUE 100 CONTINUE IF(INFO(76) .LE. PPER1) GO TO 175 ! NO FUTURE LEAVE SCHEDULED C C CALCULATE FUTURE LEAVE FOR THIS PERSON C CALL DATODA (MO, DA, YR, INFO(76), 3) WRITE(2,120) LNAME(INFO(78)+3), MO, DA, YR, MTIME(INFO(77)) 120 FORMAT(' BEG DAY AND TIME FOR SCHEDULED LEAVE: ',A4, I4, 2I3 1, I6) 175 WRITE(2,180)TTIME(1)/60.,(TTIME(K)/60.,K=3,4) 180 FORMAT(' TOTALS: REG TIME',F6.2,' ANN LEAVE',F6.2, 1' SICK LEAVE',F6.2,//) PAGE=PAGE+1 IF (PAGE .LT. 2)GO TO 200 WRITE(2,190) 190 FORMAT('1') PAGE=0 200 CONTINUE CALL SPOOL(2) 400 CLOSE(UNIT=1) CALL EXIT END