/***************************************************************************\ * CD_IMAGERGB. * \***************************************************************************/ static void *cdimagergb_checkdata(lua_State* L, int param) { static char data_s[100] = ""; if (lua_isstring(L, param)) { const char* str = lua_tostring(L, param); strcpy(data_s, str); } else { int ret = cdlua_rawchecktype(L, param, "cdBitmap"); if (ret == 0) luaL_argerror(L, param, "must be string, cdBitmap, cdImageRGB or cdImageRGBA"); /* not a user data and not a metatable */ if (ret == 1) { cdBitmap* *bitmap_p = (cdBitmap**)luaL_checkudata(L, param, "cdBitmap"); if (!(*bitmap_p)) luaL_argerror(L, param, "killed cdBitmap"); if ((*bitmap_p)->type != CD_RGB && (*bitmap_p)->type != CD_RGBA) luaL_argerror(L, param, "bitmap should be of type rgb or rgba"); if (lua_isnoneornil(L, param+1)) { if ((*bitmap_p)->type == CD_RGBA) sprintf(data_s, "%dx%d %p %p %p %p -a", (*bitmap_p)->w, (*bitmap_p)->h, cdBitmapGetData(*bitmap_p, CD_IRED), cdBitmapGetData(*bitmap_p, CD_IGREEN), cdBitmapGetData(*bitmap_p, CD_IBLUE), cdBitmapGetData(*bitmap_p, CD_IALPHA)); else sprintf(data_s, "%dx%d %p %p %p", (*bitmap_p)->w, (*bitmap_p)->h, cdBitmapGetData(*bitmap_p, CD_IRED), cdBitmapGetData(*bitmap_p, CD_IGREEN), cdBitmapGetData(*bitmap_p, CD_IBLUE)); } else { double res_f = luaL_checknumber(L, param+1); if ((*bitmap_p)->type == CD_RGBA) sprintf(data_s, "%dx%d %p %p %p %p -r%g -a", (*bitmap_p)->w, (*bitmap_p)->h, cdBitmapGetData(*bitmap_p, CD_IRED), cdBitmapGetData(*bitmap_p, CD_IGREEN), cdBitmapGetData(*bitmap_p, CD_IBLUE), cdBitmapGetData(*bitmap_p, CD_IALPHA), res_f); else sprintf(data_s, "%dx%d %p %p %p -r%g", (*bitmap_p)->w, (*bitmap_p)->h, cdBitmapGetData(*bitmap_p, CD_IRED), cdBitmapGetData(*bitmap_p, CD_IGREEN), cdBitmapGetData(*bitmap_p, CD_IBLUE), res_f); } return data_s; } ret = cdlua_rawchecktype(L, param, "cdImageRGB"); if (ret == 1) { cdluaImageRGB *imagergb_p = (cdluaImageRGB*) luaL_checkudata(L, param, "cdImageRGB"); if (!imagergb_p->red) luaL_argerror(L, param, "killed cdImageRGB"); if (lua_isnoneornil(L, param+1)) { sprintf(data_s, "%dx%d %p %p %p", imagergb_p->width, imagergb_p->height, imagergb_p->red, imagergb_p->green, imagergb_p->blue); } else { double res_f = luaL_checknumber(L, param+1); sprintf(data_s, "%dx%d %p %p %p -r%g", imagergb_p->width, imagergb_p->height, imagergb_p->red, imagergb_p->green, imagergb_p->blue, res_f); } return data_s; } ret = cdlua_rawchecktype(L, param, "cdImageRGBA"); if (ret == 1) { cdluaImageRGBA *imagergba_p = (cdluaImageRGBA*) luaL_checkudata(L, param, "cdImageRGBA"); if (!imagergba_p->red) luaL_argerror(L, param, "killed cdImageRGBA"); if (lua_isnoneornil(L, param+1)) { sprintf(data_s, "%dx%d %p %p %p %p -a", imagergba_p->width, imagergba_p->height, imagergba_p->red, imagergba_p->green, imagergba_p->blue, imagergba_p->alpha); } else { double res_f = luaL_checknumber(L, param+1); sprintf(data_s, "%dx%d %p %p %p %p -r%g -a", imagergba_p->width, imagergba_p->height, imagergba_p->red, imagergba_p->green, imagergba_p->blue, imagergba_p->alpha, res_f); } return data_s; } luaL_argerror(L, param, "must be string, cdBitmap, cdImageRGB or cdImageRGBA"); /* is a metatable but it is not one of the accepted */ } return data_s; }
/***************************************************************************\ * CD_IMAGERGB. * \***************************************************************************/ static void *cdimagergb_checkdata(int param) { lua_Object imagergb; static char data_s[50]; imagergb = lua_getparam(param); if (lua_isnil(imagergb)) lua_error("cdCreateCanvas CD_IMAGERGB: data is a NIL imagergb!"); if (lua_isstring(imagergb)) { char* str = lua_getstring(imagergb); strcpy(data_s, str); } else { lua_Object res; int bitmap_tag = (int)lua_getnumber(lua_getglobal(BITMAP_TAG)); if (lua_tag(imagergb) == bitmap_tag) { bitmap_t *imagergb_p; imagergb_p = (bitmap_t *) lua_getuserdata(imagergb); if (!imagergb_p->image) lua_error("cdCreateCanvas CD_IMAGERGB: data is a killed imagergb!"); if (imagergb_p->image->type != CD_RGB && imagergb_p->image->type != CD_RGBA) lua_error("cdCreateCanvas CD_IMAGERGB: bitmap should be of type rgb or rgba!"); res = lua_getparam(param+1); if (res == LUA_NOOBJECT || lua_isnil(res)) { if (imagergb_p->image->type == CD_RGBA) sprintf(data_s, "%dx%d %p %p %p %p -a", imagergb_p->image->w, imagergb_p->image->h, cdBitmapGetData(imagergb_p->image, CD_IRED), cdBitmapGetData(imagergb_p->image, CD_IGREEN), cdBitmapGetData(imagergb_p->image, CD_IBLUE), cdBitmapGetData(imagergb_p->image, CD_IALPHA)); else sprintf(data_s, "%dx%d %p %p %p", imagergb_p->image->w, imagergb_p->image->h, cdBitmapGetData(imagergb_p->image, CD_IRED), cdBitmapGetData(imagergb_p->image, CD_IGREEN), cdBitmapGetData(imagergb_p->image, CD_IBLUE)); } else { double res_f = lua_getnumber(res); if (imagergb_p->image->type == CD_RGBA) sprintf(data_s, "%dx%d %p %p %p %p -r%g -a", imagergb_p->image->w, imagergb_p->image->h, cdBitmapGetData(imagergb_p->image, CD_IRED), cdBitmapGetData(imagergb_p->image, CD_IGREEN), cdBitmapGetData(imagergb_p->image, CD_IBLUE), cdBitmapGetData(imagergb_p->image, CD_IALPHA), res_f); else sprintf(data_s, "%dx%d %p %p %p -r%g", imagergb_p->image->w, imagergb_p->image->h, cdBitmapGetData(imagergb_p->image, CD_IRED), cdBitmapGetData(imagergb_p->image, CD_IGREEN), cdBitmapGetData(imagergb_p->image, CD_IBLUE), res_f); } } else { imagergb_t *imagergb_p; int imagergb_tag = (int)lua_getnumber(lua_getglobal(IMAGERGB_TAG)); if (lua_tag(imagergb) != imagergb_tag) { imagergba_t *imagergba_p; int imagergba_tag = (int)lua_getnumber(lua_getglobal(IMAGERGBA_TAG)); if (lua_tag(imagergb) != imagergba_tag) lua_error("cdCreateCanvas CD_IMAGERGB: data should be of type imagergb_tag or imagergba_tag!"); imagergba_p = (imagergba_t *) lua_getuserdata(imagergb); if (!(imagergba_p->red && imagergba_p->green && imagergba_p->blue)) lua_error("cdCreateCanvas CD_IMAGERGB: data is a killed imagergba!"); res = lua_getparam(param+1); if (res == LUA_NOOBJECT || lua_isnil(res)) { sprintf(data_s, "%dx%d %p %p %p", imagergba_p->width, imagergba_p->height, imagergba_p->red, imagergba_p->green, imagergba_p->blue); } else { double res_f = lua_getnumber(res); sprintf(data_s, "%dx%d %p %p %p -r%g", imagergba_p->width, imagergba_p->height, imagergba_p->red, imagergba_p->green, imagergba_p->blue, res_f); } return data_s; } imagergb_p = (imagergb_t *) lua_getuserdata(imagergb); if (!(imagergb_p->red && imagergb_p->green && imagergb_p->blue)) lua_error("cdCreateCanvas CD_IMAGERGB: data is a killed imagergb!"); res = lua_getparam(param+1); if (res == LUA_NOOBJECT || lua_isnil(res)) { sprintf(data_s, "%dx%d %p %p %p", imagergb_p->width, imagergb_p->height, imagergb_p->red, imagergb_p->green, imagergb_p->blue); } else { double res_f = lua_getnumber(res); sprintf(data_s, "%dx%d %p %p %p -r%g", imagergb_p->width, imagergb_p->height, imagergb_p->red, imagergb_p->green, imagergb_p->blue, res_f); } } } return data_s; }