1956e8222Scf46844 /* 2956e8222Scf46844 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 3956e8222Scf46844 * Use is subject to license terms. 4956e8222Scf46844 */ 5956e8222Scf46844 67c478bd9Sstevel@tonic-gate /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 77c478bd9Sstevel@tonic-gate /* All Rights Reserved */ 87c478bd9Sstevel@tonic-gate 97c478bd9Sstevel@tonic-gate 107c478bd9Sstevel@tonic-gate /* 117c478bd9Sstevel@tonic-gate * Copyright (c) 1980 Regents of the University of California. 127c478bd9Sstevel@tonic-gate * All rights reserved. The Berkeley software License Agreement 137c478bd9Sstevel@tonic-gate * specifies the terms and conditions for redistribution. 147c478bd9Sstevel@tonic-gate */ 157c478bd9Sstevel@tonic-gate 16956e8222Scf46844 #pragma ident "%Z%%M% %I% %E% SMI" 177c478bd9Sstevel@tonic-gate 187c478bd9Sstevel@tonic-gate /* 197c478bd9Sstevel@tonic-gate * Sum bytes in file mod 2^16 207c478bd9Sstevel@tonic-gate */ 217c478bd9Sstevel@tonic-gate 227c478bd9Sstevel@tonic-gate #include <stdio.h> 237c478bd9Sstevel@tonic-gate 24956e8222Scf46844 int 25956e8222Scf46844 main(int argc, char **argv) 267c478bd9Sstevel@tonic-gate { 27956e8222Scf46844 unsigned int sum; 28956e8222Scf46844 int i, c; 29956e8222Scf46844 FILE *f; 30956e8222Scf46844 long long nbytes; 317c478bd9Sstevel@tonic-gate int errflg = 0; 327c478bd9Sstevel@tonic-gate 337c478bd9Sstevel@tonic-gate i = 1; 347c478bd9Sstevel@tonic-gate do { 357c478bd9Sstevel@tonic-gate if (i < argc) { 367c478bd9Sstevel@tonic-gate if ((f = fopen(argv[i], "r")) == NULL) { 37*f22acdffSgbrunett (void) fprintf(stderr, 38*f22acdffSgbrunett "sum: Can't open %s\n", argv[i]); 397c478bd9Sstevel@tonic-gate errflg += 10; 407c478bd9Sstevel@tonic-gate continue; 417c478bd9Sstevel@tonic-gate } 427c478bd9Sstevel@tonic-gate } else 437c478bd9Sstevel@tonic-gate f = stdin; 447c478bd9Sstevel@tonic-gate sum = 0; 457c478bd9Sstevel@tonic-gate nbytes = 0; 467c478bd9Sstevel@tonic-gate while ((c = getc(f)) != EOF) { 477c478bd9Sstevel@tonic-gate nbytes++; 487c478bd9Sstevel@tonic-gate if (sum&01) 497c478bd9Sstevel@tonic-gate sum = (sum>>1) + 0x8000; 507c478bd9Sstevel@tonic-gate else 517c478bd9Sstevel@tonic-gate sum >>= 1; 527c478bd9Sstevel@tonic-gate sum += c; 537c478bd9Sstevel@tonic-gate sum &= 0xFFFF; 547c478bd9Sstevel@tonic-gate } 557c478bd9Sstevel@tonic-gate if (ferror(f)) { 567c478bd9Sstevel@tonic-gate errflg++; 57*f22acdffSgbrunett (void) fprintf(stderr, 58*f22acdffSgbrunett "sum: read error on %s\n", 59*f22acdffSgbrunett argc > 1 ? argv[i] : "-"); 607c478bd9Sstevel@tonic-gate } 61*f22acdffSgbrunett 62*f22acdffSgbrunett (void) printf("%05u %5lld", sum, 63*f22acdffSgbrunett (nbytes + BUFSIZ - 1) / BUFSIZ); 647c478bd9Sstevel@tonic-gate if (argc > 2) 65*f22acdffSgbrunett (void) printf(" %s", argv[i]); 66*f22acdffSgbrunett (void) printf("\n"); 67*f22acdffSgbrunett (void) fclose(f); 687c478bd9Sstevel@tonic-gate } while (++i < argc); 69*f22acdffSgbrunett 70956e8222Scf46844 return (errflg); 717c478bd9Sstevel@tonic-gate } 72