mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-11 04:42:16 +01:00
Localize it.
off_t -> long. Install strfile & unstr -Wall cleanup Fix matching bug with offensive database
This commit is contained in:
parent
d9378aac9a
commit
f17947b74a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=15944
@ -1,11 +1,5 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
|
||||
SUBDIR= fortune
|
||||
|
||||
.if !make(install) && !make(distribute)
|
||||
SUBDIR+=strfile
|
||||
.endif
|
||||
|
||||
SUBDIR+= datfiles
|
||||
SUBDIR= fortune strfile datfiles unstr
|
||||
|
||||
.include <bsd.subdir.mk>
|
||||
|
@ -25,8 +25,10 @@ CAESAR=/usr/games/caesar
|
||||
|
||||
.if exists(${.CURDIR}/../strfile/obj/strfile)
|
||||
STRFILE=${.CURDIR}/../strfile/obj/strfile
|
||||
.else
|
||||
.elif exists(${.CURDIR}/../strfile/strfile)
|
||||
STRFILE=${.CURDIR}/../strfile/strfile
|
||||
.else
|
||||
STRFILE=/usr/games/strfile
|
||||
.endif
|
||||
|
||||
CLEANFILES+=${BLDS}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
PROG= fortune
|
||||
MAN6= fortune.6
|
||||
CFLAGS+=-I${.CURDIR}/../strfile
|
||||
CFLAGS+=-DDEBUG -Wall -I${.CURDIR}/../strfile
|
||||
DPADD= ${COMPAT}
|
||||
LDADD= -lcompat
|
||||
|
||||
|
@ -35,13 +35,13 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1986, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)fortune.c 8.1 (Berkeley) 5/31/93";
|
||||
static const char sccsid[] = "@(#)fortune.c 8.1 (Berkeley) 5/31/93";
|
||||
#endif /* not lint */
|
||||
|
||||
# include <sys/param.h>
|
||||
@ -55,6 +55,8 @@ static char sccsid[] = "@(#)fortune.c 8.1 (Berkeley) 5/31/93";
|
||||
# include <ctype.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <locale.h>
|
||||
# include <time.h>
|
||||
# include "strfile.h"
|
||||
# include "pathnames.h"
|
||||
|
||||
@ -66,11 +68,11 @@ static char sccsid[] = "@(#)fortune.c 8.1 (Berkeley) 5/31/93";
|
||||
# define CPERS 20 /* # of chars for each sec */
|
||||
# define SLEN 160 /* # of chars in short fortune */
|
||||
|
||||
# define POS_UNKNOWN ((off_t) -1) /* pos for file unknown */
|
||||
# define POS_UNKNOWN ((long) -1) /* pos for file unknown */
|
||||
# define NO_PROB (-1) /* no prob specified for file */
|
||||
|
||||
# ifdef DEBUG
|
||||
# define DPRINTF(l,x) if (Debug >= l) fprintf x; else
|
||||
# define DPRINTF(l,x) { if (Debug >= l) fprintf x; }
|
||||
# undef NDEBUG
|
||||
# else
|
||||
# define DPRINTF(l,x)
|
||||
@ -80,7 +82,7 @@ static char sccsid[] = "@(#)fortune.c 8.1 (Berkeley) 5/31/93";
|
||||
typedef struct fd {
|
||||
int percent;
|
||||
int fd, datfd;
|
||||
off_t pos;
|
||||
long pos;
|
||||
FILE *inf;
|
||||
char *name;
|
||||
char *path;
|
||||
@ -112,7 +114,7 @@ char *Fortbuf = NULL; /* fortune buffer for -m */
|
||||
|
||||
int Fort_len = 0;
|
||||
|
||||
off_t Seekpts[2]; /* seek pointers to fortunes */
|
||||
long Seekpts[2]; /* seek pointers to fortunes */
|
||||
|
||||
FILEDESC *File_list = NULL, /* Head of file list */
|
||||
*File_tail = NULL; /* Tail of file list */
|
||||
@ -186,6 +188,8 @@ char *av[];
|
||||
int fd;
|
||||
#endif /* OK_TO_WRITE_DISK */
|
||||
|
||||
(void) setlocale(LC_CTYPE, "");
|
||||
|
||||
getargs(ac, av);
|
||||
|
||||
#ifndef NO_REGEX
|
||||
@ -194,7 +198,7 @@ char *av[];
|
||||
#endif
|
||||
|
||||
init_prob();
|
||||
srandom((int)(time((time_t *) NULL) + getpid()));
|
||||
srandom((int)(time((time_t *) NULL) ^ getpid()));
|
||||
do {
|
||||
get_fort();
|
||||
} while ((Short_only && fortlen() > SLEN) ||
|
||||
@ -235,19 +239,23 @@ void
|
||||
display(fp)
|
||||
FILEDESC *fp;
|
||||
{
|
||||
register char *p, ch;
|
||||
register char *p;
|
||||
register unsigned char ch;
|
||||
char line[BUFSIZ];
|
||||
|
||||
open_fp(fp);
|
||||
(void) fseek(fp->inf, (long)Seekpts[0], 0);
|
||||
(void) fseek(fp->inf, Seekpts[0], 0);
|
||||
for (Fort_len = 0; fgets(line, sizeof line, fp->inf) != NULL &&
|
||||
!STR_ENDSTRING(line, fp->tbl); Fort_len++) {
|
||||
if (fp->tbl.str_flags & STR_ROTATED)
|
||||
for (p = line; ch = *p; ++p)
|
||||
if (isupper(ch))
|
||||
*p = 'A' + (ch - 'A' + 13) % 26;
|
||||
else if (islower(ch))
|
||||
*p = 'a' + (ch - 'a' + 13) % 26;
|
||||
for (p = line; (ch = *p) != '\0'; ++p) {
|
||||
if (isascii(ch)) {
|
||||
if (isupper(ch))
|
||||
*p = 'A' + (ch - 'A' + 13) % 26;
|
||||
else if (islower(ch))
|
||||
*p = 'a' + (ch - 'a' + 13) % 26;
|
||||
}
|
||||
}
|
||||
fputs(line, stdout);
|
||||
}
|
||||
(void) fflush(stdout);
|
||||
@ -267,7 +275,7 @@ fortlen()
|
||||
nchar = (Seekpts[1] - Seekpts[0] <= SLEN);
|
||||
else {
|
||||
open_fp(Fortfile);
|
||||
(void) fseek(Fortfile->inf, (long)Seekpts[0], 0);
|
||||
(void) fseek(Fortfile->inf, Seekpts[0], 0);
|
||||
nchar = 0;
|
||||
while (fgets(line, sizeof line, Fortfile->inf) != NULL &&
|
||||
!STR_ENDSTRING(line, Fortfile->tbl))
|
||||
@ -399,11 +407,11 @@ register int file_cnt;
|
||||
&File_list, &File_tail, NULL);
|
||||
for (i = 0; i < file_cnt; i++) {
|
||||
percent = NO_PROB;
|
||||
if (!isdigit(files[i][0]))
|
||||
if (!isdigit((unsigned char)files[i][0]))
|
||||
sp = files[i];
|
||||
else {
|
||||
percent = 0;
|
||||
for (sp = files[i]; isdigit(*sp); sp++)
|
||||
for (sp = files[i]; isdigit((unsigned char)*sp); sp++)
|
||||
percent = percent * 10 + *sp - '0';
|
||||
if (percent > 100) {
|
||||
fprintf(stderr, "percentages must be <= 100\n");
|
||||
@ -791,12 +799,14 @@ int check_for_offend;
|
||||
*datp = datfile;
|
||||
else
|
||||
free(datfile);
|
||||
#ifdef OK_TO_WRITE_DISK
|
||||
if (posp != NULL) {
|
||||
#ifdef OK_TO_WRITE_DISK
|
||||
*posp = copy(file, (unsigned int) (strlen(file) + 4)); /* +4 for ".dat" */
|
||||
(void) strcat(*posp, ".pos");
|
||||
}
|
||||
#else
|
||||
*posp = NULL;
|
||||
#endif /* OK_TO_WRITE_DISK */
|
||||
}
|
||||
DPRINTF(2, (stderr, "TRUE\n"));
|
||||
return TRUE;
|
||||
}
|
||||
@ -856,7 +866,7 @@ void *ptr;
|
||||
void
|
||||
init_prob()
|
||||
{
|
||||
register FILEDESC *fp, *last;
|
||||
register FILEDESC *fp, *last = NULL;
|
||||
register int percent, num_noprob, frac;
|
||||
|
||||
/*
|
||||
@ -955,17 +965,17 @@ get_fort()
|
||||
if (fp->next != NULL) {
|
||||
sum_noprobs(fp);
|
||||
choice = random() % Noprob_tbl.str_numstr;
|
||||
DPRINTF(1, (stderr, "choice = %d (of %d) \n", choice,
|
||||
DPRINTF(1, (stderr, "choice = %d (of %ld) \n", choice,
|
||||
Noprob_tbl.str_numstr));
|
||||
while (choice >= fp->tbl.str_numstr) {
|
||||
choice -= fp->tbl.str_numstr;
|
||||
fp = fp->next;
|
||||
DPRINTF(1, (stderr,
|
||||
" skip \"%s\", %d (choice = %d)\n",
|
||||
" skip \"%s\", %ld (choice = %d)\n",
|
||||
fp->name, fp->tbl.str_numstr,
|
||||
choice));
|
||||
}
|
||||
DPRINTF(1, (stderr, "using \"%s\", %d\n", fp->name,
|
||||
DPRINTF(1, (stderr, "using \"%s\", %ld\n", fp->name,
|
||||
fp->tbl.str_numstr));
|
||||
}
|
||||
get_tbl(fp);
|
||||
@ -1007,15 +1017,15 @@ FILEDESC *parent;
|
||||
else {
|
||||
get_tbl(parent);
|
||||
choice = random() % parent->tbl.str_numstr;
|
||||
DPRINTF(1, (stderr, " choice = %d (of %d)\n",
|
||||
DPRINTF(1, (stderr, " choice = %d (of %ld)\n",
|
||||
choice, parent->tbl.str_numstr));
|
||||
for (fp = parent->child; choice >= fp->tbl.str_numstr;
|
||||
fp = fp->next) {
|
||||
choice -= fp->tbl.str_numstr;
|
||||
DPRINTF(1, (stderr, "\tskip %s, %d (choice = %d)\n",
|
||||
DPRINTF(1, (stderr, "\tskip %s, %ld (choice = %d)\n",
|
||||
fp->name, fp->tbl.str_numstr, choice));
|
||||
}
|
||||
DPRINTF(1, (stderr, " using %s, %d\n", fp->name,
|
||||
DPRINTF(1, (stderr, " using %s, %ld\n", fp->name,
|
||||
fp->tbl.str_numstr));
|
||||
return fp;
|
||||
}
|
||||
@ -1106,7 +1116,7 @@ FILEDESC *fp;
|
||||
}
|
||||
if (++(fp->pos) >= fp->tbl.str_numstr)
|
||||
fp->pos -= fp->tbl.str_numstr;
|
||||
DPRINTF(1, (stderr, "pos for %s is %qd\n", fp->name, fp->pos));
|
||||
DPRINTF(1, (stderr, "pos for %s is %ld\n", fp->name, fp->pos));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1159,7 +1169,7 @@ register STRFILE *tp;
|
||||
{
|
||||
tp->str_numstr = 0;
|
||||
tp->str_longlen = 0;
|
||||
tp->str_shortlen = -1;
|
||||
tp->str_shortlen = ~((unsigned long)0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1207,7 +1217,6 @@ int lev;
|
||||
fprintf(stderr, " %s", STR(list->name));
|
||||
DPRINTF(1, (stderr, " (%s, %s, %s)\n", STR(list->path),
|
||||
STR(list->datfile), STR(list->posfile)));
|
||||
putc('\n', stderr);
|
||||
if (list->child != NULL)
|
||||
print_list(list->child, lev + 1);
|
||||
list = list->next;
|
||||
@ -1229,7 +1238,7 @@ register char *orig;
|
||||
|
||||
cnt = 1; /* allow for '\0' */
|
||||
for (sp = orig; *sp != '\0'; sp++)
|
||||
if (isalpha(*sp))
|
||||
if (isalpha((unsigned char)*sp))
|
||||
cnt += 4;
|
||||
else
|
||||
cnt++;
|
||||
@ -1239,16 +1248,16 @@ register char *orig;
|
||||
}
|
||||
|
||||
for (sp = new; *orig != '\0'; orig++) {
|
||||
if (islower(*orig)) {
|
||||
if (islower((unsigned char)*orig)) {
|
||||
*sp++ = '[';
|
||||
*sp++ = *orig;
|
||||
*sp++ = toupper(*orig);
|
||||
*sp++ = toupper((unsigned char)*orig);
|
||||
*sp++ = ']';
|
||||
}
|
||||
else if (isupper(*orig)) {
|
||||
else if (isupper((unsigned char)*orig)) {
|
||||
*sp++ = '[';
|
||||
*sp++ = *orig;
|
||||
*sp++ = tolower(*orig);
|
||||
*sp++ = tolower((unsigned char)*orig);
|
||||
*sp++ = ']';
|
||||
}
|
||||
else
|
||||
@ -1310,9 +1319,10 @@ void
|
||||
matches_in_list(list)
|
||||
FILEDESC *list;
|
||||
{
|
||||
register char *sp;
|
||||
register char *sp, *p;
|
||||
register FILEDESC *fp;
|
||||
int in_file;
|
||||
unsigned char ch;
|
||||
|
||||
for (fp = list; fp != NULL; fp = fp->next) {
|
||||
if (fp->child != NULL) {
|
||||
@ -1328,6 +1338,15 @@ FILEDESC *list;
|
||||
sp += strlen(sp);
|
||||
else {
|
||||
*sp = '\0';
|
||||
if (fp->tbl.str_flags & STR_ROTATED)
|
||||
for (p = Fortbuf; (ch = *p) != '\0'; ++p) {
|
||||
if (isascii(ch)) {
|
||||
if (isupper(ch))
|
||||
*p = 'A' + (ch - 'A' + 13) % 26;
|
||||
else if (islower(ch))
|
||||
*p = 'a' + (ch - 'a' + 13) % 26;
|
||||
}
|
||||
}
|
||||
if (RE_EXEC(Fortbuf)) {
|
||||
printf("%c%c", fp->tbl.str_delim,
|
||||
fp->tbl.str_delim);
|
||||
|
@ -1,6 +1,9 @@
|
||||
# @(#)Makefile 8.1 (Berkeley) 5/31/93
|
||||
|
||||
PROG= strfile
|
||||
NOMAN= noman
|
||||
MAN8= strfile.8
|
||||
MLINKS= strfile.8 unstr.8
|
||||
CFLAGS+= -Wall
|
||||
|
||||
.include "${.CURDIR}/../../Makefile.inc"
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -35,25 +35,25 @@
|
||||
*/
|
||||
|
||||
#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[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93";
|
||||
static const char sccsid[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93";
|
||||
#endif /* not lint */
|
||||
|
||||
# include <machine/endian.h>
|
||||
# include <sys/param.h>
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <ctype.h>
|
||||
# include <string.h>
|
||||
# include <time.h>
|
||||
# include <locale.h>
|
||||
# include <unistd.h>
|
||||
# include "strfile.h"
|
||||
|
||||
# ifndef MAXPATHLEN
|
||||
# define MAXPATHLEN 1024
|
||||
# endif /* MAXPATHLEN */
|
||||
|
||||
/*
|
||||
* This program takes a file composed of strings seperated by
|
||||
* lines starting with two consecutive delimiting character (default
|
||||
@ -83,12 +83,7 @@ static char sccsid[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93";
|
||||
# define STORING_PTRS (Oflag || Rflag)
|
||||
# define CHUNKSIZE 512
|
||||
|
||||
#ifdef lint
|
||||
# define ALWAYS atoi("1")
|
||||
#else
|
||||
# define ALWAYS 1
|
||||
#endif
|
||||
# define ALLOC(ptr,sz) if (ALWAYS) { \
|
||||
# define ALLOC(ptr,sz) { \
|
||||
if (ptr == NULL) \
|
||||
ptr = malloc((unsigned int) (CHUNKSIZE * sizeof *ptr)); \
|
||||
else if (((sz) + 1) % CHUNKSIZE == 0) \
|
||||
@ -97,7 +92,7 @@ static char sccsid[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93";
|
||||
fprintf(stderr, "out of space\n"); \
|
||||
exit(1); \
|
||||
} \
|
||||
} else
|
||||
}
|
||||
|
||||
#ifdef NO_VOID
|
||||
# define void char
|
||||
@ -105,7 +100,7 @@ static char sccsid[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93";
|
||||
|
||||
typedef struct {
|
||||
char first;
|
||||
off_t pos;
|
||||
long pos;
|
||||
} STR;
|
||||
|
||||
char *Infile = NULL, /* input file name */
|
||||
@ -119,7 +114,7 @@ int Rflag = FALSE; /* randomize order flag */
|
||||
int Xflag = FALSE; /* set rotated bit */
|
||||
long Num_pts = 0; /* number of pointers/strings */
|
||||
|
||||
off_t *Seekpts;
|
||||
long *Seekpts;
|
||||
|
||||
FILE *Sort_1, *Sort_2; /* pointers for sorting */
|
||||
|
||||
@ -127,9 +122,8 @@ STRFILE Tbl; /* statistics table */
|
||||
|
||||
STR *Firstch; /* first chars of each string */
|
||||
|
||||
char *fgets(), *strcpy(), *strcat();
|
||||
|
||||
void *malloc(), *realloc();
|
||||
void getargs(), add_offset(), do_order(), randomize(), usage();
|
||||
int cmp_str();
|
||||
|
||||
/*
|
||||
* main:
|
||||
@ -140,18 +134,20 @@ void *malloc(), *realloc();
|
||||
* CHUNKSIZE blocks; if the latter, we just write each pointer,
|
||||
* and then seek back to the beginning to write in the table.
|
||||
*/
|
||||
main(ac, av)
|
||||
void main(ac, av)
|
||||
int ac;
|
||||
char **av;
|
||||
{
|
||||
register char *sp, dc;
|
||||
register FILE *inf, *outf;
|
||||
register off_t last_off, length, pos, *p;
|
||||
register long last_off, length, pos, *p;
|
||||
register int first, cnt;
|
||||
register char *nsp;
|
||||
register STR *fp;
|
||||
static char string[257];
|
||||
|
||||
(void) setlocale(LC_CTYPE, "");
|
||||
|
||||
getargs(ac, av); /* evalute arguments */
|
||||
dc = Delimch;
|
||||
if ((inf = fopen(Infile, "r")) == NULL) {
|
||||
@ -164,14 +160,14 @@ char **av;
|
||||
exit(1);
|
||||
}
|
||||
if (!STORING_PTRS)
|
||||
(void) fseek(outf, sizeof Tbl, 0);
|
||||
(void) fseek(outf, (long) sizeof Tbl, 0);
|
||||
|
||||
/*
|
||||
* Write the strings onto the file
|
||||
*/
|
||||
|
||||
Tbl.str_longlen = 0;
|
||||
Tbl.str_shortlen = (unsigned int) 0xffffffff;
|
||||
Tbl.str_shortlen = ~((unsigned long) 0);
|
||||
Tbl.str_delim = dc;
|
||||
Tbl.str_version = VERSION;
|
||||
first = Oflag;
|
||||
@ -179,7 +175,7 @@ char **av;
|
||||
last_off = 0;
|
||||
do {
|
||||
sp = fgets(string, 256, inf);
|
||||
if (sp == NULL || sp[0] == dc && sp[1] == '\n') {
|
||||
if (sp == NULL || (sp[0] == dc && sp[1] == '\n')) {
|
||||
pos = ftell(inf);
|
||||
length = pos - last_off - (sp ? strlen(sp) : 0);
|
||||
last_off = pos;
|
||||
@ -193,12 +189,12 @@ char **av;
|
||||
first = Oflag;
|
||||
}
|
||||
else if (first) {
|
||||
for (nsp = sp; !isalnum(*nsp); nsp++)
|
||||
for (nsp = sp; !isalnum((unsigned char)*nsp); nsp++)
|
||||
continue;
|
||||
ALLOC(Firstch, Num_pts);
|
||||
fp = &Firstch[Num_pts - 1];
|
||||
if (Iflag && isupper(*nsp))
|
||||
fp->first = tolower(*nsp);
|
||||
if (Iflag && isupper((unsigned char)*nsp))
|
||||
fp->first = tolower((unsigned char)*nsp);
|
||||
else
|
||||
fp->first = *nsp;
|
||||
fp->pos = Seekpts[Num_pts - 1];
|
||||
@ -225,14 +221,14 @@ char **av;
|
||||
if (Num_pts == 2)
|
||||
puts("There was 1 string");
|
||||
else
|
||||
printf("There were %d strings\n", Num_pts - 1);
|
||||
printf("There were %ld strings\n", Num_pts - 1);
|
||||
printf("Longest string: %lu byte%s\n", Tbl.str_longlen,
|
||||
Tbl.str_longlen == 1 ? "" : "s");
|
||||
printf("Shortest string: %lu byte%s\n", Tbl.str_shortlen,
|
||||
Tbl.str_shortlen == 1 ? "" : "s");
|
||||
}
|
||||
|
||||
(void) fseek(outf, (off_t) 0, 0);
|
||||
rewind(outf);
|
||||
Tbl.str_version = htonl(Tbl.str_version);
|
||||
Tbl.str_numstr = htonl(Num_pts - 1);
|
||||
Tbl.str_longlen = htonl(Tbl.str_longlen);
|
||||
@ -251,7 +247,7 @@ char **av;
|
||||
/*
|
||||
* This routine evaluates arguments from the command line
|
||||
*/
|
||||
getargs(argc, argv)
|
||||
void getargs(argc, argv)
|
||||
int argc;
|
||||
char **argv;
|
||||
{
|
||||
@ -265,7 +261,7 @@ char **argv;
|
||||
Delimch = *optarg;
|
||||
if (!isascii(Delimch)) {
|
||||
printf("bad delimiting character: '\\%o\n'",
|
||||
Delimch);
|
||||
(unsigned char)Delimch);
|
||||
}
|
||||
break;
|
||||
case 'i': /* ignore case in ordering */
|
||||
@ -304,7 +300,7 @@ char **argv;
|
||||
}
|
||||
}
|
||||
|
||||
usage()
|
||||
void usage()
|
||||
{
|
||||
(void) fprintf(stderr,
|
||||
"strfile [-iorsx] [-c char] sourcefile [datafile]\n");
|
||||
@ -315,11 +311,11 @@ usage()
|
||||
* add_offset:
|
||||
* Add an offset to the list, or write it out, as appropriate.
|
||||
*/
|
||||
add_offset(fp, off)
|
||||
void add_offset(fp, off)
|
||||
FILE *fp;
|
||||
off_t off;
|
||||
long off;
|
||||
{
|
||||
off_t net;
|
||||
long net;
|
||||
|
||||
if (!STORING_PTRS) {
|
||||
net = htonl(off);
|
||||
@ -335,12 +331,11 @@ off_t off;
|
||||
* do_order:
|
||||
* Order the strings alphabetically (possibly ignoring case).
|
||||
*/
|
||||
do_order()
|
||||
void do_order()
|
||||
{
|
||||
register int i;
|
||||
register off_t *lp;
|
||||
register long *lp;
|
||||
register STR *fp;
|
||||
extern int cmp_str();
|
||||
|
||||
Sort_1 = fopen(Infile, "r");
|
||||
Sort_2 = fopen(Infile, "r");
|
||||
@ -359,38 +354,21 @@ do_order()
|
||||
* cmp_str:
|
||||
* Compare two strings in the file
|
||||
*/
|
||||
char *
|
||||
unctrl(c)
|
||||
char c;
|
||||
{
|
||||
static char buf[3];
|
||||
|
||||
if (isprint(c)) {
|
||||
buf[0] = c;
|
||||
buf[1] = '\0';
|
||||
}
|
||||
else if (c == 0177) {
|
||||
buf[0] = '^';
|
||||
buf[1] = '?';
|
||||
}
|
||||
else {
|
||||
buf[0] = '^';
|
||||
buf[1] = c + 'A' - 1;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
cmp_str(p1, p2)
|
||||
int cmp_str(p1, p2)
|
||||
STR *p1, *p2;
|
||||
{
|
||||
register int c1, c2;
|
||||
register int n1, n2;
|
||||
static char s1[2], s2[2];
|
||||
int r;
|
||||
|
||||
# define SET_N(nf,ch) (nf = (ch == '\n'))
|
||||
# define IS_END(ch,nf) (ch == Delimch && nf)
|
||||
# define IS_END(ch,nf) (ch == EOF || (ch == (unsigned char) Delimch && nf))
|
||||
|
||||
c1 = p1->first;
|
||||
c2 = p2->first;
|
||||
s1[0] = c1 = (unsigned char) p1->first;
|
||||
s2[0] = c2 = (unsigned char) p2->first;
|
||||
if ((r = strcoll(s1, s2)) != 0)
|
||||
return r;
|
||||
if (c1 != c2)
|
||||
return c1 - c2;
|
||||
|
||||
@ -399,9 +377,9 @@ STR *p1, *p2;
|
||||
|
||||
n1 = FALSE;
|
||||
n2 = FALSE;
|
||||
while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0')
|
||||
while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0' && c1 != EOF)
|
||||
SET_N(n1, c1);
|
||||
while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0')
|
||||
while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0' && c2 != EOF)
|
||||
SET_N(n2, c2);
|
||||
|
||||
while (!IS_END(c1, n1) && !IS_END(c2, n2)) {
|
||||
@ -411,6 +389,10 @@ STR *p1, *p2;
|
||||
if (isupper(c2))
|
||||
c2 = tolower(c2);
|
||||
}
|
||||
s1[0] = c1;
|
||||
s2[0] = c2;
|
||||
if ((r = strcoll(s1, s2)) != 0)
|
||||
return r;
|
||||
if (c1 != c2)
|
||||
return c1 - c2;
|
||||
SET_N(n1, c1);
|
||||
@ -422,6 +404,10 @@ STR *p1, *p2;
|
||||
c1 = 0;
|
||||
if (IS_END(c2, n2))
|
||||
c2 = 0;
|
||||
s1[0] = c1;
|
||||
s2[0] = c2;
|
||||
if ((r = strcoll(s1, s2)) != 0)
|
||||
return r;
|
||||
return c1 - c2;
|
||||
}
|
||||
|
||||
@ -431,14 +417,13 @@ STR *p1, *p2;
|
||||
* not to randomize across delimiter boundaries. All
|
||||
* randomization is done within each block.
|
||||
*/
|
||||
randomize()
|
||||
void randomize()
|
||||
{
|
||||
register int cnt, i;
|
||||
register off_t tmp;
|
||||
register off_t *sp;
|
||||
extern time_t time();
|
||||
register long tmp;
|
||||
register long *sp;
|
||||
|
||||
srandom((int)(time((time_t *) NULL) + getpid()));
|
||||
srandom((int)(time((time_t *) NULL) ^ getpid()));
|
||||
|
||||
Tbl.str_flags |= STR_RANDOM;
|
||||
cnt = Tbl.str_numstr;
|
||||
|
@ -37,7 +37,7 @@
|
||||
*/
|
||||
|
||||
#define STR_ENDSTRING(line,tbl) \
|
||||
((line)[0] == (tbl).str_delim && (line)[1] == '\n')
|
||||
(((unsigned char)(line)[0]) == (tbl).str_delim && (line)[1] == '\n')
|
||||
|
||||
typedef struct { /* information table */
|
||||
#define VERSION 1
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
PROG= unstr
|
||||
NOMAN= noman
|
||||
CFLAGS+=-I${.CURDIR}/../strfile
|
||||
CFLAGS+=-Wall -I${.CURDIR}/../strfile
|
||||
|
||||
.include "${.CURDIR}/../../Makefile.inc"
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -35,13 +35,13 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1991, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)unstr.c 8.1 (Berkeley) 5/31/93";
|
||||
static const char sccsid[] = "@(#)unstr.c 8.1 (Berkeley) 5/31/93";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -57,15 +57,11 @@ static char sccsid[] = "@(#)unstr.c 8.1 (Berkeley) 5/31/93";
|
||||
* Ken Arnold Aug 13, 1978
|
||||
*/
|
||||
|
||||
# include <machine/endian.h>
|
||||
# include <sys/param.h>
|
||||
# include "strfile.h"
|
||||
# include <stdio.h>
|
||||
# include <ctype.h>
|
||||
|
||||
# ifndef MAXPATHLEN
|
||||
# define MAXPATHLEN 1024
|
||||
# endif /* MAXPATHLEN */
|
||||
# include <string.h>
|
||||
# include "strfile.h"
|
||||
|
||||
char *Infile, /* name of input file */
|
||||
Datafile[MAXPATHLEN], /* name of data file */
|
||||
@ -73,10 +69,10 @@ char *Infile, /* name of input file */
|
||||
|
||||
FILE *Inf, *Dataf;
|
||||
|
||||
char *strcat(), *strcpy();
|
||||
void getargs(), order_unstr();
|
||||
|
||||
/* ARGSUSED */
|
||||
main(ac, av)
|
||||
void main(ac, av)
|
||||
int ac;
|
||||
char **av;
|
||||
{
|
||||
@ -108,7 +104,7 @@ char **av;
|
||||
exit(0);
|
||||
}
|
||||
|
||||
getargs(av)
|
||||
void getargs(av)
|
||||
register char *av[];
|
||||
{
|
||||
if (!*++av) {
|
||||
@ -120,12 +116,12 @@ register char *av[];
|
||||
(void) strcat(Datafile, ".dat");
|
||||
}
|
||||
|
||||
order_unstr(tbl)
|
||||
void order_unstr(tbl)
|
||||
register STRFILE *tbl;
|
||||
{
|
||||
register int i;
|
||||
register char *sp;
|
||||
auto off_t pos;
|
||||
long pos;
|
||||
char buf[BUFSIZ];
|
||||
|
||||
for (i = 0; i < tbl->str_numstr; i++) {
|
||||
|
Loading…
Reference in New Issue
Block a user