Annotation of 43BSD/contrib/B/src/bsmall/b.h, revision 1.1.1.1

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
                      2: /* $Header: b.h,v 1.1 84/06/28 00:48:39 timo Exp $ */
                      3: 
                      4: /* b.h: general */
                      5: 
                      6: #include <stdio.h>
                      7: #include <math.h>
                      8: #include <setjmp.h>
                      9: 
                     10: #define Forward
                     11: #define Visible
                     12: #define Hidden static
                     13: #define Procedure
                     14: 
                     15: #define EQ ==
                     16: #define NE !=
                     17: 
                     18: /* The following are not intended as pseudo-encapsulation, */
                     19: /* but to emphasize intention. */
                     20: typedef char literal;
                     21: typedef char bool;
                     22: typedef char *txptr;
                     23: typedef char *string; /* Strings are always terminated with a char '\0'. */
                     24: 
                     25: #define Yes ((bool) 1)
                     26: #define No  ((bool) 0)
                     27: typedef short intlet;
                     28: extern bool bugs;
                     29: 
                     30: /************************************************************************/
                     31: /*                                                                      */
                     32: /* Values                                                               */
                     33: /*                                                                      */
                     34: /* There are different modules for values, however all agree that       */
                     35: /* the first field of a value is its type, and the second its reference */
                     36: /* count. All other fields depend on the module.                        */
                     37: /*                                                                      */
                     38: /************************************************************************/
                     39: 
                     40: typedef struct{literal type; intlet refcnt, len; string *cts;} *value;
                     41: 
                     42: #define Dummy 0
                     43: #define Dumval ((value) Dummy)
                     44: #define Vnil ((value) 0)
                     45: #define Pnil ((value *) 0)
                     46: 
                     47: /* Types: */
                     48: #define Num '0'
                     49: #define Tex '"'
                     50: #define Com ','
                     51: #define Lis 'L'
                     52: #define Tab 'M'
                     53: #define ELT '}'
                     54: /* locations: */
                     55: #define Sim 'S'
                     56: #define Tri '@'
                     57: #define Tse '['
                     58: #define Glo 'g'
                     59: #define Per 'p'
                     60: /* units: */
                     61: #define How 'h'
                     62: #define For 'f'
                     63: #define Ref 'r'
                     64: #define Fun '+'
                     65: #define Prd 'i'
                     66: 
                     67: #define Type(v) ((v)->type)
                     68: #define Length(v) ((v)->len)
                     69: #define Refcnt(v) ((v)->refcnt)
                     70: #define Unique(v) ((v)->refcnt==1)
                     71: 
                     72: #define Overall for (k= 0; k < len; k++)
                     73: 
                     74: #define k_Over_len for (k= 0; k < len; k++)
                     75: #define Last(k)        (k == len-1)
                     76: 
                     77: #define Ats(v) ((value *)&((v)->cts))
                     78: #define Str(v) ((string)&((v)->cts)) /* only for use in part1 */
                     79: 
                     80: /* Environments and context */
                     81: 
                     82: typedef value envtab;
                     83: typedef struct ec{envtab tab; struct ec *inv_env;} envchain;
                     84: typedef envchain *env;
                     85: 
                     86: typedef struct{env curnv; value *bndtgs;
                     87:        literal cntxt, resexp; value uname; literal utype;
                     88:        intlet cur_ilev, lino; txptr tx, ceol;} context;
                     89: 
                     90: #define Enil ((env) 0)
                     91: 
                     92: /* contexts: */
                     93: #define In_command 'c'
                     94: #define In_read '?'
                     95: #define In_unit 'u'
                     96: #define In_value 'v'
                     97: #define In_formal 'f'
                     98: #define In_prmnv 'p'
                     99: 
                    100: /* results */
                    101: #define Ret 'V'
                    102: #define Rep '+'
                    103: #define Voi ' '
                    104: 
                    105: /* adicity */
                    106: #define Zer '0'
                    107: #define Mon '1'
                    108: #define Dya '2'
                    109: 
                    110: /* funprd.def */
                    111: #define Pre 'P'
                    112: #define Use 'U'
                    113: 
                    114: /************************************************************************/
                    115: /*                                                                      */
                    116: /* A function or predicate is modelled as a compound consisting of      */
                    117: /* (i)   two short integers for (L, H) priority                         */
                    118: /*           (relevant only for functions);                             */
                    119: /* (ii)  Zer/Mon/Dya for zero-, mon- or dyadicity;                      */
                    120: /* (iii) Pre/Use for pre- or user-definedness;                          */
                    121: /* (iv)  if Pre, a literal to switch on;                                */
                    122: /*       if Use, a pointer to the yield/test-unit text.                 */
                    123: /*                                                                      */
                    124: /************************************************************************/
                    125: 
                    126: typedef struct{envtab reftab; txptr fux, lux; bool filed;} how;
                    127: typedef struct{envtab reftab; txptr fux, lux; bool filed;
                    128:        intlet L, H; literal adic, def;} funprd;
                    129: /* The first four fields should have the same structure as those of 'hows' */
                    130: 
                    131: typedef struct{context con; txptr ftx;} formal;
                    132: typedef struct{txptr rp; intlet rlino;} ref;
                    133: 
                    134: /************************************************************************/
                    135: /*                                                                      */
                    136: /* Locations                                                            */
                    137: /*                                                                      */
                    138: /* A simple location is modelled as a pair basic-identifier and         */
                    139: /*     environment, where a basic-identifier is modelled as a text      */
                    140: /*     and an environment as a pointer to a pair (T, E), where T is a   */
                    141: /*     table with basic-identifiers as keys and content values as       */
                    142: /*     associates, and E is the invoking environment or nil.            */
                    143: /*                                                                      */
                    144: /* A trimmed-text location is modelled as a triple (R, B, C).           */
                    145: /*                                                                      */
                    146: /* A compound location is modelled as a compound whose fields are       */
                    147: /*     locations, rather than values.                                   */
                    148: /*                                                                      */
                    149: /* A table-selection location is modelled as a pair (R, K).             */
                    150: /*                                                                      */
                    151: /************************************************************************/
                    152: 
                    153: typedef value loc;
                    154: 
                    155: typedef value basidf;
                    156: typedef struct{basidf i; env e;} simploc;
                    157: typedef struct{loc R; intlet B, C;} trimloc;
                    158: typedef struct{loc R; value K;} tbseloc;
                    159: 
                    160: /* Functions and Predicates */
                    161: typedef value fun;
                    162: typedef value prd;
                    163: 
                    164: char *malloc(), *realloc();
                    165: char *getenv();

unix.superglobalmegacorp.com

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