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

📄 var.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "rc.h"#include "exec.h"#include "fns.h"inthash(char *s, int n){	int h = 0, i = 1;	while(*s) h+=*s++*i++;	h%=n;	return h<0?h+n:h;}#define	NKW	30struct kw{	char *name;	int type;	struct kw *next;}*kw[NKW];voidkenter(int type, char *name){	int h = hash(name, NKW);	struct kw *p = new(struct kw);	p->type = type;	p->name = name;	p->next = kw[h];	kw[h] = p;}voidkinit(void){	kenter(FOR, "for");	kenter(IN, "in");	kenter(WHILE, "while");	kenter(IF, "if");	kenter(NOT, "not");	kenter(TWIDDLE, "~");	kenter(BANG, "!");	kenter(SUBSHELL, "@");	kenter(SWITCH, "switch");	kenter(FN, "fn");}tree*klook(char *name){	struct kw *p;	tree *t = token(name, WORD);	for(p = kw[hash(name, NKW)];p;p = p->next)		if(strcmp(p->name, name)==0){			t->type = p->type;			t->iskw = 1;			break;		}	return t;}var*gvlook(char *name){	int h = hash(name, NVAR);	var *v;	for(v = gvar[h];v;v = v->next) if(strcmp(v->name, name)==0) return v;	return gvar[h] = newvar(strdup(name), gvar[h]);}var*vlook(char *name){	var *v;	if(runq)		for(v = runq->local;v;v = v->next)			if(strcmp(v->name, name)==0) return v;	return gvlook(name);}voidsetvar(char *name, word *val){	struct var *v = vlook(name);	freewords(v->val);	v->val = val;	v->changed = 1;}

⌨️ 快捷键说明

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