1 | subroutine card(nm,nl,nr,vv) |
---|
2 | c free format card input subroutine. swenson 4/24/69 |
---|
3 | c nm=nr max, nl=length of label, nr=number of numbers read, vv=value |
---|
4 | c sn,in,fn,ffn are the sign, integer, fract, and factor of number. |
---|
5 | c se,ie,fe,ffe are the sign, integer, fract, and factor of exponent. |
---|
6 | c--------------------------------------------------------------------------- |
---|
7 | save |
---|
8 | c |
---|
9 | include 'param_sz.h' |
---|
10 | include 'var_char.h' |
---|
11 | include 'ucom.h' |
---|
12 | c |
---|
13 | common/image/jj,ij |
---|
14 | real vv(100) |
---|
15 | c-------------------------------------------------------------------------- |
---|
16 | c* |
---|
17 | data (ik(k),k=1,18)/' ',',','=','.','e','E','+','-','0','1','2', |
---|
18 | 1'3','4','5','6','7','8','9'/ |
---|
19 | ij(81)=char(32) |
---|
20 | if(nm.ne.0) then |
---|
21 | if((jj.eq.33).and.(vv(6).eq.2)) then |
---|
22 | write(nnout,*) |
---|
23 | 1'FOCLAL FACBZ=',vv(5),' IOPT= 2 all others values not used' |
---|
24 | else |
---|
25 | write(nnout,330)ik(1),(kj(j),j=1,78) |
---|
26 | endif |
---|
27 | endif |
---|
28 | read(nin,330) (kj(j),j=1,80) |
---|
29 | do 1 j=1,80 |
---|
30 | ij(j)=kj(j) |
---|
31 | 1 continue |
---|
32 | mode=1 |
---|
33 | nl=-1 |
---|
34 | nr=0 |
---|
35 | km=18 |
---|
36 | do 320 j=1,81 |
---|
37 | do 10 k=1,km |
---|
38 | if (ik(k).eq.ij(j)) then |
---|
39 | go to 30 |
---|
40 | endif |
---|
41 | 10 continue |
---|
42 | 20 mode=1 |
---|
43 | km=4 |
---|
44 | go to 320 |
---|
45 | 30 continue |
---|
46 | l=k |
---|
47 | if (l.gt.9) l=9 |
---|
48 | go to (40,50,60,70,80,90,100,110), mode |
---|
49 | 40 sn=1. |
---|
50 | in=0 |
---|
51 | fn=0. |
---|
52 | ffn=1. |
---|
53 | se=1. |
---|
54 | ie=0 |
---|
55 | fe=0. |
---|
56 | ffe=1. |
---|
57 | c |
---|
58 | c ( , = . e E + - 0-9) |
---|
59 | go to (120,120,120,170,190,190,140,130,150), l |
---|
60 | 50 go to (20,20,20,170,190,190,20,20,150), l |
---|
61 | 60 go to (270,270,20,170,200,200,220,210,160), l |
---|
62 | 70 go to (280,280,20,20,200,200,220,210,180), l |
---|
63 | 80 go to (20,20,20,250,20,20,220,210,230), l |
---|
64 | 90 go to (20,20,20,250,20,20,20,20,230), l |
---|
65 | 100 go to (290,290,20,250,20,20,20,20,240), l |
---|
66 | 110 go to (300,300,20,20,20,20,20,20,260), l |
---|
67 | 120 km=18 ! number of possible characters |
---|
68 | if (nr.eq.0.and.nl.lt.0) nl=j-1 |
---|
69 | go to 320 |
---|
70 | c number part |
---|
71 | 130 sn=-1. |
---|
72 | 140 mode=2 |
---|
73 | go to 320 |
---|
74 | 150 mode=3 |
---|
75 | 160 continue |
---|
76 | in=10*in+k-9 |
---|
77 | go to 320 |
---|
78 | 170 mode=4 |
---|
79 | go to 320 |
---|
80 | 180 ffn=.1*ffn |
---|
81 | fn=fn+ffn*float(k-9) |
---|
82 | go to 320 |
---|
83 | c exponent part |
---|
84 | 190 in=1 |
---|
85 | 200 mode=5 |
---|
86 | go to 320 |
---|
87 | 210 se=-1. |
---|
88 | 220 mode=6 |
---|
89 | go to 320 |
---|
90 | 230 mode=7 |
---|
91 | 240 continue |
---|
92 | ie=10*ie+k-9 |
---|
93 | go to 320 |
---|
94 | 250 mode=8 |
---|
95 | go to 320 |
---|
96 | 260 ffe=.1*ffe |
---|
97 | fe=fe+ffe*float(k-9) |
---|
98 | go to 320 |
---|
99 | c calculate and store value |
---|
100 | 270 value=sn*float(in) |
---|
101 | go to 310 |
---|
102 | 280 value=sn*(float(in)+fn) |
---|
103 | go to 310 |
---|
104 | 290 value=sn*(float(in)+fn)*10.**(int(se)*ie) |
---|
105 | go to 310 |
---|
106 | 300 value=sn*(float(in)+fn)*10.**(se*(float(ie)+fe)) |
---|
107 | 310 nr=nr+1 |
---|
108 | vv(nr)=value |
---|
109 | if (nr.ge.40) return |
---|
110 | mode=1 |
---|
111 | 320 continue |
---|
112 | return |
---|
113 | c |
---|
114 | 330 format (80a1) |
---|
115 | end |
---|
116 | c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++* |
---|