//################################################################################# //# # //# This script file contains an example how to put # //# multiple values in one variable # //# # //# There is one global variable (global_variable) # //# This will be split up in 8 * 4bit values, that means these values can have a # //# value between 0 and 15 # //################################################################################# // test script 001-1.gat,45,43,0 script Tester 125,{ callsub print_vars; mes "Which value should be updated?"; input @adr_local; mes "new value?"; input @value_local; callsub set_local_value; callsub print_vars; close; print_vars: callsub get_all_local_values; mes "[Testerboy]"; mes "\"These are your stored values:\""; mes "Your value 0 is " + @local_A; mes "Your value 1 is " + @local_B; mes "Your value 2 is " + @local_C; mes "Your value 3 is " + @local_D; mes "Your value 4 is " + @local_E; mes "Your value 5 is " + @local_F; mes "Your value 6 is " + @local_G; mes "Your value 7 is " + @local_H; next; return; get_all_local_values: set @adr_local, 0; callsub get_local_value; set @local_A, @value_local; set @adr_local, 1; callsub get_local_value; set @local_B, @value_local; set @adr_local, 2; callsub get_local_value; set @local_C, @value_local; set @adr_local, 3; callsub get_local_value; set @local_D, @value_local; set @adr_local, 4; callsub get_local_value; set @local_E, @value_local; set @adr_local, 5; callsub get_local_value; set @local_F, @value_local; set @adr_local, 6; callsub get_local_value; set @local_G, @value_local; set @adr_local, 7; callsub get_local_value; set @local_H, @value_local; return; get_local_value: //which local value should be returned? //that has to be in @adr_local //so @adr_local has to contain a value between 0 and 7 //the returned value is stored in @value_local if ( @adr_local<0 || @adr_local>7 ) goto get_local_value_error; set @mask, 15; set @shift, 4*@adr_local; set @value_local, (global_variable >>@shift)&@mask; return; get_local_value_error: mes "get_local_value: first argument must be between 0 and 7!"; close2; set_local_value: //which local value should be set? //that has to be in @adr_local //so @adr_local has to contain a value between 0 and 7 //the value to be stored in has to be in @value_local //so second argument has to be in range [0, 15] if ( @adr_local<0 || @adr_local>7 ) goto set_local_value_error_adr_local; if ( @value_local<0 || @value_local>7 ) goto set_local_value_error_value_local; set @mask, (15 <<(4 * @adr_local)); set global_variable, (global_variable & (~(@mask))) | @value_local<<(4*@adr_local); return; set_local_value_error_adr_local: mes "get_local_value: @adr_local must be between 0 and 7!"; close2; set_local_value_error_value_local: mes "get_local_value: @value_local be between 0 and 15!"; close2; }//end of script