pike.git / src / modules / Image / colors.c

version» Context lines:

pike.git/src/modules/Image/colors.c:1:   /*   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id$ +    */      /*   **! module Image   **! submodule Color   **!   **! This module keeps names and easy handling   **! for easy color support. It gives you an easy   **! way to get colors from names.   **!
pike.git/src/modules/Image/colors.c:135:   **!   **! array orig=({Color.black,Color.red,Color.green,Color.yellow,   **! Color.blue,Color.violet,Color.cyan,Color.white});   **! cs-=orig;   **! cs-=({Color.pikegreen,Color.avantgardepikegreen,Color.roxenorange,   **! Color.pikeblue}); // Lame sort of easter egg.   **!   **! array grey=Array.filter(cs,lambda(object c) { return c->s==0; });   **! array colored=cs-grey;   **! + **! sort(grey->name(), grey);   **! sort(grey->v,grey); -  + **! sort(colored->name(), colored);   **! sort(Array.map(colored,lambda(object c)   **! {   **! return (c->h*50-c->s)*10+c->v;   **! }),colored);   **!   **! Array.map(({orig}),color_info);   **! // write("\240");   **! Array.map(({grey}),color_info);   **! // write("\240");   **! Array.map(colored/8.0,color_info);
pike.git/src/modules/Image/colors.c:196:   #include <math.h>      #include "stralloc.h"   #include "pike_macros.h"   #include "object.h"   #include "interpret.h"   #include "svalue.h"   #include "array.h"   #include "mapping.h"   #include "builtin_functions.h" - #include "dmalloc.h" +    #include "operators.h"   #include "module_support.h"   #include "sscanf.h"   #include "program_id.h" -  + #include "pike_types.h"      #include "image.h"   #include "colortable.h"         #define sp Pike_sp      static struct mapping *colors=NULL;   static struct object *colortable=NULL;   static struct array *colornames=NULL;      struct program *image_color_program=NULL;   extern struct program *image_colortable_program;    - static struct pike_string *str_array; - static struct pike_string *str_string; - static struct pike_string *str_int; +    static struct pike_string *str_r;   static struct pike_string *str_g;   static struct pike_string *str_b;   static struct pike_string *str_h;   static struct pike_string *str_s;   static struct pike_string *str_v;      static struct pike_string *no_name;      /* forward */
pike.git/src/modules/Image/colors.c:276:    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=(struct color_struct*) -  get_storage(sp[-1].u.object,image_color_program); +  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);
pike.git/src/modules/Image/colors.c:323:    sp--;    dmalloc_touch_svalue(sp);   }      #ifdef THIS   #undef THIS /* Needed for NT */   #endif   #define THIS ((struct color_struct*)(Pike_fp->current_storage))   #define THISOBJ (Pike_fp->current_object)    - static void init_color_struct(struct object *dummy) + static void init_color_struct(struct object *UNUSED(dummy))   {    THIS->rgb.r=THIS->rgb.g=THIS->rgb.b=0;    THIS->name=NULL;   }    - static void exit_color_struct(struct object *dummy) + static void exit_color_struct(struct object *UNUSED(dummy))   {    if (THIS->name)    {    free_string(THIS->name);    THIS->name=NULL;    }   }      void _img_nct_map_to_flat_cubicles(rgb_group *s,    rgb_group *d,
pike.git/src/modules/Image/colors.c:453:   {    INT_TYPE r,g,b;    if (args==0)    {    r=87;    g=127;    b=41;    }    else    { -  get_all_args("Image.Color.Color->greylevel()",args,"%i%i%i",&r,&g,&b); +  get_all_args("greylevel",args,"%i%i%i",&r,&g,&b);    }    pop_n_elems(args);    if (r+g+b==0) r=g=b=1;    push_int((r*THIS->rgb.r+g*THIS->rgb.g+b*THIS->rgb.b)/(r+g+b));   }      #define MAX3(X,Y,Z) MAXIMUM(MAXIMUM(X,Y),Z)   #define MIN3(X,Y,Z) MINIMUM(MINIMUM(X,Y),Z)      static void image_color_hsvf(INT32 args)
pike.git/src/modules/Image/colors.c:502:    Pike_error("internal error, max==0.0\n");       delta = max-min;       if(r==max) h = (g-b)/delta;    else if(g==max) h = 2+(b-r)/delta;    else /*if(b==max)*/ h = 4+(r-g)/delta;    h *= 60; /* now in degrees. */    if(h<0) h+=360;    -  push_float(DO_NOT_WARN((FLOAT_TYPE)h)); -  push_float(DO_NOT_WARN((FLOAT_TYPE)s)); -  push_float(DO_NOT_WARN((FLOAT_TYPE)v)); +  push_float((FLOAT_TYPE)h); +  push_float((FLOAT_TYPE)s); +  push_float((FLOAT_TYPE)v);    f_aggregate(3);   }      static void image_color_hsv(INT32 args)   {    double h,s,v;    image_color_hsvf(args);    h=sp[-1].u.array->item[0].u.float_number;    s=sp[-1].u.array->item[1].u.float_number;    v=sp[-1].u.array->item[2].u.float_number;
pike.git/src/modules/Image/colors.c:539:    r=COLORL_TO_FLOAT(THIS->rgbl.r);    g=COLORL_TO_FLOAT(THIS->rgbl.g);    b=COLORL_TO_FLOAT(THIS->rgbl.b);       k=1.0-MAX3(r,g,b);       c=1.0-r-k;    m=1.0-g-k;    y=1.0-b-k;    -  push_float(DO_NOT_WARN((FLOAT_TYPE)(c*100.0))); -  push_float(DO_NOT_WARN((FLOAT_TYPE)(m*100.0))); -  push_float(DO_NOT_WARN((FLOAT_TYPE)(y*100.0))); -  push_float(DO_NOT_WARN((FLOAT_TYPE)(k*100.0))); +  push_float((FLOAT_TYPE)(c*100.0)); +  push_float((FLOAT_TYPE)(m*100.0)); +  push_float((FLOAT_TYPE)(y*100.0)); +  push_float((FLOAT_TYPE)(k*100.0));    f_aggregate(4);   }      /*   **! method object grey()   **! method object grey(int red,int green,int blue)   **! Gives a new color, containing a grey color,   **! which is calculated by the <ref>greylevel</ref> method.   **! returns a new <ref>Image.Color.Color</ref> object   **! see also: greylevel
pike.git/src/modules/Image/colors.c:652:   **! returns a new <ref>Image.Color.Color</ref> object   **! see also: rgb, hsv, Image.Color   */      static void image_color_hex(INT32 args)   {    char buf[80];    INT_TYPE i=sizeof(COLORTYPE)*2;       if (args) -  get_all_args("Image.Color.Color->hex()",args,"%i",&i); +  get_all_args("hex",args,"%i",&i);       pop_n_elems(args);    if (i<1)    { -  push_constant_text("#"); /* stupid */ +  push_static_text("#"); /* stupid */    return;    }    else if (i!=sizeof(COLORTYPE)*2)    {    ptrdiff_t sh;    if (i>8) i=8;       sh=4*(sizeof(COLORTYPE)*2-i);    if (sh>0)    sprintf(buf,"#%0*x%0*x%0*x",
pike.git/src/modules/Image/colors.c:753:   **! and blue (equal to <tt>-><ref>rgb</ref>()</tt>), or   **! to a string, giving the name (equal to <tt>-><ref>name</ref>()</tt>).   **! returns the name as string or rgb as array   **! see also: rgb, name   */      static void image_color_cast(INT32 args)   {    if (args!=1 ||    TYPEOF(sp[-1]) != T_STRING) -  bad_arg_error("Image.Color.Color->cast",sp-args,args,0,"",sp-args, -  "Bad arguments to Image.Color.Color->cast()\n"); +  bad_arg_error("cast",sp-args,args,0,"",sp-args, +  "Bad arguments to cast.\n");    -  if (sp[-1].u.string==str_array) +  if (sp[-1].u.string==literal_array_string)    {    image_color_rgb(args);    return;    } -  if (sp[-1].u.string==str_string) +  if (sp[-1].u.string==literal_string_string)    {    image_color_name(args);    return;    } -  if (sp[-1].u.string==str_int) +  if (sp[-1].u.string==literal_int_string)    {    pop_stack();    push_int( (THIS->rgb.r << 8 | THIS->rgb.g) << 8 | THIS->rgb.b );    return;    } -  Pike_error("Image.Color.Color->cast(): Can't cast to that\n"); +  pop_stack(); +  push_undefined();   }      static void image_color__sprintf(INT32 args)   {    int prec,x;       if (args<2)    SIMPLE_TOO_FEW_ARGS_ERROR("_sprintf",2);       if (TYPEOF(sp[-args]) != T_INT) -  SIMPLE_BAD_ARG_ERROR("_sprintf",0,"integer"); +  SIMPLE_BAD_ARG_ERROR("_sprintf",0,"int");    if (TYPEOF(sp[1-args]) != T_MAPPING)    SIMPLE_BAD_ARG_ERROR("_sprintf",1,"mapping");       pop_n_elems(args-2);    -  push_text("precision"); +  push_static_text("precision");    f_index(2);    if (TYPEOF(sp[-1]) != T_INT)    SIMPLE_BAD_ARG_ERROR("_sprintf",1,"mapping(\"precision\":int)");    prec=sp[-1].u.integer;    x=sp[-2].u.integer;    pop_n_elems(2);       switch (x)    {   /* case 'c': */   /* case 'd': */    case 't': -  push_constant_text("Image.Color.Color"); +  push_static_text("Image.Color.Color");    return;    case 'O':    if (!THIS->name) try_find_name(THIS);    if (THIS->name==no_name)    { -  push_constant_text("Image.Color(\""); +  push_static_text("Image.Color(\"");    if (prec)    {    push_int(prec);    image_color_hex(1);    }    else    image_color_hex(0); -  push_constant_text("\")"); +  push_static_text("\")");    f_add(3);    return;    }    else    { -  push_constant_text("Image.Color."); +  push_static_text("Image.Color.");    ref_push_string(THIS->name);    f_add(2);    return;    }    break;    case 's':    if (prec)    {    push_int(prec);    image_color_name(1);
pike.git/src/modules/Image/colors.c:946:   */      static void image_color_equal(INT32 args)   {    if (args!=1)    Pike_error("Image.Color.Color->`==: illegal number of arguments\n");       if (TYPEOF(sp[-1]) == T_OBJECT)    {    struct color_struct *other; -  other=(struct color_struct*) -  get_storage(sp[-1].u.object,image_color_program); +  other=get_storage(sp[-1].u.object,image_color_program);    if (other&&    other->rgbl.r==THIS->rgbl.r &&    other->rgbl.g==THIS->rgbl.g &&    other->rgbl.b==THIS->rgbl.b)    {    pop_stack();    push_int(1);    return;    }    }
pike.git/src/modules/Image/colors.c:1070:   */         static void image_color_light(INT32 args)   {    pop_n_elems(args);    image_color_hsvf(0);    sp--;    dmalloc_touch_svalue(sp);    push_array_items(sp->u.array); /* frees */ -  sp[-1].u.float_number += DO_NOT_WARN((FLOAT_TYPE)0.2); +  sp[-1].u.float_number += (FLOAT_TYPE)0.2;    if (((double)sp[-1].u.float_number) >= 1.0) -  sp[-2].u.float_number -= DO_NOT_WARN((FLOAT_TYPE)(sp[-1].u.float_number - -  1.0)); +  sp[-2].u.float_number -= (FLOAT_TYPE)(sp[-1].u.float_number - 1.0);       image_make_hsv_color(3);   }      static void image_color_dark(INT32 args)   {    pop_n_elems(args);    image_color_hsvf(0);    sp--;    dmalloc_touch_svalue(sp);
pike.git/src/modules/Image/colors.c:1126:   {    pop_n_elems(args);       image_color_hsvf(0);    sp--;    dmalloc_touch_svalue(sp);    push_array_items(sp->u.array); /* frees */       if (sp[-2].u.float_number==0.0)    { -  sp[-1].u.float_number -= DO_NOT_WARN((FLOAT_TYPE)0.2); +  sp[-1].u.float_number -= (FLOAT_TYPE)0.2;    }    else    { -  sp[-2].u.float_number -= DO_NOT_WARN((FLOAT_TYPE)0.2); -  sp[-1].u.float_number -= DO_NOT_WARN((FLOAT_TYPE)0.2); +  sp[-2].u.float_number -= (FLOAT_TYPE)0.2; +  sp[-1].u.float_number -= (FLOAT_TYPE)0.2;    }    image_make_hsv_color(3);   }      static void image_color_bright(INT32 args)   {    pop_n_elems(args);    image_color_hsvf(0);    sp--;    dmalloc_touch_svalue(sp);
pike.git/src/modules/Image/colors.c:1160:    sp[-2].u.float_number+=0.2;    sp[-1].u.float_number+=0.2;    }    image_make_hsv_color(3);   }         static void image_color_mult(INT32 args)   {    FLOAT_TYPE x=0.0; -  get_all_args("Image.Color.Color->`*",args,"%f",&x); +  get_all_args("`*",args,"%f",&x);    pop_n_elems(args);    _image_make_rgb_color(DOUBLE_TO_INT(THIS->rgb.r*x),    DOUBLE_TO_INT(THIS->rgb.g*x),    DOUBLE_TO_INT(THIS->rgb.b*x));   }      int image_color_svalue(struct svalue *v,rgb_group *rgb)   {    if (TYPEOF(*v) == T_OBJECT)    { -  struct color_struct *cs=(struct color_struct*) -  get_storage(v->u.object,image_color_program); +  struct color_struct *cs=get_storage(v->u.object,image_color_program);       if (cs)    {    *rgb=cs->rgb;    return 1;    }    }    else if (TYPEOF(*v) == T_ARRAY)    {    if (v->u.array->size==3 &&
pike.git/src/modules/Image/colors.c:1199:    rgb->b=(COLORTYPE)(v->u.array->item[2].u.integer);    return 1;    }    }    else if (TYPEOF(*v) == T_STRING)    {    push_svalue(v);    image_make_color(1);    if (TYPEOF(sp[-1]) == T_OBJECT)    { -  struct color_struct *cs=(struct color_struct*) -  get_storage(sp[-1].u.object,image_color_program); +  struct color_struct *cs=get_storage(sp[-1].u.object,image_color_program);    *rgb=cs->rgb;    pop_stack();    return 1;    }    pop_stack();    }    return 0;   }      int image_color_arg(INT32 args,rgb_group *rgb)
pike.git/src/modules/Image/colors.c:1222:    if (args>=0) return 0;    return image_color_svalue(sp+args,rgb);   }         static void image_color_add(INT32 args)   {    rgb_group rgb;       if (!image_color_arg(-args,&rgb)) -  SIMPLE_BAD_ARG_ERROR("Image.Color.Color->`+",1,"Color"); +  SIMPLE_BAD_ARG_ERROR("`+",1,"Image.Color");       pop_n_elems(args);    _image_make_rgb_color((int)(THIS->rgb.r+rgb.r),    (int)(THIS->rgb.g+rgb.g),    (int)(THIS->rgb.b+rgb.b));   }            #define HEXTONUM(C) \
pike.git/src/modules/Image/colors.c:1320:    (INT32)rgb[1],    (INT32)rgb[2]);    return;    }    }    if (sp[-1].u.string->len>=4 &&    sp[-1].u.string->str[0]=='@')    {    /* @h,s,v; h=0..359, s,v=0..100 */    stack_dup(); -  push_text("@%f,%f,%f\n"); +  push_static_text("@%f,%f,%f\n");    f_sscanf(2);    if (TYPEOF(sp[-1]) == T_ARRAY &&    sp[-1].u.array->size==3)    {    FLOAT_TYPE h,s,v;    stack_swap();    pop_stack();    sp--;    dmalloc_touch_svalue(sp);    push_array_items(sp->u.array); -  get_all_args("Image.Color()",3,"%f%f%f",&h,&s,&v); +  get_all_args("create",3,"%f%f%f",&h,&s,&v);    pop_n_elems(3);    push_int(DOUBLE_TO_INT(h/360.0*256.0));    push_int(DOUBLE_TO_INT(s/100.0*255.4));    push_int(DOUBLE_TO_INT(v/100.0*255.4));    image_make_hsv_color(3);    return;    }    pop_stack();    }    if (sp[-1].u.string->len>=4 &&    sp[-1].u.string->str[0]=='%')    {    /* @c,m,y,k; 0..100 */    stack_dup(); -  push_text("%%%f,%f,%f,%f\n"); +  push_static_text("%%%f,%f,%f,%f\n");    f_sscanf(2);    if (TYPEOF(sp[-1]) == T_ARRAY &&    sp[-1].u.array->size==4)    {    stack_swap();    pop_stack();    sp--;    dmalloc_touch_svalue(sp);    push_array_items(sp->u.array);    image_make_cmyk_color(4);    return;    }    pop_stack();    }    for (n=0; (size_t)n<sizeof(callables)/sizeof(callables[0]); n++)    if (sp[-1].u.string->len>(ptrdiff_t)strlen(callables[n]) &&    memcmp(sp[-1].u.string->str,callables[n],strlen(callables[n]))==0)    { -  push_int(DO_NOT_WARN((INT32)strlen(callables[n]))); +  push_int((INT32)strlen(callables[n]));    push_int(1000000);    f_index(3);    image_get_color(1);    if (TYPEOF(sp[-1]) != T_OBJECT) return; /* no way */    safe_apply(sp[-1].u.object,callables[n],0);    stack_swap();    pop_stack();    return;    }    if (sp[-1].u.string->len>=4 &&    sp[-1].u.string->str[0]=='g')    {    /* greyx; x=0..99 */    stack_dup(); -  push_text("gr%*[ea]y%f\n"); +  push_static_text("gr%*[ea]y%f\n");    f_sscanf(2);    if (TYPEOF(sp[-1]) == T_ARRAY &&    sp[-1].u.array->size==1)    {    double f;    f = sp[-1].u.array->item[0].u.float_number;    pop_stack();    pop_stack(); -  push_int( DO_NOT_WARN((int)(255*f/100)) ); +  push_int( (int)(255*f/100) );    /* grey100 is white, grey0 is black */    stack_dup();    stack_dup();    image_make_rgb_color(3);       return;    }    pop_stack();    }    }
pike.git/src/modules/Image/colors.c:1411:    /* try other stuff here */       pop_stack();    push_undefined();    return;   }      static void image_guess_color(INT32 args)   {    if (args!=1 && TYPEOF(sp[-args]) != T_STRING) -  bad_arg_error("Image.Color->guess",sp-args,args,0,"",sp-args, -  "Bad arguments to Image.Color->guess()\n"); +  bad_arg_error("guess",sp-args,args,0,"",sp-args, +  "Bad arguments to guess.\n");       f_lower_case(1); -  push_constant_text(" "); +  push_static_text(" ");    o_subtract();       stack_dup();    image_get_color(1);    if (TYPEOF(sp[-1]) == T_OBJECT)    {    stack_swap();    pop_stack();    return;    }    pop_stack(); -  push_constant_text("#"); +  push_static_text("#");    stack_swap();    f_add(2);       image_get_color(1);   }      static void image_colors_index(INT32 args)   {    struct svalue s;    object_index_no_free2(&s, THISOBJ, 0, sp-1);
pike.git/src/modules/Image/colors.c:1497:   static void _image_make_rgbl_color(INT32 r,INT32 g,INT32 b)   {    struct color_struct *cs;       if (r<0) r=0; else if (r>COLORLMAX) r=COLORLMAX; /* >=2^31? no way... */    if (g<0) g=0; else if (g>COLORLMAX) g=COLORLMAX;    if (b<0) b=0; else if (b>COLORLMAX) b=COLORLMAX;       push_object(clone_object(image_color_program,0));    -  cs=(struct color_struct*) -  get_storage(sp[-1].u.object,image_color_program); +  cs=get_storage(sp[-1].u.object,image_color_program);       cs->rgbl.r=(INT32)r;    cs->rgbl.g=(INT32)g;    cs->rgbl.b=(INT32)b;    RGBL_TO_RGB(cs->rgb,cs->rgbl);   }    - static void image_color__encode( INT32 args ) + static void image_color__encode( INT32 UNUSED(args) )   {    push_int( THIS->rgbl.r );    push_int( THIS->rgbl.g );    push_int( THIS->rgbl.b );    f_aggregate( 3 );   }    - static void image_color__decode( INT32 args ) + static void image_color__decode( INT32 UNUSED(args) )   {    struct svalue *a;    if( TYPEOF(Pike_sp[-1]) != PIKE_T_ARRAY || Pike_sp[-1].u.array->size != 3 )    Pike_error("Illegal argument to _decode\n");    a=Pike_sp[-1].u.array->item;    THIS->rgbl.r = a[0].u.integer;    THIS->rgbl.g = a[1].u.integer;    THIS->rgbl.b = a[2].u.integer;    RGBL_TO_RGB(THIS->rgb,THIS->rgbl);    pop_stack();
pike.git/src/modules/Image/colors.c:1544:   void _image_make_rgb_color(INT32 r,INT32 g,INT32 b)   {    struct color_struct *cs;       if (r<0) r=0; else if (r>COLORMAX) r=COLORMAX;    if (g<0) g=0; else if (g>COLORMAX) g=COLORMAX;    if (b<0) b=0; else if (b>COLORMAX) b=COLORMAX;       push_object(clone_object(image_color_program,0));    -  cs=(struct color_struct*) -  get_storage(sp[-1].u.object,image_color_program); +  cs=get_storage(sp[-1].u.object,image_color_program);       cs->rgb.r=(COLORTYPE)r;    cs->rgb.g=(COLORTYPE)g;    cs->rgb.b=(COLORTYPE)b;    RGB_TO_RGBL(cs->rgbl,cs->rgb);   }      static void image_make_rgb_color(INT32 args)   {    INT_TYPE r=0,g=0,b=0;
pike.git/src/modules/Image/colors.c:1567:    if( args==1 && TYPEOF(sp[-1]) == T_INT )    {    r = sp[-1].u.integer;    b = r & 0xff;    r >>= 8;    g = r & 0xff;    r >>= 8;    r &= 0xff;    }    else -  get_all_args("Image.Color.rgb()",args,"%i%i%i",&r,&g,&b); +  get_all_args("rgb",args,"%i%i%i",&r,&g,&b);       _image_make_rgb_color(r,g,b);   }      static void image_make_hsv_color(INT32 args)   {    FLOAT_TYPE h,s,v;    FLOAT_TYPE r=0,g=0,b=0; /* to avoid warning */       if (args && TYPEOF(sp[-args]) == T_INT)    {    INT_TYPE hi,si,vi; -  get_all_args("Image.Color.hsv()",args,"%i%i%i", -  &hi,&si,&vi); +  get_all_args("hsv",args,"%i%i%i",&hi,&si,&vi);    pop_n_elems(args);       if (hi<0) hi=(hi%COLORMAX)+COLORMAX;    else if (hi>COLORMAX) hi%=COLORMAX; /* repeating */    if (si<0) si=0; else if (si>COLORMAX) si=COLORMAX;    if (vi<0) vi=0; else if (vi>COLORMAX) vi=COLORMAX;       h = (hi/((double)COLORMAX))*(360.0/60.0);    s = si/((double)COLORMAX);    v = vi/((double)COLORMAX);    }    else    { -  get_all_args("Image.Color.hsv()",args,"%f%f%f", -  &h,&s,&v); +  get_all_args("hsv",args,"%f%f%f",&h,&s,&v);    pop_n_elems(args);    if (h<0) h = 360 + h - ((DOUBLE_TO_INT(h)/360)*360);    if (h>360.0) h -= ((DOUBLE_TO_INT(h)/360)*360);    h/=60;    }       if(s==0.0)    {    r = g = b = v;    } else {
pike.git/src/modules/Image/colors.c:1638:   #undef p   #undef q   #undef t       _image_make_rgbf_color(r,g,b);   }      static void image_make_cmyk_color(INT32 args)   {    FLOAT_TYPE c,m,y,k,r,g,b; -  get_all_args("Image.Color.cmyk()",args,"%F%F%F%F",&c,&m,&y,&k); +  get_all_args("cmyk",args,"%F%F%F%F",&c,&m,&y,&k);    pop_n_elems(args);       r=100-(c+k);    g=100-(m+k);    b=100-(y+k);       _image_make_rgbf_color(r*0.01,g*0.01,b*0.01);   }      static void image_make_greylevel_color(INT32 args)   {    INT_TYPE i;    -  get_all_args("Image.Color.greylevel()",args,"%i",&i); +  get_all_args("greylevel",args,"%i",&i);    pop_n_elems(args);       _image_make_rgb_color(i,i,i);   }      static void image_make_html_color(INT32 args)   {    int i;       if (args!=1 ||    TYPEOF(sp[-1]) != T_STRING)    { -  bad_arg_error("Image.Color.html",sp-args,args,0,"",sp-args, -  "Bad arguments to Image.Color.html()\n"); +  bad_arg_error("html",sp-args,args,0,"",sp-args, +  "Bad arguments to html.\n");    return;    }       f_lower_case(1);    for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++)    if (html_color[i].pname==sp[-1].u.string)    {    _image_make_rgb_color(html_color[i].r,    html_color[i].g,    html_color[i].b);    return;    }       if (sp[-1].u.string->len>0 &&    sp[-1].u.string->str[0]=='#')    image_get_color(1);    else    { -  push_constant_text("#"); +  push_static_text("#");    stack_swap();    f_add(2);    image_get_color(1);    }   }      /*   **! method array(string) _indices()   **! method array(object) _values()   **! (ie as <tt>indices(Image.Color)</tt> or <tt>values(Image.Color)</tt>)
pike.git/src/modules/Image/colors.c:1719:   static void image_colors_values(INT32 args)   {    pop_n_elems(args);    if (!colors) make_colors();    ref_push_mapping(colors);    f_values(1);   }      void init_image_colors(void)   { -  str_array=make_shared_string("array"); -  str_string=make_shared_string("string"); -  str_int=make_shared_string("int"); +     str_r=make_shared_string("r");    str_g=make_shared_string("g");    str_b=make_shared_string("b");    str_h=make_shared_string("h");    str_s=make_shared_string("s");    str_v=make_shared_string("v");       no_name=make_shared_string("");       /* make color object program */       start_new_program();       ADD_STORAGE(struct color_struct);    set_init_callback(init_color_struct);    set_exit_callback(exit_color_struct);       /* color info methods */    -  ADD_FUNCTION("cast",image_color_cast,tFunc(tStr,tOr(tArray,tStr)),0); +  ADD_FUNCTION("cast",image_color_cast,tFunc(tStr,tOr(tArray,tStr)),ID_PROTECTED);    ADD_FUNCTION("_sprintf",image_color__sprintf,    tFunc(tInt tMap(tStr,tMix),tStr),0);    ADD_FUNCTION("`[]",image_color_index,tFunc(tOr(tStr,tInt),tOr(tInt,tFunction)),0);    ADD_FUNCTION("`->",image_color_index,tFunc(tOr(tStr,tInt),tOr(tInt,tFunction)),0); -  ADD_FUNCTION("`==",image_color_equal,tFunc(tOr(tObjImpl_IMAGE_COLOR_COLOR_ID,tInt), +  ADD_FUNCTION("`==",image_color_equal,tFunc(tOr(tObjImpl_IMAGE_COLOR_COLOR,tInt),    tInt),0);    ADD_FUNCTION("__hash",image_color___hash,tFunc(tNone,tInt),0);       ADD_FUNCTION("_encode", image_color__encode,tFunc(tNone,tArr(tInt)),0);    ADD_FUNCTION("_decode", image_color__decode,tFunc(tInt,tVoid),0);       ADD_FUNCTION("name",image_color_name,tFunc(tNone,tStr),0);    ADD_FUNCTION("hex",image_color_hex,tFunc(tNone,tStr),0);    ADD_FUNCTION("html",image_color_html,tFunc(tNone,tStr),0);   
pike.git/src/modules/Image/colors.c:1769:    ADD_FUNCTION("rgbf",image_color_rgbf,tFunc(tNone,tArr(tFlt)),0);    ADD_FUNCTION("hsv",image_color_hsv,tFunc(tNone,tArr(tInt)),0);    ADD_FUNCTION("hsvf",image_color_hsvf,tFunc(tNone,tArr(tFlt)),0);    ADD_FUNCTION("cmyk",image_color_cmyk,tFunc(tNone,tArr(tFlt)),0);    ADD_FUNCTION("greylevel",image_color_greylevel,tOr(tFunc(tNone,tInt),    tFunc(tInt tInt tInt,tInt)),0);       /* color conversion methods */       ADD_FUNCTION("grey",image_color_grey, -  tOr(tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR_ID), -  tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR_ID)),0); +  tOr(tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR), +  tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR)),0);    -  ADD_FUNCTION("light",image_color_light,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR_ID),0); -  ADD_FUNCTION("dark",image_color_dark,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR_ID),0); -  ADD_FUNCTION("neon",image_color_neon,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR_ID),0); -  ADD_FUNCTION("bright",image_color_bright,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR_ID),0); -  ADD_FUNCTION("dull",image_color_dull,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR_ID),0); +  ADD_FUNCTION("light",image_color_light,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0); +  ADD_FUNCTION("dark",image_color_dark,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0); +  ADD_FUNCTION("neon",image_color_neon,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0); +  ADD_FUNCTION("bright",image_color_bright,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0); +  ADD_FUNCTION("dull",image_color_dull,tFunc(tNone,tObjIs_IMAGE_COLOR_COLOR),0);    -  ADD_FUNCTION("`*",image_color_mult,tFunc(tFlt,tObjIs_IMAGE_COLOR_COLOR_ID),0); -  ADD_FUNCTION("`+",image_color_add,tFunc(tObjImpl_IMAGE_COLOR_COLOR_ID, -  tObjIs_IMAGE_COLOR_COLOR_ID),0); +  ADD_FUNCTION("`*",image_color_mult,tFunc(tFlt,tObjIs_IMAGE_COLOR_COLOR),0); +  ADD_FUNCTION("`+",image_color_add,tFunc(tObjImpl_IMAGE_COLOR_COLOR, +  tObjIs_IMAGE_COLOR_COLOR),0);       image_color_program=end_program();    image_color_program->flags |=    PROGRAM_CONSTANT |    PROGRAM_NO_EXPLICIT_DESTRUCT ;       PIKE_MODULE_EXPORT(Image, image_color_program);       /* this is the Image.Color stuff */    -  ADD_FUNCTION("`[]",image_colors_index,tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR_ID),0); +  ADD_FUNCTION("`[]",image_colors_index,tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),0);    ADD_FUNCTION("`()",image_make_color, -  tOr3(tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR_ID), -  tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR_ID), -  tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR_ID)),0); +  tOr3(tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR), +  tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR), +  tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR)),0);    ADD_FUNCTION("rgb",image_make_rgb_color, -  tOr(tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR_ID), -  tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR_ID)),0); +  tOr(tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR), +  tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR)),0);    ADD_FUNCTION("hsv",image_make_hsv_color, -  tOr(tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR_ID), -  tFunc(tFlt tFlt tFlt,tObjIs_IMAGE_COLOR_COLOR_ID)) ,0); +  tOr(tFunc(tInt tInt tInt,tObjIs_IMAGE_COLOR_COLOR), +  tFunc(tFlt tFlt tFlt,tObjIs_IMAGE_COLOR_COLOR)),0);    ADD_FUNCTION("cmyk",image_make_cmyk_color,tFunc(tOr(tInt,tFlt)    tOr(tInt,tFlt)    tOr(tInt,tFlt)    tOr(tInt,tFlt), -  tObjIs_IMAGE_COLOR_COLOR_ID), 0); +  tObjIs_IMAGE_COLOR_COLOR), 0);    ADD_FUNCTION("html",image_make_html_color, -  tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR_ID),0); +  tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),0);    ADD_FUNCTION("guess",image_guess_color, -  tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR_ID),0); +  tFunc(tStr,tObjIs_IMAGE_COLOR_COLOR),0);    ADD_FUNCTION("greylevel",image_make_greylevel_color, -  tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR_ID),0); +  tFunc(tInt,tObjIs_IMAGE_COLOR_COLOR),0);    ADD_FUNCTION("_indices",image_colors_indices,    tFunc(tNone,tArr(tStr)),0);    ADD_FUNCTION("_values",image_colors_values, -  tFunc(tNone,tArr(tObjIs_IMAGE_COLOR_COLOR_ID)),0); +  tFunc(tNone,tArr(tObjIs_IMAGE_COLOR_COLOR)),0);       image_color_program->id = PROG_IMAGE_COLOR_COLOR_ID;       add_program_constant("Color",image_color_program,0);   }      void exit_image_colors(void)   {    free_program(image_color_program);    if (colors)
pike.git/src/modules/Image/colors.c:1841:    free_object(colortable);    free_array(colornames);       colors=NULL;    colortable=NULL;    colornames=NULL;       for (i=0; (size_t)i<sizeof(html_color)/sizeof(html_color[0]); i++)    free_string(html_color[i].pname);    } -  free_string(str_array); -  free_string(str_string); -  free_string(str_int); +     free_string(str_r);    free_string(str_g);    free_string(str_b);    free_string(str_h);    free_string(str_s);    free_string(str_v);       free_string(no_name);   }