Exemple #1
0
static void shell(CTX)
{
	kwb_t wb;
	kwb_init(&(_ctx->stack->cwb), &wb);
	kline_t uline = FILEID_("(shell)") | 1;
	while(1) {
		kline_t inc = 0;
		kstatus_t status = readstmt(_ctx, &wb, &inc);
		if(status == K_CONTINUE && kwb_bytesize(&wb) > 0) {
			status = konoha_eval((konoha_t)_ctx, kwb_top(&wb, 1), uline);
			uline += inc;
			kwb_free(&wb);
			if(status != K_FAILED) {
				dumpEval(_ctx, &wb);
				kwb_free(&wb);
			}
		}
		if(status == K_BREAK) {
			break;
		}
	}
	kwb_free(&wb);
	fprintf(stdout, "\n");
	return;
}
Exemple #2
0
static kstatus_t readstmt(CTX, kwb_t *wb, kline_t *uline)
{
	int line = 1;
	kstatus_t status = K_CONTINUE;
//	fputs(TERM_BBOLD(_ctx), stdout);
	while(1) {
		int check;
		char *ln = kreadline(line == 1 ? ">>> " : "    ");
		if(ln == NULL) {
			kwb_free(wb);
			status = K_BREAK;
			break;
		}
		if(line > 1) kwb_putc(wb, '\n');
		kwb_write(wb, ln, strlen(ln));
		free(ln);
		if((check = checkstmt(kwb_top(wb, 0), kwb_bytesize(wb))) > 0) {
			uline[0]++;
			line++;
			continue;
		}
		if(check < 0) {
			fputs("(Cancelled)...\n", stdout);
			kwb_free(wb);
		}
		break;
	}
	if(kwb_bytesize(wb) > 0) {
		kadd_history(kwb_top(wb, 1));
	}
//	fputs(TERM_EBOLD(_ctx), stdout);
	fflush(stdout);
	uline[0]++;
	return status;
}
Exemple #3
0
static void dumpMethod(CTX, ksfp_t *sfp, kMethod *mtd)
{
	kwb_t wb;
	kwb_init(&(_ctx->stack->cwb), &wb);
	KSETv(sfp[2].mtd, mtd);
	O_ct(mtd)->p(_ctx, sfp, 2, &wb, 1);
	PLAT printf_i("%s\n", kwb_top(&wb, 1));
	kwb_free(&wb);
	return;
}