PMOD_EXPORT struct object *bignum_from_svalue(struct svalue *s) { push_svalue(s); convert_stack_top_to_bignum(); dmalloc_touch_svalue(sp-1); return (--sp)->u.object; }
PMOD_EXPORT void convert_svalue_to_bignum(struct svalue *s) { push_svalue(s); convert_stack_top_to_bignum(); free_svalue(s); *s=sp[-1]; sp--; dmalloc_touch_svalue(sp); }
PMOD_EXPORT struct pike_string *string_from_bignum(struct object *o, int base) { push_int(base); safe_apply(o, "digits", 1); if(sp[-1].type != T_STRING) Pike_error("Gmp.mpz string conversion failed.\n"); dmalloc_touch_svalue(sp-1); return (--sp)->u.string; }
static void make_colors(void) { static struct color { int r,g,b; char *name; struct pike_string *pname; } c[]={ #define COLOR(name,R,G,B) \ {R,G,B,name,NULL}, #include "colors.h" #undef COLOR }; int i; const int n=sizeof(c)/sizeof(c[0]); for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++) html_color[i].pname=make_shared_string(html_color[i].name); for (i=0;i<n;i++) { struct color_struct *cs; push_text(c[i].name); copy_shared_string(c[i].pname,sp[-1].u.string); push_object(clone_object(image_color_program,0)); cs=get_storage(sp[-1].u.object,image_color_program); cs->rgb.r=(COLORTYPE)c[i].r; cs->rgb.g=(COLORTYPE)c[i].g; cs->rgb.b=(COLORTYPE)c[i].b; RGB_TO_RGBL(cs->rgbl,cs->rgb); copy_shared_string(cs->name,c[i].pname); } f_aggregate_mapping(n*2); colors=sp[-1].u.mapping; sp--; dmalloc_touch_svalue(sp); for (i=0;i<n;i++) { push_int(c[i].r); push_int(c[i].g); push_int(c[i].b); f_aggregate(3); } f_aggregate(n); colortable=clone_object(image_colortable_program,1); if (!colortable) Pike_fatal("couldn't create colortable\n"); push_int(12); push_int(12); push_int(12); push_int(1); safe_apply(colortable,"cubicles",4); pop_stack(); for (i=0;i<n;i++) push_string(c[i].pname); f_aggregate(n); colornames=sp[-1].u.array; sp--; dmalloc_touch_svalue(sp); }
PMOD_EXPORT struct object *make_bignum_object(void) { convert_stack_top_to_bignum(); dmalloc_touch_svalue(sp-1); return (--sp)->u.object; }