11590Srgrimes/*- 21590Srgrimes * Copyright (c) 1987, 1992, 1993 31590Srgrimes * The Regents of the University of California. All rights reserved. 41590Srgrimes * 51590Srgrimes * Redistribution and use in source and binary forms, with or without 61590Srgrimes * modification, are permitted provided that the following conditions 71590Srgrimes * are met: 81590Srgrimes * 1. Redistributions of source code must retain the above copyright 91590Srgrimes * notice, this list of conditions and the following disclaimer. 101590Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 111590Srgrimes * notice, this list of conditions and the following disclaimer in the 121590Srgrimes * documentation and/or other materials provided with the distribution. 131590Srgrimes * 4. Neither the name of the University nor the names of its contributors 141590Srgrimes * may be used to endorse or promote products derived from this software 151590Srgrimes * without specific prior written permission. 161590Srgrimes * 171590Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 181590Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 191590Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 201590Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 211590Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 221590Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 231590Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 241590Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 251590Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 261590Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 271590Srgrimes * SUCH DAMAGE. 281590Srgrimes */ 291590Srgrimes 301590Srgrimes#ifndef lint 3187295Sdwmalonestatic const char copyright[] = 321590Srgrimes"@(#) Copyright (c) 1987, 1992, 1993\n\ 331590Srgrimes The Regents of the University of California. All rights reserved.\n"; 341590Srgrimes#endif /* not lint */ 351590Srgrimes 3687628Sdwmalone#if 0 371590Srgrimes#ifndef lint 3887628Sdwmalonestatic char sccsid[] = "@(#)rev.c 8.3 (Berkeley) 5/4/95"; 391590Srgrimes#endif /* not lint */ 4087628Sdwmalone#endif 411590Srgrimes 4287628Sdwmalone#include <sys/cdefs.h> 4387628Sdwmalone__FBSDID("$FreeBSD$"); 4487628Sdwmalone 451590Srgrimes#include <sys/types.h> 461590Srgrimes 471590Srgrimes#include <err.h> 48200462Sdelphij#include <errno.h> 49132245Stjr#include <locale.h> 501590Srgrimes#include <stdio.h> 511590Srgrimes#include <stdlib.h> 52200462Sdelphij#include <string.h> 5323690Speter#include <unistd.h> 54132245Stjr#include <wchar.h> 551590Srgrimes 56179652Swkoszekstatic void usage(void); 571590Srgrimes 581590Srgrimesint 59102944Sdwmalonemain(int argc, char *argv[]) 601590Srgrimes{ 61132245Stjr const char *filename; 62132245Stjr wchar_t *p, *t; 631590Srgrimes FILE *fp; 641590Srgrimes size_t len; 651590Srgrimes int ch, rval; 661590Srgrimes 67132245Stjr setlocale(LC_ALL, ""); 68132245Stjr 6924360Simp while ((ch = getopt(argc, argv, "")) != -1) 701590Srgrimes switch(ch) { 711590Srgrimes case '?': 721590Srgrimes default: 731590Srgrimes usage(); 741590Srgrimes } 751590Srgrimes 761590Srgrimes argc -= optind; 771590Srgrimes argv += optind; 781590Srgrimes 791590Srgrimes fp = stdin; 801590Srgrimes filename = "stdin"; 811590Srgrimes rval = 0; 821590Srgrimes do { 831590Srgrimes if (*argv) { 841590Srgrimes if ((fp = fopen(*argv, "r")) == NULL) { 851590Srgrimes warn("%s", *argv); 861590Srgrimes rval = 1; 871590Srgrimes ++argv; 881590Srgrimes continue; 891590Srgrimes } 901590Srgrimes filename = *argv++; 911590Srgrimes } 92132245Stjr while ((p = fgetwln(fp, &len)) != NULL) { 931590Srgrimes if (p[len - 1] == '\n') 941590Srgrimes --len; 951590Srgrimes for (t = p + len - 1; t >= p; --t) 96132245Stjr putwchar(*t); 97132245Stjr putwchar('\n'); 981590Srgrimes } 991590Srgrimes if (ferror(fp)) { 1001590Srgrimes warn("%s", filename); 101138883Sssouhlal clearerr(fp); 1021590Srgrimes rval = 1; 1031590Srgrimes } 1041590Srgrimes (void)fclose(fp); 1051590Srgrimes } while(*argv); 1061590Srgrimes exit(rval); 1071590Srgrimes} 1081590Srgrimes 1091590Srgrimesvoid 110102944Sdwmaloneusage(void) 1111590Srgrimes{ 1121590Srgrimes (void)fprintf(stderr, "usage: rev [file ...]\n"); 1131590Srgrimes exit(1); 1141590Srgrimes} 115