Introductory FAQ  -- Far from complete -- I will update it daily.

Frequently asked questions.

Terminology: 

  S-Lang function : a user defined function that is written in
                    S-Lang.
		    
  C function:       A function that is written in C.   It may or may not be
                    callable from S-lang
		    
  Intrinsic Function: A C function that is directly callable from S-Lang,
                    e.g., strcat.
  

0. Where do I find documentation?

   The documentation is incomplete.  See slang/doc/*.* and
   slang/help/slang.hlp.  In addition, nearly all the C functions prototyped
   in slang.h are also documented in slang.h. Finally, all the intrinsics
   defined by the S-Lang library are available online from within the JED
   editor.  (Also look in slang/src/demo).

1. How can I call a specific S-Lang function from my C program?

   Use the C function `SLang_execute_function'.  This returns 0 if the
   function is not defined and 1 if it is.
   
   If you are going to call the S-Lang function many times, it is better to
   use `SLexecute_function'.  This function takes a non-NULL parameter of
   type `SLang_Name_Type' obtained from a previous call from the function
   `SLang_get_function'.
   
   Example:  Suppose that you want to call a S-Lang function `f' which
   takes two floating point numbers and returns a float.  Assume the
   parameters to `f' are `2.7' and 3.5'.
   
     First solution:
     
       double x;
       int ix, unused;
       
       SLang_push_float (2.7); SLang_push_float (3.5);
       if (SLang_execute_function ("f") == 0)
         {
	    /* f undefined */
	    return 0.0;
	 }
       SLang_pop_float (&x, &ix, &unused);
       return x;
     
     Second Solution:
     
        double x;
        int ix, unused;
	SLang_Name_Type *fp;
	
	if (NULL == (fp = SLang_get_function ("f")))
	  {
	     /* Function f undefined */
	     return 0.0;
	  }
       
       SLang_push_float (2.7); SLang_push_float (3.5);
       SLexecute_function (fp);
       SLang_pop_float (&x, &ix, &unused);
       return x;
       
3. How can I add structures to S-Lang.

   Currently, the language does not really support structures.  However, it
   is possible for variables to have values which are structures.   See
   demo/struct.c and demo/struct.sl for an explicit demonstration of how to
   add application defined structures to S-Lang.
   
   
       
       
       
