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

📄 4.out.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
字号:
#ifndef lintstatic char sccsid[] = "@(#)4.out.c	4.1	(Berkeley)	2/11/83";#endif not lint#include <stdio.h>#include "def.h"#include "4.def.h"#include "3.def.h"outrat(v,tab,tabfirst)VERT v;int tab;		/* number of tabs to indent */LOGICAL tabfirst;	/* FALSE if doing IF of ELSE IF */	{	LOGICAL ndcomma;	VERT w;	int type,i;	type = NTYPE(v);	if (hascom[type])		prcom(v);	if (!LABEL(v) && type == FMTVX)		{		OUTSTR("#following unreferenced format statement commented out\n");		OUTSTR("#");		}	if (LABEL(v) && type != ITERVX)		{		ASSERT(tabfirst, outrat);		prlab(LABEL(v),tab);		}	else if (tabfirst && type != DUMVX && type != ITERVX)		TABOVER(tab);	switch(type)		{		case DUMVX:			newlevel(v,0,tab,YESTAB);			break;		case GOVX:			OUTSTR("go to ");			OUTNUM(LABEL(ARC(v,0)));			OUTSTR("\n");			break;		case STOPVX:			if (progtype != blockdata)				OUTSTR("stop\n");			break;		case RETVX:			OUTSTR("return\n");			break;		case BRKVX:			if (!levbrk)				{				ASSERT(LEVEL(v) == 1,outrat);				OUTSTR("break\n");				}			else				{				OUTSTR("break ");				OUTNUM(LEVEL(v));				OUTSTR("\n");				}			break;		case NXTVX:			if (!levnxt)				{				ASSERT(LEVEL(v) == 1,outrat);				OUTSTR("next\n");				}			else				{				OUTSTR("next ");				OUTNUM(LEVEL(v));				OUTSTR("\n");				}			break;		case ASGOVX:		case COMPVX:			OUTSTR("goto ");			if (type == ASGOVX)				{				OUTSTR(EXP(v));				OUTSTR(",");				}			OUTSTR("(");			for (i = ARCNUM(v)-1; i >=0; --i)		/* arcs were stored backward */				{				OUTNUM(LABEL(ARC(v,i)));				if (i > 0) OUTSTR(",");				}			OUTSTR(")");			if (type == COMPVX)				{				OUTSTR(",");				OUTSTR(EXP(v));				}			OUTSTR("\n");			break;		case ASVX:			OUTSTR("assign ");			OUTNUM(LABEL(LABREF(v)));			OUTSTR(" to ");			OUTSTR(EXP(v));			OUTSTR("\n");			break;		case IFVX:			OUTSTR("IF");			prpred(v,TRUE);			if (IFTHEN(v))				newlevel(v,THEN,tab+1,YESTAB);			else				{				newlevel(v,THEN,tab+1,YESTAB);				TABOVER(tab);				OUTSTR("ELSE ");				w = LCHILD(v,ELSE);				ASSERT(DEFINED(w),outrat);				if (NTYPE(w) == IFVX && !LABEL(w) && !DEFINED(RSIB(w)) &&					!HASBRACE(v,ELSE) )					newlevel(v,ELSE,tab,NOTAB);				else					newlevel(v,ELSE,tab+1,YESTAB);				}			break;		case ITERVX:			newlevel(v,0,tab,YESTAB);			ASSERT(DEFINED(NXT(v)),outrat);			if (LABEL(NXT(v)))				{				prlab(LABEL(NXT(v)),tab);				OUTSTR("continue\n");				}			break;		case DOVX:			OUTSTR("DO ");			OUTSTR(INC(v));			newlevel(v,0,tab+1,YESTAB);			break;		case LOOPVX:		case UNTVX:			OUTSTR("REPEAT");			newlevel(v,0,tab+1,YESTAB);			if (type == UNTVX)				{				TABOVER(tab+1);				OUTSTR("UNTIL");				ASSERT(DEFINED(ARC(v,0)),outrat);				prpred(LPRED(ARC(v,0)),TRUE);				OUTSTR("\n");				}			break;		case WHIVX:			OUTSTR("WHILE");			ASSERT(DEFINED(ARC(v,0)),outrat);			ASSERT(DEFINED(LPRED(ARC(v,0))),outrat);			prpred(LPRED(ARC(v,0)),TRUE);			newlevel(v,0,tab+1,YESTAB);			break;		case STLNVX:		case FMTVX:			prstln(v,tab);			break;		case SWCHVX:				OUTSTR("SWITCH");				if (DEFINED(EXP(v)))					{					OUTSTR("(");					OUTSTR(EXP(v));					OUTSTR(")");					}				newlevel(v,0,tab+1,YESTAB);				break;		case ICASVX:		case ACASVX:			OUTSTR("CASE ");			if (type == ACASVX)				prpred(v,FALSE);			else				OUTSTR(EXP(v));			OUTSTR(":\n");			newlevel(v,0,tab+1,YESTAB);			if (type == ACASVX &&DEFINED(LCHILD(v,ELSE)))				{				TABOVER(tab);				OUTSTR("DEFAULT:\n");				newlevel(v,1,tab+1,YESTAB);				}			break;		case IOVX:			OUTSTR(PRERW(v));			ndcomma = FALSE;			if (DEFINED(FMTREF(v)))				{				OUTNUM(LABEL(FMTREF(v)));				ndcomma = TRUE;				}			if (DEFINED(ARC(v,ENDEQ)))				{				if (ndcomma) 					OUTSTR(",");				OUTSTR("end = ");				OUTNUM(LABEL(ARC(v,ENDEQ)));				ndcomma = TRUE;				}			if (DEFINED(ARC(v,ERREQ)))				{				if (ndcomma)					OUTSTR(",");				OUTSTR("err = ");				OUTNUM(LABEL(ARC(v,ERREQ)));				ndcomma = TRUE;				}			OUTSTR(POSTRW(v));			OUTSTR("\n");			break;		}	}newlevel(v,ch,tab,tabfirst)VERT v;int ch;		/* number of lchild of v being processed */int tab;		/* number of tabs to indent */LOGICAL tabfirst;	/* same as for outrat */	{	LOGICAL addbrace;	VERT w;	if (NTYPE(v) == ACASVX || NTYPE(v) == ICASVX)		addbrace = FALSE;	else		addbrace = HASBRACE(v,ch);	ASSERT(tabfirst || !addbrace,newlevel);	if (addbrace)		OUTSTR(" {");	if(tabfirst && NTYPE(v)!=ITERVX && NTYPE(v)!=DUMVX) OUTSTR("\n");	for (w = LCHILD(v,ch); DEFINED(w); w = RSIB(w))		outrat(w,tab,tabfirst);	if (addbrace)		{		TABOVER(tab);		OUTSTR("}\n");		}	}prpred(v,addpar)VERT v;LOGICAL addpar;	{	if (addpar)		OUTSTR("(");	if (NEG(v)) OUTSTR("!(");	OUTSTR(PRED(v));	if (NEG(v)) OUTSTR(")");	if (addpar)		OUTSTR(")");	}prlab(n,tab)int n,tab;	{	TABOVER(tab);	OUTSTR("~");	OUTNUM(n);	OUTSTR(" ");	}prstln(v,tab)VERT v;int tab;	{	ASSERT(NTYPE(v) == STLNVX || NTYPE(v) == FMTVX,prstln);	if (!ONDISK(v))		{		OUTSTR(BEGCODE(v));		OUTSTR("\n");		}	else		{		empseek(BEGCODE(v));		prcode(ONDISK(v),tab);		}	}prcom(v)VERT v;	{	if (DEFINED(BEGCOM(v)))		{		empseek(BEGCOM(v));		comprint();		}	}

⌨️ 快捷键说明

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