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

📄 shprint.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	"mk.h"static char *vexpand(char*, Envy*, Bufblock*);static char *shquote(char*, Rune, Bufblock*);static char *shbquote(char*, Bufblock*);voidshprint(char *s, Envy *env, Bufblock *buf){	int n;	Rune r;	while(*s) {		n = chartorune(&r, s);		if (r == '$')			s = vexpand(s, env, buf);		else {			rinsert(buf, r);			s += n;			s = copyq(s, r, buf);	/*handle quoted strings*/		}	}	insert(buf, 0);}static char *mygetenv(char *name, Envy *env){	if (!env)		return 0;	if (symlook(name, S_WESET, 0) == 0 && symlook(name, S_INTERNAL, 0) == 0)		return 0;		/* only resolve internal variables and variables we've set */	for(; env->name; env++){		if (strcmp(env->name, name) == 0)			return wtos(env->values, ' ');	}	return 0;}static char *vexpand(char *w, Envy *env, Bufblock *buf){	char *s, carry, *p, *q;	assert(/*vexpand no $*/ *w == '$');	p = w+1;	/* skip dollar sign */	if(*p == '{') {		p++;		q = utfrune(p, '}');		if (!q)			q = strchr(p, 0);	} else		q = shname(p);	carry = *q;	*q = 0;	s = mygetenv(p, env);	*q = carry;	if (carry == '}')		q++;	if (s) {		bufcpy(buf, s, strlen(s));		free(s);	} else 		/* copy name intact*/		bufcpy(buf, w, q-w);	return(q);}voidfront(char *s){	char *t, *q;	int i, j;	char *flds[512];	q = strdup(s);	i = getfields(q, flds, 512, 0, " \t\n");	if(i > 5){		flds[4] = flds[i-1];		flds[3] = "...";		i = 5;	}	t = s;	for(j = 0; j < i; j++){		for(s = flds[j]; *s; *t++ = *s++);		*t++ = ' ';	}	*t = 0;	free(q);}

⌨️ 快捷键说明

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