void GW_Game_DKong::clock_update(int mode) { if (mode==-1) mode=GetMode(); // display clock data().position_get(PS_NUMBER, 1)->show(); data().position_get(PS_NUMBER, 2)->show(); data().position_get(PS_NUMBER, 3)->show(); data().position_get(PS_NUMBER, 4)->show(); GW_Platform_Time time=platform_get()->time_get(); //GW_Device::devtime_t time; //device_get()->GetTime(&time); data().position_get(PS_SEMICOLON)->visible_set(time.s % 2 == 0); if (mode==MODE_TIME) { // show current time data().position_get(PS_AM)->visible_set(time.h<12); data().position_get(PS_PM)->visible_set(time.h>=12); setnumber((time.h>12?time.h-12:time.h), 1, 2, false); setnumber(time.n, 3, 4); } else if (mode==MODE_ALARM) { // show 12:00 AM data().position_get(PS_AM)->show(); setnumber(12, 1, 2); setnumber(0, 3, 4); } }
//// Check if the given file is a real directory or a Zip-archive static void b_zzip_dir_real(task *tsk, pntr *argstack) { char *fileName; int badtype; pntr p = argstack[0]; int dirtype; CHECK_ARG(0, CELL_CONS); if((badtype = array_to_string(p, &fileName)) >= 0){ set_error(tsk, "error1: argument is not a string (contains non-char: %s)", cell_types[badtype]); return; } //// the file to be ckecked exists, then we check it static const char* ext[] = { "", ".exe", ".EXE", 0 }; ZZIP_DIR* dir = zzip_opendir_ext_io (fileName, ZZIP_PREFERZIP, ext, 0); if(dir){ if(zzip_dir_real(dir)){ dirtype = 1; // printf("%s is a directory.\n", fileName); }else{ dirtype = 0; // printf("%s is a zip-archive.\n", fileName); } // zzip_dir_close(dir); }else{ //// file failed to be open dirtype = -1; } setnumber(&argstack[0], dirtype); return; }
// set the 2d viewport // args: canvas, scale:number | dimensions:table int Canvas::_viewport(lua_State *l) { Viewport view(0,0); if (lua_isnumber(l, -1)) { double scale = lua_tonumber(l, -1); view.right = _canvas->width() / scale; view.bottom = _canvas->height() / scale; } else if (lua_istable(l, -1)) { int i = 1; switch (lua_objlen(l, -1)) { case 4: lua_rawgeti(l, -1, i++); lua_rawgeti(l, -2, i++); view.left = lua_tonumber(l, -2); view.top = lua_tonumber(l, -1); lua_pop(l, 2); case 2: lua_rawgeti(l, -1, i++); lua_rawgeti(l, -2, i++); view.right = lua_tonumber(l, -2); view.bottom = lua_tonumber(l, -1); lua_pop(l, 2); break; default: return luaL_error(l, "unknown 2d viewport size"); } } view.reshape(); _canvas->view = view; // update the canvas lua_pushvalue(l, 1); setnumber("width", view.getWidth()); setnumber("height", view.getHeight()); return 0; }
/* * Variable manipulation */ void vinit(void) { char file[FILENAME_MAX], *cp; value_t *p; FILE *fp; for (p = vtable; p->v_name != NULL; p++) { if (p->v_type&ENVIRON) if ((cp = getenv(p->v_name))) p->v_value = cp; if (p->v_type&IREMOTE) setnumber(p->v_value, *address(p->v_value)); } /* * Read the .tiprc file in the HOME directory * for sets */ cp = value(HOME); if (cp == NULL) { (void)fprintf(stderr, "$HOME not set. Skipping check for ~/.tiprc\n"); } else if (strlen(cp) + sizeof("/.tiprc") > sizeof(file)) { (void)fprintf(stderr, "Home directory path too long: %s\n", value(HOME)); } else { snprintf(file, sizeof file, "%s/.tiprc", value(HOME)); if ((fp = fopen(file, "r")) != NULL) { char *tp; while (fgets(file, sizeof(file)-1, fp) != NULL) { if (vflag) printf("set %s", file); if ((tp = strrchr(file, '\n'))) *tp = '\0'; vlex(file); } fclose(fp); } } /* * To allow definition of exception prior to fork */ vtable[EXCEPTIONS].v_access &= ~(WRITE<<PUBLIC); }
/*VARARGS1*/ static void vassign(value_t *p, char *v) { if (!vaccess(p->v_access, WRITE)) { printf("access denied\r\n"); return; } switch (p->v_type&TMASK) { case STRING: if (p->v_value && equal(p->v_value, v)) return; if (!(p->v_type&(ENVIRON|INIT))) free(p->v_value); if ((p->v_value = strdup(v)) == NOSTR) { printf("out of core\r\n"); return; } p->v_type &= ~(ENVIRON|INIT); break; case NUMBER: if (number(p->v_value) == number(v)) return; setnumber(p->v_value, number(v)); break; case BOOL: if (boolean(p->v_value) == (*v != '!')) return; setboolean(p->v_value, (*v != '!')); break; case CHAR: if (character(p->v_value) == *v) return; setcharacter(p->v_value, *v); } p->v_access |= CHANGED; }
int Canvas::_flush(lua_State *l) { if (!lua_istable(l, 1)) return luaL_error(l, "canvas expected as first argument"); // clear key events keys_down.clear(); keys_up.clear(); glfwSwapBuffers(); glfwSleep(0.005); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // if (!_canvas->view.is2d) glLoadIdentity(); // set the game time double time = glfwGetTime(); lua_getfield(l, 1, "time"); double old = luaL_checknumber(l, -1); lua_pop(l, 1); setnumber("time" , time); setnumber("dt" , time - old); int x, y; double cx, cy; // canvas mouse coordinates glfwGetMousePos(&x, &y); Viewport &view = _canvas->view; if (view.is2d) { double vwidth = view.right - view.left; double vheight = view.bottom - view.top; cx = view.left + (x * vwidth / _canvas->width()); cy = view.top + (y * vheight / _canvas->height()); } else { cx = (double)x; cy = (double)y; } // update the mouse point lua_getfield(l, 1, "mouse"); setnumber("x", cx); setnumber("y", cy); setbool("left", glfwGetMouseButton(GLFW_MOUSE_BUTTON_LEFT)); setbool("right", glfwGetMouseButton(GLFW_MOUSE_BUTTON_RIGHT)); lua_getfield(l, 1, "input"); float axis[2]; glfwGetJoystickPos(GLFW_JOYSTICK_1, axis, 2); setnumber("xaxis", axis[0]); setnumber("yaxis", axis[1]); setbool("left", glfwGetKey(GLFW_KEY_LEFT)); setbool("right", glfwGetKey(GLFW_KEY_RIGHT)); setbool("up", glfwGetKey(GLFW_KEY_UP)); setbool("down", glfwGetKey(GLFW_KEY_DOWN)); setbool("a", glfwGetKey('Q')); setbool("b", glfwGetKey('W')); lua_pushboolean(l, glfwGetWindowParam(GLFW_OPENED) > 0); return 1; }
/** * create a new canvas * args: width, height, [title] */ int Canvas::_new(lua_State *l) { const char *title = "Aroma"; int width = luaL_checkint(l, 2); int height = luaL_checkint(l, 3); if (lua_gettop(l) > 3) { title = luaL_checkstring(l, 4); } GLContext* context = new GLFWContext(width, height, title); if (!context->make_current()) { return luaL_error(l, "fatal error: failed to open window"); } _canvas = new Canvas(context); Viewport &view = _canvas->view; lua_newtable(l); // functions setfunction("run", Canvas::_run); setfunction("rect", Canvas::_rect); setfunction("line", Canvas::_line); setfunction("viewport", Canvas::_viewport); setfunction("view3d", Canvas::_view3d); setfunction("look", Canvas::_look); setfunction("strip", Canvas::_strip); setfunction("rotate", Canvas::_rotate); setfunction("scale", Canvas::_scale); setfunction("translate", Canvas::_translate); setfunction("noise", Canvas::_noise); setfunction("save", Canvas::_save); setfunction("restore", Canvas::_restore); setfunction("getTime", Canvas::_getTime); setfunction("clear_color", Canvas::_clearColor); setfunction("clear", Canvas::_clear); setfunction("flush", Canvas::_flush); setfunction("set_mouse", Canvas::_setMouse); setfunction("hide_mouse", Canvas::_hideMouse); setfunction("show_mouse", Canvas::_showMouse); setfunction("key", Canvas::_key); setfunction("key_up", Canvas::_key_up); setfunction("key_down", Canvas::_key_down); // load libraries AromaRegister *lib = aroma_libs; while (*lib) { (*lib++)(l); } // properties setnumber("dt", 0); setnumber("time", glfwGetTime()); setnumber("width", view.getWidth()); setnumber("height", view.getHeight()); // mouse input lua_newtable(l); setint("x", 0); setint("y", 0); setbool("left", false); setbool("right", false); lua_setfield(l, -2, "mouse"); // create the input table lua_newtable(l); setnumber("xaxis", 0); setnumber("yaxis", 0); setbool("left", false); setbool("right", false); setbool("up", false); setbool("down", false); setbool("a", false); setbool("b", false); setbool("c", false); setbool("d", false); setbool("start", false); setbool("select", false); setbool("l", false); setbool("r", false); lua_setfield(l, -2, "input"); // the keys push_key_table(l); lua_setfield(l, -2, "keys"); // create meta table lua_newtable(l); setfunction("__call", _call); lua_setmetatable(l, -2); return 1; }
static void b_drawRectangles1(task *tsk, pntr *argstack) { /* pointers to the parameters */ pntr val1 = argstack[3]; // userName pntr val2 = argstack[2]; // xPos pntr val3 = argstack[1]; // yPos pntr val4 = argstack[0]; // rect int badtype; /* the result value to be return */ int numRect; char *userName; double xPos; int yPos; Rectangle *rect = new_Rectangle(); /* Check validity of each parameter */ CHECK_ARG(3, CELL_CONS); CHECK_ARG(2, CELL_NUMBER); CHECK_ARG(1, CELL_NUMBER); CHECK_ARG(0, CELL_CONS); /* Initialize all arguments for this method */ if( (badtype = array_to_string(val1, &userName)) > 0) { set_error(tsk, "string: argument is not a string (contains non-char: %s)", cell_types[badtype]); return; } xPos = pntrdouble(val2); yPos = pntrdouble(val3); /* Initialize the struct: Rectangle */ pntr rect_val1 = head(tsk, val4); rect->width = pntrdouble(rect_val1); pntr rect_val2 = head(tsk, tail(tsk, val4)); if( (badtype = array_to_string(rect_val2, &(rect->creator) )) > 0) { set_error(tsk, "string: argument is not a string (contains non-char: %s)", cell_types[badtype]); return; } pntr rect_val3 = head(tsk, tail(tsk, tail(tsk, val4))); rect->height = pntrdouble(rect_val3); /* Initialize another struct: Color*/ Color *rect_col = new_Color( ); rect->col = rect_col; /* new root pntr for struct Color */ pntr rect_col_val = head(tsk, tail(tsk, tail(tsk, tail(tsk, val4)))); pntr rect_col_val1 = head(tsk, rect_col_val); rect_col->red = pntrdouble(rect_col_val1); pntr rect_col_val2 = head(tsk, tail(tsk, rect_col_val)); rect_col->blue = pntrdouble(rect_col_val2); pntr rect_col_val3 = head(tsk, tail(tsk, tail(tsk, rect_col_val))); rect_col->green = pntrdouble(rect_col_val3); /* Initialize another struct: gray*/ gray *rect_col_cg = new_gray( ); rect_col->cg = rect_col_cg; /* new root pntr for struct gray */ pntr rect_col_cg_val = head(tsk, tail(tsk, tail(tsk, tail(tsk, rect_col_val)))); pntr rect_col_cg_val1 = head(tsk, rect_col_cg_val); if( (badtype = array_to_string(rect_col_cg_val1, &(rect_col_cg->country) )) > 0) { set_error(tsk, "string: argument is not a string (contains non-char: %s)", cell_types[badtype]); return; } pntr rect_col_cg_val2 = head(tsk, tail(tsk, rect_col_cg_val)); rect_col_cg->grayCode = pntrdouble(rect_col_cg_val2); /* end Initialization of struct Rectangle */ /* Call the method and get the return value */ numRect = drawRectangles(userName, xPos, yPos, rect); setnumber(&argstack[0], numRect); }