示例#1
0
文件: thread.c 项目: def44/mate
int thread_sleep(struct object *o, struct object *p) {
	int32_t millisec;
	struct thread *t;
	struct integer *i;

	t = object_get_thread(o);

	if (t == NULL) {
		fprintf(stderr, "mvm: thread not initialized!\n");
		mvm_halt();
	}

	i = object_get_integer(p);
	millisec = integer_get_value(i);

#ifdef DMP
	if (t->dmp != NULL) {
		return thread_dmp_thread_sleep(t->dmp, millisec);
	}
#endif

	while (usleep(millisec * 1000) != 0) {
		if (errno != EINTR) {
			perror("mvm: usleep");
			mvm_halt();
		}
	}

	return 0;
}
示例#2
0
文件: libsalgui.c 项目: radare/sal
void sal_gui_window_size(vm_t *vm)
{
    obj_t *obj = (obj_t *)sal_stack_pop(vm->stack);
    obj_t *width = (obj_t *)sal_stack_pop(vm->stack);
    obj_t *heigh = (obj_t *)sal_stack_pop(vm->stack);

    GtkWidget *window = obj->data;
    gtk_window_set_default_size(
        GTK_WINDOW(window),
        integer_get_value(width),
        integer_get_value(heigh));
    gtk_widget_set_usize(
        GTK_WIDGET(window),
        integer_get_value(width),
        integer_get_value(heigh));
}
示例#3
0
文件: libsalgui.c 项目: radare/sal
void sal_gui_progress_set(vm_t *vm)
{
    obj_t *box = (obj_t *)sal_stack_pop(vm->stack); /* progress bar widget */
    obj_t *obj = (obj_t *)sal_stack_pop(vm->stack); /* value */

    switch(obj->type) {
    case OBJECT_STRING: /* text */
        gtk_progress_bar_set_text(
            GTK_PROGRESS_BAR(box->data),
            string_get_value(obj));
        break;
    case OBJECT_FLOAT: { /* 0 - 1 */
        float val = float_get_value(obj);
        if (val<0) val = 0;
        if (val>1) val = 1;
        gtk_progress_bar_set_fraction(
            GTK_PROGRESS_BAR(box->data),
            (gdouble)val);
    }
    break;
    case OBJECT_INTEGER: { /* 0 - 100 */
        int val = integer_get_value(obj);
        if (val<0) val = 0;
        if (val>100) val = 100;
        gtk_progress_bar_set_fraction(
            GTK_PROGRESS_BAR(box->data),
            (gdouble)0.01*val);
    }
    break;
    default:
        fprintf(stderr, "Don't know how to handle this obj (%d).\n", obj->type);
    }
}
示例#4
0
文件: libsalgui.c 项目: radare/sal
void sal_gui_dialog(vm_t *vm)
{
    obj_t *obj = (obj_t *)sal_stack_pop(vm->stack); /* title */
    obj_t *str = (obj_t *)sal_stack_pop(vm->stack); /* string */
    obj_t *typ = (obj_t *)sal_stack_pop(vm->stack); /* type */
    obj_t *ptr;

#if USE_GTK
    GtkDialog *d = (GtkDialog *)gtk_dialog_new();
    int ret;

    gtk_window_set_title(GTK_WINDOW(d), string_get_value(obj));
//      gtk_window_set_default_size(GTK_WINDOW(d), 300,140);
    gtk_window_set_position(GTK_WINDOW(d), GTK_WIN_POS_CENTER);
    switch(integer_get_value(typ)) {
    case DIALOG_YESNO:
        gtk_dialog_add_button(d, "gtk-cancel", FALSE);
    case DIALOG_POPUP:
    default:
        gtk_dialog_add_button(d, "gtk-ok", TRUE);
        break;
    }
    gtk_dialog_set_default_response(d, FALSE);
    gtk_window_set_modal(GTK_WINDOW(d), TRUE);
    // XXX no access to w pointer
    //gtk_window_set_transient_for(GTK_WINDOW(d), GTK_WINDOW(w->window));
    gtk_container_add(
        GTK_CONTAINER(d->vbox),
        gtk_label_new( string_get_value(str) ));
    gtk_widget_show_all(GTK_WIDGET(d));

    ret = gtk_dialog_run(d);
    gtk_widget_destroy(GTK_WIDGET(d));
#endif
    vm->flags = FLAGS_CLEAR;
    if (ret<0) {
        ret = -1; // avoid -4 if window closed
        vm->flags = FLAGS_NOPER;
        // nothing new in stack
        return;
    }
    ptr = integer_new_i(ret);
    sal_stack_push(vm->stack, ptr);
}
示例#5
0
文件: table.c 项目: def44/mate
int table_run_equals(struct table *t, struct object *o, struct object *p) {
	int ref;
	int32_t value;
	uint32_t pc;
	struct integer *integer;
	struct object *object;
	struct vm_stack *vm_stack;
	struct frame *frame;
	struct operand_stack *operand_stack;
	struct thread *thread;

	if (t == NULL) {
		fprintf(stderr, "mvm: table not initialized!\n");
		mvm_halt();
	}

	thread = thread_get_current();

	pc = thread_get_pc(thread);
	vm_stack = thread_get_vm_stack(thread);

	frame = vm_stack_peek(vm_stack);
	operand_stack = frame_get_operand_stack(frame);
	operand_stack_push(operand_stack, object_get_ref(o));
	operand_stack_push(operand_stack, object_get_ref(p));

	invoke_virtual_method_by_name(thread, object_get_ref(o), pc, "equals", 1, "Object");

	ref = operand_stack_peek(operand_stack);
	object = heap_fetch_object(heap, ref);
	integer = object_get_integer(object);
	value = integer_get_value(integer);

	operand_stack_pop(operand_stack);

	return value;
}