⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 misc.c

📁 把fortran语言编的程序转为c语言编的程序, 运行环境linux
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************Copyright 1990, 1992 - 1994 by AT&T Bell Laboratories and Bellcore.Permission to use, copy, modify, and distribute this softwareand its documentation for any purpose and without fee is herebygranted, provided that the above copyright notice appear in allcopies and that both that the copyright notice and thispermission notice and warranty disclaimer appear in supportingdocumentation, and that the names of AT&T Bell Laboratories orBellcore or any of their entities not be used in advertising orpublicity pertaining to distribution of the software withoutspecific, written prior permission.AT&T and Bellcore disclaim all warranties with regard to thissoftware, including all implied warranties of merchantabilityand fitness.  In no event shall AT&T or Bellcore be liable forany special, indirect or consequential damages or any damageswhatsoever resulting from loss of use, data or profits, whetherin an action of contract, negligence or other tortious action,arising out of or in connection with the use or performance ofthis software.****************************************************************/#include "defs.h" int#ifdef KR_headersoneof_stg(name, stg, mask)	Namep name;	int stg;	int mask;#elseoneof_stg(Namep name, int stg, int mask)#endif{	if (stg == STGCOMMON && name) {		if ((mask & M(STGEQUIV)))			return name->vcommequiv;		if ((mask & M(STGCOMMON)))			return !name->vcommequiv;		}	return ONEOF(stg, mask);	}/* op_assign -- given a binary opcode, return the associated assignment   operator */ int#ifdef KR_headersop_assign(opcode)	int opcode;#elseop_assign(int opcode)#endif{    int retval = -1;    switch (opcode) {        case OPPLUS: retval = OPPLUSEQ; break;	case OPMINUS: retval = OPMINUSEQ; break;	case OPSTAR: retval = OPSTAREQ; break;	case OPSLASH: retval = OPSLASHEQ; break;	case OPMOD: retval = OPMODEQ; break;	case OPLSHIFT: retval = OPLSHIFTEQ; break;	case OPRSHIFT: retval = OPRSHIFTEQ; break;	case OPBITAND: retval = OPBITANDEQ; break;	case OPBITXOR: retval = OPBITXOREQ; break;	case OPBITOR: retval = OPBITOREQ; break;	default:	    erri ("op_assign:  bad opcode '%d'", opcode);	    break;    } /* switch */    return retval;} /* op_assign */ char *#ifdef KR_headersAlloc(n)	int n;#elseAlloc(int n)#endif		/* error-checking version of malloc */		/* ckalloc initializes memory to 0; Alloc does not */{	char errbuf[32];	register char *rv;	rv = malloc(n);	if (!rv) {		sprintf(errbuf, "malloc(%d) failure!", n);		Fatal(errbuf);		}	return rv;	} void#ifdef KR_headerscpn(n, a, b)	register int n;	register char *a;	register char *b;#elsecpn(register int n, register char *a, register char *b)#endif{	while(--n >= 0)		*b++ = *a++;} int#ifdef KR_headerseqn(n, a, b)	register int n;	register char *a;	register char *b;#elseeqn(register int n, register char *a, register char *b)#endif{	while(--n >= 0)		if(*a++ != *b++)			return(NO);	return(YES);} int#ifdef KR_headerscmpstr(a, b, la, lb)	register char *a;	register char *b;	ftnint la;	ftnint lb;#elsecmpstr(register char *a, register char *b, ftnint la, ftnint lb)#endif	/* compare two strings */{	register char *aend, *bend;	aend = a + la;	bend = b + lb;	if(la <= lb)	{		while(a < aend)			if(*a != *b)				return( *a - *b );			else			{				++a;				++b;			}		while(b < bend)			if(*b != ' ')				return(' ' - *b);			else				++b;	}	else	{		while(b < bend)			if(*a != *b)				return( *a - *b );			else			{				++a;				++b;			}		while(a < aend)			if(*a != ' ')				return(*a - ' ');			else				++a;	}	return(0);}/* hookup -- Same as LISP NCONC, that is a destructive append of two lists */ chainp#ifdef KR_headershookup(x, y)	register chainp x;	register chainp y;#elsehookup(register chainp x, register chainp y)#endif{	register chainp p;	if(x == NULL)		return(y);	for(p = x ; p->nextp ; p = p->nextp)		;	p->nextp = y;	return(x);} struct Listblock *#ifdef KR_headersmklist(p)	chainp p;#elsemklist(chainp p)#endif{	register struct Listblock *q;	q = ALLOC(Listblock);	q->tag = TLIST;	q->listp = p;	return(q);} chainp#ifdef KR_headersmkchain(p, q)	register char * p;	register chainp q;#elsemkchain(register char * p, register chainp q)#endif{	register chainp r;	if(chains)	{		r = chains;		chains = chains->nextp;	}	else		r = ALLOC(Chain);	r->datap = p;	r->nextp = q;	return(r);} chainp#ifdef KR_headersrevchain(next)	register chainp next;#elserevchain(register chainp next)#endif{	register chainp p, prev = 0;	while(p = next) {		next = p->nextp;		p->nextp = prev;		prev = p;		}	return prev;	}/* addunder -- turn a cvarname into an external name *//* The cvarname may already end in _ (to avoid C keywords); *//* if not, it has room for appending an _. */ char *#ifdef KR_headersaddunder(s)	register char *s;#elseaddunder(register char *s)#endif{	register int c, i, j;	char *s0 = s;	i = j = 0;	while(c = *s++)		if (c == '_')			i++, j++;		else			i = 0;	if (!i) {		*s-- = 0;		*s = '_';		}	else if (j == 2)		s[-2] = 0;	return( s0 );	}/* copyn -- return a new copy of the input Fortran-string */ char *#ifdef KR_headerscopyn(n, s)	register int n;	register char *s;#elsecopyn(register int n, register char *s)#endif{	register char *p, *q;	p = q = (char *) Alloc(n);	while(--n >= 0)		*q++ = *s++;	return(p);}/* copys -- return a new copy of the input C-string */ char *#ifdef KR_headerscopys(s)	char *s;#elsecopys(char *s)#endif{	return( copyn( strlen(s)+1 , s) );}/* convci -- Convert Fortran-string to integer; assumes that input is a   legal number, with no trailing blanks */ ftnint#ifdef KR_headersconvci(n, s)	register int n;	register char *s;#elseconvci(register int n, register char *s)#endif{	ftnint sum;	sum = 0;	while(n-- > 0)		sum = 10*sum + (*s++ - '0');	return(sum);}/* convic - Convert Integer constant to string */ char *#ifdef KR_headersconvic(n)	ftnint n;#elseconvic(ftnint n)#endif{	static char s[20];	register char *t;	s[19] = '\0';	t = s+19;	do	{		*--t = '0' + n%10;		n /= 10;	} while(n > 0);	return(t);}/* mkname -- add a new identifier to the environment, including the closed   hash table. */ Namep#ifdef KR_headersmkname(s)	register char *s;#elsemkname(register char *s)#endif{	struct Hashentry *hp;	register Namep q;	register int c, hash, i;	register char *t;	char *s0;	char errbuf[64];	hash = i = 0;	s0 = s;	while(c = *s++) {		hash += c;		if (c == '_')			i = 2;		}	if (!i && in_vector(s0,c_keywords,n_keywords) >= 0)		i = 2;	hash %= maxhash;/* Add the name to the closed hash table */	hp = hashtab + hash;	while(q = hp->varp)		if( hash == hp->hashval && !strcmp(s0,q->fvarname) )			return(q);		else if(++hp >= lasthash)			hp = hashtab;	if(++nintnames >= maxhash-1)		many("names", 'n', maxhash);	/* Fatal error */	hp->varp = q = ALLOC(Nameblock);	hp->hashval = hash;	q->tag = TNAME;	/* TNAME means the tag type is NAME */	c = s - s0;	if (c > 7 && noextflag) {		sprintf(errbuf, "\"%.35s%s\" over 6 characters long", s0,			c > 36 ? "..." : "");		errext(errbuf);		}	q->fvarname = strcpy(mem(c,0), s0);	t = q->cvarname = mem(c + i + 1, 0);	s = s0;	/* add __ to the end of any name containing _ and to any C keyword */	while(*t = *s++)		t++;	if (i) {		do *t++ = '_';			while(--i > 0);		*t = 0;		}	return(q);} struct Labelblock *#ifdef KR_headersmklabel(l)	ftnint l;#elsemklabel(ftnint l)#endif{	register struct Labelblock *lp;	if(l <= 0)		return(NULL);	for(lp = labeltab ; lp < highlabtab ; ++lp)		if(lp->stateno == l)			return(lp);	if(++highlabtab > labtabend)		many("statement labels", 's', maxstno);	lp->stateno = l;	lp->labelno = newlabel();	lp->blklevel = 0;	lp->labused = NO;	lp->fmtlabused = NO;	lp->labdefined = NO;	lp->labinacc = NO;	lp->labtype = LABUNKNOWN;	lp->fmtstring = 0;	return(lp);} intnewlabel(Void){	return( ++lastlabno );}/* this label appears in a branch context */ struct Labelblock *#ifdef KR_headersexeclab(stateno)	ftnint stateno;#elseexeclab(ftnint stateno)#endif{	register struct Labelblock *lp;	if(lp = mklabel(stateno))	{		if(lp->labinacc)			warn1("illegal branch to inner block, statement label %s",			    convic(stateno) );		else if(lp->labdefined == NO)			lp->blklevel = blklevel;		if(lp->labtype == LABFORMAT)			err("may not branch to a format");		else			lp->labtype = LABEXEC;	}	else		execerr("illegal label %s", convic(stateno));	return(lp);}/* find or put a name in the external symbol table */ Extsym *#ifdef KR_headersmkext1(f, s)	char *f;	char *s;#elsemkext1(char *f, char *s)#endif{	Extsym *p;	for(p = extsymtab ; p<nextext ; ++p)		if(!strcmp(s,p->cextname))			return( p );	if(nextext >= lastext)		many("external symbols", 'x', maxext);	nextext->fextname = strcpy(gmem(strlen(f)+1,0), f);	nextext->cextname = f == s				? nextext->fextname				: strcpy(gmem(strlen(s)+1,0), s);	nextext->extstg = STGUNKNOWN;	nextext->extp = 0;	nextext->allextp = 0;	nextext->extleng = 0;	nextext->maxleng = 0;	nextext->extinit = 0;	nextext->curno = nextext->maxno = 0;	return( nextext++ );} Extsym *#ifdef KR_headersmkext(f, s)	char *f;	char *s;#elsemkext(char *f, char *s)#endif{	Extsym *e = mkext1(f, s);	if (e->extstg == STGCOMMON)		errstr("%.52s cannot be a subprogram: it is a common block.",f);	return e;	} Addrp#ifdef KR_headersbuiltin(t, s, dbi)	int t;	char *s;	int dbi;#elsebuiltin(int t, char *s, int dbi)#endif{	register Extsym *p;	register Addrp q;	extern chainp used_builtins;	p = mkext(s,s);	if(p->extstg == STGUNKNOWN)		p->extstg = STGEXT;	else if(p->extstg != STGEXT)	{		errstr("improper use of builtin %s", s);		return(0);	}	q = ALLOC(Addrblock);	q->tag = TADDR;	q->vtype = t;	q->vclass = CLPROC;	q->vstg = STGEXT;	q->memno = p - extsymtab;	q->dbl_builtin = dbi;/* A NULL pointer here tells you to use   memno   to check the external   symbol table */	q -> uname_tag = UNAM_EXTERN;/* Add to the list of used builtins */	if (dbi >= 0)		add_extern_to_list (q, &used_builtins);	return(q);} void#ifdef KR_headersadd_extern_to_list(addr, list_store)	Addrp addr;	chainp *list_store;#elseadd_extern_to_list(Addrp addr, chainp *list_store)#endif{    chainp last = CHNULL;    chainp list;    int memno;    if (list_store == (chainp *) NULL || addr == (Addrp) NULL)	return;    list = *list_store;    memno = addr -> memno;    for (;list; last = list, list = list -> nextp) {	Addrp this = (Addrp) (list -> datap);	if (this -> tag == TADDR && this -> uname_tag == UNAM_EXTERN &&		this -> memno == memno)	    return;    } /* for */    if (*list_store == CHNULL)	*list_store = mkchain((char *)cpexpr((expptr)addr), CHNULL);    else	last->nextp = mkchain((char *)cpexpr((expptr)addr), CHNULL);} /* add_extern_to_list */ void#ifdef KR_headersfrchain(p)	register chainp *p;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -