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

📄 vtread.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include "stdinc.h"#include <bio.h>typedef struct Source Source;struct Source{	ulong gen;	int psize;	int dsize;	int dir;	int active;	int depth;	uvlong size;	uchar score[VtScoreSize];	int reserved;};int bsize;Biobuf *bout;int ver;int cmp;int all;int find;uchar fscore[VtScoreSize];int dirSize;void (*parse)(Source*, uchar*);VtSession *z;int vtGetUint16(uchar *p);ulong vtGetUint32(uchar *p);uvlong vtGetUint48(uchar *p);void usage(void);int parseScore(uchar *score, char *buf, int n);void parse1(Source*, uchar*);void parse2(Source*, uchar*);int dumpDir(Source*, int indent);voidmain(int argc, char *argv[]){	char *host = nil;	uchar score[VtScoreSize];	uchar buf[VtMaxLumpSize];	int type;	int n;		type = VtDataType;	ARGBEGIN{	case 't':		type = atoi(ARGF());		break;	default:		usage();		break;	}ARGEND	vtAttach();	bout = vtMemAllocZ(sizeof(Biobuf));	Binit(bout, 1, OWRITE);	if(argc != 1)		usage();	vtAttach();	fmtinstall('V', vtScoreFmt);	fmtinstall('R', vtErrFmt);	z = vtDial(host, 0);	if(z == nil)		vtFatal("could not connect to server: %s", vtGetError());	if(!vtConnect(z, 0))		sysfatal("vtConnect: %r");	if(!parseScore(score, argv[0], strlen(argv[0])))		vtFatal("could not parse score: %s", vtGetError());	n = vtRead(z, score, type, buf, VtMaxLumpSize);	if(n < 0)		vtFatal("could not read block: %s", vtGetError());	Bwrite(bout, buf, n);	Bterm(bout);	vtClose(z);	vtDetach();	exits(0);}voidusage(void){	fprint(2, "%s: [-t type] score\n", argv0);	exits("usage");}intparseScore(uchar *score, char *buf, int n){	int i, c;	memset(score, 0, VtScoreSize);	if(n < VtScoreSize*2)		return 0;	for(i=0; i<VtScoreSize*2; i++) {		if(buf[i] >= '0' && buf[i] <= '9')			c = buf[i] - '0';		else if(buf[i] >= 'a' && buf[i] <= 'f')			c = buf[i] - 'a' + 10;		else if(buf[i] >= 'A' && buf[i] <= 'F')			c = buf[i] - 'A' + 10;		else {			return 0;		}		if((i & 1) == 0)			c <<= 4;			score[i>>1] |= c;	}	return 1;}

⌨️ 快捷键说明

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