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

1.1       root        1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
                      2: /* $Header: b1obj.h,v 1.1 84/06/28 00:48:43 timo Exp $ */
                      3: 
                      4: /* B values, locations, environments: the B abstract machine */
                      5: 
                      6: /****************************** general ******************************/
                      7: 
                      8: typedef intlet relation; /* < 0, == 0, > 0 */
                      9: relation compare();
                     10: 
                     11: #define Is_text(v) (Type(v) == Tex)
                     12: #define Is_number(v) (Type(v) == Num)
                     13: #define Is_compound(v) (Type(v) == Com)
                     14: #define Is_list(v) (Type(v) == Lis || Type(v) == ELT)
                     15: #define Is_table(v) (Type(v) == Tab || Type(v) == ELT)
                     16: #define Is_tlt(v) (Type(v)==Tex || Type(v)==Lis || Type(v)==Tab || Type(v)==ELT)
                     17: #define Is_ELT(v) (Type(v) == ELT)
                     18: 
                     19: #define Is_simploc(v) (Type(v) == Sim)
                     20: #define Is_tbseloc(v) (Type(v) == Tse)
                     21: #define Is_trimloc(v) (Type(v) == Tri)
                     22: #define Is_refinement(v) (Type(v) == Ref)
                     23: #define Is_formal(v) (Type(v) == For)
                     24: #define Is_shared(v) (Type(v) == Glo)
                     25: #define Is_filed(v) (Type(v) == Per)
                     26: #define Is_function(v) (Type(v) == Fun)
                     27: #define Is_predicate(v) (Type(v) == Prd)
                     28: #define Is_howto(v) (Type(v) == How)
                     29: 
                     30: value grab_num();
                     31: value regrab_num();
                     32: value grab_rat();
                     33: value grab_approx();
                     34: value grab_tex();
                     35: value grab_com();
                     36: value grab_elt();
                     37: value grab_lis();
                     38: value grab_tab();
                     39: value grab_sim();
                     40: value grab_tri();
                     41: value grab_tse();
                     42: value grab_how();
                     43: value grab_for();
                     44: value grab_glo();
                     45: value grab_per();
                     46: value grab_fun();
                     47: value grab_prd();
                     48: value grab_ref();
                     49: 
                     50: value copy();
                     51: /* Procedure release(); */
                     52: /* Procedure uniql(); */
                     53: /* Procedure uniq_assoc(); */
                     54: double hash();
                     55: 
                     56: /****************************** Texts ******************************/
                     57: string strcpy(), strncpy(), strcat(), sprintf(), index();
                     58: 
                     59: bool character();
                     60: 
                     61: value mk_text();
                     62: char charval();
                     63: string strval();
                     64: 
                     65: value concat();
                     66: value behead();
                     67: value curtail();
                     68: value trim();
                     69: value repeat();
                     70: 
                     71: value adjleft();
                     72: value centre();
                     73: value adjright();
                     74: 
                     75: value convert();
                     76: 
                     77: /****************************** Numbers ******************************/
                     78: 
                     79: /* Predicates */
                     80: bool integral();           /* is the value an integer? */
                     81: bool large();      /* can a number be represented by a C int? */
                     82: 
                     83: /* Constants */
                     84: extern value zero, one;
                     85: 
                     86: /* Conversion of abstract values to concrete objects */
                     87: double numval();     /* numeric value of any number */
                     88: int intval();        /* numeric value of integral number */
                     89: intlet propintlet(); /* converts int to intlet */
                     90: string convnum();    /* character string approximation of any number */
                     91: int numcomp();       /* Comparison of two numbers: yields -1, 0 or 1 */
                     92: double numhash();    /* Hashes any abstract number to a 'double' */
                     93: 
                     94: /* Conversion of concrete objects to abstract numbers */
                     95: value numconst();    /* string argument */
                     96: value mk_integer();  /* int argument */
                     97: 
                     98: /* Functions on numbers */
                     99: value sum();
                    100: value diff();
                    101: value negated();
                    102: value prod();
                    103: value quot();
                    104: value modulo();
                    105: value floorf();
                    106: value ceilf();
                    107: value round1();
                    108: value round2();
                    109: value mod();
                    110: value power();
                    111: value absval();
                    112: value signum();
                    113: value numerator();
                    114: value denominator();
                    115: value approximate();
                    116: value random();
                    117: value root1();
                    118: value sin1();
                    119: value cos1();
                    120: value tan1();
                    121: value atn1();
                    122: value exp1();
                    123: value log1();
                    124: value root2();
                    125: value atn2();
                    126: value log2();
                    127: value pi();
                    128: value e();
                    129: 
                    130: /****************************** Compounds ******************************/
                    131: #define Nfields(c) Length(c)
                    132: #define Field(c, i) ((Ats(c)+(i)))
                    133: #define k_Overfields for (k= 0; k < len; k++)
                    134: #define Lastfield(k) ((k) == len-1)
                    135: 
                    136: #define mk_compound(len) grab_com(len)
                    137: 
                    138: value* field();
                    139: /* Procedure put_in_field(); */
                    140: 
                    141: /****************************** Lists ******************************/
                    142: value mk_numrange();
                    143: value mk_charrange();
                    144: 
                    145: /* Procedurre insert(); */
                    146: /* Procedure remove(); */
                    147: 
                    148: /****************************** Tables ******************************/
                    149: 
                    150: value keys();
                    151: bool in_keys();
                    152: value associate();
                    153: 
                    154: /* Procedure replace(); */
                    155: /* Procedure delete(); */
                    156: 
                    157: value* adrassoc();
                    158: value* key();
                    159: value* assoc();
                    160: 
                    161: /****************************** Texts, Lists, and Tables *******************/
                    162: value mk_elt();
                    163: 
                    164: bool in();
                    165: 
                    166: value size();
                    167: value size2();
                    168: value min1();
                    169: value min2();
                    170: value max1();
                    171: value max2();
                    172: value th_of();
                    173: value thof();
                    174: 
                    175: int length(); /* The same as size, temporary until part2 is written in B */
                    176: bool empty(); /* whether #v=0: also temporary */
                    177: 
                    178: /****************************** Other kinds of value ************************/
                    179: 
                    180: #define Simploc(l) ((simploc *)Ats(l))
                    181: #define Tbseloc(l) ((tbseloc *)Ats(l))
                    182: #define Trimloc(l) ((trimloc *)Ats(l))
                    183: #define Funprd(f)  ((funprd *)Ats(f))
                    184: #define How_to(u)  ((how *)Ats(u))
                    185: #define Formal(p)  ((formal *)Ats(f))
                    186: #define Refinement(r) ((ref *)Ats(r))
                    187: 
                    188: loc mk_simploc();
                    189: loc mk_trimloc();
                    190: loc mk_tbseloc();
                    191: 
                    192: value mk_per();
                    193: fun mk_fun();
                    194: prd mk_prd();
                    195: value mk_how();
                    196: value mk_ref();
                    197: 

unix.superglobalmegacorp.com

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