METHOD XmlNode_addChild(Ctx *ctx, knh_sfp_t *sfp) { xmlNodePtr parent = (xmlNodePtr) p_cptr(sfp[0]); xmlNodePtr child = (xmlNodePtr) p_cptr(sfp[1]); xmlAddChild(parent,child); KNH_RETURN_void(ctx,sfp); }
METHOD AOBench_close(Ctx *ctx, knh_sfp_t *sfp) { fwrite(img, 256 * 256 * 3, 1, fp); fclose(fp); free(img); KNH_RETURN_void(ctx, sfp); }
METHOD AOBench_write(Ctx *ctx, knh_sfp_t *sfp) { int index = p_int(sfp[1]); int value = p_int(sfp[2]); img[index] = (unsigned char)value; KNH_RETURN_void(ctx, sfp); }
METHOD XmlNode_setAttr(Ctx *ctx, knh_sfp_t *sfp) { xmlNodePtr node= (xmlNodePtr) p_cptr(sfp[0]); xmlChar *name = (xmlChar *) p_char(sfp[1]); xmlChar *val = (xmlChar *) p_char(sfp[2]); xmlSetProp(node,name,val); KNH_RETURN_void(ctx,sfp); }
METHOD System_segLed(Ctx *ctx, knh_sfp_t *sfp) { int x = p_int(sfp[1]); int dd, asize; dd = tk_opn_dev("led", TD_UPDATE); tk_swri_dev(dd, DN_LEDEC, &x, sizeof(x), &asize); KNH_RETURN_void(ctx, sfp); }
METHOD System_led(Ctx *ctx, knh_sfp_t *sfp) { int v = p_int(sfp[1]); int ddl, asize; ddl = tk_opn_dev("led_test",TD_UPDATE); tk_swri_dev(ddl, DN_LEMode, &v, sizeof(v), &asize); KNH_RETURN_void(ctx, sfp); }
METHOD AOBench_open(Ctx *ctx, knh_sfp_t *sfp) { fp = fopen("test.ppm", "wb"); fprintf(fp, "P6\n"); fprintf(fp, "%d %d\n", 256,256); fprintf(fp, "255\n"); img = (unsigned char *)malloc(256 * 256 * 3); counter = 0; KNH_RETURN_void(ctx, sfp); }
METHOD Kernel_insmod(Ctx* ctx, knh_sfp_t* sfp) { char *cmd = alloca(sizeof(char*)); char *str = "insmod"; char *filename = p_char(sfp[1]); int len = strlen(str)+strlen(filename)+2; snprintf(cmd, len, "%s %s", str, filename); system(cmd); KNH_RETURN_void(ctx, sfp); }
static METHOD knh__HashMap_set(Ctx *ctx, knh_sfp_t *sfp) { if(IS_IMM(sfp[0].o)) { if(IS_NULL(sfp[2].o)) { knh__HashMap_remove(ctx, sfp); return ; } knh_Hash_t *o = (knh_Hash_t*)sfp[0].o; knh_hcode_t hcode = knh_stack_hashCode(ctx, sfp + 1); knh_uintptr_t h = hcode % DP(o)->hmax; knh_hashentry_t *e = DP(o)->array[h]; while(e != NULL) { if(e->hcode == hcode && knh_Object_cid(sfp[1].o) == knh_Object_cid(e->key) && knh_stack_equals(ctx, sfp + 1, e->key)) { knh_sfp_boxing(ctx, sfp+2); KNH_SETv(ctx, e->value, sfp[2].o); KNH_RETURN_void(ctx, sfp); } e = e->next; } /* add newentry */ { e = new_hashentry(ctx, o); e->hcode = hcode; knh_sfp_boxing(ctx, sfp+1); KNH_INITv(e->key, sfp[1].o); knh_sfp_boxing(ctx, sfp+2); KNH_INITv(e->value, sfp[2].o); e->next = DP(o)->array[h]; DP(o)->array[h] = e; DP(o)->size++; } } KNH_RETURN_void(ctx, sfp); }
METHOD knh__Script_eval(Ctx *ctx, knh_sfp_t *sfp) { if(IS_NOTNULL(sfp[1].s)) { knh_sfp_t *lsfp = KNH_LOCAL(ctx); knh_cwb_t cwbbuf, *cwb = knh_cwb_open(ctx, &cwbbuf); knh_cwb_write(ctx, cwb, knh_String_tobytes(sfp[1].s)); knh_cwb_putc(ctx, cwb, '\n'); InputStream *in = new_BytesInputStream(ctx, cwb->ba, cwb->pos, knh_Bytes_size(cwb->ba)); KNH_LPUSH(ctx, in); DP(in)->uri = URI_EVAL; DP(in)->line = 0; knh_NameSpace_load(ctx, ctx->share->mainns, in, 1/*isEval*/,0/*isThrowable*/); knh_cwb_close(cwb); KNH_LOCALBACK(ctx, lsfp); } KNH_RETURN_void(ctx, sfp); }
METHOD knh__System_setMethodCompilationListener(Ctx *ctx, knh_sfp_t *sfp) { String *key; if(IS_NULL(sfp[2].s)) { key = T__("MethodC"); } else { knh_cwb_t cwbbuf, *cwb = knh_cwb_openinit(ctx, &cwbbuf, STEXT("MethodC")); knh_bytes_t anno = knh_String_tobytes(sfp[2].s); if(anno.buf[0] != '@') { knh_cwb_putc(ctx, cwb, '@'); } knh_cwb_write(ctx, cwb, anno); key = knh_cwb_newString(ctx, cwb); } KNH_LOCK(ctx, LOCK_SYSTBL, NULL); { DictMap *dm = DP(ctx->sys)->listenerDictMap; knh_DictMap_set(ctx, dm, key, sfp[1].o); } KNH_UNLOCK(ctx, LOCK_SYSTBL, NULL); KNH_RETURN_void(ctx, sfp); }
static METHOD knh__HashMap_remove(Ctx *ctx, knh_sfp_t *sfp) { if(IS_IMM(sfp[0].o)) { knh_Hash_t *o = (knh_Hash_t*)sfp[0].o; knh_hcode_t hcode = knh_stack_hashCode(ctx, sfp + 1); knh_uintptr_t h = hcode % DP(o)->hmax; knh_hashentry_t *e = DP(o)->array[h]; knh_hashentry_t **prev_next = &(DP(o)->array[h]); while(e != NULL) { if(e->hcode == hcode && knh_Object_cid(sfp[1].o) == knh_Object_cid(e->key) && knh_stack_equals(ctx, sfp + 1, e->key)) { prev_next[0] = e->next; knh_hashentry_collect(ctx, o, e); DP(o)->size--; } prev_next = &(e->next); e = e->next; } } KNH_RETURN_void(ctx, sfp); }
METHOD knh__Script_addHistory(Ctx *ctx, knh_sfp_t *sfp) { knh_add_history(knh_String_tochar(sfp[1].s)); KNH_RETURN_void(ctx, sfp); }
/* @method void XmlReader.close() */ METHOD XmlReader_close(Ctx *ctx, knh_sfp_t *sfp) { xmlTextReaderPtr reader = (xmlTextReaderPtr) p_cptr(sfp[0]); xmlTextReaderClose(reader); KNH_RETURN_void(ctx,sfp); }