BSD 4 development
[unix-history] / usr / src / cmd / efl / tailor.c
CommitLineData
5547e99f
F
1#include "defs"
2
3
4setopt(p,q)
5char *p;
6char *q;
7{
8int qval;
9qval = (q!=NULL) && ( equals(q, "yes") || equals(q, "on") );
10
11if(equals(p,"debug")) dbgopt = 1;
12else if(equals(p,"ndebug")) dbgopt = 0;
13else if(equals(p,"pfort")) langopt = 0;
14else if(equals(p,"ratfor")) langopt = 1;
15else if(equals(p,"efl")) langopt = 2;
16else if(equals(p,"dots"))
17 dotsopt = qval;
18else if(equals(p,"ioerror"))
19 {
20 if(equals(q,"none"))
21 tailor.errmode = IOERRNONE;
22 else if(equals(q,"ibm"))
23 tailor.errmode = IOERRIBM;
24 else if(equals(q,"fortran77"))
25 tailor.errmode = IOERRFORT77;
26 else execerr("unknown ioerror option %s", q);
27 }
28else if(equals(p, "system"))
29 {
30 register struct system *sysp;
31 for(sysp = systab ; sysp->sysname ; ++sysp)
32 if( equals(q, sysp->sysname) )
33 break;
34
35 if(sysp->sysname)
36 tailinit(sysp);
37 else
38 execerr("unknown system %s", q);
39 }
40else if(equals(p, "continue"))
41 tailor.ftncontnu = equals(q, "column1");
42else if(equals(p, "procheader"))
43 tailor.procheader = (q ? copys(q) : 0);
44else if(equals(p, "hollincall"))
45 tailor.hollincall = qval;
46else if(equals(p, "longcomplextype"))
47 {
48 tailor.lngcxtype = (q ? copys(q) : CNULL);
49 if(qval)
50 eflftn[TYLCOMPLEX] = FTNDCOMPLEX;
51 }
52else if(equals(p, "longcomplexprefix"))
53 tailor.lngcxprefix = (q ? copys(q) : CNULL);
54else if(equals(p, "fortran77"))
55 {
56 if(tailor.ftn77 = (q==NULL || qval) )
57 tailor.errmode = IOERRFORT77;
58 else if(tailor.errmode == IOERRFORT77)
59 tailor.errmode = IOERRNONE;
60 }
61
62else if( !tailop(p,q) )
63 execerr("unknown option %s", p);
64
65if(langopt==2)
66 setdot(dotsopt);
67else if(langopt==1)
68 setdot(1);
69}
70
71
72
73
74tailinit(sysp)
75register struct system *sysp;
76{
77register int sysf = sysp->sysno;
78tailor.ftncontnu = (sysf==UNIX);
79tailor.ftnsys = sysf;
80tailor.ftnin = 5;
81tailor.ftnout = 6;
82tailor.errmode = (sysf==UNIX ? IOERRFORT77 : IOERRIBM);
83tailor.charcomp = 2;
84tailor.hollincall = YES;
85tailor.deltastno = 1;
86tailor.dclintrinsics = YES;
87
88tailsize(sysp->chperwd);
89tailfmt(sysp->idig, sysp->rdig, sysp->ddig);
90}
91
92
93
94
95
96tailsize(wordsize)
97int wordsize;
98{
99int i;
100
101tailor.ftnchwd = wordsize;
102tailor.ftnsize[FTNINT] = wordsize;
103tailor.ftnsize[FTNREAL] = wordsize;
104tailor.ftnsize[FTNLOG] = wordsize;
105tailor.ftnsize[FTNCOMPLEX] = 2*wordsize;
106tailor.ftnsize[FTNDOUBLE] = 2*wordsize;
107tailor.ftnsize[FTNDCOMPLEX] = 2*wordsize;
108
109for(i = 0 ; i<NFTNTYPES ; ++i)
110 tailor.ftnalign[i] = tailor.ftnsize[i];
111}
112
113
114
115
116tailfmt(idig, rdig, ddig)
117int idig, rdig, ddig;
118{
119sprintf(msg, "i%d", idig);
120tailor.dfltfmt[TYINT] = copys(msg);
121
122sprintf(msg, "e%d.%d", rdig+8, rdig);
123tailor.dfltfmt[TYREAL] = copys(msg);
124
125sprintf(msg, "d%d.%d", ddig+8, ddig);
126tailor.dfltfmt[TYLREAL] = copys(msg);
127
128sprintf(msg, "1h(,1p%s,2h, ,%s,1h)",
129 tailor.dfltfmt[TYREAL], tailor.dfltfmt[TYREAL]);
130tailor.dfltfmt[TYCOMPLEX] = copys(msg);
131
132sprintf(msg, "1h(,1p%s,2h, ,%s,1h)",
133 tailor.dfltfmt[TYLREAL], tailor.dfltfmt[TYLREAL]);
134tailor.dfltfmt[TYLCOMPLEX] = copys(msg);
135
136tailor.dfltfmt[TYLOG] = "l2";
137}
138
139
140
141
142tailop(n,v)
143char *n, *v;
144{
145int val;
146struct itable { char *optn; int *ioptloc; } *ip;
147struct ctable { char *optn; char **coptloc; } *cp;
148static struct ctable formats[ ] = {
149 "iformat", &tailor.dfltfmt[TYINT],
150 "rformat", &tailor.dfltfmt[TYREAL],
151 "dformat", &tailor.dfltfmt[TYLREAL],
152 "zformat", &tailor.dfltfmt[TYCOMPLEX],
153 "zdformat", &tailor.dfltfmt[TYLCOMPLEX],
154 "lformat", &tailor.dfltfmt[TYLOG],
155 0, 0 };
156
157static struct itable ints[ ] = {
158 "ftnin", &tailor.ftnin,
159 "ftnout", &tailor.ftnout,
160 "charperint", &tailor.ftnchwd,
161 "charcomp", &tailor.charcomp,
162 "deltastno", &tailor.deltastno,
163 "dclintrinsics", &tailor.dclintrinsics,
164 "isize", &tailor.ftnsize[FTNINT],
165 "rsize", &tailor.ftnsize[FTNREAL],
166 "dsize", &tailor.ftnsize[FTNDOUBLE],
167 "lsize", &tailor.ftnsize[FTNLOG],
168 "zsize", &tailor.ftnsize[FTNCOMPLEX],
169 "ialign", &tailor.ftnalign[FTNINT],
170 "ralign", &tailor.ftnalign[FTNREAL],
171 "dalign", &tailor.ftnalign[FTNDOUBLE],
172 "lalign", &tailor.ftnalign[FTNLOG],
173 "zalign", &tailor.ftnalign[FTNCOMPLEX],
174 0, 0 };
175
176for(cp = formats; cp->optn ; ++cp)
177 if(equals(n, cp->optn))
178 {
179 *(cp->coptloc) = copys(v);
180 return(1);
181 }
182
183for(ip = ints ; ip->optn ; ++ip)
184 if(equals(n, ip->optn))
185 {
186 if( equals(v, "yes") || equals(v, "on") )
187 val = 1;
188 else if( equals(v, "no") || equals(v, "off") )
189 val = 0;
190 else val = convci(v);
191 *(ip->ioptloc) = val;
192 return(1);
193 }
194
195return(0);
196}