September 2004
Intermediate to advanced
192 pages
10h 12m
English
The rnote program is a simple way to keep
track of which version did what. Just
compile it and run:
% rnote RELEASE_NOTES | moreThe program itself is written in C and should compile on most systems. The numbers along the left are for descriptive purposes and are not a part of the code.
# include <stdio.h>
# include <ctype.h>
# include <stdlib.h>
# include <strings.h>
# include <errno.h>
int
main(int argc, char **argv)
{
char *c, *cp, *prefix = NULL;
FILE *fp;
char buf[BUFSIZ];
if (argc != 2)
{
(void) printf("Usage: rnote RELEASE_NOTES\n");
exit(EINVAL);
}
if ((fp = fopen(argv[1], "r")) == NULL)
{
(void) fprintf(stderr, "rnote: %s: %s\n",
argv[1], strerror(errno));
(void) exit(errno);
}
while ((cp = fgets(buf, BUFSIZ, fp)) != NULL)
{
if (isdigit((int)*cp))
{
if ((c = strchr(cp, '/')) != NULL)
{
*c = '\0';
if (prefix != NULL)
(void) free(prefix);
prefix = strdup(cp);
continue;
}
}
if (prefix == NULL)
continue;
(void) printf("%-7.7s%s", prefix, cp);
}
if (ferror(fp))
{
(void) fprintf(stderr, "rnote: %s: %s\n",
argv[1], strerror(errno));
(void) exit(errno);
}
return 0;
}After opening the RELEASE_NOTES file,
it is read in a loop, one line at a time.
If a line of the file
begins
with a digit, it is presumed to be a
release number (such as 8.12.11). Everything
following the first slash character is removed
and the result becomes the new prefix
for all following file lines. Each line of
the file is then prefixed with the release that created it and
printed.
By piping the ...