include nocurses.e include cg.e include dll.e function callback(integer i) printf(1,"callback activated: %d\n", {i}) return 1 end function constant callbackaddr = call_back(routine_id("callback")) function callback2(integer i, integer j, integer k, integer l) printf(1, "{%d,%d,%d,%d}\n", {i,j,k,l}) return i+j+k+l end function constant callback2addr = call_back(routine_id("callback2")) constant fun1 = memorize(subroutine({"i","j","k","l"}, {"tmp"}, { {ASSIGN, "tmp", {VAR, "i"}}, {ADDTO, "tmp", {VAR, "j"}}, {ADDTO, "tmp", {VAR, "k"}}, {ADDTO, "tmp", {VAR, "l"}}, {ASSIGN, "tmp", {CALLFUNC, callback2addr, {VAR,"i"}, {VAR,"j"}, {VAR,"k"}, {VAR,"l"}}}, {RETURN, {VAR, "tmp"}} }, 0)) hex_preference = 0 constant test = memorize(subroutine({},{"b"}, { {ASSIGN, "b", {CONST,500}}, {ADDTO, "b", {VAR,"b"}}, {ADDTO, "b", {CONST,100}}, {WHILE, {LESS_EQUALS, {VAR, "b"}, {CONST, 2000}}, { {ADDTO, "b", {CONST,100}}, {CALLPROC, callbackaddr, {VAR,"b"}}, {IF, {EQUALS, {VAR,"b"}, {CONST, 1500}}, { {EXIT} }} --END IF -- },{ --ELSE -- {ADDTO, "b", {CONST,1000}}, -- {CALLPROC, callbackaddr, {VAR,"b"}} }}, --END IF {ASSIGN, "b", {CALLFUNC, fun1, {CONST,1}, {VAR,"b"}, {CONST,3}, {CONST,4}}}, {ASSIGN, "b", {CALLFUNC, callback2addr, {CONST,1}, {VAR,"b"}, {CONST,3}, {CONST,4}}}, {CALLPROC, callbackaddr, {VAR,"b"}} },1)) call(test) puts(1, "success. press any key to exit\n") --while platform() = WIN32 and get_key() = -1 do end while