📄 cgilib.c
字号:
#include "cgilib.h"int strpos(char *str,char *substr){ if (strstr(str,substr)==NULL) return 0; else return (strlen(str)-strlen(strstr(str,substr))+1);}char *strdel(char *str,int index,int count){ int i=0; while (str[index-1+count+i]!='\0') { str[index-1+i]=str[index-1+count+i]; i++; } str[index-1+i]='\0'; return str;}void translate(char *sourcestr){ int i=0; int j=0; char *tmpstr; char tmpchar1,tmpchar2; tmpstr=(char *)malloc(sizeof(char)*strlen(sourcestr)+1); while(sourcestr[j]) { if ((tmpstr[i]=sourcestr[j])=='%') { if (sourcestr[j+1]>='A') tmpchar1=((sourcestr[j+1] & 0xdf)-'A')+10; else tmpchar1=(sourcestr[j+1]-'0'); if (sourcestr[j+2]>='A') tmpchar2=((sourcestr[j+2] & 0xdf)-'A')+10; else tmpchar2=(sourcestr[j+2]-'0'); tmpstr[i]=tmpchar1*16+tmpchar2; j=j+2; } i++; j++; } tmpstr[i]='\0'; strcpy(sourcestr,tmpstr);}void html_message(char *headtitle,char *bodytitle){ printf("Content-type:text/html\n\n"); printf("<HTML>\n"); printf("<HEAD>\n"); printf("<TITLE>%s</TITLE>\n",headtitle); printf("</HEAD>\n"); printf("<BODY><CENTER>\n"); printf("<H1>%s</H1>\n",bodytitle); printf("</CENTER><BR>\n"); printf("</BODY>\n"); printf("</HTML>\n");}int get_CGI_request(htmlinput_struct htmlinputs[]){ int i,j; int length; char method[10], *inputstring, *tmpstr; int htmlinputcount=0; strcpy(method,getenv("REQUEST_METHOD")); if (!strcmp(method,"POST")) { length=atoi(getenv("CONTENT_LENGTH")); if (length!=0) { inputstring=(char *)malloc(sizeof(char)*length+1); fread(inputstring,sizeof(char),length,stdin); } } else if(!strcmp(method,"GET")) { strcpy(inputstring,getenv("QUERY_STRING")); length=strlen(inputstring); } if (length==0) return 0; j=0; tmpstr=(char *)malloc(sizeof(char)*length+1); for(i=0;i<length;i++) { if (inputstring[i]=='=') { tmpstr[j]='\0'; translate(tmpstr); strcpy(htmlinputs[htmlinputcount].name,tmpstr); if (i==length-1) { strcpy(htmlinputs[htmlinputcount].value,""); htmlinputcount++; } j=0; } else if ((inputstring[i]=='&')||(i==length-1)) { if (i==length-1) { tmpstr[j]=inputstring[i]; j++; } tmpstr[j]='\0'; translate(tmpstr); strcpy(htmlinputs[htmlinputcount].value,tmpstr); htmlinputcount++; j=0; } else if(inputstring[i]=='+') { tmpstr[j]=' '; j++; } else { tmpstr[j]=inputstring[i]; j++; } } return (htmlinputcount);}void write_comm_to_file(char *commfile,commparam_struct commparam){ FILE *fp; //open file if ((fp=fopen(commfile,"w+"))==NULL) { html_message("error","cannot open the parameters file."); exit(1); } //print the string to file fprintf(fp,"serverip:%s\n",commparam.serverip); fprintf(fp,"serverport:%s\n",commparam.serverport); fprintf(fp,"baudrate:%s\n",commparam.baudrate); fprintf(fp,"parity:%s\n",commparam.parity); fprintf(fp,"databits:%s\n",commparam.databits); fprintf(fp,"stopbits:%s\n",commparam.stopbits); fprintf(fp,"handshaking:%s\n",commparam.handshaking); //close file fclose(fp);}void write_ip_to_file(char *ipfile,char *localip,char *netmask){ FILE *fp; char routeaddr[20],tmp[20],tmp1[20]; int iplen,tmplen; //open file if ((fp=fopen(ipfile,"w+"))==NULL) { html_message("error","cannot open the parameters file."); exit(1); } //get the routeaddr iplen=strlen(localip); strcpy(tmp,localip); if (strcmp("255.255.255.0",netmask)==0) { tmplen=strlen(strrchr(localip,'.')); strdel(tmp,iplen-tmplen+1,tmplen); strcat(tmp,".0"); } if (strcmp("255.255.0.0",netmask)==0) { tmplen=strlen(strrchr(localip,'.')); strdel(tmp,iplen-tmplen+1,tmplen); strcpy(tmp1,tmp); iplen=strlen(tmp1); tmplen=strlen(strrchr(tmp1,'.')); strdel(tmp1,iplen-tmplen+1,tmplen); strcat(tmp1,".0.0"); strcpy(tmp,tmp1); } if (strcmp("255.0.0.0",netmask)==0) { tmplen=strlen(strchr(localip,'.')); strdel(tmp,iplen-tmplen+1,tmplen); strcat(tmp,".0.0.0"); } strcpy(routeaddr,tmp); //print the string to file fprintf(fp,"ifconfig eth0 %s netmask %s\n",localip,netmask); fprintf(fp,"route add -net %s eth0\n",routeaddr); fprintf(fp,"/bin/IBMSGateway&\n"); //close file fclose(fp); }int erase_sector(unsigned long flash_addr){ *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xaaaa; *(volatile unsigned short *)(flash_addr&0xfffff000|0x554)=0x5555; *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0x8080; *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xaaaa; *(volatile unsigned short *)(flash_addr&0xfffff000|0x554)=0x5555; *(volatile unsigned short *)(flash_addr)=0x3030; printf("flash secter erased!\n");}int write_word(unsigned long flash_addr,unsigned short value){ unsigned short temp_w; unsigned long i; //value = strtoul(input_argv3,end,16); *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xaaaa; *(volatile unsigned short *)(flash_addr&0xfffff000|0x554)=0x5555; *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xa0a0; *(volatile unsigned short *)(flash_addr)=value; temp_w=*(volatile unsigned short *)flash_addr; i=0; while(temp_w != value){ temp_w=*(volatile unsigned short *)flash_addr; i++; if(i==0xfff){ printf("err :%08X ",flash_addr); printf("write = %04X ",value); printf("read = %04X \n",temp_w); return 1; } } return 0;}////////////////////////////////////////////////////////////////////////////////file operation(flat FS)long int getfilelength(char *filename){ FILE *fp; long int i; int j; fp=fopen(filename,"r"); fseek(fp,0L,2); i=ftell(fp); j=fclose(fp); return(i);}/////////////////////////////////////////////////////////////////////////////HEAD:filename(32bytes)+filelength(4bytes)+filecontents(filelength)///////////////////////////////////////////////////////////////////////////int write_file_to_flash(char * filename,unsigned long addr){ FILE *fp; unsigned long i,j,len; unsigned short value_w,temp_w; unsigned char *p; char fname[32]; bzero(fname,32); strncpy(fname,filename,32); p=(unsigned char *)&len; ////////////////////////////////////////////////////////////////////////// //write filename for(i=0;i<32;i+=2){ value_w=*(unsigned short *)(fname+i); if(write_word(addr,value_w)!=0) return 2; addr+=2; } ////////////////////////////////////////////////////////////////////////// //write file length len=getfilelength(filename); printf("filelength=0x%08X\n",len); value_w=*(unsigned short *)p; if(write_word(addr,value_w)!=0) return 2; addr+=2; value_w=*(unsigned short *)(p+2); if(write_word(addr,value_w)!=0) return 2; addr+=2; ////////////////////////////////////////////////////////////////////////// fp=fopen(filename,"r"); if(fp==NULL){ printf("open file error"); return 1; } for(;;){ j=fread(&value_w,sizeof(unsigned short),1,fp); //value_w = exchangew(value_w); if(j!=1){ if(ferror(fp) != 0) printf("over or wrong\n"); else printf("File write successfully!\n"); break; } if(write_word(addr,value_w)!=0) return 2; addr+=2; } if (len%2==1) { value_w=0x0AFF; if (write_word(addr,value_w)!=0) return 2; } fclose(fp); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -