void ClearSong(void) { CloseAllTrackerWindows(); }
static bool Load(const wchar_t *filename){ struct Root *newroot; dc.success=true; curr_disk_line = 0; dc.file=DISK_open_for_reading(filename); if(dc.file==NULL){ GFX_Message(NULL,"Could not open \"%s\" for loading\n",STRING_get_chars(filename)); return false; } DC_fgets(); if (dc.success==false) return false; if(strcmp("RADIUM SONG",dc.ls)){ GFX_Message(NULL,"First line in song was not 'RADIUM SONG', but '%s'. Last: %d\n",dc.ls,dc.ls[strlen(dc.ls)-1]); DISK_close_and_delete(dc.file); return false; } disk_load_version=DC_LoadF(); if (dc.success==false) return false; if(disk_load_version>0.4201 && disk_load_version<0.50){ disk_load_version=0.51; dc.colorize=true; dc.startcolor=5; }else{ dc.colorize=false; } #if 0 if (disk_load_version < 0.75){ GFX_Message(NULL, "<p>Note! The portamento behavior for polyphonic tracks changed in Radium V3.4.9" "</p>" "<p>" "Before Radium V3.4.9, the default final portamento value was the pitch value of the next note after the <i>start</i> of the note. " "Now, the default final portamento value is the pitch value of the next note after the <i>end</i> of the note." "</p>" "<p>" "Old songs with portamento in polyphonic tracks might not sound the same." "</p>" ); } #endif if(disk_load_version>DISKVERSION+0.0001){ GFX_Message(NULL,"Need a newer version of Radium to load this song. The song version is %f, while this program only supports %f.\n",disk_load_version,DISKVERSION); return false; }else{ printf("Song diskVersion: %f\n",disk_load_version); } dc.filename=filename; dc.playlist=NULL; DC_Next(); if (dc.success==false) return false; if(strcmp(dc.ls,"OSSTUFF")){ GFX_Message(NULL, "OSSTUFF not found, but: '%s'. File: '%s'\n",dc.ls,STRING_get_chars(filename)); DISK_close_and_delete(dc.file); EndProgram(); exit(4); } LoadOsStuff(); printf("dc.ls: -%s-\n",dc.ls); if(strcmp(dc.ls,"ROOT")){ GFX_Message(NULL, "ROOT not found. Found '%s' instead.\n", dc.ls); DISK_close_and_delete(dc.file); EndProgram(); exit(5); } newroot=LoadRoot(); DISK_close_and_delete(dc.file); if(!dc.success){ GFX_Message(NULL, "Loading failed.\n"); EndProgram(); exit(6); } ResetUndo(); #ifdef _AMIGA CloseHelpWindow(); CloseCPPWindowWindow(); CloseBlockSelectWindow(); #endif CloseAllTrackerWindows(); GL_lock();{ GL_pause_gl_thread_a_short_while(); }GL_unlock(); //GL_draw_lock();{ PLAYER_lock();{ //<-- Locks within locks are dangerous. But it doesn't matter since the player isn't playing now anyway. root=newroot; //BANG! }PLAYER_unlock(); //}GL_draw_unlock(); Undo_start_ignoring_undo_operations();{ DLoadRoot(newroot); }Undo_stop_ignoring_undo_operations(); GL_create_all(root->song->tracker_windows); if(COMMENT_show_after_loading()) COMMENTDIALOG_open(); #ifdef _AMIGA currpatch=-1; #endif ResetUndo(); return true; }