home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
gnu
/
find-3.8-src.lha
/
src
/
amiga
/
find-3.8
/
locate
/
bigram.c
next >
Wrap
C/C++ Source or Header
|
1994-02-23
|
2KB
|
88 lines
/* bigram -- list bigrams for locate
Usage: bigram < text > bigrams
Use 'code' to encode a file using this output.
Author: James A. Woods (jaw@riacs.edu)
Modified by David MacKenzie (djm@ai.mit.edu)
Public domain. */
#include <stdio.h>
#if defined(HAVE_STRING_H) || defined(STDC_HEADERS)
#include <string.h>
#else
#include <strings.h>
#endif
#ifdef STDC_HEADERS
#include <stdlib.h>
#endif
#include <sys/types.h>
#include "pathmax.h"
char *xmalloc ();
static int prefix_length ();
/* The name this program was run with. */
char *program_name;
static char *path;
static char *oldpath;
int
main (argc, argv)
int argc;
char **argv;
{
register int count, j;
unsigned line_length;
int path_max;
program_name = argv[0];
path_max = PATH_MAX;
path = xmalloc (path_max + 2);
oldpath = xmalloc (path_max + 2);
path[path_max] = '\0';
strcpy (oldpath, " ");
while (fgets (path, path_max, stdin) != NULL)
{
line_length = strlen (path);
if (line_length == 0)
fprintf (stderr, "%s: null line in input\n", argv[0]);
else if (path[line_length - 1] != '\n')
fprintf (stderr, "%s: long line in input; truncating to `%s'\n",
argv[0], path);
else
path[line_length - 1] = '\0'; /* Remove newline. */
count = prefix_length (oldpath, path);
/* Output post-residue bigrams only. */
for (j = count; path[j] != '\0'; j += 2)
{
if (path[j + 1] == '\0')
break;
putchar (path[j]);
putchar (path[j + 1]);
putchar ('\n');
}
strcpy (oldpath, path);
}
exit (0);
}
/* Return length of longest common prefix of strings S1 and S2. */
static int
prefix_length (s1, s2)
char *s1, *s2;
{
register char *start;
for (start = s1; *s1 == *s2; s1++, s2++)
if (*s1 == '\0')
break;
return s1 - start;
}