nuiXML* ImportGladeXML(nglChar* xmlfile) { nuiXML* pFrom = new nuiXML(nglString(_T("gladefile"))); nuiXML* pTo = new nuiXML(nglString(_T("NUI-Interface"))); nglIFile fromfile(nglPath((char*)xmlfile)); if (pFrom->Load(fromfile)) { if (pFrom->GetName()== _T("GTK-Interface")) { uint i, count = pFrom->GetChildrenCount(); for (i=0; i<count; i++) { nuiXMLNode* pNode = pFrom->GetChild(i); if (!RecursiveGladeImport(pNode,pTo)) { delete pFrom; delete pTo; return NULL; } } delete pFrom; return pTo; } } delete pFrom; delete pTo; return NULL; }
int main() { char line[1024],action[512],*action2[20],file[512],*file2[5],arg; int i,epflag=0,mypipe[2],pid,outcopy=dup(1),incopy=dup(0),rederect=0,len,*status; int pipeflag=0,errlognum; FILE *errors_log; if((errors_log=fopen("errors.log","a"))==NULL) err("fopen"); errlognum=fileno(errors_log); if(dup2(errlognum,2)==-1) err("dup2"); while(1) { pipeflag=0; epflag=0; fflush(stdin); fflush(stdout); if(dup2(outcopy,1)==-1) err("dup2"); if(dup2(incopy,0)==-1) err("dup2"); fflush(NULL); memset(line,'\0',sizeof(line)); printf("$:"); get_line(line); if(strncmp(line,"exit",4)==0) { printf("\ngood bye...\n"); exit(0); } while(line[i]!='\0') { i=0; memset(action,'\0',sizeof(action)); memset(file,'\0',sizeof(file)); while(line[i]!='|'&&line[i]!='>'&&line[i]!='<'&&line[i]!='\0') i++; arg=line[i]; strncpy(action,line,(const char)i); set_line(line,(i+1)); int s=split_up(action,action2); action2[s]=(char *)NULL; i=0; if(action2[s-1][0]=='&'){ epflag=1; action2[s-1][0]='\0'; action2[s-1]=(char *)NULL; } if(arg=='\0') { memset(line,'\0',sizeof(line)); if((pid=fork())<0) err("fork"); if(pid==0) { execvp(action2[0],(char* const*)action2); err("execvp"); } if(epflag==0){ if(pipeflag==0) wait(); else { wait(); wait(); pipeflag=0; } } epflag=0; break; } if(arg=='|') { pipeflag=1; pipe(mypipe); if((pid=fork())<0) err("fork"); if(pid==0) { close(mypipe[0]); if(dup2(mypipe[1],1)==-1) err("dup2"); close(mypipe[1]); execvp(action2[0],(char* const*)action2); err("execvp"); } else { close(mypipe[1]); if(dup2(mypipe[0],0)==-1) err("dup2"); close(mypipe[0]); continue; } } if(arg=='>'||arg=='<') { if(arg=='>') if(line[0]=='>') { rederect=3; set_line(line,1); } else rederect=2; else rederect=1; len=strlen(line); strncpy(file,line,len); set_line(line,len); i=0; int s2=split_up(file,file2); file2[s2]=(char*)NULL; if(file2[s2-1][0]=='&') { epflag=1; file2[s2-1]=NULL; if((pid=fork())==-1) err("fork"); if(pid>0){ continue; } setpgid(0,0); } if(rederect==1) { fromfile(action2,file2); } if(rederect==2) { char temp='w'; tofile_append(action2,file2,&temp); } if(rederect==3) { char temp='a'; tofile_append(action2,file2,&temp); } } if(epflag==1){ epflag=0; exit(0); } } } return 0; }