Annotation of researchv10no/cmd/lcc/tst/cq.c, revision 1.1.1.1

1.1       root        1:    struct defs {
                      2:      int cbits;          /* No. of bits per char           */
                      3:      int ibits;          /*                 int            */
                      4:      int sbits;          /*                 short          */
                      5:      int lbits;          /*                 long           */
                      6:      int ubits;          /*                 unsigned       */
                      7:      int fbits;          /*                 float          */
                      8:      int dbits;          /*                 double         */
                      9:      float fprec;        /* Smallest number that can be    */
                     10:      float dprec;        /* significantly added to 1.      */
                     11:      int flgs;           /* Print return codes, by section */
                     12:      int flgm;           /* Announce machine dependencies  */
                     13:      int flgd;           /* give explicit diagnostics      */
                     14:      int flgl;           /* Report local return codes.     */
                     15:      int rrc;            /* recent return code             */
                     16:      int crc;            /* Cumulative return code         */
                     17:      char rfs[8];        /* Return from section            */
                     18:    };
                     19: main(n,args)               /* C REFERENCE MANUAL         */
                     20: int n;
                     21: char **args;
                     22: {
                     23: 
                     24: /*   This program performs a series of tests on a C compiler,
                     25: based on information in the
                     26: 
                     27:              C REFERENCE MANUAL
                     28: 
                     29: which appears as Appendix A to the book "The C Programming
                     30: Language" by Brian W. Kernighan and Dennis M. Ritchie
                     31: (Prentice-Hall, 1978, $10.95). This Appendix is hereafter
                     32: referred to as "the Manual".
                     33: 
                     34:      The rules followed in writing this program are:
                     35: 
                     36:      1. The entire program is written in legal C, according
                     37:      to the Manual. It should compile with no error messages,
                     38:      although some warning messages may be produced by some
                     39:      compilers. Failure to compile should be interpreted as
                     40:      a compiler error.
                     41: 
                     42:      2. The program is clean, in that it does not make use
                     43:      of any features of the operating system on which it runs,
                     44:      with the sole exceptions of the printf() function, and an
                     45:      internal "options" routine, which is easily excised.
                     46: 
                     47:      3. No global variables are used, except for the spec-
                     48:      ific purpose of testing the global variable facility.
                     49: 
                     50:      The program is divided into modules having names of the
                     51: form snnn... These modules correspond to those sections of the
                     52: Manual, as identified by boldface type headings, in which
                     53: there is something to test. For example, s241() corresponds
                     54: to section 2.4.1 of the Manual (Integer constants) and tests
                     55: the facilities described therein. The module numbering
                     56: scheme is ambiguous, especially when it names modules
                     57: referring to more than one section; module s7813, for ex-
                     58: ample, deals with sections 7.8 through 7.13. Nonetheless,
                     59: it is surprisingly easy to find a section in the Manual
                     60: corresponding to a section of code, and vice versa.
                     61: 
                     62:      Note also that there seem to be "holes" in the program,
                     63: at least from the point of view that there exist sections in the
                     64: Manual for which there is no corresponding code. Such holes
                     65: arise from three causes: (a) there is nothing in that partic-
                     66: ular section to test, (b) everything in that section is tested
                     67: elsewhere, and (c) it was deemed advisable not to check cer-
                     68: tain features like preprocessor or listing control features.
                     69: 
                     70:      Modules are called by a main program main(). The mod-
                     71: ules that are called, and the sequence in which they are 
                     72: called, are determined by two lists in main(), in which the
                     73: module names appear. The first list (an extern statement)
                     74: declares the module names to be external. The second (a stat-
                     75: ic int statement) names the modules and defines the sequence
                     76: in which they are called. There is no need for these lists
                     77: to be in the same order, but it is probably a good idea to keep
                     78: them that way in the interest of clarity. Since there are no
                     79: cross-linkages between modules, new modules may be added,
                     80: or old ones deleted, simply by editing the lists, with one
                     81: exception: section s26, which pokes around at the hardware
                     82: trying to figure out the characteristics of the machine that
                     83: it is running on, saves information that is subsequently
                     84: used by sections s626, s72, and s757. If this program is
                     85: to be broken up into smallish pieces, say for running on
                     86: a microcomputer, take care to see that s26 is called before
                     87: calling any of the latter three sections.  The size
                     88: of the lists, i.e., the number of modules to be called, is
                     89: not explicitly specified as a program parameter, but is
                     90: determined dynamically using the sizeof operator.
                     91: 
                     92:      Communication between the main program and the modules
                     93: takes place in two ways. In all cases, a pointer to a structure
                     94: is passed to the called module. The structure contains flags
                     95: that will determine the type of information to be published
                     96: by the module, and fields that may be written in by the
                     97: module. The former include "flgm" and "flgd", which, if set
                     98: to a nonzero value, specify that machine dependencies are to
                     99: be announced or that error messages are to be printed, re-
                    100: spectively. The called module's name, and the hardware char-
                    101: acteristics probed in s26() comprise the latter.
                    102: 
                    103: 
                    104:      Also, in all cases, a return code is returned by the called
                    105: module. A return code of zero indicates that all has gone well;
                    106: nonzero indicates otherwise. Since more than one type of error
                    107: may be detected by a module, the return code is a composite
                    108: of error indicators, which, individually, are given as numbers
                    109: that are powers of two. Thus, a return code of 10 indicates
                    110: that two specific errors, 8 and 2, were detected. Whether or
                    111: not the codes returned by the modules are printed by the main
                    112: program is determined by setting "flgs" to 1 (resp. 0).
                    113: 
                    114:      The entire logic of the main program is contained in the
                    115: half-dozen or so lines at the end. The somewhat cryptic 
                    116: statement:
                    117: 
                    118:            d0.rrc = (*sec[j])(pd0);
                    119: 
                    120: in the for loop calls the modules. The rest of the code is
                    121: reasonably straightforward.
                    122: 
                    123:      Finally, in each of the modules, there is the following
                    124: prologue:
                    125: 
                    126:            snnn(pd0)
                    127:            struct defs *pd0;
                    128:            {
                    129:               static char snnner[] = "snnn,er%d\n";
                    130:               static char qsnnn[8] = "snnn   ";
                    131:               char *ps, *pt;
                    132:               int rc;
                    133: 
                    134:               rc = 0;
                    135:               ps = qsnnn;
                    136:               pt = pd0->rfs;
                    137:               while(*pt++ = *ps++);
                    138: 
                    139: used for housekeeping, handshaking and module initialization.
                    140: 
                    141:                                                            */
                    142:    extern
                    143:      s22(),
                    144:      s241(),
                    145:      s243(),
                    146:      s244(),
                    147:      s25(),
                    148:      s26(),
                    149:      s4(),
                    150:      s61(),
                    151:      s626(),
                    152:      s71(),
                    153:      s72(),
                    154:      s757(),
                    155:      s7813(),
                    156:      s714(),
                    157:      s715(),
                    158:      s81(),
                    159:      s84(),
                    160:      s85(),
                    161:      s86(),
                    162:      s88(),
                    163:      s9()
                    164:    ;
                    165: 
                    166:    int j;
                    167:    static int (*sec[])() = {
                    168:      s22,
                    169:      s241,
                    170:      s243,
                    171:      s244,
                    172:      s25,
                    173:      s26,
                    174:      s4,
                    175:      s61,
                    176:      s626,
                    177:      s71,
                    178:      s72,
                    179:      s757,
                    180:      s7813,
                    181:      s714,
                    182:      s715,
                    183:      s81,
                    184:      s84,
                    185:      s85,
                    186:      s86,
                    187:      s88,
                    188:      s9
                    189:    };
                    190: 
                    191:    static struct defs d0, *pd0;
                    192:     
                    193:      d0.flgs = 1;          /* These flags dictate            */
                    194:      d0.flgm = 1;          /*     the verbosity of           */
                    195:      d0.flgd = 1;          /*         the program.           */
                    196:      d0.flgl = 1;
                    197: 
                    198:    pd0 = &d0;
                    199: 
                    200:    for (j=0; j<sizeof(sec) / sizeof(sec[0]); j++) {
                    201:      d0.rrc = (*sec[j])(pd0);
                    202:      d0.crc = d0.crc+d0.rrc;
                    203:      if(d0.flgs != 0) printf("Section %s returned %d.\n",d0.rfs,d0.rrc);
                    204:    }
                    205:   
                    206:    if(d0.crc == 0) printf("\nNo errors detected.\n");
                    207:    else printf("\nFailed.\n");
                    208:    return 0;
                    209: }
                    210: s22(pd0)                 /* 2.2 Identifiers (Names)      */
                    211: struct defs *pd0;
                    212: {
                    213:    int a234, a;
                    214:    int _, _234, A, rc;
                    215: 
                    216:    static char s22er[] = "s22,er%d\n";
                    217:    static char qs22[8] = "s22    ";
                    218: 
                    219:    char *ps, *pt;
                    220:                          /* Initialize                      */
                    221: 
                    222:    rc = 0;
                    223:    ps = qs22;
                    224:    pt = pd0 -> rfs;
                    225:    while (*pt++ = *ps++);
                    226: 
                    227:      /* An identifier is a sequence of letters and digits;
                    228:         the first character must be a letter. The under-
                    229:         score _ counts as a letter.                        */
                    230: 
                    231:    a=1;
                    232:    _=2;
                    233:    _234=3;
                    234:    a234=4;
                    235:    if(a+_+_234+a234 != 10) {
                    236:      rc = rc+1;
                    237:      if(pd0->flgd != 0) printf(s22er,1);
                    238:    }
                    239: 
                    240:    /* Upper and lower case letters are different.     */
                    241: 
                    242:    A = 2;
                    243:    if (A == a) {
                    244:      rc = rc+4;
                    245:      if (pd0->flgd != 0) printf(s22er,4);
                    246:    }
                    247: 
                    248:    return(rc);
                    249: }
                    250: s241(pd0)                   /* 2.4.1 Integer constants
                    251:                                2.4.2 Explicit long constants  */
                    252: struct defs *pd0;
                    253: {
                    254:    long pow2();
                    255:    static char s241er[] = "s241,er%d\n";
                    256:    static char qs241[8] = "s241   ";
                    257:    char *ps, *pt;
                    258:    int rc, j, lrc;
                    259:    static long g[39] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    260:                         0,6,0,8,0,12,0,16,0,18,0,20,0,24,
                    261:                         0,28,0,30,0,32,0,36};
                    262:    long d[39], o[39], x[39];
                    263: 
                    264:    rc = 0;
                    265:    lrc = 0;
                    266:    ps = qs241;
                    267:    pt = pd0 -> rfs;
                    268:    while (*pt++ = *ps++);
                    269: 
                    270:      /* An integer constant consisting of a sequence of digits is
                    271:         taken to be octal if it begins with 0 (digit zero), decimal
                    272:         otherwise.                                            */
                    273: 
                    274:    if (   8 !=  010
                    275:      ||  16 !=  020
                    276:      ||  24 !=  030
                    277:      ||  32 !=  040
                    278:      ||  40 !=  050
                    279:      ||  48 !=  060
                    280:      ||  56 !=  070
                    281:      ||  64 != 0100
                    282:      ||  72 != 0110
                    283:      ||  80 != 0120
                    284:      ||   9 != 0011
                    285:      ||  17 != 0021
                    286:      ||  25 != 0031
                    287:      ||  33 != 0041
                    288:      ||  41 != 0051
                    289:      ||  49 != 0061
                    290:      ||  57 != 0071
                    291:      ||  65 != 0101
                    292:      ||  73 != 0111
                    293:      ||  81 != 0121 ){
                    294: 
                    295:      rc = rc+1;
                    296:      if( pd0->flgd != 0 ) printf(s241er,1);
                    297:    }
                    298: 
                    299:      /* A sequence of digits preceded by 0x or 0X (digit zero)
                    300:         is taken to be a hexadecimal integer. The hexadecimal
                    301:         digits include a or A through f or F with values 10
                    302:         through 15.     */
                    303: 
                    304:    if ( 0x00abcdef != 0xabcdef
                    305:      || 0xabcdef != 0Xabcdef || 0Xabcdef != 0XAbcdef
                    306:      || 0XAbcdef != 0XABcdef || 0XABcdef != 0XABCdef
                    307:      || 0XABCdef != 0XABCDef || 0XABCDef != 0XABCDEf
                    308:      || 0XABCDEf != 0XABCDEF || 0xABCDEF != 11259375 ){
                    309: 
                    310:      rc = rc+2;
                    311:      if( pd0->flgd != 0 ) printf(s241er,2);
                    312:    }
                    313: 
                    314:      /* A decimal constant whose value exceeds the largest signed
                    315:         machine integer is taken to be long; an octal or hex con-
                    316:         stant which exceeds the largest unsigned machine integer
                    317:         is likewise taken to be long.     */
                    318: 
                    319:    if ( sizeof 010000000000 != sizeof(long)      /* 2**30 */
                    320:      || sizeof 1073741824   != sizeof(long)      /* ditto */
                    321:      || sizeof 0x40000000   != sizeof(long) ){   /*   "   */
                    322: 
                    323:      rc = rc+4;
                    324:      if( pd0->flgd != 0 ) printf(s241er,4);
                    325:    }
                    326: 
                    327:      /* A decimal, octal, or hexadecimal constant immediately followed
                    328:         by l (letter ell) or L is a long constant.    */
                    329: 
                    330:    if ( sizeof   67l != sizeof(long)
                    331:      || sizeof   67L != sizeof(long)
                    332:      || sizeof  067l != sizeof(long)
                    333:      || sizeof  067L != sizeof(long)
                    334:      || sizeof 0X67l != sizeof(long)
                    335:      || sizeof 0x67L != sizeof(long) ){
                    336: 
                    337:      rc = rc+8;
                    338:      if( pd0 -> flgd != 0 ) printf(s241er,8);
                    339:    }
                    340: 
                    341:      /* Finally, we test to see that decimal (d), octal (o),
                    342:         and hexadecimal (x) constants representing the same values
                    343:         agree among themselves, and with computed values, at spec-
                    344:         ified points over an appropriate range. The points select-
                    345:         ed here are those with the greatest potential for caus-
                    346:         ing trouble, i.e., zero, 1-16, and values of 2**n and
                    347:         2**n - 1 where n is some multiple of 4 or 6. Unfortunately,
                    348:         just what happens when a value is too big to fit in a
                    349:         long is undefined; however, it would be nice if what
                    350:         happened were at least consistent...      */
                    351: 
                    352:    for ( j=0; j<17; j++ ) g[j] = j;
                    353:    for ( j=18; j<39; ) {
                    354:      g[j] = pow2(g[j]);
                    355:      g[j-1] = g[j] - 1;
                    356:      j = j+2;
                    357:    }
                    358: 
                    359:    d[0] = 0;                o[0] = 00;               x[0] = 0x0;
                    360:    d[1] = 1;                o[1] = 01;               x[1] = 0x1;
                    361:    d[2] = 2;                o[2] = 02;               x[2] = 0x2;
                    362:    d[3] = 3;                o[3] = 03;               x[3] = 0x3;
                    363:    d[4] = 4;                o[4] = 04;               x[4] = 0x4;
                    364:    d[5] = 5;                o[5] = 05;               x[5] = 0x5;
                    365:    d[6] = 6;                o[6] = 06;               x[6] = 0x6;
                    366:    d[7] = 7;                o[7] = 07;               x[7] = 0x7;
                    367:    d[8] = 8;                o[8] = 010;              x[8] = 0x8;
                    368:    d[9] = 9;                o[9] = 011;              x[9] = 0x9;
                    369:    d[10] = 10;              o[10] = 012;             x[10] = 0xa;
                    370:    d[11] = 11;              o[11] = 013;             x[11] = 0xb;
                    371:    d[12] = 12;              o[12] = 014;             x[12] = 0xc;
                    372:    d[13] = 13;              o[13] = 015;             x[13] = 0xd;
                    373:    d[14] = 14;              o[14] = 016;             x[14] = 0xe;
                    374:    d[15] = 15;              o[15] = 017;             x[15] = 0xf;
                    375:    d[16] = 16;              o[16] = 020;             x[16] = 0x10;
                    376:    d[17] = 63;              o[17] = 077;             x[17] = 0x3f;
                    377:    d[18] = 64;              o[18] = 0100;            x[18] = 0x40;
                    378:    d[19] = 255;             o[19] = 0377;            x[19] = 0xff;
                    379:    d[20] = 256;             o[20] = 0400;            x[20] = 0x100;
                    380:    d[21] = 4095;            o[21] = 07777;           x[21] = 0xfff;
                    381:    d[22] = 4096;            o[22] = 010000;          x[22] = 0x1000;
                    382:    d[23] = 65535;           o[23] = 0177777;         x[23] = 0xffff;
                    383:    d[24] = 65536;           o[24] = 0200000;         x[24] = 0x10000;
                    384:    d[25] = 262143;          o[25] = 0777777;         x[25] = 0x3ffff;
                    385:    d[26] = 262144;          o[26] = 01000000;        x[26] = 0x40000;
                    386:    d[27] = 1048575;         o[27] = 03777777;        x[27] = 0xfffff;
                    387:    d[28] = 1048576;         o[28] = 04000000;        x[28] = 0x100000;
                    388:    d[29] = 16777215;        o[29] = 077777777;       x[29] = 0xffffff;
                    389:    d[30] = 16777216;        o[30] = 0100000000;      x[30] = 0x1000000;
                    390:    d[31] = 268435455;       o[31] = 01777777777;     x[31] = 0xfffffff;
                    391:    d[32] = 268435456;       o[32] = 02000000000;     x[32] = 0x10000000;
                    392:    d[33] = 1073741823;      o[33] = 07777777777;     x[33] = 0x3fffffff;
                    393:    d[34] = 1073741824;      o[34] = 010000000000;    x[34] = 0x40000000;
                    394:    d[35] = 4294967295;      o[35] = 037777777777;    x[35] = 0xffffffff;
                    395:    d[36] = 4294967296;      o[36] = 040000000000;    x[36] = 0x100000000;
                    396:    d[37] = 68719476735;     o[37] = 0777777777777;   x[37] = 0xfffffffff;
                    397:    d[38] = 68719476736;     o[38] = 01000000000000;  x[38] = 0x1000000000;
                    398: 
                    399:    /* WHEW! */
                    400: 
                    401:    for (j=0; j<39; j++){
                    402:      if ( g[j] != d[j]
                    403:        || d[j] != o[j]
                    404:        || o[j] != x[j]) {
                    405: 
                    406:        if( pd0 -> flgm != 0 ) {
                    407: /*       printf(s241er,16);          save in case opinions change...     */
                    408:          printf("Decimal and octal/hex constants sometimes give\n");
                    409:          printf("   different results when assigned to longs.\n");
                    410:        }
                    411: /*     lrc = 1;   save...   */
                    412:      }
                    413:    }
                    414: 
                    415:    if (lrc != 0) rc =16;
                    416: 
                    417:    return rc;
                    418: }
                    419: 
                    420: long pow2(n)        /* Calculate 2**n by multiplying, not shifting  */
                    421: long n;
                    422: {
                    423:    long s;
                    424:    s = 1;
                    425:    while(n--) s = s*2;
                    426:    return s;
                    427: }
                    428: s243(pd0)                   /*  2.4.3 Character constants  */
                    429: struct defs *pd0;
                    430: {
                    431:    static char s243er[] = "s243,er%d\n";
                    432:    static char qs243[8] = "s243   ";
                    433:    char *ps, *pt;
                    434:    int rc;
                    435:    char chars[256];
                    436: 
                    437:    rc = 0;
                    438:    ps = qs243;
                    439:    pt = pd0->rfs;
                    440:    while(*pt++ = *ps++);
                    441: 
                    442:      /* One of the problems that arises when testing character constants
                    443:         is that of definition: What, exactly, is the character set?
                    444:         In order to guarantee a certain amount of machine independence,
                    445:         the character set we will use here is the set of characters writ-
                    446:         able as escape sequences in C, plus those characters used in writ-
                    447:         ing C programs, i.e.,
                    448: 
                    449:         letters:
                    450:                    ABCDEFGHIJKLMNOPQRSTUVWXYZ      26
                    451:                    abcdefghijklmnopqrstuvwxyz      26
                    452:         numbers:
                    453:                    0123456789                      10
                    454:         special characters:
                    455:                    ~!"#%&()_=-^|{}[]+;*:<>,.?/     27
                    456:         extra special characters:
                    457:                    newline           \n       
                    458:                    horizontal tab    \t
                    459:                    backspace         \b
                    460:                    carriage return   \r
                    461:                    form feed         \f
                    462:                    backslash         \\
                    463:                    single quote      \'             7
                    464:         blank & NUL                                 2
                    465:                                                   ---
                    466:                                                    98
                    467: 
                    468:         Any specific implementation of C may of course support additional
                    469:         characters.                                       */
                    470: 
                    471:         /* Since the value of a character constant is the numerical value
                    472:            of the character in the machine's character set, there should
                    473:            be a one-to-one correspondence between characters and values. */
                    474: 
                    475:    zerofill(chars);
                    476: 
                    477:    chars['a'] = 1;   chars['A'] = 1;   chars['~'] = 1;   chars['0'] = 1;
                    478:    chars['b'] = 1;   chars['B'] = 1;   chars['!'] = 1;   chars['1'] = 1;
                    479:    chars['c'] = 1;   chars['C'] = 1;   chars['"'] = 1;   chars['2'] = 1;
                    480:    chars['d'] = 1;   chars['D'] = 1;   chars['#'] = 1;   chars['3'] = 1;
                    481:    chars['e'] = 1;   chars['E'] = 1;   chars['%'] = 1;   chars['4'] = 1;
                    482:    chars['f'] = 1;   chars['F'] = 1;   chars['&'] = 1;   chars['5'] = 1;
                    483:    chars['g'] = 1;   chars['G'] = 1;   chars['('] = 1;   chars['6'] = 1;
                    484:    chars['h'] = 1;   chars['H'] = 1;   chars[')'] = 1;   chars['7'] = 1;
                    485:    chars['i'] = 1;   chars['I'] = 1;   chars['_'] = 1;   chars['8'] = 1;
                    486:    chars['j'] = 1;   chars['J'] = 1;   chars['='] = 1;   chars['9'] = 1;
                    487:    chars['k'] = 1;   chars['K'] = 1;   chars['-'] = 1;
                    488:    chars['l'] = 1;   chars['L'] = 1;   chars['^'] = 1;
                    489:    chars['m'] = 1;   chars['M'] = 1;   chars['|'] = 1;   chars['\n'] = 1;
                    490:    chars['n'] = 1;   chars['N'] = 1;                     chars['\t'] = 1;
                    491:    chars['o'] = 1;   chars['O'] = 1;   chars['{'] = 1;   chars['\b'] = 1;
                    492:    chars['p'] = 1;   chars['P'] = 1;   chars['}'] = 1;   chars['\r'] = 1;
                    493:    chars['q'] = 1;   chars['Q'] = 1;   chars['['] = 1;   chars['\f'] = 1;
                    494:    chars['r'] = 1;   chars['R'] = 1;   chars[']'] = 1;
                    495:    chars['s'] = 1;   chars['S'] = 1;   chars['+'] = 1;   chars['\\'] = 1;
                    496:    chars['t'] = 1;   chars['T'] = 1;   chars[';'] = 1;   chars['\''] = 1;
                    497:    chars['u'] = 1;   chars['U'] = 1;   chars['*'] = 1;  
                    498:    chars['v'] = 1;   chars['V'] = 1;   chars[':'] = 1;   chars['\0'] = 1;
                    499:    chars['w'] = 1;   chars['W'] = 1;   chars['<'] = 1;   chars[' '] = 1;
                    500:    chars['x'] = 1;   chars['X'] = 1;   chars['>'] = 1;
                    501:    chars['y'] = 1;   chars['Y'] = 1;   chars[','] = 1;
                    502:    chars['z'] = 1;   chars['Z'] = 1;   chars['.'] = 1;
                    503:                                        chars['?'] = 1;
                    504:                                        chars['/'] = 1;
                    505: 
                    506:    if(sumof(chars) != 98){
                    507:      rc = rc+1;
                    508:      if(pd0->flgd != 0) printf(s243er,1);
                    509:    }
                    510: 
                    511:    /* Finally, the escape \ddd consists of the backslash followed
                    512:       by 1, 2, or 3 octal digits which are taken to specify  the
                    513:       desired character.                           */
                    514: 
                    515:    if( '\0'    !=   0 || '\01'   !=   1 || '\02'   !=   2
                    516:     || '\03'   !=   3 || '\04'   !=   4 || '\05'   !=   5
                    517:     || '\06'   !=   6 || '\07'   !=   7 || '\10'   !=   8
                    518:     || '\17'   !=  15 || '\20'   !=  16 || '\77'   !=  63
                    519:     || '\100'  !=  64 || '\177'  != 127                 ){
                    520:    
                    521:      rc = rc+8;
                    522:      if(pd0->flgd != 0) printf(s243er,8);
                    523:    }
                    524: 
                    525:    return rc;
                    526: }
                    527: zerofill(x)
                    528: char *x;
                    529: {
                    530:    int j;
                    531: 
                    532:    for (j=0; j<256; j++) *x++ = 0;
                    533: }
                    534: sumof(x)
                    535: char *x;
                    536: {
                    537:    char *p;
                    538:    int total, j;
                    539: 
                    540:    p = x;
                    541:    total = 0;
                    542: 
                    543:    for(j=0; j<256; j++) total = total+ *p++;
                    544:    return total;
                    545: }
                    546: s244(pd0)
                    547: struct defs *pd0;
                    548: {
                    549:    double a[8];
                    550:    int rc, lrc, j;
                    551:    static char s244er[] = "s244,er%d\n";
                    552:    static char qs244[8] = "s244   ";
                    553:    char *ps, *pt;
                    554: 
                    555:    ps = qs244;
                    556:    pt = pd0->rfs;
                    557:    while(*pt++ = *ps++);
                    558:    rc = 0;
                    559:    lrc = 0;
                    560: 
                    561:    /* Unfortunately, there's not a lot we can do with floating constants.
                    562:       We can check to see that the various representations can be com-
                    563:       piled, that the conversion is such that they yield the same hard-
                    564:       ware representations in all cases, and that all representations
                    565:       thus checked are double precision.              */
                    566: 
                    567:    a[0] = .1250E+04;
                    568:    a[1] = 1.250E3;
                    569:    a[2] = 12.50E02;
                    570:    a[3] = 125.0e+1;
                    571:    a[4] = 1250e00;
                    572:    a[5] = 12500.e-01;
                    573:    a[6] = 125000e-2;
                    574:    a[7] = 1250.;
                    575: 
                    576:    lrc = 0;
                    577:    for (j=0; j<7; j++) if(a[j] != a[j+1]) lrc = 1;
                    578: 
                    579:    if(lrc != 0) {
                    580:      if(pd0->flgd != 0) printf(s244er,1);
                    581:      rc = rc+1;
                    582:    }
                    583: 
                    584:    if ( (sizeof .1250E+04 ) != sizeof(double)
                    585:      || (sizeof 1.250E3   ) != sizeof(double)
                    586:      || (sizeof 12.50E02  ) != sizeof(double)
                    587:      || (sizeof 1.250e+1  ) != sizeof(double)
                    588:      || (sizeof 1250e00   ) != sizeof(double)
                    589:      || (sizeof 12500.e-01) != sizeof(double)
                    590:      || (sizeof 125000e-2 ) != sizeof(double)
                    591:      || (sizeof 1250.     ) != sizeof(double)){
                    592:      
                    593:      if(pd0->flgd != 0) printf(s244er,2);
                    594:      rc = rc+2;
                    595:    }
                    596: 
                    597:    return rc;
                    598: }
                    599: s25(pd0)
                    600: struct defs *pd0;
                    601: {
                    602:    char *s, *s2;
                    603:    int rc, lrc, j;
                    604:    static char s25er[] = "s25,er%d\n";
                    605:    static char qs25[8] = "s25    ";
                    606:    char *ps, *pt;
                    607: 
                    608:    ps = qs25;
                    609:    pt = pd0->rfs;
                    610:    while(*pt++ = *ps++);
                    611:    rc = 0;
                    612: 
                    613:    /* A string is a sequence of characters surrounded by double
                    614:       quotes, as in "...".                         */
                    615: 
                    616:    s = "...";
                    617: 
                    618:    /* A string has type "array of characters" and storage class
                    619:       static and is initialized with the given characters.  */
                    620: 
                    621:    if ( s[0] != s[1] || s[1] != s[2]
                    622:      || s[2] != '.' ) {
                    623: 
                    624:     rc = rc+1;
                    625:      if(pd0->flgd != 0) printf(s25er,1);
                    626:    }
                    627: 
                    628:    /* The compiler places a null byte \0 at the end of each string
                    629:       so the program which scans the string can find its end.   */
                    630: 
                    631:    if( s[3] != '\0' ){
                    632:      rc = rc+4;
                    633:      if(pd0->flgd != 0) printf(s25er,4);
                    634:    }
                    635: 
                    636:    /* In a string, the double quote character " must be preceded
                    637:       by a \.                                               */
                    638: 
                    639:     if( ".\"."[1] != '"' ){
                    640:     rc = rc+8;
                    641:      if(pd0->flgd != 0) printf(s25er,8);
                    642:    }
                    643: 
                    644:    /* In addition, the same escapes described for character constants
                    645:       may be used.                                            */
                    646: 
                    647:    s = "\n\t\b\r\f\\\'";
                    648: 
                    649:    if( s[0] != '\n'
                    650:     || s[1] != '\t'
                    651:     || s[2] != '\b'
                    652:     || s[3] != '\r'
                    653:     || s[4] != '\f'
                    654:     || s[5] != '\\'
                    655:     || s[6] != '\'' ){
                    656: 
                    657:      rc = rc+16;
                    658:      if( pd0->flgd != 0) printf(s25er,16);
                    659:    }
                    660: 
                    661:    /* Finally, a \ and an immediately following newline are ignored */
                    662: 
                    663:    s2 = "queep!";
                    664:    s = "queep!";
                    665: 
                    666:    lrc = 0;
                    667:    for (j=0; j<sizeof "queep!"; j++) if(s[j] != s2[j]) lrc = 1;
                    668:    if (lrc != 0){
                    669:      rc = rc+32;
                    670:      if(pd0->flgd != 0) printf(s25er,32);
                    671:    }
                    672:    return rc;
                    673: }
                    674: s26(pd0)                  /*  2.6  Hardware Characteristics     */
                    675: struct defs *pd0;
                    676: {
                    677:    static char qs26[8] = "s26    ";
                    678:    char *ps, *pt;
                    679:    char c0, c1;
                    680:    float temp, one, delta;
                    681:    double tempd, oned;
                    682:    static char s[] = "%3d bits in %ss.\n";
                    683:    static char s2[] = "%e is the least number that can be added to 1. (%s).\n";
                    684: 
                    685:    ps = qs26;
                    686:    pt = pd0->rfs;
                    687: 
                    688:    while(*pt++ = *ps++);
                    689: 
                    690:           /* Here, we shake the machinery a little to see what falls
                    691:              out.  First, we find out how many bits are in a char.  */
                    692: 
                    693:    pd0->cbits = 0;
                    694:    c0 = 0;
                    695:    c1 = 1;
                    696: 
                    697:    while(c0 != c1) {
                    698:      c1 = c1<<1;
                    699:      pd0->cbits = pd0->cbits+1;
                    700:    }
                    701:           /* That information lets us determine the size of everything else. */
                    702: 
                    703:    pd0->ibits = pd0->cbits * sizeof(int);
                    704:    pd0->sbits = pd0->cbits * sizeof(short);
                    705:    pd0->lbits = pd0->cbits * sizeof(long);
                    706:    pd0->ubits = pd0->cbits * sizeof(unsigned);
                    707:    pd0->fbits = pd0->cbits * sizeof(float);
                    708:    pd0->dbits = pd0->cbits * sizeof(double);
                    709: 
                    710:           /* We have now almost reconstructed the table in section 2.6, the
                    711:              exception being the range of the floating point hardware.
                    712:              Now there are just so many ways to conjure up a floating point
                    713:              representation system that it's damned near impossible to guess
                    714:              what's going on by writing a program to interpret bit patterns.
                    715:              Further, the information isn't all that useful, if we consider
                    716:              the fact that machines that won't handle numbers between 10**30
                    717:              and 10**-30 are very hard to find, and that people playing with
                    718:              numbers outside that range have a lot more to worry about than
                    719:              just the capacity of the characteristic.
                    720: 
                    721:              A much more useful measure is the precision, which can be ex-
                    722:              pressed in terms of the smallest number that can be added to
                    723:              1. without loss of significance. We calculate that here, for
                    724:              float and double.                       */
                    725: 
                    726:    one = 1.;
                    727:    delta = 1.;
                    728:    temp = 0.;
                    729:    while(temp != one) {
                    730:      temp = one+delta;
                    731:      delta = delta/2.;
                    732:    }
                    733:    pd0->fprec = delta * 4.;
                    734:    oned = 1.;
                    735:    delta = 1.;
                    736:    tempd = 0.;
                    737:    while(tempd != oned) {
                    738:      tempd = oned+delta;
                    739:      delta = delta/2.;
                    740:    }
                    741:    pd0->dprec = delta * 4.;
                    742: 
                    743:           /* Now, if anyone's interested, we publish the results.       */
                    744: 
                    745:    if(pd0->flgm != 0) {
                    746:      printf(s,pd0->cbits,"char");
                    747:      printf(s,pd0->ibits,"int");
                    748:      printf(s,pd0->sbits,"short");
                    749:      printf(s,pd0->lbits,"long");
                    750:      printf(s,pd0->ubits,"unsigned");
                    751:      printf(s,pd0->fbits,"float");
                    752:      printf(s,pd0->dbits,"double");
                    753:      printf(s2,pd0->fprec,"float");
                    754:      printf(s2,pd0->dprec,"double");
                    755:    }
                    756:           /* Since we are only exploring and perhaps reporting, but not 
                    757:              testing any features, we cannot return an error code.  */
                    758: 
                    759:    return 0;
                    760: }
                    761: int extvar;
                    762: s4(pd0)                    /* 4. What's in a name?             */
                    763: struct defs *pd0;
                    764: {
                    765:    static char s4er[] = "s4,er%d\n";
                    766:    static char qs4[8] = "s4     ";
                    767:    char *ps, *pt;
                    768:    int j, rc;
                    769: 
                    770:    short sint;             /* short integer, for size test      */
                    771:    int pint;               /* plain                             */
                    772:    long lint;              /* long                              */
                    773:    unsigned target;
                    774:    unsigned int mask;
                    775: 
                    776:    rc = 0;
                    777:    ps = qs4;
                    778:    pt = pd0->rfs;
                    779: 
                    780:    while(*pt++ = *ps++);
                    781: 
                    782: /*   There are four declarable storage classes: automatic,
                    783: static, external, and register. Automatic variables have
                    784: been dealt with extensively thus far, and will not be specif-
                    785: ically treated in this section. Register variables are treated
                    786: in section s81.
                    787: 
                    788:      Static variables are local to a block, but retain their
                    789: values upon reentry to a block, even after control has left
                    790: the block.                                                     */
                    791: 
                    792:    for (j=0; j<3; j++)
                    793:      if(svtest(j) != zero()){
                    794:        rc = 1;
                    795:        if(pd0->flgd != 0) printf(s4er,1);
                    796:      }
                    797:    ;
                    798: 
                    799: /*   External variables exist and retain their values throughout
                    800: the execution of the entire program, and may be used for comm-
                    801: unication between functions, even separately compiled functions.
                    802:                                                                 */
                    803: 
                    804:    setev();
                    805:    if(testev() != 0){
                    806:      rc=rc+2;
                    807:      if(pd0->flgd != 0) printf(s4er,2);
                    808:    }
                    809: /*   
                    810:      Characters have been tested elsewhere (in s243).
                    811: 
                    812:      Up to three sizes of integer, declared short int, int, and
                    813: long int, are available. Longer integers provide no less storage
                    814: than shorter ones, but implementation may make either short
                    815: integers, or long integers, or both, equivalent to plain
                    816: integers.
                    817:                                                                 */
                    818: 
                    819:    if(sizeof lint < sizeof pint || sizeof pint < sizeof sint){
                    820: 
                    821:      rc = rc+4;
                    822:      if(pd0->flgd != 0) printf(s4er,4);
                    823:    }
                    824: 
                    825: /*   Unsigned integers, declared unsigned, obey the laws of
                    826: arithmetic modulo 2**n, where n is the number of bits in the
                    827: implementation                                                  */
                    828: 
                    829:    target = 0;
                    830:    target = target-1;
                    831:    mask = 1;
                    832:  
                    833:    for(j=0; j<(sizeof target)*pd0->cbits; j++){
                    834:    
                    835:      mask = mask&target;
                    836:      target = target>>1;
                    837:    }
                    838: 
                    839:    if(mask != 1 || target != 0){
                    840: 
                    841:      rc = rc+8;
                    842:      if(pd0->flgd != 0) printf(s4er,8);
                    843:    }
                    844: 
                    845:    return rc;
                    846: }
                    847: svtest(n)
                    848: int n;
                    849: {
                    850:    static k;
                    851:    int rc;
                    852:    switch (n) {
                    853: 
                    854:      case 0: k = 1978;
                    855:              rc = 0;
                    856:              break;
                    857: 
                    858:      case 1: if(k != 1978) rc = 1;
                    859:              else{
                    860:               k = 1929;
                    861:               rc = 0;
                    862:              }
                    863:              break;
                    864: 
                    865:      case 2: if(k != 1929) rc = 1;
                    866:              else rc = 0;
                    867:              break;
                    868:    }
                    869:    return rc;
                    870: }
                    871: zero(){                 /* Returns a value of zero, possibly */
                    872:    static k;            /* with side effects, as it's called */
                    873:    int rc;              /* alternately with svtest, above,   */
                    874:    k = 2;               /* and has the same internal storage */
                    875:    rc = 0;              /* requirements.                     */
                    876:    return rc;
                    877: }
                    878: testev(){
                    879:    if(extvar != 1066) return 1;
                    880:    else return 0;
                    881: }
                    882: s61(pd0)          /* Characters and integers */
                    883: struct defs *pd0;
                    884: {
                    885:    static char s61er[] = "s61,er%d\n";
                    886:    static char qs61[8] = "s61    ";
                    887:    short from, shortint;
                    888:    long int to, longint;
                    889:    int rc, lrc;
                    890:    int j;
                    891:    char fromc, charint;
                    892:    char *wd, *pc[6];
                    893:    
                    894:    static char upper_alpha[]             = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                    895:    static char lower_alpha[]             = "abcdefghijklmnopqrstuvwxyz";
                    896:    static char numbers[]               = "0123456789";
                    897:    static char special_characters[]    = "~!\"#%&()_=-^|{}[]+;*:<>,.?/";
                    898:    static char extra_special_characters[] = "\n\t\b\r\f\\\'";
                    899:    static char blank_and_NUL[]            = " \0";
                    900: 
                    901:    char *ps, *pt;
                    902:    ps = qs61;
                    903:    pt = pd0->rfs;
                    904:    rc = 0;
                    905:    while (*pt++ = *ps++);
                    906: 
                    907: /*      A character or a short integer may be used wherever
                    908: an integer may be used. In all cases, the value is converted
                    909: to integer. This principle is extensively used throughout this
                    910: program, and will not be explicitly tested here.        */
                    911: 
                    912: /*      Conversion of a shorter integer to a longer always
                    913: involves sign extension.                                */
                    914: 
                    915:    from = -19;
                    916:    to = from;
                    917: 
                    918:    if(to != -19){
                    919:      rc = rc+1;
                    920:      if(pd0->flgd != 0) printf(s61er,1);
                    921:    }
                    922: 
                    923: /*      It is guaranteed that a member of the standard char-
                    924: acter set is nonnegative.                               */
                    925: 
                    926:    pc[0] = upper_alpha;
                    927:    pc[1] = lower_alpha;
                    928:    pc[2] = numbers;
                    929:    pc[3] = special_characters;
                    930:    pc[4] = extra_special_characters;
                    931:    pc[5] = blank_and_NUL;
                    932: 
                    933:    lrc = 0;
                    934:    for (j=0; j<6; j++)
                    935:      while(*pc[j]) if(*pc[j]++ < 0) lrc =1;
                    936: 
                    937:    if(lrc != 0){
                    938:      rc=rc+2;
                    939:      if(pd0->flgd != 0) printf(s61er,2);
                    940:    }
                    941: 
                    942: /*      When a longer integer is converted to a shorter or
                    943: to  a char, it is truncated on the left; excess bits are 
                    944: simply discarded.                                       */
                    945: 
                    946:    longint = 1048579;           /* =2**20+3 */
                    947:    shortint = longint;
                    948:    charint = longint;
                    949: 
                    950:    if((shortint != longint && shortint != 3) ||
                    951:       (charint  != longint && charint  != 3)) {
                    952:      rc = rc+8;
                    953:      if(pd0->flgd != 0) printf(s61er,8);
                    954:    }
                    955: 
                    956:    return rc;
                    957: }
                    958: s626(pd0)          /* 6.2 Float and double                  */
                    959:                    /* 6.3 Floating and integral                 */
                    960:                    /* 6.4 Pointers and integers                 */
                    961:                    /* 6.5 Unsigned                              */
                    962:                    /* 6.6 Arithmetic conversions                */
                    963: struct defs *pd0;
                    964: {
                    965:    static char s626er[] = "s626,er%d\n";
                    966:    static char qs626[8] = "s626   ";
                    967:    int rc;
                    968:    char *ps, *pt;
                    969:    float eps, f1, f2, f3, f4, f;
                    970:    long lint1, lint2, l, ls;
                    971:    char c, t[28], t0;
                    972:    short s;
                    973:    int is, i, j;
                    974:    unsigned u, us;
                    975:    double d, ds;
                    976:    ps = qs626;
                    977:    pt = pd0->rfs;
                    978:    rc = 0;
                    979:    while (*pt++ = *ps++);
                    980: 
                    981:         /* Conversions of integral values to floating type are
                    982:         well-behaved.                                           */
                    983: 
                    984:    f1 = 1.;
                    985:    lint1 = 1.;
                    986:    lint2 = 1.;
                    987: 
                    988:    for(j=0;j<pd0->lbits-2;j++){
                    989:      f1 = f1*2;
                    990:      lint2 = (lint2<<1)|lint1;
                    991:    }
                    992:    f2 = lint2;
                    993:    f1 = (f1-f2)/f1;
                    994:    if(f1>2.*pd0->fprec){
                    995: 
                    996:      rc = rc+2;
                    997:      if(pd0->flgd != 0) printf(s626er,2);
                    998:    }
                    999: 
                   1000:         /* Pointer-integer combinations are discussed in s74,
                   1001:         "Additive operators". The unsigned-int combination
                   1002:         appears below.                                          */
                   1003: 
                   1004:    c = 125;
                   1005:    s = 125;
                   1006:    i = 125;     is = 15625;
                   1007:    u = 125;     us = 15625;
                   1008:    l = 125;     ls = 15625;
                   1009:    f = 125.;
                   1010:    d = 125.;    ds = 15625.;
                   1011: 
                   1012:    for(j=0;j<28;j++) t[j] = 0;
                   1013: 
                   1014:    if(c*c != is) t[ 0] = 1;
                   1015:    if(s*c != is) t[ 1] = 1;
                   1016:    if(s*s != is) t[ 2] = 1;
                   1017:    if(i*c != is) t[ 3] = 1;
                   1018:    if(i*s != is) t[ 4] = 1;
                   1019:    if(i*i != is) t[ 5] = 1;
                   1020:    if(u*c != us) t[ 6] = 1;
                   1021:    if(u*s != us) t[ 7] = 1;
                   1022:    if(u*i != us) t[ 8] = 1;
                   1023:    if(u*u != us) t[ 9] = 1;
                   1024:    if(l*c != ls) t[10] = 1;
                   1025:    if(l*s != ls) t[11] = 1;
                   1026:    if(l*i != ls) t[12] = 1;
                   1027:    if(l*u != us) t[13] = 1;
                   1028:    if(l*l != ls) t[14] = 1;
                   1029:    if(f*c != ds) t[15] = 1;
                   1030:    if(f*s != ds) t[16] = 1;
                   1031:    if(f*i != ds) t[17] = 1;
                   1032:    if(f*u != ds) t[18] = 1;
                   1033:    if(f*l != ds) t[19] = 1;
                   1034:    if(f*f != ds) t[20] = 1;
                   1035:    if(d*c != ds) t[21] = 1;
                   1036:    if(d*s != ds) t[22] = 1;
                   1037:    if(d*i != ds) t[23] = 1;
                   1038:    if(d*u != ds) t[24] = 1;
                   1039:    if(d*l != ds) t[25] = 1;
                   1040:    if(d*f != ds) t[26] = 1;
                   1041:    if(d*d != ds) t[27] = 1;
                   1042: 
                   1043:    t0 = 0;
                   1044:    for(j=0; j<28; j++) t0 = t0+t[j];
                   1045: 
                   1046:    if(t0 != 0){
                   1047: 
                   1048:      rc = rc+4;
                   1049:      if(pd0->flgd != 0){
                   1050: 
                   1051:        printf(s626er,4);
                   1052:        printf("   key=");
                   1053:        for(j=0;j<28;j++) printf("%d",t[j]);
                   1054:        printf("\n");
                   1055:      }
                   1056:    }
                   1057: 
                   1058:         /* When an unsigned integer is converted to long,
                   1059:            the value of the result is the same numerically
                   1060:            as that of the unsigned integer.               */
                   1061: 
                   1062:    l = (unsigned)0100000;
                   1063:    if((long)l > (unsigned)0100000){
                   1064: 
                   1065:       rc = rc+8;
                   1066:       if(pd0->flgd != 0) printf(s626er,8);
                   1067:    }
                   1068: 
                   1069:    return rc;
                   1070: }
                   1071: s71(pd0)          /*         7.1  Primary expressions   */
                   1072: struct defs *pd0;
                   1073: {
                   1074:    static char s71er[] = "s71,er%d\n";
                   1075:    static char qs71[8] = "s71    ";
                   1076:    int rc;
                   1077:    char *ps, *pt;
                   1078:    static char q = 'q';
                   1079:    int x[10], McCarthy(), clobber(), a, b, *p;
                   1080:    ps = qs71;
                   1081:    pt = pd0->rfs;
                   1082:    rc = 0;
                   1083:    while (*pt++ = *ps++);
                   1084: 
                   1085: /*   Testing of expressions and operators is quite complicated,
                   1086:      because (a) problems are apt to surface in queer combinations
                   1087:      of operators and operands, rather than in isolation,
                   1088:      and (b) the number of expressions needed to provoke a case
                   1089:      of improper behaviour may be quite large. Hence, we take the
                   1090:      following approach: for this section, and for subsequent
                   1091:      sections through 7.15, we will check the primitive operations
                   1092:      in isolation, thus verifying that the primitives work,
                   1093:      after a fashion. The job of testing combinations, we will
                   1094:      leave to a separate, machine-generated program, to be included
                   1095:      in the C test package at some later date.
                   1096:                                                                 */
                   1097: 
                   1098: /*   A string is a primary expression. The identifier points to
                   1099:      the first character of a string.
                   1100:                                                                   */
                   1101: 
                   1102:    if(*"queep" != q){
                   1103:      rc = rc+1;
                   1104:      if(pd0->flgd  != 0) printf(s71er,1);
                   1105:    }
                   1106: /*   A parenthesized expression is a primary expression whose
                   1107:      type and value are the same as those of the unadorned
                   1108:      expression.
                   1109:                                                                 */
                   1110:    if((2+3) != 2+3) {
                   1111:      rc = rc+2;
                   1112:      if(pd0->flgd != 0) printf(s71er,2);
                   1113:    }
                   1114: 
                   1115: /*   A primary expression followed by an expression in square 
                   1116:      brackets is a primary expression. The intuitive meaning is
                   1117:      that of a subscript. The expression E1[E2] is identical
                   1118:      (by definition) to *((E1)+(E2)).
                   1119:                                                                 */
                   1120: 
                   1121:    x[5] = 1942;
                   1122:    if(x[5] != 1942 || x[5] != *((x)+(5))){
                   1123:      rc = rc+4;
                   1124:      if(pd0->flgd != 0) printf(s71er,4);
                   1125:    }
                   1126: 
                   1127: /*   If the various flavors of function calls didn't work, we
                   1128:      would never have gotten this far; however, we do need to 
                   1129:      show that functions can be recursive...
                   1130:                                                                */
                   1131: 
                   1132:    if ( McCarthy(-5) != 91){
                   1133:      rc = rc+8;
                   1134:      if(pd0->flgd != 0) printf(s71er,8);
                   1135:    }
                   1136: 
                   1137: /*   and that argument passing is strictly by value.           */
                   1138: 
                   1139:    a = 2;
                   1140:    b = 3;
                   1141:    p = &b;
                   1142: 
                   1143:    clobber(a,p);
                   1144: 
                   1145:    if(a != 2 || b != 2){
                   1146:      rc = rc+16;
                   1147:      if(pd0->flgd != 0) printf(s71er,16);
                   1148:    }
                   1149: 
                   1150: /*   Finally, structures and unions are addressed thusly:      */
                   1151: 
                   1152:    if(pd0->dprec != (*pd0).dprec){
                   1153:      rc = rc+32;
                   1154:      if(pd0->flgd != 0) printf(s71er,32);
                   1155:    }
                   1156: 
                   1157:    return rc;
                   1158: }
                   1159: McCarthy(x)
                   1160: int x;
                   1161: {
                   1162:    if(x>100) return x-10;
                   1163:    else return McCarthy( McCarthy(x+11));
                   1164: }
                   1165: clobber(x,y)
                   1166: int x, *y;
                   1167: {
                   1168:    x = 3;
                   1169:    *y = 2;
                   1170: }
                   1171: s714(pd0)          /*  7.14  Assignment operators       */
                   1172: struct defs *pd0;
                   1173: {
                   1174:    static char f[] = "Local error %d.\n";
                   1175:    static char s714er[] = "s714,er%d\n";
                   1176:    static char qs714[8] = "s714   ";
                   1177:    register int prlc, lrc;
                   1178:    int rc;
                   1179:    char cl, cr;
                   1180:    short sl, sr;
                   1181:    int il, ir;
                   1182:    long ll, lr;
                   1183:    unsigned ul, ur;
                   1184:    float fl, fr;
                   1185:    double dl, dr;
                   1186:    char *ps, *pt;
                   1187:    ps = qs714;
                   1188:    pt = pd0->rfs;
                   1189:    rc = 0;
                   1190:    lrc = 0;
                   1191:    prlc = pd0->flgl;
                   1192:    while (*pt++ = *ps++);
                   1193: 
                   1194:         /* This section tests the assignment operators.
                   1195: 
                   1196:         It is an exhaustive test of all assignment statements
                   1197:         of the form:
                   1198: 
                   1199:                 vl op vr
                   1200: 
                   1201:         where vl and vr are variables from the set
                   1202:         {char,short,int,long,unsigned,float,double} and op is
                   1203:         one of the assignment operators. There are 395 such
                   1204:         statements.
                   1205: 
                   1206:         The initial values for the variables have been chosen
                   1207:         so that both the initial values and the results will
                   1208:         "fit" in just about any implementation, and that the re-
                   1209:         sults will be such that they test for the proper form-
                   1210:         ation of composite operators, rather than checking for
                   1211:         the valid operation of those operators' components.
                   1212:         For example, in checking >>=, we want to verify that
                   1213:         a right shift and a move take place, rather than
                   1214:         whether or not there may be some peculiarities about
                   1215:         the right shift. Such tests have been made previously,
                   1216:         and to repeat them here would be to throw out a red
                   1217:         herring.
                   1218: 
                   1219:         The table below lists the operators, assignment targets,
                   1220:         initial values for left and right operands, and the
                   1221:         expected values of the results.
                   1222: 
                   1223: 
                   1224:           =  +=  -=  *=  /=  %=  >>=  <<=  &=  ^=  |=  
                   1225: char      2   7   3  10   2   1   1    20   8   6  14
                   1226: short     2   7   3  10   2   1   1    20   8   6  14
                   1227: int       2   7   3  10   2   1   1    20   8   6  14
                   1228: long      2   7   3  10   2   1   1    20   8   6  14
                   1229: unsigned  2   7   3  10   2   1   1    20   8   6  14
                   1230: float     2   7   3  10 2.5 |             |
                   1231: double    2   7   3  10 2.5 |             |
                   1232:                             |             |
                   1233: initial         (5,2)       |    (5,2)    |  (12,10)
                   1234: 
                   1235:         The following machine-generated program reflects the
                   1236:         tests described in the table.
                   1237:                                                                 */
                   1238: 
                   1239:    cl = 5; cr = 2;
                   1240:    cl = cr;
                   1241:    if(cl != 2){
                   1242:      lrc = 1;
                   1243:      if(prlc) printf(f,lrc);
                   1244:    }
                   1245:    cl = 5; sr = 2;
                   1246:    cl = sr;
                   1247:    if(cl != 2){
                   1248:      lrc = 2;
                   1249:      if(prlc) printf(f,lrc);
                   1250:    }
                   1251:    cl = 5; ir = 2;
                   1252:    cl = ir;
                   1253:    if(cl != 2){
                   1254:      lrc = 3;
                   1255:      if(prlc) printf(f,lrc);
                   1256:    }
                   1257:    cl = 5; lr = 2;
                   1258:    cl = lr;
                   1259:    if(cl != 2){
                   1260:      lrc = 4;
                   1261:      if(prlc) printf(f,lrc);
                   1262:    }
                   1263:    cl = 5; ur = 2;
                   1264:    cl = ur;
                   1265:    if(cl != 2){
                   1266:      lrc = 5;
                   1267:      if(prlc) printf(f,lrc);
                   1268:    }
                   1269:    cl = 5; fr = 2;
                   1270:    cl = fr;
                   1271:    if(cl != 2){
                   1272:      lrc = 6;
                   1273:      if(prlc) printf(f,lrc);
                   1274:    }
                   1275:    cl = 5; dr = 2;
                   1276:    cl = dr;
                   1277:    if(cl != 2){
                   1278:      lrc = 7;
                   1279:      if(prlc) printf(f,lrc);
                   1280:    }
                   1281:    sl = 5; cr = 2;
                   1282:    sl = cr;
                   1283:    if(sl != 2){
                   1284:      lrc = 8;
                   1285:      if(prlc) printf(f,lrc);
                   1286:    }
                   1287:    sl = 5; sr = 2;
                   1288:    sl = sr;
                   1289:    if(sl != 2){
                   1290:      lrc = 9;
                   1291:      if(prlc) printf(f,lrc);
                   1292:    }
                   1293:    sl = 5; ir = 2;
                   1294:    sl = ir;
                   1295:    if(sl != 2){
                   1296:      lrc = 10;
                   1297:      if(prlc) printf(f,lrc);
                   1298:    }
                   1299:    sl = 5; lr = 2;
                   1300:    sl = lr;
                   1301:    if(sl != 2){
                   1302:      lrc = 11;
                   1303:      if(prlc) printf(f,lrc);
                   1304:    }
                   1305:    sl = 5; ur = 2;
                   1306:    sl = ur;
                   1307:    if(sl != 2){
                   1308:      lrc = 12;
                   1309:      if(prlc) printf(f,lrc);
                   1310:    }
                   1311:    sl = 5; fr = 2;
                   1312:    sl = fr;
                   1313:    if(sl != 2){
                   1314:      lrc = 13;
                   1315:      if(prlc) printf(f,lrc);
                   1316:    }
                   1317:    sl = 5; dr = 2;
                   1318:    sl = dr;
                   1319:    if(sl != 2){
                   1320:      lrc = 14;
                   1321:      if(prlc) printf(f,lrc);
                   1322:    }
                   1323:    il = 5; cr = 2;
                   1324:    il = cr;
                   1325:    if(il != 2){
                   1326:      lrc = 15;
                   1327:      if(prlc) printf(f,lrc);
                   1328:    }
                   1329:    il = 5; sr = 2;
                   1330:    il = sr;
                   1331:    if(il != 2){
                   1332:      lrc = 16;
                   1333:      if(prlc) printf(f,lrc);
                   1334:    }
                   1335:    il = 5; ir = 2;
                   1336:    il = ir;
                   1337:    if(il != 2){
                   1338:      lrc = 17;
                   1339:      if(prlc) printf(f,lrc);
                   1340:    }
                   1341:    il = 5; lr = 2;
                   1342:    il = lr;
                   1343:    if(il != 2){
                   1344:      lrc = 18;
                   1345:      if(prlc) printf(f,lrc);
                   1346:    }
                   1347:    il = 5; ur = 2;
                   1348:    il = ur;
                   1349:    if(il != 2){
                   1350:      lrc = 19;
                   1351:      if(prlc) printf(f,lrc);
                   1352:    }
                   1353:    il = 5; fr = 2;
                   1354:    il = fr;
                   1355:    if(il != 2){
                   1356:      lrc = 20;
                   1357:      if(prlc) printf(f,lrc);
                   1358:    }
                   1359:    il = 5; dr = 2;
                   1360:    il = dr;
                   1361:    if(il != 2){
                   1362:      lrc = 21;
                   1363:      if(prlc) printf(f,lrc);
                   1364:    }
                   1365:    ll = 5; cr = 2;
                   1366:    ll = cr;
                   1367:    if(ll != 2){
                   1368:      lrc = 22;
                   1369:      if(prlc) printf(f,lrc);
                   1370:    }
                   1371:    ll = 5; sr = 2;
                   1372:    ll = sr;
                   1373:    if(ll != 2){
                   1374:      lrc = 23;
                   1375:      if(prlc) printf(f,lrc);
                   1376:    }
                   1377:    ll = 5; ir = 2;
                   1378:    ll = ir;
                   1379:    if(ll != 2){
                   1380:      lrc = 24;
                   1381:      if(prlc) printf(f,lrc);
                   1382:    }
                   1383:    ll = 5; lr = 2;
                   1384:    ll = lr;
                   1385:    if(ll != 2){
                   1386:      lrc = 25;
                   1387:      if(prlc) printf(f,lrc);
                   1388:    }
                   1389:    ll = 5; ur = 2;
                   1390:    ll = ur;
                   1391:    if(ll != 2){
                   1392:      lrc = 26;
                   1393:      if(prlc) printf(f,lrc);
                   1394:    }
                   1395:    ll = 5; fr = 2;
                   1396:    ll = fr;
                   1397:    if(ll != 2){
                   1398:      lrc = 27;
                   1399:      if(prlc) printf(f,lrc);
                   1400:    }
                   1401:    ll = 5; dr = 2;
                   1402:    ll = dr;
                   1403:    if(ll != 2){
                   1404:      lrc = 28;
                   1405:      if(prlc) printf(f,lrc);
                   1406:    }
                   1407:    ul = 5; cr = 2;
                   1408:    ul = cr;
                   1409:    if(ul != 2){
                   1410:      lrc = 29;
                   1411:      if(prlc) printf(f,lrc);
                   1412:    }
                   1413:    ul = 5; sr = 2;
                   1414:    ul = sr;
                   1415:    if(ul != 2){
                   1416:      lrc = 30;
                   1417:      if(prlc) printf(f,lrc);
                   1418:    }
                   1419:    ul = 5; ir = 2;
                   1420:    ul = ir;
                   1421:    if(ul != 2){
                   1422:      lrc = 31;
                   1423:      if(prlc) printf(f,lrc);
                   1424:    }
                   1425:    ul = 5; lr = 2;
                   1426:    ul = lr;
                   1427:    if(ul != 2){
                   1428:      lrc = 32;
                   1429:      if(prlc) printf(f,lrc);
                   1430:    }
                   1431:    ul = 5; ur = 2;
                   1432:    ul = ur;
                   1433:    if(ul != 2){
                   1434:      lrc = 33;
                   1435:      if(prlc) printf(f,lrc);
                   1436:    }
                   1437:    ul = 5; fr = 2;
                   1438:    ul = fr;
                   1439:    if(ul != 2){
                   1440:      lrc = 34;
                   1441:      if(prlc) printf(f,lrc);
                   1442:    }
                   1443:    ul = 5; dr = 2;
                   1444:    ul = dr;
                   1445:    if(ul != 2){
                   1446:      lrc = 35;
                   1447:      if(prlc) printf(f,lrc);
                   1448:    }
                   1449:    fl = 5; cr = 2;
                   1450:    fl = cr;
                   1451:    if(fl != 2){
                   1452:      lrc = 36;
                   1453:      if(prlc) printf(f,lrc);
                   1454:    }
                   1455:    fl = 5; sr = 2;
                   1456:    fl = sr;
                   1457:    if(fl != 2){
                   1458:      lrc = 37;
                   1459:      if(prlc) printf(f,lrc);
                   1460:    }
                   1461:    fl = 5; ir = 2;
                   1462:    fl = ir;
                   1463:    if(fl != 2){
                   1464:      lrc = 38;
                   1465:      if(prlc) printf(f,lrc);
                   1466:    }
                   1467:    fl = 5; lr = 2;
                   1468:    fl = lr;
                   1469:    if(fl != 2){
                   1470:      lrc = 39;
                   1471:      if(prlc) printf(f,lrc);
                   1472:    }
                   1473:    fl = 5; ur = 2;
                   1474:    fl = ur;
                   1475:    if(fl != 2){
                   1476:      lrc = 40;
                   1477:      if(prlc) printf(f,lrc);
                   1478:    }
                   1479:    fl = 5; fr = 2;
                   1480:    fl = fr;
                   1481:    if(fl != 2){
                   1482:      lrc = 41;
                   1483:      if(prlc) printf(f,lrc);
                   1484:    }
                   1485:    fl = 5; dr = 2;
                   1486:    fl = dr;
                   1487:    if(fl != 2){
                   1488:      lrc = 42;
                   1489:      if(prlc) printf(f,lrc);
                   1490:    }
                   1491:    dl = 5; cr = 2;
                   1492:    dl = cr;
                   1493:    if(dl != 2){
                   1494:      lrc = 43;
                   1495:      if(prlc) printf(f,lrc);
                   1496:    }
                   1497:    dl = 5; sr = 2;
                   1498:    dl = sr;
                   1499:    if(dl != 2){
                   1500:      lrc = 44;
                   1501:      if(prlc) printf(f,lrc);
                   1502:    }
                   1503:    dl = 5; ir = 2;
                   1504:    dl = ir;
                   1505:    if(dl != 2){
                   1506:      lrc = 45;
                   1507:      if(prlc) printf(f,lrc);
                   1508:    }
                   1509:    dl = 5; lr = 2;
                   1510:    dl = lr;
                   1511:    if(dl != 2){
                   1512:      lrc = 46;
                   1513:      if(prlc) printf(f,lrc);
                   1514:    }
                   1515:    dl = 5; ur = 2;
                   1516:    dl = ur;
                   1517:    if(dl != 2){
                   1518:      lrc = 47;
                   1519:      if(prlc) printf(f,lrc);
                   1520:    }
                   1521:    dl = 5; fr = 2;
                   1522:    dl = fr;
                   1523:    if(dl != 2){
                   1524:      lrc = 48;
                   1525:      if(prlc) printf(f,lrc);
                   1526:    }
                   1527:    dl = 5; dr = 2;
                   1528:    dl = dr;
                   1529:    if(dl != 2){
                   1530:      lrc = 49;
                   1531:      if(prlc) printf(f,lrc);
                   1532:    }
                   1533:    cl = 5; cr = 2;
                   1534:    cl += cr;
                   1535:    if(cl != 7){
                   1536:      lrc = 50;
                   1537:      if(prlc) printf(f,lrc);
                   1538:    }
                   1539:    cl = 5; sr = 2;
                   1540:    cl += sr;
                   1541:    if(cl != 7){
                   1542:      lrc = 51;
                   1543:      if(prlc) printf(f,lrc);
                   1544:    }
                   1545:    cl = 5; ir = 2;
                   1546:    cl += ir;
                   1547:    if(cl != 7){
                   1548:      lrc = 52;
                   1549:      if(prlc) printf(f,lrc);
                   1550:    }
                   1551:    cl = 5; lr = 2;
                   1552:    cl += lr;
                   1553:    if(cl != 7){
                   1554:      lrc = 53;
                   1555:      if(prlc) printf(f,lrc);
                   1556:    }
                   1557:    cl = 5; ur = 2;
                   1558:    cl += ur;
                   1559:    if(cl != 7){
                   1560:      lrc = 54;
                   1561:      if(prlc) printf(f,lrc);
                   1562:    }
                   1563:    cl = 5; fr = 2;
                   1564:    cl += fr;
                   1565:    if(cl != 7){
                   1566:      lrc = 55;
                   1567:      if(prlc) printf(f,lrc);
                   1568:    }
                   1569:    cl = 5; dr = 2;
                   1570:    cl += dr;
                   1571:    if(cl != 7){
                   1572:      lrc = 56;
                   1573:      if(prlc) printf(f,lrc);
                   1574:    }
                   1575:    sl = 5; cr = 2;
                   1576:    sl += cr;
                   1577:    if(sl != 7){
                   1578:      lrc = 57;
                   1579:      if(prlc) printf(f,lrc);
                   1580:    }
                   1581:    sl = 5; sr = 2;
                   1582:    sl += sr;
                   1583:    if(sl != 7){
                   1584:      lrc = 58;
                   1585:      if(prlc) printf(f,lrc);
                   1586:    }
                   1587:    sl = 5; ir = 2;
                   1588:    sl += ir;
                   1589:    if(sl != 7){
                   1590:      lrc = 59;
                   1591:      if(prlc) printf(f,lrc);
                   1592:    }
                   1593:    sl = 5; lr = 2;
                   1594:    sl += lr;
                   1595:    if(sl != 7){
                   1596:      lrc = 60;
                   1597:      if(prlc) printf(f,lrc);
                   1598:    }
                   1599:    sl = 5; ur = 2;
                   1600:    sl += ur;
                   1601:    if(sl != 7){
                   1602:      lrc = 61;
                   1603:      if(prlc) printf(f,lrc);
                   1604:    }
                   1605:    sl = 5; fr = 2;
                   1606:    sl += fr;
                   1607:    if(sl != 7){
                   1608:      lrc = 62;
                   1609:      if(prlc) printf(f,lrc);
                   1610:    }
                   1611:    sl = 5; dr = 2;
                   1612:    sl += dr;
                   1613:    if(sl != 7){
                   1614:      lrc = 63;
                   1615:      if(prlc) printf(f,lrc);
                   1616:    }
                   1617:    il = 5; cr = 2;
                   1618:    il += cr;
                   1619:    if(il != 7){
                   1620:      lrc = 64;
                   1621:      if(prlc) printf(f,lrc);
                   1622:    }
                   1623:    il = 5; sr = 2;
                   1624:    il += sr;
                   1625:    if(il != 7){
                   1626:      lrc = 65;
                   1627:      if(prlc) printf(f,lrc);
                   1628:    }
                   1629:    il = 5; ir = 2;
                   1630:    il += ir;
                   1631:    if(il != 7){
                   1632:      lrc = 66;
                   1633:      if(prlc) printf(f,lrc);
                   1634:    }
                   1635:    il = 5; lr = 2;
                   1636:    il += lr;
                   1637:    if(il != 7){
                   1638:      lrc = 67;
                   1639:      if(prlc) printf(f,lrc);
                   1640:    }
                   1641:    il = 5; ur = 2;
                   1642:    il += ur;
                   1643:    if(il != 7){
                   1644:      lrc = 68;
                   1645:      if(prlc) printf(f,lrc);
                   1646:    }
                   1647:    il = 5; fr = 2;
                   1648:    il += fr;
                   1649:    if(il != 7){
                   1650:      lrc = 69;
                   1651:      if(prlc) printf(f,lrc);
                   1652:    }
                   1653:    il = 5; dr = 2;
                   1654:    il += dr;
                   1655:    if(il != 7){
                   1656:      lrc = 70;
                   1657:      if(prlc) printf(f,lrc);
                   1658:    }
                   1659:    ll = 5; cr = 2;
                   1660:    ll += cr;
                   1661:    if(ll != 7){
                   1662:      lrc = 71;
                   1663:      if(prlc) printf(f,lrc);
                   1664:    }
                   1665:    ll = 5; sr = 2;
                   1666:    ll += sr;
                   1667:    if(ll != 7){
                   1668:      lrc = 72;
                   1669:      if(prlc) printf(f,lrc);
                   1670:    }
                   1671:    ll = 5; ir = 2;
                   1672:    ll += ir;
                   1673:    if(ll != 7){
                   1674:      lrc = 73;
                   1675:      if(prlc) printf(f,lrc);
                   1676:    }
                   1677:    ll = 5; lr = 2;
                   1678:    ll += lr;
                   1679:    if(ll != 7){
                   1680:      lrc = 74;
                   1681:      if(prlc) printf(f,lrc);
                   1682:    }
                   1683:    ll = 5; ur = 2;
                   1684:    ll += ur;
                   1685:    if(ll != 7){
                   1686:      lrc = 75;
                   1687:      if(prlc) printf(f,lrc);
                   1688:    }
                   1689:    ll = 5; fr = 2;
                   1690:    ll += fr;
                   1691:    if(ll != 7){
                   1692:      lrc = 76;
                   1693:      if(prlc) printf(f,lrc);
                   1694:    }
                   1695:    ll = 5; dr = 2;
                   1696:    ll += dr;
                   1697:    if(ll != 7){
                   1698:      lrc = 77;
                   1699:      if(prlc) printf(f,lrc);
                   1700:    }
                   1701:    ul = 5; cr = 2;
                   1702:    ul += cr;
                   1703:    if(ul != 7){
                   1704:      lrc = 78;
                   1705:      if(prlc) printf(f,lrc);
                   1706:    }
                   1707:    ul = 5; sr = 2;
                   1708:    ul += sr;
                   1709:    if(ul != 7){
                   1710:      lrc = 79;
                   1711:      if(prlc) printf(f,lrc);
                   1712:    }
                   1713:    ul = 5; ir = 2;
                   1714:    ul += ir;
                   1715:    if(ul != 7){
                   1716:      lrc = 80;
                   1717:      if(prlc) printf(f,lrc);
                   1718:    }
                   1719:    ul = 5; lr = 2;
                   1720:    ul += lr;
                   1721:    if(ul != 7){
                   1722:      lrc = 81;
                   1723:      if(prlc) printf(f,lrc);
                   1724:    }
                   1725:    ul = 5; ur = 2;
                   1726:    ul += ur;
                   1727:    if(ul != 7){
                   1728:      lrc = 82;
                   1729:      if(prlc) printf(f,lrc);
                   1730:    }
                   1731:    ul = 5; fr = 2;
                   1732:    ul += fr;
                   1733:    if(ul != 7){
                   1734:      lrc = 83;
                   1735:      if(prlc) printf(f,lrc);
                   1736:    }
                   1737:    ul = 5; dr = 2;
                   1738:    ul += dr;
                   1739:    if(ul != 7){
                   1740:      lrc = 84;
                   1741:      if(prlc) printf(f,lrc);
                   1742:    }
                   1743:    fl = 5; cr = 2;
                   1744:    fl += cr;
                   1745:    if(fl != 7){
                   1746:      lrc = 85;
                   1747:      if(prlc) printf(f,lrc);
                   1748:    }
                   1749:    fl = 5; sr = 2;
                   1750:    fl += sr;
                   1751:    if(fl != 7){
                   1752:      lrc = 86;
                   1753:      if(prlc) printf(f,lrc);
                   1754:    }
                   1755:    fl = 5; ir = 2;
                   1756:    fl += ir;
                   1757:    if(fl != 7){
                   1758:      lrc = 87;
                   1759:      if(prlc) printf(f,lrc);
                   1760:    }
                   1761:    fl = 5; lr = 2;
                   1762:    fl += lr;
                   1763:    if(fl != 7){
                   1764:      lrc = 88;
                   1765:      if(prlc) printf(f,lrc);
                   1766:    }
                   1767:    fl = 5; ur = 2;
                   1768:    fl += ur;
                   1769:    if(fl != 7){
                   1770:      lrc = 89;
                   1771:      if(prlc) printf(f,lrc);
                   1772:    }
                   1773:    fl = 5; fr = 2;
                   1774:    fl += fr;
                   1775:    if(fl != 7){
                   1776:      lrc = 90;
                   1777:      if(prlc) printf(f,lrc);
                   1778:    }
                   1779:    fl = 5; dr = 2;
                   1780:    fl += dr;
                   1781:    if(fl != 7){
                   1782:      lrc = 91;
                   1783:      if(prlc) printf(f,lrc);
                   1784:    }
                   1785:    dl = 5; cr = 2;
                   1786:    dl += cr;
                   1787:    if(dl != 7){
                   1788:      lrc = 92;
                   1789:      if(prlc) printf(f,lrc);
                   1790:    }
                   1791:    dl = 5; sr = 2;
                   1792:    dl += sr;
                   1793:    if(dl != 7){
                   1794:      lrc = 93;
                   1795:      if(prlc) printf(f,lrc);
                   1796:    }
                   1797:    dl = 5; ir = 2;
                   1798:    dl += ir;
                   1799:    if(dl != 7){
                   1800:      lrc = 94;
                   1801:      if(prlc) printf(f,lrc);
                   1802:    }
                   1803:    dl = 5; lr = 2;
                   1804:    dl += lr;
                   1805:    if(dl != 7){
                   1806:      lrc = 95;
                   1807:      if(prlc) printf(f,lrc);
                   1808:    }
                   1809:    dl = 5; ur = 2;
                   1810:    dl += ur;
                   1811:    if(dl != 7){
                   1812:      lrc = 96;
                   1813:      if(prlc) printf(f,lrc);
                   1814:    }
                   1815:    dl = 5; fr = 2;
                   1816:    dl += fr;
                   1817:    if(dl != 7){
                   1818:      lrc = 97;
                   1819:      if(prlc) printf(f,lrc);
                   1820:    }
                   1821:    dl = 5; dr = 2;
                   1822:    dl += dr;
                   1823:    if(dl != 7){
                   1824:      lrc = 98;
                   1825:      if(prlc) printf(f,lrc);
                   1826:    }
                   1827:    cl = 5; cr = 2;
                   1828:    cl -= cr;
                   1829:    if(cl != 3){
                   1830:      lrc = 99;
                   1831:      if(prlc) printf(f,lrc);
                   1832:    }
                   1833:    cl = 5; sr = 2;
                   1834:    cl -= sr;
                   1835:    if(cl != 3){
                   1836:      lrc = 100;
                   1837:      if(prlc) printf(f,lrc);
                   1838:    }
                   1839:    cl = 5; ir = 2;
                   1840:    cl -= ir;
                   1841:    if(cl != 3){
                   1842:      lrc = 101;
                   1843:      if(prlc) printf(f,lrc);
                   1844:    }
                   1845:    cl = 5; lr = 2;
                   1846:    cl -= lr;
                   1847:    if(cl != 3){
                   1848:      lrc = 102;
                   1849:      if(prlc) printf(f,lrc);
                   1850:    }
                   1851:    cl = 5; ur = 2;
                   1852:    cl -= ur;
                   1853:    if(cl != 3){
                   1854:      lrc = 103;
                   1855:      if(prlc) printf(f,lrc);
                   1856:    }
                   1857:    cl = 5; fr = 2;
                   1858:    cl -= fr;
                   1859:    if(cl != 3){
                   1860:      lrc = 104;
                   1861:      if(prlc) printf(f,lrc);
                   1862:    }
                   1863:    cl = 5; dr = 2;
                   1864:    cl -= dr;
                   1865:    if(cl != 3){
                   1866:      lrc = 105;
                   1867:      if(prlc) printf(f,lrc);
                   1868:    }
                   1869:    sl = 5; cr = 2;
                   1870:    sl -= cr;
                   1871:    if(sl != 3){
                   1872:      lrc = 106;
                   1873:      if(prlc) printf(f,lrc);
                   1874:    }
                   1875:    sl = 5; sr = 2;
                   1876:    sl -= sr;
                   1877:    if(sl != 3){
                   1878:      lrc = 107;
                   1879:      if(prlc) printf(f,lrc);
                   1880:    }
                   1881:    sl = 5; ir = 2;
                   1882:    sl -= ir;
                   1883:    if(sl != 3){
                   1884:      lrc = 108;
                   1885:      if(prlc) printf(f,lrc);
                   1886:    }
                   1887:    sl = 5; lr = 2;
                   1888:    sl -= lr;
                   1889:    if(sl != 3){
                   1890:      lrc = 109;
                   1891:      if(prlc) printf(f,lrc);
                   1892:    }
                   1893:    sl = 5; ur = 2;
                   1894:    sl -= ur;
                   1895:    if(sl != 3){
                   1896:      lrc = 110;
                   1897:      if(prlc) printf(f,lrc);
                   1898:    }
                   1899:    sl = 5; fr = 2;
                   1900:    sl -= fr;
                   1901:    if(sl != 3){
                   1902:      lrc = 111;
                   1903:      if(prlc) printf(f,lrc);
                   1904:    }
                   1905:    sl = 5; dr = 2;
                   1906:    sl -= dr;
                   1907:    if(sl != 3){
                   1908:      lrc = 112;
                   1909:      if(prlc) printf(f,lrc);
                   1910:    }
                   1911:    il = 5; cr = 2;
                   1912:    il -= cr;
                   1913:    if(il != 3){
                   1914:      lrc = 113;
                   1915:      if(prlc) printf(f,lrc);
                   1916:    }
                   1917:    il = 5; sr = 2;
                   1918:    il -= sr;
                   1919:    if(il != 3){
                   1920:      lrc = 114;
                   1921:      if(prlc) printf(f,lrc);
                   1922:    }
                   1923:    il = 5; ir = 2;
                   1924:    il -= ir;
                   1925:    if(il != 3){
                   1926:      lrc = 115;
                   1927:      if(prlc) printf(f,lrc);
                   1928:    }
                   1929:    il = 5; lr = 2;
                   1930:    il -= lr;
                   1931:    if(il != 3){
                   1932:      lrc = 116;
                   1933:      if(prlc) printf(f,lrc);
                   1934:    }
                   1935:    il = 5; ur = 2;
                   1936:    il -= ur;
                   1937:    if(il != 3){
                   1938:      lrc = 117;
                   1939:      if(prlc) printf(f,lrc);
                   1940:    }
                   1941:    il = 5; fr = 2;
                   1942:    il -= fr;
                   1943:    if(il != 3){
                   1944:      lrc = 118;
                   1945:      if(prlc) printf(f,lrc);
                   1946:    }
                   1947:    il = 5; dr = 2;
                   1948:    il -= dr;
                   1949:    if(il != 3){
                   1950:      lrc = 119;
                   1951:      if(prlc) printf(f,lrc);
                   1952:    }
                   1953:    ll = 5; cr = 2;
                   1954:    ll -= cr;
                   1955:    if(ll != 3){
                   1956:      lrc = 120;
                   1957:      if(prlc) printf(f,lrc);
                   1958:    }
                   1959:    ll = 5; sr = 2;
                   1960:    ll -= sr;
                   1961:    if(ll != 3){
                   1962:      lrc = 121;
                   1963:      if(prlc) printf(f,lrc);
                   1964:    }
                   1965:    ll = 5; ir = 2;
                   1966:    ll -= ir;
                   1967:    if(ll != 3){
                   1968:      lrc = 122;
                   1969:      if(prlc) printf(f,lrc);
                   1970:    }
                   1971:    ll = 5; lr = 2;
                   1972:    ll -= lr;
                   1973:    if(ll != 3){
                   1974:      lrc = 123;
                   1975:      if(prlc) printf(f,lrc);
                   1976:    }
                   1977:    ll = 5; ur = 2;
                   1978:    ll -= ur;
                   1979:    if(ll != 3){
                   1980:      lrc = 124;
                   1981:      if(prlc) printf(f,lrc);
                   1982:    }
                   1983:    ll = 5; fr = 2;
                   1984:    ll -= fr;
                   1985:    if(ll != 3){
                   1986:      lrc = 125;
                   1987:      if(prlc) printf(f,lrc);
                   1988:    }
                   1989:    ll = 5; dr = 2;
                   1990:    ll -= dr;
                   1991:    if(ll != 3){
                   1992:      lrc = 126;
                   1993:      if(prlc) printf(f,lrc);
                   1994:    }
                   1995:    ul = 5; cr = 2;
                   1996:    ul -= cr;
                   1997:    if(ul != 3){
                   1998:      lrc = 127;
                   1999:      if(prlc) printf(f,lrc);
                   2000:    }
                   2001:    ul = 5; sr = 2;
                   2002:    ul -= sr;
                   2003:    if(ul != 3){
                   2004:      lrc = 128;
                   2005:      if(prlc) printf(f,lrc);
                   2006:    }
                   2007:    ul = 5; ir = 2;
                   2008:    ul -= ir;
                   2009:    if(ul != 3){
                   2010:      lrc = 129;
                   2011:      if(prlc) printf(f,lrc);
                   2012:    }
                   2013:    ul = 5; lr = 2;
                   2014:    ul -= lr;
                   2015:    if(ul != 3){
                   2016:      lrc = 130;
                   2017:      if(prlc) printf(f,lrc);
                   2018:    }
                   2019:    ul = 5; ur = 2;
                   2020:    ul -= ur;
                   2021:    if(ul != 3){
                   2022:      lrc = 131;
                   2023:      if(prlc) printf(f,lrc);
                   2024:    }
                   2025:    ul = 5; fr = 2;
                   2026:    ul -= fr;
                   2027:    if(ul != 3){
                   2028:      lrc = 132;
                   2029:      if(prlc) printf(f,lrc);
                   2030:    }
                   2031:    ul = 5; dr = 2;
                   2032:    ul -= dr;
                   2033:    if(ul != 3){
                   2034:      lrc = 133;
                   2035:      if(prlc) printf(f,lrc);
                   2036:    }
                   2037:    fl = 5; cr = 2;
                   2038:    fl -= cr;
                   2039:    if(fl != 3){
                   2040:      lrc = 134;
                   2041:      if(prlc) printf(f,lrc);
                   2042:    }
                   2043:    fl = 5; sr = 2;
                   2044:    fl -= sr;
                   2045:    if(fl != 3){
                   2046:      lrc = 135;
                   2047:      if(prlc) printf(f,lrc);
                   2048:    }
                   2049:    fl = 5; ir = 2;
                   2050:    fl -= ir;
                   2051:    if(fl != 3){
                   2052:      lrc = 136;
                   2053:      if(prlc) printf(f,lrc);
                   2054:    }
                   2055:    fl = 5; lr = 2;
                   2056:    fl -= lr;
                   2057:    if(fl != 3){
                   2058:      lrc = 137;
                   2059:      if(prlc) printf(f,lrc);
                   2060:    }
                   2061:    fl = 5; ur = 2;
                   2062:    fl -= ur;
                   2063:    if(fl != 3){
                   2064:      lrc = 138;
                   2065:      if(prlc) printf(f,lrc);
                   2066:    }
                   2067:    fl = 5; fr = 2;
                   2068:    fl -= fr;
                   2069:    if(fl != 3){
                   2070:      lrc = 139;
                   2071:      if(prlc) printf(f,lrc);
                   2072:    }
                   2073:    fl = 5; dr = 2;
                   2074:    fl -= dr;
                   2075:    if(fl != 3){
                   2076:      lrc = 140;
                   2077:      if(prlc) printf(f,lrc);
                   2078:    }
                   2079:    dl = 5; cr = 2;
                   2080:    dl -= cr;
                   2081:    if(dl != 3){
                   2082:      lrc = 141;
                   2083:      if(prlc) printf(f,lrc);
                   2084:    }
                   2085:    dl = 5; sr = 2;
                   2086:    dl -= sr;
                   2087:    if(dl != 3){
                   2088:      lrc = 142;
                   2089:      if(prlc) printf(f,lrc);
                   2090:    }
                   2091:    dl = 5; ir = 2;
                   2092:    dl -= ir;
                   2093:    if(dl != 3){
                   2094:      lrc = 143;
                   2095:      if(prlc) printf(f,lrc);
                   2096:    }
                   2097:    dl = 5; lr = 2;
                   2098:    dl -= lr;
                   2099:    if(dl != 3){
                   2100:      lrc = 144;
                   2101:      if(prlc) printf(f,lrc);
                   2102:    }
                   2103:    dl = 5; ur = 2;
                   2104:    dl -= ur;
                   2105:    if(dl != 3){
                   2106:      lrc = 145;
                   2107:      if(prlc) printf(f,lrc);
                   2108:    }
                   2109:    dl = 5; fr = 2;
                   2110:    dl -= fr;
                   2111:    if(dl != 3){
                   2112:      lrc = 146;
                   2113:      if(prlc) printf(f,lrc);
                   2114:    }
                   2115:    dl = 5; dr = 2;
                   2116:    dl -= dr;
                   2117:    if(dl != 3){
                   2118:      lrc = 147;
                   2119:      if(prlc) printf(f,lrc);
                   2120:    }
                   2121:    cl = 5; cr = 2;
                   2122:    cl *= cr;
                   2123:    if(cl != 10){
                   2124:      lrc = 148;
                   2125:      if(prlc) printf(f,lrc);
                   2126:    }
                   2127:    cl = 5; sr = 2;
                   2128:    cl *= sr;
                   2129:    if(cl != 10){
                   2130:      lrc = 149;
                   2131:      if(prlc) printf(f,lrc);
                   2132:    }
                   2133:    cl = 5; ir = 2;
                   2134:    cl *= ir;
                   2135:    if(cl != 10){
                   2136:      lrc = 150;
                   2137:      if(prlc) printf(f,lrc);
                   2138:    }
                   2139:    cl = 5; lr = 2;
                   2140:    cl *= lr;
                   2141:    if(cl != 10){
                   2142:      lrc = 151;
                   2143:      if(prlc) printf(f,lrc);
                   2144:    }
                   2145:    cl = 5; ur = 2;
                   2146:    cl *= ur;
                   2147:    if(cl != 10){
                   2148:      lrc = 152;
                   2149:      if(prlc) printf(f,lrc);
                   2150:    }
                   2151:    cl = 5; fr = 2;
                   2152:    cl *= fr;
                   2153:    if(cl != 10){
                   2154:      lrc = 153;
                   2155:      if(prlc) printf(f,lrc);
                   2156:    }
                   2157:    cl = 5; dr = 2;
                   2158:    cl *= dr;
                   2159:    if(cl != 10){
                   2160:      lrc = 154;
                   2161:      if(prlc) printf(f,lrc);
                   2162:    }
                   2163:    sl = 5; cr = 2;
                   2164:    sl *= cr;
                   2165:    if(sl != 10){
                   2166:      lrc = 155;
                   2167:      if(prlc) printf(f,lrc);
                   2168:    }
                   2169:    sl = 5; sr = 2;
                   2170:    sl *= sr;
                   2171:    if(sl != 10){
                   2172:      lrc = 156;
                   2173:      if(prlc) printf(f,lrc);
                   2174:    }
                   2175:    sl = 5; ir = 2;
                   2176:    sl *= ir;
                   2177:    if(sl != 10){
                   2178:      lrc = 157;
                   2179:      if(prlc) printf(f,lrc);
                   2180:    }
                   2181:    sl = 5; lr = 2;
                   2182:    sl *= lr;
                   2183:    if(sl != 10){
                   2184:      lrc = 158;
                   2185:      if(prlc) printf(f,lrc);
                   2186:    }
                   2187:    sl = 5; ur = 2;
                   2188:    sl *= ur;
                   2189:    if(sl != 10){
                   2190:      lrc = 159;
                   2191:      if(prlc) printf(f,lrc);
                   2192:    }
                   2193:    sl = 5; fr = 2;
                   2194:    sl *= fr;
                   2195:    if(sl != 10){
                   2196:      lrc = 160;
                   2197:      if(prlc) printf(f,lrc);
                   2198:    }
                   2199:    sl = 5; dr = 2;
                   2200:    sl *= dr;
                   2201:    if(sl != 10){
                   2202:      lrc = 161;
                   2203:      if(prlc) printf(f,lrc);
                   2204:    }
                   2205:    il = 5; cr = 2;
                   2206:    il *= cr;
                   2207:    if(il != 10){
                   2208:      lrc = 162;
                   2209:      if(prlc) printf(f,lrc);
                   2210:    }
                   2211:    il = 5; sr = 2;
                   2212:    il *= sr;
                   2213:    if(il != 10){
                   2214:      lrc = 163;
                   2215:      if(prlc) printf(f,lrc);
                   2216:    }
                   2217:    il = 5; ir = 2;
                   2218:    il *= ir;
                   2219:    if(il != 10){
                   2220:      lrc = 164;
                   2221:      if(prlc) printf(f,lrc);
                   2222:    }
                   2223:    il = 5; lr = 2;
                   2224:    il *= lr;
                   2225:    if(il != 10){
                   2226:      lrc = 165;
                   2227:      if(prlc) printf(f,lrc);
                   2228:    }
                   2229:    il = 5; ur = 2;
                   2230:    il *= ur;
                   2231:    if(il != 10){
                   2232:      lrc = 166;
                   2233:      if(prlc) printf(f,lrc);
                   2234:    }
                   2235:    il = 5; fr = 2;
                   2236:    il *= fr;
                   2237:    if(il != 10){
                   2238:      lrc = 167;
                   2239:      if(prlc) printf(f,lrc);
                   2240:    }
                   2241:    il = 5; dr = 2;
                   2242:    il *= dr;
                   2243:    if(il != 10){
                   2244:      lrc = 168;
                   2245:      if(prlc) printf(f,lrc);
                   2246:    }
                   2247:    ll = 5; cr = 2;
                   2248:    ll *= cr;
                   2249:    if(ll != 10){
                   2250:      lrc = 169;
                   2251:      if(prlc) printf(f,lrc);
                   2252:    }
                   2253:    ll = 5; sr = 2;
                   2254:    ll *= sr;
                   2255:    if(ll != 10){
                   2256:      lrc = 170;
                   2257:      if(prlc) printf(f,lrc);
                   2258:    }
                   2259:    ll = 5; ir = 2;
                   2260:    ll *= ir;
                   2261:    if(ll != 10){
                   2262:      lrc = 171;
                   2263:      if(prlc) printf(f,lrc);
                   2264:    }
                   2265:    ll = 5; lr = 2;
                   2266:    ll *= lr;
                   2267:    if(ll != 10){
                   2268:      lrc = 172;
                   2269:      if(prlc) printf(f,lrc);
                   2270:    }
                   2271:    ll = 5; ur = 2;
                   2272:    ll *= ur;
                   2273:    if(ll != 10){
                   2274:      lrc = 173;
                   2275:      if(prlc) printf(f,lrc);
                   2276:    }
                   2277:    ll = 5; fr = 2;
                   2278:    ll *= fr;
                   2279:    if(ll != 10){
                   2280:      lrc = 174;
                   2281:      if(prlc) printf(f,lrc);
                   2282:    }
                   2283:    ll = 5; dr = 2;
                   2284:    ll *= dr;
                   2285:    if(ll != 10){
                   2286:      lrc = 175;
                   2287:      if(prlc) printf(f,lrc);
                   2288:    }
                   2289:    ul = 5; cr = 2;
                   2290:    ul *= cr;
                   2291:    if(ul != 10){
                   2292:      lrc = 176;
                   2293:      if(prlc) printf(f,lrc);
                   2294:    }
                   2295:    ul = 5; sr = 2;
                   2296:    ul *= sr;
                   2297:    if(ul != 10){
                   2298:      lrc = 177;
                   2299:      if(prlc) printf(f,lrc);
                   2300:    }
                   2301:    ul = 5; ir = 2;
                   2302:    ul *= ir;
                   2303:    if(ul != 10){
                   2304:      lrc = 178;
                   2305:      if(prlc) printf(f,lrc);
                   2306:    }
                   2307:    ul = 5; lr = 2;
                   2308:    ul *= lr;
                   2309:    if(ul != 10){
                   2310:      lrc = 179;
                   2311:      if(prlc) printf(f,lrc);
                   2312:    }
                   2313:    ul = 5; ur = 2;
                   2314:    ul *= ur;
                   2315:    if(ul != 10){
                   2316:      lrc = 180;
                   2317:      if(prlc) printf(f,lrc);
                   2318:    }
                   2319:    ul = 5; fr = 2;
                   2320:    ul *= fr;
                   2321:    if(ul != 10){
                   2322:      lrc = 181;
                   2323:      if(prlc) printf(f,lrc);
                   2324:    }
                   2325:    ul = 5; dr = 2;
                   2326:    ul *= dr;
                   2327:    if(ul != 10){
                   2328:      lrc = 182;
                   2329:      if(prlc) printf(f,lrc);
                   2330:    }
                   2331:    fl = 5; cr = 2;
                   2332:    fl *= cr;
                   2333:    if(fl != 10){
                   2334:      lrc = 183;
                   2335:      if(prlc) printf(f,lrc);
                   2336:    }
                   2337:    fl = 5; sr = 2;
                   2338:    fl *= sr;
                   2339:    if(fl != 10){
                   2340:      lrc = 184;
                   2341:      if(prlc) printf(f,lrc);
                   2342:    }
                   2343:    fl = 5; ir = 2;
                   2344:    fl *= ir;
                   2345:    if(fl != 10){
                   2346:      lrc = 185;
                   2347:      if(prlc) printf(f,lrc);
                   2348:    }
                   2349:    fl = 5; lr = 2;
                   2350:    fl *= lr;
                   2351:    if(fl != 10){
                   2352:      lrc = 186;
                   2353:      if(prlc) printf(f,lrc);
                   2354:    }
                   2355:    fl = 5; ur = 2;
                   2356:    fl *= ur;
                   2357:    if(fl != 10){
                   2358:      lrc = 187;
                   2359:      if(prlc) printf(f,lrc);
                   2360:    }
                   2361:    fl = 5; fr = 2;
                   2362:    fl *= fr;
                   2363:    if(fl != 10){
                   2364:      lrc = 188;
                   2365:      if(prlc) printf(f,lrc);
                   2366:    }
                   2367:    fl = 5; dr = 2;
                   2368:    fl *= dr;
                   2369:    if(fl != 10){
                   2370:      lrc = 189;
                   2371:      if(prlc) printf(f,lrc);
                   2372:    }
                   2373:    dl = 5; cr = 2;
                   2374:    dl *= cr;
                   2375:    if(dl != 10){
                   2376:      lrc = 190;
                   2377:      if(prlc) printf(f,lrc);
                   2378:    }
                   2379:    dl = 5; sr = 2;
                   2380:    dl *= sr;
                   2381:    if(dl != 10){
                   2382:      lrc = 191;
                   2383:      if(prlc) printf(f,lrc);
                   2384:    }
                   2385:    dl = 5; ir = 2;
                   2386:    dl *= ir;
                   2387:    if(dl != 10){
                   2388:      lrc = 192;
                   2389:      if(prlc) printf(f,lrc);
                   2390:    }
                   2391:    dl = 5; lr = 2;
                   2392:    dl *= lr;
                   2393:    if(dl != 10){
                   2394:      lrc = 193;
                   2395:      if(prlc) printf(f,lrc);
                   2396:    }
                   2397:    dl = 5; ur = 2;
                   2398:    dl *= ur;
                   2399:    if(dl != 10){
                   2400:      lrc = 194;
                   2401:      if(prlc) printf(f,lrc);
                   2402:    }
                   2403:    dl = 5; fr = 2;
                   2404:    dl *= fr;
                   2405:    if(dl != 10){
                   2406:      lrc = 195;
                   2407:      if(prlc) printf(f,lrc);
                   2408:    }
                   2409:    dl = 5; dr = 2;
                   2410:    dl *= dr;
                   2411:    if(dl != 10){
                   2412:      lrc = 196;
                   2413:      if(prlc) printf(f,lrc);
                   2414:    }
                   2415:    cl = 5; cr = 2;
                   2416:    cl /= cr;
                   2417:    if(cl != 2){
                   2418:      lrc = 197;
                   2419:      if(prlc) printf(f,lrc);
                   2420:    }
                   2421:    cl = 5; sr = 2;
                   2422:    cl /= sr;
                   2423:    if(cl != 2){
                   2424:      lrc = 198;
                   2425:      if(prlc) printf(f,lrc);
                   2426:    }
                   2427:    cl = 5; ir = 2;
                   2428:    cl /= ir;
                   2429:    if(cl != 2){
                   2430:      lrc = 199;
                   2431:      if(prlc) printf(f,lrc);
                   2432:    }
                   2433:    cl = 5; lr = 2;
                   2434:    cl /= lr;
                   2435:    if(cl != 2){
                   2436:      lrc = 200;
                   2437:      if(prlc) printf(f,lrc);
                   2438:    }
                   2439:    cl = 5; ur = 2;
                   2440:    cl /= ur;
                   2441:    if(cl != 2){
                   2442:      lrc = 201;
                   2443:      if(prlc) printf(f,lrc);
                   2444:    }
                   2445:    cl = 5; fr = 2;
                   2446:    cl /= fr;
                   2447:    if(cl != 2){
                   2448:      lrc = 202;
                   2449:      if(prlc) printf(f,lrc);
                   2450:    }
                   2451:    cl = 5; dr = 2;
                   2452:    cl /= dr;
                   2453:    if(cl != 2){
                   2454:      lrc = 203;
                   2455:      if(prlc) printf(f,lrc);
                   2456:    }
                   2457:    sl = 5; cr = 2;
                   2458:    sl /= cr;
                   2459:    if(sl != 2){
                   2460:      lrc = 204;
                   2461:      if(prlc) printf(f,lrc);
                   2462:    }
                   2463:    sl = 5; sr = 2;
                   2464:    sl /= sr;
                   2465:    if(sl != 2){
                   2466:      lrc = 205;
                   2467:      if(prlc) printf(f,lrc);
                   2468:    }
                   2469:    sl = 5; ir = 2;
                   2470:    sl /= ir;
                   2471:    if(sl != 2){
                   2472:      lrc = 206;
                   2473:      if(prlc) printf(f,lrc);
                   2474:    }
                   2475:    sl = 5; lr = 2;
                   2476:    sl /= lr;
                   2477:    if(sl != 2){
                   2478:      lrc = 207;
                   2479:      if(prlc) printf(f,lrc);
                   2480:    }
                   2481:    sl = 5; ur = 2;
                   2482:    sl /= ur;
                   2483:    if(sl != 2){
                   2484:      lrc = 208;
                   2485:      if(prlc) printf(f,lrc);
                   2486:    }
                   2487:    sl = 5; fr = 2;
                   2488:    sl /= fr;
                   2489:    if(sl != 2){
                   2490:      lrc = 209;
                   2491:      if(prlc) printf(f,lrc);
                   2492:    }
                   2493:    sl = 5; dr = 2;
                   2494:    sl /= dr;
                   2495:    if(sl != 2){
                   2496:      lrc = 210;
                   2497:      if(prlc) printf(f,lrc);
                   2498:    }
                   2499:    il = 5; cr = 2;
                   2500:    il /= cr;
                   2501:    if(il != 2){
                   2502:      lrc = 211;
                   2503:      if(prlc) printf(f,lrc);
                   2504:    }
                   2505:    il = 5; sr = 2;
                   2506:    il /= sr;
                   2507:    if(il != 2){
                   2508:      lrc = 212;
                   2509:      if(prlc) printf(f,lrc);
                   2510:    }
                   2511:    il = 5; ir = 2;
                   2512:    il /= ir;
                   2513:    if(il != 2){
                   2514:      lrc = 213;
                   2515:      if(prlc) printf(f,lrc);
                   2516:    }
                   2517:    il = 5; lr = 2;
                   2518:    il /= lr;
                   2519:    if(il != 2){
                   2520:      lrc = 214;
                   2521:      if(prlc) printf(f,lrc);
                   2522:    }
                   2523:    il = 5; ur = 2;
                   2524:    il /= ur;
                   2525:    if(il != 2){
                   2526:      lrc = 215;
                   2527:      if(prlc) printf(f,lrc);
                   2528:    }
                   2529:    il = 5; fr = 2;
                   2530:    il /= fr;
                   2531:    if(il != 2){
                   2532:      lrc = 216;
                   2533:      if(prlc) printf(f,lrc);
                   2534:    }
                   2535:    il = 5; dr = 2;
                   2536:    il /= dr;
                   2537:    if(il != 2){
                   2538:      lrc = 217;
                   2539:      if(prlc) printf(f,lrc);
                   2540:    }
                   2541:    ll = 5; cr = 2;
                   2542:    ll /= cr;
                   2543:    if(ll != 2){
                   2544:      lrc = 218;
                   2545:      if(prlc) printf(f,lrc);
                   2546:    }
                   2547:    ll = 5; sr = 2;
                   2548:    ll /= sr;
                   2549:    if(ll != 2){
                   2550:      lrc = 219;
                   2551:      if(prlc) printf(f,lrc);
                   2552:    }
                   2553:    ll = 5; ir = 2;
                   2554:    ll /= ir;
                   2555:    if(ll != 2){
                   2556:      lrc = 220;
                   2557:      if(prlc) printf(f,lrc);
                   2558:    }
                   2559:    ll = 5; lr = 2;
                   2560:    ll /= lr;
                   2561:    if(ll != 2){
                   2562:      lrc = 221;
                   2563:      if(prlc) printf(f,lrc);
                   2564:    }
                   2565:    ll = 5; ur = 2;
                   2566:    ll /= ur;
                   2567:    if(ll != 2){
                   2568:      lrc = 222;
                   2569:      if(prlc) printf(f,lrc);
                   2570:    }
                   2571:    ll = 5; fr = 2;
                   2572:    ll /= fr;
                   2573:    if(ll != 2){
                   2574:      lrc = 223;
                   2575:      if(prlc) printf(f,lrc);
                   2576:    }
                   2577:    ll = 5; dr = 2;
                   2578:    ll /= dr;
                   2579:    if(ll != 2){
                   2580:      lrc = 224;
                   2581:      if(prlc) printf(f,lrc);
                   2582:    }
                   2583:    ul = 5; cr = 2;
                   2584:    ul /= cr;
                   2585:    if(ul != 2){
                   2586:      lrc = 225;
                   2587:      if(prlc) printf(f,lrc);
                   2588:    }
                   2589:    ul = 5; sr = 2;
                   2590:    ul /= sr;
                   2591:    if(ul != 2){
                   2592:      lrc = 226;
                   2593:      if(prlc) printf(f,lrc);
                   2594:    }
                   2595:    ul = 5; ir = 2;
                   2596:    ul /= ir;
                   2597:    if(ul != 2){
                   2598:      lrc = 227;
                   2599:      if(prlc) printf(f,lrc);
                   2600:    }
                   2601:    ul = 5; lr = 2;
                   2602:    ul /= lr;
                   2603:    if(ul != 2){
                   2604:      lrc = 228;
                   2605:      if(prlc) printf(f,lrc);
                   2606:    }
                   2607:    ul = 5; ur = 2;
                   2608:    ul /= ur;
                   2609:    if(ul != 2){
                   2610:      lrc = 229;
                   2611:      if(prlc) printf(f,lrc);
                   2612:    }
                   2613:    ul = 5; fr = 2;
                   2614:    ul /= fr;
                   2615:    if(ul != 2){
                   2616:      lrc = 230;
                   2617:      if(prlc) printf(f,lrc);
                   2618:    }
                   2619:    ul = 5; dr = 2;
                   2620:    ul /= dr;
                   2621:    if(ul != 2){
                   2622:      lrc = 231;
                   2623:      if(prlc) printf(f,lrc);
                   2624:    }
                   2625:    fl = 5; cr = 2;
                   2626:    fl /= cr;
                   2627:    if(fl != 2.5){
                   2628:      lrc = 232;
                   2629:      if(prlc) printf(f,lrc);
                   2630:    }
                   2631:    fl = 5; sr = 2;
                   2632:    fl /= sr;
                   2633:    if(fl != 2.5){
                   2634:      lrc = 233;
                   2635:      if(prlc) printf(f,lrc);
                   2636:    }
                   2637:    fl = 5; ir = 2;
                   2638:    fl /= ir;
                   2639:    if(fl != 2.5){
                   2640:      lrc = 234;
                   2641:      if(prlc) printf(f,lrc);
                   2642:    }
                   2643:    fl = 5; lr = 2;
                   2644:    fl /= lr;
                   2645:    if(fl != 2.5){
                   2646:      lrc = 235;
                   2647:      if(prlc) printf(f,lrc);
                   2648:    }
                   2649:    fl = 5; ur = 2;
                   2650:    fl /= ur;
                   2651:    if(fl != 2.5){
                   2652:      lrc = 236;
                   2653:      if(prlc) printf(f,lrc);
                   2654:    }
                   2655:    fl = 5; fr = 2;
                   2656:    fl /= fr;
                   2657:    if(fl != 2.5){
                   2658:      lrc = 237;
                   2659:      if(prlc) printf(f,lrc);
                   2660:    }
                   2661:    fl = 5; dr = 2;
                   2662:    fl /= dr;
                   2663:    if(fl != 2.5){
                   2664:      lrc = 238;
                   2665:      if(prlc) printf(f,lrc);
                   2666:    }
                   2667:    dl = 5; cr = 2;
                   2668:    dl /= cr;
                   2669:    if(dl != 2.5){
                   2670:      lrc = 239;
                   2671:      if(prlc) printf(f,lrc);
                   2672:    }
                   2673:    dl = 5; sr = 2;
                   2674:    dl /= sr;
                   2675:    if(dl != 2.5){
                   2676:      lrc = 240;
                   2677:      if(prlc) printf(f,lrc);
                   2678:    }
                   2679:    dl = 5; ir = 2;
                   2680:    dl /= ir;
                   2681:    if(dl != 2.5){
                   2682:      lrc = 241;
                   2683:      if(prlc) printf(f,lrc);
                   2684:    }
                   2685:    dl = 5; lr = 2;
                   2686:    dl /= lr;
                   2687:    if(dl != 2.5){
                   2688:      lrc = 242;
                   2689:      if(prlc) printf(f,lrc);
                   2690:    }
                   2691:    dl = 5; ur = 2;
                   2692:    dl /= ur;
                   2693:    if(dl != 2.5){
                   2694:      lrc = 243;
                   2695:      if(prlc) printf(f,lrc);
                   2696:    }
                   2697:    dl = 5; fr = 2;
                   2698:    dl /= fr;
                   2699:    if(dl != 2.5){
                   2700:      lrc = 244;
                   2701:      if(prlc) printf(f,lrc);
                   2702:    }
                   2703:    dl = 5; dr = 2;
                   2704:    dl /= dr;
                   2705:    if(dl != 2.5){
                   2706:      lrc = 245;
                   2707:      if(prlc) printf(f,lrc);
                   2708:    }
                   2709:    cl = 5; cr = 2;
                   2710:    cl %= cr;
                   2711:    if(cl != 1){
                   2712:      lrc = 246;
                   2713:      if(prlc) printf(f,lrc);
                   2714:    }
                   2715:    cl = 5; sr = 2;
                   2716:    cl %= sr;
                   2717:    if(cl != 1){
                   2718:      lrc = 247;
                   2719:      if(prlc) printf(f,lrc);
                   2720:    }
                   2721:    cl = 5; ir = 2;
                   2722:    cl %= ir;
                   2723:    if(cl != 1){
                   2724:      lrc = 248;
                   2725:      if(prlc) printf(f,lrc);
                   2726:    }
                   2727:    cl = 5; lr = 2;
                   2728:    cl %= lr;
                   2729:    if(cl != 1){
                   2730:      lrc = 249;
                   2731:      if(prlc) printf(f,lrc);
                   2732:    }
                   2733:    cl = 5; ur = 2;
                   2734:    cl %= ur;
                   2735:    if(cl != 1){
                   2736:      lrc = 250;
                   2737:      if(prlc) printf(f,lrc);
                   2738:    }
                   2739:    sl = 5; cr = 2;
                   2740:    sl %= cr;
                   2741:    if(sl != 1){
                   2742:      lrc = 251;
                   2743:      if(prlc) printf(f,lrc);
                   2744:    }
                   2745:    sl = 5; sr = 2;
                   2746:    sl %= sr;
                   2747:    if(sl != 1){
                   2748:      lrc = 252;
                   2749:      if(prlc) printf(f,lrc);
                   2750:    }
                   2751:    sl = 5; ir = 2;
                   2752:    sl %= ir;
                   2753:    if(sl != 1){
                   2754:      lrc = 253;
                   2755:      if(prlc) printf(f,lrc);
                   2756:    }
                   2757:    sl = 5; lr = 2;
                   2758:    sl %= lr;
                   2759:    if(sl != 1){
                   2760:      lrc = 254;
                   2761:      if(prlc) printf(f,lrc);
                   2762:    }
                   2763:    sl = 5; ur = 2;
                   2764:    sl %= ur;
                   2765:    if(sl != 1){
                   2766:      lrc = 255;
                   2767:      if(prlc) printf(f,lrc);
                   2768:    }
                   2769:    il = 5; cr = 2;
                   2770:    il %= cr;
                   2771:    if(il != 1){
                   2772:      lrc = 256;
                   2773:      if(prlc) printf(f,lrc);
                   2774:    }
                   2775:    il = 5; sr = 2;
                   2776:    il %= sr;
                   2777:    if(il != 1){
                   2778:      lrc = 257;
                   2779:      if(prlc) printf(f,lrc);
                   2780:    }
                   2781:    il = 5; ir = 2;
                   2782:    il %= ir;
                   2783:    if(il != 1){
                   2784:      lrc = 258;
                   2785:      if(prlc) printf(f,lrc);
                   2786:    }
                   2787:    il = 5; lr = 2;
                   2788:    il %= lr;
                   2789:    if(il != 1){
                   2790:      lrc = 259;
                   2791:      if(prlc) printf(f,lrc);
                   2792:    }
                   2793:    il = 5; ur = 2;
                   2794:    il %= ur;
                   2795:    if(il != 1){
                   2796:      lrc = 260;
                   2797:      if(prlc) printf(f,lrc);
                   2798:    }
                   2799:    ll = 5; cr = 2;
                   2800:    ll %= cr;
                   2801:    if(ll != 1){
                   2802:      lrc = 261;
                   2803:      if(prlc) printf(f,lrc);
                   2804:    }
                   2805:    ll = 5; sr = 2;
                   2806:    ll %= sr;
                   2807:    if(ll != 1){
                   2808:      lrc = 262;
                   2809:      if(prlc) printf(f,lrc);
                   2810:    }
                   2811:    ll = 5; ir = 2;
                   2812:    ll %= ir;
                   2813:    if(ll != 1){
                   2814:      lrc = 263;
                   2815:      if(prlc) printf(f,lrc);
                   2816:    }
                   2817:    ll = 5; lr = 2;
                   2818:    ll %= lr;
                   2819:    if(ll != 1){
                   2820:      lrc = 264;
                   2821:      if(prlc) printf(f,lrc);
                   2822:    }
                   2823:    ll = 5; ur = 2;
                   2824:    ll %= ur;
                   2825:    if(ll != 1){
                   2826:      lrc = 265;
                   2827:      if(prlc) printf(f,lrc);
                   2828:    }
                   2829:    ul = 5; cr = 2;
                   2830:    ul %= cr;
                   2831:    if(ul != 1){
                   2832:      lrc = 266;
                   2833:      if(prlc) printf(f,lrc);
                   2834:    }
                   2835:    ul = 5; sr = 2;
                   2836:    ul %= sr;
                   2837:    if(ul != 1){
                   2838:      lrc = 267;
                   2839:      if(prlc) printf(f,lrc);
                   2840:    }
                   2841:    ul = 5; ir = 2;
                   2842:    ul %= ir;
                   2843:    if(ul != 1){
                   2844:      lrc = 268;
                   2845:      if(prlc) printf(f,lrc);
                   2846:    }
                   2847:    ul = 5; lr = 2;
                   2848:    ul %= lr;
                   2849:    if(ul != 1){
                   2850:      lrc = 269;
                   2851:      if(prlc) printf(f,lrc);
                   2852:    }
                   2853:    ul = 5; ur = 2;
                   2854:    ul %= ur;
                   2855:    if(ul != 1){
                   2856:      lrc = 270;
                   2857:      if(prlc) printf(f,lrc);
                   2858:    }
                   2859:    cl = 5; cr = 2;
                   2860:    cl >>= cr;
                   2861:    if(cl != 1){
                   2862:      lrc = 271;
                   2863:      if(prlc) printf(f,lrc);
                   2864:    }
                   2865:    cl = 5; sr = 2;
                   2866:    cl >>= sr;
                   2867:    if(cl != 1){
                   2868:      lrc = 272;
                   2869:      if(prlc) printf(f,lrc);
                   2870:    }
                   2871:    cl = 5; ir = 2;
                   2872:    cl >>= ir;
                   2873:    if(cl != 1){
                   2874:      lrc = 273;
                   2875:      if(prlc) printf(f,lrc);
                   2876:    }
                   2877:    cl = 5; lr = 2;
                   2878:    cl >>= lr;
                   2879:    if(cl != 1){
                   2880:      lrc = 274;
                   2881:      if(prlc) printf(f,lrc);
                   2882:    }
                   2883:    cl = 5; ur = 2;
                   2884:    cl >>= ur;
                   2885:    if(cl != 1){
                   2886:      lrc = 275;
                   2887:      if(prlc) printf(f,lrc);
                   2888:    }
                   2889:    sl = 5; cr = 2;
                   2890:    sl >>= cr;
                   2891:    if(sl != 1){
                   2892:      lrc = 276;
                   2893:      if(prlc) printf(f,lrc);
                   2894:    }
                   2895:    sl = 5; sr = 2;
                   2896:    sl >>= sr;
                   2897:    if(sl != 1){
                   2898:      lrc = 277;
                   2899:      if(prlc) printf(f,lrc);
                   2900:    }
                   2901:    sl = 5; ir = 2;
                   2902:    sl >>= ir;
                   2903:    if(sl != 1){
                   2904:      lrc = 278;
                   2905:      if(prlc) printf(f,lrc);
                   2906:    }
                   2907:    sl = 5; lr = 2;
                   2908:    sl >>= lr;
                   2909:    if(sl != 1){
                   2910:      lrc = 279;
                   2911:      if(prlc) printf(f,lrc);
                   2912:    }
                   2913:    sl = 5; ur = 2;
                   2914:    sl >>= ur;
                   2915:    if(sl != 1){
                   2916:      lrc = 280;
                   2917:      if(prlc) printf(f,lrc);
                   2918:    }
                   2919:    il = 5; cr = 2;
                   2920:    il >>= cr;
                   2921:    if(il != 1){
                   2922:      lrc = 281;
                   2923:      if(prlc) printf(f,lrc);
                   2924:    }
                   2925:    il = 5; sr = 2;
                   2926:    il >>= sr;
                   2927:    if(il != 1){
                   2928:      lrc = 282;
                   2929:      if(prlc) printf(f,lrc);
                   2930:    }
                   2931:    il = 5; ir = 2;
                   2932:    il >>= ir;
                   2933:    if(il != 1){
                   2934:      lrc = 283;
                   2935:      if(prlc) printf(f,lrc);
                   2936:    }
                   2937:    il = 5; lr = 2;
                   2938:    il >>= lr;
                   2939:    if(il != 1){
                   2940:      lrc = 284;
                   2941:      if(prlc) printf(f,lrc);
                   2942:    }
                   2943:    il = 5; ur = 2;
                   2944:    il >>= ur;
                   2945:    if(il != 1){
                   2946:      lrc = 285;
                   2947:      if(prlc) printf(f,lrc);
                   2948:    }
                   2949:    ll = 5; cr = 2;
                   2950:    ll >>= cr;
                   2951:    if(ll != 1){
                   2952:      lrc = 286;
                   2953:      if(prlc) printf(f,lrc);
                   2954:    }
                   2955:    ll = 5; sr = 2;
                   2956:    ll >>= sr;
                   2957:    if(ll != 1){
                   2958:      lrc = 287;
                   2959:      if(prlc) printf(f,lrc);
                   2960:    }
                   2961:    ll = 5; ir = 2;
                   2962:    ll >>= ir;
                   2963:    if(ll != 1){
                   2964:      lrc = 288;
                   2965:      if(prlc) printf(f,lrc);
                   2966:    }
                   2967:    ll = 5; lr = 2;
                   2968:    ll >>= lr;
                   2969:    if(ll != 1){
                   2970:      lrc = 289;
                   2971:      if(prlc) printf(f,lrc);
                   2972:    }
                   2973:    ll = 5; ur = 2;
                   2974:    ll >>= ur;
                   2975:    if(ll != 1){
                   2976:      lrc = 290;
                   2977:      if(prlc) printf(f,lrc);
                   2978:    }
                   2979:    ul = 5; cr = 2;
                   2980:    ul >>= cr;
                   2981:    if(ul != 1){
                   2982:      lrc = 291;
                   2983:      if(prlc) printf(f,lrc);
                   2984:    }
                   2985:    ul = 5; sr = 2;
                   2986:    ul >>= sr;
                   2987:    if(ul != 1){
                   2988:      lrc = 292;
                   2989:      if(prlc) printf(f,lrc);
                   2990:    }
                   2991:    ul = 5; ir = 2;
                   2992:    ul >>= ir;
                   2993:    if(ul != 1){
                   2994:      lrc = 293;
                   2995:      if(prlc) printf(f,lrc);
                   2996:    }
                   2997:    ul = 5; lr = 2;
                   2998:    ul >>= lr;
                   2999:    if(ul != 1){
                   3000:      lrc = 294;
                   3001:      if(prlc) printf(f,lrc);
                   3002:    }
                   3003:    ul = 5; ur = 2;
                   3004:    ul >>= ur;
                   3005:    if(ul != 1){
                   3006:      lrc = 295;
                   3007:      if(prlc) printf(f,lrc);
                   3008:    }
                   3009:    cl = 5; cr = 2;
                   3010:    cl <<= cr;
                   3011:    if(cl != 20){
                   3012:      lrc = 296;
                   3013:      if(prlc) printf(f,lrc);
                   3014:    }
                   3015:    cl = 5; sr = 2;
                   3016:    cl <<= sr;
                   3017:    if(cl != 20){
                   3018:      lrc = 297;
                   3019:      if(prlc) printf(f,lrc);
                   3020:    }
                   3021:    cl = 5; ir = 2;
                   3022:    cl <<= ir;
                   3023:    if(cl != 20){
                   3024:      lrc = 298;
                   3025:      if(prlc) printf(f,lrc);
                   3026:    }
                   3027:    cl = 5; lr = 2;
                   3028:    cl <<= lr;
                   3029:    if(cl != 20){
                   3030:      lrc = 299;
                   3031:      if(prlc) printf(f,lrc);
                   3032:    }
                   3033:    cl = 5; ur = 2;
                   3034:    cl <<= ur;
                   3035:    if(cl != 20){
                   3036:      lrc = 300;
                   3037:      if(prlc) printf(f,lrc);
                   3038:    }
                   3039:    sl = 5; cr = 2;
                   3040:    sl <<= cr;
                   3041:    if(sl != 20){
                   3042:      lrc = 301;
                   3043:      if(prlc) printf(f,lrc);
                   3044:    }
                   3045:    sl = 5; sr = 2;
                   3046:    sl <<= sr;
                   3047:    if(sl != 20){
                   3048:      lrc = 302;
                   3049:      if(prlc) printf(f,lrc);
                   3050:    }
                   3051:    sl = 5; ir = 2;
                   3052:    sl <<= ir;
                   3053:    if(sl != 20){
                   3054:      lrc = 303;
                   3055:      if(prlc) printf(f,lrc);
                   3056:    }
                   3057:    sl = 5; lr = 2;
                   3058:    sl <<= lr;
                   3059:    if(sl != 20){
                   3060:      lrc = 304;
                   3061:      if(prlc) printf(f,lrc);
                   3062:    }
                   3063:    sl = 5; ur = 2;
                   3064:    sl <<= ur;
                   3065:    if(sl != 20){
                   3066:      lrc = 305;
                   3067:      if(prlc) printf(f,lrc);
                   3068:    }
                   3069:    il = 5; cr = 2;
                   3070:    il <<= cr;
                   3071:    if(il != 20){
                   3072:      lrc = 306;
                   3073:      if(prlc) printf(f,lrc);
                   3074:    }
                   3075:    il = 5; sr = 2;
                   3076:    il <<= sr;
                   3077:    if(il != 20){
                   3078:      lrc = 307;
                   3079:      if(prlc) printf(f,lrc);
                   3080:    }
                   3081:    il = 5; ir = 2;
                   3082:    il <<= ir;
                   3083:    if(il != 20){
                   3084:      lrc = 308;
                   3085:      if(prlc) printf(f,lrc);
                   3086:    }
                   3087:    il = 5; lr = 2;
                   3088:    il <<= lr;
                   3089:    if(il != 20){
                   3090:      lrc = 309;
                   3091:      if(prlc) printf(f,lrc);
                   3092:    }
                   3093:    il = 5; ur = 2;
                   3094:    il <<= ur;
                   3095:    if(il != 20){
                   3096:      lrc = 310;
                   3097:      if(prlc) printf(f,lrc);
                   3098:    }
                   3099:    ll = 5; cr = 2;
                   3100:    ll <<= cr;
                   3101:    if(ll != 20){
                   3102:      lrc = 311;
                   3103:      if(prlc) printf(f,lrc);
                   3104:    }
                   3105:    ll = 5; sr = 2;
                   3106:    ll <<= sr;
                   3107:    if(ll != 20){
                   3108:      lrc = 312;
                   3109:      if(prlc) printf(f,lrc);
                   3110:    }
                   3111:    ll = 5; ir = 2;
                   3112:    ll <<= ir;
                   3113:    if(ll != 20){
                   3114:      lrc = 313;
                   3115:      if(prlc) printf(f,lrc);
                   3116:    }
                   3117:    ll = 5; lr = 2;
                   3118:    ll <<= lr;
                   3119:    if(ll != 20){
                   3120:      lrc = 314;
                   3121:      if(prlc) printf(f,lrc);
                   3122:    }
                   3123:    ll = 5; ur = 2;
                   3124:    ll <<= ur;
                   3125:    if(ll != 20){
                   3126:      lrc = 315;
                   3127:      if(prlc) printf(f,lrc);
                   3128:    }
                   3129:    ul = 5; cr = 2;
                   3130:    ul <<= cr;
                   3131:    if(ul != 20){
                   3132:      lrc = 316;
                   3133:      if(prlc) printf(f,lrc);
                   3134:    }
                   3135:    ul = 5; sr = 2;
                   3136:    ul <<= sr;
                   3137:    if(ul != 20){
                   3138:      lrc = 317;
                   3139:      if(prlc) printf(f,lrc);
                   3140:    }
                   3141:    ul = 5; ir = 2;
                   3142:    ul <<= ir;
                   3143:    if(ul != 20){
                   3144:      lrc = 318;
                   3145:      if(prlc) printf(f,lrc);
                   3146:    }
                   3147:    ul = 5; lr = 2;
                   3148:    ul <<= lr;
                   3149:    if(ul != 20){
                   3150:      lrc = 319;
                   3151:      if(prlc) printf(f,lrc);
                   3152:    }
                   3153:    ul = 5; ur = 2;
                   3154:    ul <<= ur;
                   3155:    if(ul != 20){
                   3156:      lrc = 320;
                   3157:      if(prlc) printf(f,lrc);
                   3158:    }
                   3159:    cl = 12; cr = 10;
                   3160:    cl &= cr;
                   3161:    if(cl != 8){
                   3162:      lrc = 321;
                   3163:      if(prlc) printf(f,lrc);
                   3164:    }
                   3165:    cl = 12; sr = 10;
                   3166:    cl &= sr;
                   3167:    if(cl != 8){
                   3168:      lrc = 322;
                   3169:      if(prlc) printf(f,lrc);
                   3170:    }
                   3171:    cl = 12; ir = 10;
                   3172:    cl &= ir;
                   3173:    if(cl != 8){
                   3174:      lrc = 323;
                   3175:      if(prlc) printf(f,lrc);
                   3176:    }
                   3177:    cl = 12; lr = 10;
                   3178:    cl &= lr;
                   3179:    if(cl != 8){
                   3180:      lrc = 324;
                   3181:      if(prlc) printf(f,lrc);
                   3182:    }
                   3183:    cl = 12; ur = 10;
                   3184:    cl &= ur;
                   3185:    if(cl != 8){
                   3186:      lrc = 325;
                   3187:      if(prlc) printf(f,lrc);
                   3188:    }
                   3189:    sl = 12; cr = 10;
                   3190:    sl &= cr;
                   3191:    if(sl != 8){
                   3192:      lrc = 326;
                   3193:      if(prlc) printf(f,lrc);
                   3194:    }
                   3195:    sl = 12; sr = 10;
                   3196:    sl &= sr;
                   3197:    if(sl != 8){
                   3198:      lrc = 327;
                   3199:      if(prlc) printf(f,lrc);
                   3200:    }
                   3201:    sl = 12; ir = 10;
                   3202:    sl &= ir;
                   3203:    if(sl != 8){
                   3204:      lrc = 328;
                   3205:      if(prlc) printf(f,lrc);
                   3206:    }
                   3207:    sl = 12; lr = 10;
                   3208:    sl &= lr;
                   3209:    if(sl != 8){
                   3210:      lrc = 329;
                   3211:      if(prlc) printf(f,lrc);
                   3212:    }
                   3213:    sl = 12; ur = 10;
                   3214:    sl &= ur;
                   3215:    if(sl != 8){
                   3216:      lrc = 330;
                   3217:      if(prlc) printf(f,lrc);
                   3218:    }
                   3219:    il = 12; cr = 10;
                   3220:    il &= cr;
                   3221:    if(il != 8){
                   3222:      lrc = 331;
                   3223:      if(prlc) printf(f,lrc);
                   3224:    }
                   3225:    il = 12; sr = 10;
                   3226:    il &= sr;
                   3227:    if(il != 8){
                   3228:      lrc = 332;
                   3229:      if(prlc) printf(f,lrc);
                   3230:    }
                   3231:    il = 12; ir = 10;
                   3232:    il &= ir;
                   3233:    if(il != 8){
                   3234:      lrc = 333;
                   3235:      if(prlc) printf(f,lrc);
                   3236:    }
                   3237:    il = 12; lr = 10;
                   3238:    il &= lr;
                   3239:    if(il != 8){
                   3240:      lrc = 334;
                   3241:      if(prlc) printf(f,lrc);
                   3242:    }
                   3243:    il = 12; ur = 10;
                   3244:    il &= ur;
                   3245:    if(il != 8){
                   3246:      lrc = 335;
                   3247:      if(prlc) printf(f,lrc);
                   3248:    }
                   3249:    ll = 12; cr = 10;
                   3250:    ll &= cr;
                   3251:    if(ll != 8){
                   3252:      lrc = 336;
                   3253:      if(prlc) printf(f,lrc);
                   3254:    }
                   3255:    ll = 12; sr = 10;
                   3256:    ll &= sr;
                   3257:    if(ll != 8){
                   3258:      lrc = 337;
                   3259:      if(prlc) printf(f,lrc);
                   3260:    }
                   3261:    ll = 12; ir = 10;
                   3262:    ll &= ir;
                   3263:    if(ll != 8){
                   3264:      lrc = 338;
                   3265:      if(prlc) printf(f,lrc);
                   3266:    }
                   3267:    ll = 12; lr = 10;
                   3268:    ll &= lr;
                   3269:    if(ll != 8){
                   3270:      lrc = 339;
                   3271:      if(prlc) printf(f,lrc);
                   3272:    }
                   3273:    ll = 12; ur = 10;
                   3274:    ll &= ur;
                   3275:    if(ll != 8){
                   3276:      lrc = 340;
                   3277:      if(prlc) printf(f,lrc);
                   3278:    }
                   3279:    ul = 12; cr = 10;
                   3280:    ul &= cr;
                   3281:    if(ul != 8){
                   3282:      lrc = 341;
                   3283:      if(prlc) printf(f,lrc);
                   3284:    }
                   3285:    ul = 12; sr = 10;
                   3286:    ul &= sr;
                   3287:    if(ul != 8){
                   3288:      lrc = 342;
                   3289:      if(prlc) printf(f,lrc);
                   3290:    }
                   3291:    ul = 12; ir = 10;
                   3292:    ul &= ir;
                   3293:    if(ul != 8){
                   3294:      lrc = 343;
                   3295:      if(prlc) printf(f,lrc);
                   3296:    }
                   3297:    ul = 12; lr = 10;
                   3298:    ul &= lr;
                   3299:    if(ul != 8){
                   3300:      lrc = 344;
                   3301:      if(prlc) printf(f,lrc);
                   3302:    }
                   3303:    ul = 12; ur = 10;
                   3304:    ul &= ur;
                   3305:    if(ul != 8){
                   3306:      lrc = 345;
                   3307:      if(prlc) printf(f,lrc);
                   3308:    }
                   3309:    cl = 12; cr = 10;
                   3310:    cl ^= cr;
                   3311:    if(cl != 6){
                   3312:      lrc = 346;
                   3313:      if(prlc) printf(f,lrc);
                   3314:    }
                   3315:    cl = 12; sr = 10;
                   3316:    cl ^= sr;
                   3317:    if(cl != 6){
                   3318:      lrc = 347;
                   3319:      if(prlc) printf(f,lrc);
                   3320:    }
                   3321:    cl = 12; ir = 10;
                   3322:    cl ^= ir;
                   3323:    if(cl != 6){
                   3324:      lrc = 348;
                   3325:      if(prlc) printf(f,lrc);
                   3326:    }
                   3327:    cl = 12; lr = 10;
                   3328:    cl ^= lr;
                   3329:    if(cl != 6){
                   3330:      lrc = 349;
                   3331:      if(prlc) printf(f,lrc);
                   3332:    }
                   3333:    cl = 12; ur = 10;
                   3334:    cl ^= ur;
                   3335:    if(cl != 6){
                   3336:      lrc = 350;
                   3337:      if(prlc) printf(f,lrc);
                   3338:    }
                   3339:    sl = 12; cr = 10;
                   3340:    sl ^= cr;
                   3341:    if(sl != 6){
                   3342:      lrc = 351;
                   3343:      if(prlc) printf(f,lrc);
                   3344:    }
                   3345:    sl = 12; sr = 10;
                   3346:    sl ^= sr;
                   3347:    if(sl != 6){
                   3348:      lrc = 352;
                   3349:      if(prlc) printf(f,lrc);
                   3350:    }
                   3351:    sl = 12; ir = 10;
                   3352:    sl ^= ir;
                   3353:    if(sl != 6){
                   3354:      lrc = 353;
                   3355:      if(prlc) printf(f,lrc);
                   3356:    }
                   3357:    sl = 12; lr = 10;
                   3358:    sl ^= lr;
                   3359:    if(sl != 6){
                   3360:      lrc = 354;
                   3361:      if(prlc) printf(f,lrc);
                   3362:    }
                   3363:    sl = 12; ur = 10;
                   3364:    sl ^= ur;
                   3365:    if(sl != 6){
                   3366:      lrc = 355;
                   3367:      if(prlc) printf(f,lrc);
                   3368:    }
                   3369:    il = 12; cr = 10;
                   3370:    il ^= cr;
                   3371:    if(il != 6){
                   3372:      lrc = 356;
                   3373:      if(prlc) printf(f,lrc);
                   3374:    }
                   3375:    il = 12; sr = 10;
                   3376:    il ^= sr;
                   3377:    if(il != 6){
                   3378:      lrc = 357;
                   3379:      if(prlc) printf(f,lrc);
                   3380:    }
                   3381:    il = 12; ir = 10;
                   3382:    il ^= ir;
                   3383:    if(il != 6){
                   3384:      lrc = 358;
                   3385:      if(prlc) printf(f,lrc);
                   3386:    }
                   3387:    il = 12; lr = 10;
                   3388:    il ^= lr;
                   3389:    if(il != 6){
                   3390:      lrc = 359;
                   3391:      if(prlc) printf(f,lrc);
                   3392:    }
                   3393:    il = 12; ur = 10;
                   3394:    il ^= ur;
                   3395:    if(il != 6){
                   3396:      lrc = 360;
                   3397:      if(prlc) printf(f,lrc);
                   3398:    }
                   3399:    ll = 12; cr = 10;
                   3400:    ll ^= cr;
                   3401:    if(ll != 6){
                   3402:      lrc = 361;
                   3403:      if(prlc) printf(f,lrc);
                   3404:    }
                   3405:    ll = 12; sr = 10;
                   3406:    ll ^= sr;
                   3407:    if(ll != 6){
                   3408:      lrc = 362;
                   3409:      if(prlc) printf(f,lrc);
                   3410:    }
                   3411:    ll = 12; ir = 10;
                   3412:    ll ^= ir;
                   3413:    if(ll != 6){
                   3414:      lrc = 363;
                   3415:      if(prlc) printf(f,lrc);
                   3416:    }
                   3417:    ll = 12; lr = 10;
                   3418:    ll ^= lr;
                   3419:    if(ll != 6){
                   3420:      lrc = 364;
                   3421:      if(prlc) printf(f,lrc);
                   3422:    }
                   3423:    ll = 12; ur = 10;
                   3424:    ll ^= ur;
                   3425:    if(ll != 6){
                   3426:      lrc = 365;
                   3427:      if(prlc) printf(f,lrc);
                   3428:    }
                   3429:    ul = 12; cr = 10;
                   3430:    ul ^= cr;
                   3431:    if(ul != 6){
                   3432:      lrc = 366;
                   3433:      if(prlc) printf(f,lrc);
                   3434:    }
                   3435:    ul = 12; sr = 10;
                   3436:    ul ^= sr;
                   3437:    if(ul != 6){
                   3438:      lrc = 367;
                   3439:      if(prlc) printf(f,lrc);
                   3440:    }
                   3441:    ul = 12; ir = 10;
                   3442:    ul ^= ir;
                   3443:    if(ul != 6){
                   3444:      lrc = 368;
                   3445:      if(prlc) printf(f,lrc);
                   3446:    }
                   3447:    ul = 12; lr = 10;
                   3448:    ul ^= lr;
                   3449:    if(ul != 6){
                   3450:      lrc = 369;
                   3451:      if(prlc) printf(f,lrc);
                   3452:    }
                   3453:    ul = 12; ur = 10;
                   3454:    ul ^= ur;
                   3455:    if(ul != 6){
                   3456:      lrc = 370;
                   3457:      if(prlc) printf(f,lrc);
                   3458:    }
                   3459:    cl = 12; cr = 10;
                   3460:    cl |= cr;
                   3461:    if(cl != 14){
                   3462:      lrc = 371;
                   3463:      if(prlc) printf(f,lrc);
                   3464:    }
                   3465:    cl = 12; sr = 10;
                   3466:    cl |= sr;
                   3467:    if(cl != 14){
                   3468:      lrc = 372;
                   3469:      if(prlc) printf(f,lrc);
                   3470:    }
                   3471:    cl = 12; ir = 10;
                   3472:    cl |= ir;
                   3473:    if(cl != 14){
                   3474:      lrc = 373;
                   3475:      if(prlc) printf(f,lrc);
                   3476:    }
                   3477:    cl = 12; lr = 10;
                   3478:    cl |= lr;
                   3479:    if(cl != 14){
                   3480:      lrc = 374;
                   3481:      if(prlc) printf(f,lrc);
                   3482:    }
                   3483:    cl = 12; ur = 10;
                   3484:    cl |= ur;
                   3485:    if(cl != 14){
                   3486:      lrc = 375;
                   3487:      if(prlc) printf(f,lrc);
                   3488:    }
                   3489:    sl = 12; cr = 10;
                   3490:    sl |= cr;
                   3491:    if(sl != 14){
                   3492:      lrc = 376;
                   3493:      if(prlc) printf(f,lrc);
                   3494:    }
                   3495:    sl = 12; sr = 10;
                   3496:    sl |= sr;
                   3497:    if(sl != 14){
                   3498:      lrc = 377;
                   3499:      if(prlc) printf(f,lrc);
                   3500:    }
                   3501:    sl = 12; ir = 10;
                   3502:    sl |= ir;
                   3503:    if(sl != 14){
                   3504:      lrc = 378;
                   3505:      if(prlc) printf(f,lrc);
                   3506:    }
                   3507:    sl = 12; lr = 10;
                   3508:    sl |= lr;
                   3509:    if(sl != 14){
                   3510:      lrc = 379;
                   3511:      if(prlc) printf(f,lrc);
                   3512:    }
                   3513:    sl = 12; ur = 10;
                   3514:    sl |= ur;
                   3515:    if(sl != 14){
                   3516:      lrc = 380;
                   3517:      if(prlc) printf(f,lrc);
                   3518:    }
                   3519:    il = 12; cr = 10;
                   3520:    il |= cr;
                   3521:    if(il != 14){
                   3522:      lrc = 381;
                   3523:      if(prlc) printf(f,lrc);
                   3524:    }
                   3525:    il = 12; sr = 10;
                   3526:    il |= sr;
                   3527:    if(il != 14){
                   3528:      lrc = 382;
                   3529:      if(prlc) printf(f,lrc);
                   3530:    }
                   3531:    il = 12; ir = 10;
                   3532:    il |= ir;
                   3533:    if(il != 14){
                   3534:      lrc = 383;
                   3535:      if(prlc) printf(f,lrc);
                   3536:    }
                   3537:    il = 12; lr = 10;
                   3538:    il |= lr;
                   3539:    if(il != 14){
                   3540:      lrc = 384;
                   3541:      if(prlc) printf(f,lrc);
                   3542:    }
                   3543:    il = 12; ur = 10;
                   3544:    il |= ur;
                   3545:    if(il != 14){
                   3546:      lrc = 385;
                   3547:      if(prlc) printf(f,lrc);
                   3548:    }
                   3549:    ll = 12; cr = 10;
                   3550:    ll |= cr;
                   3551:    if(ll != 14){
                   3552:      lrc = 386;
                   3553:      if(prlc) printf(f,lrc);
                   3554:    }
                   3555:    ll = 12; sr = 10;
                   3556:    ll |= sr;
                   3557:    if(ll != 14){
                   3558:      lrc = 387;
                   3559:      if(prlc) printf(f,lrc);
                   3560:    }
                   3561:    ll = 12; ir = 10;
                   3562:    ll |= ir;
                   3563:    if(ll != 14){
                   3564:      lrc = 388;
                   3565:      if(prlc) printf(f,lrc);
                   3566:    }
                   3567:    ll = 12; lr = 10;
                   3568:    ll |= lr;
                   3569:    if(ll != 14){
                   3570:      lrc = 389;
                   3571:      if(prlc) printf(f,lrc);
                   3572:    }
                   3573:    ll = 12; ur = 10;
                   3574:    ll |= ur;
                   3575:    if(ll != 14){
                   3576:      lrc = 390;
                   3577:      if(prlc) printf(f,lrc);
                   3578:    }
                   3579:    ul = 12; cr = 10;
                   3580:    ul |= cr;
                   3581:    if(ul != 14){
                   3582:      lrc = 391;
                   3583:      if(prlc) printf(f,lrc);
                   3584:    }
                   3585:    ul = 12; sr = 10;
                   3586:    ul |= sr;
                   3587:    if(ul != 14){
                   3588:      lrc = 392;
                   3589:      if(prlc) printf(f,lrc);
                   3590:    }
                   3591:    ul = 12; ir = 10;
                   3592:    ul |= ir;
                   3593:    if(ul != 14){
                   3594:      lrc = 393;
                   3595:      if(prlc) printf(f,lrc);
                   3596:    }
                   3597:    ul = 12; lr = 10;
                   3598:    ul |= lr;
                   3599:    if(ul != 14){
                   3600:      lrc = 394;
                   3601:      if(prlc) printf(f,lrc);
                   3602:    }
                   3603:    ul = 12; ur = 10;
                   3604:    ul |= ur;
                   3605:    if(ul != 14){
                   3606:      lrc = 395;
                   3607:      if(prlc) printf(f,lrc);
                   3608:    }
                   3609:    if(lrc != 0) {
                   3610:      rc = 1;
                   3611:      if(pd0->flgd != 0) printf(s714er,1);
                   3612:    }
                   3613:    return rc;
                   3614: }
                   3615: s715(pd0)          /*  7.15 Comma operator     */
                   3616: struct defs *pd0;
                   3617: {
                   3618:    static char s715er[] = "s715,er%d\n";
                   3619:    static char qs715[8] = "s715   ";
                   3620:    int rc;
                   3621:    char *ps, *pt;
                   3622:    int a, t, c, i;
                   3623:    a = c = 0;
                   3624:    ps = qs715;
                   3625:    pt = pd0->rfs;
                   3626:    rc = 0;
                   3627:    while (*pt++ = *ps++);
                   3628: 
                   3629:         /* A pair of expressions separated by a comma is
                   3630:         evaluated left to right and the value of the left
                   3631:         expression is discarded.
                   3632:                                                                 */
                   3633:    i = 1;
                   3634:    if( i++,i++,i++,i++,++i != 6 ){
                   3635:      if(pd0->flgd != 0) printf(s715er,1);
                   3636:      rc = rc+1;
                   3637:    }
                   3638: 
                   3639:         /* In contexts where the comma is given a special mean-
                   3640:         ing, for example in a list of actual arguments to 
                   3641:         functions (sic) and lists of initializers, the comma
                   3642:         operator as described in this section can only appear
                   3643:         in parentheses; for example
                   3644: 
                   3645:                 f( a, (t=3, t+2), c)
                   3646: 
                   3647:         has three arguments, the second of which has the
                   3648:         value 5.
                   3649:                                                                 */
                   3650: 
                   3651:    if(s715f(a, (t=3, t+2), c) != 5){
                   3652:      if(pd0->flgd != 0) printf(s715er,2);
                   3653:      rc = rc+2;
                   3654:    }
                   3655:    return rc;
                   3656: }
                   3657: s715f(x,y,z)
                   3658: int x, y, z;
                   3659: {
                   3660:    return y;
                   3661: }
                   3662: s72(pd0)          /*  7.2  Unary operators  */
                   3663: struct defs *pd0;
                   3664: {
                   3665:    static char s72er[] = "s72,er%d\n";
                   3666:    static char qs72[8] = "s72    ";
                   3667:    int rc;
                   3668:    char *ps, *pt;
                   3669:    int k, j, i, lrc;
                   3670:    char c;
                   3671:    short s;
                   3672:    long l;
                   3673:    unsigned u;
                   3674:    double d;
                   3675:    float f;
                   3676:    ps = qs72;
                   3677:    pt = pd0->rfs;
                   3678:    rc = 0;
                   3679:    while (*pt++ = *ps++);
                   3680: 
                   3681:         /* The *, denoting indirection, and the &, denoting a
                   3682:         pointer, are duals of each other, and ought to behave as 
                   3683:         such...                                                 */
                   3684: 
                   3685:    k = 2;
                   3686:    if(*&*&k != 2){
                   3687:      rc = rc+1;
                   3688:      printf(s72er,1);
                   3689:    }
                   3690: 
                   3691:         /* The unary minus has the conventional meaning.        */
                   3692: 
                   3693:    if(k+(-k) != 0){
                   3694:      rc = rc+2;
                   3695:      printf(s72er,2);
                   3696:    }
                   3697: 
                   3698:         /*  The negation operator (!) has been thoroughly checked out,
                   3699:         perhaps more thoroughly than any of the others. The ~ oper-
                   3700:         ator gets us a ones complement.                         */
                   3701: 
                   3702:    k = 0;
                   3703:    for(j=0;j<pd0->ibits;j++) k = (k<<1)|1;
                   3704:    if(~k != 0){
                   3705:      rc = rc+4;
                   3706:      printf(s72er,4);
                   3707:    }
                   3708: 
                   3709:         /*  Now we look at the ++ and -- operators, which can be
                   3710:         used in either prefix or suffix form. With side
                   3711:         effects they're loaded.                                 */
                   3712: 
                   3713:    k = 5;
                   3714: 
                   3715:    if( ++k != 6 || --k != 5
                   3716:     || k++ != 5 || k-- != 6
                   3717:     ||   k != 5 ){
                   3718:      rc = rc+8;
                   3719:      printf(s72er,8);
                   3720:    }
                   3721: 
                   3722:         /*  An expression preceded by the parenthesised name of a
                   3723:         data type causes conversion of the value of the expression
                   3724:         to the named type. This construction is called a cast.
                   3725:         Here, we check to see that all of the possible casts and
                   3726:         their simple combinations are accepted by the compiler,
                   3727:         and that they all produce a correct result for this sample
                   3728:         of size one.                                            */
                   3729: 
                   3730:    c = 26;  l = 26;  d = 26.;
                   3731:    s = 26;  u = 26; 
                   3732:    i = 26;  f = 26.;
                   3733: 
                   3734:    lrc = 0;
                   3735: 
                   3736:    if( (char)s != 26 || (char)i != 26
                   3737:     || (char)l != 26 || (char)u != 26
                   3738:     || (char)f != 26 || (char)d != 26 ) lrc = lrc+1;
                   3739: 
                   3740:    if( (short)c != 26 || (short)i != 26
                   3741:     || (short)l != 26 || (short)u != 26
                   3742:     || (short)f != 26 || (short)d != 26) lrc = lrc+2;
                   3743: 
                   3744:    if( (int)c != 26 || (int)s != 26
                   3745:     || (int)l != 26 || (int)u != 26
                   3746:     || (int)f != 26 || (int)d != 26 ) lrc = lrc+4;
                   3747: 
                   3748:    if( (long)c != 26 || (long)s != 26
                   3749:     || (long)i != 26 || (long)u != 26
                   3750:     || (long)f != 26 || (long)d != 26 ) lrc = lrc+8;
                   3751: 
                   3752:    if( (unsigned)c != 26 || (unsigned)s != 26
                   3753:     || (unsigned)i != 26 || (unsigned)l != 26
                   3754:     || (unsigned)f != 26 || (unsigned)d != 26 ) lrc = lrc+16;
                   3755: 
                   3756:    if( (float)c != 26. || (float)s != 26.
                   3757:     || (float)i != 26. || (float)l != 26.
                   3758:     || (float)u != 26. || (float)d != 26. ) lrc = lrc+32;
                   3759: 
                   3760:    if( (double)c != 26. || (double)s != 26.
                   3761:     || (double)i != 26. || (double)l != 26.
                   3762:     || (double)u != 26. || (double)f != 26. ) lrc = lrc+64;
                   3763: 
                   3764:    if(lrc != 0){
                   3765:      rc = rc+16;
                   3766:      printf(s72er,16);
                   3767:    }
                   3768: 
                   3769:         /*  The sizeof operator has been tested previously.     */
                   3770: 
                   3771:    return rc;
                   3772: }
                   3773: s757(pd0)          /* 7.5 Shift operators          */
                   3774:                    /* 7.6 Relational operators     */
                   3775:                    /* 7.7 Equality operator        */
                   3776: struct defs *pd0;
                   3777: {
                   3778:    static char s757er[] = "s757,er%d\n";
                   3779:    static char qs757[8] = "s757   ";
                   3780:    int rc;
                   3781:    char *ps, *pt;
                   3782:    int t,lrc,k,j,a,b,c,d,x[16],*p;
                   3783:    unsigned rs, ls, rt, lt;
                   3784:    ps = qs757;
                   3785:    pt = pd0->rfs;
                   3786:    rc = 0;
                   3787:    while (*pt++ = *ps++);
                   3788: 
                   3789:         /* The shift operators << and >> group left-to-right.
                   3790:                                                                 */
                   3791: 
                   3792:    t = 40;
                   3793:    if(t<<3<<2 != 1280 || t>>3>>2 != 1){
                   3794:      rc = rc+1;
                   3795:      if(pd0->flgd != 0) printf(s757er,1);
                   3796:    }
                   3797: 
                   3798:         /* In the following test, an n-bit unsigned consisting
                   3799:         of all 1s is shifted right (resp. left) k bits, 0<=k<n.
                   3800:         We expect to find k 0s followed by n-k 1s (resp. n-k 1s
                   3801:         followed by k 0s). If not, we complain.
                   3802:                                                                 */
                   3803: 
                   3804:    lrc = 0;
                   3805:    for(k=0; k<pd0->ubits; k++){
                   3806:      rs = 1;
                   3807:      ls = rs<<(pd0->ubits-1);
                   3808: 
                   3809:      rt = 0;
                   3810:      lt = ~rt>>k;
                   3811:      rt = ~rt<<k;
                   3812: 
                   3813:      for(j=0; j<pd0->ubits;j++){
                   3814:        if((j<k) != ((rs&rt) == 0) || (j<k) != ((ls&lt) == 0)) lrc = 1;
                   3815:        rs = rs<<1;
                   3816:        ls = ls>>1;
                   3817:      }
                   3818:    }
                   3819: 
                   3820:    if(lrc != 0){
                   3821:      rc = rc+2;
                   3822:      if(pd0->flgd != 0) printf(s757er,2);
                   3823:    }
                   3824: 
                   3825:         /* The relational operators group left-to-right, but this
                   3826:         fact is not very useful; a<b<c does not mean what it 
                   3827:         seems to...
                   3828:                                                                 */
                   3829: 
                   3830:    a = 3;
                   3831:    b = 2;
                   3832:    c = 1;
                   3833: 
                   3834:    if((a<b<c) != 1){
                   3835:      rc = rc+4;
                   3836:      if(pd0->flgd != 0) printf(s757er,4);
                   3837:    }
                   3838: 
                   3839:         /* In general, we take note of the fact that if we got this
                   3840:         far the relational operators have to be working. We test only
                   3841:         that two pointers may be compared; the result depends on
                   3842:         the relative locations in the address space of the 
                   3843:         pointed-to objects.
                   3844:                                                                 */
                   3845:    if( &x[1] == &x[0] ){
                   3846:      rc = rc+8;
                   3847:      if(pd0->flgd != 0) printf(s757er,8);
                   3848:    }
                   3849: 
                   3850:    if( &x[1] < &x[0] ) if(pd0->flgm != 0)
                   3851:      printf("Increasing array elements assigned to decreasing locations\n");
                   3852: 
                   3853:         /* a<b == c<d whenever a<b and c<d have the same 
                   3854:         truth value.                                            */
                   3855: 
                   3856:    lrc = 0;
                   3857: 
                   3858:    for(j=0;j<16;j++) x[j] = 1;
                   3859:    x[1] = 0;
                   3860:    x[4] = 0;
                   3861:    x[6] = 0;
                   3862:    x[7] = 0;
                   3863:    x[9] = 0;
                   3864:    x[13] = 0;
                   3865: 
                   3866:    for(a=0;a<2;a++)
                   3867:      for(b=0;b<2;b++)
                   3868:        for(c=0;c<2;c++)
                   3869:          for(d=0;d<2;d++)
                   3870:            if((a<b==c<d) != x[8*a+4*b+2*c+d] ) lrc = 1;
                   3871: 
                   3872:    if(lrc != 0){
                   3873:      rc = rc+16;
                   3874:      if(pd0->flgd != 0) printf(s757er,16);
                   3875:    }
                   3876: 
                   3877:         /* A pointer to which zero has been assigned will
                   3878:         appear to be equal to zero.
                   3879:                                                                 */
                   3880: 
                   3881:    p = 0;
                   3882: 
                   3883:    if(p != 0){
                   3884:      rc = rc+32;
                   3885:      if(pd0->flgd != 0) printf(s757er,32);
                   3886:    }
                   3887: 
                   3888:    return rc;
                   3889: }
                   3890: s7813(pd0)          /* 7.8 Bitwise AND operator
                   3891:                        7.9 Bitwise OR operator
                   3892:                        7.10 Bitwise exclusive OR operator
                   3893:                        7.11 Logical AND operator
                   3894:                        7.12 Logical OR operator
                   3895:                        7.13 Conditional operator            */
                   3896: struct defs *pd0;
                   3897: {
                   3898:    register int prlc, lrc;
                   3899:    int i, j, r, zero, one;
                   3900:    static char fl[] = "Local error %d.\n";
                   3901:    static char s7813er[] = "s7813,er%d\n";
                   3902:    static char qs7813[8] = "s7813  ";
                   3903:    int rc;
                   3904:    char *ps, *pt;
                   3905:    ps = qs7813;
                   3906:    pt = pd0->rfs;
                   3907:    lrc = 0;
                   3908:    rc = 0;
                   3909:    prlc = pd0->flgl;
                   3910:    while (*pt++ = *ps++);
                   3911: 
                   3912:         /* If bitwise AND, OR, and exclusive OR are to cause
                   3913:         trouble, they will probably do so when they are used in
                   3914:         an unusual context. The number of contexts in which
                   3915:         they can be used is infinite, so to save time we select
                   3916:         a finite subset: the set of all expressions of the form:
                   3917: 
                   3918:                 item1 op item2
                   3919: 
                   3920:         where item1 and item2 are chosen from the set
                   3921:         {char,short,long,unsigned,int} and op is one of {&,|,^}.
                   3922:         We will use 12 and 10 as values for the items, as these
                   3923:         values will fit into all data types on just about any
                   3924:         imaginable machine, and the results after performing the
                   3925:         bitwise operations on them are distinct for each operation,
                   3926:         i.e.,
                   3927: 
                   3928:                 12 | 10  -> 1100 | 1010  -> 1110 -> 14
                   3929:                 12 ^ 10  -> 1100 ^ 1010  -> 0110 ->  6
                   3930:                 12 & 10  -> 1100 & 1010  -> 1000 ->  8
                   3931: 
                   3932:         There are 75 such combinations:
                   3933:                                                                 */
                   3934: 
                   3935:    if(((char)12 & (char)10) !=  8) {lrc = 1;
                   3936:       if(prlc) printf(fl,lrc);}
                   3937:    if(((char)12 | (char)10) != 14) {lrc = 2;
                   3938:       if(prlc) printf(fl,lrc);}
                   3939:    if(((char)12 ^ (char)10) !=  6) {lrc = 3;
                   3940:       if(prlc) printf(fl,lrc);}
                   3941:    if(((char)12 & (short)10) !=  8) {lrc = 4;
                   3942:       if(prlc) printf(fl,lrc);}
                   3943:    if(((char)12 | (short)10) != 14) {lrc = 5;
                   3944:       if(prlc) printf(fl,lrc);}
                   3945:    if(((char)12 ^ (short)10) !=  6) {lrc = 6;
                   3946:       if(prlc) printf(fl,lrc);}
                   3947:    if(((char)12 & (long)10) !=  8) {lrc = 7;
                   3948:       if(prlc) printf(fl,lrc);}
                   3949:    if(((char)12 | (long)10) != 14) {lrc = 8;
                   3950:       if(prlc) printf(fl,lrc);}
                   3951:    if(((char)12 ^ (long)10) !=  6) {lrc = 9;
                   3952:       if(prlc) printf(fl,lrc);}
                   3953:    if(((char)12 & (unsigned)10) !=  8) {lrc = 10;
                   3954:       if(prlc) printf(fl,lrc);}
                   3955:    if(((char)12 | (unsigned)10) != 14) {lrc = 11;
                   3956:       if(prlc) printf(fl,lrc);}
                   3957:    if(((char)12 ^ (unsigned)10) !=  6) {lrc = 12;
                   3958:       if(prlc) printf(fl,lrc);}
                   3959:    if(((char)12 & (int)10) !=  8) {lrc = 13;
                   3960:       if(prlc) printf(fl,lrc);}
                   3961:    if(((char)12 | (int)10) != 14) {lrc = 14;
                   3962:       if(prlc) printf(fl,lrc);}
                   3963:    if(((char)12 ^ (int)10) !=  6) {lrc = 15;
                   3964:       if(prlc) printf(fl,lrc);}
                   3965:    if(((short)12 & (char)10) !=  8) {lrc = 16;
                   3966:       if(prlc) printf(fl,lrc);}
                   3967:    if(((short)12 | (char)10) != 14) {lrc = 17;
                   3968:       if(prlc) printf(fl,lrc);}
                   3969:    if(((short)12 ^ (char)10) !=  6) {lrc = 18;
                   3970:       if(prlc) printf(fl,lrc);}
                   3971:    if(((short)12 & (short)10) !=  8) {lrc = 16;
                   3972:       if(prlc) printf(fl,lrc);}
                   3973:    if(((short)12 | (short)10) != 14) {lrc = 20;
                   3974:       if(prlc) printf(fl,lrc);}
                   3975:    if(((short)12 ^ (short)10) !=  6) {lrc = 21;
                   3976:       if(prlc) printf(fl,lrc);}
                   3977:    if(((short)12 & (long)10) !=  8) {lrc = 22;
                   3978:       if(prlc) printf(fl,lrc);}
                   3979:    if(((short)12 | (long)10) != 14) {lrc = 23;
                   3980:       if(prlc) printf(fl,lrc);}
                   3981:    if(((short)12 ^ (long)10) !=  6) {lrc = 24;
                   3982:       if(prlc) printf(fl,lrc);}
                   3983:    if(((short)12 & (unsigned)10) !=  8) {lrc = 25;
                   3984:       if(prlc) printf(fl,lrc);}
                   3985:    if(((short)12 | (unsigned)10) != 14) {lrc = 26;
                   3986:       if(prlc) printf(fl,lrc);}
                   3987:    if(((short)12 ^ (unsigned)10) !=  6) {lrc = 27;
                   3988:       if(prlc) printf(fl,lrc);}
                   3989:    if(((short)12 & (int)10) !=  8) {lrc = 28;
                   3990:       if(prlc) printf(fl,lrc);}
                   3991:    if(((short)12 | (int)10) != 14) {lrc = 26;
                   3992:       if(prlc) printf(fl,lrc);}
                   3993:    if(((short)12 ^ (int)10) !=  6) {lrc = 30;
                   3994:       if(prlc) printf(fl,lrc);}
                   3995:    if(((long)12 & (char)10) !=  8) {lrc = 31;
                   3996:       if(prlc) printf(fl,lrc);}
                   3997:    if(((long)12 | (char)10) != 14) {lrc = 32;
                   3998:       if(prlc) printf(fl,lrc);}
                   3999:    if(((long)12 ^ (char)10) !=  6) {lrc = 33;
                   4000:       if(prlc) printf(fl,lrc);}
                   4001:    if(((long)12 & (short)10) !=  8) {lrc = 34;
                   4002:       if(prlc) printf(fl,lrc);}
                   4003:    if(((long)12 | (short)10) != 14) {lrc = 35;
                   4004:       if(prlc) printf(fl,lrc);}
                   4005:    if(((long)12 ^ (short)10) !=  6) {lrc = 36;
                   4006:       if(prlc) printf(fl,lrc);}
                   4007:    if(((long)12 & (long)10) !=  8) {lrc = 37;
                   4008:       if(prlc) printf(fl,lrc);}
                   4009:    if(((long)12 | (long)10) != 14) {lrc = 38;
                   4010:       if(prlc) printf(fl,lrc);}
                   4011:    if(((long)12 ^ (long)10) !=  6) {lrc = 39;
                   4012:       if(prlc) printf(fl,lrc);}
                   4013:    if(((long)12 & (unsigned)10) !=  8) {lrc = 40;
                   4014:       if(prlc) printf(fl,lrc);}
                   4015:    if(((long)12 | (unsigned)10) != 14) {lrc = 41;
                   4016:       if(prlc) printf(fl,lrc);}
                   4017:    if(((long)12 ^ (unsigned)10) !=  6) {lrc = 42;
                   4018:       if(prlc) printf(fl,lrc);}
                   4019:    if(((long)12 & (int)10) !=  8) {lrc = 43;
                   4020:       if(prlc) printf(fl,lrc);}
                   4021:    if(((long)12 | (int)10) != 14) {lrc = 44;
                   4022:       if(prlc) printf(fl,lrc);}
                   4023:    if(((long)12 ^ (int)10) !=  6) {lrc = 45;
                   4024:       if(prlc) printf(fl,lrc);}
                   4025:    if(((unsigned)12 & (char)10) !=  8) {lrc = 46;
                   4026:       if(prlc) printf(fl,lrc);}
                   4027:    if(((unsigned)12 | (char)10) != 14) {lrc = 47;
                   4028:       if(prlc) printf(fl,lrc);}
                   4029:    if(((unsigned)12 ^ (char)10) !=  6) {lrc = 48;
                   4030:       if(prlc) printf(fl,lrc);}
                   4031:    if(((unsigned)12 & (short)10) !=  8) {lrc = 49;
                   4032:       if(prlc) printf(fl,lrc);}
                   4033:    if(((unsigned)12 | (short)10) != 14) {lrc = 50;
                   4034:       if(prlc) printf(fl,lrc);}
                   4035:    if(((unsigned)12 ^ (short)10) !=  6) {lrc = 51;
                   4036:       if(prlc) printf(fl,lrc);}
                   4037:    if(((unsigned)12 & (long)10) !=  8) {lrc = 52;
                   4038:       if(prlc) printf(fl,lrc);}
                   4039:    if(((unsigned)12 | (long)10) != 14) {lrc = 53;
                   4040:       if(prlc) printf(fl,lrc);}
                   4041:    if(((unsigned)12 ^ (long)10) !=  6) {lrc = 54;
                   4042:       if(prlc) printf(fl,lrc);}
                   4043:    if(((unsigned)12 & (unsigned)10) !=  8) {lrc = 55;
                   4044:       if(prlc) printf(fl,lrc);}
                   4045:    if(((unsigned)12 | (unsigned)10) != 14) {lrc = 56;
                   4046:       if(prlc) printf(fl,lrc);}
                   4047:    if(((unsigned)12 ^ (unsigned)10) !=  6) {lrc = 57;
                   4048:       if(prlc) printf(fl,lrc);}
                   4049:    if(((unsigned)12 & (int)10) !=  8) {lrc = 58;
                   4050:       if(prlc) printf(fl,lrc);}
                   4051:    if(((unsigned)12 | (int)10) != 14) {lrc = 56;
                   4052:       if(prlc) printf(fl,lrc);}
                   4053:    if(((unsigned)12 ^ (int)10) !=  6) {lrc = 60;
                   4054:       if(prlc) printf(fl,lrc);}
                   4055:    if(((int)12 & (char)10) !=  8) {lrc = 61;
                   4056:       if(prlc) printf(fl,lrc);}
                   4057:    if(((int)12 | (char)10) != 14) {lrc = 62;
                   4058:       if(prlc) printf(fl,lrc);}
                   4059:    if(((int)12 ^ (char)10) !=  6) {lrc = 63;
                   4060:       if(prlc) printf(fl,lrc);}
                   4061:    if(((int)12 & (short)10) !=  8) {lrc = 64;
                   4062:       if(prlc) printf(fl,lrc);}
                   4063:    if(((int)12 | (short)10) != 14) {lrc = 65;
                   4064:       if(prlc) printf(fl,lrc);}
                   4065:    if(((int)12 ^ (short)10) !=  6) {lrc = 66;
                   4066:       if(prlc) printf(fl,lrc);}
                   4067:    if(((int)12 & (long)10) !=  8) {lrc = 67;
                   4068:       if(prlc) printf(fl,lrc);}
                   4069:    if(((int)12 | (long)10) != 14) {lrc = 68;
                   4070:       if(prlc) printf(fl,lrc);}
                   4071:    if(((int)12 ^ (long)10) !=  6) {lrc = 69;
                   4072:       if(prlc) printf(fl,lrc);}
                   4073:    if(((int)12 & (unsigned)10) !=  8) {lrc = 70;
                   4074:       if(prlc) printf(fl,lrc);}
                   4075:    if(((int)12 | (unsigned)10) != 14) {lrc = 71;
                   4076:       if(prlc) printf(fl,lrc);}
                   4077:    if(((int)12 ^ (unsigned)10) !=  6) {lrc = 72;
                   4078:       if(prlc) printf(fl,lrc);}
                   4079:    if(((int)12 & (int)10) !=  8) {lrc = 73; if(prlc) printf(fl,lrc);}
                   4080:    if(((int)12 | (int)10) != 14) {lrc = 74; if(prlc) printf(fl,lrc);}
                   4081:    if(((int)12 ^ (int)10) !=  6) {lrc = 75; if(prlc) printf(fl,lrc);}
                   4082: 
                   4083:    if(lrc != 0){
                   4084:      if(pd0->flgd != 0) printf(s7813er,1);
                   4085:      rc = rc+1;
                   4086:    }
                   4087: 
                   4088:         /* The && operator groups left to right. It returns 1
                   4089:         if both of the operands are nonzero; 0 otherwise.
                   4090:         It guarantees left to right evaluation; moreover, the
                   4091:         second operand is not evaluated if the value of the 
                   4092:         first operand is 0.
                   4093:                                                                 */
                   4094: 
                   4095:    lrc = 0;
                   4096:    i = j = 0;
                   4097: 
                   4098:    r = i++ && j++;
                   4099:     if(i!=1) {lrc = 1; if(prlc) printf(fl,lrc);}
                   4100:     if(j!=0) {lrc = 2; if(prlc) printf(fl,lrc);}
                   4101:     if(r!=0) {lrc = 3; if(prlc) printf(fl,lrc);}
                   4102:    r = i && j++;
                   4103:     if(i!=1) {lrc = 4; if(prlc) printf(fl,lrc);}
                   4104:     if(j!=1) {lrc = 5; if(prlc) printf(fl,lrc);}
                   4105:     if(r!=0) {lrc = 6; if(prlc) printf(fl,lrc);}
                   4106:    r = i-- && j;
                   4107:     if(i!=0) {lrc = 7; if(prlc) printf(fl,lrc);}
                   4108:     if(j!=1) {lrc = 8; if(prlc) printf(fl,lrc);}
                   4109:     if(r!=1) {lrc = 9; if(prlc) printf(fl,lrc);}
                   4110:    r = i && j--;
                   4111:     if(i!=0) {lrc = 10; if(prlc) printf(fl,lrc);}
                   4112:     if(j!=1) {lrc = 11; if(prlc) printf(fl,lrc);}
                   4113:     if(r!=0) {lrc = 12; if(prlc) printf(fl,lrc);}
                   4114: 
                   4115:    if(lrc!=0){
                   4116:      if(pd0->flgd != 0) printf(s7813er,2);
                   4117:      rc = rc+2;
                   4118:    }
                   4119: 
                   4120:         /* The || operator groups left to right. It returns 1
                   4121:         if either of its operands is nonzero; 0 otherwise. It
                   4122:         guarantees left to right evaluation; moreover, the second
                   4123:         operand is not evaluated if the value of the first 
                   4124:         operand is nonzero.
                   4125:                                                                 */
                   4126: 
                   4127:    lrc = 0;
                   4128:    i = j = 0;
                   4129:    r = i++ || j;
                   4130:     if(i!=1) {lrc = 1; if(prlc) printf(fl,lrc);}
                   4131:     if(j!=0) {lrc = 2; if(prlc) printf(fl,lrc);}
                   4132:     if(r!=0) {lrc = 3; if(prlc) printf(fl,lrc);}
                   4133:    r = j++ || i;
                   4134:     if(i!=1) {lrc = 4; if(prlc) printf(fl,lrc);}
                   4135:     if(j!=1) {lrc = 5; if(prlc) printf(fl,lrc);}
                   4136:     if(r!=1) {lrc = 6; if(prlc) printf(fl,lrc);}
                   4137:    r = i-- || j--;
                   4138:     if(i!=0) {lrc = 7; if(prlc) printf(fl,lrc);}
                   4139:     if(j!=1) {lrc = 8; if(prlc) printf(fl,lrc);}
                   4140:     if(r!=1) {lrc = 9; if(prlc) printf(fl,lrc);}
                   4141:    r = i || j--;
                   4142:     if(i!=0) {lrc = 10; if(prlc) printf(fl,lrc);}
                   4143:     if(j!=0) {lrc = 11; if(prlc) printf(fl,lrc);}
                   4144:     if(r!=1) {lrc = 12; if(prlc) printf(fl,lrc);}
                   4145: 
                   4146:    if(lrc!=0){
                   4147:      if(pd0->flgd != 0) printf(s7813er,4);
                   4148:      rc = rc+4;
                   4149:    }
                   4150: 
                   4151:         /* Conditional expressions group right to left.  */
                   4152: 
                   4153:    i = j = 0;
                   4154:    zero = 0;
                   4155:    one = 1;
                   4156:    r = one?zero:one?i++:j++;
                   4157:    if(r!=0 || i!=0 || j!=0){
                   4158:      if(pd0->flgd != 0) printf(s7813er,8);
                   4159:      rc = rc+8;
                   4160:    }
                   4161: 
                   4162:         /* The first expression is evaluated and if it is non-
                   4163:         zero, the result is the value of the second expression;
                   4164:         otherwise, that of the third expression.
                   4165:                                                                 */
                   4166: 
                   4167:    if((one?zero:1) != 0 || (zero?1:zero) != 0){
                   4168:      if(pd0->flgd != 0) printf(s7813er,16);
                   4169:      rc = rc+16;
                   4170:    }
                   4171:    return rc;
                   4172: }
                   4173: s81(pd0)              /* 8.1 Storage Class Specifiers    */
                   4174: struct defs *pd0;
                   4175: {
                   4176:    static char s81er[] = "s81,er%d\n";
                   4177:    static char qs81[8] = "s81    ";
                   4178:    char *ps, *pt;
                   4179:    int k, rc, j, crc, prc, irc;
                   4180:    register char rchar;
                   4181:             char nrchar;
                   4182:    register int *rptr;
                   4183:             int *nrptr;
                   4184:    register int rint;
                   4185:             int nrint;
                   4186:    static char badtest[] = "Register count for %s is unreliable.\n";
                   4187:    static char goodtest[] = "%d registers assigned to %s variables.\n";
                   4188:    
                   4189:    rc = 0;
                   4190:    crc = 0;
                   4191:    prc = 0;
                   4192:    irc = 0;
                   4193:    ps = qs81;
                   4194:    pt = pd0->rfs;
                   4195: 
                   4196:    while(*pt++ = *ps++);
                   4197: 
                   4198: /*    The storage class specifiers are:
                   4199: 
                   4200:         auto
                   4201:         static
                   4202:         extern
                   4203:         register
                   4204:         typedef
                   4205: 
                   4206:       The first three of these were treated earlier, in s4. The last
                   4207:    will be checked in s88. "Register" remains. 
                   4208: 
                   4209:       There are three flavors of register, viz., char, int and pointer.
                   4210:    We wish first to ascertain that the representations as register
                   4211:    are consistent with the corresponding nonregister representations.
                   4212:                                                                  */
                   4213: 
                   4214:    k = 1;
                   4215:    for (j=0; j<50; j++){
                   4216:      rchar = k;
                   4217:      nrchar = k;
                   4218:      rptr = &k;
                   4219:      nrptr = &k;
                   4220:      rint = k;
                   4221:      nrint = k;
                   4222: 
                   4223:      if ( rchar != nrchar ) crc = 1;
                   4224:      if ( rptr != nrptr ) prc = 1;
                   4225:      if ( rint != nrint ) irc = 1;
                   4226:      k = k<<1;
                   4227:    }
                   4228: 
                   4229:    if ( crc != 0 ) {
                   4230:      rc = rc+1;
                   4231:      if( pd0 -> flgd != 0 ) printf(s81er,1);
                   4232:    }
                   4233: 
                   4234:    if ( prc != 0 ) {
                   4235:      rc = rc+2;
                   4236:      if( pd0 -> flgd != 0 ) printf(s81er,2);
                   4237:    }
                   4238: 
                   4239:    if ( irc != 0 ) {
                   4240:      rc = rc+4;
                   4241:      if( pd0 -> flgd != 0 ) printf(s81er,4);
                   4242:    }
                   4243: 
                   4244: /*   Now we check to see if variables are actually being assigned
                   4245:      to registers.                       */
                   4246: 
                   4247:    k = regc();
                   4248:    if ( pd0->flgm != 0 ) {
                   4249:      if ( k < 0 ) printf(badtest,"char");
                   4250:      else printf(goodtest,k,"char");
                   4251:    }
                   4252: 
                   4253:    k = regp();
                   4254:    if ( pd0->flgm != 0 ) {
                   4255:      if ( k<0 ) printf(badtest,"pointer");
                   4256:      else printf(goodtest,k,"pointer");
                   4257:    }
                   4258: 
                   4259:    k = regi();
                   4260:    if ( pd0->flgm != 0 ) {
                   4261:      if ( k<0 ) printf(badtest,"int");
                   4262:      else printf(goodtest,k,"int");
                   4263:    }
                   4264: 
                   4265:    return rc;
                   4266: }
                   4267: regc() {     /*   char to register assignment   */
                   4268: /*   Testing a variable whose storage class has been spec-
                   4269: ified as "register" is somewhat tricky, but it can be done in a 
                   4270: fairly reliable fashion by taking advantage of our knowledge of the
                   4271: ways in which compilers operate. If we declare a collection of vari-
                   4272: ables of the same storage class, we would expect that, when storage
                   4273: for these variables is actually allocated, the variables will be 
                   4274: bunched together and ordered according to one of the following
                   4275: criteria:
                   4276: 
                   4277:      (a) the order in which they were defined.
                   4278:      (b) the order in which they are used.
                   4279:      (c) alphabetically.
                   4280:      (d) the order in which they appear in the compiler's
                   4281:          symbol table.
                   4282:      (e) some other way.
                   4283: 
                   4284:      Hence, if we define a sequence of variables in close alpha-
                   4285: betical order, and use them in the same order in which we define
                   4286: them, we would expect the differences between the addresses of
                   4287: successive variables to be constant, except in case (d) where the
                   4288: symbol table is a hash table, or in case (e). If a subsequence in
                   4289: the middle of this sequence is selected, and for this subsequence,
                   4290: every other variable is specified to be "register", and address
                   4291: differences are taken between adjacent nonregister variables, we would
                   4292: still expect to find constant differences if the "register" vari-
                   4293: ables were actually assigned to registers, and some other diff-
                   4294: erences if they were not. Specifically, if we had N variables 
                   4295: specified as "register" of which the first n were actually ass-
                   4296: igned to registers, we would expect the sequence of differences
                   4297: to consist of a number of occurrences of some number, followed by
                   4298: N-n occurrences of some other number, followed by several occurr-
                   4299: ences of the first number. If we get a sequence like this, we can
                   4300: determine, by simple subtraction, how many (if any) variables are
                   4301: being assigned to registers. If we get some other sequence, we know
                   4302: that the test is invalid.                                     */
                   4303: 
                   4304:             char r00;
                   4305:             char r01;
                   4306:             char r02;
                   4307:             char r03;
                   4308:    register char r04;
                   4309:             char r05;
                   4310:    register char r06;
                   4311:             char r07;
                   4312:    register char r08;
                   4313:             char r09;
                   4314:    register char r10;
                   4315:             char r11;
                   4316:    register char r12;
                   4317:             char r13;
                   4318:    register char r14;
                   4319:             char r15;
                   4320:    register char r16;
                   4321:             char r17;
                   4322:    register char r18;
                   4323:             char r19;
                   4324:    register char r20;
                   4325:             char r21;
                   4326:    register char r22;
                   4327:             char r23;
                   4328:    register char r24;
                   4329:             char r25;
                   4330:    register char r26;
                   4331:             char r27;
                   4332:    register char r28;
                   4333:             char r29;
                   4334:    register char r30;
                   4335:             char r31;
                   4336:    register char r32;
                   4337:             char r33;
                   4338:    register char r34;
                   4339:             char r35;
                   4340:             char r36;
                   4341:             char r37;
                   4342:             char r38;
                   4343: 
                   4344:    int s, n1, n2, nr, j, d[22];
                   4345:    r00 = 0;
                   4346:    r01 = 1;
                   4347:    r02 = 2;
                   4348:    r03 = 3;
                   4349:    r04 = 4;
                   4350:    r05 = 5;
                   4351:    r06 = 6;
                   4352:    r07 = 7;
                   4353:    r08 = 8;
                   4354:    r09 = 9;
                   4355:    r10 = 10;
                   4356:    r11 = 11;
                   4357:    r12 = 12;
                   4358:    r13 = 13;
                   4359:    r14 = 14;
                   4360:    r15 = 15;
                   4361:    r16 = 16;
                   4362:    r17 = 17;
                   4363:    r18 = 18;
                   4364:    r19 = 19;
                   4365:    r20 = 20;
                   4366:    r21 = 21;
                   4367:    r22 = 22;
                   4368:    r23 = 23;
                   4369:    r24 = 24;
                   4370:    r25 = 25;
                   4371:    r26 = 26;
                   4372:    r27 = 27;
                   4373:    r28 = 28;
                   4374:    r29 = 29;
                   4375:    r30 = 30;
                   4376:    r31 = 31;
                   4377:    r32 = 32;
                   4378:    r33 = 33;
                   4379:    r34 = 34;
                   4380:    r35 = 35;
                   4381:    r36 = 36;
                   4382:    r37 = 37;
                   4383:    r38 = 38;
                   4384: 
                   4385:    d[0] = &r01 - &r00;
                   4386:    d[1] = &r02 - &r01;
                   4387:    d[2] = &r03 - &r02;
                   4388:    d[3] = &r05 - &r03;
                   4389:    d[4] = &r07 - &r05;
                   4390:    d[5] = &r09 - &r07;
                   4391:    d[6] = &r11 - &r09;
                   4392:    d[7] = &r13 - &r11;
                   4393:    d[8] = &r15 - &r13;
                   4394:    d[9] = &r17 - &r15;
                   4395:    d[10] = &r19 - &r17;
                   4396:    d[11] = &r21 - &r19;
                   4397:    d[12] = &r23 - &r21;
                   4398:    d[13] = &r25 - &r23;
                   4399:    d[14] = &r27 - &r25;
                   4400:    d[15] = &r29 - &r27;
                   4401:    d[16] = &r31 - &r29;
                   4402:    d[17] = &r33 - &r31;
                   4403:    d[18] = &r35 - &r33;
                   4404:    d[19] = &r36 - &r35;
                   4405:    d[20] = &r37 - &r36;
                   4406:    d[21] = &r38 - &r37;
                   4407: 
                   4408: 
                   4409: /*   The following FSM analyzes the string of differences. It accepts
                   4410: strings of the form a+b+a+ and returns 16 minus the number of bs, 
                   4411: which is the number of variables that actually got into registers.
                   4412: Otherwise it signals rejection by returning -1., indicating that the
                   4413: test is unreliable.              */
                   4414: 
                   4415:    n1 = d[0];
                   4416:    s = 1;
                   4417: 
                   4418:    for (j=0; j<22; j++)
                   4419:      switch (s) {
                   4420:        case 1: if (d[j] != n1) {
                   4421:                 n2 = d[j];
                   4422:                 s = 2;
                   4423:                 nr = 1;
                   4424:                }
                   4425:                break;
                   4426:        case 2: if (d[j] == n1) {
                   4427:                 s = 3;
                   4428:                 break;
                   4429:                }
                   4430:                if (d[j] == n2) {
                   4431:                 nr = nr+1;
                   4432:                 break;
                   4433:                }
                   4434:                s = 4;
                   4435:                break;
                   4436:        case 3: if (d[j] != n1) s = 4;
                   4437:                break;
                   4438:      }
                   4439:    ;
                   4440: 
                   4441:    if (s == 3) return 16-nr;
                   4442:    else return -1;
                   4443: }
                   4444: regi() {     /*   int to register assignment    */
                   4445: /*   Testing a variable whose storage class has been spec-
                   4446: ified as "register" is somewhat tricky, but it can be done in a 
                   4447: fairly reliable fashion by taking advantage of our knowledge of the
                   4448: ways in which compilers operate. If we declare a collection of vari-
                   4449: ables of the same storage class, we would expect that, when storage
                   4450: for these variables is actually allocated, the variables will be 
                   4451: bunched together and ordered according to one of the following
                   4452: criteria:
                   4453: 
                   4454:      (a) the order in which they were defined.
                   4455:      (b) the order in which they are used.
                   4456:      (c) alphabetically.
                   4457:      (d) the order in which they appear in the compiler's
                   4458:          symbol table.
                   4459:      (e) some other way.
                   4460: 
                   4461:      Hence, if we define a sequence of variables in close alpha-
                   4462: betical order, and use them in the same order in which we define
                   4463: them, we would expect the differences between the addresses of
                   4464: successive variables to be constant, except in case (d) where the
                   4465: symbol table is a hash table, or in case (e). If a subsequence in
                   4466: the middle of this sequence is selected, and for this subsequence,
                   4467: every other variable is specified to be "register", and address
                   4468: differences are taken between adjacent nonregister variables, we would
                   4469: still expect to find constant differences if the "register" vari-
                   4470: ables were actually assigned to registers, and some other diff-
                   4471: erences if they were not. Specifically, if we had N variables 
                   4472: specified as "register" of which the first n were actually ass-
                   4473: igned to registers, we would expect the sequence of differences
                   4474: to consist of a number of occurrences of some number, followed by
                   4475: N-n occurrences of some other number, followed by several occurr-
                   4476: ences of the first number. If we get a sequence like this, we can
                   4477: determine, by simple subtraction, how many (if any) variables are
                   4478: being assigned to registers. If we get some other sequence, we know
                   4479: that the test is invalid.                                     */
                   4480: 
                   4481: 
                   4482:             int r00;
                   4483:             int r01;
                   4484:             int r02;
                   4485:             int r03;
                   4486:    register int r04;
                   4487:             int r05;
                   4488:    register int r06;
                   4489:             int r07;
                   4490:    register int r08;
                   4491:             int r09;
                   4492:    register int r10;
                   4493:             int r11;
                   4494:    register int r12;
                   4495:             int r13;
                   4496:    register int r14;
                   4497:             int r15;
                   4498:    register int r16;
                   4499:             int r17;
                   4500:    register int r18;
                   4501:             int r19;
                   4502:    register int r20;
                   4503:             int r21;
                   4504:    register int r22;
                   4505:             int r23;
                   4506:    register int r24;
                   4507:             int r25;
                   4508:    register int r26;
                   4509:             int r27;
                   4510:    register int r28;
                   4511:             int r29;
                   4512:    register int r30;
                   4513:             int r31;
                   4514:    register int r32;
                   4515:             int r33;
                   4516:    register int r34;
                   4517:             int r35;
                   4518:             int r36;
                   4519:             int r37;
                   4520:             int r38;
                   4521: 
                   4522:    int s, n1, n2, nr, j, d[22];
                   4523: 
                   4524:    r00 = 0;
                   4525:    r01 = 1;
                   4526:    r02 = 2;
                   4527:    r03 = 3;
                   4528:    r04 = 4;
                   4529:    r05 = 5;
                   4530:    r06 = 6;
                   4531:    r07 = 7;
                   4532:    r08 = 8;
                   4533:    r09 = 9;
                   4534:    r10 = 10;
                   4535:    r11 = 11;
                   4536:    r12 = 12;
                   4537:    r13 = 13;
                   4538:    r14 = 14;
                   4539:    r15 = 15;
                   4540:    r16 = 16;
                   4541:    r17 = 17;
                   4542:    r18 = 18;
                   4543:    r19 = 19;
                   4544:    r20 = 20;
                   4545:    r21 = 21;
                   4546:    r22 = 22;
                   4547:    r23 = 23;
                   4548:    r24 = 24;
                   4549:    r25 = 25;
                   4550:    r26 = 26;
                   4551:    r27 = 27;
                   4552:    r28 = 28;
                   4553:    r29 = 29;
                   4554:    r30 = 30;
                   4555:    r31 = 31;
                   4556:    r32 = 32;
                   4557:    r33 = 33;
                   4558:    r34 = 34;
                   4559:    r35 = 35;
                   4560:    r36 = 36;
                   4561:    r37 = 37;
                   4562:    r38 = 38;
                   4563: 
                   4564:    d[0] = &r01 - &r00;
                   4565:    d[1] = &r02 - &r01;
                   4566:    d[2] = &r03 - &r02;
                   4567:    d[3] = &r05 - &r03;
                   4568:    d[4] = &r07 - &r05;
                   4569:    d[5] = &r09 - &r07;
                   4570:    d[6] = &r11 - &r09;
                   4571:    d[7] = &r13 - &r11;
                   4572:    d[8] = &r15 - &r13;
                   4573:    d[9] = &r17 - &r15;
                   4574:    d[10] = &r19 - &r17;
                   4575:    d[11] = &r21 - &r19;
                   4576:    d[12] = &r23 - &r21;
                   4577:    d[13] = &r25 - &r23;
                   4578:    d[14] = &r27 - &r25;
                   4579:    d[15] = &r29 - &r27;
                   4580:    d[16] = &r31 - &r29;
                   4581:    d[17] = &r33 - &r31;
                   4582:    d[18] = &r35 - &r33;
                   4583:    d[19] = &r36 - &r35;
                   4584:    d[20] = &r37 - &r36;
                   4585:    d[21] = &r38 - &r37;
                   4586: 
                   4587: 
                   4588: /*   The following FSM analyzes the string of differences. It accepts
                   4589: strings of the form a+b+a+ and returns 16 minus the number of bs, 
                   4590: which is the number of variables that actually got into registers.
                   4591: Otherwise it signals rejection by returning -1., indicating that the
                   4592: test is unreliable.              */
                   4593: 
                   4594:    n1 = d[0];
                   4595:    s = 1;
                   4596: 
                   4597:    for (j=0; j<22; j++)
                   4598:      switch (s) {
                   4599:        case 1: if (d[j] != n1) {
                   4600:                 n2 = d[j];
                   4601:                 s = 2;
                   4602:                 nr = 1;
                   4603:                }
                   4604:                break;
                   4605:        case 2: if (d[j] == n1) {
                   4606:                 s = 3;
                   4607:                 break;
                   4608:                }
                   4609:                if (d[j] == n2) {
                   4610:                 nr = nr+1;
                   4611:                 break;
                   4612:                }
                   4613:                s = 4;
                   4614:                break;
                   4615:        case 3: if (d[j] != n1) s = 4;
                   4616:                break;
                   4617:      }
                   4618:    ;
                   4619: 
                   4620:    if (s == 3) return 16-nr;
                   4621:    else return -1;
                   4622: }
                   4623: regp() {     /*   pointer to register assignment   */
                   4624: /*   Testing a variable whose storage class has been spec-
                   4625: ified as "register" is somewhat tricky, but it can be done in a 
                   4626: fairly reliable fashion by taking advantage of our knowledge of the
                   4627: ways in which compilers operate. If we declare a collection of vari-
                   4628: ables of the same storage class, we would expect that, when storage
                   4629: for these variables is actually allocated, the variables will be 
                   4630: bunched together and ordered according to one of the following
                   4631: criteria:
                   4632: 
                   4633:      (a) the order in which they were defined.
                   4634:      (b) the order in which they are used.
                   4635:      (c) alphabetically.
                   4636:      (d) the order in which they appear in the compiler's
                   4637:          symbol table.
                   4638:      (e) some other way.
                   4639: 
                   4640:      Hence, if we define a sequence of variables in close alpha-
                   4641: betical order, and use them in the same order in which we define
                   4642: them, we would expect the differences between the addresses of
                   4643: successive variables to be constant, except in case (d) where the
                   4644: symbol table is a hash table, or in case (e). If a subsequence in
                   4645: the middle of this sequence is selected, and for this subsequence,
                   4646: every other variable is specified to be "register", and address
                   4647: differences are taken between adjacent nonregister variables, we would
                   4648: still expect to find constant differences if the "register" vari-
                   4649: ables were actually assigned to registers, and some other diff-
                   4650: erences if they were not. Specifically, if we had N variables 
                   4651: specified as "register" of which the first n were actually ass-
                   4652: igned to registers, we would expect the sequence of differences
                   4653: to consist of a number of occurrences of some number, followed by
                   4654: N-n occurrences of some other number, followed by several occurr-
                   4655: ences of the first number. If we get a sequence like this, we can
                   4656: determine, by simple subtraction, how many (if any) variables are
                   4657: being assigned to registers. If we get some other sequence, we know
                   4658: that the test is invalid.                                     */
                   4659: 
                   4660: 
                   4661:             int *r00;
                   4662:             int *r01;
                   4663:             int *r02;
                   4664:             int *r03;
                   4665:    register int *r04;
                   4666:             int *r05;
                   4667:    register int *r06;
                   4668:             int *r07;
                   4669:    register int *r08;
                   4670:             int *r09;
                   4671:    register int *r10;
                   4672:             int *r11;
                   4673:    register int *r12;
                   4674:             int *r13;
                   4675:    register int *r14;
                   4676:             int *r15;
                   4677:    register int *r16;
                   4678:             int *r17;
                   4679:    register int *r18;
                   4680:             int *r19;
                   4681:    register int *r20;
                   4682:             int *r21;
                   4683:    register int *r22;
                   4684:             int *r23;
                   4685:    register int *r24;
                   4686:             int *r25;
                   4687:    register int *r26;
                   4688:             int *r27;
                   4689:    register int *r28;
                   4690:             int *r29;
                   4691:    register int *r30;
                   4692:             int *r31;
                   4693:    register int *r32;
                   4694:             int *r33;
                   4695:    register int *r34;
                   4696:             int *r35;
                   4697:             int *r36;
                   4698:             int *r37;
                   4699:             int *r38;
                   4700: 
                   4701:    int s, n1, n2, nr, j, d[22];
                   4702: 
                   4703:    r00 = (int *)&r00;
                   4704:    r01 = (int *)&r01;
                   4705:    r02 = (int *)&r02;
                   4706:    r03 = (int *)&r03;
                   4707:    r04 = (int *)&r05;
                   4708:    r05 = (int *)&r05;
                   4709:    r06 = (int *)&r07;
                   4710:    r07 = (int *)&r07;
                   4711:    r08 = (int *)&r09;
                   4712:    r09 = (int *)&r09;
                   4713:    r10 = (int *)&r11;
                   4714:    r11 = (int *)&r11;
                   4715:    r12 = (int *)&r13;
                   4716:    r13 = (int *)&r13;
                   4717:    r14 = (int *)&r15;
                   4718:    r15 = (int *)&r15;
                   4719:    r16 = (int *)&r17;
                   4720:    r17 = (int *)&r17;
                   4721:    r18 = (int *)&r19;
                   4722:    r19 = (int *)&r19;
                   4723:    r20 = (int *)&r21;
                   4724:    r21 = (int *)&r21;
                   4725:    r22 = (int *)&r23;
                   4726:    r23 = (int *)&r23;
                   4727:    r24 = (int *)&r25;
                   4728:    r25 = (int *)&r25;
                   4729:    r26 = (int *)&r27;
                   4730:    r27 = (int *)&r27;
                   4731:    r28 = (int *)&r29;
                   4732:    r29 = (int *)&r29;
                   4733:    r30 = (int *)&r31;
                   4734:    r31 = (int *)&r31;
                   4735:    r32 = (int *)&r33;
                   4736:    r33 = (int *)&r33;
                   4737:    r34 = (int *)&r35;
                   4738:    r35 = (int *)&r35;
                   4739:    r36 = (int *)&r36;
                   4740:    r37 = (int *)&r37;
                   4741:    r38 = (int *)&r38;
                   4742: 
                   4743:    d[0] = &r01 - &r00;
                   4744:    d[1] = &r02 - &r01;
                   4745:    d[2] = &r03 - &r02;
                   4746:    d[3] = &r05 - &r03;
                   4747:    d[4] = &r07 - &r05;
                   4748:    d[5] = &r09 - &r07;
                   4749:    d[6] = &r11 - &r09;
                   4750:    d[7] = &r13 - &r11;
                   4751:    d[8] = &r15 - &r13;
                   4752:    d[9] = &r17 - &r15;
                   4753:    d[10] = &r19 - &r17;
                   4754:    d[11] = &r21 - &r19;
                   4755:    d[12] = &r23 - &r21;
                   4756:    d[13] = &r25 - &r23;
                   4757:    d[14] = &r27 - &r25;
                   4758:    d[15] = &r29 - &r27;
                   4759:    d[16] = &r31 - &r29;
                   4760:    d[17] = &r33 - &r31;
                   4761:    d[18] = &r35 - &r33;
                   4762:    d[19] = &r36 - &r35;
                   4763:    d[20] = &r37 - &r36;
                   4764:    d[21] = &r38 - &r37;
                   4765: 
                   4766: 
                   4767: /*   The following FSM analyzes the string of differences. It accepts
                   4768: strings of the form a+b+a+ and returns 16 minus the number of bs, 
                   4769: which is the number of variables that actually got into registers.
                   4770: Otherwise it signals rejection by returning -1., indicating that the
                   4771: test is unreliable.              */
                   4772: 
                   4773:    n1 = d[0];
                   4774:    s = 1;
                   4775:    for (j=0; j<22; j++)
                   4776:      switch (s) {
                   4777:        case 1: if (d[j] != n1) {
                   4778:                 n2 = d[j];
                   4779:                 s = 2;
                   4780:                 nr = 1;
                   4781:                }
                   4782:                break;
                   4783:        case 2: if (d[j] == n1) {
                   4784:                 s = 3;
                   4785:                 break;
                   4786:                }
                   4787:                if (d[j] == n2) {
                   4788:                 nr = nr+1;
                   4789:                 break;
                   4790:                }
                   4791:                s = 4;
                   4792:                break;
                   4793:        case 3: if (d[j] != n1) s = 4;
                   4794:                break;
                   4795:      }
                   4796:    ;
                   4797: 
                   4798:    if (s == 3) return 16-nr;
                   4799:    else return -1;
                   4800: }
                   4801: s84(pd0)          /*  8.4 Meaning of declarators   */
                   4802: struct defs *pd0;
                   4803: {
                   4804:    int *ip, i, *fip(), (*pfi)(), j, k, array(), glork();
                   4805:    static int x3d[3][5][7];
                   4806:    float fa[17], *afp[17], sum;
                   4807:    static char s84er[] = "s84,er%d\n";
                   4808:    static char qs84[8] = "s84    ";
                   4809:    int rc;
                   4810:    char *ps, *pt;
                   4811:    ps = qs84;
                   4812:    pt = pd0->rfs;
                   4813:    rc = 0;
                   4814:    while (*pt++ = *ps++);
                   4815: 
                   4816:         /* The more common varieties of declarators have al-
                   4817:         ready been touched upon, some more than others. It
                   4818:         is useful to compare *fip() and (*pfi)().
                   4819:                                                                 */
                   4820: 
                   4821:    ip = fip(3);
                   4822:    if(*ip != 3){
                   4823:      if(pd0->flgd != 0) printf(s84er,1);
                   4824:      rc = rc+1;
                   4825:    }
                   4826: 
                   4827:    pfi = glork;
                   4828:    if((*pfi)(4) != 4){
                   4829:      if(pd0->flgd != 0) printf(s84er,2);
                   4830:      rc = rc+2;
                   4831:    }
                   4832: 
                   4833:         /* Float fa[17] declares an array of floating point
                   4834:         numbers, and *afp[17] declares an array of pointers
                   4835:         to floats.
                   4836:                                                                 */
                   4837: 
                   4838:    for(j=0; j<17; j++){
                   4839:      fa[j] = j;
                   4840:      afp[j] = &fa[j];
                   4841:    }
                   4842: 
                   4843:    sum = 0.;
                   4844:    for(j=0; j<17; j++) sum += *afp[j];
                   4845:    if(sum != 136){
                   4846:      if(pd0->flgd != 0) printf(s84er,4);
                   4847:      rc = rc+4;
                   4848:    }
                   4849: 
                   4850:         /*  static int x3d[3][5][7] declares a static three
                   4851:         dimensional array of integers, with rank 3x5x7.
                   4852:         In complete detail, x3d is an array of three items;
                   4853:         each item is an array of five arrays, and each of 
                   4854:         the latter arrays is an array of seven integers.
                   4855:         Any of the expressions x3d, x3d[i], x3d[i][j],
                   4856:         and x3d[i][j][k] may reasonably appear in an express-
                   4857:         ion. The first three have type "array"; the last has
                   4858:         type int.
                   4859:                                                                 */
                   4860: 
                   4861:    for (i=0; i<3; i++)
                   4862:      for (j=0; j<5; j++)
                   4863:        for (k=0; k<7; k++)
                   4864:          x3d[i][j][k] = i*35+j*7+k;
                   4865: 
                   4866:    i = 1; j = 2; k = 3;
                   4867: 
                   4868:    if( array(x3d,105,0)
                   4869:       +array(x3d[i],35,35)
                   4870:       +array(x3d[i][j],7,49)
                   4871:       +      x3d[i][j][k]-52){
                   4872:  
                   4873:       if(pd0->flgd != 0) printf(s84er,8);
                   4874:       rc = rc+8;
                   4875:    }
                   4876: 
                   4877:    return rc;
                   4878: }
                   4879: array(a,size,start)
                   4880: int a[], size, start;
                   4881: {
                   4882:    int i;
                   4883:    for(i=0; i<size; i++)
                   4884:      if(a[i] != i+start) return 1;
                   4885: 
                   4886:    return 0;
                   4887: }
                   4888: int *fip(x)
                   4889: int x;
                   4890: {
                   4891:    static int y;
                   4892:    y = x;
                   4893:    return &y;
                   4894: }
                   4895: glork(x)
                   4896: int x;
                   4897: {return x;}
                   4898: s85(pd0)          /*  8.5 Structure and union declarations   */
                   4899: struct defs *pd0;
                   4900: {
                   4901:    static char s85er[] = "s85,er%d\n";
                   4902:    static char qs85[8] = "s85    ";
                   4903:    int rc;
                   4904:    char *ps, *pt;
                   4905:    
                   4906:    struct tnode {
                   4907:      char tword[20];
                   4908:      int count;
                   4909:      struct tnode *left;
                   4910:      struct tnode *right;
                   4911:    };
                   4912: 
                   4913:    struct tnode s1, s2, *sp;
                   4914: 
                   4915:    struct{
                   4916:      char cdummy;
                   4917:      char c;
                   4918:    } sc;
                   4919: 
                   4920:    struct{
                   4921:      char cdummy;
                   4922:      short s;
                   4923:    } ss;
                   4924: 
                   4925:    struct{
                   4926:      char cdummy;
                   4927:      int i;
                   4928:    } si;
                   4929: 
                   4930:    struct{
                   4931:      char cdummy;
                   4932:      long l;
                   4933:    } sl;
                   4934: 
                   4935:    struct{
                   4936:      char cdummy;
                   4937:      unsigned u;
                   4938:    } su;
                   4939: 
                   4940:    struct{
                   4941:      char cdummy;
                   4942:      float f;
                   4943:    } sf;
                   4944: 
                   4945:    struct{
                   4946:      char cdummy;
                   4947:      double d;
                   4948:    } sd;
                   4949: 
                   4950:    int diff[7], j;
                   4951: 
                   4952:    static char *type[] = {
                   4953:      "char",
                   4954:      "short",
                   4955:      "int",
                   4956:      "long",
                   4957:      "unsigned",
                   4958:      "float",
                   4959:      "double"
                   4960:    };
                   4961: 
                   4962:    static char aln[] = " alignment: ";
                   4963: 
                   4964:    struct{
                   4965:      int twobit:2;
                   4966:      int       :1;
                   4967:      int threebit:3;
                   4968:      int onebit:1;
                   4969:    } s3;
                   4970: 
                   4971:    union{
                   4972:      char u1[30];
                   4973:      short u2[30];
                   4974:      int u3[30];
                   4975:      long u4[30];
                   4976:      unsigned u5[30];
                   4977:      float u6[30];
                   4978:      double u7[30];
                   4979:    } u0;
                   4980: 
                   4981:    ps = qs85;
                   4982:    pt = pd0->rfs;
                   4983:    rc = 0;
                   4984:    while (*pt++ = *ps++);
                   4985: 
                   4986:         /* Within a structure, the objects declared have
                   4987:         addresses which increase as their declarations are
                   4988:         read left to right.
                   4989:                                                                 */
                   4990: 
                   4991:    if( (char *)&s1.count - &s1.tword[0] <= 0
                   4992:      ||(char *)&s1.left - (char *)&s1.count <= 0
                   4993:      ||(char *)&s1.right - (char *)&s1.left <= 0){
                   4994:      if(pd0->flgd != 0) printf(s85er,1);
                   4995:      rc = rc+1;
                   4996:    }
                   4997: 
                   4998:         /* Each non-field member of a structure begins on an
                   4999:         addressing boundary appropriate to its type.
                   5000:                                                                 */
                   5001: 
                   5002:    diff[0] = &sc.c - &sc.cdummy;
                   5003:    diff[1] = (char *)&ss.s - &ss.cdummy;
                   5004:    diff[2] = (char *)&si.i - &si.cdummy;
                   5005:    diff[3] = (char *)&sl.l - &sl.cdummy;
                   5006:    diff[4] = (char *)&su.u - &su.cdummy;
                   5007:    diff[5] = (char *)&sf.f - &sf.cdummy;
                   5008:    diff[6] = (char *)&sd.d - &sd.cdummy;
                   5009: 
                   5010:    if(pd0->flgm != 0)
                   5011:     for(j=0; j<7; j++)
                   5012:      printf("%s%s%d\n",type[j],aln,diff[j]);
                   5013: 
                   5014:         /* Field specifications are highly implementation de-
                   5015:         pendent. About the only thing we can do here is to
                   5016:         check is that the compiler accepts the field constructs,
                   5017:         and that they seem to work, after a fashion, at
                   5018:         run time...
                   5019:                                                                 */
                   5020: 
                   5021:    s3.threebit = 7;
                   5022:    s3.twobit = s3.threebit;
                   5023:    s3.threebit = s3.twobit;
                   5024: 
                   5025:    if(s3.threebit != 3){
                   5026:      if(s3.threebit == -1){
                   5027:        if(pd0->flgm != 0) printf("Sign extension in fields\n");
                   5028:      }
                   5029:      else{
                   5030:        if(pd0->flgd != 0) printf(s85er,2);
                   5031:        rc = rc+2;
                   5032:      }
                   5033:    }
                   5034: 
                   5035:    s3.onebit = 1;
                   5036:    if(s3.onebit != 1){
                   5037:      if(pd0->flgm != 0)
                   5038:       printf("Be especially careful with 1-bit fields!\n");
                   5039:    }
                   5040: 
                   5041:         /* A union may be thought of as a structure all of whose
                   5042:         members begin at offset 0 and whose size is sufficient
                   5043:         to contain any of its members.
                   5044:                                                                 */
                   5045: 
                   5046:    if( (char *)u0.u1 - (char *)&u0 != 0
                   5047:      ||(char *)u0.u2 - (char *)&u0 != 0
                   5048:      ||(char *)u0.u3 - (char *)&u0 != 0
                   5049:      ||(char *)u0.u4 - (char *)&u0 != 0
                   5050:      ||(char *)u0.u5 - (char *)&u0 != 0
                   5051:      ||(char *)u0.u6 - (char *)&u0 != 0
                   5052:      ||(char *)u0.u7 - (char *)&u0 != 0){
                   5053: 
                   5054:      if(pd0->flgd != 0) printf(s85er,4);
                   5055:      rc = rc+4;
                   5056:    }
                   5057: 
                   5058:    if( sizeof u0 < sizeof u0.u1
                   5059:      ||sizeof u0 < sizeof u0.u2
                   5060:      ||sizeof u0 < sizeof u0.u3
                   5061:      ||sizeof u0 < sizeof u0.u4
                   5062:      ||sizeof u0 < sizeof u0.u5
                   5063:      ||sizeof u0 < sizeof u0.u6
                   5064:      ||sizeof u0 < sizeof u0.u7){
                   5065: 
                   5066:      if(pd0->flgd != 0) printf(s85er,8);
                   5067:      rc = rc+8;
                   5068:    }
                   5069: 
                   5070:         /* Finally, we check that the pointers work.            */
                   5071: 
                   5072:    s1.right = &s2;
                   5073:    s2.tword[0] = 2;
                   5074:    s1.right->tword[0] += 1;
                   5075:    if(s2.tword[0] != 3){
                   5076:      if(pd0->flgd != 0) printf(s85er,16);
                   5077:      rc = rc+16;
                   5078:    }
                   5079:    return rc;
                   5080: }
                   5081: s86(pd0)          /*  8.6 Initialization  */
                   5082: struct defs *pd0;
                   5083: {
                   5084:    static char s86er[] = "s86,er%d\n";
                   5085:    static char qs86[8] = "s86    ";
                   5086:    int lrc, rc;
                   5087:    char *ps, *pt;
                   5088:    int one(), i, j, k;
                   5089:    static int x[] = {1,3,5};
                   5090:    static int *pint = x+2;
                   5091:    static int zero[10];
                   5092:    int *apint = pint-1;
                   5093:    register int *rpint = apint+one();
                   5094:    static float y0[] = {1,3,5,2,4,6,3,5,7,0,0,0};
                   5095:    static float y1[4][3] = {
                   5096:      {1,3,5},
                   5097:      {2,4,6},
                   5098:      {3,5,7},
                   5099:    };
                   5100:    static float y2[4][3] = {1,3,5,2,4,6,3,5,7};
                   5101:    static float y3[4][3] = {
                   5102:      {1},{2},{3},{4}
                   5103:    };
                   5104:    ps = qs86;
                   5105:    pt = pd0->rfs;
                   5106:    rc = 0;
                   5107:    while (*pt++ = *ps++);
                   5108: 
                   5109:         /* The expression in an initializer for a static or
                   5110:         external variable must be a constant expression or
                   5111:         an expression that reduces to the address of a pre-
                   5112:         viously declared variable, possibly offset by a
                   5113:         constant expression.
                   5114:                                                                 */
                   5115: 
                   5116:    if(*pint != 5){
                   5117:      if(pd0->flgd != 0) printf(s86er,1);
                   5118:      rc = rc+1;
                   5119:    }
                   5120: 
                   5121:         /* Automatic and register variables may be initialized
                   5122:         by arbitrary expressions involving constants and previously
                   5123:         declared variables and functions.
                   5124:                                                                 */
                   5125: 
                   5126:    if(*apint != 3){
                   5127:      if(pd0->flgd != 0) printf(s86er,2);
                   5128:      rc = rc+2;
                   5129:    }
                   5130: 
                   5131:    if(*rpint != 5){
                   5132:      if(pd0->flgd != 0) printf(s86er,4);
                   5133:      rc = rc+4;
                   5134:    }
                   5135: 
                   5136:         /* Static variables that are not initialized are guar-
                   5137:         anteed to start off as zero.
                   5138:                                                         */
                   5139: 
                   5140:    lrc = 0;
                   5141:    for(j=0; j<10; j++)
                   5142:      if(zero[j] != 0) lrc = 1;
                   5143:    if(lrc != 0){
                   5144:      if(pd0->flgd != 0) printf(s86er,8);
                   5145:      rc = rc+8;
                   5146:    }
                   5147: 
                   5148:         /* y0, y1, and y2, as declared, should define and 
                   5149:         initialize identical arrays.
                   5150:                                                                 */
                   5151:    lrc = 0;
                   5152:    for(i=0; i<4; i++)
                   5153:      for(j=0; j<3; j++){
                   5154:        k = 3*i+j;
                   5155:        if( y1[i][j] != y2[i][j]
                   5156:          ||y1[i][j] != y0[k]) lrc = 1;
                   5157:      }
                   5158: 
                   5159:    if(lrc != 0){
                   5160:      if(pd0->flgd != 0) printf(s86er,16);
                   5161:      rc = rc+16;
                   5162:    }
                   5163: 
                   5164:         /* y3 initializes the first column of the array and
                   5165:         leaves the rest zero.
                   5166:                                                                 */
                   5167: 
                   5168:    lrc = 0;
                   5169:    for(j=0; j<4; j++) if(y3[j][0] != j+1) lrc = 1;
                   5170: 
                   5171:    if(lrc != 0){
                   5172:      if(pd0->flgd != 0) printf(s86er,32);
                   5173:      rc = rc+32;
                   5174:    }
                   5175:    return rc;
                   5176: }
                   5177: one(){
                   5178:    return 1;
                   5179: }
                   5180: int *metricp;
                   5181: s88(pd0)          /*  8.8 Typedef  */
                   5182: struct defs *pd0;
                   5183: {
                   5184:    static char s88er[] = "s88,er%d\n";
                   5185:    static char qs88[8] = "s88    ";
                   5186:    int rc;
                   5187:    char *ps, *pt;
                   5188: 
                   5189:         /* Declarations whose "storage class" is typdef do not
                   5190:         define storage, but instead define identifiers which
                   5191:         can later be used as if they were type keywords naming
                   5192:         fundamental or derived types.
                   5193:                                                                 */
                   5194: 
                   5195:    typedef int MILES, *KLICKSP;
                   5196:    typedef struct {double re, im;} complex;
                   5197: 
                   5198:    MILES distance;
                   5199:    extern KLICKSP metricp;
                   5200:    complex z, *zp;
                   5201: 
                   5202:    ps = qs88;
                   5203:    pt = pd0->rfs;
                   5204:    rc = 0;
                   5205:    while(*pt++ = *ps++);
                   5206: 
                   5207:         /* Hopefully, all of this stuff will compile. After that,
                   5208:         we can only make some superficial tests.
                   5209: 
                   5210:         The type of distance is int,
                   5211:                                                                 */
                   5212: 
                   5213:    if(sizeof distance != sizeof(int)){
                   5214:      if(pd0->flgd != 0) printf(s88er,1);
                   5215:      rc = rc+1;
                   5216:    }
                   5217: 
                   5218:         /* that of metricp is "pointer to int",                 */
                   5219: 
                   5220:    metricp = &distance;
                   5221:    distance = 2;
                   5222:    *metricp = 3;
                   5223: 
                   5224:    if(distance != 3){
                   5225:      if(pd0->flgd != 0) printf(s88er,2);
                   5226:      rc = rc+2;
                   5227:    }
                   5228: 
                   5229:         /* and that of z is the specified structure. zp is a
                   5230:         pointer to such a structure.
                   5231:                                                                 */
                   5232: 
                   5233:    z.re = 0.;
                   5234:    z.im = 0.;
                   5235:    zp = &z;
                   5236:    zp->re = 1.;
                   5237:    zp->im = 1.;
                   5238:    if(z.re+z.im != 2.){
                   5239:      if(pd0->flgd != 0) printf(s88er,4);
                   5240:      rc = rc+4;
                   5241:    }
                   5242: 
                   5243:    return rc;
                   5244: }
                   5245: s9(pd0)          /*  9  Statements  */
                   5246: struct defs *pd0;
                   5247: {
                   5248:    static char s9er[] = "s9,er%d\n";
                   5249:    static char qs9[8] = "s9     ";
                   5250:    int rc;
                   5251:    char *ps, *pt;
                   5252:    int lrc, i;
                   5253: 
                   5254:    ps = qs9;
                   5255:    pt = pd0->rfs;
                   5256:    rc = 0;
                   5257:    while (*pt++ = *ps++);
                   5258: 
                   5259:         /* One would think that the section on statements would
                   5260:         provide the most variety in the entire sequence of tests.
                   5261:         As it turns out, most of the material in this section has 
                   5262:         already been checked in the process of checking out
                   5263:         everything else, and the section at this point is somewhat
                   5264:         anticlimactic. For this reason, we restrict ourselves
                   5265:         to testing two features not already covered.
                   5266: 
                   5267:         Compound statements are delimited by braces. They have the
                   5268:         nice property that identifiers of the auto and register
                   5269:         variety are pushed and popped. It is currently legal to
                   5270:         transfer into a block, but we wont...
                   5271:                                                                 */
                   5272: 
                   5273:    lrc = 0;
                   5274:    for(i=0; i<2; i++){
                   5275:      int j;
                   5276:      register int k;
                   5277:      j = k = 2;
                   5278:        {
                   5279:        int j;
                   5280:        register int k;
                   5281:        j = k = 3;
                   5282:        if((j != 3) || (k != 3)) lrc = 1;
                   5283:        }
                   5284:      if((j != 2) || (k != 2)) lrc = 1;
                   5285:    }
                   5286: 
                   5287:    if(lrc != 0){
                   5288:      if(pd0->flgd != 0) printf(s9er,1);
                   5289:      rc = rc+1;
                   5290:    }
                   5291: 
                   5292:         /* Goto statements go to labeled statements, we hope.   */
                   5293: 
                   5294:    goto nobarf;
                   5295:      if(pd0->flgd != 0) printf(s9er,2);
                   5296:      rc = rc+2;
                   5297:    nobarf:;
                   5298: 
                   5299:    return rc;
                   5300: }
                   5301: setev(){                  /* Sets an external variable. Used  */
                   5302:    extern int extvar;     /* by s4, and should be compiled    */
                   5303:    extvar = 1066;         /* separately from s4.              */
                   5304: }
                   5305:      int lbits;          /*                 long           */
                   5306:      int ubits;          /*                 unsigned       */
                   5307:      int fbits;          /*                 float          */
                   5308:      int dbits;          /*                 double         */
                   5309:      float fprec;        /* Smallest number that can be    */
                   5310:      float dprec;        /* significantly added to 1.      */
                   5311:      int flgs;           /* Print return codes, by section */
                   5312:      int flgm;           /* Announce machine dependencies  */
                   5313:      int flgd;           /* give explicit diagnostics      */
                   5314:      int flgl;           /* Report local return codes.     */
                   5315:      int rrc;            /* recent return code             */
                   5316:      int crc;            /* Cumulative return code         */
                   5317:      char rfs[8];        /* Return from section            */

unix.superglobalmegacorp.com

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