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

📄 pswt.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "gc.h"intswcmp(const void *a1, const void *a2){	C1 *p1, *p2;	p1 = (C1*)a1;	p2 = (C1*)a2;	if(p1->val < p2->val)		return -1;	return p1->val > p2->val;}voiddoswit(Node *n){	Case *c;	C1 *q, *iq;	long def, nc, i;	def = 0;	nc = 0;	for(c = cases; c->link != C; c = c->link) {		if(c->def) {			if(def)				diag(n, "more than one default in switch");			def = c->label;			continue;		}		nc++;	}	iq = alloc(nc*sizeof(C1));	q = iq;	for(c = cases; c->link != C; c = c->link) {		if(c->def)			continue;		q->label = c->label;		q->val = c->val;		q++;	}	qsort(iq, nc, sizeof(C1), swcmp);	if(debug['W'])	for(i=0; i<nc; i++)		print("case %2ld: = %.8llux\n", i, (vlong)iq[i].val);	for(i=0; i<nc-1; i++)		if(iq[i].val == iq[i+1].val)			diag(n, "duplicate cases in switch %lld", (vlong)iq[i].val);	if(def == 0) {		def = breakpc;		nbreak++;	}	swit1(iq, nc, def, n);}voidcas(void){	Case *c;	c = alloc(sizeof(*c));	c->link = cases;	cases = c;}longoutlstring(ushort *s, long n){	char buf[2];	int c;	long r;	if(suppress)		return nstring;	while(nstring & 1)		outstring("", 1);	r = nstring;	while(n > 0) {		c = *s++;		if(align(0, types[TCHAR], Aarg1)) {			buf[0] = c>>8;			buf[1] = c;		} else {			buf[0] = c;			buf[1] = c>>8;		}		outstring(buf, 2);		n -= sizeof(ushort);	}	return r;}voidnullwarn(Node *l, Node *r){	warn(Z, "result of operation not used");	if(l != Z)		cgen(l, Z);	if(r != Z)		cgen(r, Z);}voidieeedtod(Ieee *ieee, double native){	double fr, ho, f;	int exp;	if(native < 0) {		ieeedtod(ieee, -native);		ieee->h |= 0x80000000L;		return;	}	if(native == 0) {		ieee->l = 0;		ieee->h = 0;		return;	}	fr = frexp(native, &exp);	f = 2097152L;		/* shouldnt use fp constants here */	fr = modf(fr*f, &ho);	ieee->h = ho;	ieee->h &= 0xfffffL;	ieee->h |= (exp+1022L) << 20;	f = 65536L;	fr = modf(fr*f, &ho);	ieee->l = ho;	ieee->l <<= 16;	ieee->l |= (long)(fr*f);}

⌨️ 快捷键说明

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