int qt_f_ButtonHandler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { static int btnctr = 0; head->meta_info = (char *)"1"; xmlNode *item = CreateItemNode(node,0,itoa(row++),int2str[0]); Create1WidgetNodeWithStringProp(item,sAppendString("Btn_",itoa(btnctr)), "QPushButton","text", head->name); //struct sCbData *btn = AppendNode(CallBackData,"REFERENCE", "NULL","NULL",sAppendString("Btn_",int2str[btnctr]),"QPushButton"); struct sCbData *btnref = AppendNode(CallBackData,"0","0","0",sAppendString("Btn_",itoa(btnctr)),"QPushButton",modelDocPtr,func); for(sXformsNode * temp = head;temp;temp=temp->prev) { if( !strcmp(temp->type,"xf:input") || !strcmp(temp->type,"xf:textarea") ) { // find it's name and index and reference for( int i = 0; i < lindex ;i++) { if( !strcmp(temp->name,ActualName[i])) { sXformsNodeAttr *attr = getAttrFromList(temp,"ref"); sXformsNodeAttr *attr2 = getAttrFromList(temp,"readonly"); if(attr && !attr2) { AppendNode(&btnref->nextref,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),(char *)0,s_dupstr(InputName[i]),"QLineEdit",modelDocPtr,func); } else { AppendNode(&btnref->nextref,int2str[0],int2str[0],int2str[0],s_dupstr(InputName[i]),"QLineEdit",modelDocPtr,func); } } } } } lindex = 0; InputCountStart = inputctr; btnctr++; }
sDInt sDIDir::Cmd(sInt cmd,sChar *name,sDiskItem *di) { sInt result; sChar buffer[sDI_PATHSIZE]; switch(cmd) { case sDIC_FINDALL: case sDIC_FIND: if(!Complete) LoadDir(); return sTRUE; case sDIC_CREATEDIR: sCopyString(buffer,Path,sDI_PATHSIZE); sAppendString(buffer,"/",sDI_PATHSIZE); sAppendString(buffer,name,sDI_PATHSIZE); result = sSystem->MakeDir(buffer); LoadDir(); return result; case sDIC_CREATEFILE: sCopyString(buffer,Path,sDI_PATHSIZE); sAppendString(buffer,"/",sDI_PATHSIZE); sAppendString(buffer,name,sDI_PATHSIZE); result = sSystem->SaveFile(buffer,(sU8*)" ",0); LoadDir(); return result; case sDIC_RELOAD: Complete = 0; LoadDir(); return sTRUE; default: return sFALSE; } }
void sDIFile::MakePath(sChar *dest,sChar *name) { if(name==0) name = Name; sCopyString(dest,((sDIDir *)Parent)->Path,sDI_PATHSIZE); sAppendString(dest,"/",sDI_PATHSIZE); sAppendString(dest,name,sDI_PATHSIZE); }
void sFileWindow::GetPath(sChar *buffer,sInt size) { sCopyString(buffer,Path,size); if(Name[0]) { sAppendString(buffer,"/",size); sAppendString(buffer,Name,size); } }
int qt_f_TabsHandler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { //fprintf(stdout,"\n[%s][%d][head = %s,%s]",__func__,__LINE__,head->type,head->name); head -> meta_info = strdup("1"); sXformsNodeAttr xf_trigger_attr = {"type","tab_trigger",(char *)0,(char *)0,(sXformsNodeAttr *)0,(sXformsNodeAttr *)0}; int flag_t = 1; sXformsNode *xftrigger = SearchSubTreeForNodes(head,(char *)"xf:trigger",&xf_trigger_attr,0,1); if( xftrigger != 0){ char *propname[] = {"currentIndex"}; char *proptype[] = {"number"}; char *propval[] = {"0"}; xmlNode *lblitem = CreateItemNode(node,0,itoa(row),int2str[0]); xmlNode *MaintabWidget = Create1WidgetNode(lblitem,"TabWidget","QTabWidget",propname,proptype,propval,1); int i = 0; while( xftrigger != 0){ flag_t = 0; // search for xf:toggle inside this sXformsNode * toggle = SearchSubTreeForNodes(xftrigger,(char *)"xf:toggle",(sXformsNodeAttr *)0,0,0); if(toggle != 0){ toggle->meta_info = strdup("1"); sXformsNodeAttr *attr; for(attr = toggle->attr; attr; attr=attr->next){ if(!strcmp(attr->attrName,"case")){ sXformsNodeAttr xf_case_attr = {"id",attr->attrValue,(char *)0,(char *)0,(sXformsNodeAttr *)0,(sXformsNodeAttr *)0}; sXformsNode *tab_content = SearchSubTreeForNodes(head->par,(char *)"xf:case",&xf_case_attr,1,1); if(tab_content != 0){ printf("\n ========================== %s",xftrigger->name); xmlNode *TabWidget = Create1WidgetNode(MaintabWidget, sAppendString("Tab_",xftrigger->name),"QWidget",0,0,0,0); CreateStringAttribute(TabWidget,xftrigger->name); xmlNode *TabVerticalLayout = CreateLayout(TabWidget,"QVBoxLayout",sAppendString("Tab_VerticalLayout_",xftrigger->name) ); xmlNode *TabVerticalLayoutItem = CreateItemNode(TabVerticalLayout,0,0,0); xmlNode *TabScrollWidget = Create1WidgetNode(TabVerticalLayoutItem,sAppendString("Tab_QScrollArea_",xftrigger->name),"QScrollArea",0,0,0,0); Create1PropertyNode(TabScrollWidget,"widgetResizable","bool", "true"); xmlNode *TabScrollWidgetContent = Create1WidgetNode(TabScrollWidget,sAppendString("Tab_QScrollAreaContent_",xftrigger->name),"QWidget",0,0,0,0); Create1GeometryProp(TabScrollWidgetContent,"0", "0", "639","342"); xmlNode *ContentLayout = CreateLayout(TabScrollWidgetContent,"QVBoxLayout",sAppendString("verticalLayout",xftrigger->name) ); sQtGenerateUIFromTree(tab_content,ContentLayout ,CallBackData,modelDocPtr,func); i++; } } } }else{ //fprintf(stdout,"\n[%s][%d]ERROR MAKING TABS",__FILE__,__LINE__); exit(1); } xftrigger->meta_info = strdup("1"); xftrigger = SearchSubTreeForNodes(head,(char *)"xf:trigger",&xf_trigger_attr,0,1); }} else { //fprintf(stdout,"\n[%s:%s] COULD NOT PARSE",head->name,head->type); } return 0; }
int qt_f_CheckBoxList(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { static int checkboxctr = 0; head->meta_info = (char *)"1"; sXformsNode *temp; sXformsNode *xfchoices = SearchSubTreeForNodes(head,(char *)"xf:choices",(sXformsNodeAttr *)0,0,0); if( xfchoices ){ xfchoices->meta_info = (char *)"1"; int ctr = 0; for( temp=xfchoices->child; temp != 0; ctr++,row++, temp=temp->next){ xmlNode *item = CreateItemNode(node,0,itoa(row),int2str[0]); temp->meta_info = strdup(int2str[1]); char *checkname = sAppendString("CheckBox_",itoa(checkboxctr)); Create1WidgetNodeWithStringProp(item,checkname,"QCheckBox","text",temp->name); //AppendNode(CallBackData,"NULL-REFERENCE", "NULL-INITVAL","NULL-VAL",sAppendString("CheckBox_",int2str[checkboxctr++]),"QCheckBox"); sXformsNodeAttr *attr = getAttrFromList(temp,"ref"); if(attr) { AppendNode(CallBackData,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),(char *)0,checkname,"QCheckBox",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],int2str[0],int2str[0],checkname,"QCheckBox",modelDocPtr,func); } } } row++; }
int qt_f_Select1Handler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { static int ddctr = 0; head->meta_info = strdup("1"); xmlNode *lblitem = CreateItemNode(node,0,itoa(row),int2str[0]); Create1WidgetNodeWithStringProp(lblitem,sAppendString("Label_",sAppendString("DDlbl_",itoa(ddctr))), "QLabel","text", head->name); xmlNode *dditem = CreateItemNode(node,0,itoa(row),int2str[2]); xmlNode *dd = Create1WidgetNode(dditem,sAppendString("DD_",itoa(ddctr)),"QComboBox",0,0,0,0); //AppendNode(CallBackData,"NULL-REFERENCE", "NULL-INITVAL","NULL-VAL",sAppendString("DD_",int2str[ddctr]),"QComboBox"); xmlNode *dd_prop = CreateNumberProperty(dd,"currentIndex",head->value); sXformsNodeAttr *attr = getAttrFromList(head,"ref"); sCbData * d = NULL; if(attr) { d = AppendNode(CallBackData,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),s_dupstr(head->value),sAppendString("DD_",itoa(ddctr)),"QComboBox",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],int2str[0],int2str[0],sAppendString("DD_",itoa(ddctr)),"QComboBox",modelDocPtr,func); } sXformsNode *temp; sXformsNode *xfchoices = SearchSubTreeForNodes(head,(char *)"xf:choices",(sXformsNodeAttr *)0,0,0); if( xfchoices ){ xfchoices->meta_info = strdup("1"); struct sCbValue * v = NULL; for( temp=xfchoices->child; temp != 0; temp=temp->next){ temp->meta_info = strdup(int2str[1]); xmlNode *choice = CreateItemNode(dd,0,0,0); CreateStringProperty(choice,"text", temp->name); if(temp == xfchoices->child) v = d->values = (sCbValue*) calloc(sizeof(sCbValue),1); else { v->next = (sCbValue*) calloc(sizeof(sCbValue),1); v = v->next; } v->ui_string = temp->name; v->value = temp->value; } } ddctr++; row++; }
int qt_f_InputHandler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { head->meta_info = (char *)"1"; char *name = sAppendString("Input_",itoa(inputctr)); xmlNode *lblitem = CreateItemNode(node,0,itoa(row),int2str[0]); Create1WidgetNodeWithStringProp(lblitem,sAppendString("Inputlbl_",itoa(inputctr)), "QLabel","text", head->name); xmlNode *inputitem = CreateItemNode(node,0,itoa(row),int2str[2]); xmlNode *InputWidget = Create1WidgetNode(inputitem,name,"QLineEdit",0,0,0,0); ActualName[lindex] = head->name; InputName[lindex] = name; lindex++; //AppendNode(&btn->nextref,"REFERENCE", "NULL","NULL",name,"QLineEdit"); sXformsNodeAttr *attr = getAttrFromList(head,"ref"); sXformsNodeAttr * attr_read_only = getAttrFromList(head,"readonly"); if(attr_read_only) { Create1PropertyNode(InputWidget,"readOnly","bool","true"); if(attr) { AppendNode(CallBackData,s_dupstr(attr->meta_info),"READONLY",(char *)0,s_dupstr(name),"Fl_Input",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],"READONLY",int2str[0],s_dupstr(name),"Fl_Input",modelDocPtr,func); } } else { if(attr) { AppendNode(CallBackData,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),(char *)0,s_dupstr(name),"Fl_Input",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],int2str[0],int2str[0],s_dupstr(name),"Fl_Input",modelDocPtr,func); } } row++; inputctr++; }
int qt_f_RadioButtonList(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { static int radioctr = 0; head->meta_info = strdup("1"); xmlNode *lblitem = CreateItemNode(node,0,itoa(row),int2str[0]); Create1WidgetNodeWithStringProp(lblitem,sAppendString("DDlbl_",itoa(radioctr)), "QLabel","text", head->name); xmlNode *radioitem = CreateItemNode(node,0,itoa(row),int2str[2]); char *proptype[] = {"string","bool","bool"}; char *propname[] = {"title","checkable","checked"}; char *propval[] = {(char *)0,"false","false"}; xmlNode *QGroupBox = Create1WidgetNode(radioitem,sAppendString("QGroupBox_",itoa(radioctr)), "QGroupBox",propname,proptype,propval,3); sXformsNode *temp; sXformsNode *xfchoices = SearchSubTreeForNodes(head,(char *)"xf:choices",(sXformsNodeAttr *)0,0,0); if( xfchoices ){ xfchoices->meta_info = (char *)"1"; int ctr = 0; for( temp=xfchoices->child; temp != 0; ctr++, temp=temp->next){ char buffer[5]; sprintf(buffer,"%d",5 + 80*ctr); temp->meta_info = strdup(int2str[1]); char *radioname = sAppendString("radio_",itoa(ctr)); xmlNode *radio = Create1WidgetNode(QGroupBox,radioname,"QRadioButton",0,0,0,0); //AppendNode(CallBackData,"NULL-REFERENCE", "NULL-INITVAL","NULL-VAL",sAppendString("radio_",int2str[ctr]),"QRadioButton"); sXformsNodeAttr *attr = getAttrFromList(temp,"ref"); if(attr) { AppendNode(CallBackData,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),(char *)0,radioname,"QRadioButton",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],int2str[0],int2str[0],radioname,"QRadioButton",modelDocPtr,func); } Create1GeometryProp(radio,buffer,"0","108", "26"); CreateStringProperty(radio,"text",temp->name); } } radioctr++; row++; }
void sDIDir::LoadDir() { sDIDir *nd; sDIFile *nf; sDirEntry *dir,*ds; sChar name[sDI_PATHSIZE]; sU32 prv[2]; List->Clear(); ds = dir = sSystem->LoadDir(Path); while(dir && dir->Name[0]) { if(dir->IsDir) { sCopyString(name,Path,sDI_PATHSIZE); sAppendString(name,"/",sDI_PATHSIZE); sAppendString(name,dir->Name,sDI_PATHSIZE); nd = new sDIDir; if(nd->Init(name,this,0)) List->Add(nd); } else { prv[0] = dir->Size; prv[1] = 0; sCopyString(name,dir->Name,sDI_NAMESIZE); nf = new sDIFile; if(nf->Init(name,this,prv)) List->Add(nf); } dir++; } delete[] ds; Complete = 1; }
sBool sFileWindow::ChangeExtension(sChar *path,sChar *newext) { sInt len,pos,i; GetPath(path,sDI_PATHSIZE); len = sGetStringLen(path); pos = len; for(i=0;i<len;i++) if(path[i]=='.') pos = i; path[pos] = 0; sAppendString(path,newext,sDI_PATHSIZE); return sTRUE; }
int qt_f_RangeHandler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { fprintf(stdout,"\n[%s][%d] HEAD = %s:%s \t\t NODE = %s",__func__,__LINE__,head->name, head->type,node->name); static int sliderctr = 0; xmlNode *lblitem = CreateItemNode(node,0,itoa(row++),int2str[0]); Create1WidgetNodeWithStringProp(lblitem,sAppendString("LabelSlider_",itoa(sliderctr++)), "QLabel","text", head->name); xmlNode *item = CreateItemNode(node,0,itoa(row++),int2str[0]); char *proptype[] = {"number","number","enum","enum","number"}; char *propval[] = {"100","50","Qt::Horizontal","QSlider::TicksBothSides","5"}; char *propname[] = {"maximum","value","orientation","tickPosition","tickInterval"}; Create1WidgetNode(item,sAppendString("Slider_",itoa(sliderctr)),"QSlider",propname,proptype,propval,5); //AppendNode(CallBackData,"REFERENCE", "NULL","NULL",sAppendString("Slider_",int2str[sliderctr]),"QSlider"); sXformsNodeAttr *attr = getAttrFromList(head,"ref"); if(attr) { AppendNode(CallBackData,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),(char *)0,sAppendString("Slider_",itoa(sliderctr)),"QSlider",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],int2str[0],int2str[0],sAppendString("Slider_",itoa(sliderctr)),"QSlider",modelDocPtr,func); } sliderctr++; row++; }
int qt_f_LabelHandler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { static int labelctr = 0; char *labelname = sAppendString("Label_",itoa(labelctr++)); head->meta_info = (char *)"1"; xmlNode *item = CreateItemNode(node,0,itoa(row++),int2str[0]); Create1WidgetNodeWithStringProp(item,labelname, "QLabel","text", "NULL"); sXformsNodeAttr *attr = getAttrFromList(head,"ref"); if(attr) { AppendNode(CallBackData,s_dupstr(attr->meta_info),s_dupstr(attr->private_data),(char *)0,labelname,"QLabel",modelDocPtr,func); } else { AppendNode(CallBackData,int2str[0],int2str[0],int2str[0],labelname,"QLabel",modelDocPtr,func); } }
int qt_f_FrameHandler(sXformsNode *head,xmlNode *node,struct sCbData **CallBackData,xmlDoc * modelDocPtr, CallBackInterfaceFunction func) { int i = 0, old_row = row; sXformsNode *temp = head; head -> meta_info = strdup("1"); for( i = 0; temp; i++, temp = temp->next) { fprintf(stdout,"\n[%s][%d] HEAD = %s:%s \t\t NODE = %s",__func__,__LINE__,temp->name, temp->type,node->name); xmlNode *itemContent = CreateItemNode(node,0,itoa(row++),int2str[0]); xmlNode *GridLayout = CreateFrame(itemContent,"QGroupBox",temp->name ); temp -> meta_info = strdup("1"); //sPrintsXformsTree(temp); sQtGenerateUIFromTree(temp,GridLayout ,CallBackData,modelDocPtr,func); CreateSpacer(GridLayout,sAppendString("Spacer_",head->name),"Qt::Vertical","20","40", itoa(row),int2str[0] ); } fprintf(stdout,"\n[%s][%d] NUMBER OF CHILDREN %d",__func__,__LINE__,i); row = old_row; }
void sSystemInfoWindow::OnPaint() { sInt x,y,h; sChar buffer[128]; sU32 col,cpu; sInt font; sInt oc,rc; sPainter->Paint(sGui->FlatMat,Client,sGui->Palette[sGC_BACK]); x = Client.x0+2; y = Client.y0+2; font = sGui->FixedFont; col = sGui->Palette[sGC_TEXT]; h = sPainter->GetHeight(font); sBroker->Stats(oc,rc); sSPrintF(buffer,sizeof(buffer),"Objects Allocated: %d",oc); sPainter->Print(font,x,y,buffer,col); y+=h; sSPrintF(buffer,sizeof(buffer),"Objects Rooted: %d",rc); sPainter->Print(font,x,y,buffer,col); y+=h; sSPrintF(buffer,sizeof(buffer),"Memory Used: %d",sSystem->MemoryUsed()); sPainter->Print(font,x,y,buffer,col); y+=h; sSPrintF(buffer,sizeof(buffer),"CPU Features: "); cpu = sSystem->GetCpuMask(); if(cpu&sCPU_CMOVE) sAppendString(buffer,"CMOVE " ,sizeof(buffer)); if(cpu&sCPU_RDTSC) sAppendString(buffer,"RDTSC " ,sizeof(buffer)); if(cpu&sCPU_MMX) sAppendString(buffer,"MMX " ,sizeof(buffer)); if(cpu&sCPU_MMX2) sAppendString(buffer,"MMX2 " ,sizeof(buffer)); if(cpu&sCPU_SSE) sAppendString(buffer,"SSE " ,sizeof(buffer)); if(cpu&sCPU_SSE2) sAppendString(buffer,"SSE2 " ,sizeof(buffer)); if(cpu&sCPU_3DNOW) sAppendString(buffer,"3DNOW " ,sizeof(buffer)); if(cpu&sCPU_3DNOW2) sAppendString(buffer,"3DNOW2 ",sizeof(buffer)); sPainter->Print(font,x,y,buffer,col); y+=h; sSPrintF(buffer,sizeof(buffer),"CPU Clock: %-8.2f",0.0f); col = sSystem->GetCpuMask(); sPainter->Print(font,x,y,buffer,col); y+=h; }
void AppendName(const sChar *str) {sAppendString(Name,str,sizeof(Name));}
sBool MAPFileReader::ReadDebugInfo(sChar *fileName,DebugInfo &to) { PUnDecorateSymbolName UnDecorateSymbolName = 0; // determine map file name sChar fileBuf[260]; sChar *text; sInt i; sCopyString(fileBuf,fileName,256); for(i=sGetStringLen(fileBuf)-1;i>=0 && fileBuf[i] != '.';i--); if(i > 0) sCopyString(fileBuf + i,".map",260-i); else sAppendString(fileBuf,".map",260); text = (sChar *) sSystem->LoadFile(fileBuf); if(!text) return sFALSE; // load dbghelp.dll to resolve symbol names if available void *module = LoadLibraryA("dbghelp.dll"); if(module) UnDecorateSymbolName = (PUnDecorateSymbolName) GetProcAddress(module,"UnDecorateSymbolName"); // actual reading code sChar *line,buffer[2048]; sInt j,code,data; sInt snum,offs,type,name,VA,fname; sInt symStart = to.Symbols.Count; Section *sec; DISymbol *sym; Sections.Init(); code = to.MakeString("CODE"); data = to.MakeString("DATA"); while(*text) { // find end of line line = text; while(*text && *text != '\n') text++; if(text[-1] == '\r' && text[0] == '\n') text[-1] = 0; if(*text) *text++ = 0; // parse this line of text if(line[0]==' ' && IsHexString(line+1,4) && line[5]==':' && IsHexString(line+6,8) && line[14]==' ') { if(IsHexString(line+15,8)) // section definition { sec = Sections.Add(); line += 1; sec->Num = sScanHex(line); line += 1; sec->Start = sScanHex(line); line += 1; sec->Length = sScanHex(line); line += 2; sec->Name.Index = ScanString(line,to); sScanSpace(line); type = ScanString(line,to); if(type == code) sec->Class = DIC_CODE; else if(type == data) sec->Class = DIC_DATA; else sec->Class = DIC_UNKNOWN; sec->Seen = sFALSE; } else // assume name definition { line += 1; snum = sScanHex(line); line += 1; offs = sScanHex(line); sec = GetSection(snum,offs); if(sec) { sScanSpace(line); name = ScanString(line,to); sScanSpace(line); VA = sScanHex(line); line += 5; fname = ScanString(line,to); if(!sec->Seen) { sym = to.Symbols.Add(); sSPrintF(buffer,2048,"__end%s",to.GetStringPrep(sec->Name.Index)); sym->Name.Index = to.MakeString(buffer); sym->FileNum = -1; sym->VA = VA-offs+sec->Start+sec->Length; sym->Size = 0; sym->Class = DIC_END; sec->Seen = sTRUE; } if(UnDecorateSymbolName) UnDecorateSymbolName(to.GetStringPrep(name),buffer,2048,0x1800); else sCopyString(buffer,to.GetStringPrep(name),2048); // add symbol sym = to.Symbols.Add(); sym->Name.Index = to.MakeString(buffer); sym->MangledName.Index = name; sym->FileNum = to.GetFile(fname); sym->VA = VA; sym->Size = 0; sym->Class = sec->Class; sym->NameSpNum = to.GetNameSpaceByName(buffer); } } } else if(!sCmpMem(line," Preferred load address is ",28) && IsHexString(line+28,8)) { line += 28; sU32 base = sScanHex(line); to.SetBaseAddress(base); } } // sort symbols by virtual address for(i=symStart+1;i<to.Symbols.Count;i++) for(j=i;j>symStart;j--) if(to.Symbols[j].VA<to.Symbols[j-1].VA) sSwap(to.Symbols[j],to.Symbols[j-1]); // calc sizes for(i=symStart;i<to.Symbols.Count;i++) { sym = &to.Symbols[i]; if(sym->Class!=DIC_END) { sVERIFY(i != to.Symbols.Count-1); sym->Size = sym[1].VA - sym->VA; } } // cleanup Sections.Exit(); delete[] text; return sTRUE; }
void TestStringFunctions() { sChar b0[256]; sChar b1[256]; sCheckModule(L"String Functions"); sClear(b0); sClear(b1); CHECK(sCmpString(L"0000",L"0000")==0); CHECK(sCmpString(L"0000",L"000")!=0); CHECK(sCmpString(L"000",L"0000")!=0); CHECK(sCmpString(L"000",L"100")!=0); CHECK(sCmpString(L"000",L"010")!=0); CHECK(sCmpString(L"000",L"001")!=0); CHECK(sCmpString(L"100",L"100")==0); CHECK(sCmpString(L"010",L"010")==0); CHECK(sCmpString(L"001",L"001")==0); CHECK(sCmpString(L"001",L"002")<0); CHECK(sCmpString(L"002",L"001")>0); CHECK(sCmpString(L"021",L"012")>0); sCopyString(b0,L"000000000000",256); sCopyString(b0+4,L"1111",256); CHECK(sCmpString(b0,L"00001111")==0); CHECK(sCmpString(b0+9,L"000")==0); sCopyString(b0,L"abcd",6); CHECK(sCmpString(b0,L"abcd")==0); sCopyString(b0,L"abcd",5); CHECK(sCmpString(b0,L"abcd")==0); sCopyString(b0,L"abcd",4); CHECK(sCmpString(b0,L"abc")==0); sCopyString(b0,L"abcd",3); CHECK(sCmpString(b0,L"ab")==0); sCopyString(b0,L"abcd",256); sAppendString(b0,L"1234",10); CHECK(sCmpString(b0,L"abcd1234")==0); sCopyString(b0,L"abcd",256); sAppendString(b0,L"1234",9); CHECK(sCmpString(b0,L"abcd1234")==0); sCopyString(b0,L"abcd",256); sAppendString(b0,L"1234",8); CHECK(sCmpString(b0,L"abcd123")==0); sCopyString(b0,L"abcd",256); sAppendString(b0,L"1234",7); CHECK(sCmpString(b0,L"abcd12")==0); sCopyString(b0,L"aBcDeFgHiJkLmNoPqRsTuVwXyZ \n\t_:;öÄü-",256); sCopyString(b1,L"AbCdEfGhIjKlMnOpQrStUvWxYz \n\t_:;ÖäÜ-",256); sMakeUpper(b0); sMakeLower(b1); sMakeUpper(b1); CHECK(sCmpString(b0,b1)==0); sMakeLower(b0); sMakeLower(b1); CHECK(sCmpString(b0,b1)==0); CHECK(sFindString(b0, L"klmn") == 10); CHECK(sFindString(b0, L"KlMn") == -1); CHECK(sFindString(b0, L"abcd") == 0); }
sBool sImplementFileMenu(sU32 cmd,sGuiWindow *win,sObject *obj,sFileWindow *file,sBool dirty,sInt maxsave) { sDiskItem *di; sBrowserApp *browser; sU32 *mem,*data; static sChar path[sDI_PATHSIZE]; static sChar cancelpath[sDI_PATHSIZE]; switch(cmd) { case sCMDLS_NEW: if(dirty) { (new sDialogWindow)->InitOkCancel(win,"New File","Current Project is not saved.\nProceed deleting it?",sCMDLS_CLEAR,0); } else sGui->Send(sCMDLS_CLEAR,win); return sTRUE; case sCMDLS_OPEN: if(dirty) { (new sDialogWindow)->InitOkCancel(win,"Open File","Current Project is not saved.\nProceed deleting it?",sCMDLS_READx,0); } else sGui->Send(sCMDLS_READx,win); return sTRUE; case sCMDLS_READx: file->OkCmd = sCMDLS_READ; file->CancelCmd = sCMDLS_CANCEL; file->SendTo = win; sGui->AddApp(file); file->SetFocus(0); return sTRUE; case sCMDLS_MERGE: file->OkCmd = sCMDLS_MERGEIT; file->CancelCmd = sCMDLS_CANCEL; file->SendTo = win; sGui->AddApp(file); file->SetFocus(0); return sTRUE; case sCMDLS_SAVEAS: file->OkCmd = sCMDLS_WRITE; file->CancelCmd = sCMDLS_CANCEL; file->SendTo = win; sGui->AddApp(file); file->SetFocus(1); return sTRUE; case sCMDLS_SAVE: sGui->Send(sCMDLS_WRITE,win); return sTRUE; case sCMDLS_EXIT: if(dirty) { (new sDialogWindow)->InitOkCancel(win,"Exit","Current Project is not saved.\nProceed exit?",sCMDLS_EXITx,0); } else sGui->Send(sCMDLS_CANCEL,win); return sTRUE; case sCMDLS_EXITx: win->Parent->RemChild(win); return sTRUE; case sCMDLS_CLEAR: obj->Clear(); return sTRUE; case sCMDLS_READ: if(file->Parent) file->Parent->RemChild(file); file->GetPath(path,sizeof(path)); file->GetPath(cancelpath,sizeof(cancelpath)); di = sDiskRoot->Find(path,sDIF_EXISTING); if(!di) { (new sDialogWindow)->InitOk(win,"Open File","Load Failed\nFile not Found",0); sGui->Send(sCMDLS_CLEAR,win); } else { data = mem = (sU32 *)di->Load(); if(!mem) { (new sDialogWindow)->InitOk(win,"Open File","Load Failed\nDisk Error",0); sGui->Send(sCMDLS_CLEAR,win); } else { if(!obj->Read(data)) { (new sDialogWindow)->InitOk(win,"Open File","Load Failed\nFile Format Error",0); sGui->Send(sCMDLS_CLEAR,win); } delete[] mem; } } return sTRUE; case sCMDLS_MERGEIT: if(file->Parent) file->Parent->RemChild(file); file->GetPath(path,sizeof(path)); di = sDiskRoot->Find(path,sDIF_EXISTING); if(!di) { (new sDialogWindow)->InitOk(win,"Merge File","Merge Failed\nFile not Found",0); sGui->Send(sCMDLS_CLEAR,win); } else { data = mem = (sU32 *)di->Load(); if(!mem) { (new sDialogWindow)->InitOk(win,"Merge File","Merge Failed\nDisk Error",0); sGui->Send(sCMDLS_CLEAR,win); } else { if(!obj->Merge(data)) { (new sDialogWindow)->InitOk(win,"Merge File","Merge Failed\nFile Format Error",0); sGui->Send(sCMDLS_CLEAR,win); } delete[] mem; } } file->SetPath(cancelpath); return sTRUE; case sCMDLS_WRITE: if(file->Parent) // destroy window file->Parent->RemChild(file); file->GetPath(path,sizeof(path)); di = sDiskRoot->Find(path,sDIF_CREATE); // write it out if(di) { sDirEntry *de,*dedel; sChar *s0,*s1; sInt len; sChar backup[sDI_PATHSIZE]; sInt best; sChar buffer[128]; sInt i; sU8 *mem; sInt size; if(!sSystem->CheckDir("backup")) sSystem->MakeDir("backup"); sCopyString(backup,"backup/",sizeof(backup)); s0 = sFileFromPathString(path); s1 = sFileExtensionString(s0); if(s1==0) len = sGetStringLen(s0); else len = s1-s0; sAppendString(backup,s0,sizeof(backup)); s1 = sFileExtensionString(backup); if(s1) *s1 = 0; dedel = de = sSystem->LoadDir("backup"); best = 0; while(de->Name[0]) { if(!de->IsDir && sCmpMemI(de->Name,s0,len)==0 && de->Name[len]=='#') { i = sAtoi(de->Name+len+1); if(i>best) best = i; } de++; } delete[] dedel; de=dedel=0; sSPrintF(buffer,sizeof(buffer),"#%04d.k",best+1); sAppendString(backup,buffer,sizeof(buffer)); size = di->GetBinarySize(sDIA_DATA); mem = (sU8 *)di->Load(); if(mem) { if(!sSystem->SaveFile(backup,mem,size)) { (new sDialogWindow)->InitOkCancel(win,"Save File","Backup Failed\nPress OK to continue,\nCANCEL to abort saving.",sCMDLS_WRITEb,0); return sTRUE; } delete[] mem; mem = 0; } } /* fall */ case sCMDLS_WRITEb: data = mem = new sU32[maxsave/4]; // create save data if(!obj->Write(data)) { (new sDialogWindow)->InitOk(win,"Save File","Save Failed\nInternal Data Error",0); } else { di = sDiskRoot->Find(path,sDIF_CREATE); // write it out if(di==0 || !di->Save(mem,(data-mem)*4)) { (new sDialogWindow)->InitOk(win,"Save File","Save Failed\nDisk Error",0); } } delete[] mem; return sTRUE; case sCMDLS_BROWSER: browser = new sBrowserApp; browser->AddTitle("Browser"); file->GetPath(path,sizeof(path)); browser->SetPath(path); sGui->AddApp(browser); browser->TreeFocus(); return sTRUE; case sCMDLS_CANCEL: if(file->Parent) file->Parent->RemChild(file); return sTRUE; case sCMDLS_QUICKSAVE: sSystem->MakeDir(BACKUPQ); if(sSystem->CheckDir(BACKUPQ)) { sSystem->DeleteFile(BACKUPQ"quicksave-9.k"); sSystem->RenameFile(BACKUPQ"quicksave-8.k",BACKUPQ"quicksave-9.k"); sSystem->RenameFile(BACKUPQ"quicksave-7.k",BACKUPQ"quicksave-8.k"); sSystem->RenameFile(BACKUPQ"quicksave-6.k",BACKUPQ"quicksave-7.k"); sSystem->RenameFile(BACKUPQ"quicksave-5.k",BACKUPQ"quicksave-6.k"); sSystem->RenameFile(BACKUPQ"quicksave-4.k",BACKUPQ"quicksave-5.k"); sSystem->RenameFile(BACKUPQ"quicksave-3.k",BACKUPQ"quicksave-4.k"); sSystem->RenameFile(BACKUPQ"quicksave-2.k",BACKUPQ"quicksave-3.k"); sSystem->RenameFile(BACKUPQ"quicksave-1.k",BACKUPQ"quicksave-2.k"); data = mem = new sU32[maxsave/4]; // create save data if(!obj->Write(data)) { (new sDialogWindow)->InitOk(win,"Save File","Save Failed\nInternal Data Error",0); } else { if(!sSystem->SaveFile(BACKUPQ"quicksave-1.k",(sU8*)mem,(data-mem)*4)) { (new sDialogWindow)->InitOk(win,"Save File","Quicksave Failed\nDisk Error",0); } } delete[] mem; } else (new sDialogWindow)->InitOk(win,"Save file","Couldn't create quicksave directory!",0); return sTRUE; case sCMDLS_AUTOSAVE: sSystem->MakeDir(BACKUPA); if(sSystem->CheckDir(BACKUPA)) { sSystem->DeleteFile(BACKUPA"autosave-9.k"); sSystem->RenameFile(BACKUPA"autosave-8.k",BACKUPA"autosave-9.k"); sSystem->RenameFile(BACKUPA"autosave-7.k",BACKUPA"autosave-8.k"); sSystem->RenameFile(BACKUPA"autosave-6.k",BACKUPA"autosave-7.k"); sSystem->RenameFile(BACKUPA"autosave-5.k",BACKUPA"autosave-6.k"); sSystem->RenameFile(BACKUPA"autosave-4.k",BACKUPA"autosave-5.k"); sSystem->RenameFile(BACKUPA"autosave-3.k",BACKUPA"autosave-4.k"); sSystem->RenameFile(BACKUPA"autosave-2.k",BACKUPA"autosave-3.k"); sSystem->RenameFile(BACKUPA"autosave-1.k",BACKUPA"autosave-2.k"); data = mem = new sU32[maxsave/4]; // create save data if(!obj->Write(data)) { (new sDialogWindow)->InitOk(win,"Save File","Save Failed\nInternal Data Error",0); } else { if(!sSystem->SaveFile(BACKUPA"autosave-1.k",(sU8*)mem,(data-mem)*4)) { (new sDialogWindow)->InitOk(win,"Save File","Autosave Failed\nDisk Error",0); } } delete[] mem; } else (new sDialogWindow)->InitOk(win,"Save file","Couldn't create autosave/backup directory!",0); return sTRUE; default: return sFALSE; } }