[net.sources] program to totaly reverse input

kurt@pyuxhh.UUCP (K A Gluck) (09/09/85)

rellik gub
# Program to super reverse input
# 
# this program will completly reverse its input.
# (with one exception - the output will have an extra line feed
# at its beginning, and the final trainling line feed will be deleted)
# for example, the folowing was a copy of the previous run through 
# this program
#
#-------------------------------------------------------------------------
# margorp siht
#  hguorht nur suoiverp eht fo ypoc a saw gniwolof eht ,elpmaxe rof
# )deteled eb lliw deef enil gnilniart lanif eht dna ,gninnigeb sti ta
# deef enil artxe na evah lliw tuptuo eht - noitpecxe eno htiw(
# .tupni sti esrever yltelpmoc lliw margorp siht
#
# tupni esrever repus ot margorP
#
#-------------------------------------------------------------------------
# This is a shell archive.  Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file".  (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# reverse.c reverse.man

echo x - reverse.c
cat > "reverse.c" << '//E*O*F reverse.c//'
#include <stdio.h>
#include <fcntl.h>
#define strlen 256
 
main(argc,argv)  /* rev- lists file. */
		/* argc - number of args*/
		/* argv - pointer to array of char strings of args*/
int argc;
char *argv[];
{
 int fp, open(), creat() , strcmp() ;
 char template[30], *mktemp() , *strcpy() ;
 char *tmp;
char *tmpname() ;
 long pos;
 int n;
 
 if( argc == 1 ) /* no args - halt */
    { printf("rev- no argument given\n");
      printf("usage-   rev file1 [{filen}]\n");
	printf(" alt:	rev -    reads from stdin (pipes etc...) \n");
      exit(1); }
 else
	while( --argc > 0 )
		if( (*++argv)[0] == '-' )
		{
			if( ( fp = open(( tmp = ( mktemp("/tmp/revXXXXXX\0")) ),O_RDWR | O_CREAT , 0755)) == -1 )
			{	printf("rev- cant open %s <<<<\n",*template);
			} else {
				filecopy(0,fp);
				filerev(fp) ;
				close(fp);
				unlink(tmp);
			}
		} else {
			if (( fp = open(*argv,0)) == -1 ) {
				printf("rev- cant open %s ###################\n",*argv);
			} else {
				filerev(fp) ;
				close(fp);
			}
		}
 }
 filecopy(fpi,fpo)	/* list a file			*/
 int fpi , fpo;		/* the file			*/
{ char c ;
 while ( ( read(fpi,&c,1) ) > 0 ) 
 	write(fpo,&c,1) ; 
 }
 filerev(fp)	/* list a file			*/
 int fp;		/* the file			*/
{ char c ;
  long p ;
	int flag;
 long lseek() ;
 int whence;
 p=0L ;
 whence=2;
 flag=1;
  while ( ( lseek(fp,p,whence ) ) != -1L )  {
	p=0L-2L;
	whence=1;
 	read(fp,&c,1) ; 
	if( flag==0 ) 	write(1,&c,1) ; 
	flag=0;
	}
	printf("\n");
 }
//E*O*F reverse.c//

echo x - reverse.man
cat > "reverse.man" << '//E*O*F reverse.man//'
.tr ~
.de Na
.br
\\$1
..
.de Ex
.IP "" 5
.B \\$1 \\$2 \$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
.P
..
.de Es
.IP "\\$1" 5
.B \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 
..
.de Ee
.br
.B \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 
..
.de Ez
.P
..
.tr ~
.TH reverse lman "Pics System Test"
.SH NAME
reverse - c program to reverse files.
.SH SYNOPSIS
.Na "reverse files"
.SH DESCRIPTION
.B reverse
is a filter to reverse files.
It is used in a manner similar to cat (see cat(1)).
.B reverse
will process each of its arguments in turn, reading the files backwards.
If any file has 
.B -
for its name, 
.B reverse
will create a temporary file, read standard input into that temporary file
and then reverse the temporary file.
.SH EXAMPLES
.Es "To reverse input from terminal" reverse -
.Ez
.Es "To create a confusing listing" ps -ef |reverse -
.Ez
.Es  "To reverse the date" date |reverse -
.Ez
.Es "To reverse a file" who >file
.Ee reverse file
.Ez
.SH "SEE ALSO"
cat(1)
.SH AUTHOR
Kurt Gluck, SPL 1c273a x2023
//E*O*F reverse.man//

exit 0
-- 
Kurt Gluck                              (201)-561-7100 x2023
SPL 1c273a                              ihnp4!rruxg!kurt
Bell Communications Research Inc        ihnp4!pyuxhh!kurt
50 Cragwood Road
South Plainfield, NJ 07080