void saveBlock(const char *filename, int blocknum, int windownum){ struct Tracker_Windows *window; struct WBlocks *wblock; wblock=getWBlockFromNumA( windownum, &window, blocknum ); if(wblock==NULL) return; if (filename==NULL || !strcmp(filename, "")) filename = "/tmp/block.block"; if (Save_Initialize(STRING_create(filename), "RADIUM BLOCK")==false) return; SaveWBlock(wblock); SaveBlock(wblock->block); if( ! dc.success){ handleError("Problems writing to file.\n"); } DISK_close_and_delete(dc.file); }
bool hasRange(int blocknum, int windownum){ struct Tracker_Windows *window; struct WBlocks *wblock; wblock=getWBlockFromNumA( windownum, &window, blocknum ); if(wblock==NULL) return false; return wblock->isranged; }
int addNote2(float notenum,int velocity, int line,int counter,int dividor, int end_line,int end_counter,int end_dividor, int windownum, int blocknum, int tracknum) { struct Tracker_Windows *window; struct WBlocks *wblock=getWBlockFromNumA(-1,&window,blocknum); struct WTracks *wtrack=getWTrackFromNum(windownum,blocknum,tracknum); if(wblock==NULL || wtrack==NULL) { GFX_Message(NULL, "unknown wblock(%p) or wtrack(%p) %d/%d/%d\n",wblock,wtrack,windownum,blocknum,tracknum); return -1; } Place *place = PlaceCreate(line,counter,dividor); ValidatePlace(place); if (!PlaceLegal(wblock->block, place)) { GFX_Message(NULL, "Place %d + %d/%d is not legal", line, counter, dividor); return -1; } Place *end_place = end_line==-1 ? NULL : PlaceCreate(end_line,end_counter,end_dividor); ValidatePlace(end_place); if (end_place != NULL && !PlaceLegal(wblock->block, end_place)) { GFX_Message(NULL, "Place %d + %d/%d is not legal", end_line, end_counter, end_dividor); return -1; } struct Notes *note = InsertNote(wblock, wtrack, place, end_place, notenum, velocity, true); window->must_redraw=true; return ListFindElementPos3(&wtrack->track->notes->l,¬e->l); }
Place getRangeEndPlace(int blocknum, int windownum){ struct Tracker_Windows *window; struct WBlocks *wblock; wblock=getWBlockFromNumA( windownum, &window, blocknum ); if(wblock==NULL) return place(1,0,1); int realline = wblock->rangey2; if (realline < 0 || realline >= wblock->num_reallines) return place(wblock->block->num_lines,0,1); return wblock->reallines[realline]->l.p; }
int getRangeEndTrack(int blocknum, int windownum){ struct Tracker_Windows *window; struct WBlocks *wblock; wblock=getWBlockFromNumA( windownum, &window, blocknum ); if(wblock==NULL) return wblock->block->num_tracks; if (wblock->rangex1 < 0) return 0; if (wblock->rangex1 >= wblock->block->num_tracks) return wblock->block->num_tracks-1; return wblock->rangex2+1; }
int addBPM(int bpm, Place place, int blocknum) { struct Tracker_Windows *window; struct WBlocks *wblock=getWBlockFromNumA(-1,&window,blocknum); if(wblock==NULL) return -1; if (!PlaceLegal(wblock->block, &place)) { GFX_Message(NULL, "Place %s is not legal", PlaceToString(&place)); return -1; } ADD_UNDO(Tempos_CurrPos(window)); struct Tempos *tempo = SetTempo(wblock->block,&place,bpm); window->must_redraw=true; return ListFindElementPos3(&wblock->block->tempos->l,&tempo->l); }
int addLPB(int lpb_value, Place place, int blocknum) { struct Tracker_Windows *window; struct WBlocks *wblock=getWBlockFromNumA(-1,&window,blocknum); if(wblock==NULL) return -1; if (!PlaceLegal(wblock->block, &place)) { GFX_Message(NULL, "Place %s is not legal", PlaceToString(&place)); return -1; } ADD_UNDO(LPBs_CurrPos(window)); struct LPBs *lpb = SetLPB(wblock->block,&place,lpb_value); window->must_redraw=true; return ListFindElementPos3(&wblock->block->lpbs->l,&lpb->l); }
int addSignature(int numerator, int denominator, Place place, int blocknum) { struct Tracker_Windows *window; struct WBlocks *wblock=getWBlockFromNumA(-1,&window,blocknum); if(wblock==NULL) { GFX_Message(NULL, "unknown block(%p)",blocknum); return -1; } if (!PlaceLegal(wblock->block, &place)) { GFX_Message(NULL, "Place %s is not legal", PlaceToString(&place)); return -1; } ADD_UNDO(Signatures_CurrPos(window)); struct Signatures *signature = SetSignature(wblock->block,&place,ratio(numerator, denominator)); window->must_redraw=true; return ListFindElementPos3(&wblock->block->signatures->l,&signature->l); }
void addNoteAdds( PyObject *noteadds, int windownum, int blocknum, int tracknum, float startplace, int sort ){ struct Tracker_Windows *window; struct WBlocks *wblock; PyObject **pyobjects; int num_pyobjects; struct NoteAdds_track *nats; struct NoteAdds_track_do *nat_do=NULL; struct NoteAdds_block *nab; int num_nats; int lokke; const int attrformat[]={1,0,1,1}; char *attrnames[]={"place","notenum","volume","endplace"}; // printf("tracknum: %d\n",tracknum); wblock=getWBlockFromNumA( windownum, &window, blocknum ); if(wblock==NULL){ printf("wblock==NULL\n"); return; } pyobjects=PYR_getPYOArray(&num_pyobjects,noteadds); if(num_pyobjects==-1){ printf("Somethings wrong 1\n"); return; } if(num_pyobjects==0) return; nab=talloc(sizeof(struct NoteAdds_block)); nab->blocknum=blocknum; nab->num_nats_do=num_pyobjects; nab->nats_do=talloc(sizeof(struct NoteAdds_track_do *)*num_pyobjects); for(lokke=0;lokke<num_pyobjects;lokke++){ nats=PYR_getObjArray(&num_nats,pyobjects[lokke],4,attrformat,attrnames); if(num_nats==-1){ printf("Somethings wrong 2\n"); return; } nat_do=talloc(sizeof(struct NoteAdds_track_do)); nat_do->tracknum=tracknum; nat_do->num_nats=num_nats; nat_do->nats=nats; nat_do->startplace=startplace; nat_do->sort=sort; nab->nats_do[lokke]=nat_do; } // printf("num_pyobjects: %d\n",num_pyobjects); if(num_pyobjects==1){ AD_installNoteAdds_track_do( window, wblock, nat_do ); }else{ AD_insertNoteAdds_block_do(window,nab); } }