Annotation of 43BSD/contrib/courier/compiler/Courier.h, revision 1.1

1.1     ! root        1: /*     Courier.h       4.1     83/07/03        */
        !             2: 
        !             3: #include <stdio.h>
        !             4: 
        !             5: #define NIL            0
        !             6: #define MAXSTR         200
        !             7: #define streq(s, t)    (strcmp(s, t) == 0)
        !             8: #define New(t)         ((t *) calloc(1, sizeof(t)))
        !             9: 
        !            10: /*
        !            11:  * Cons cell for lisp operations.
        !            12:  */
        !            13: struct cons {
        !            14:        struct cons *c_cdr;
        !            15:        struct cons *c_car;
        !            16: };
        !            17: typedef struct cons *list;
        !            18: #define car(x) ((x)->c_car)
        !            19: #define cdr(x) ((x)->c_cdr)
        !            20: 
        !            21: /*
        !            22:  * Object classes.
        !            23:  */
        !            24: enum class {
        !            25:        O_TYPE = 1,
        !            26:        O_CONSTANT,
        !            27:        O_SYMBOL
        !            28: };
        !            29: 
        !            30: /*
        !            31:  * Type constructors.
        !            32:  */
        !            33: enum constr {
        !            34:        C_PREDEF = 1,
        !            35:        C_ENUMERATION,
        !            36:        C_ARRAY,
        !            37:        C_SEQUENCE,
        !            38:        C_RECORD,
        !            39:        C_CHOICE,
        !            40:        C_PROCEDURE,
        !            41:        C_ERROR
        !            42: };
        !            43: 
        !            44: /*
        !            45:  * Object structure, for types, numbers, and strings.
        !            46:  */
        !            47: struct object {
        !            48:        enum class o_class;
        !            49:        union {
        !            50:                struct type *u_type;
        !            51:                char *u_name;
        !            52:                int u_value;
        !            53:        } o_union;
        !            54: };
        !            55: #define o_type         o_union.u_type
        !            56: #define o_name         o_union.u_name
        !            57: #define o_value                o_union.u_value
        !            58: 
        !            59: #define class_of(x)    (((struct object *) x)->o_class)
        !            60: #define name_of(x)     (((struct object *) x)->o_name)
        !            61: #define value_of(x)    (((struct object *) x)->o_value)
        !            62: 
        !            63: /*
        !            64:  * Type structure.
        !            65:  *
        !            66:  * Formats of various lists are as follows.
        !            67:  * . indicates a cons operation.
        !            68:  * ... indicates a list of elements of the preceding form.
        !            69:  *
        !            70:  * enumeration:
        !            71:  *     ((name . value) ...)
        !            72:  * record, error, procedure arguments, procedure results:
        !            73:  *     (((name ...) . type) ...)
        !            74:  * choice:
        !            75:  *     ((((name . value) ...) . type) ...)
        !            76:  */
        !            77: struct type {
        !            78:        enum constr type_constr;        /* constructor */
        !            79:        char *type_pfname;              /* name of pack function */
        !            80:        char *type_ufname;              /* name of unpack function */
        !            81:        union {
        !            82:                list u_list;            /* enumeration, record, error */
        !            83:                struct {
        !            84:                        struct object *u_size, *u_basetype;
        !            85:                } u_array;              /* array, sequence */
        !            86:                struct {
        !            87:                        struct object *u_designator;
        !            88:                        list u_candidates;
        !            89:                } u_choice;             /* choice */
        !            90:                struct {
        !            91:                        list u_args, u_results, u_errors;
        !            92:                } u_procedure;          /* procedure */
        !            93:        } type_u;
        !            94: };
        !            95: /*
        !            96:  * These definitions allow access from an object pointer
        !            97:  * known to be a type.
        !            98:  */
        !            99: #define t_constr       o_type->type_constr
        !           100: #define t_pfname       o_type->type_pfname
        !           101: #define t_ufname       o_type->type_ufname
        !           102: #define t_list         o_type->type_u.u_list
        !           103: #define t_size         o_type->type_u.u_array.u_size
        !           104: #define t_basetype     o_type->type_u.u_array.u_basetype
        !           105: #define t_designator   o_type->type_u.u_choice.u_designator
        !           106: #define t_candidates   o_type->type_u.u_choice.u_candidates
        !           107: #define t_args         o_type->type_u.u_procedure.u_args
        !           108: #define t_results      o_type->type_u.u_procedure.u_results
        !           109: #define t_errors       o_type->type_u.u_procedure.u_errors
        !           110: 
        !           111: /*
        !           112:  * This macro is to cope with the fact that C passes arrays
        !           113:  * by reference but all other constructed types by value.
        !           114:  */
        !           115: #define refstr(t)      (basetype(t)->t_constr == C_ARRAY ? "" : "&")
        !           116: 
        !           117: /*
        !           118:  * Predefined types.
        !           119:  */
        !           120: extern struct object
        !           121:        *Boolean_type,
        !           122:        *Cardinal_type, *LongCardinal_type,
        !           123:        *Integer_type, *LongInteger_type,
        !           124:        *String_type,
        !           125:        *Unspecified_type, *LongUnspecified_type;
        !           126: 
        !           127: extern struct object
        !           128:        *Undefined_constant;
        !           129: 
        !           130: extern struct object *make(), *lookup(), *basetype();
        !           131: extern struct object *construct_type1(), *construct_type2();
        !           132: extern struct object *construct_choice(), *construct_procedure();
        !           133: extern list Values, Types;
        !           134: extern list cons(), nconc();
        !           135: extern FILE *hf, *cf1, *cf2, *uf, *sf;
        !           136: extern int explicit, print_level;
        !           137: extern char *program_name;
        !           138: extern char *copy(), *gensym();
        !           139: extern char *obj_rep(), *pack_function(), *unpack_function();

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.