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

📄 file.c

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 C
字号:
int in;int i 0;char buf[512];int *wd {	&buf[0]};char *fort[]{	"function","subroutine","common","dimension","block","integer",	"real","data","double",0};char *asc[]{	"sys","mov","tst","clr","jmp",0};char *c[]{	"int","char","float","double","struct","extern",0};char *as[]{	"globl","byte","even","text","data","bss","comm",0};int ibuf[260];main(argc, argv)char **argv;{	while(argc > 1) {		printf("%s:	", argv[1]);		type(argv[1]);		argc--;		argv++;	}}type(file)char *file;{	int j,nl;	char ch;	int mbuf[20];	if(stat(file, mbuf) < 0) {		printf("cannot stat\n");		return;	}	switch(mbuf[2]&060000) {	case 020000:		printf("character");		goto spcl;	case 040000:		printf("directory\n");		return;	case 060000:		printf("block");spcl:		printf(" special (%d/%d)\n",		(mbuf[6]>>8)&0377,		mbuf[6]&0377);		return;	}	ibuf[0] = open(file, 0);	if(ibuf[0] < 0) {		printf("cannot open\n");		return;	}	in = read(ibuf[0], buf, 512);	switch(*wd) {	case 0407:		printf("executable\n");		goto out;	case 0410:		printf("pure executable\n");		goto out;	case 0411:		printf("separate executable\n");		goto out;	case 0177555:		printf("archive\n");		goto out;	}	i = 0;	if(ccom() == 0)goto notc;	while(buf[i] == '#'){		j = i;		while(buf[i++] != '\n'){			if(i - j > 255){				printf("data\n"); 				goto out;			}			if(i >= in)goto notc;		}		if(ccom() == 0)goto notc;	}check:	if(lookup(c) == 1){		while((ch = buf[i++]) != ';' && ch != '{')if(i >= in)goto notc;		printf("c program");		goto outa;	}	nl = 0;	while(buf[i] != '('){		if(buf[i] <= 0){			printf("data\n"); 			goto out; 		}		if(buf[i] == ';'){			i++; 			goto check; 		}		if(buf[i++] == '\n')			if(nl++ > 6)goto notc;		if(i >= in)goto notc;	}	while(buf[i] != ')'){		if(buf[i++] == '\n')			if(nl++ > 6)goto notc;		if(i >= in)goto notc;	}	while(buf[i] != '{'){		if(buf[i++] == '\n')			if(nl++ > 6)goto notc;		if(i >= in)goto notc;	}	printf("c program");	goto outa;notc:	i = 0;	while(buf[i] == 'c' || buf[i] == '#'){		while(buf[i++] != '\n')if(i >= in)goto notfort;	}	if(lookup(fort) == 1){		printf("fortran");		goto outa;	}notfort:	i=0;	if(ascom() == 0)goto notas;	j = i-1;	if(buf[i] == '.'){		i++;		if(lookup(as) == 1){			printf("assembler program"); 			goto outa;		}		else if(buf[j] == '\n'){			printf("roff, nroff, or eqn input");			goto outa;		}	}	while(lookup(asc) == 0){		if(ascom() == 0)goto notas;		while(buf[i] != '\n' && buf[i++] != ':')			if(i >= in)goto notas;		while(buf[i] == '\n' || buf[i] == ' ' || buf[i] == '\t')if(i++ >= in)goto notas;		j = i-1;		if(buf[i] == '.'){			i++;			if(lookup(as) == 1){				printf("assembler program"); 				goto outa; 			}			else if(buf[j] == '\n'){				printf("roff, nroff, or eqn input");				goto outa;			}		}	}	printf("assembler program");	goto outa;notas:	for(i=0; i < in; i++)if(buf[i] <= 0){		printf("data\n"); 		goto out; 	}	if((mbuf[2] & 00111) != 0)		printf("commands");	else printf("probably text");outa:	while(i < in)		if(buf[i++] <= 0){			printf(" with garbage\n");			goto out;		}	while((in = read(ibuf[0],buf,512)) > 0)		for(i = 0; i < in; i++)			if(buf[i] <= 0){				printf(" with garbage\n");				goto out;			}	printf("\n");out:	close(ibuf[0]);}lookup(tab)char *tab[];{	char r;	int k,j,l;	while(buf[i] == ' ' || buf[i] == '\t' || buf[i] == '\n')i++;	for(j=0; tab[j] != 0; j++){		l=0;		for(k=i; ((r=tab[j][l++]) == buf[k] && r != '\0');k++);		if(r == '\0')			if(buf[k] == ' ' || buf[k] == '\n' || buf[k] == '\t'			    || buf[k] == '{' || buf[k] == '/'){				i=k;				return(1);			}	}	return(0);}ccom(){	char cc;	while((cc = buf[i]) == ' ' || cc == '\t' || cc == '\n')if(i++ >= in)return(0);	if(buf[i] == '/' && buf[i+1] == '*'){		i =+ 2;		while(buf[i] != '*' || buf[i+1] != '/'){			if(buf[i] == '\\')i =+ 2;			else i++;			if(i >= in)return(0);		}		if((i =+ 2) >= in)return(0);	}	if(buf[i] == '\n')if(ccom() == 0)return(0);	return(1);}ascom(){	while(buf[i] == '/'){		i++;		while(buf[i++] != '\n')if(i >= in)return(0);		while(buf[i] == '\n')if(i++ >= in)return(0);	}	return(1);}

⌨️ 快捷键说明

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