コード例 #1
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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++;
}
コード例 #2
0
ファイル: _diskitem.cpp プロジェクト: Ambrevar/fr_public
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;
  }
}
コード例 #3
0
ファイル: _diskitem.cpp プロジェクト: Ambrevar/fr_public
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);
}
コード例 #4
0
ファイル: appbrowser.cpp プロジェクト: Ambrevar/fr_public
void sFileWindow::GetPath(sChar *buffer,sInt size)
{
  sCopyString(buffer,Path,size);
  if(Name[0])
  {
    sAppendString(buffer,"/",size);
    sAppendString(buffer,Name,size);
  }
}
コード例 #5
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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; 
}
コード例 #6
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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++;
}
コード例 #7
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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++;
}
コード例 #8
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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++;
}
コード例 #9
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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++;
}
コード例 #10
0
ファイル: _diskitem.cpp プロジェクト: Ambrevar/fr_public
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;
}
コード例 #11
0
ファイル: appbrowser.cpp プロジェクト: Ambrevar/fr_public
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;
}
コード例 #12
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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++;
}
コード例 #13
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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);
  	 }
}
コード例 #14
0
ファイル: sQtParseTree.cpp プロジェクト: beku/SimpleUI
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;
}
コード例 #15
0
ファイル: _diskitem.cpp プロジェクト: Ambrevar/fr_public
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;
}
コード例 #16
0
ファイル: _gui.hpp プロジェクト: Ambrevar/fr_public
 void AppendName(const sChar *str) {sAppendString(Name,str,sizeof(Name));}
コード例 #17
0
ファイル: mapfile.cpp プロジェクト: Ambrevar/fr_public
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;
}
コード例 #18
0
ファイル: main.cpp プロジェクト: Ambrevar/fr_public
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);
}
コード例 #19
0
ファイル: appbrowser.cpp プロジェクト: Ambrevar/fr_public
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;
  }
}