! calc.f90 !Author: Tim Corrie Jr. 10/08/2021 first FORTRAN program, at least since 1980 tried to keep generic !Written for gfortran subroutine displaystr(psz, color) character(len=24) :: psz integer :: color character(len=4096) :: outstr character(len=4096) :: outstrb WRITE(outstr,*) "F 0 16777215" WRITE(*,"(A)") TRIM(ADJUSTL(TRIM(outstr))) WRITE(outstr,*) "FR 0 0 0 9900 600" WRITE(*,"(A)") TRIM(ADJUSTL(TRIM(outstr))) WRITE(outstr,*) "F 0 ", color WRITE(*,"(A)") TRIM(ADJUSTL(TRIM(outstr))) WRITE(outstr,*) "R 0 100 100 9800 500" WRITE(*,"(A)") TRIM(ADJUSTL(TRIM(outstr))) WRITE(outstr,*) '"'//TRIM(ADJUSTL(TRIM(psz)))//'"' WRITE(outstrb,"(A)") TRIM(ADJUSTL(TRIM(outstr))) WRITE(outstr,*) "R$ 0 9800 520", TRIM(ADJUSTL(TRIM(outstrb))) WRITE(*,"(A)") TRIM(ADJUSTL(TRIM(outstr))) WRITE(*,"(A)") "Z " end subroutine subroutine keytoexe(rowcol) integer :: rowcol logical :: gfisnumberentering logical :: gfnotexit character(len=1) :: gbinop character(len=24) :: gdisplaystr character(len=3) :: gkbdname(20) real :: gax real :: gbx common / globals / gfisnumberentering, gfnotexit, gbinop, gdisplaystr, gkbdname, gax, gbx character(len=4096) :: outstr character(len=4096) :: outstrb IF ( ( rowcol .EQ. 4) .OR. ( rowcol .EQ. 5) .OR. ( rowcol .EQ. 6) .OR. ( rowcol .EQ. 8) .OR. & ( rowcol .EQ. 9) .OR. ( rowcol .EQ. 10) .OR. ( rowcol .EQ. 12) .OR. ( rowcol .EQ. 13) .OR. & ( rowcol .EQ. 14) .OR. ( rowcol .EQ. 16) .OR. ( rowcol .EQ. 17 ) ) THEN IF ( gfisnumberentering ) THEN IF ( len( TRIM(ADJUSTL(TRIM(gdisplaystr))) ) .LT. ( MAXDISP - 1 ) ) THEN WRITE(outstr,*) TRIM(ADJUSTL(TRIM(gdisplaystr))), TRIM(ADJUSTL(TRIM(gkbdname(rowcol+1)))) WRITE(gdisplaystr,"(A)") TRIM(ADJUSTL(TRIM(outstr))) END IF ELSE WRITE(gdisplaystr,"(A)") TRIM(ADJUSTL(TRIM(gkbdname(rowcol+1)))) gfisnumberentering = .TRUE. END IF call displaystr( gdisplaystr, 6052991 ) ELSE IF ( rowcol .EQ. 0 ) THEN WRITE(outstr,*) "O 0 0 0" WRITE(*,"(A)") TRIM(ADJUSTL(TRIM(outstr))) gfnotexit = .FALSE. ELSE IF ( rowcol .EQ. 1 ) THEN gdisplaystr=" " call displaystr( " 0", 6052991 ) gfisnumberentering = .FALSE. ELSE IF ( rowcol .EQ. 2 ) THEN IF ( len( TRIM(gdisplaystr) ) .GT. 0 ) THEN IF ( len(TRIM(gdisplaystr)) .EQ. 1 ) THEN call displaystr( "0", 6052991 ) END IF WRITE(gdisplaystr,*) gdisplaystr(:len(TRIM(gdisplaystr))-1) IF ( len( TRIM(gdisplaystr) ) .GT. 0 ) THEN call displaystr( gdisplaystr, 6052991 ) END IF END IF ELSE IF ( rowcol .EQ. 18 ) THEN IF ( len( TRIM(gdisplaystr) ) .GT. 0 ) THEN IF ( gdisplaystr(1:1) .EQ. "-" ) THEN WRITE(outstr,*) TRIM(ADJUSTL(TRIM(gdisplaystr(2:)))) WRITE(gdisplaystr,"(A)") TRIM(ADJUSTL(TRIM(outstr))) ELSE IF ( len(TRIM(gdisplaystr)) .LT. ( MAXDISP - 1 ) ) THEN WRITE(outstr,*) TRIM(ADJUSTL(TRIM("-"))), TRIM(ADJUSTL(TRIM(gdisplaystr))) WRITE(gdisplaystr,"(A)") TRIM(ADJUSTL(TRIM(outstr))) END IF call displaystr( gdisplaystr, 6052991 ) END IF ELSE IF ( ( rowcol .EQ. 3) .OR. (rowcol .EQ. 7) .OR. ( rowcol .EQ. 11) .OR. ( rowcol .EQ. 15 ) ) THEN gbinop = TRIM(gkbdname(rowcol+1)) READ( gdisplaystr, * ) gax gfisnumberentering = .FALSE. ELSE IF ( rowcol .EQ. 19 ) THEN IF ( gfisnumberentering ) THEN READ( gdisplaystr, * ) gbx gfisnumberentering = .FALSE. END IF IF ( gbinop .EQ. "*" ) THEN gax = gax * gbx ELSE IF ( gbinop .EQ. "/" ) THEN gax = gax / gbx ELSE IF ( gbinop .EQ. "+" ) THEN gax = gax + gbx ELSE IF ( gbinop .EQ. "-" ) THEN gax = gax - gbx END IF WRITE(outstr,*) gax WRITE(gdisplaystr,"(A)") TRIM(ADJUSTL(TRIM(outstr))) call displaystr( gdisplaystr, 6052991 ) END IF end subroutine program calc implicit none logical :: gfisnumberentering logical :: gfnotexit character(len=1) :: gbinop character(len=24) :: gdisplaystr character(len=3) :: gkbdname(20) real :: gax real :: gbx common / globals / gfisnumberentering, gfnotexit, gbinop, gdisplaystr, gkbdname, gax, gbx integer :: acolor(4) integer kbd_color(20) character(len=4096) :: outstr character(len=4096) :: outstrb character(len=64) :: line integer :: MAXDISP integer :: i integer :: row integer :: col integer :: x integer :: y integer :: button gfisnumberentering = .FALSE. gfnotexit = .TRUE. gdisplaystr = "" MAXDISP = 24 acolor = (/ 2628095,1015567,986895,12632256 /) gkbdname = (/ "Off", "C ", "