subroutine card(nm,nl,nr,vv) c free format card input subroutine. swenson 4/24/69 c nm=nr max, nl=length of label, nr=number of numbers read, vv=value c sn,in,fn,ffn are the sign, integer, fract, and factor of number. c se,ie,fe,ffe are the sign, integer, fract, and factor of exponent. c--------------------------------------------------------------------------- save c include 'param_sz.h' include 'var_char.h' include 'ucom.h' c common/image/jj,ij real vv(100) c-------------------------------------------------------------------------- c* data (ik(k),k=1,18)/' ',',','=','.','e','E','+','-','0','1','2', 1'3','4','5','6','7','8','9'/ ij(81)=char(32) if(nm.ne.0) then if((jj.eq.33).and.(vv(6).eq.2)) then write(nnout,*) 1'FOCLAL FACBZ=',vv(5),' IOPT= 2 all others values not used' else write(nnout,330)ik(1),(kj(j),j=1,78) endif endif read(nin,330) (kj(j),j=1,80) do 1 j=1,80 ij(j)=kj(j) 1 continue mode=1 nl=-1 nr=0 km=18 do 320 j=1,81 do 10 k=1,km if (ik(k).eq.ij(j)) then go to 30 endif 10 continue 20 mode=1 km=4 go to 320 30 continue l=k if (l.gt.9) l=9 go to (40,50,60,70,80,90,100,110), mode 40 sn=1. in=0 fn=0. ffn=1. se=1. ie=0 fe=0. ffe=1. c c ( , = . e E + - 0-9) go to (120,120,120,170,190,190,140,130,150), l 50 go to (20,20,20,170,190,190,20,20,150), l 60 go to (270,270,20,170,200,200,220,210,160), l 70 go to (280,280,20,20,200,200,220,210,180), l 80 go to (20,20,20,250,20,20,220,210,230), l 90 go to (20,20,20,250,20,20,20,20,230), l 100 go to (290,290,20,250,20,20,20,20,240), l 110 go to (300,300,20,20,20,20,20,20,260), l 120 km=18 ! number of possible characters if (nr.eq.0.and.nl.lt.0) nl=j-1 go to 320 c number part 130 sn=-1. 140 mode=2 go to 320 150 mode=3 160 continue in=10*in+k-9 go to 320 170 mode=4 go to 320 180 ffn=.1*ffn fn=fn+ffn*float(k-9) go to 320 c exponent part 190 in=1 200 mode=5 go to 320 210 se=-1. 220 mode=6 go to 320 230 mode=7 240 continue ie=10*ie+k-9 go to 320 250 mode=8 go to 320 260 ffe=.1*ffe fe=fe+ffe*float(k-9) go to 320 c calculate and store value 270 value=sn*float(in) go to 310 280 value=sn*(float(in)+fn) go to 310 290 value=sn*(float(in)+fn)*10.**(int(se)*ie) go to 310 300 value=sn*(float(in)+fn)*10.**(se*(float(ie)+fe)) 310 nr=nr+1 vv(nr)=value if (nr.ge.40) return mode=1 320 continue return c 330 format (80a1) end c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*