struct Blocks *InsertBlock_CurrPos( struct Tracker_Windows *window ) { struct WBlocks *wblock=window->wblock; NInt blockpos=wblock->l.num; ADD_UNDO(Block_Insert(blockpos)); struct Blocks *ret; PC_Pause();{ ret = InsertBlock(blockpos,wblock->block->num_tracks,wblock->block->num_lines,"NN"); SelectWBlock(window,(struct WBlocks *)ListFindElement1(&window->wblocks->l,blockpos)); BS_UpdateBlockList(); BS_UpdatePlayList(); }PC_StopPause(window); return ret; }
void loadBlock(const char *filename_c){ struct Tracker_Windows *window=getWindowFromNum(-1);if(window==NULL) return; bool success = false; bool have_made_undo = false; if (filename_c==NULL || !strcmp(filename_c, "")) filename_c = "/tmp/block.block"; const wchar_t *filename = STRING_create(filename_c); int num_blocks = root->song->num_blocks; if (Load_Initialize(filename, "RADIUM BLOCK")==false) { goto exit; return; } if(strcmp(dc.ls,"WBLOCK")){ handleError("Loading failed.\nExpected \"WBLOCK\", but found instead: '%s'.\nFile: '%s'\n",dc.ls,STRING_get_chars(filename)); DISK_close_and_delete(dc.file); goto exit; return; } struct WBlocks *wblock = LoadWBlock(); wblock->l.num = num_blocks; DC_Next(); if(strcmp(dc.ls,"BLOCK")){ handleError("Loading failed.\nExpected \"BLOCK\", but found instead: '%s'.\nFile: '%s'\n",dc.ls,STRING_get_chars(filename)); DISK_close_and_delete(dc.file); goto exit; } struct Blocks *block = LoadBlock(); block->l.num = num_blocks; DISK_close_and_delete(dc.file); if(!dc.success){ handleError("Loading failed.\n"); goto exit; } printf("Got it: %p / %p\n",wblock,block); ADD_UNDO(Block_Insert(num_blocks)); have_made_undo = true; /* DC_ListAdd1(&root->song->blocks,block); DC_ListAdd1(&root->song->tracker_windows->wblocks, wblock); */ wblock->block = block; window->curr_track = 0; DLoadBlocks(root, block); DLoadWBlocks(window, window, wblock); CB_PasteBlock(window, wblock, window->wblock); success = true; exit: if (success==false) if (have_made_undo) Undo_CancelLastUndo(); }