C ========================================= C PARAM C SUBROUTINE EVALUATES SIMPLE HEX OR DECIMAL STRINGS, C MATHS LEFT TO RIGHT ONLY, EXCEPT UP-ARROW AND UNARY -, C AND COLLECTS VALUES FROM SYMBOL TABLE C PARAMETERS C BUFF,J AN 80 BYTE BUFFER CONTAINS J CHARACTERS C I THE PARAMETER STRING STARTS AT BUFF(I) C VALUE AN INTEGER*4 VARIABLE CONTAINS THE RESULT C C ============================================ C SUBROUTINE PARAM (BUFF,I,J,VALUE) COMMON /SYSTAB/ SYTAB,SYVAL,ISYS REAL*8 SYTAB(300) INTEGER*4 SYVAL(300) BYTE BUFF(80),LASTOP INTEGER*4 VALUE,LASTVL,DECIML,SIXT REAL*8 VSTRNG INTEGER IUN,IUP DATA SIXT /"200000/ LASTVL=0 LASTOP=0 I=I-1 5 VALUE=0 DECIML=0 7 IUP=0 IUN=0 8 I=I+1 10 IF (I.GT.J) GOTO 200 IF (BUFF(I).EQ.1H,) GOTO 200 IF (BUFF(I).EQ.9 .OR. BUFF(I).EQ.32) GOTO 200 IF (BUFF(I).EQ.1H#) GOTO 8 IF (BUFF(I).EQ.1H') GOTO 15 IF (BUFF(I).EQ.1H$) GOTO 40 IF (BUFF(I).EQ.1H^) GOTO 30 IF (BUFF(I).EQ.1H-) GOTO 20 IF (BUFF(I).LT.1H0 .OR. BUFF(I).GT.1H9) GOTO 100 GOTO 50 15 I=I+1 VALUE=BUFF(I) GOTO 40 20 IUN=1 GOTO 40 30 IUP=1 40 I=I+1 IF (I.GT.J) GOTO 200 IF (BUFF(I).EQ.1H,) GOTO 200 IF (BUFF(I).EQ.9 .OR. BUFF(I).EQ.32) GOTO 200 IF (BUFF(I).EQ.1H.) VALUE=DECIML IF (BUFF(I).EQ.1H.) GOTO 40 IF (BUFF(I).EQ.1H^) IUP=1 IF (BUFF(I).EQ.1H^) GOTO 40 50 IF (BUFF(I).EQ.1H+ .OR. BUFF(I).EQ.1H-) GOTO 200 IF (BUFF(I).EQ.1H* .OR. BUFF(I).EQ.1H/) GOTO 200 IF (BUFF(I).EQ.1H! .OR. BUFF(I).EQ.1H&) GOTO 200 DECIML=BUFF(I)-1H0+(10*DECIML) IF (BUFF(I).LE.1H9) VALUE=BUFF(I)-1H0+(16*VALUE) IF (BUFF(I).GE.1HA) VALUE=BUFF(I)-1HA+10+(16*VALUE) GOTO 40 100 CALL PACKER (BUFF,I,J,VSTRNG) CALL GETTER (SYTAB,SYVAL,ISYS,VSTRNG,VALUE) IF (VALUE.EQ.-1) RETURN GOTO 300 200 IF (IUN.EQ.1) VALUE=-VALUE IF (IUP.EQ.1) VALUE=VALUE/256 IF (LASTOP.EQ.0) GOTO 300 IF (LASTOP.EQ.1H+) VALUE=LASTVL+VALUE IF (LASTOP.EQ.1H-) VALUE=LASTVL-VALUE IF (LASTOP.EQ.1H*) VALUE=LASTVL*VALUE IF (LASTOP.EQ.1H/ .AND. VALUE.NE.0) VALUE=LASTVL/VALUE IF (LASTOP.EQ.1H!) VALUE=JIOR(LASTVL,VALUE) IF (LASTOP.EQ.1H&) VALUE=JIAND(LASTVL,VALUE) 300 IF (VALUE.GE.0 .AND. VALUE.LE."177777) GOTO 350 IF (VALUE.LT.0) VALUE=VALUE+SIXT IF (VALUE.GT."177777) VALUE=VALUE-SIXT GOTO 300 350 IF (I.GE.J) RETURN IF (BUFF(I).EQ.9 .OR. BUFF(I).EQ.32) RETURN IF (BUFF(I).EQ.1H,) RETURN LASTOP=BUFF(I) LASTVL=VALUE GOTO 5 END