%EXTERNALROUTINE ISOCARD(%BYTEINTEGERARRAYNAME CARD) %INTEGER I,J I=1 %CYCLE READ SYMBOL(J) %EXITIF J=NL CARD(I)=J %EXITIF I=80 I=I+1 %REPEAT %FOR I=I+1,1,80 %CYCLE CARD(I)=' ' %REPEAT %END %EXTERNALLONGREALFN RFDISO(%BYTEINTEGERARRAYNAME CARD, %INTEGER COL1,COL2, %INTEGERNAME ERROR) %INTEGER I,J,K,L,M,SCALE %INTEGER SIGN %REAL RES SIGN=0 ->L1 %IF COL1>COL2 M=1; ERROR=0; RES=0; SCALE=0; J=1 %CYCLE I=COL1,1,COL2 K=CARD(I) ->L5 %IF K=' ' ->L7 %IF K='+' ->L4 %IF K='-' ->L2 %UNLESS '0'<=K<='9' RES=RES*10+(K&15) SCALE=10*SCALE M=0 ->L3 L5: ->L3 %IF M=1 ERROR=1 RES=10*RES SCALE=10*SCALE ->L3 L4: J=-1 L7: ->L8 %IF SIGN=1 %OR M=0; SIGN=1 L3: %REPEAT ERROR=M!ERROR %RESULT=J*RES %UNLESS SCALE#0 %RESULT=J*RES/SCALE L1: ERROR=3 %RESULT=0 L2: ->L7 %IF CARD(I)='&' ->L6 %IF CARD(I)='.' L8: ERROR=2 %RESULT=I L6: ->L8 %IF SCALE#0; SCALE=1 ->L3 %END %EXTERNALINTEGERFN IFDISO(%BYTEINTEGERARRAYNAME CARD, %INTEGER COL1,COL2, %INTEGERNAME ERROR) %INTEGER I,J,K,RES %INTEGER SIGN %INTEGER M ->L1 %IF COL1>COL2 RES=0 ERROR=0 SIGN=0 M=1 J=1 %CYCLE I=COL1,1,COL2 K=CARD(I) ->L5 %IF K=' ' ->L6 %IF K='+' ->L4 %IF K='-' ->L2 %UNLESS '0'<=K<='9' RES=10*RES+K&15 M=0 ->L3 L5: ->L3 %IF M=1 ERROR=1 RES=10*RES ->L3 L4: J=-1 L6: ->L7 %IF SIGN=1 %OR M=0 SIGN=1 L3: %REPEAT ERROR=M!ERROR %RESULT=J*RES L1: ERROR=3 %RESULT=0 L2: ->L6 %IF K='&' L7: ERROR=2 %RESULT=I %END %ENDOFFILE