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

📄 nm.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
int	fout;int	cflg;int	nflg;int	uflg;int	rflg	1;int	gflg;int	pflg;struct	nl{	char	name[8];	int	typ;	int	*val;} *nlp;int	fi;int	buf[8];main(argc, argv)char **argv;{	int n, i, j;	int compare();	if (--argc > 0 && *argv[1] == '-') {		argv++;		while (*++*argv) switch (**argv) {		case 'n':			nflg++;			continue;		case 'c':			cflg++;			continue;		case 'g':			gflg++;			continue;		case 'u':			uflg++;			continue;		case 'r':			rflg = -1;			continue;		case 'p':			pflg ++;			continue;		default:			continue;		}		argc--;	}	if (argc==0)		fi = open("a.out", 0); else		fi = open(*++argv, 0);	if(fi < 0) {		printf("cannot open input\n");		exit();	}	read(fi, buf, 020);	if(buf[0]!=0407 && buf[0]!=0410 && buf[0]!=0411) {		printf("bad format\n");		exit();	}	seek(fi, buf[1], 1);		/* text */	seek(fi, buf[2], 1);		/* data */	if(buf[7] != 1) {		seek(fi, buf[1], 1);		seek(fi, buf[2], 1);	/* reloc */	}	n = ldiv(0, buf[4], 12);	if(n == 0) {		printf("no name list\n");		exit();	}	nlp = sbrk(12*n);	read(fi, nlp, n*12);	if (pflg==0)		qsort(nlp, n, 12, compare);	fout = dup(1);	close(1);	for(i=0; i<n; i++) {		if(gflg && (nlp->typ&040)==0)			goto out;		if(cflg) {			if(nlp->name[0] != '_')				goto out;			for(j=0; j<7; j++)				nlp->name[j] = nlp->name[j+1];			nlp->name[7] = '\0';		}		j = nlp->typ&037;		if(j > 4)			j = 1;		if(j==0 && nlp->val)			j = 5;		if(uflg && j!=0)			goto out;		if(!uflg) {			if(j==0)				printf("      "); else				printo(nlp->val);			printf("%c ", (nlp->typ&040? "UATDBC":"uatdbc")[j]);		}		printf("%.8s\n", nlp);	out:		nlp++;	}	flush();}compare(p1, p2)struct nl *p1, *p2;{	int a, i;	a = 0;	if(nflg) {		if(p1->val > p2->val) {			a = 1;			goto out;		}		if(p1->val < p2->val) {			a = -1;			goto out;		}	}	for(i=0; i<8; i++)	if(p1->name[i] != p2->name[i]) {		if(p1->name[i] > p2->name[i])			a = 1; else			a = -1;		goto out;	}out:	return(a*rflg);}printo(v){	int i;	printf("%c", v<0?'1':'0');	for(i=0; i<5; i++) {		printf("%c", ((v>>12)&7)+'0');		v =<<3;	}}

⌨️ 快捷键说明

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