commit fec6008ec275f404b1227f8f0d0b5e29398649de
parent eb5f46296ac784b707e950aeca8b72c40e82200c
Author: paulnasca <paulnasca>
Date: Thu, 12 Feb 2004 20:25:08 +0000
*** empty log message ***
Diffstat:
7 files changed, 119 insertions(+), 6 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -531,4 +531,5 @@
10 Feb 2004 - Adaugata salvarea parametrilor pt. basefunction la OscilGen
- Inceput sa scriu incarcarea parametrilor
11 Feb 2004 - Se pot incarca cativa parametrii de la master
+12 Feb 2004 - Continuat incarcarea parametrilor XML si la part (neterminat)
diff --git a/src/Makefile b/src/Makefile
@@ -51,7 +51,7 @@ subdirs=DSP Effects Input Misc Output Params Synth Seq
all:
$(MAKE) -C UI $@
- rm -f Make.deps zynaddsubfx zynaddsubfx.exe
+ rm -f Make.deps
@for name in $(subdirs); do sh -c "cd $$name ; $(CXX) -MM -MG -w *.C >> ../Make.deps ; cd .."; done
@for name in $(subdirs); do sh -c "make -C $$name $@"; done
$(MAKE) objs
diff --git a/src/Misc/Master.C b/src/Misc/Master.C
@@ -811,12 +811,30 @@ int Master::loadXML(char *filename){
};
void Master::getfromXML(XMLwrapper *xml){
- xml->enterbranch("MASTER");
+ if (xml->enterbranch("MASTER")){
Pvolume=xml->getpar127("volume",Pvolume);
Pkeyshift=xml->getpar127("key_shift",Pkeyshift);
ctl.NRPN.receive=xml->getparbool("nrpn_receive",ctl.NRPN.receive);
- xml->exitbranch();
+
+ for (int npart=0;npart<NUM_MIDI_PARTS;npart++){
+ if (xml->enterbranch("PART",npart)==0) continue;
+ part[npart]->getfromXML(xml);
+ xml->exitbranch();
+ };
+
+/* if (xml->enterbranch("MICROTONAL")){
+ //
+ xml->exitbranch();
+ };
+
+
+ etc.
+
+
+*/
+ xml->exitbranch();
+ };
};
diff --git a/src/Misc/Part.C b/src/Misc/Part.C
@@ -1043,3 +1043,67 @@ int Part::saveXML(char *filename){
delete (xml);
return(0);
};
+
+
+void Part::getfromXMLinstrument(XMLwrapper *xml){
+ if (xml->enterbranch("INFO")){
+ xml->getparstr("name",(char *)Pname,PART_MAX_NAME_LEN);
+ xml->getparstr("author",(char *)info.Pauthor,MAX_INFO_TEXT_SIZE);
+ xml->getparstr("comments",(char *)info.Pcomments,MAX_INFO_TEXT_SIZE);
+ info.Ptype=xml->getpar("type",info.Ptype,0,16);
+
+ xml->endbranch();
+ };
+
+
+
+
+ //!!!!!!!!!!!continui de aici
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+};
+
+void Part::getfromXML(XMLwrapper *xml){
+ Penabled=xml->getparbool("enabled",Penabled);
+
+ Pvolume=xml->getpar127("volume",Pvolume);
+ Ppanning=xml->getpar127("panning",Ppanning);
+
+ Pminkey=xml->getpar127("min_key",Pminkey);
+ Pmaxkey=xml->getpar127("max_key",Pmaxkey);
+ Pkeyshift=xml->getpar127("key_shift",Pkeyshift);
+ Prcvchn=xml->getpar127("rcv_chn",Prcvchn);
+
+ Pvelsns=xml->getpar127("velocity_sensing",Pvelsns);
+ Pveloffs=xml->getpar127("velocity_offset",Pveloffs);
+
+ Pnoteon=xml->getparbool("note_on",Pnoteon);
+ Ppolymode=xml->getparbool("poly_mode",Ppolymode);
+ Pkeylimit=xml->getpar127("key_limit",Pkeylimit);
+
+ if (xml->enterbranch("INSTRUMENT")){
+ getfromXMLinstrument(xml);
+ xml->exitbranch();
+ };
+
+ xml->enterbranch("CONTROLLER");
+// ctl.(xml);
+ xml->exitbranch();
+
+};
+
+
+
diff --git a/src/Misc/Part.h b/src/Misc/Part.h
@@ -67,6 +67,9 @@ class Part{
void defaults();
void defaultsinstrument();
+ void getfromXML(XMLwrapper *xml);
+ void getfromXMLinstrument(XMLwrapper *xml);
+
void saveloadbufkititem(Buffer *buf,unsigned char item,int saveitem0);
void swapcopyitem(int item1,int item2,int mode);
diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C
@@ -139,7 +139,7 @@ int XMLwrapper::loadXMLfile(char *filename){
FILE *file=fopen(filename,"r");
if (file==NULL) return(-1);
- root=tree=mxmlLoadFile(NULL,file,MXML_NO_CALLBACK);
+ root=tree=mxmlLoadFile(NULL,file,MXML_OPAQUE_CALLBACK);
fclose(file);
if (tree==NULL) return(-1);//this is not XML
@@ -167,11 +167,20 @@ int XMLwrapper::loadXMLfile(char *filename){
int XMLwrapper::enterbranch(char *name){
node=mxmlFindElement(peek(),peek(),name,NULL,NULL,MXML_DESCEND_FIRST);
if (node==NULL) return(0);
+
+ push(node);
+ return(1);
+};
+
+int XMLwrapper::enterbranch(char *name,int id){
+ snprintf(tmpstr,TMPSTR_SIZE,"%d",id);
+ node=mxmlFindElement(peek(),peek(),name,"id",tmpstr,MXML_DESCEND_FIRST);
+ if (node==NULL) return(0);
push(node);
-
return(1);
};
+
void XMLwrapper::exitbranch(){
pop();
};
@@ -216,6 +225,17 @@ int XMLwrapper::getparbool(char *name,int defaultpar){
else return(0);
};
+void XMLwrapper::getparstr(char *name,char *par,int maxstrlen){
+ memset(par,0,maxstrlen);
+ node=mxmlFindElement(peek(),peek(),"string","name",name,MXML_DESCEND_FIRST);
+
+ if (node==NULL) return;
+ if (node->child==NULL) return;
+ if (node->child->type!=MXML_OPAQUE) return;
+
+ snprintf(par,maxstrlen,node->child->value.element.name);
+
+};
/** Private members **/
diff --git a/src/Misc/XMLwrapper.h b/src/Misc/XMLwrapper.h
@@ -73,7 +73,12 @@ class XMLwrapper{
//enter into the branch
//returns 1 if is ok, or 0 otherwise
int enterbranch(char *name);
-
+
+
+ //enter into the branch with id
+ //returns 1 if is ok, or 0 otherwise
+ int enterbranch(char *name, int id);
+
//exits from a branch
void exitbranch();
@@ -92,6 +97,8 @@ class XMLwrapper{
int getpar127(char *name,int defaultpar);
int getparbool(char *name,int defaultpar);
+
+ void getparstr(char *name,char *par,int maxstrlen);
private:
mxml_node_t *tree;//all xml data
mxml_node_t *root;//xml data used by zynaddsubfx