www.pudn.com > ucos_shell.rar > yyshellsub.c


#include   
 
extern xdata union ip_address_type my_ip_address;       //本机的ip地址 
extern xdata union ip_address_type temp_ip_address;     //临时变量 
extern xdata union ip_address_type mask_ip_address;     //子网掩码 
extern xdata union ip_address_type gateway_ip_address;	//网关的ip地址 
extern xdata union ip_address_type ping_ip_address;	//用于ping命令 
 
extern WORDTABLE WordTable; 
 
void DisplayTask(WORDTABLE *WordTable) reentrant//显示任务 
{ 
	PrintStr("\n\tDisplay Task command excuted.\n\n"); 
} 
 
void Kill(WORDTABLE *WordTable) reentrant//杀死任务 
{ 
	PrintStr("\n\tKill Task command excuted.\n\n"); 
} 
 
void PingCommand(WORDTABLE *WordTable) reentrant//ping命令 
{ 
	if(WordTable->Num==1) 
		PrintStr("\n\tPlease input IP address!\n\n"); 
	else{ 
		if(IPadrToHEX(WordTable->wt[1].Str,&ping_ip_address)==0){ 
			PrintStr("\n\tIP address error!\n\n");return; 
		} 
		else{	 
			//trans_pack(&txdnet,ping_ip_address,74,PINGTYPE); 
			PrintStr("\n\tPing command is excuted.\n\n");			 
		} 
	} 
} 
 
void UDPCommand(WORDTABLE *WordTable) reentrant//udp命令 
{ 
	if(WordTable->Num==1) 
		PrintStr("\n\tPlease input IP address!\n\n"); 
	else if(WordTable->Num==2){ 
		PrintStr("\n\tPlease input UDP data(String)!\n\n"); 
	} 
	else{ 
		if(IPadrToHEX(WordTable->wt[1].Str,&temp_ip_address)==0){ 
			PrintStr("\n\tIP address error!\n\n");return; 
		} 
		else{			 
			//make_udp(&txdnet,temp_ip_address,WordTable->wt[2].Str,strlen(WordTable->wt[2].Str)+1,1025); 
			PrintStr("\n\tUDP command is excuted.\n\n"); 
		} 
	} 
} 
 
void CfgHost(WORDTABLE *WordTable) reentrant//配置主机IP地址 
{ 
	unsigned char ipstr[16]; 
	union ip_address_type tmy_ip_address; 
	 
	if(WordTable->Num==1){ 
		//getadr(HOST,&my_ip_address.bytes[0]);//读出本机IP地址存到my_ip_address.bytes[4]里 
		PrintStr("\nHOST IP ADDRESS="); 
		HEXToIPadr(ipstr,&my_ip_address); 
		PrintStr(ipstr);PrintStr("\n\n");	 
	} 
	else{		 
		if(IPadrToHEX(WordTable->wt[1].Str,&tmy_ip_address)==0){ 
			PrintStr("\n\tIP address error!\n\n");return; 
		} 
		else{ 
			//getadr(HOST,&temp_ip_address.bytes[0]);//读出本机IP地址存到my_ip_address.bytes[4]里 
			temp_ip_address.dwords=my_ip_address.dwords; 
			 
			PrintStr("\nOLD HOST IP ADDRESS="); 
			HEXToIPadr(ipstr,&temp_ip_address); 
			PrintStr(ipstr);PrintStr("\n"); 
 
			//setadr(HOST,&tmy_ip_address.bytes[0]);			 
			//getadr(HOST,&my_ip_address.bytes[0]); 
			my_ip_address.dwords=tmy_ip_address.dwords; 
			 
			PrintStr("\nNEW HOST IP ADDRESS="); 
			HEXToIPadr(ipstr,&my_ip_address); 
			PrintStr(ipstr);PrintStr("\n\n"); 
		}		 
	} 
} 
 
void CfgMask(WORDTABLE *WordTable) reentrant//配置子网掩码 
{ 
	unsigned char ipstr[16]; 
	union ip_address_type tmask_ip_address; 
 
	if(WordTable->Num==1){ 
		//getadr(MASK,&mask_ip_address.bytes[0]);//读出本机掩码存到mask_ip_address.bytes[4]里 
		PrintStr("\nSUBNET MASK="); 
		HEXToIPadr(ipstr,&mask_ip_address); 
		PrintStr(ipstr);PrintStr("\n\n"); 
	} 
	else{		 
		if(IPadrToHEX(WordTable->wt[1].Str,&tmask_ip_address)==0){ 
			PrintStr("\n\tSUBNET MASK error!\n\n");return; 
		} 
		else{ 
			//getadr(MASK,&temp_ip_address.bytes[0]);//读出本机IP地址存到my_ip_address.bytes[4]里 
			temp_ip_address.dwords=mask_ip_address.dwords; 
			 
			PrintStr("\nOLD SUBNET MASK="); 
			HEXToIPadr(ipstr,&temp_ip_address); 
			PrintStr(ipstr);PrintStr("\n"); 
 
			//setadr(MASK,&tmask_ip_address.bytes[0]); 
			//getadr(MASK,&mask_ip_address.bytes[0]); 
			mask_ip_address.dwords=tmask_ip_address.dwords; 
			 
			PrintStr("\nNEW SUBNET MASK="); 
			HEXToIPadr(ipstr,&mask_ip_address); 
			PrintStr(ipstr);PrintStr("\n\n");			 
		}		 
	} 
} 
 
void CfgGateway(WORDTABLE *WordTable) reentrant//配置网关IP地址 
{ 
	unsigned char ipstr[16]; 
	union ip_address_type tgateway_ip_address; 
 
	if(WordTable->Num==1){ 
		//getadr(GATEWAY,&gateway_ip_address.bytes[0]);//读出网关IP地址存到gateway_ip_address.bytes[4]里		 
		PrintStr("\nGATEWAY IP ADDRESS="); 
		HEXToIPadr(ipstr,&gateway_ip_address); 
		PrintStr(ipstr);PrintStr("\n\n"); 
	} 
	else{		 
		if(IPadrToHEX(WordTable->wt[1].Str,&tgateway_ip_address)==0){ 
			PrintStr("\n\tIP address error!\n\n");return; 
		} 
		else{ 
			//getadr(GATEWAY,&temp_ip_address.bytes[0]);//读出本机IP地址存到my_ip_address.bytes[4]里 
			temp_ip_address.dwords=gateway_ip_address.dwords; 
			 
			PrintStr("\nOLD GATEWAY IP ADDRESS="); 
			HEXToIPadr(ipstr,&temp_ip_address); 
			PrintStr(ipstr);PrintStr("\n"); 
 
			//setadr(GATEWAY,&tgateway_ip_address.bytes[0]); 
			//getadr(GATEWAY,&gateway_ip_address.bytes[0]); 
			gateway_ip_address.dwords=tgateway_ip_address.dwords; 
			 
			PrintStr("\nNEW GATEWAY IP ADDRESS="); 
			HEXToIPadr(ipstr,&gateway_ip_address); 
			PrintStr(ipstr);PrintStr("\n\n"); 
		}		 
	} 
} 
 
void PrintConfig(WORDTABLE *WordTable) reentrant//显示配置信息 
{ 
	unsigned char ipstr[16]; 
 
	PrintStr("\nConfig options:\n"); 
	/* 
	getadr(MACADR,&my_ethernet_address.bytes[0]);//读出主机MAC地址存到my_ethernet_address里	 
	PrintStr("\nHOST MAC ADDRESS="); 
	PrintWord(my_ethernet_address.words[0]);PrintStr(" "); 
	PrintWord(my_ethernet_address.words[1]);PrintStr(" "); 
	PrintWord(my_ethernet_address.words[2]);PrintStr("\n"); 
		 
	page(1);//init 8019as PAR 
	reg01=my_ethernet_address.bytes[0]; 
	reg02=my_ethernet_address.bytes[1]; 
	reg03=my_ethernet_address.bytes[2]; 
	reg04=my_ethernet_address.bytes[3]; 
	reg05=my_ethernet_address.bytes[4]; 
	reg06=my_ethernet_address.bytes[5];	 
 
	page(0); 
	reg00=0x22; 
	*/ 
	//getadr(HOST,&my_ip_address.bytes[0]);//读出本机IP地址存到my_ip_address.bytes[4]里 
	PrintStr("HOST IP ADDRESS="); 
	HEXToIPadr(ipstr,&my_ip_address); 
	PrintStr(ipstr);PrintStr("\n"); 
 
	//getadr(GATEWAY,&gateway_ip_address.bytes[0]);//读出网关IP地址存到gateway_ip_address.bytes[4]里 
	PrintStr("GATEWAY IP ADDRESS="); 
	HEXToIPadr(ipstr,&gateway_ip_address); 
	PrintStr(ipstr);PrintStr("\n"); 
 
	//getadr(MASK,&mask_ip_address.bytes[0]);//读出本机掩码存到mask_ip_address.bytes[4]里 
	PrintStr("SUBNET MASK="); 
	HEXToIPadr(ipstr,&mask_ip_address); 
	PrintStr(ipstr);PrintStr("\n\n"); 
 
	/* 
	getadr(SNMPHOST,&SNMP_ip_address.bytes[0]);//读出SNMP网管主机IP地址存到SNMP_ip_address.bytes[4]里	 
	PrintStr("SNMPHOST IP ADDRESS="); 
	HEXToIPadr(ipstr,&SNMP_ip_address); 
	PrintStr(ipstr);PrintStr("\n\n");*/ 
} 
 
void DisplayHelpMenu(WORDTABLE *WordTable) reentrant//显示帮助采单 
{ 
	PrintStr("\n"); 
	PrintStr("\tlt        Display active task.\n"); 
	PrintStr("\tkill      Kill active task.\n"); 
	PrintStr("\tping/udp  net command.\n"); 
	PrintStr("\tConfigNet host/mask/gateway/ipcfg.\n");	 
	PrintStr("\tclr       Clear screen.\n");	 
	PrintStr("\texit      Exit.(this command is limited here.)\n"); 
	PrintStr("\thelp      Display this menu.\n\n"); 
} 
 
bit IPadrToHEX(unsigned char *Str,union ip_address_type *ip) 
{ 
	unsigned char i,j,ch,x; 
 
	ch=*Str++; 
 
	for(j=0;j<3;j++){ 
		x=0; 
		for(i=0;i<4;i++){ 
			if(ch=='.') {ch=*Str++;break;} 
			else if(i==3) return 0; 
			else if(ch<0&&ch>9) return 0; 
			else 
				x=10*x+(ch-'0'); 
			ch=*Str++; 
		} 
		ip->bytes[j]=x; 
	} 
 
	x=0; 
	for(i=0;i<4;i++){ 
		if(ch=='\0') {ch=*Str++;break;} 
		else if(i==3) return 0; 
		else if(ch<0&&ch>9) return 0; 
		else 
			x=10*x+(ch-'0'); 
		ch=*Str++; 
	} 
	ip->bytes[3]=x; 
	return 1; 
} 
 
void HEXToIPadr(unsigned char *Str,union ip_address_type *ip) 
{ 
	unsigned char i; 
	unsigned char x,y; 
 
	for(i=0;i<4;i++){ 
		x=ip->bytes[i]; 
		if(x>99){ 
			y=x/100;*Str++=y+'0'; 
			x=x-100*y;y=x/10;*Str++=y+'0'; 
			x=x-10*y;*Str++=x+'0'; 
			if(i==3) *Str++='\0'; 
			else *Str++='.'; 
		} 
		else if(x>9){ 
			y=x/10;*Str++=y+'0'; 
			x=x-10*y;*Str++=x+'0'; 
			if(i==3) *Str++='\0'; 
			else *Str++='.'; 
		} 
		else{ 
			*Str++=x+'0'; 
			if(i==3) *Str++='\0'; 
			else *Str++='.'; 
		} 
	}	 
}