16 ;******************************************* 26 ; SOURCE PRINT6 36 ;******************************************* 46 ; 56 ;PROCESS COMPUTE STATEMENTS 66 76 ; 86 COMPUT, IF (EOL.EQ.SPACE) CALL SYNTAX 96 COMPT0, XI= 106 CALL GETLIN 116 CALL GATOM 126 HLDCOL=ACOL1 136 146 IF (ATMTYP.NE.1) GOTO COMPT9 156 IF (ICHAR.NE.'=') GOTO COMPT8 166 XENTRY= 176 HOLDNM=WORD 186 EXPRMD= 196 CALL EXPVAL 206 216 IF (FATALI.NE.0) GOTO COMPT0 226 XNAME=HOLDNM 236 WORD=HOLDNM 246 CALL SEARCH 256 IF (FINDSW.EQ.SPACE) GOTO COMPT2 266 276 IF (DATADP.EQ.XDP) GOTO COMPT4 286 ERRCOD=30 296 COMPT1, ERRCOL=HLDCOL 306 CALL FATAL 316 GOTO COMPT0 326 336 COMPT2, IF (NAMEI.GT.DATMAX) GOTO COMPT0 346 INCR NAMEI 356 IF (NAMEI.LE.DATMAX) GOTO COMPT3 366 ERRCOD=17 376 GOTO COMPT1 386 COMPT3, XWK='X' 396 XMOD=EXPRMD 406 IF (XSIZ.LE.15) GOTO COMP3A 416 XSIZ=15 426 COMP3A, ERRCOD=30 436 IF (XDP.GT.XSIZ) GOTO COMPT1 446 IF (XDP.LT.0) GOTO COMPT1 456 DATANT(NAMEI)=XENTRY 466 COMPT4, IF (COMPI.GT.EXPMAX) GOTO COMPT0 476 INCR COMPI 486 IF (COMPI.LE.EXPMAX) GOTO COMPT5 496 ERRCOD=32 506 GOTO COMPT1 516 526 COMPT5, J=1 536 I=COMPI*118-117 546 COMPT6, ICHAR=INLINE(J,J) 556 IF (ICHAR.EQ.SPACE) GOTO COMPT7 566 IF (ICHAR.EQ.'.') GOTO COMPT7 576 IF (ICHAR.EQ.';') GOTO COMPT0 586 COMPT(I,I)=ICHAR 596 INCR I 606 COMPT7, INCR J 616 IF (J.LE.INLSIZ) GOTO COMPT6 626 GOTO COMPT0 636 646 COMPT8, IF (ICHAR.NE.SPACE) GOTO COMPT9 656 IF (WORD.EQ.'PRINT ') RETURN 666 IF (WORD.EQ.'END ') RETURN 676 COMPT9, CALL SYNTAX 686 GOTO COMPT0 696 ; 706 ; 716 ; EVALUATE AN EXPRESSION 726 ; 736 EXPVAL, IF (XI.LT.XIMAX) GOTO EXPVL0 746 ERRCOD=29 756 GOTO FATALA 766 EXPVL0, INCR XI 776 XENTRY= 786 CALL SCANF 796 IF (ICHAR.EQ.SPACE) GOTO SYNTAX 806 ICOL=ICOL-1 816 IF (ICHAR.NE.SQUOTE) GOTO EXPVL6 826 CALL GATOM 836 IF (FATALI.NE.0) RETURN 846 IF (EOL.EQ.SPACE) GOTO SYNTAX 856 IF (EXPRMD.NE.SPACE) GOTO SYNTAX 866 EXPRMD='A' 876 XSIZ=ATOMSZ 886 GOTO EXPV13 896 906 EXPVL6, CALL GETOPN 916 IF (FATALI.NE.0) RETURN 926 EXPRMD='D' 936 XSIZ=ATOMSZ 946 XDP=ATOMDP 956 966 EXPVL7, IF (EOL.NE.SPACE) GOTO EXPV12 976 IF (ICHAR.EQ.')') GOTO EXPV11 986 IF (ICHAR.EQ.'+') GOTO EXPVL8 996 IF (ICHAR.EQ.'-') GOTO EXPVL8 1006 IF (ICHAR.EQ.'*') GOTO EXPVL9 1016 IF (ICHAR.EQ.'/') GOTO EXPV10 1026 GOTO SYNTAX 1036 1046 ;IT IS '+' OR '-' 1056 1066 EXPVL8, SCOL=ICOL 1076 CALL GETOPN 1086 IF (FATALI.NE.0) RETURN 1096 EXPV8A, IF (ICHAR.EQ.'*') GOTO EXPV8B 1106 IF (ICHAR.NE.'/') GOTO EXPV8C 1116 EXPV8B, XASIZ=ATOMSZ 1126 XADP=ATOMDP 1136 CALL GETOPN 1146 IF (FATALI.NE.0) RETURN 1156 ATOMSZ=ATOMSZ+XASIZ 1166 ATOMDP=ATOMDP+XADP 1176 GOTO EXPV8A 1186 EXPV8C, IF (ATOMDP.EQ.XDP) GOTO EXPV8E 1196 ERRCOD=30 1206 ERRCOL=SCOL 1216 CALL FATAL 1226 GOTO EXPVL7 1236 EXPV8E, IF (XSIZ.GE.ATOMSZ) GOTO EXPVL7 1246 XSIZ=ATOMSZ 1256 GOTO EXPVL7 1266 1276 ;IT IS '*' 1286 1296 EXPVL9, CALL GETOPN 1306 IF (FATALI.NE.0) RETURN 1316 XSIZ=XSIZ+ATOMSZ 1326 XDP=XDP+ATOMDP 1336 GOTO EXPVL7 1346 1356 ;IT IS '/' 1366 1376 EXPV10, CALL GETOPN 1386 IF (FATALI.NE.0) RETURN 1396 XDP=XDP-ATOMDP 1406 GOTO EXPVL7 1416 1426 ;IT IS ')' 1436 1446 EXPV11, ERRCOD=27 1456 IF (XI.LE.1) GOTO FATALB 1466 CALL SCANF 1476 GOTO EXPV13 1486 1496 ;END OF LINE 1506 1516 EXPV12, IF (XI.EQ.1) GOTO EXPV13 1526 ERRCOD=28 1536 GOTO FATALB 1546 1556 EXPV13, XI=XI-1 1566 RETURN 1576 ; 1586 ; 1596 ;GET NEXT EXPRESSION OPERAND 1606 ; 1616 GETOPN, CALL SCANF 1626 IF (ICHAR.EQ.'+') GOTO GETOPN 1636 IF (ICHAR.EQ.'-') GOTO GETOPN 1646 ICOL=ICOL-1 1656 CALL GATOM 1666 IF (FATALI.NE.0) RETURN 1676 IF (ICHAR.NE.'(') GOTO GTOPN1 1686 IF (ATOMSZ.NE.0) GOTO SYNTAX 1696 XTABLE(XI)=XENTRY 1706 CALL EXPVAL 1716 IF (FATALI.NE.0) RETURN 1726 CALL GTOPN5 1736 ATOMSZ=XSIZ-HOLDDP 1746 ATOMDP=XDP-HOLDDP 1756 XENTRY=XTABLE(XI) 1766 RETURN 1776 1786 GTOPN1, IF (ATMTYP.EQ.1) GOTO GTOPN2 1796 IF (ATMTYP.EQ.3) RETURN 1806 ERRCOD=23 1816 GOTO FATALA 1826 1836 GTOPN2, CALL SEARCH 1846 IF (FINDSW.NE.SPACE) GOTO GTOPN3 1856 ERRCOD=15 1866 GOTO FATALA 1876 1886 GTOPN3, CALL GTOPN5 1896 ATOMSZ=DATAS-HOLDDP 1906 ATOMDP=DATADP-HOLDDP 1916 RETURN 1926 1936 GTOPN5, HOLDDP= 1946 IF (ICHAR.NE.'#') RETURN 1956 CALL GATOM 1966 IF (FATALI.NE.0) RETURN 1976 IF (ATMTYP.NE.3) GOTO GTOPN6 1986 IF (DPCOL.NE.0) GOTO GTOPN6 1996 IF (NUMLIT(1,ATOMSZ).GT.15) GOTO GTOPN6 2006 IF (NUMLIT(1,ATOMSZ).LE.0) GOTO GTOPN6 2016 HOLDDP=NUMLIT(1,ATOMSZ) 2026 RETURN 2036 GTOPN6, ERRCOD=7 2046 GOTO FATALA 2056 END