|
|
researchv10 Norman
#include "defs"
setopt(p,q)
char *p;
char *q;
{
int qval;
qval = (q!=NULL) && ( equals(q, "yes") || equals(q, "on") );
if(equals(p,"debug")) dbgopt = 1;
else if(equals(p,"ndebug")) dbgopt = 0;
else if(equals(p,"pfort")) langopt = 0;
else if(equals(p,"ratfor")) langopt = 1;
else if(equals(p,"efl")) langopt = 2;
else if(equals(p,"dots"))
dotsopt = qval;
else if(equals(p,"ioerror"))
{
if(equals(q,"none"))
tailor.errmode = IOERRNONE;
else if(equals(q,"ibm"))
tailor.errmode = IOERRIBM;
else if(equals(q,"fortran77"))
tailor.errmode = IOERRFORT77;
else execerr("unknown ioerror option %s", q);
}
else if(equals(p, "system"))
{
register struct system *sysp;
for(sysp = systab ; sysp->sysname ; ++sysp)
if( equals(q, sysp->sysname) )
break;
if(sysp->sysname)
tailinit(sysp);
else
execerr("unknown system %s", q);
}
else if(equals(p, "continue"))
tailor.ftncontnu = equals(q, "column1");
else if(equals(p, "procheader"))
tailor.procheader = (q ? copys(q) : 0);
else if(equals(p, "hollincall"))
tailor.hollincall = qval;
else if(equals(p, "longcomplextype"))
{
tailor.lngcxtype = (q ? copys(q) : CNULL);
if(qval)
eflftn[TYLCOMPLEX] = FTNDCOMPLEX;
}
else if(equals(p, "longcomplexprefix"))
tailor.lngcxprefix = (q ? copys(q) : CNULL);
else if(equals(p, "fortran77"))
{
if(tailor.ftn77 = (q==NULL || qval) )
tailor.errmode = IOERRFORT77;
else if(tailor.errmode == IOERRFORT77)
tailor.errmode = IOERRNONE;
}
else if( !tailop(p,q) )
execerr("unknown option %s", p);
if(langopt==2)
setdot(dotsopt);
else if(langopt==1)
setdot(1);
}
tailinit(sysp)
register struct system *sysp;
{
register int sysf = sysp->sysno;
tailor.ftncontnu = (sysf==UNIX);
tailor.ftnsys = sysf;
tailor.ftnin = 5;
tailor.ftnout = 6;
tailor.errmode = (sysf==UNIX ? IOERRFORT77 : IOERRIBM);
tailor.charcomp = 2;
tailor.hollincall = YES;
tailor.deltastno = 1;
tailor.dclintrinsics = YES;
tailsize(sysp->chperwd);
tailfmt(sysp->idig, sysp->rdig, sysp->ddig);
}
tailsize(wordsize)
int wordsize;
{
int i;
tailor.ftnchwd = wordsize;
tailor.ftnsize[FTNINT] = wordsize;
tailor.ftnsize[FTNREAL] = wordsize;
tailor.ftnsize[FTNLOG] = wordsize;
tailor.ftnsize[FTNCOMPLEX] = 2*wordsize;
tailor.ftnsize[FTNDOUBLE] = 2*wordsize;
tailor.ftnsize[FTNDCOMPLEX] = 2*wordsize;
for(i = 0 ; i<NFTNTYPES ; ++i)
tailor.ftnalign[i] = tailor.ftnsize[i];
}
tailfmt(idig, rdig, ddig)
int idig, rdig, ddig;
{
sprintf(msg, "i%d", idig);
tailor.dfltfmt[TYINT] = copys(msg);
sprintf(msg, "e%d.%d", rdig+8, rdig);
tailor.dfltfmt[TYREAL] = copys(msg);
sprintf(msg, "d%d.%d", ddig+8, ddig);
tailor.dfltfmt[TYLREAL] = copys(msg);
sprintf(msg, "1h(,1p%s,2h, ,%s,1h)",
tailor.dfltfmt[TYREAL], tailor.dfltfmt[TYREAL]);
tailor.dfltfmt[TYCOMPLEX] = copys(msg);
sprintf(msg, "1h(,1p%s,2h, ,%s,1h)",
tailor.dfltfmt[TYLREAL], tailor.dfltfmt[TYLREAL]);
tailor.dfltfmt[TYLCOMPLEX] = copys(msg);
tailor.dfltfmt[TYLOG] = "l2";
}
tailop(n,v)
char *n, *v;
{
int val;
struct itable { char *optn; int *ioptloc; } *ip;
struct ctable { char *optn; char **coptloc; } *cp;
static struct ctable formats[ ] = {
"iformat", &tailor.dfltfmt[TYINT],
"rformat", &tailor.dfltfmt[TYREAL],
"dformat", &tailor.dfltfmt[TYLREAL],
"zformat", &tailor.dfltfmt[TYCOMPLEX],
"zdformat", &tailor.dfltfmt[TYLCOMPLEX],
"lformat", &tailor.dfltfmt[TYLOG],
0, 0 };
static struct itable ints[ ] = {
"ftnin", &tailor.ftnin,
"ftnout", &tailor.ftnout,
"charperint", &tailor.ftnchwd,
"charcomp", &tailor.charcomp,
"deltastno", &tailor.deltastno,
"dclintrinsics", &tailor.dclintrinsics,
"isize", &tailor.ftnsize[FTNINT],
"rsize", &tailor.ftnsize[FTNREAL],
"dsize", &tailor.ftnsize[FTNDOUBLE],
"lsize", &tailor.ftnsize[FTNLOG],
"zsize", &tailor.ftnsize[FTNCOMPLEX],
"ialign", &tailor.ftnalign[FTNINT],
"ralign", &tailor.ftnalign[FTNREAL],
"dalign", &tailor.ftnalign[FTNDOUBLE],
"lalign", &tailor.ftnalign[FTNLOG],
"zalign", &tailor.ftnalign[FTNCOMPLEX],
0, 0 };
for(cp = formats; cp->optn ; ++cp)
if(equals(n, cp->optn))
{
*(cp->coptloc) = copys(v);
return(1);
}
for(ip = ints ; ip->optn ; ++ip)
if(equals(n, ip->optn))
{
if( equals(v, "yes") || equals(v, "on") )
val = 1;
else if( equals(v, "no") || equals(v, "off") )
val = 0;
else val = convci(v);
*(ip->ioptloc) = val;
return(1);
}
return(0);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.