Use valid ctype range now.
Includes cleanup Misc. cleanup Use absolute path in rot13 wrapper.
This commit is contained in:
parent
6859875c81
commit
36f5cb505d
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=15929
@ -6,6 +6,8 @@ DPADD= ${LIBM}
|
||||
LDADD= -lm
|
||||
MLINKS= caesar.6 rot13.6
|
||||
|
||||
CFLAGS+= -Wall
|
||||
|
||||
beforeinstall:
|
||||
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
|
||||
${.CURDIR}/rot13.sh ${DESTDIR}/usr/games/rot13
|
||||
|
@ -49,7 +49,7 @@ statistics.
|
||||
reads from the standard input and writes to the standard output.
|
||||
.Pp
|
||||
The optional numerical argument
|
||||
Ar rotation
|
||||
.Ar rotation
|
||||
may be used to specify a specific rotation value.
|
||||
.Pp
|
||||
The frequency (from most common to least) of English letters is as follows:
|
||||
|
@ -40,24 +40,28 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1989, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)caesar.c 8.1 (Berkeley) 5/31/93";
|
||||
static const char sccsid[] = "@(#)caesar.c 8.1 (Berkeley) 5/31/93";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define LINELENGTH 2048
|
||||
#define ROTATE(ch, perm) \
|
||||
isascii(ch) ? ( \
|
||||
isupper(ch) ? ('A' + (ch - 'A' + perm) % 26) : \
|
||||
islower(ch) ? ('a' + (ch - 'a' + perm) % 26) : ch
|
||||
islower(ch) ? ('a' + (ch - 'a' + perm) % 26) : ch) : ch
|
||||
|
||||
/*
|
||||
* letter frequencies (taken from some unix(tm) documentation)
|
||||
@ -69,15 +73,15 @@ double stdf[26] = {
|
||||
2.62, 0.81, 1.88, 0.23, 2.07, 0.06,
|
||||
};
|
||||
|
||||
main(argc, argv)
|
||||
void printit();
|
||||
|
||||
void main(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
extern int errno;
|
||||
register int ch, dot, i, nread, winnerdot;
|
||||
register int ch, dot, i, nread, winnerdot = 0;
|
||||
register char *inbuf;
|
||||
int obs[26], try, winner;
|
||||
char *malloc(), *strerror();
|
||||
|
||||
if (argc > 1)
|
||||
printit(argv[1]);
|
||||
@ -99,12 +103,14 @@ main(argc, argv)
|
||||
exit(1);
|
||||
}
|
||||
for (i = nread; i--;) {
|
||||
ch = inbuf[i];
|
||||
ch = (unsigned char) inbuf[i];
|
||||
if (isascii(ch)) {
|
||||
if (islower(ch))
|
||||
++obs[ch - 'a'];
|
||||
else if (isupper(ch))
|
||||
++obs[ch - 'A'];
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* now "dot" the freqs with the observed letter freqs
|
||||
@ -126,7 +132,7 @@ main(argc, argv)
|
||||
|
||||
for (;;) {
|
||||
for (i = 0; i < nread; ++i) {
|
||||
ch = inbuf[i];
|
||||
ch = (unsigned char) inbuf[i];
|
||||
putchar(ROTATE(ch, winner));
|
||||
}
|
||||
if (nread < LINELENGTH)
|
||||
@ -139,7 +145,7 @@ main(argc, argv)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
printit(arg)
|
||||
void printit(arg)
|
||||
char *arg;
|
||||
{
|
||||
register int ch, rot;
|
||||
|
@ -34,4 +34,4 @@
|
||||
# @(#)rot13.sh 8.1 (Berkeley) 5/31/93
|
||||
#
|
||||
|
||||
caesar 13 $*
|
||||
/usr/games/caesar 13 $*
|
||||
|
Loading…
Reference in New Issue
Block a user