This is pcn_parse.h in view mode; [Download] [Up]
#define D_INTEGER 1
#define D_DOUBLE 2
#define D_STRING 3
#define D_TUPLE 4
#define D_LIST 5
#define D_NIL 6
#define D_TAG 7
#define D_QUOTED_BLOCK 8
#ifndef PCN
struct _datum;
typedef struct _tuple
{
int len;
struct _datum **args;
} tuple;
#define T_NARGS(t) ((t)->len)
#define T_ARGS(t) ((t)->args)
#define T_ARG(t,i) ((t)->args[i])
typedef struct _list
{
struct _datum *head;
struct _datum **tail;
} list;
#define L_HEAD(l) ((l)->head)
#define L_TAIL(l) ((l)->tail)
typedef struct _datum
{
union
{
int ival;
double dval;
char *sval;
tuple *tval;
list *lval;
} data;
int type;
} datum, *datum_ptr;
#define D_TYPE(d) ((d)->type)
#define D_IVAL(d) ((d)->data.ival)
#define D_DVAL(d) ((d)->data.dval)
#define D_SVAL(d) ((d)->data.sval)
#define D_TVAL(d) ((d)->data.tval)
#define D_LVAL(d) ((d)->data.lval)
#define D_NARGS(d) ((d)->data.tval->len)
#define D_ARGS(d) ((d)->data.tval->args)
#define D_ARG(d,i) ((d)->data.tval->args[i])
#define D_CAR(d) D_ARG(d, 0)
#define D_CDR(d) D_ARG(d, 1)
#define D_LHEAD(d) (L_HEAD(D_LVAL(d)))
#define D_LTAIL(d) (L_TAIL(D_LVAL(d)))
static char *_p_co_type_names[] = {
"",
"integer",
"double",
"string",
"tuple",
"list",
"nil",
"tag",
};
#define D_IS_INTEGER(d) (D_TYPE(d) == D_INTEGER)
#define D_IS_DOUBLE(d) (D_TYPE(d) == D_DOULBE)
#define D_IS_STRING(d) (D_TYPE(d) == D_STRING)
#define D_IS_TUPLE(d) (D_TYPE(d) == D_TUPLE)
#define D_IS_LIST(d) (D_TYPE(d) == D_LIST)
#define D_IS_NIL(d) (D_TYPE(d) == D_NIL)
#define D_IS_TAG(d) (D_TYPE(d) == D_TAG)
#define D_IS_QUOTED_BLOCK(d) (D_TYPE(d) == D_QUOTED_BLOCK)
/*
#define UNLIST(t) (t == NULL ? NULL : (D_TYPE(t) == D_LIST ? D_LHEAD(t) : (t)))
*/
#define REAL_UNLIST(t) (t == NULL ? NULL : (D_TYPE(t) == D_LIST ? D_LHEAD(t) : (t)))
#define UNLIST(t) (t)
#define D_NEW_TUPLE_1(t, a1) t = _p_co_new_tuple(1); _p_co_set_arg(t, 0, a1);
#define D_NEW_TUPLE_2(t, a1, a2) t = _p_co_new_tuple(2); \
_p_co_set_arg(t, 0, a1); \
_p_co_set_arg(t, 1, a2);
#define D_NEW_TUPLE_3(t, a1, a2, a3) t = _p_co_new_tuple(3); \
_p_co_set_arg(t, 0, a1); \
_p_co_set_arg(t, 1, a2); \
_p_co_set_arg(t, 2, a3);
#define D_NEW_TUPLE_4(t, a1, a2, a3, a4) t = _p_co_new_tuple(4); \
_p_co_set_arg(t, 0, a1); \
_p_co_set_arg(t, 1, a2); \
_p_co_set_arg(t, 2, a3); \
_p_co_set_arg(t, 3, a4);
#define D_NEW_TUPLE_5(t, a1, a2, a3, a4, a5) t = _p_co_new_tuple(5); \
_p_co_set_arg(t, 0, a1); \
_p_co_set_arg(t, 1, a2); \
_p_co_set_arg(t, 2, a3); \
_p_co_set_arg(t, 3, a4);\
_p_co_set_arg(t, 4, a5);
extern datum *_p_co_new_tag();
extern datum *_p_co_new_integer();
extern datum *_p_co_new_double();
extern datum *_p_co_new_string();
extern datum *_p_co_new_string_len();
extern datum *_p_co_new_tuple();
extern datum *_p_co_new_quoted_block();
extern datum *_p_co_new_list_0();
extern datum *_p_co_new_list();
extern datum *_p_co_append_list();
extern datum *_p_co_nil();
extern datum *_p_co_cons();
extern datum *_p_co_set_arg();
extern datum *_p_co_get_arg();
extern void _p_co_free();
extern void _p_co_print();
extern datum *_p_co_new_tuple_1();
extern datum *_p_co_new_tuple_2();
extern datum *_p_co_new_tuple_3();
extern datum *_p_co_new_tuple_4();
extern datum *_p_co_new_tuple_5();
#endif /* PCN */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.