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

📄 movegen.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	<stdio.h>#include	"pic.h"#include	"y.tab.h"obj *movegen(void){	static double prevdx, prevdy;	int i, some;	double defx, defy, dx, dy;	obj *p;	obj *ppos;	static int xtab[] = { 1, 0, -1, 0 };	/* R=0, U=1, L=2, D=3 */	static int ytab[] = { 0, 1, 0, -1 };	Attr *ap;	defx = getfval("movewid");	defy = getfval("moveht");	dx = dy = some = 0;	for (i = 0; i < nattr; i++) {		ap = &attr[i];		switch (ap->a_type) {		case TEXTATTR:			savetext(ap->a_sub, ap->a_val.p);			break;		case SAME:			dx = prevdx;			dy = prevdy;			some++;			break;		case LEFT:			dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;			some++;			hvmode = L_DIR;			break;		case RIGHT:			dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;			some++;			hvmode = R_DIR;			break;		case UP:			dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;			some++;			hvmode = U_DIR;			break;		case DOWN:			dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;			some++;			hvmode = D_DIR;			break;		case TO:			ppos = ap->a_val.o;			dx = ppos->o_x - curx;			dy = ppos->o_y - cury;			some++;			break;		case BY:			ppos = ap->a_val.o;			dx = ppos->o_x;			dy = ppos->o_y;			some++;			break;		case FROM:		case AT:			ppos = ap->a_val.o;			curx = ppos->o_x;			cury = ppos->o_y;			break;		}	}	if (some) {		defx = dx;		defy = dy;	} else {		defx *= xtab[hvmode];		defy *= ytab[hvmode];	}	prevdx = defx;	prevdy = defy;	extreme(curx, cury);	curx += defx;	cury += defy;	extreme(curx, cury);	p = makenode(MOVE, 0);	dprintf("M %g %g\n", curx, cury);	return(p);}

⌨️ 快捷键说明

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