magic/lisp/lispInt.h

151 lines
3.4 KiB
C

/*************************************************************************
*
* lispInt.h --
*
* Internals of the lisp module.
*
* (c) 1996 California Institute of Technology
* Department of Computer Science
* Pasadena, CA 91125.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for any purpose and without fee is hereby
* granted, provided that the above copyright notice appear in all
* copies. The California Institute of Technology makes no representations
* about the suitability of this software for any purpose. It is
* provided "as is" without express or implied warranty. Export of this
* software outside of the United States of America may require an
* export license.
*
* $Header$
*
*************************************************************************/
#ifndef __LISPINT_H__
#define __LISPINT_H__
#include <stdio.h>
#include "utils/magic.h"
#include "utils/geometry.h"
#include "textio/txcommands.h"
/*
Lisp Sexp's are allocated in blocks of the following size
*/
#define LISP_SEXP_BLKSZ 1000
#define LISP_MAX_LEN (TX_MAX_CMDLEN+3)
enum Sexp_types {
S_LIST,
S_SYM,
S_MAGIC_BUILTIN,
S_LAMBDA_BUILTIN,
S_LAMBDA,
S_INT,
S_FLOAT,
S_STRING,
S_BOOL
};
#define ATOM(t) ((t) == S_INT || (t) == S_FLOAT || \
(t) == S_STRING || (t) == S_BOOL)
#define LTYPE(l) ((l)->t)
#define LLIST(m) ((m)->u.l)
#define LUSERDEF(m) ((m)->u.l)
#define LBUILTIN(m) ((m)->u.i)
#define LSYM(l) ((l)->u.s)
#define LSTR(l) ((l)->u.s)
#define LBOOL(l) ((l)->u.i)
#define LFLOAT(l) ((l)->u.d)
#define LINTEGER(l) ((l)->u.i)
#define TYPECAR(s) LTYPE((s)->l[0])
#define TYPECDR(s) LTYPE((s)->l[1])
#define LCAR(s) LLIST(CAR(s))
#define SYMCAR(s) LSYM((s)->l[0])
#define STRCAR(s) LSTR((s)->l[0])
#define INTCAR(s) LINTEGER((s)->l[0])
#define FLOATCAR(s) LFLOAT((s)->l[0])
#define BOOLCAR(s) LBOOL((s)->l[0])
#define LCDR(s) LLIST((s)->l[1])
#define SYMCDR(s) LSYM((s)->l[1])
#define STRCDR(s) LSTR((s)->l[1])
#define INTCDR(s) LINTEGER((s)->l[1])
#define FLOATCDR(s) LFLOAT((s)->l[1])
#define BOOLCDR(s) LBOOL((s)->l[1])
#define CAR(s) ((s)->l[0])
#define CDR(s) ((s)->l[1])
#define NBITS (sizeof(unsigned int)*8)
struct Sexp;
typedef struct LispObj {
struct LispObj *n;
unsigned char t; /* type */
union {
struct Sexp *l;
int i;
double d;
char *s;
} u;
} LispObj;
typedef struct Sexp {
struct Sexp *n;
LispObj *l[2];
} Sexp;
/*
* Internal commands
*/
extern void LispDispatch();
extern LispObj *LispNewObj ();
extern LispObj *LispCopyObj ();
extern Sexp *LispNewSexp ();
extern Sexp *LispCopySexp ();
extern LispObj *LispEval ();
extern LispObj *LispApply ();
extern LispObj *LispMagicSend ();
extern LispObj *LispBuiltinApply ();
extern void LispPrint ();
extern void LispPrintType ();
extern LispObj *LispParseString ();
extern LispObj *LispAtomParse ();
extern char *LispNewString ();
extern int LispStringId ();
extern void LispFnInit ();
extern void LispGC ();
extern int LispGCHasWork;
extern int LispCollectAllocQ;
extern void LispGCAddSexp ();
extern void LispGCRemoveSexp ();
extern LispObj *LispFrameLookup ();
extern char *LispFrameRevLookup ();
extern void LispFrameInit ();
extern int LispModifyFrame ();
extern void LispAddBinding ();
extern Sexp *LispFramePush ();
extern void LispStackPush ();
extern void LispStackPop ();
extern void LispStackDisplay ();
extern void LispStackClear ();
extern int lispInFile; /* flag used for :setpoint */
#endif /* __LISPINT_H__ */