From 3138af456a36c43a8f280f46189d2c40f8eda7df Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Wed, 20 Sep 2006 14:38:37 +0000 Subject: [PATCH] commit rc languages to xml parser for the webservre and standalone. svn path=/trunk/; revision=24213 --- rosapps/devutils/directory.rbuild | 6 + rosapps/devutils/roswebparser/roswebparser.c | 1751 +++++++++++++++++ .../devutils/roswebparser/roswebparser.rbuild | 8 + 3 files changed, 1765 insertions(+) create mode 100644 rosapps/devutils/roswebparser/roswebparser.c create mode 100644 rosapps/devutils/roswebparser/roswebparser.rbuild diff --git a/rosapps/devutils/directory.rbuild b/rosapps/devutils/directory.rbuild index e96f8f60d66..df7afbbccb1 100644 --- a/rosapps/devutils/directory.rbuild +++ b/rosapps/devutils/directory.rbuild @@ -6,6 +6,12 @@ + + + + + + diff --git a/rosapps/devutils/roswebparser/roswebparser.c b/rosapps/devutils/roswebparser/roswebparser.c new file mode 100644 index 00000000000..5b345097f99 --- /dev/null +++ b/rosapps/devutils/roswebparser/roswebparser.c @@ -0,0 +1,1751 @@ +/* + * This is a standalone rc langues to xml parser + * do not use windows or linux specfiy syntax or functions + * use only pure ansi C, this program is also runing on + * linux apachie webserver and being use in ReactOS website + * + * CopyRight 20/9-2006 by Magnus Olsen (magnus@greatlord.com) + * Licen GPL version 2.0 + */ + + +#include +#include +#include +#include + +#define true 1 +#define false 0 + + +int paraser1(char *buf, long buf_size, char * output_text, char * output_resid, char * output_format, char *iso_type); + +void find_str(char asc,char *buf, long *foundPos); +void find_str2(char *asc,char *buf, long *foundPos, char * output_resid, char *output_text ); +void trim(char* buf); +void stringbugs(char *buf, int shift2); +void stringbugs2(char *buf, int shift2); + +void ParserCMD1(char *text, char *output_resid, char *output_text, char *output_format); +void ParserCMD2(char *text, char *output_resid, char *output_text, char *output_format); +void ParserCMD3(char *text, char *output_resid, char *output_text, char *output_format); + +void ParserComment(long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format); +void ParserLang(char *text, char *output_resid, char *output_text, char *output_format); +void ParserString(long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format); +void ParserDialog(char *text, long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format); +void DialogCMDBuild1(char *output_resid, char *output_format, long pos, char * text); +void DialogCMDBuild2(char *output_resid, char *output_format, long pos, char * text); +void DialogCMDBuild3(char *output_resid, char *output_format, long pos, char * text); +void ParserAccelerators(long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format); +void ParserMenu(char *text, long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format); + +/* + return -1 : No file found + return -2 : Fail open file + return -3 : Fail seek + return -4 : Fail get size + return -5 : Fail size of the file is 0 bytes + return -6 : Fail malloc memory + return -7 : Fail to read the file +*/ + +int main(int argc, char * argv[]) +{ + FILE * fp; + char * buffer; + char * output_text; + char * output_resid; + char * output_format; + + long buf_size; + long buf_size_calc = 0; + + if (argc!=3) + { + printf("Help\n"); + printf("%s inputfile iso-type\n\n",argv[0]); + printf("example %s en.rc UTF-8\n\n",argv[0]); + printf("Contry table\n"); + printf("en (English = \n"); + printf("se (Swedish = \n"); + printf("jp (Japanice = \n"); + return -1; + } + + + if ((fp = fopen(argv[1],"rb"))==NULL) + { + printf("Fail open file %s by %s\n",argv[1],argv[0]); + return -2; + } + + + + fseek(fp,0,SEEK_END); + if (ferror(fp) !=0) + { + fclose(fp); + printf("Fail seek\n"); + return -3; + } + buf_size = ftell(fp); + if (ferror(fp) !=0) + { + fclose(fp); + printf("Fail get size\n"); + return -4; + } + + /* + We make sure it is least 4 times + 2K biger + for we can grow around 2-3 times biger + so it better to make safe assume how + much memory we need + */ + + buf_size_calc = (buf_size*4) + 2048; + + fseek(fp,0,SEEK_SET); + if (ferror(fp) !=0) + { + fclose(fp); + printf("Fail seek\n"); + return -3; + } + + if (buf_size==0) + { + fclose(fp); + printf("Fail size of the file is 0 bytes\n"); + return -5; + } + + buffer =(char *)malloc(buf_size_calc); + if (buffer == NULL) + { + fclose(fp); + printf("Fail malloc memory\n"); + return -6; + } + + output_text =(char *)malloc(buf_size_calc); + if (output_text == NULL) + { + free(buffer); + fclose(fp); + printf("Fail malloc memory\n"); + return -6; + } + + output_resid =(char *)malloc(buf_size_calc); + if (output_resid == NULL) + { + free(buffer); + free(output_text); + fclose(fp); + printf("Fail malloc memory\n"); + return -6; + } + + output_format =(char *)malloc(buf_size_calc); + if (output_format == NULL) + { + free(buffer); + free(output_text); + free(output_resid); + fclose(fp); + printf("Fail malloc memory\n"); + return -6; + } + + //fread(buffer,1,buf_size,fp); + fread(buffer,buf_size,1,fp); + if (ferror(fp) !=0) + { + fclose(fp); + printf("Fail to read the file\n"); + return -7; + } + fclose(fp); + + /* Now we can write our parser */ + + paraser1(buffer, buf_size, output_text, output_resid, output_format,argv[2]); + printf ("%s",output_format); + + + if(buffer!=NULL) + free(buffer); + if(output_text!=NULL) + free(output_text); + if(output_resid!=NULL) + free(output_resid); + if(output_format!=NULL) + free(output_format); + + + return 0; +} + +int paraser1(char *buf, long buf_size, char * output_text, char * output_resid, char * output_format, char *iso_type) +{ + char *row; + long foundPos=0; + long foundNextPos=0; + long row_size=0; + long pos=0; + + memset(output_text,0,buf_size); + memset(output_resid,0,buf_size); + memset(output_format,0,buf_size); + + sprintf(output_format,"\n\n",iso_type); + + row = output_text; + while(pos < buf_size) + { + foundPos=0; + foundNextPos=0; + row_size=0; + + /* create a row string so we can easy scan it */ + find_str('\n',&buf[pos],&foundPos); + + if (foundPos !=0) + { + row_size = foundPos - 1; + + /* found a new row */ + strncpy(row, &buf[pos], row_size); + pos+=foundPos; + if (foundPos >=2) + row[row_size -1]=0; + + } + else + { + row_size = buf_size - pos; + + /* no new row found in the buffer */ + strncpy(row, &buf[pos], buf_size - pos); + pos= buf_size; + } + + trim(row); + foundPos=0; + + /* Detect Basic command and send it to own paraser */ + if (*row==0) + continue; + + if (strncmp("/*",row,2)==0) + { + ParserComment(&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + + if (strncmp("//",row,2)==0) + { + ParserComment(&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + if (strncmp("#",row,1)==0) + { + ParserComment(&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + + stringbugs(row,true); + + if (foundPos == 0) + { + find_str2 ("LANGUAGE ",row,&foundPos,output_resid,output_text); + if (foundPos != 0) + { + ParserLang("LANGUAGE", output_resid, output_text, output_format); + continue; + } + } + + if (foundPos == 0) + { + find_str2 ("STRINGTABLE ",row,&foundPos,output_resid,output_text); + if (foundPos != 0) + { + ParserCMD3("STRINGTABLE", output_resid, output_text, output_format); + ParserString(&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + } + + if (foundPos == 0) + { + find_str2 (" DIALOGEX ",row,&foundPos,output_resid,output_text); + if (foundPos != 0) + { + ParserCMD2("DIALOGEX", output_resid, output_text, output_format); + ParserDialog("DIALOGEX",&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + } + + if (foundPos == 0) + { + find_str2 (" DIALOG ",row,&foundPos,output_resid,output_text); + if (foundPos != 0) + { + ParserCMD2("DIALOG", output_resid, output_text, output_format); + ParserDialog("DIALOG",&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + } + + if (foundPos == 0) + { + find_str2 (" ACCELERATORS\0",row,&foundPos,output_resid,output_text); + if (foundPos != 0) + { + ParserCMD1("ACCELERATORS", output_resid, output_text, output_format); + ParserAccelerators(&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + } + + if (foundPos == 0) + { + find_str2 (" MENU\0",row,&foundPos,output_resid,output_text); + if (foundPos != 0) + { + ParserCMD1("MENU", output_resid, output_text, output_format); + ParserMenu("MENU",&pos, buf, buf_size, output_text, output_resid, output_format); + continue; + } + } + + + } // end while + sprintf(output_format,"%s\n",output_format); + return false; +} + +/* + ParserCMD + data + input : IDM_MDIFRAME MENU DISCARDABLE LANG LANG_TAG LANG_TAG + input : IDM_MDIFRAME MENU DISCARDABLE + input : IDM_MDIFRAME MENU + input : IDM_MDIFRAME ACCELERATORS DISCARDABLE LANG LANG_TAG LANG_TAG + input : IDM_MDIFRAME ACCELERATORS DISCARDABLE + input : IDM_MDIFRAME ACCELERATORS + + + output : DISCARDABLE + output : DISCARDABLE + output : + output : DISCARDABLE + output : DISCARDABLE + output : + + param : output_resid = rc_name ID + param : output_text = MENU DISCARDABLE LANG LANG_TAG LANG_TAG + param : text = type example MENU + param : output_format = xml data store buffer +*/ + +void ParserCMD1(char *text, char *output_resid, char *output_text, char *output_format) +{ + long le; + + stringbugs(output_resid,false); + stringbugs(output_text,false); + + le = strlen(text); + + if (strlen(output_text) == le) + { + sprintf(output_format,"%s\n \n",output_format,text,text,output_resid); + } + else if (output_text[le]==' ') + { + sprintf(output_format,"%s\n DISCARDABLE\n",output_format,text,text,output_resid); + } + +} + +/* + ParserCMD2 + data + input : IDM_MDIFRAME DIALOG DISCARDABLE 15, 13, 210, 63 LANG LANG_TAG LANG_TAG + input : IDM_MDIFRAME DIALOG DISCARDABLE 15, 13, 210, 63 + input : IDM_MDIFRAME DIALOGEX DISCARDABLE 15, 13, 210, 63 LANG LANG_TAG LANG_TAG + input : IDM_MDIFRAME DIALOGEX DISCARDABLE 15, 13, 210, 63 + + + output : DISCARDABLE + output : + output : DISCARDABLE + output : + + + param : output_resid = rc_name ID + param : output_text = DIALOG DISCARDABLE 15, 13, 210, 63 LANG LANG_TAG LANG_TAG + param : text = type example DIALOG + param : output_format = xml data store buffer + +*/ + +void ParserCMD2(char *text, char *output_resid, char *output_text, char *output_format) +{ + long le; + long flag = 0; + + stringbugs(output_resid,false); + stringbugs(output_text,false); + + le=strlen(text); + + sprintf(output_format,"%s\n \n",output_format,output_resid,output_text); + else + sprintf(output_format,"%swidth=\"%s\" height=\"%s\">DISCARDABLE\n",output_format,output_resid,output_text); +} + +/* + ParserCMD3 + data + input : STRINGTABLE DISCARDABLE LANG LANG_TAG LANG_TAG + input : STRINGTABLE DISCARDABLE LANG + input : STRINGTABLE LANG LANG_TAG LANG_TAG + input : STRINGTABLE + + + output : DISCARDABLE + output : DISCARDABLE + output : + output : + + + param : output_resid = empty + param : output_text = DIALOG DISCARDABLE 15, 13, 210, 63 LANG LANG_TAG LANG_TAG + param : text = type example DIALOG + param : output_format = xml data store buffer + +*/ +void ParserCMD3(char *text, char *output_resid, char *output_text, char *output_format) +{ + long foundPos=0; + + stringbugs(output_resid,false); + stringbugs(output_text,false); + + find_str2 (" ",output_text,&foundPos,output_resid,output_text); + trim(output_resid); + trim(output_text); + + if(strncmp("STRINGTABLE",output_text,11)) + sprintf(output_format,"%s\n DISCARDABLE\n",output_format,output_text,output_resid); + else + sprintf(output_format,"%s\n \n",output_format,output_resid,output_text); + +} +/* + ParserLang + data + input : LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + input : LANGUAGE LANG_ENGLISH SUBLANG_ENGLISH_US + output : lang + output : lang + + param : output_resid = not in use + param : output_text = LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + param : text = type example LANGUAGE + param : output_format = xml data store buffer +*/ + +void ParserLang(char *text, char *output_resid, char *output_text, char *output_format) +{ + long foundPos=0; + + stringbugs(output_resid,false); + stringbugs(output_text,false); + + sprintf(output_text,"%s",&output_text[strlen(text)+1]); + + /* split the lang into two string */ + find_str2 (" ",output_text,&foundPos,output_resid,output_text); + trim(output_resid); + trim(output_text); + sprintf(output_format,"%s\n %s\n\n",output_format,text,text,output_text,output_resid); +} + + +/* + ParserComment + data + input : / * sadasdas asdasd asdas ... * / + output : + + input : / * sadasdas asdasd asdas ... * / + output : + + input : #if x + output : + + input : // hi + output : + + param : pos = current buf position + param : buf = read in buffer from file rc + param : buf_size = buf max size + param : output_text = using internal instead alloc more memory + param : output_resid = using internal instead alloc more memory + param : output_format = xml data store buffer +*/ + +void ParserComment(long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format) +{ + long foundPos=0; + long foundNextPos=0; + long row_size=0; + char *row = output_text; + + + row_size = strlen(row); + if (strncmp("//",&row[0],2)==0) + { + sprintf(output_format,"%s\n \n\n",output_format,row); + return; + } + if (strncmp("#",&row[0],1)==0) + { + sprintf(output_format,"%s\n \n\n",output_format,row); + return; + } + + for (foundNextPos=0;foundNextPos\n \n\n",output_format,row); + return; + } + + } + + + sprintf(output_format,"%s\n =2) + { + row[row_size -1]=0; + } + + } + else + { + row_size = buf_size - *pos; + + /* no new row found in the buffer */ + strncpy(row, &buf[*pos], buf_size - *pos); + *pos= buf_size; + } + + /* Search now after end of comment */ + row_size=strlen(row); + for (foundNextPos=0;foundNextPos\n\n",output_format,row); + return; + } + } + sprintf(output_format,"%s%s\n",output_format,row); + } + +} + +/* + ParserAccelerators + data + input : BEGIN + input : "^A", CMD_SELECT_ALL + input : END + + output : + output : + output : + + param : pos = current buf position + param : buf = read in buffer from file rc + param : buf_size = buf max size + param : output_text = using internal instead alloc more memory + param : output_resid = using internal instead alloc more memory + param : output_format = xml data store buffer +*/ +void ParserAccelerators(long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format) +{ + long foundPos=0; + long foundNextPos=0; + long row_size=0; + char *row = output_text; + int start=false; + long le; + + while(*pos < buf_size) + { + foundPos=0; + row_size=0; + + /* create a row string so we can easy scan it */ + find_str('\n',&buf[*pos],&foundPos); + if (foundPos !=0) + { + row_size = foundPos - 1; + + /* found a new row */ + strncpy(row, &buf[*pos], foundPos); + *pos+=foundPos; + if (foundPos >=2) + { + row[row_size -1]=0; + } + + } + else + { + row_size = buf_size - *pos; + + /* no new row found in the buffer */ + strncpy(row, &buf[*pos], buf_size - *pos); + *pos= buf_size; + } + + stringbugs(row,true); + if (start == false) + { + if ((strcmp(row,"BEGIN")==0) || (strcmp(row,"{")==0)) + { + start=true; + sprintf(output_format,"%s \n",output_format); + + } + continue; + } + + if ((strcmp(row,"END")==0) || (strcmp(row,"}")==0)) + { + sprintf(output_format,"%s \n\n",output_format); + + *output_resid = '\0'; + break; + } + + foundPos=0; + foundNextPos=0; + find_str('"',row,&foundPos); + find_str('"',&row[foundPos],&foundNextPos); + + if ((foundPos!=0) && (foundNextPos!=0)) + { + + sprintf(output_format,"%s \n",output_format,row); + } + } +} + +/* + ParserString + data + input : BEGIN + input : IDS_HINT_BLANK "text" + input : END + + output : + output : text + output : + + param : pos = current buf position + param : buf = read in buffer from file rc + param : buf_size = buf max size + param : output_text = using internal instead alloc more memory + param : output_resid = using internal instead alloc more memory + param : output_format = xml data store buffer +*/ +void ParserString(long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format) +{ + long foundPos=0; + long row_size=0; + char *row = output_text; + int start=false; + + while(*pos < buf_size) + { + foundPos=0; + row_size=0; + + /* create a row string so we can easy scan it */ + find_str('\n',&buf[*pos],&foundPos); + + if (foundPos !=0) + { + row_size = foundPos - 1; + + /* found a new row */ + strncpy(row, &buf[*pos], foundPos); + *pos+=foundPos; + if (foundPos >=2) + { + row[row_size -1]=0; + } + + } + else + { + row_size = buf_size - *pos; + + /* no new row found in the buffer */ + strncpy(row, &buf[*pos], buf_size - *pos); + *pos= buf_size; + } + + stringbugs(row,true); + + + if (start == false) + { + if ((strcmp(row,"BEGIN")==0) || (strcmp(row,"{")==0)) + { + + start=true; + sprintf(output_format,"%s \n",output_format); + } + continue; + } + + if ((strcmp(row,"END")==0) || (strcmp(row,"}")==0)) + { + sprintf(output_format,"%s \n\n",output_format); + + *output_resid = '\0'; + break; + } + + + + /* the split code here */ + foundPos=0; + find_str2 (" ",row,&foundPos,output_resid,output_text); + + if (foundPos != 0) + { + trim(output_text); + trim(output_resid); + + if (*output_resid!='\0') + sprintf(output_format,"%s \n",output_format,output_resid,output_text); + else + sprintf(output_format,"%s \n",output_format,output_resid); + } + + } +} + +/* + ParserDialog + data + + input : BEGIN + output : + output : + + input : END + output : + output : + + input : { + output : + output : + + input : } + output : + output : + + input : FONT 8, "MS Shell Dlg" + output : + + input : FONT 8, "MS Shell Dlg", 0, 0, 0x1 + output : 0 0 0x1 + + input : CONTROL "",101,"Static",SS_SIMPLE | SS_NOPREFIX,3,6,150,10 + output : + + + Builder1 + input : DEFPUSHBUTTON "&OK",1,158,6,47,14 xx + input : PUSHBUTTON "&Cancel",2,158,23,47,14 xx + input : LTEXT "&Tooltip Text:",IDC_LABEL1,7,44,40,8 xx + input : GROUPBOX "&Display Mode",IDC_LABEL4,7,96,157,28 xx + input : ICON "",IDC_PICTURE,173,101,21,20 xx + + input : EDITTEXT 201,3,29,134,12,ES_AUTOHSCROLL + input : LISTBOX IDC_LIST, 4, 16, 104, 46, WS_TABSTOP + input : COMBOBOX ID_EOLN,54,18,156,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + + output : + output : + + output : + output : + + builder2 + input : CAPTION "Execute" + input : EXSTYLE WS_EX_APPWINDOW + input : STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU + + output : DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU + + param : pos = current buf position + param : buf = read in buffer from file rc + param : buf_size = buf max size + param : output_text = using internal instead alloc more memory + param : output_resid = using internal instead alloc more memory + param : output_format = xml data store buffer +*/ +void ParserDialog(char *text, long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format) +{ + long foundPos=0; + long foundNextPos=0; + long row_size=0; + char *row = output_text; + long commandfound=0; + long le; + + *output_resid='\0'; + le=0; + + while(*pos < buf_size) + { + foundPos=0; + row_size=0; + + /* create a row string so we can easy scan it */ + find_str('\n',&buf[*pos],&foundPos); + if (foundPos !=0) + { + row_size = foundPos - 1; + + /* found a new row */ + strncpy(row, &buf[*pos], foundPos); + *pos+=foundPos; + if (foundPos >=2) + { + row[row_size -1]=0; + } + + } + else + { + row_size = buf_size - *pos; + + /* no new row found in the buffer */ + strncpy(row, &buf[*pos], buf_size - *pos); + *pos= buf_size; + } + + //stringbugs(row,true); + trim(row); + + if ((strcmp(row,"BEGIN")==0) || (strcmp(row,"{")==0)) + commandfound=1; + if ((strcmp(row,"END")==0) || (strcmp(row,"}")==0)) + commandfound=2; + + if (strncmp("STYLE ",row,6)==0) + commandfound=3; + if (strncmp("CAPTION ",row,8)==0) + commandfound=3; + if (strncmp("FONT ",row,5)==0) + commandfound=3; + if (strncmp("CONTROL ",row,8)==0) + commandfound=3; + if (strncmp("EDITTEXT ",row,9)==0) + commandfound=3; + if (strncmp("DEFPUSHBUTTON ",row,14)==0) + commandfound=3; + if (strncmp("PUSHBUTTON ",row,11)==0) + commandfound=3; + if (strncmp("LTEXT ",row,6)==0) + commandfound=3; + if (strncmp("GROUPBOX ",row,9)==0) + commandfound=3; + if (strncmp("ICON ",row,5)==0) + commandfound=3; + if (strncmp("EXSTYLE ",row,8)==0) + commandfound=3; + if (strncmp(row,"LISTBOX ",8)==0) + commandfound=3; + if (strncmp(row,"COMBOBOX ",9)==0) + commandfound=3; + + if ((*output_resid!=0) && (commandfound!=0)) + { + /* Builder 1*/ + if (strncmp(output_resid,"LTEXT ",6)==0) + DialogCMDBuild1(output_resid, output_format, 5, "LTEXT"); + if (strncmp(output_resid,"GROUPBOX ",9)==0) + DialogCMDBuild1(output_resid, output_format, 8, "GROUPBOX"); + if (strncmp(output_resid,"DEFPUSHBUTTON ",14)==0) + DialogCMDBuild1(output_resid, output_format, 13, "DEFPUSHBUTTON"); + if (strncmp(output_resid,"PUSHBUTTON ",11)==0) + DialogCMDBuild1(output_resid, output_format, 10, "PUSHBUTTON"); + if (strncmp("ICON ",output_resid,5)==0) + DialogCMDBuild1(output_resid, output_format, 4, "ICON"); + if (strncmp("EDITTEXT ",output_resid,9)==0) + DialogCMDBuild1(output_resid, output_format, 8, "EDITTEXT"); + if (strncmp("LISTBOX ",output_resid,8)==0) + DialogCMDBuild1(output_resid, output_format, 7, "LISTBOX"); + if (strncmp("COMBOBOX ",output_resid,9)==0) + DialogCMDBuild1(output_resid, output_format, 8, "COMBOBOX"); + + /* Builder 2*/ + if (strncmp("STYLE ",output_resid,6)==0) + DialogCMDBuild2(output_resid, output_format, 5, "STYLE"); + if (strncmp("EXSTYLE ",output_resid,8)==0) + DialogCMDBuild2(output_resid, output_format, 7, "EXSTYLE"); + if (strncmp("CAPTION ",output_resid,8)==0) + DialogCMDBuild2(output_resid, output_format, 7, "CAPTION"); + if (strncmp("CONTROL ",output_resid,8)==0) + DialogCMDBuild3(output_resid, output_format, 7, "CONTROL"); + + /* no builder */ + if (strncmp(output_resid,"FONT ",5)==0) + { + stringbugs(output_resid,true); + /* FONT */ + sprintf(output_resid,"%s",&output_resid[5]); + trim(output_resid); + sprintf(output_format,"%s \n",output_format); + } + else + { + sprintf(output_format,"%s\">%s\n",output_format,&output_resid[foundPos]); + } + + *output_resid=0; + } + + *output_resid='\0'; + } + + if (commandfound==1) + { + sprintf(output_format,"%s \n",output_format,text); + } + if (commandfound==2) + { + sprintf(output_format,"%s \n\n",output_format,text); + break; + } + + sprintf(output_resid,"%s%s",output_resid,row); + commandfound=0; + } + +} +////////////////////////// +/* + ParserDialog + data + + input : BEGIN + output : + output : + + input : END + output : + output : + + input : { + output : + output : + + input : } + output : + output : + + param : pos = current buf position + param : buf = read in buffer from file rc + param : buf_size = buf max size + param : output_text = using internal instead alloc more memory + param : output_resid = using internal instead alloc more memory + param : output_format = xml data store buffer +*/ +void ParserMenu(char *text, long *pos, char *buf, long buf_size, char * output_text, char * output_resid, char * output_format) +{ + long foundPos=0; + long foundNextPos=0; + long row_size=0; + char *row = output_text; + long commandfound=0; + long le; + long count=0; + + *output_resid='\0'; + le=0; + + while(*pos < buf_size) + { + foundPos=0; + row_size=0; + + /* create a row string so we can easy scan it */ + find_str('\n',&buf[*pos],&foundPos); + if (foundPos !=0) + { + row_size = foundPos - 1; + + /* found a new row */ + strncpy(row, &buf[*pos], foundPos); + *pos+=foundPos; + if (foundPos >=2) + { + row[row_size -1]=0; + } + + } + else + { + row_size = buf_size - *pos; + + /* no new row found in the buffer */ + strncpy(row, &buf[*pos], buf_size - *pos); + *pos= buf_size; + } + + //stringbugs(row,true); + stringbugs2(row,true); + + if ((strcmp(row,"BEGIN")==0) || (strcmp(row,"{")==0)) + commandfound=1; + if ((strcmp(row,"END")==0) || (strcmp(row,"}")==0)) + commandfound=2; + + if (strncmp("POPUP ",row,6)==0) + commandfound=3; + if (strncmp("MENUITEM ",row,8)==0) + commandfound=3; + + + if ((*output_resid!=0) && (commandfound!=0)) + { + if (strncmp(output_resid,"POPUP ",6)==0) + { + sprintf(output_resid,"%s",&output_resid[5]); + trim(output_resid); + sprintf(output_format,"%s\n",output_format,output_resid); + *output_resid='\0'; + } + + if (strncmp(output_resid,"MENUITEM ",9)==0) + { + sprintf(output_resid,"%s",&output_resid[8]); + trim(output_resid); + if (strcmp(output_resid,"SEPARATOR")==0) + { + sprintf(output_format,"%s\n",output_format); + *output_resid='\0'; + } + else + { + foundPos=0; + foundNextPos=0; + find_str('"',output_resid,&foundPos); + find_str('"',&output_resid[foundPos],&foundNextPos); + + stringbugs(&output_resid[foundPos+foundNextPos],true); + + if ((foundPos+foundNextPos)==0) + { + sprintf(output_format,"%s\n",output_format,&output_resid[foundPos+foundNextPos]); + } + else + { + sprintf(output_format,"%s",output_format,&output_resid[foundPos+foundNextPos]); + + output_resid[foundPos+foundNextPos]='\0'; + trim(output_resid); + + sprintf(output_format,"%s\n",output_format,output_resid); + } + + + + *output_resid='\0'; + } + } + + + + *output_resid='\0'; + } + + if (commandfound==1) + { + count++; + if (count==1) + sprintf(output_format,"%s\n",output_format,text); + else + sprintf(output_format,"%s\n",output_format); + + *output_resid='\0'; + } + if (commandfound==2) + { + count--; + *output_resid='\0'; + + if (count<1) + sprintf(output_format,"%s\n",output_format,text); + else + sprintf(output_format,"%s\n",output_format); + + if (count<1) + { + sprintf(output_format,"%s\n",output_format); + break; + } + } + + sprintf(output_resid,"%s%s",output_resid,row); + commandfound=0; + } + +} + +void stringbugs(char *buf, int shift2) +{ + long foundPos=0; + long foundNextPos=0; + long t=0; + + /* remove , */ + if (shift2== false) + { + for (t=0;t0) + { + + if (isspace(buf[le-1])!=0) + { + buf[le-1]=0; + le=strlen(buf); + } + else + { + break; + } + } + + le=strlen(buf); + while(le>0) + { + if (isspace(buf[0])!=0) + { + strncpy(&buf[0],&buf[1],le-1); + buf[le-1]=0; + le=strlen(buf); + } + else + { + break; + } + } +} +void find_str(char asc,char *buf, long *foundPos) +{ + int t; + size_t le; + + le=strlen(buf); + + for (t=0;t\n",output_format,output_resid); + else + sprintf(output_format,"%s\">\n",output_format); + + *output_resid='\0'; +} + + +void DialogCMDBuild2(char *output_resid, char *output_format, long pos, char * text) +{ + long le; + + stringbugs(output_resid,true); + sprintf(output_resid,"%s",&output_resid[pos]); + trim(output_resid); + + le = strlen(output_resid); + if (*output_resid=='"') + *output_resid=' '; + if (output_resid[le-1]=='"') + output_resid[le-1]=' '; + + trim(output_resid); + sprintf(output_format,"%s \n",output_format,text,output_resid); + *output_resid='\0'; +} + +// input : CONTROL "",101,"Static",SS_SIMPLE | SS_NOPREFIX,3,6,150,10 +void DialogCMDBuild3(char *output_resid, char *output_format, long pos, char * text) +{ + long foundPos=0; + long foundNextPos=0; + long le; + long count=0; + long save1; + long save2; + + sprintf(output_resid,"%s",&output_resid[pos]); + trim(output_resid); + + find_str('"',output_resid,&foundPos); + find_str('"',&output_resid[foundPos],&foundNextPos); + + save1=foundPos; + save2=foundNextPos; + + sprintf(output_format,"%s \n",output_format,output_resid); + else + sprintf(output_format,"%s\">\n",output_format); + + *output_resid='\0'; +} + diff --git a/rosapps/devutils/roswebparser/roswebparser.rbuild b/rosapps/devutils/roswebparser/roswebparser.rbuild new file mode 100644 index 00000000000..21af3157f59 --- /dev/null +++ b/rosapps/devutils/roswebparser/roswebparser.rbuild @@ -0,0 +1,8 @@ + + . + 0x0501 + 0x0501 + + kernel32 + roswebparser.c +