📄 yhnew3.c
字号:
.done_input=done_system,
//.prasePam=prase_pam,
},
{
.index=23,
.Key_input="/confile",
.description_info="execute configure file",
.validate=vali_date_d_dhcp,
.done_input=done_configfile,
//.prasePam=prase_pam,
}
};
/****************************************/
/******************/
void showi(int i)
{
switch (i )
{
case 0:
printf("/? \t\tDisplay this help screen\n");
printf("/Screen=0/1 \tSummary Screen\n\t0:Disable\n\t1:Enable\n");
printf("/Halt=0/1 \tHalt on POST Errors\n\t0:No halt\n\t1:All errors\n");
printf("/OS=0-4 \tInstall OS\n\t0:Other\n\t1:Win95\n\t2:Win98\n\t3:Winme \n\t4:Win2K/XP \n");
//printf("/PXE_N1=0/1 \tNIC1 with PXE\n\t0:Enabled\n\t1:Disable\n");
//printf("/PXE_N2=0/1 \tNIC2 with PXE\n\t0:Enabled\n\t1:Disable\n");
printf("/Action=0-2 \tAction After Power Failure\n\t0: Stay off\n\t1:Last state\n\t2:Power on \n");
printf("/Disk_A=0-5 \tLegacy Diskette A\n\t0:Disable\n\t1:360kb\n\t2:1.2MB\n\t3:720Kb\n\t4:1.44/1.25MB\n\t5:2.88MB\n");
//printf("/Boot=0-13 \tBoot Device Priority\n\t0:USB Key\n");
break;
case 1:
printf("/Classis=0/1 \tClassis Intrusion\n\t0:No\n\t1:Yes\n");
printf("/Qboot=0/1 Quick Boot Mode\n\t0:Disable\n\t1:Enable\n");
printf("/dd \tDisplay BMC LAN Configuation\n");
printf("/dhcp \tEnable BMC DHCP\n");
printf("/ip=x.x.x.x \tSet BMC LAN parameters IP address=x.x.x.x\n");
printf("/net=x.x.x.x \tSet BMC LAN parameters netmask=x.x.x.x\n");
printf("/gateway=x.x.x.x \tSet BMC LAN parameters gateway=x.x.x.x\n");
//printf("/mac=x.x.x.x.xx \tSet LAN MAC address=x.x.x.x.x.x\n");
//printf("/uname=xxx \tSet BMC users name\n");
//printf("/Order=xxx \tSet boot order=xxx\n");
//printf("/Hard_o=xxx \tSet hard drive(s) order=xxx\n");
printf("/Time= hh:mm:ss \tCurrent time\n");
printf("/Date= mm-dd-yy \tCurrent Date\n");
printf("/users=xxx Read and Set BCM user name\n");
;
//printf("/Power=0/1 \tPower Button Off\n\t0:Enabled\n\t1:Disable\n");
printf("/Con_s=0-2 \tSerial console redirection\n\t0: disable\n\t1:on-board com1 \n\t2:on-board com2.\n");
printf("/Con_post=0/1 Continue C.R after Post\n\t0:off\n\t1:on\n");
printf("/Con_con=0/1 \tControl connection of Serial consol\n\t0:Direct\n\t1:Via Modem\n");
//printf("/con_file=filename \texecute configure file\n");
break;
case 2:
//printf("/Con_con=0/1 \tControl connection of Serial consol\n\t0:Direct\n\t1:Via Modem\n");
printf("/Con_fc=0-2 \tFlow control of Serial consol\n\t0:None\n\t1:Xon/Xoff\n\t2:CTS/RTS\n");
printf("/Con_type=0-6 \tSet Console Type \n\t0:VT100\n\t1:VT100,8bit\n\t2:PC-ANSI,7bit\n\t3:PC-ANSI\n\t4:VT100t\n\t5:VT-UTF8\n\t6:ASCII\n");
printf("/Con_rate=0-7 \tRate of Serial port\n\t0:300\n\t1:1200\n\t2:2400\n\t3:9600\n\t4:19.2k\n\t5:38.4k\n\t6:57.6k\n\t7:115.2K.\n");
//printf("/ACPI=0/1 ACPI\n\t0:No\n\t1:Yes\n");
//printf("/A_sx=0/1 Enable ACPI_Sx\n\t0:S1\n\t1:S3\n");
printf("/Boot=0-13 \tBoot Device Priority\n\t0:USB Key\n\t1:IDE2 SATA0\n");
//printf("/Video=0-2 Default Primary Video Adapter\n\t0:Onboard VGA\n\t1:PCI-E x8 Slot\n\t2:PCI-E x16 Slot\n");
//printf("/Con_type=0-6 \tSet Console Type \n\t0:VT100\n\t1:VT100,8bit\n\t2:PC-ANSI,7bit\n");
break;
case 3:
printf("\t2:2400\n\t3:9600\n\t4:19.2k\n\t5:38.4k\n\t6:57.6k\n\t7:115.2K.\n");
printf("/Con_con=0/1 \tControl connection of Serial consol\n\t0:Direct\n\t1:Via Modem\n");
printf("/Boot=0-13 \tBoot Device Priority\n\t0:USB Key\n\t1:IDE2 SATA0\n\t2:IDE3 SATA1\n\t3:IDE4 SATA2\n\t4:IDE5 SATA3\n\t5:IDE CDROM\n\t6:PCI BEV: IBA\n\t7:PCI BEV: 1IBA \n\t8:PCI BEV: 2IBA \n\t9:Boot add Cards \n\t10: Legacy Network Card\n\t11:Legacy Diskette A\n\t12:Floppy\n\t13:PCI SCSI\n");
//printf("/Quiet=0/1 Quiet Boot Mode\n\t0:Disable\n\t1:Enable\n");
break;
}
return;
}
void usage(void)
{
char ch;
int i=0;
showi(i);
do
{
ch = getch();
if ( ch == 0 )
ch = getch();
switch ( ch )
{
case 0x50: //down
if((++i)>3)
{i=3;}
showi(i);
break;
case 0x48: //up
if((--i)<0)
{i=0;}
showi(i);
break;
}
}while( ch !=0x0d); //ESC
return;
}
/******************/
int main( int argc, char *argv[] )
{ int i,j;
char *pam[32];
printf("******************************************************************\n");
printf("* BIOS Config Utility *\n");
printf("******************************************************************\n");
if((argc == 1)||(argc==2 &&(!(strncmp(argv[1],"/?",2)))))
{
usage();
return 0;
}
__initCMOS();
//printf("bios init done\n");
//printf("**********cmosstruct.value*******\n");
//for(k=0;k<200;k++)
// {printf("value[ %d ]=%x\n",k,cmosstruct.tokenValue[k]);}
//head=(struct link_type *)malloc(sizeof(struct link_type));
bcu_init();
//print_link();
//printf("bcu init done\n");
//for(k=0;k<22;k++)
//{printf("bcu[ %d ].pos losation= %d current=%d\n",k,bcu[k].pos_location,bcu[k].currentValue);}
i=argc;
//printf("*************\n");
for(j=1;j<i;j++)
{pam[j]=argv[j];
donepam(pam[j]);
};
//printf("the endyh\n");
__exitCMOS();
//printf("the end\n");
return 0;
}
void bcu_init()
{
int i;
//printf("**********1**********\n");
for(i=0;i<17;i++)
{
bcu[i].token_index=getTokenItemIndex(bcu[i].start_post,bcu[i].media);
bcu[i].currentValue=bcu[i].readValue(bcu[i].token_index);
//printf("bcu[ %d ]=%d\t",i,bcu[i].currentValue);
//bcu[i].showValue(bcu[i]);
//printf("pos_location= %d\n",bcu[i].pos_location);
//printf("pos_location= %d\n",bcu[i].optionValue[1]);
}
return;
}
void donepam(char *pam)
{
int k;
int tag=0;
//printf("pam=%s\n",pam);
//printf("tag= %d\n",tag);
k=0;
while(k<17)
{
if(!(strncmp(pam,bcu[k].Key_input, strlen(bcu[k].Key_input))))
{tag=k+1;
k++;
}
else
k++;
}
while((k>=17)&&(k<24))
{
//printf("bcu_o[k-23].Key_input=%s\n",bcu_o[k-23].Key_input);
if(!(strncmp(pam,bcu_o[k-17].Key_input, strlen(bcu_o[k-17].Key_input))))
{tag=k+1;
k++;
}
else
k++;
}
//printf("tag= %d\n",tag);
if(tag==0)
{printf("parameter error\n"); }
else
{
k=0;
while(k<17)
{
if(!(strncmp(pam,bcu[k].Key_input, strlen(bcu[k].Key_input))))
{
int i;
char *temp;
temp= strstr(pam, "=");
if(temp==NULL)
{ bcu[k].showValue(bcu[k]);}
else
{
temp=temp+1;
para_long=strlen(temp);
strncpy(time_input,temp,para_long);
i=atoi(temp);
if(bcu[k].validate(bcu[k],i))
{
bcu[k].currentValue=bcu[k].prasePam(bcu[k],i);
bcu[k].writeValue(bcu[k].token_index,bcu[k].currentValue);
bcu[k].showValue(bcu[k]);
}
}
break;
}
k++;
//break;
}
while((k>=17)&&(k<24))
{
if(!(strncmp(pam,bcu_o[k-17].Key_input, strlen(bcu_o[k-17].Key_input))))
{
char *temp;
temp= strstr(pam, "=");
if(temp==NULL)
{para=0;}
else
{para=1;}
//printf("para_long=%d\n",para);
temp++;
para_long=strlen(temp);
strncpy(time_input,temp,para_long);
if(bcu_o[k-17].validate())
{
bcu_o[k-17].done_input(bcu_o[k-17].Key_input);
}
break;
}
k++;
}
}
//printf("end donepam\n");
return ;
}
void show_value(struct yhCmosstruct current_bcu)
{
int itemnum;
int temp;
int i,j;
j=0;
itemnum=1;
temp=1;
for(temp=1;current_bcu.optionValue[temp]!=100;temp++)
{itemnum++;}
for(i=0;i<itemnum;i++)
{
if (current_bcu.currentValue==current_bcu.cbit[i])
{j=i;}
}
printf("%s is %s\n",current_bcu.description_info,current_bcu.optiondesction[j]);
return;
}
unsigned short prase_pam(struct yhCmosstruct current_bcu,int paminput)
{
return current_bcu.cbit[paminput];
}
int vali_date(struct yhCmosstruct current_bcu,int paminut)
{
int i,j;
i=1;
j=1;
while(current_bcu.optionValue[i]!=100)
{
j++;
i++;
}
/*if((current_bcu.index==13||current_bcu.index==14||current_bcu.index==15||current_bcu.index==16||current_bcu.index==17)&&(bcu[12].currentValue==0))
{
printf("Set serial console redirection is disabled\n");
i=0;}
//printf("option number= %d\n",j);
else
*/if((paminut<0)||(paminut>=j))
{printf("param input error,it must in %d-%d\n",current_bcu.optionValue[0],current_bcu.optionValue[j-1]);
i=0;}
return i;
}
int vali_date_d_dhcp(void)
{
int tag;
tag=1;
return tag;
}
int vali_date_ip_gw()
{
int i,j;
int a[4];
j=1;
sscanf(time_input, "%d.%d.%d.%d", &a[0],&a[1],&a[2],&a[3]);
for(i=0;i<4;i++)
{if(a[i]<0||a[i]>255)
{j=0;}
}
if(j==0)
{printf("error input, ipaddress need in 0-255.0-255.0-255.0-255\n");}
return j;
}
int vali_date_mask()
{
int i,j;
int mask[4];
j=1;
sscanf(time_input, "%d.%d.%d.%d", &mask[0],&mask[1],&mask[2],&mask[3]);
if(mask[0]!=255)
{j=0;}
for(i=1;i<3;i++)
{ if((mask[i]!=0)&&(mask[i]!=255))
{j=0; }
}
if(mask[3]!=0)
{j=0;}
if(j==0)
{printf("error netmask need be one of 255.0.0.0 or 255.255.0.0 255.255.255.0\n");}
return j;
}
int vali_date_mac()
{
int tag=1;
int strl;
int i;
char a[12];
strl=strlen(time_input);
//printf("strlen input %d\n",strl);
if(strl!=17)
{tag=0;}
sscanf(time_input, "%c%c:%c%c:%c%c:%c%c:%c%c:%c%c", &a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9],&a[10],&a[11]);
//printf("%s\n",a);
for(i=0;i<12;i++)
{ if((a[i]<48)||(a[i]>57&&a[i]<64)||(a[i]>70&&a[i]<96)||(a[i]>102))
{tag=0;}
}
if(tag==0)
{printf("error input, MAC need in 00-FF. 00-FF. 00-FF. 00-FF. 00-FF. 00-FF\n");}
return tag;
}
unsigned short boot_device_read(unsigned short useless)
{
int i,j,k;
unsigned short temp;
unsigned short location[8]={0x015e,0x0164,0x016a,0x0288,0x028e,0x0294,0x029a,0x02a0};
// unsigned short start_pos=0x015e;
//printf("run read\n");
for(i=0;i<8;i++)
{
temp=getTokenItemIndex(location[i],0);
current_bootvlaue[i]=getTokenItemValue(temp);
//printf("current_bootvlaue[%d]=%d\n",i,current_bootvlaue[i]);
//start_pos=start_pos+0x06;
}
//pxe_check();
j=0;
//while(current_bootvlaue[j]!=63)
// {j++;}
//device_num=j;
//t=0;
//for(t=0;t<8;t++)
//{printf("%d\t",current_bootvlaue[t]);}
// device_num=8;
for(i=0;i<8;i++)
{
//printf("current_bootvlaue[%d]=%d\n",i-1, current_bootvlaue[i-1]);
j=15;
for(k=0;k<14;k++)
{if (current_bootvlaue[i]==Bootdevicedefault[k].member)
{j=k;}
}
Bootdevice[i+1]=Bootdevicedefault[j];
// printf("%d -%d \t", i,Bootdevice[i].member);
}
creat_link();
return 1;
}
unsigned short boot_device_write(unsigned short useless1, unsigned short useless2)
{
int i;
unsigned short temp;
unsigned short location[8]={0x015e,0x0164,0x016a,0x0288,0x028e,0x0294,0x029a,0x02a0};
// unsigned short start_pos=0x015e;
for(i=0;i<8;i++)
{
temp=getTokenItemIndex(location[i],0);
setTokenItemValue(temp,current_bootvlaue[i]);
//start_pos=start_pos+0x06;
}
return 1;
}
void boot_device_show(struct yhCmosstruct current_bcu)
{ /* int j;
j=0;
while(current_bootvlaue[j]!=63)
{j++;}
//printf("j=%d\n",j);
device_num=j;
printf("%s:\n",current_bcu.description_info);
for(i=0;i<device_num;i++)
{ //printf("current_bootvlaue[%d]=%d",i, current_bootvlaue[i]);
j=0;
for(k=0;k<10;k++)
{if (current_bootvlaue[i]==current_bcu.cbit[k])
{j=k;}
}
printf("%s\n",current_bcu.optiondesction[j]);
}
//for(n=0;n<device_num;n++)
//{printf("%s\n",current_bcu.optiondesction[j]);}
*/
print_link();
return;
}
unsigned short boot_device_prase_pam(struct yhCmosstruct current_bcu,int paminput)
{
/*int temp[8];
int m,n;
int i,j,k;
//unsigned temp_value;
//int temp_location;
m=paminput;
j=para_long;
n=1;
for(k=0;k<j-1;k++)
{n=n*10;}
for(i=0;i<j;i++)
{
temp[i]=m/n;
m=m%n;
n=n/10;
}
//printf("param_num= %d\t paminput=%d\n",j,m);
for(i=0;i<j;i++)
{printf("%d \t",temp[i]); }
printf("\n");
*/
/*for(i=0;i<8;i++)
{printf("%d \t",current_bootvlaue[i]);}
printf("\n");
*/
/*for(i=0;i<j;i++)
{
current_bootvlaue[i]=current_bcu.cbit[temp[i]];
//current_bootvlaue[temp_location]=temp_value;
}
for(i=j;i<8;i++)
{current_bootvlaue[i]=63;}
//printf("\n");
//for(i=0;i<8;i++)
//{printf("%d \t",current_bootvlaue[i]);}
//printf("\n");
*/
int i,j,k,l,m,p, t ;
struct link_type *n, *check;
int input_order[15];
p=0;
t=0;
m=0;
l=0;
for(i=0;i<strlen(time_input);i++)
{
if(time_input[i]==',')
{p++;}
}
//printf("p=%d \n",p);
sscanf(time_input, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &input_order[0],&input_order[1],&input_order[2],&input_order[3],&input_order[4],&input_order[5],&input_order[6],&input_order[7],&input_order[8],&input_order[9],&input_order[10],&input_order[11],&input_order[12],&input_order[13],&input_order[14]);
//for(m=0;m<p+1;m++)
// {printf("%d\t",input_order[m]);}
//printf("end m\n");
for(m=0;m<p+1;m++)
{
i=input_order[m];
t=m+1;
//printf("m= %d t= %d input-order= %d\n", m,t,i);
j=100;
l=0;
//if(place_temp>j)
//{i++;}
check=head;
check=check->next;
while(check->next!=NULL&&check->id<8)
{
if (check->input.member==current_bcu.cbit[i])
{j=check->id; break;}
else
{check=check->next;}
}
if(j==100)
{
for(k=0;k<14;k++)
{ if (current_bcu.cbit[i]==Bootdevicedefault[k].member)
{l=k;}
}
temp_boot=Bootdevicedefault[l];
//printf("j=%d ",j);
//printf("temp-boot %s",temp_boot.value);
add_item(t);
}
else
{
//printf("j=%d ",j);
temp_boot=check->input;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -