zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit 02cdb74b43d6b1e2d467f48746147603c2796d57
parent 7b4a3a32f8aa14e66f8d4e9637f18af38cf4041a
Author: paulnasca <paulnasca>
Date:   Sun, 29 Feb 2004 14:35:12 +0000

*** empty log message ***

Diffstat:
MChangeLog | 2+-
Msrc/Misc/Bank.C | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Msrc/Misc/Bank.h | 17++++++++++-------
Msrc/Misc/Part.h | 2--
Msrc/Misc/XMLwrapper.C | 2+-
Msrc/UI/BankUI.fl | 14+++++++-------
6 files changed, 77 insertions(+), 36 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -548,7 +548,7 @@ 27 Feb 2004 - Corectate erori la snprintf ( nu dadeam parametru "%s" inainte de string si daca acel string continea ceva %, era periculos) si alte erori - Micsorat timpul de marire amplitudine la ADnote (doar in cazul cand amplitudinea creste brusc ca la un LFO expdown) - Corectata o eroare foarte veche la LFO amplitudine (amplitudinea nu scadea corespunzator) -28 Feb 2004 - Se poate incarca instrumente din Bank +28 Feb 2004 - Se poate incarca si salva instrumente in Bank diff --git a/src/Misc/Bank.C b/src/Misc/Bank.C @@ -57,7 +57,7 @@ Bank::~Bank(){ /* * Get the name of an instrument from the bank */ -char *Bank::getname (unsigned char ninstrument){ +char *Bank::getname (unsigned int ninstrument){ if (emptyslot(ninstrument)) return (defaultinsname); return (ins[ninstrument].name); }; @@ -65,7 +65,7 @@ char *Bank::getname (unsigned char ninstrument){ /* * Get the numbered name of an instrument from the bank */ -char *Bank::getnamenumbered (unsigned char ninstrument){ +char *Bank::getnamenumbered (unsigned int ninstrument){ if (emptyslot(ninstrument)) return (defaultinsname); snprintf(tmpinsname[ninstrument],PART_MAX_NAME_LEN+15,"%d. %s",ninstrument+1,getname(ninstrument)); return(tmpinsname[ninstrument]); @@ -74,15 +74,16 @@ char *Bank::getnamenumbered (unsigned char ninstrument){ /* * Changes the name of an instrument (and the filename) */ -void Bank::setname(unsigned char ninstrument,const char *newname){ +void Bank::setname(unsigned int ninstrument,const char *newname){ // if (ninstrument<0)&&() }; /* * Check if there is no instrument on a slot from the bank */ -int Bank::emptyslot(unsigned char ninstrument){ +int Bank::emptyslot(unsigned int ninstrument){ if (ninstrument>=BANK_SIZE) return (1); + if (ins[ninstrument].filename==NULL) return(1); if (ins[ninstrument].used) return (0); else return(1); @@ -91,38 +92,74 @@ int Bank::emptyslot(unsigned char ninstrument){ /* * Removes the instrument from the bank */ -void Bank::clearslot(unsigned char ninstrument){ +void Bank::clearslot(unsigned int ninstrument){ + if (emptyslot(ninstrument)) return; + remove(ins[ninstrument].filename); + deletefrombank(ninstrument); + }; /* * Save the instrument to a slot */ -void Bank::savetoslot(unsigned char ninstrument,const char *name,XMLwrapper *buf){ +void Bank::savetoslot(unsigned int ninstrument,Part *part){ + clearslot(ninstrument); + + const int maxfilename=200; + char tmpfilename[maxfilename+20]; + memset(tmpfilename,0,maxfilename+20); + + snprintf(tmpfilename,maxfilename,"%4d-%s",ninstrument+1,(char *)part->Pname); + + //add the zeroes at the start of filename + for (int i=0;i<4;i++) if (tmpfilename[i]==' ') tmpfilename[i]='0'; + + //make the filenames legal + for (int i=0;i<strlen(tmpfilename);i++) { + char c=tmpfilename[i]; + if ((c>='0')&&(c<='9')) continue; + if ((c>='A')&&(c<='Z')) continue; + if ((c>='a')&&(c<='z')) continue; + if ((c=='-')||(c==' ')) continue; + + tmpfilename[i]='_'; + }; + + strncat(tmpfilename,".xml",maxfilename+10); + + int fnsize=strlen(dirname)+strlen(tmpfilename)+10; + char *filename=new char[fnsize+1]; + memset(filename,0,fnsize+2); + + if (config.cfg.GzipCompression) { + tmpfilename[strlen(tmpfilename)]='z'; + tmpfilename[strlen(tmpfilename)+1]=0; + }; + snprintf(filename,fnsize,"%s/%s",dirname,tmpfilename); + + remove(filename); + part->saveXML(filename); + addtobank(ninstrument,tmpfilename,(char *) part->Pname); + + delete(filename); }; /* * Loads the instrument from the bank to a buffer */ -void Bank::loadfromslot(unsigned char ninstrument,Part *part){ +void Bank::loadfromslot(unsigned int ninstrument,Part *part){ if (emptyslot(ninstrument)) return; - if ((dirname==NULL)||(ins[ninstrument].filename==NULL)) return; part->defaultsinstrument(); - char tmpfilename[1001]; - memset(tmpfilename,0,1001); - - snprintf(tmpfilename,1000,"%s/%s",dirname,ins[ninstrument].filename); + printf("load: %s\n",ins[ninstrument].filename); - printf("load: %s\n",tmpfilename); - - part->loadXMLinstrument(tmpfilename); + part->loadXMLinstrument(ins[ninstrument].filename); }; /* -/* * Load a bank from a file and makes it current */ int Bank::loadbank(const char *bankdirname){ @@ -165,6 +202,7 @@ int Bank::loadbank(const char *bankdirname){ memset(name,0,PART_MAX_NAME_LEN+1); snprintf(name,PART_MAX_NAME_LEN,"%s",filename); + //remove the file extension for (int i=strlen(name)-1;i>=2;i--){ if (name[i]=='.') { name[i]='\0'; @@ -195,6 +233,7 @@ int Bank::newbank(const char *newbankdirname, int overwrite){ * Check if the bank is locked (i.e. the file opened was readonly) */ int Bank::locked(){ + return(0); }; // private stuff @@ -230,9 +269,10 @@ int Bank::addtobank(int pos, const char *filename, const char* name){ snprintf(ins[pos].name,PART_MAX_NAME_LEN,"%s",name); snprintf(tmpinsname[pos],PART_MAX_NAME_LEN+10," "); - int len=strlen(filename); + + int len=strlen(filename)+1+strlen(dirname); ins[pos].filename=new char[len+1]; - snprintf(ins[pos].filename,len+1,"%s",filename); + snprintf(ins[pos].filename,len+1,"%s/%s",dirname,filename); return(0); }; diff --git a/src/Misc/Bank.h b/src/Misc/Bank.h @@ -33,13 +33,16 @@ class Bank{ public: Bank(); ~Bank(); - char *getname(unsigned char ninstrument); - char *getnamenumbered(unsigned char ninstrument); - void setname(unsigned char ninstrument,const char *newname); - int emptyslot(unsigned char ninstrument); - void clearslot(unsigned char ninstrument); - void savetoslot(unsigned char ninstrument,const char *name,XMLwrapper *xml); - void loadfromslot(unsigned char ninstrument,Part *part); + char *getname(unsigned int ninstrument); + char *getnamenumbered(unsigned int ninstrument); + void setname(unsigned int ninstrument,const char *newname); + + //returns 0 if the slot is not empty or 1 if the slot is empty + int emptyslot(unsigned int ninstrument); + + void clearslot(unsigned int ninstrument); + void savetoslot(unsigned int ninstrument,Part *part); + void loadfromslot(unsigned int ninstrument,Part *part); int loadbank(const char *bankdirname); // int savebank(const char *newbankfilename,int overwrite); diff --git a/src/Misc/Part.h b/src/Misc/Part.h @@ -106,8 +106,6 @@ class Part{ void setPpanning(char Ppanning); unsigned char Pvelsns;//velocity sensing (amplitude velocity scale) unsigned char Pveloffs;//velocity offset -// zzzz unsigned char PADnoteenabled;//if ADnote is enabled -//zzz unsigned char PSUBnoteenabled;//if SUBnote is enabled unsigned char Pnoteon;//if the part receives NoteOn messages unsigned char Pkitmode;//if the kitmode is enabled unsigned char Pdrummode;//if all keys are mapped and the system is 12tET (used for drums) diff --git a/src/Misc/XMLwrapper.C b/src/Misc/XMLwrapper.C @@ -87,7 +87,7 @@ int XMLwrapper::saveXMLfile(char *filename){ int fnsize=strlen(filename)+100; char *filenamenew=new char [fnsize]; - if (compression) snprintf(filenamenew,fnsize,"%sz",filename); + if ((compression)&&(filename[strlen(filename)-1]!='z')) snprintf(filenamenew,fnsize,"%sz",filename); else snprintf(filenamenew,fnsize,"%s",filename); int result=dosavefile(filenamenew,compression,xmldata); diff --git a/src/UI/BankUI.fl b/src/UI/BankUI.fl @@ -24,7 +24,7 @@ decl {\#include <FL/Fl_File_Chooser.H>} {public decl {\#include "../Misc/Master.h"} {public } -decl {\#include "../Misc/Bank.h"} {selected public +decl {\#include "../Misc/Bank.h"} {public } class BankProcess_ {} { @@ -83,8 +83,7 @@ label(bank->getnamenumbered(nslot));} {} class BankUI {: {public BankProcess_} } { - Function {make_window()} {open - } { + Function {make_window()} {} { Fl_Window bankuiwindow { label Bank xywh {16 205 770 430} type Double hide @@ -248,9 +247,7 @@ if ((what==1)&&(mode==2)){//save(write) to slot if (!bank->emptyslot(slot)) if (!fl_ask("Overwrite the slot no. %d ?",slot+1)) goto nooverwriteslot; pthread_mutex_lock(&master->mutex); - master->part[*npart]->saveloadbuf(&slbuf,2); - bank->setname(slot,(char *)master->part[*npart]->Pname); - bank->savetoslot(slot,(char *)master->part[*npart]->Pname,NULL); + bank->savetoslot(slot,master->part[*npart]); pthread_mutex_unlock(&master->mutex); bs[slot]->refresh(); @@ -282,7 +279,10 @@ if ((what==1)&&(mode==3)&&(!bank->emptyslot(slot))){//Clears the slot bank->clearslot(slot); bs[slot]->refresh(); }; -};} {} +}; + +refreshmainwindow();} {selected + } } Function {refreshmainwindow()} {} { code {bankuiwindow->label(bank->bankfiletitle);