MAKE_INTRINSIC_1("tcgetattr", tcgetattr_intrin, V, F), MAKE_INTRINSIC_3("tcsetattr", tcsetattr_intrin, I, F, I, T), MAKE_INTRINSIC_1("cfgetispeed", cfgetispeed_intrin, V, T), MAKE_INTRINSIC_1("cfgetospeed", cfgetospeed_intrin, V, T), MAKE_INTRINSIC_2("cfsetispeed", cfsetispeed_intrin, I, T, U), MAKE_INTRINSIC_2("cfsetospeed", cfsetospeed_intrin, I, T, U), MAKE_INTRINSIC_1("termios_get_oflag", termios_get_oflag, I, T), MAKE_INTRINSIC_1("termios_get_iflag", termios_get_iflag, I, T), MAKE_INTRINSIC_1("termios_get_cflag", termios_get_cflag, I, T), MAKE_INTRINSIC_1("termios_get_lflag", termios_get_lflag, I, T), MAKE_INTRINSIC_1("termios_get_cc", termios_get_cc, V, T), MAKE_INTRINSIC_2("termios_set_oflag", termios_set_oflag, V, T, I), MAKE_INTRINSIC_2("termios_set_iflag", termios_set_iflag, V, T, I), MAKE_INTRINSIC_2("termios_set_cflag", termios_set_cflag, V, T, I), MAKE_INTRINSIC_2("termios_set_lflag", termios_set_lflag, V, T, I), MAKE_INTRINSIC_0("termios_set_cc", termios_set_cc, V), SLANG_END_INTRIN_FUN_TABLE }; #undef T #undef I #undef F #undef V #undef U static SLang_IConstant_Type Termios_Consts [] = { #ifdef BRKINT MAKE_ICONSTANT("BRKINT", BRKINT), #endif #ifdef CLOCAL
static int get_frame_depth (void) { return _pSLang_get_frame_depth (); } static void use_frame_namespace (int *depth) { _pSLang_use_frame_namespace (*depth); } #endif static SLang_Intrin_Fun_Type Intrin_Funs [] = { MAKE_INTRINSIC_0("_set_bos_handler", set_bos_handler, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_set_eos_handler", set_eos_handler, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_set_bof_handler", set_bof_handler, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_set_eof_handler", set_eof_handler, SLANG_VOID_TYPE), #if SLANG_HAS_DEBUGGER_SUPPORT MAKE_INTRINSIC_0("_set_frame_variable", set_frame_variable, SLANG_VOID_TYPE), MAKE_INTRINSIC_IS("_get_frame_variable", get_frame_variable, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_get_frame_depth", get_frame_depth, SLANG_INT_TYPE), MAKE_INTRINSIC_I("_get_frame_info", get_frame_info, SLANG_VOID_TYPE), MAKE_INTRINSIC_I("_use_frame_namespace", use_frame_namespace, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_set_debug_hook", set_debug_hook_intrin, SLANG_VOID_TYPE), #endif SLANG_END_INTRIN_FUN_TABLE }; int _pSLang_init_boseos (void)
(void) SLang_set_module_load_path (path); } static SLCONST char *get_import_module_path (void) { char *path; if (Module_Path != NULL) return Module_Path; if (NULL != (path = _pSLsecure_getenv (MODULE_PATH_ENV_NAME))) return path; return MODULE_INSTALL_DIR; } static SLang_Intrin_Fun_Type Module_Intrins [] = { MAKE_INTRINSIC_0("import", import_module_intrin, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("set_import_module_path", set_import_module_path, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("get_import_module_path", get_import_module_path, SLANG_STRING_TYPE), SLANG_END_INTRIN_FUN_TABLE }; #endif /* SLANG_HAS_DYNAMIC_LINKING */ int SLang_set_module_load_path (SLFUTURE_CONST char *path) { #if SLANG_HAS_DYNAMIC_LINKING if (NULL == (path = SLang_create_slstring (path))) return -1; SLang_free_slstring ((char *) Module_Path); Module_Path = path; return 0;
(void) SLang_push_null (); return; } rut.ru_stimesecs = (double)rut.r.ru_stime.tv_sec + 1e-6*rut.r.ru_stime.tv_usec; rut.ru_utimesecs = (double)rut.r.ru_utime.tv_sec + 1e-6*rut.r.ru_utime.tv_usec; (void) SLang_push_cstruct ((VOID_STAR) &rut, RUsage_Struct); } #endif static SLang_Intrin_Fun_Type Process_Name_Table[] = { MAKE_INTRINSIC_0("getpid", getpid_cmd, SLANG_INT_TYPE), #ifdef HAVE_SETSID MAKE_INTRINSIC_0("setsid", setsid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETSID MAKE_INTRINSIC_0("getsid", getsid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETPPID MAKE_INTRINSIC_0("getppid", getppid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETGID MAKE_INTRINSIC_0("getgid", getgid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETEGID
} static void set_innerprod_block_size (int *sp) { int s = *sp; if (s <= 0) s = SLANG_INNERPROD_BLOCK_SIZE; Inner_Prod_Block_Size = (unsigned int) s; } static SLang_Intrin_Fun_Type Array_Fun_Table [] = { MAKE_INTRINSIC_1("transpose", array_transpose, SLANG_VOID_TYPE, SLANG_ARRAY_TYPE), #if SLANG_HAS_FLOAT MAKE_INTRINSIC_0("prod", array_prod, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("sum", array_sum, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("sumsq", array_sumsq, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("cumsum", array_cumsum, SLANG_VOID_TYPE), #endif MAKE_INTRINSIC_0("array_swap", array_swap, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("array_reverse", array_reverse, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("min", array_min, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("max", array_max, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("maxabs", array_maxabs, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("minabs", array_minabs, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("any", array_any, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("all", array_all, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("__get_innerprod_block_size", get_innerprod_block_size, SLANG_INT_TYPE), MAKE_INTRINSIC_I("__set_innerprod_block_size", set_innerprod_block_size, SLANG_VOID_TYPE),
status = SLfile_push_fd (f); SLfile_free_fd (f); return status; } #define I SLANG_INT_TYPE #define V SLANG_VOID_TYPE #define F SLANG_FILE_FD_TYPE #define B SLANG_BSTRING_TYPE #define R SLANG_REF_TYPE #define U SLANG_UINT_TYPE #define S SLANG_STRING_TYPE #define L SLANG_LONG_TYPE static SLang_Intrin_Fun_Type Fd_Name_Table [] = { MAKE_INTRINSIC_0("fileno", posix_fileno, V), MAKE_INTRINSIC_0("_fileno", posix_fileno_int, I), MAKE_INTRINSIC_0("isatty", posix_isatty, I), MAKE_INTRINSIC_0("open", posix_open, V), MAKE_INTRINSIC_3("read", posix_read, V, F, R, U), MAKE_INTRINSIC_3("lseek", posix_lseek, SLANG_C_OFF_T_TYPE, F, SLANG_C_OFF_T_TYPE, I), MAKE_INTRINSIC_2("fdopen", posix_fdopen, V, F, S), MAKE_INTRINSIC_2("write", posix_write, V, F, B), MAKE_INTRINSIC_1("dup_fd", posix_dup, V, F), MAKE_INTRINSIC_2("dup2_fd", posix_dup2, I, F, I), MAKE_INTRINSIC_1("close", posix_close, I, F), MAKE_INTRINSIC_1("_close", posix_close_fd, I, I), #if defined(TTYNAME_R) MAKE_INTRINSIC_0("ttyname", posix_ttyname, V), #endif SLANG_END_INTRIN_FUN_TABLE
static int path_is_absolute_path (char *s) { return SLpath_is_absolute_path (s); } #if 0 static void set_path_delimiter (int *d) { (void) SLpath_set_delimiter (*d); } #endif static SLang_Intrin_Fun_Type Path_Name_Table [] = { MAKE_INTRINSIC_S("set_slang_load_path", set_load_path, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("get_slang_load_path", get_load_path, SLANG_STRING_TYPE), MAKE_INTRINSIC_0("path_get_delimiter", get_path_delimiter, SLANG_VOID_TYPE), /* MAKE_INTRINSIC_I("path_set_delimiter", set_path_delimiter, SLANG_VOID_TYPE), */ MAKE_INTRINSIC_SS("path_concat", path_concat, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("path_extname", path_extname, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("path_dirname", path_dirname, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("path_basename", path_basename, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("path_basename_sans_extname", path_basename_sans_extname, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("path_sans_extname", path_sans_extname, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("path_is_absolute", path_is_absolute_path, SLANG_INT_TYPE), SLANG_END_INTRIN_FUN_TABLE }; int SLang_init_ospath (void) { if (-1 == SLadd_intrin_fun_table(Path_Name_Table, "__OSPATH__"))
data = (char **)at->data; num = at->num_elements; for (i = 0; i < num; i++) { if (-1 == SLrline_add_to_history (rli, data[i])) break; } SLang_free_array (at); } static SLang_Intrin_Fun_Type Intrinsics [] = { MAKE_INTRINSIC_S("rline_call", rline_call_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("rline_ins", rline_ins_intrinsic, VOID_TYPE), MAKE_INTRINSIC_I("rline_del", rline_del_intrinsic, VOID_TYPE), MAKE_INTRINSIC_0("rline_bolp", rline_bolp_intrinsic, INT_TYPE), MAKE_INTRINSIC_0("rline_eolp", rline_eolp_intrinsic, INT_TYPE), MAKE_INTRINSIC_0("rline_get_point", rline_get_point_intrinsic, INT_TYPE), MAKE_INTRINSIC_I("rline_set_point", rline_set_point_intrinsic, VOID_TYPE), MAKE_INTRINSIC_0("rline_get_edit_width", rline_get_edit_width_intrinsic, INT_TYPE), MAKE_INTRINSIC_0("rline_get_line", rline_get_line_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("rline_set_line", rline_set_line_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("rline_setkey", rline_setkey_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("rline_unsetkey", rline_unsetkey_intrinsic, VOID_TYPE), MAKE_INTRINSIC_0("rline_getkey", rline_getkey_intrinsic, INT_TYPE), MAKE_INTRINSIC_0("rline_set_history", rline_set_history_intrinsic, VOID_TYPE), MAKE_INTRINSIC_0("rline_get_history", rline_get_history_intrinsic, VOID_TYPE), MAKE_INTRINSIC_I("rline_input_pending", rline_input_pending_intrinsic, INT_TYPE), MAKE_INTRINSIC_0("rline_set_completion_callback", rline_set_completion_callback, VOID_TYPE), MAKE_INTRINSIC_0("rline_set_list_completions_callback", rline_set_list_completions_callback, VOID_TYPE), SLANG_END_INTRIN_FUN_TABLE
return -1; (void) SLclass_set_destroy_function (cl2, sl_destroy_sslctx); if (-1 == SLclass_register_class (cl2, SLANG_VOID_TYPE, sizeof (SLsslctx_Type), SLANG_CLASS_TYPE_MMT)) return -1; SLsslctx_Type_Id = SLclass_get_class_id (cl2); return 0; } static SLang_Intrin_Fun_Type Module_Intrinsics [] = { MAKE_INTRINSIC_0("digest",sl_digest,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("hmac",sl_hmac,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_encrypt",sl_encrypt,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_decrypt",sl_decrypt,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_genkeyiv",sl_generate_key,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("base64_encode",sl_base64_encode,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("base64_decode",sl_base64_decode,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_server",sl_ssl_server,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_client",sl_ssl_client,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_connect",sl_ssl_connect,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_handshake",sl_ssl_handshake,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_read",sl_ssl_read,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_write",sl_ssl_write,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_verify",sl_ssl_verify,SLANG_VOID_TYPE), MAKE_INTRINSIC_0("ssl_cert",sl_ssl_get_cert,SLANG_VOID_TYPE), SLANG_END_INTRIN_FUN_TABLE
} if (b == bmax) return (a0 - astart); a = a0; b = b0; } return 0; } static SLang_Intrin_Fun_Type BString_Table [] = /*{{{*/ { MAKE_INTRINSIC_1("bstrlen", bstrlen_cmd, SLANG_UINT_TYPE, SLANG_BSTRING_TYPE), MAKE_INTRINSIC_2("count_byte_occurances", count_byte_occurrences, SLANG_UINT_TYPE, SLANG_BSTRING_TYPE, SLANG_UCHAR_TYPE), MAKE_INTRINSIC_2("count_byte_occurrences", count_byte_occurrences, SLANG_UINT_TYPE, SLANG_BSTRING_TYPE, SLANG_UCHAR_TYPE), MAKE_INTRINSIC_0("pack", _pSLpack, SLANG_VOID_TYPE), MAKE_INTRINSIC_2("unpack", _pSLunpack, SLANG_VOID_TYPE, SLANG_STRING_TYPE, SLANG_BSTRING_TYPE), MAKE_INTRINSIC_1("pad_pack_format", _pSLpack_pad_format, SLANG_VOID_TYPE, SLANG_STRING_TYPE), MAKE_INTRINSIC_1("sizeof_pack", _pSLpack_compute_size, SLANG_UINT_TYPE, SLANG_STRING_TYPE), MAKE_INTRINSIC_2("is_substrbytes", issubbytes, SLANG_INT_TYPE, SLANG_BSTRING_TYPE, SLANG_BSTRING_TYPE), SLANG_END_INTRIN_FUN_TABLE }; struct _pSLang_Foreach_Context_Type { SLang_BString_Type *bstr; unsigned char *s, *smax; /* pointers into string */ int using_chars; }; SLang_Foreach_Context_Type *
/* * Not implemented: * Obsolete: * pgbeg */ #define V SLANG_VOID_TYPE #define I SLANG_INT_TYPE #define S SLANG_STRING_TYPE #define D SLANG_DOUBLE_TYPE #define R SLANG_REF_TYPE static SLang_Intrin_Fun_Type Module_Intrinsics [] = { MAKE_INTRINSIC_4("_pgarro", _pgarro, V, D, D, D, D), MAKE_INTRINSIC_I("_pgask", _pgask, V), MAKE_INTRINSIC_0("_pgaxis", _pgaxis, V), MAKE_INTRINSIC_7("_pgband", _pgband, I, I, I, D, D, R, R, R), MAKE_INTRINSIC_0("_pgbbuf", _pgbbuf, V), MAKE_INTRINSIC_I("_pgbin", _pgbin, V), MAKE_INTRINSIC_6("_pgbox", _pgbox, V, S, D, I, S, D, I), MAKE_INTRINSIC_3("_pgcirc", _pgcirc, V, D, D, D), MAKE_INTRINSIC_0("_pgclos", _pgclos, V), MAKE_INTRINSIC_1("_pgconb", _pgconb, V, D), MAKE_INTRINSIC_3("_pgconl", _pgconl, V, S, I, I), MAKE_INTRINSIC_0("_pgconf", _pgconf, V), MAKE_INTRINSIC_0("_pgcons", _pgcons, V), MAKE_INTRINSIC_1("_pgcont", _pgcont, V, I), /* MAKE_INTRINSIC_0("_pgconx", _pgconx, V), */ MAKE_INTRINSIC_2("_pgctab", _pgctab, V, D, D), MAKE_INTRINSIC_0("_pgcurs", _pgcurs, I),
SLrline_close (rli); return; } if (-1 == SLang_push_mmt (mmt)) SLang_free_mmt (mmt); } static void init_readline_intrinsic (char *appname) { (void) init_readline (appname); } static SLang_Intrin_Fun_Type Intrinsics [] = { MAKE_INTRINSIC_0("__rline_init_tty", init_tty, VOID_TYPE), MAKE_INTRINSIC_0("__rline_reset_tty", reset_tty, VOID_TYPE), MAKE_INTRINSIC_S("slsh_readline_init", init_readline_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("slsh_readline_new", new_slrline_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("slsh_readline", readline_intrinsic, VOID_TYPE), MAKE_INTRINSIC_S("slsh_readline_noecho", readline_noecho_intrinsic, VOID_TYPE), MAKE_INTRINSIC_0("slsh_set_prompt_hook", set_prompt_hook, VOID_TYPE), MAKE_INTRINSIC_0("slsh_get_prompt_hook", get_prompt_hook, VOID_TYPE), SLANG_END_INTRIN_FUN_TABLE }; static void destroy_rline (SLtype type, VOID_STAR f) { SLang_RLine_Info_Type *rli; (void) type;
MAKE_MATH_UNARY("asin", SLMATH_ASIN), MAKE_MATH_UNARY("exp", SLMATH_EXP), MAKE_MATH_UNARY("log", SLMATH_LOG), MAKE_MATH_UNARY("sqrt", SLMATH_SQRT), MAKE_MATH_UNARY("log10", SLMATH_LOG10), #if SLANG_HAS_COMPLEX MAKE_MATH_UNARY("Real", SLMATH_REAL), MAKE_MATH_UNARY("Imag", SLMATH_IMAG), MAKE_MATH_UNARY("Conj", SLMATH_CONJ), #endif SLANG_END_MATH_UNARY_TABLE }; static SLang_Intrin_Fun_Type SLang_Math_Table [] = { MAKE_INTRINSIC_0("polynom", math_poly, SLANG_DOUBLE_TYPE), SLANG_END_INTRIN_FUN_TABLE }; int SLang_init_slmath (void) { unsigned char *int_types; #if defined(__unix__) (void) SIGNAL (SIGFPE, math_floating_point_exception); #endif #if SLANG_HAS_COMPLEX if (-1 == _SLinit_slcomplex ()) return -1; #endif
} SLfile_free_fd (f1); SLfile_free_fd (f0); } static SLang_IConstant_Type Module_IConstants [] = { MAKE_ICONSTANT("WNOHANG", WNOHANG), MAKE_ICONSTANT("WUNTRACED", WUNTRACED), MAKE_ICONSTANT("WCONTINUED", WCONTINUED), SLANG_END_ICONST_TABLE }; static SLang_Intrin_Fun_Type Module_Intrinsics [] = { MAKE_INTRINSIC_0("fork", fork_intrinsic, SLANG_INT_TYPE), MAKE_INTRINSIC_2("waitpid", waitpid_intrinsic, SLANG_VOID_TYPE, SLANG_INT_TYPE, SLANG_INT_TYPE), MAKE_INTRINSIC_0("execv", execv_intrin, SLANG_INT_TYPE), MAKE_INTRINSIC_0("execvp", execvp_intrin, SLANG_INT_TYPE), MAKE_INTRINSIC_0("execve", execve_intrin, SLANG_INT_TYPE), MAKE_INTRINSIC_0("pipe", pipe_intrin, SLANG_VOID_TYPE), MAKE_INTRINSIC_1("_exit", _exit_intrin, SLANG_VOID_TYPE, SLANG_INT_TYPE), SLANG_END_INTRIN_FUN_TABLE }; int init_fork_module_ns (char *ns_name) { SLang_NameSpace_Type *ns = SLns_create_namespace (ns_name); if (ns == NULL) return -1;
} static void getsockopt_intrin (void) { getset_sockopt (0); } #define I SLANG_INT_TYPE #define V SLANG_VOID_TYPE #define F SLANG_FILE_FD_TYPE static SLang_Intrin_Fun_Type Module_Intrinsics [] = { MAKE_INTRINSIC_3("socket", socket_intrin, V, I, I, I), #ifdef HAVE_SOCKETPAIR MAKE_INTRINSIC_3("socketpair", socketpair_intrin, V, I, I, I), #endif MAKE_INTRINSIC_0("connect", connect_intrin, V), MAKE_INTRINSIC_0("bind", bind_intrin, V), MAKE_INTRINSIC_2("listen", listen_intrin, V, F, I), MAKE_INTRINSIC_0("accept", accept_intrin, V), MAKE_INTRINSIC_0("getsockopt", getsockopt_intrin, V), MAKE_INTRINSIC_0("setsockopt", setsockopt_intrin, V), SLANG_END_INTRIN_FUN_TABLE }; #undef F #undef V #undef I static SLang_IConstant_Type Module_IConstants [] = { #ifdef SOCK_STREAM MAKE_ICONSTANT("SOCK_STREAM", SOCK_STREAM),
{ read_image (1); } static void write_intrin (void) { write_image (0); } static void write_flipped_intrin (void) { write_image (1); } static SLang_Intrin_Fun_Type Module_Intrinsics [] = { MAKE_INTRINSIC_0("png_read", read_intrin, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("png_read_flipped", read_flipped_intrin, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("png_write", write_intrin, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("png_write_flipped", write_flipped_intrin, SLANG_VOID_TYPE), SLANG_END_INTRIN_FUN_TABLE }; static SLang_Intrin_Var_Type Module_Variables [] = { MAKE_VARIABLE("_png_module_version_string", &Module_Version_String, SLANG_STRING_TYPE, 1), SLANG_END_INTRIN_VAR_TABLE }; static SLang_IConstant_Type Module_IConstants [] = { MAKE_ICONSTANT("PNG_COLOR_TYPE_GRAY", PNG_COLOR_TYPE_GRAY),
MAKE_MATH_UNARY("isnan", SLMATH_ISNAN), MAKE_MATH_UNARY("floor", SLMATH_FLOOR), MAKE_MATH_UNARY("ceil", SLMATH_CEIL), MAKE_MATH_UNARY("round", SLMATH_ROUND), #if SLANG_HAS_COMPLEX MAKE_MATH_UNARY("Real", SLMATH_REAL), MAKE_MATH_UNARY("Imag", SLMATH_IMAG), MAKE_MATH_UNARY("Conj", SLMATH_CONJ), #endif SLANG_END_MATH_UNARY_TABLE }; static SLang_Intrin_Fun_Type SLang_Math_Table [] = { MAKE_INTRINSIC_0("nint", nint_intrin, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("polynom", math_poly, SLANG_DOUBLE_TYPE), MAKE_INTRINSIC_0("hypot", hypot_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("atan2", atan2_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_min", min_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_max", max_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("_diff", diff_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("feqs", feqs_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("fneqs", fneqs_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("flteqs", fleqs_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("fgteqs", fgeqs_fun, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("fpu_clear_except_bits", fpu_clear_except_bits, SLANG_VOID_TYPE), MAKE_INTRINSIC_1("fpu_test_except_bits", fpu_test_except_bits, _pSLANG_LONG_TYPE, _pSLANG_LONG_TYPE), SLANG_END_INTRIN_FUN_TABLE };
{ free_list (list); return; } (void) push_list (list, 1); /* will delete upon failure */ } #define L SLANG_LIST_TYPE #define I SLANG_INT_TYPE #define A SLANG_ARRAY_INDEX_TYPE static SLang_Intrin_Fun_Type Intrin_Table [] = { MAKE_INTRINSIC_2("list_delete", list_delete_elem, SLANG_VOID_TYPE, L, A), MAKE_INTRINSIC_1("list_reverse", list_reverse, SLANG_VOID_TYPE, L), MAKE_INTRINSIC_0("list_insert", list_insert_elem, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("list_append", list_append_elem, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("list_to_array", list_to_array, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("list_new", list_new, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("list_pop", list_pop, SLANG_VOID_TYPE), MAKE_INTRINSIC_2("list_concat", list_concat, SLANG_VOID_TYPE, L, L), MAKE_INTRINSIC_2("list_join", list_join, SLANG_VOID_TYPE, L, L), MAKE_INTRINSIC_1("__push_list", push_list_elements, SLANG_VOID_TYPE, L), MAKE_INTRINSIC_1("__pop_list", pop_as_list, SLANG_VOID_TYPE, I), SLANG_END_INTRIN_FUN_TABLE }; #undef L #undef I #undef A static int list_length (SLtype type, VOID_STAR v, SLuindex_Type *len)
} #endif #ifdef HAVE_SETPRIORITY static int setpriority_intrin (int *which, int *who, int *prio) { int ret; if (-1 == (ret = setpriority (*which, *who, *prio))) _pSLerrno_errno = errno; return ret; } #endif static SLang_Intrin_Fun_Type Process_Name_Table[] = { MAKE_INTRINSIC_0("getpid", getpid_cmd, SLANG_INT_TYPE), #ifdef HAVE_SETSID MAKE_INTRINSIC_0("setsid", setsid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETSID MAKE_INTRINSIC_0("getsid", getsid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETPPID MAKE_INTRINSIC_0("getppid", getppid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETGID MAKE_INTRINSIC_0("getgid", getgid_cmd, SLANG_INT_TYPE), #endif #ifdef HAVE_GETEGID
{ (void) set_username (s); } static void set_realname_cmd (char *s) { (void) set_realname (s); } static void set_hostname_cmd (char *s) { (void) set_hostname (s); } static SLang_Intrin_Fun_Type User_Intrinsics [] = { MAKE_INTRINSIC_S("get_passwd_info", get_passwd_cmd, VOID_TYPE), MAKE_INTRINSIC_0("get_username", get_username_cmd, SLANG_STRING_TYPE), MAKE_INTRINSIC_0("get_hostname", get_hostname_cmd, SLANG_STRING_TYPE), MAKE_INTRINSIC_0("get_realname", get_realname_cmd, SLANG_STRING_TYPE), MAKE_INTRINSIC_S("set_username", set_username_cmd, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("set_hostname", set_hostname_cmd, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("set_realname", set_realname_cmd, SLANG_VOID_TYPE), MAKE_INTRINSIC_0(NULL, NULL, 0) }; int jed_init_userinfo (void) { (void) get_user_info (); if (-1 == SLadd_intrin_fun_table (User_Intrinsics, NULL))
static int fcntl_setfl (int *flags) { int fd; if (-1 == pop_fd (&fd)) return -1; return do_fcntl_3_int (fd, F_SETFL, *flags); } #define F SLANG_FILE_FD_TYPE #define I SLANG_INT_TYPE static SLang_Intrin_Fun_Type Fcntl_Intrinsics [] = { MAKE_INTRINSIC_0("fcntl_getfd", fcntl_getfd, I), MAKE_INTRINSIC_1("fcntl_setfd", fcntl_setfd, I, I), MAKE_INTRINSIC_0("fcntl_getfl", fcntl_getfl, I), MAKE_INTRINSIC_1("fcntl_setfl", fcntl_setfl, I, I), SLANG_END_INTRIN_FUN_TABLE }; #undef I #undef F static SLang_IConstant_Type Fcntl_Consts [] = { MAKE_ICONSTANT("FD_CLOEXEC", FD_CLOEXEC), #ifndef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR) #endif
SLsig_block_signals (); (void) SLsmg_init_smg (); SLsig_unblock_signals (); Smg_Initialized = 1; } static void smg_define_color (int *obj, char *fg, char *bg) { SLtt_set_color (*obj, NULL, fg, bg); } #define I SLANG_INT_TYPE #define S SLANG_STRING_TYPE static SLang_Intrin_Fun_Type Smg_Intrinsics [] = { MAKE_INTRINSIC_0("slsmg_suspend_smg", smg_suspend_smg, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_resume_smg", smg_resume_smg, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_erase_eol", smg_erase_eol, SLANG_VOID_TYPE), MAKE_INTRINSIC_II("slsmg_gotorc", smg_gotorc, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_erase_eos", smg_erase_eos, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_reverse_video", smg_reverse_video, SLANG_VOID_TYPE), MAKE_INTRINSIC_I("slsmg_set_color", smg_set_color, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_normal_video", smg_normal_video, SLANG_VOID_TYPE), MAKE_INTRINSIC_S("slsmg_write_string", smg_write_string, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_cls", smg_cls, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_refresh", smg_refresh, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_reset_smg", smg_reset_smg, SLANG_VOID_TYPE), MAKE_INTRINSIC_0("slsmg_init_smg", smg_init_smg, SLANG_VOID_TYPE), MAKE_INTRINSIC_SI("slsmg_write_nstring", smg_write_nstring, SLANG_VOID_TYPE), MAKE_INTRINSIC_6("slsmg_write_wrapped_string", smg_write_wrapped_string, SLANG_VOID_TYPE, S,I,I,I,I,I),
/* drop */ return_error: if (m != NULL) free_mmap_type (m); if (a_dims != NULL) SLang_free_array (a_dims); if (file != NULL) SLang_free_slstring (file); } #endif /* HAVE_MMAP */ static SLang_Intrin_Fun_Type Module_Intrinsics [] = { #ifdef HAVE_MMAP MAKE_INTRINSIC_0("mmap_array", mmap_array, SLANG_VOID_TYPE), #endif SLANG_END_INTRIN_FUN_TABLE }; int init_varray_module_ns (char *ns_name) { SLang_NameSpace_Type *ns; if (NULL == (ns = SLns_create_namespace (ns_name))) return -1; if (-1 == SLns_add_intrin_fun_table (ns, Module_Intrinsics, NULL)) return -1; return 0;