void pike_module_init(void) { #ifdef PEXTS_VERSION pexts_init(); #endif struct svalue sv; /* Starting a new class */ start_new_program(); /* Agrega espacio para los datos internos */ low_add_storage(sizeof(struct mcast_storage) - sizeof(struct udp_storage), ALIGNOF(struct mcast_storage),0); /* Hereda Stdio.UDP */ /* NOTA IMPORTANTE * Aparentemente no se puede heredar un objeto * escrito en Pike desde aquí... luego, heredo * el objeto básico (nativo) */ /* Resuelve el objeto (encuentra el archivo) */ push_text("files.UDP"); SAFE_APPLY_MASTER("resolv",1); if(Pike_sp[-1].type != T_FUNCTION) Pike_error("Error in resolving of Stdio.UDP!\n"); /* Obtiene el programa */ stdio_udp = program_from_function(&Pike_sp[-1]); pop_n_elems(1); /* Hereda */ sv.type = T_PROGRAM; sv.subtype = 0; sv.u.program = stdio_udp; do_inherit( &sv, 0, 0); /* Agrega los métodos */ ADD_FUNCTION("join",mcast_join,tFunc(tStr,tVoid),0); ADD_FUNCTION("leave",mcast_leave,tFunc(tStr,tVoid),0); ADD_FUNCTION("setLoopback",mcast_loopback,tFunc(tInt,tVoid),0); ADD_FUNCTION("setTTL",mcast_setTTL,tFunc(tInt,tVoid),0); ADD_FUNCTION("setInterface",mcast_setif,tFunc(tStr,tVoid),0); /* Llama a "init_mcast" antes de crear los objetos */ set_init_callback(init_mcast); end_class("MultiCastUDP",0); }
void pgtk2_get_image_module() { push_constant_text("Image"); SAFE_APPLY_MASTER("resolv_or_error",1); }
static rgba_group decode_color( struct buffer *s ) { static struct svalue _parse_color; static struct svalue *parse_color; rgba_group res; res.alpha = 255; if(!s->len) { res.r=res.g=res.b = 0; return res; } if(s->str[0] == '#' && s->len>3) { switch(s->len) { default: res.r = hextoint(s->str[1])*0x10; res.g = hextoint(s->str[2])*0x10; res.b = hextoint(s->str[3])*0x10; break; case 7: res.r = hextoint(s->str[1])*0x10 + hextoint(s->str[2]); res.g = hextoint(s->str[3])*0x10 + hextoint(s->str[4]); res.b = hextoint(s->str[5])*0x10 + hextoint(s->str[6]); break; case 13: res.r = hextoint(s->str[1])*0x10 + hextoint(s->str[2]); res.g = hextoint(s->str[5])*0x10 + hextoint(s->str[6]); res.b = hextoint(s->str[9])*0x10 + hextoint(s->str[10]); break; } return res; } if(s->len==4&&(!strncmp(s->str,"None",4)||!strncmp(s->str,"none",4))) { #ifdef HIDE_WARNINGS res.r = res.g = res.b = 0; #endif res.alpha = 0; return res; } if(!parse_color) { push_text("Image.Color"); SAFE_APPLY_MASTER( "resolv_or_error", 1 ); _parse_color = sp[-1]; parse_color = &_parse_color; sp--; } push_svalue( parse_color ); push_string(make_shared_binary_string(s->str,s->len)); f_index( 2 ); if(sp[-1].type != T_OBJECT) { push_int(0); stack_swap(); } else { push_constant_text( "array" ); apply( sp[-2].u.object, "cast", 1 ); } if(sp[-1].type == T_ARRAY && sp[-1].u.array->size == 3) { res.r = sp[-1].u.array->item[0].u.integer; res.g = sp[-1].u.array->item[1].u.integer; res.b = sp[-1].u.array->item[2].u.integer; } else { res.r = res.g = res.b = 0; } pop_stack(); /* array */ pop_stack(); /* object */ return res; }
struct source *source_system_memory_make( struct svalue *s, INT64 start, INT64 len ) { struct sm_source *res; if( TYPEOF(*s) != PIKE_T_OBJECT ) return 0; if (!shm_program) { push_static_text("System.Memory"); SAFE_APPLY_MASTER("resolv", 1); shm_program = program_from_svalue(Pike_sp - 1); if (!shm_program) { pop_stack(); return 0; } add_ref(shm_program); pop_stack(); } res = calloc( 1, sizeof( struct sm_source ) ); if( !res ) return NULL; if( !(res->mem = get_storage( s->u.object, shm_program ) ) ) { free(res); return 0; } if( !res->mem->data || !res->mem->len ) { free(res); return 0; } res->s.free_source = free_source; res->s.get_data = get_data; res->obj = s->u.object; add_ref(res->obj); res->offset = start; if( len != -1 ) if( len > (ptrdiff_t) res->mem->len - start ) { sub_ref(res->obj); free(res); return 0; } else res->len = len; else res->len = len; if( res->len <= 0 ) { sub_ref(res->obj); free(res); return 0; } return (struct source *)res; }