commit 02cdb74b43d6b1e2d467f48746147603c2796d57
parent 7b4a3a32f8aa14e66f8d4e9637f18af38cf4041a
Author: paulnasca <paulnasca>
Date: Sun, 29 Feb 2004 14:35:12 +0000
*** empty log message ***
Diffstat:
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);