⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sltest.c

📁 一个C格式的脚本处理函数库源代码,可让你的C程序具有执行C格式的脚本文件
💻 C
字号:
#include <stdio.h>#include <slang.h>#include <math.h>#include "../sl-feat.h"#if SLANG_HAS_FLOAT#if defined(__FreeBSD__) || defined(__386BSD__)# include <floatingpoint.h># define HAVE_FPSETMASK 1#endif#endifstatic int Ignore_Exit = 0;static void c_exit (int *code){   if (Ignore_Exit == 0)     exit (*code);}static char test_char_return (char *x){   return *x;}static short test_short_return (short *x){   return *x;}static int test_int_return (int *x){   return *x;}static long test_long_return (long *x){   return *x;}/* static float test_float_return (float *x) *//* { *//*    return *x; *//* } */#if SLANG_HAS_FLOATstatic double test_double_return (double *x){   return *x;}#endiftypedef struct{   int i;   long l;   short h;   char b;#if SLANG_HAS_FLOAT   double d;   double c[2];#endif   char *s;   SLang_Array_Type *a;   char *ro_str;}CStruct_Type;static SLang_CStruct_Field_Type C_Struct [] ={   MAKE_CSTRUCT_FIELD(CStruct_Type, i, "i", SLANG_INT_TYPE, 0),#if SLANG_HAS_FLOAT   MAKE_CSTRUCT_FIELD(CStruct_Type, d, "d", SLANG_DOUBLE_TYPE, 0),   MAKE_CSTRUCT_FIELD(CStruct_Type, c, "z", SLANG_COMPLEX_TYPE, 0),#endif   MAKE_CSTRUCT_FIELD(CStruct_Type, s, "s", SLANG_STRING_TYPE, 0),   MAKE_CSTRUCT_FIELD(CStruct_Type, a, "a", SLANG_ARRAY_TYPE, 0),   MAKE_CSTRUCT_FIELD(CStruct_Type, ro_str, "ro_str", SLANG_STRING_TYPE, 1),   MAKE_CSTRUCT_INT_FIELD(CStruct_Type, l, "l", 0),   MAKE_CSTRUCT_INT_FIELD(CStruct_Type, h, "h", 0),   MAKE_CSTRUCT_INT_FIELD(CStruct_Type, b, "b", 0),   SLANG_END_CSTRUCT_TABLE};static CStruct_Type C_Struct_Buf;static void check_cstruct (void){   static int first_time = 1;   if (first_time)     {	C_Struct_Buf.ro_str = "read-only";	first_time = 0;     }}static void get_c_struct (void){   check_cstruct ();   (void) SLang_push_cstruct ((VOID_STAR) &C_Struct_Buf, C_Struct);}static void set_c_struct (void){   SLang_free_cstruct ((VOID_STAR) &C_Struct_Buf, C_Struct);   (void) SLang_pop_cstruct ((VOID_STAR) &C_Struct_Buf, C_Struct);}static void get_c_struct_via_ref (SLang_Ref_Type *r){   check_cstruct ();   (void) SLang_assign_cstruct_to_ref (r, (VOID_STAR) &C_Struct_Buf, C_Struct);}   static SLang_Intrin_Fun_Type Intrinsics [] ={   MAKE_INTRINSIC_I("exit", c_exit, VOID_TYPE),   MAKE_INTRINSIC_1("test_char_return", test_char_return, SLANG_CHAR_TYPE, SLANG_CHAR_TYPE),   MAKE_INTRINSIC_1("test_short_return", test_short_return, SLANG_SHORT_TYPE, SLANG_SHORT_TYPE),   MAKE_INTRINSIC_1("test_int_return", test_int_return, SLANG_INT_TYPE, SLANG_INT_TYPE),   MAKE_INTRINSIC_1("test_long_return", test_long_return, SLANG_LONG_TYPE, SLANG_LONG_TYPE),   /* MAKE_INTRINSIC_1("test_float_return", test_float_return, SLANG_FLOAT_TYPE, SLANG_FLOAT_TYPE), */#if SLANG_HAS_FLOAT   MAKE_INTRINSIC_1("test_double_return", test_double_return, SLANG_DOUBLE_TYPE, SLANG_DOUBLE_TYPE),#endif   MAKE_INTRINSIC_0("get_c_struct", get_c_struct, VOID_TYPE),   MAKE_INTRINSIC_0("set_c_struct", set_c_struct, VOID_TYPE),   MAKE_INTRINSIC_1("get_c_struct_via_ref", get_c_struct_via_ref, VOID_TYPE, SLANG_REF_TYPE),   SLANG_END_INTRIN_FUN_TABLE};int main (int argc, char **argv){   int i;   if (argc < 2)     {	fprintf (stderr, "Usage: %s FILE...\n", argv[0]);	return 1;     }      if ((-1 == SLang_init_all ())       || (-1 == SLang_init_array_extra ())       || (-1 == SLadd_intrin_fun_table (Intrinsics, NULL)))     return 1;      SLang_Traceback = 1;   if (-1 == SLang_set_argc_argv (argc, argv))     return 1;#ifdef HAVE_FPSETMASK# ifndef FP_X_OFL#  define FP_X_OFL 0# endif# ifndef FP_X_INV#  define FP_X_INV 0# endif# ifndef FP_X_DZ#  define FP_X_DZ 0# endif# ifndef FP_X_DNML#  define FP_X_DNML 0# endif# ifndef FP_X_UFL#  define FP_X_UFL 0# endif# ifndef FP_X_IMP#  define FP_X_IMP 0# endif   fpsetmask (~(FP_X_OFL|FP_X_INV|FP_X_DZ|FP_X_DNML|FP_X_UFL|FP_X_IMP));#endif   if (argc > 2)     Ignore_Exit = 1;   for (i = 1; i < argc; i++)     {	if (-1 == SLang_load_file (argv[i]))	  return 1;     }   return SLang_Error;}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -