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

📄 treetest.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ident "@(#)treetest.c	1.1 8/6/90 SMI"/* * Copyright (c) 1990 by Sun Microsystems, Inc */#include "faketest.h"struct sunromvec * romp;start(rp)struct sunromvec * rp;{	int root;	int fd;		/* setup global */	romp = rp;	/* print boot flags */	print_bootparam();	/* print memory lists */	print_memlist("physmemory", *romp->v_physmemory);	print_memlist("virtmemory", *romp->v_virtmemory);	print_memlist("availmemory", *romp->v_availmemory);	/* print device tree */	root = NEXT(0);	walk_and_print_tree(root, 0);	/* nowhere to go */	while(1);	/* 	 * /boot won't load files that have text smaller than about 8k	 *  pad for now	 */	asm(".text");	asm(".skip 0x2000");}walk_and_print_tree(node, indent)u_int node;u_int indent;{	char tmpname[32];	int cnode;	caddr_t	pname;	getprop(node, "name", tmpname);		tab(indent); printf("Node '%s'\n", tmpname);	tab(indent+1); printf("Defined Properties:\n");	for (pname = nextprop(node, NULL); pname; pname = nextprop(node, pname))		print_val(node, pname, indent+2);	printf("\n");			for (cnode = CHILD(node); cnode != 0 && cnode != -1; cnode = NEXT(cnode))		walk_and_print_tree(cnode, indent+1);}proptype(node, name)u_int node;caddr_t name;{	int size;	int type;	size = getproplen(node, name);	switch(size) {	      case 0:		type = XDRBOOL;		break;	      case 4:		type = XDRINT;		break;	      default:		type = XDRSTRING;		break;	}	return type;}print_memlist(name, memp)char *name;struct memlist *memp;{	printf("\n%s:\n", name);	for ( ; memp; memp = memp->next)		printf("\t0x%x 0x%x\n", memp->address, memp->size);	printf("\n");}print_val(node, name, indent)u_int node;caddr_t name;u_int indent;{	u_int val;	int type;	u_char c;	u_char d;	type = proptype(node, name);	getprop(node, name, &val);	/* XXX - 3 character names are a problem, any other ideas? */		c = *(u_char *)&val;	d = val & 0xff;		if (d == '\0' && isalpha(c))	    type = XDRSTRING;	tab(indent);	switch (type) {			      case XDRBOOL:		printf("Type=Boolean Property='%s'\n", name);		break;			      case XDRINT:		printf("Type=Integer Property='%s' Value=%d\n", name, val);		break;			      case XDRSTRING:		if (!strcmp("reg", name)) {			print_registers(node, indent+2);			break;;		} else if (!strcmp("range", name)) {			print_range(node, indent+2);			break;		} else			print_string(node, name, indent+2);		break;	      default:		break;	}}print_string(node, name, indent)u_int node;caddr_t name;u_int indent;{	u_char buf[32];	int len;	getprop(node, name, buf);	len = getproplen(node, name);	printf("Type=String Property='%s' Value='%s' Length=%d\n", name, buf, len);}	print_registers(node, indent)u_int node;u_int indent;{	int nreg;	struct dev_reg tmp_regs[8];	struct dev_reg *dp;	int i;	char *str = "reg";	int len;	nreg = (len = getproplen(node, str))/sizeof(struct dev_reg);	if (nreg) {		getlongprop(node, str, tmp_regs);		printf("Type=String Property='%s' Length=%d\n", str, len);		for (i = 0, dp = &tmp_regs[0]; i < nreg; ++i, ++dp) {			tab(indent);			printf("Bus Type=0x%x, Address=0x%x, Size=0x%x\n",			       dp->reg_bustype, dp->reg_addr, dp->reg_size);		}	}}print_range(node, indent)u_int node;u_int indent;{	int nreg;	struct dev_reg tmp_regs[8];	struct dev_reg *dp;	int i;	char *str = "range";	int len;	nreg = (len = getproplen(node, str))/sizeof(struct dev_reg);	if (nreg) {		getlongprop(node, str, tmp_regs);		printf("Type=String Property='%s' Length=%d\n", str, len);		for (i = 0, dp = &tmp_regs[0]; i < nreg; ++i, ++dp) {			tab(indent);			printf("Bus Type=0x%x, Address=0x%x, Size=0x%x\n",			       dp->reg_bustype, dp->reg_addr, dp->reg_size);		}	}}tab(indent)u_int indent;{	static int tabsize = 4;	int i;	while(indent--) {		i = tabsize;		while (i--)			putchar(' ');	}}print_bootparam(){	char **cp = (*romp->v_bootparam)->bp_argv;	printf("Boot Parameters:\n");	while (*cp) {		tab(1);		printf("%s\n", *cp);		++cp;	}	printf("\n");}

⌨️ 快捷键说明

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