Exemple #1
0
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;

}
Exemple #2
0
struct Root *LoadRoot(void){
	static char *objs[1]={
		"SONG"
	};
	static char *vars[14]={
		"def_instrument",
		"curr_block",
		"tempo",
		"lpb",
                "signature_numerator",
                "signature_denominator",                
		"quantitize",
                "quantitize_numerator",
                "quantitize_denominator",
                "grid_numerator",
                "grid_denominator",
		"keyoct",
		"min_standardvel",
		"standardvel"
	};
	struct Root *ret=DC_alloc(sizeof(struct Root));
        ret->quantitize_options = root->quantitize_options;
	ret->scrollplayonoff=true;
        ret->min_standardvel=MAX_VELOCITY*40/100;
        ret->editonoff=true;
        ret->grid_numerator=1;
        ret->grid_denominator=1;
        ret->signature.numerator=4;
        ret->signature.denominator=4;

	GENERAL_LOAD(1,14);



obj0:
	ret->song=LoadSong();
	goto start;
var0:
	goto start;			// Don't bother with instruments yet.
var1:
	ret->curr_block=DC_LoadN();
	goto start;
var2:
	ret->tempo=DC_LoadI();
	goto start;
var3:
	ret->lpb=DC_LoadI();
	goto start;

var4:
	ret->signature.numerator=DC_LoadI();
	goto start;

var5:
	ret->signature.denominator=DC_LoadI();
	goto start;

var6:
        DC_LoadF();
	goto start;

var7:
        ret->quantitize_options.quant.numerator = DC_LoadI();
	goto start;

var8:
        ret->quantitize_options.quant.denominator = DC_LoadI();
	goto start;

var9:
        ret->grid_numerator=DC_LoadI();
        goto start;

var10:
        ret->grid_denominator=DC_LoadI();
        goto start;

var11:
	ret->keyoct=DC_LoadI();
	goto start;

var12:
	ret->min_standardvel=DC_LoadI();
	goto start;

var13:
	ret->standardvel=DC_LoadI();
	goto start;

var14:
var15:
var16:
var17:
var18:
var19:
 var20:
        
obj1:
obj2:
obj3:
obj4:
obj5:
obj6:
debug("loadroot, very wrong\n");

error:
debug("loadroot, goto error\n");

end:

	return ret;
}