This is array.c in view mode; [Download] [Up]
/* Demonstrates how to create C arrays that are callable from S-Lang */ #include "config.h" #include <stdio.h> #include <slang.h> /* Here is a global C array that will be accessed from S-Lang */ float64 C_Array[100]; /* An intrinsic function to set error */ static void c_error (char *s) { if (SLang_Error == 0) SLang_Error = INTRINSIC_ERROR; fprintf (stderr, "Error: %s\n", s); } /* Function to quit */ static void c_quit (void) { exit (0); } /* Create the Table that S-Lang requires */ SLang_Name_Type Demo_Intrinsics[] = { MAKE_INTRINSIC(".error", c_error, VOID_TYPE, 1), MAKE_INTRINSIC(".quit", c_quit, VOID_TYPE, 0), SLANG_END_TABLE }; int main (int argc, char **argv) { char *file; if (argc != 2) { fprintf (stderr, "Usage: %s FILENAME\n", argv[0]); exit (-1); } file = argv[1]; /* Initialize the library. This is always needed. */ if (!init_SLang() /* basic interpreter functions */ || !init_SLmath() /* sin, cos, etc... */ #ifdef unix || !init_SLunix() /* unix system calls */ #endif || !init_SLfiles() /* file i/o */ /* Now add intrinsics for this application */ || !SLang_add_table(Demo_Intrinsics, "Demo")) { fprintf(stderr, "Unable to initialize S-Lang.\n"); exit(-1); } /* Now declare the array to S-Lang. Lets let it be known 2 ways: * 1. As a read/write array called: Vector * 2. As a read-only array called: Vector_Read_Only */ if ((NULL == SLang_add_array ("Vector", /* slang name */ (long *) C_Array, /* location of the array */ 1, /* number of dimensions */ 100, /* number of elements in X direction */ 0, 0, /* Number in Y and Z directions */ 'f', /* FLoating point array */ SLANG_IVARIABLE)) /* Read/Write array */ || (NULL == SLang_add_array ("Vector_Read_Only", /* slang name */ (long *) C_Array,/* location of the array */ 1, /* number of dimensions */ 100, /* number of elements in X direction */ 0, 0, /* Number in Y and Z directions */ 'f', /* FLoating point array */ SLANG_RVARIABLE))) /* Readonly array */ { fprintf(stderr, "Failed to add arrays\n"); exit (-1); } /* Code here to do something in C to the arrays, e.g., initialize them */ /* Turn on debugging */ SLang_Traceback = 1; /* Now load an initialization file and exit */ SLang_load_file (file); return (SLang_Error); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.