Beispiel #1
0
int ecl_boot(const char *root_dir)
{
    int argc = 1;
    char *argv[256];
    argv[0] = "ecl";
	GC_allow_register_threads();
    GC_register_my_thread((const struct GC_stack_base *)argv);
    GC_stackbottom = (void*)(argv+255);
    setenv("ECLDIR", "", 1);
    cl_boot(argc, argv);
    main_lib_ECL_HELP();
    main_lib_ASDF();
    main_lib_SOCKETS();
    main_lib_IPHONEPSYSTEM();

    si_select_package(ecl_make_simple_base_string("CL-USER", 7));
    char tmp[2048];
    sprintf(tmp, "(setq *default-pathnames-defaults* #p\"%s\")", root_dir);
    si_safe_eval(3, c_string_to_object(tmp), Cnil, OBJNULL);
    init_callbacks_registry();
    ecl_toplevel(root_dir);
    return 0;
}
Beispiel #2
0
cl_object
ecl_foreign_data_ref_elt(void *p, enum ecl_ffi_tag tag)
{
	switch (tag) {
	case ECL_FFI_CHAR:
		return ECL_CODE_CHAR(*(char *)p);
	case ECL_FFI_UNSIGNED_CHAR:
		return ECL_CODE_CHAR(*(unsigned char *)p);
	case ECL_FFI_BYTE:
		return ecl_make_fixnum(*(int8_t *)p);
	case ECL_FFI_UNSIGNED_BYTE:
		return ecl_make_fixnum(*(uint8_t *)p);
	case ECL_FFI_SHORT:
		return ecl_make_fixnum(*(short *)p);
	case ECL_FFI_UNSIGNED_SHORT:
		return ecl_make_fixnum(*(unsigned short *)p);
	case ECL_FFI_INT:
		return ecl_make_integer(*(int *)p);
	case ECL_FFI_UNSIGNED_INT:
		return ecl_make_unsigned_integer(*(unsigned int *)p);
	case ECL_FFI_LONG:
		return ecl_make_integer(*(long *)p);
#ifdef ecl_uint8_t
        case ECL_FFI_INT8_T:
                return ecl_make_fixnum(*(ecl_int8_t *)p);
        case ECL_FFI_UINT8_T:
                return ecl_make_fixnum(*(ecl_uint8_t *)p);
#endif
#ifdef ecl_uint16_t
        case ECL_FFI_INT16_T:
                return ecl_make_int16_t(*(ecl_int16_t *)p);
        case ECL_FFI_UINT16_T:
                return ecl_make_uint16_t(*(ecl_uint16_t *)p);
#endif
#ifdef ecl_uint32_t
        case ECL_FFI_INT32_T:
                return ecl_make_int32_t(*(ecl_int32_t *)p);
        case ECL_FFI_UINT32_T:
                return ecl_make_uint32_t(*(ecl_uint32_t *)p);
#endif
#ifdef ecl_uint64_t
        case ECL_FFI_INT64_T:
                return ecl_make_int64_t(*(ecl_int64_t *)p);
        case ECL_FFI_UINT64_T:
                return ecl_make_uint64_t(*(ecl_uint64_t *)p);
#endif
#ifdef ecl_long_long_t
        case ECL_FFI_LONG_LONG:
                return ecl_make_long_long(*(ecl_long_long_t *)p);
        case ECL_FFI_UNSIGNED_LONG_LONG:
                return ecl_make_ulong_long(*(ecl_ulong_long_t *)p);
#endif
	case ECL_FFI_UNSIGNED_LONG:
		return ecl_make_unsigned_integer(*(unsigned long *)p);
	case ECL_FFI_POINTER_VOID:
		return ecl_make_foreign_data(ECL_SYM(":POINTER-VOID",1377), 0, *(void **)p);
	case ECL_FFI_CSTRING:
		return *(char **)p ?
                        ecl_make_simple_base_string(*(char **)p, -1) : ECL_NIL;
	case ECL_FFI_OBJECT:
		return *(cl_object *)p;
	case ECL_FFI_FLOAT:
		return ecl_make_single_float(*(float *)p);
	case ECL_FFI_DOUBLE:
		return ecl_make_double_float(*(double *)p);
	case ECL_FFI_VOID:
		return ECL_NIL;
        default:
                wrong_ffi_tag(tag);
	}
}