Annotation of researchv10no/cmd/f2c/xsum.c, revision 1.1.1.1

1.1       root        1: /****************************************************************
                      2: Copyright 1990, 1993 by AT&T Bell Laboratories and Bellcore.
                      3: 
                      4: Permission to use, copy, modify, and distribute this software
                      5: and its documentation for any purpose and without fee is hereby
                      6: granted, provided that the above copyright notice appear in all
                      7: copies and that both that the copyright notice and this
                      8: permission notice and warranty disclaimer appear in supporting
                      9: documentation, and that the names of AT&T Bell Laboratories or
                     10: Bellcore or any of their entities not be used in advertising or
                     11: publicity pertaining to distribution of the software without
                     12: specific, written prior permission.
                     13: 
                     14: AT&T and Bellcore disclaim all warranties with regard to this
                     15: software, including all implied warranties of merchantability
                     16: and fitness.  In no event shall AT&T or Bellcore be liable for
                     17: any special, indirect or consequential damages or any damages
                     18: whatsoever resulting from loss of use, data or profits, whether
                     19: in an action of contract, negligence or other tortious action,
                     20: arising out of or in connection with the use or performance of
                     21: this software.
                     22: ****************************************************************/
                     23: 
                     24: #include "stdio.h"
                     25: #ifndef KR_headers
                     26: #include "stdlib.h"
                     27: #include "fcntl.h"     /* for declaration of open, O_RDONLY */
                     28: #endif
                     29: #ifdef MSDOS
                     30: #include "io.h"
                     31: #endif
                     32: #ifndef O_RDONLY
                     33: #define O_RDONLY 0
                     34: #endif
                     35: #ifndef O_BINARY
                     36: #define O_BINARY O_RDONLY
                     37: #endif
                     38: 
                     39:  char *progname;
                     40:  static int ignore_cr;
                     41: 
                     42:  void
                     43: #ifdef KR_headers
                     44: usage(rc)
                     45: #else
                     46: usage(int rc)
                     47: #endif
                     48: {
                     49:        fprintf(stderr, "usage: %s [-r] [file [file...]]\n\
                     50:        option -r ignores carriage return characters\n", progname);
                     51:        exit(rc);
                     52:        }
                     53: 
                     54: typedef unsigned char Uchar;
                     55: 
                     56:  long
                     57: #ifdef KR_headers
                     58: sum32(sum, x, n)
                     59:  register long sum;
                     60:  register Uchar *x;
                     61:  int n;
                     62: #else
                     63: sum32(register long sum, register Uchar *x, int n)
                     64: #endif
                     65: {
                     66:        register Uchar *xe;
                     67:        static long crc_table[256] = {
                     68:                0,              151466134,      302932268,      453595578,
                     69:                -9583591,       -160762737,     -312236747,     -463170141,
                     70:                -19167182,      -136529756,     -321525474,     -439166584,
                     71:                28724267,       145849533,      330837255,      448732561,
                     72:                -38334364,      -189783822,     -273059512,     -423738914,
                     73:                47895677,       199091435,      282375505,      433292743,
                     74:                57448534,       174827712,      291699066,      409324012,
                     75:                -67019697,      -184128295,     -300991133,     -418902539,
                     76:                -76668728,      -227995554,     -379567644,     -530091662,
                     77:                67364049,       218420295,      369985021,      520795499,
                     78:                95791354,       213031020,      398182870,      515701056,
                     79:                -86479645,      -203465611,     -388624945,     -506380967,
                     80:                114897068,      266207290,      349655424,      500195606,
                     81:                -105581387,     -256654301,     -340093543,     -490887921,
                     82:                -134039394,     -251295736,     -368256590,     -485758684,
                     83:                124746887,      241716241,      358686123,      476458301,
                     84:                -153337456,     -2395898,       -455991108,     -304803798,
                     85:                162629001,      11973919,       465560741,      314102835,
                     86:                134728098,      16841012,       436840590,      319723544,
                     87:                -144044613,     -26395347,      -446403433,     -329032703,
                     88:                191582708,      40657250,       426062040,      274858062,
                     89:                -200894995,     -50223749,      -435620671,     -284179369,
                     90:                -172959290,     -55056048,      -406931222,     -289830788,
                     91:                182263263,      64630089,       416513267,      299125861,
                     92:                229794136,      78991822,       532414580,      381366498,
                     93:                -220224191,     -69691945,      -523123603,     -371788549,
                     94:                -211162774,     -93398532,      -513308602,     -396314416,
                     95:                201600371,      84090341,       503991391,      386759881,
                     96:                -268078788,     -117292630,     -502591472,     -351526778,
                     97:                258520357,      107972019,      493278217,      341959839,
                     98:                249493774,      131713432,      483432482,      366454964,
                     99:                -239911657,     -122417791,     -474129349,     -356881235,
                    100:                -306674912,     -457198666,     -4791796,       -156118374,
                    101:                315967289,      466778031,      14362133,       165418627,
                    102:                325258002,      442776452,      23947838,       141187752,
                    103:                -334573813,     -452329571,     -33509849,      -150495567,
                    104:                269456196,      419996626,      33682024,       184992510,
                    105:                -278767779,     -429561909,     -43239823,      -194312473,
                    106:                -288089226,     -405591072,     -52790694,      -170046772,
                    107:                297394031,      415166457,      62373443,       179343061,
                    108:                383165416,      533828478,      81314500,       232780370,
                    109:                -373594127,     -524527769,     -72022307,      -223201717,
                    110:                -401789990,     -519431348,     -100447498,     -217810336,
                    111:                392228803,      510123861,      91131631,       208256633,
                    112:                -345918580,     -496598246,     -110112096,     -261561802,
                    113:                336361365,      487278339,      100800185,      251995695,
                    114:                364526526,      482151208,      129260178,      246639108,
                    115:                -354943065,     -472854735,     -119955829,     -237064675,
                    116:                459588272,      308539942,      157983644,      7181066,
                    117:                -469170519,     -317835713,     -167286907,     -16754925,
                    118:                -440448382,     -323454444,     -139383890,     -21619912,
                    119:                450006683,      332774925,      148697015,      31186721,
                    120:                -422325548,     -271261118,     -186797064,     -36011154,
                    121:                431888077,      280569435,      196114401,      45565815,
                    122:                403200742,      286222960,      168180682,      50400092,
                    123:                -412770561,     -295522711,     -177471533,     -59977915,
                    124:                -536157576,     -384970002,     -234585260,     -83643454,
                    125:                526853729,      375396087,      225003341,      74348507,
                    126:                517040714,      399923932,      215944038,      98057200,
                    127:                -507728301,     -390357307,     -206385281,     -88735767,
                    128:                498987548,      347783818,      263426864,      112501670,
                    129:                -489671163,     -338229613,     -253864151,     -103192641,
                    130:                -479823314,     -362722632,     -244835582,     -126932076,
                    131:                470531639,      353144481,      235265819,      117632909
                    132:                };
                    133: 
                    134:        xe = x + n;
                    135:        while(x < xe)
                    136:                sum = crc_table[(sum ^ *x++) & 0xff] ^ (sum >> 8 & 0xffffff);
                    137:        return sum;
                    138:        }
                    139: 
                    140:  int
                    141: #ifdef KR_headers
                    142: cr_purge(buf, n)
                    143:  Uchar *buf;
                    144:  int n;
                    145: #else
                    146: cr_purge(Uchar *buf, int n)
                    147: #endif
                    148: {
                    149:        register Uchar *b, *b1, *be;
                    150:        b = buf;
                    151:        be = b + n;
                    152:        while(b < be)
                    153:                if (*b++ == '\r') {
                    154:                        b1 = b - 1;
                    155:                        while(b < be)
                    156:                                if ((*b1 = *b++) != '\r')
                    157:                                        b1++;
                    158:                        return b1 - buf;
                    159:                        }
                    160:        return n;
                    161:        }
                    162: 
                    163: static Uchar Buf[16*1024];
                    164: 
                    165:  void
                    166: #ifdef KR_headers
                    167: process(s, x)
                    168:  char *s;
                    169:  int x;
                    170: #else
                    171: process(char *s, int x)
                    172: #endif
                    173: {
                    174:        register int n;
                    175:        long fsize, sum;
                    176: 
                    177:        sum = 0;
                    178:        fsize = 0;
                    179:        while((n = read(x, (char *)Buf, sizeof(Buf))) > 0) {
                    180:                if (ignore_cr)
                    181:                        n = cr_purge(Buf, n);
                    182:                fsize += n;
                    183:                sum = sum32(sum, Buf, n);
                    184:                }
                    185:        sum &= 0xffffffff;
                    186:         if (n==0)
                    187:                printf("%s\t%lx\t%ld\n", s, sum & 0xffffffff, fsize);
                    188:         else { perror(s); }
                    189:        close(x);
                    190:        }
                    191: 
                    192: #ifdef KR_headers
                    193: main(argc, argv)
                    194:  char **argv;
                    195: #else
                    196: main(int argc, char **argv)
                    197: #endif
                    198: {
                    199:        int x;
                    200:        char *s;
                    201:        static int rc;
                    202: 
                    203:        progname = *argv;
                    204:        s = *++argv;
                    205:        if (s && *s == '-') {
                    206:                switch(s[1]) {
                    207:                        case '?':
                    208:                                usage(0);
                    209:                        case 'r':
                    210:                                ignore_cr = 1;
                    211:                        case '-':
                    212:                                break;
                    213:                        default:
                    214:                                fprintf(stderr, "invalid option %s\n", s);
                    215:                                usage(1);
                    216:                        }
                    217:                s = *++argv;
                    218:                }
                    219:        if (s) do {
                    220:                x = open(s, O_RDONLY|O_BINARY);
                    221:                if (x < 0) {
                    222:                        fprintf(stderr, "%s: can't open %s\n", progname, s);
                    223:                        rc |= 1;
                    224:                        }
                    225:                else
                    226:                        process(s, x);
                    227:                }
                    228:                while(s = *++argv);
                    229:        else {
                    230:                process("/dev/stdin", fileno(stdin));
                    231:                }
                    232:        return rc;
                    233:        }

unix.superglobalmegacorp.com

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