<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<TITLE> {The S-lang C Library Reference}: SLadd_intrinsic_variable</TITLE>
<LINK HREF="cref-103.html" REL=next>
<LINK HREF="cref-101.html" REL=previous>
<LINK HREF="cref.html#toc102" REL=contents>
</HEAD>
<BODY>
<A HREF="cref-103.html">Next</A>
<A HREF="cref-101.html">Previous</A>
<A HREF="cref.html#toc102">Contents</A>
<HR>
<H2><A NAME="SLadd_intrinsic_variable"></A> <A NAME="s102">102. <B>SLadd_intrinsic_variable</B></A></H2>

<P>
<DL>
<DT><B> Synopsis </B><DD><P>Add an intrinsic variable to the interpreter
<DT><B> Usage </B><DD><P><CODE>int SLadd_intrinsic_variable (name, addr, type, rdonly)</CODE>
<BLOCKQUOTE><CODE>
<PRE>
    char *name
    VOID_STAR type
    unsigned char type
    int rdonly
</PRE>
</CODE></BLOCKQUOTE>
<DT><B> Description </B><DD><P>The <CODE>SLadd_intrinsic_variable</CODE> function adds an intrinsic
variable called <CODE>name</CODE> to the interpeter.  The second parameter
<CODE>addr</CODE> specifies the address of the variable (cast to
<CODE>VOID_STAR</CODE>).  The third parameter, <CODE>type</CODE>, specifies the
data type of the variable.  If the fourth parameter, <CODE>rdonly</CODE>,
is non-zero, the variable will interpreted by the interpreter as
read-only.
<P>If successful, <CODE>SLadd_intrinsic_variable</CODE> returns zero,
otherwise it returns <CODE>-1</CODE>.
<DT><B> Example </B><DD><P>Suppose that <CODE>My_Global_Int</CODE> is a global variable (at least not
a local one):
<BLOCKQUOTE><CODE>
<PRE>
    int My_Global_Int;
</PRE>
</CODE></BLOCKQUOTE>

It can be added to the interpreter via the function call
<BLOCKQUOTE><CODE>
<PRE>
    if (-1 == SLadd_intrinsic_variable ("MyGlobalInt",
                                        (VOID_STAR)&amp;My_Global_Int,
                                        SLANG_INT_TYPE, 0))
      exit (1);
</PRE>
</CODE></BLOCKQUOTE>
<DT><B> Notes </B><DD><P>The current implementation requires all pointer type intrinsic
variables to be read-only.  For example,
<BLOCKQUOTE><CODE>
<PRE>
    char *My_Global_String;
</PRE>
</CODE></BLOCKQUOTE>

is of type <CODE>SLANG_STRING_TYPE</CODE>, and must be declared as
read-only.  Finally, not that
<BLOCKQUOTE><CODE>
<PRE>
   char My_Global_Char_Buf[256];
</PRE>
</CODE></BLOCKQUOTE>

is <EM>not</EM> a <CODE>SLANG_STRING_TYPE</CODE> object.  This difference is
very important because internally the interpreter dereferences the
address passed to it to get to the value of the variable.
<DT><B> See Also </B><DD><P><CODE>SLadd_intrinsic_function, SLadd_intrinsic_array</CODE>
</DL>
<P>}
<P>
<P>
<HR>
<A HREF="cref-103.html">Next</A>
<A HREF="cref-101.html">Previous</A>
<A HREF="cref.html#toc102">Contents</A>
</BODY>
</HTML>
