int a2_librandom(struct a2_state* state){ int args = a2_top(state); if(args == 0){ a2_pushnumber(state, (a2_number)rand()); }else{ a2_number num = a2_tonumber(state, 0); a2_pushnumber(state, rand()%((int)num)); } return 1; }
// print int a2_libprint(struct a2_state* state){ int args = a2_top(state); int i; for(i=0; i<args; i++){ switch(a2_type(state, i)){ case TNIL: printf("nil "); break; case TNUMBER: printf("%.14g ", a2_tonumber(state, i)); break; case TSTRING: printf("%s ", a2_tostring(state, i)); break; case TBOOL: printf("%s ", (a2_tobool(state, i))?("true"):("false")); break; case TCFUNCTION: printf("cfunc:%p ", a2_tocfunction(state, i)); break; case TCLOSURE: printf("closure:%p ", a2_topoint(state, i)); break; case TARRAY: printf("array:%p ", a2_topoint(state, i)); break; case TMAP: printf("map:%p ", a2_topoint(state, i)); break; default: assert(0); } } printf("\n"); return 0; }