//----------------------------------------------------------- // SWITCH/CASE Statement Demo // Demonstrates the SWITCH/CASE control flow statement // with implicit breaks and long jump pragma support //----------------------------------------------------------- #INCLUDE #INCLUDE #INCLUDE #PRAGMA _P_USE_CBM_STRINGS 1 GOTO start WORD result BYTE test_var BYTE CONST TEST_VAL1 = 10 BYTE CONST TEST_VAL2 = 20 BYTE CONST TEST_VAL3 = 30 BYTE CONST OFFSET = 5 //----------------------------------------------------------- // Test 1: Basic SWITCH with DEFAULT //----------------------------------------------------------- FUNC test_basic_switch LET test_var = 2 SWITCH test_var CASE 1 LET result = $0A CASE 2 LET result = $14 CASE 3 LET result = $1E DEFAULT LET result = $63 ENDSWITCH lib_cbmio_print("1.basic: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 0014)") FEND //----------------------------------------------------------- // Test 2: SWITCH without DEFAULT //----------------------------------------------------------- FUNC test_no_default LET test_var = 5 LET result = 0 SWITCH test_var CASE 1 LET result = $64 CASE 5 LET result = $01F4 CASE 10 LET result = $03E8 ENDSWITCH lib_cbmio_print("2.no default: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 01f4)") FEND //----------------------------------------------------------- // Test 3: Nested SWITCH statements //----------------------------------------------------------- FUNC test_nested_switch BYTE outer BYTE inner LET outer = 2 LET inner = 3 LET result = 0 SWITCH outer CASE 1 LET result = $01 CASE 2 SWITCH inner CASE 2 LET result = $16 CASE 3 LET result = $17 DEFAULT LET result = $14 ENDSWITCH CASE 3 LET result = $03 ENDSWITCH lib_cbmio_print("3.nested: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 0017)") FEND //----------------------------------------------------------- // Test 4: SWITCH with long jump pragma // (for cases where branches are far apart) //----------------------------------------------------------- FUNC test_long_jump #PRAGMA _P_USE_LONG_JUMP 1 LET test_var = 3 SWITCH test_var CASE 1 LET result = $0B CASE 2 LET result = $16 CASE 3 LET result = $21 CASE 4 LET result = $2C DEFAULT LET result = $00 ENDSWITCH #PRAGMA _P_USE_LONG_JUMP 0 lib_cbmio_print("4.long jump: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 0021)") FEND //----------------------------------------------------------- // Test 5: SWITCH with WORD values //----------------------------------------------------------- FUNC test_word_switch WORD big_value LET big_value = 1000 LET result = 0 SWITCH big_value CASE 100 LET result = $0001 CASE 1000 LET result = $0002 CASE 10000 LET result = $0003 DEFAULT LET result = $0063 ENDSWITCH lib_cbmio_print("5.word: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 0002)") FEND //----------------------------------------------------------- // Test 6: SWITCH with constants and compile-time evaluation //----------------------------------------------------------- FUNC test_constants LET test_var = 25 LET result = 0 SWITCH test_var CASE TEST_VAL1 LET result = $01 CASE TEST_VAL2 LET result = $02 CASE TEST_VAL2+OFFSET LET result = $03 CASE TEST_VAL3 LET result = $04 DEFAULT LET result = $63 ENDSWITCH lib_cbmio_print("6.constants: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 0003)") FEND //----------------------------------------------------------- // Test 7: SWITCH with variable cases (not just literals) //----------------------------------------------------------- FUNC test_variables BYTE match_val1 BYTE match_val2 WORD match_val3 LET match_val1 = 15 LET match_val2 = 42 LET match_val3 = 1000 LET test_var = 42 LET result = 0 SWITCH test_var CASE match_val1 LET result = $01 CASE match_val2 LET result = $02 CASE match_val3 LET result = $03 DEFAULT LET result = $63 ENDSWITCH lib_cbmio_print("7.variables: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 0002)") FEND //----------------------------------------------------------- // Test 8: SWITCH that actually executes DEFAULT //----------------------------------------------------------- FUNC test_default_execution LET test_var = 99 LET result = 0 SWITCH test_var CASE 1 LET result = $0A CASE 2 LET result = $14 CASE 3 LET result = $1E DEFAULT LET result = $03E7 ENDSWITCH lib_cbmio_print("8.default exec: ") lib_cbmio_hexoutw(result) lib_cbmio_printlf(" (exp 03e7)") FEND //----------------------------------------------------------- // Main program //----------------------------------------------------------- FUNC main lib_cbmio_cls() lib_cbmio_printlf("switch/case demo") lib_cbmio_lf() test_basic_switch() test_no_default() test_nested_switch() test_long_jump() test_word_switch() test_constants() test_variables() test_default_execution() lib_cbmio_lf() lib_cbmio_printlf("all tests complete!") FEND LABEL start main() SUBEND