C C DIMENSION IDIGIT(260) INTEGER HOUR C C SPEED FACTORS C C IFACT - FIVE SECOND INTERVAL C IFACT2 - ONE DIGIT DISPLAY INTERVAL C C C THIS PROGRAM ALSO REQUIRES THE FILE 'DIGIT'. C IFACT = 2014 IFACT2 = 334 FIRST = 0 CALL PLOT CALL OPEN(6,'DIGIT') READ(6,1000)(IDIGIT(I),I=1,260) CALL CLOSE(6) C C SET THE STARTING TIME C 3 WRITE (1,1001) WRITE (1,1002) READ(0,*)HOUR IF ( HOUR .EQ. 12 .OR. HOUR .EQ. 24 ) GO TO 4 GO TO 3 4 WRITE (1,1003) HOUR IF ( HOUR .EQ. 24 ) HOUR = 23 WRITE (1,1004) READ(0,*)IHR,IMN,ISC IF ( IHR .GT. HOUR .OR. IMN .GT. 59 .OR. ISC .GT. 59 * .OR. IHR .LT. 0 .OR. IMN .LT. 0 .OR. ISC .LT. 0 ) * GO TO 3 IUP = 0 SEC = ISC IOHR1 = 0 IOHR2 = 0 IOMN1 = 0 IOMN2 = 0 IOSC1 = 0 IOSC2 = 0 CALL PLOT CALL PLOT(7,20,#A0A0,2) CALL PLOT(9,20,#A0A0,2) CALL PLOT(7,43,#A0A0,2) CALL PLOT(9,43,#A0A0,2) C C SHOW THE TIME ON THE SCREEN C 20 ID1 = IHR / 10 ID2 = IHR - ID1 * 10 ID1 = ID1 + 1 ID2 = ID2 + 1 IUP = IUP + 1 IOHR2 = ID2 CALL SHOW(4,10,ID2,IDIGIT) IF ( IOHR1 .EQ. ID1 ) GO TO 25 IUP = IUP + 1 IOHR1 = ID1 CALL SHOW(4,1,ID1,IDIGIT) 25 CONTINUE 30 ID1 = IMN / 10 ID2 = IMN - ID1 * 10 ID1 = ID1 + 1 ID2 = ID2 + 1 IUP = IUP + 1 IOMN2 = ID2 CALL SHOW(4,33,ID2,IDIGIT) IF ( IOMN1 .EQ. ID1 ) GO TO 35 IUP = IUP + 1 IOMN1 = ID1 CALL SHOW(4,23,ID1,IDIGIT) 35 CONTINUE 40 ID1 = ISC / 10 ID2 = ISC - ID1 * 10 ID1 = ID1 + 1 ID2 = ID2 + 1 IUP = IUP + 1 IOSC2 = ID2 CALL SHOW(4,56,ID2,IDIGIT) IF ( IOSC1 .EQ. ID1 ) GO TO 45 IUP = IUP + 1 IOSC1 = ID1 CALL SHOW(4,46,ID1,IDIGIT) CONTINUE * COPY NPTDEFS * CALL CONTST * JZ CCONT * CALL CONIN * ANI 7FH * JNZ CCONT * CALL SYS * DB RETOP *CCONT EQU $ 45 CONTINUE IF (FIRST .NE. 0)GO TO 89 CALL PLOT (16,1, * 'Press any key to start clock running',36) C C WAIT FOR THE OK TO START RUNNING C CALL CIN(A) CALL PLOT (16,1, * ' ',36) C IUP = 1 FIRST = 1 89 CONTINUE C C C ISC = ISC + 5 ITIME = IFACT - ( IFACT2 * ( IUP - 1 )) DO 96 I=1,ITIME 96 CONTINUE IUP = 0 IF ( ISC .LT. 60 ) GO TO 40 ISC = 0 SEC = 0 IMN = IMN + 1 IF ( IMN .LT. 60 ) GO TO 30 IMN = 0 IHR = IHR + 1 IF ( IHR .LE. HOUR ) GO TO 20 IHR = 0 IF ( HOUR .EQ. 12 ) IHR = 1 GO TO 20 1000 FORMAT(12(I2,1X),I2) 1001 FORMAT(4X,'***** FORTRAN Digital Clock *****',// *'The following program is written in FORTRAN, * and',/,'uses various functions available * to the FORTRAN') 1002 FORMAT('programmer. This Digital Clock Program * keeps',/,'time in either 24 hour format, or * 12 hour format.',/,'Enter format, 12 or 24 * => ',Z) 1003 FORMAT(//,'You have selected ',I2,' hour format *, now enter',/,'the time in hour, minute, * and second with a comma') 1004 FORMAT('seperating each of the above. * Enter here => ',Z) END SUBROUTINE SHOW(IX,IY,N,IDIGIT) DIMENSION IDIGIT(260) DO 50 I=1,7 DO 50 J=1,7 IX1 = I + IX IY1 = J + IY CALL PLOT (IX1,IY1,' ',1) 50 CONTINUE N = ( N - 1 ) * 26 DO 100 I=1,26 IZ = IDIGIT(N+I) IX1 = IZ / 10 IY1 = IZ - IX1 * 10 IF ( IX1 .EQ. 0 .OR. IY1 .EQ. 0 ) GO TO 90 IX1 = IX1 + IX IY1 = IY1 + IY CALL PLOT(IX1,IY1,#A000,1) GO TO 100 90 CALL PLOT(1,1,' ',1) 100 CONTINUE RETURN END