/* read.h Copyright (C) Codemist Ltd, 1989-95 */ /* * Header defining the structure of the package system for use by * intern and its friends. */ /* Signature: 1a6e3642 07-Mar-2000 */ #ifndef header_read_h #define header_read_h 1 typedef struct Package { Header header; Lisp_Object packageid; /* 'package as type of this struct */ Lisp_Object internals; /* either vector or list of vectors */ Lisp_Object vinternals; /* number of 16K vectors in this package */ Lisp_Object ninternals; /* number of symbols in this package */ Lisp_Object pkgflags; /* place to put randomish flags etc */ #ifdef COMMON /* * Standard Lisp can have a much simpler setup than Common Lisp here */ Lisp_Object externals; /* vector or list of vectors */ Lisp_Object vexternals; /* number of vectors in above */ Lisp_Object nexternals; /* number of symbols involved */ Lisp_Object name; /* name of this package */ Lisp_Object nicknames; /* list of nicknames */ Lisp_Object use_list; /* list of things that this package uses */ Lisp_Object used_by_list; /* list of packages that use this one */ Lisp_Object shadowing_symbols; /* magic to cope with name clashes */ #endif } Package; /* * The following macros are coded the way they are so as to encourage the * C compiler into using the address modes I want... * Rationalize at your peril! */ #define packhdr_(p) (*(Header *) ((char *)(p) + (0L - TAG_VECTOR))) #define packid_(p) (*(Lisp_Object *)((char *)(p) + (4L - TAG_VECTOR))) #define packint_(p) (*(Lisp_Object *)((char *)(p) + (8L - TAG_VECTOR))) #define packvint_(p) (*(Lisp_Object *)((char *)(p) + (12L - TAG_VECTOR))) #define packnint_(p) (*(Lisp_Object *)((char *)(p) + (16L - TAG_VECTOR))) #define packflags_(p) (*(Lisp_Object *)((char *)(p) + (20L - TAG_VECTOR))) #ifdef COMMON #define packext_(p) (*(Lisp_Object *)((char *)(p) + (24L - TAG_VECTOR))) #define packvext_(p) (*(Lisp_Object *)((char *)(p) + (28L - TAG_VECTOR))) #define packnext_(p) (*(Lisp_Object *)((char *)(p) + (32L - TAG_VECTOR))) #define packname_(p) (*(Lisp_Object *)((char *)(p) + (36L - TAG_VECTOR))) #define packnick_(p) (*(Lisp_Object *)((char *)(p) + (40L - TAG_VECTOR))) #define packuses_(p) (*(Lisp_Object *)((char *)(p) + (44L - TAG_VECTOR))) #define packused_(p) (*(Lisp_Object *)((char *)(p) + (48L - TAG_VECTOR))) #define packshade_(p) (*(Lisp_Object *)((char *)(p) + (52L - TAG_VECTOR))) #endif #define CP qvalue(current_package) #ifdef COMMON # define ESCAPE_CHAR '\\' #else # define ESCAPE_CHAR '!' #endif #define NO_PREFIX 'x' extern CSLbool is_constituent(int c); extern Lisp_Object intern(int len, CSLbool escaped); extern Lisp_Object iintern(Lisp_Object str, int32 h, Lisp_Object p, int str_is_ok /* NOT a bool */); extern Lisp_Object find_package(char *name, int len); extern Lisp_Object read_from_vector(char *v); extern char prompt_string[32]; #endif /* header_read_h */ /* end of read.h */