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

📄 set.c

📁 mips架构的bootloader,99左右的版本 但源代码现在没人更新了
💻 C
字号:
/************************************************************* * File: mon/set.c * Purpose: Part of core Monitor * Author: Phil Bunce (pjb@carmel.com) * Revision History: *	970304	Start of revision history *	970409	Switched over to using addEnvRec *	970827	Fixed prob w "set foo". *	970820	Added value = 0 to addEnvRec. Needed for IMON. Symptom *		was bad ether downld to target. *	980715	Modified set_nvram() to write p2 marker. */#include <string.h>#include <mon.h>struct EnvRec monenvs[] = {	{"brkcmd","l @pc 1"},	{"datasz","-b","-b -h -w"},	{"inalpha","hex","hex symbol"},	{"inbase","16","auto 8 10 16"},	{"moresz","10"},	{"regstyle","sw","hw sw"},	{"rptcmd","trace","off on trace"},	{"trabort","^K"},	{"uleof","%"},	{"ulcr","off","off on"},	{"validpc","_ftext etext"},	{0}};EnvRec *envChain;FILE *dfp;int verbose;/**************************************************************  envinit()*/envinit(){int i;for (i=0;monenvs[i].name;i++) addEnvRec(&monenvs[i]);}Optdesc set_opts[] = {	{"[name [val]]","display/set variable"},	{"var","variable to be set"},	{"value","value to be assigned"},	{"nvram","store current settings in nvram"},	{0}};/**************************************************************  do_set(ac,av)*/do_set(ac,av)int ac;char *av[];{int i;EnvRec *p;#ifdef PMCC#ifdef NVRAMif (ac >= 2) {	if (strequ(av[1],"nvram")) {		if (nvCheck(0L)) set_nvram(ac-2,&av[2]);		else printf("nvram not supported\n");		return;		}	}#endif#endif		switch (ac) {	case 1 : /* display all variables */		for (p=envChain;p;p=p->next) printvar(p);		break;	case 2 : /* display specific variable */		for (p=envChain;p;p=p->next) 			if (strequ(av[1],p->name)) break;		if (p) printvar(p); /* 970827 */		else printf("%s: not found\n",av[1]);		break;	case 3 : /* set specific variable */		if (!setenv(av[1],av[2])) printf("%s: not found\n",av[1]);		break;	}}/**************************************************************  setenv(name,value)*/setenv(name,value)char *name,*value;{int i;EnvRec *p;for (p=envChain;p;p=p->next) 	if (strequ(name,p->name)) break;if (!p) return(0);if (p->value) free(p->value);p->value = strdup(value);if (p->func) (* p->func)(name,value);return(1);}/**************************************************************  printvar(i)*/printvar(p)EnvRec *p;{if (p->value == 0) 	printf("%10s = %-10s",p->name,"UNDEFINED");else if (strchr(p->value,' ')) 	printf("%10s = \"%s\"",p->name,p->value);else 	printf("%10s = %-10s",p->name,p->value);if (p->values) printf("  [%s]",p->values);printf("\n");}/**************************************************************  char *getMonEnv(name) *	returns pointer to current value of named variable */char *getMonEnv(name)char *name;{int i;EnvRec *p;for (p=envChain;p;p=p->next) 	if (strequ(name,p->name)) break;if (p == 0) return(0);return(p->value);}/**************************************************************  int setdMonEnv(name,value) *	set the value of decimal monitor env var. returns zero if*	undefined.*/int setdMonEnv(name,value)char *name;int value;{char tmp[20];sprintf(tmp,"%d",value);return setenv(name,tmp);}/**************************************************************  matchenv(name) *	returns integer corresponding to current value */matchenv(name)char *name;{int i,j;char *t,wrd[20];EnvRec *p;for (p=envChain;p;p=p->next) 	if (strequ(name,p->name)) break;if (p == 0) return(-1);if (p->value == 0) p->value = strdup("");for (j=0,t=p->values;;j++) {	t = getword(wrd,t);	if (t == 0) return(-2);	if (striequ(wrd,p->value)) return(j);	}}/**************************************************************  addEnvRec(p)*	add a EnvRec to the envChain*/addEnvRec(p)EnvRec *p;{EnvRec *q;char buf[LINESZ];p->next = 0;p->value = 0;if (!envChain) { /* empty */	envChain = p;	}else {	for (q=envChain;q->next;q=q->next) ; /* find end of chain */	q->next = p;	}sprintf(buf,"set %s '%s'",p->name,p->init);do_cmd(buf);}#ifdef PMCC#ifdef NVRAM/**************************************************************  set_nvram(ac,av)*/set_nvram(ac,av)int ac;char *av[];{int i,j;char tmp[80];Ulong adr;EnvRec *p;/* write nvram */adr = 0;for (p=envChain;p;p=p->next) {	if (p->value == 0) continue;	sprintf(tmp,"set %s \"%s\"\n",p->name,p->value);	for (j=0;j<strlen(tmp);j++,adr++) nvWrite(adr,tmp[j]);	}/* get stty settings */for (i=0;;i++) {	if (getstty(tmp,i)) break;	for (j=0;j<strlen(tmp);j++,adr++) nvWrite(adr,tmp[j]);	}/* write the p2 mark */nvWrite(adr++,'p');nvWrite(adr++,'2');nvWrite(adr++,'\n');/* get stuff from command line */for (i=0;i<ac;i++) {	if (i) nvWrite(adr++,' ');	for (j=0;j<strlen(av[i]);j++,adr++) nvWrite(adr,av[i][j]);	}if (ac > 0) nvWrite(adr++,'\n');nvWrite(adr,0);}#endif#endif/**************************************************************  do_diagsw(name,value)*	Called when the envvar "diag" is changed.*	"diag 0" turns diag off*	"diag 1" turns on diag level 1 with output to stdout*	"diag 2" turns on diag level 2 with output to stdout*	"diag 1:tty1" turns on diag level 1 with output to tty1*	"diag 2:tty1" turns on diag level 2 with output to tty1*/do_diagsw(name,value)char *name,*value;{char devname[20];int n;#if defined(VR4300) || defined(LR64388)/* the sscanf crashes on these processors. I have no idea why. */return;#endifif (dfp && dfp != stdout) fclose(dfp);dfp = 0;n = sscanf(value,"%d:%s",&verbose,devname);if (verbose == 0) return(0);switch (n) {	case 1 : /* verbose level only */		dfp = stdout;		break;	case 2 : /* verbose level + device name */		dfp = fopen(devname,"w");		if (dfp) break;		printf("can't open %s\n",devname);		break;	default:		printf("%s: bad value\n",value);	}return(0);}

⌨️ 快捷键说明

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