DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T r

⟦7b889d69a⟧ TextFile

    Length: 2368 (0x940)
    Types: TextFile
    Names: »report.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Festoon/report.c« 

TextFile

/*
 * Stupid Report Generator.  (possibly a VSRG; very SRG)
 *  This is a very simplified report generating program based on
 *  a visual experience with "festoon".  The vocabulary was "strings"
 *  (or strung) from the binary of festoon and some words were added.
 */

#include <ctype.h>
#define PICK1(list)	list[random()%(sizeof (list) / sizeof (char *))]
#define isvowel(c)	((c)=='a'||(c)=='e'||(c)=='i'||(c)=='o'||(c)=='u')
char *adjectives[], *nouns[];
char *hedge[], *clause[];
char *prep[], *adverbs[];
#include "words.h"

char sent_buf [ 1000 ];

main(argc, argv)
char **argv;
{
    int i, nsentences;

    if(argc < 2) 
	printf("usage: %s number_of_sentences\n", argv[0]), exit(1);
    nsentences = atoi(argv[1]);
    srandom (getpid());

    while (nsentences--) {
	for (i=0; i<1000; ++i)
	    sent_buf[i] = '\0';
	sentence(sent_buf);
	punctuate(sent_buf);
	printf ("%s\n", sent_buf);
    }
}

sentence (string)	/* compose a sentence into string */
char *string;
{
    if (random() % 3)
	put_clause (string);
    nounphr (string);
    strcat (string, " ");
    be (string);
    strcat (string, " ");
    adjphr (string);
}

nounphr (string)
char *string;
{
    char *nountmp = PICK1(nouns);

/* Note: the a/an differentiation does not work because it does not depend
 * on the noun, but rather the word immediately following the article
 */
    strcat (string, (isvowel(*nountmp)) ? "an " : "a ");
		    /* should be a random determiner */
    if (!(random() % 4))
	adjphr (string), strcat (string, " ");
    strcat (string, nountmp);
    if (!(random() % 6)) {
	strcat (string, " ");
	strcat (string, PICK1(prep));
	strcat (string, " ");
	nounphr (string);
    }
}

adjphr (string)
char *string;
{
    while (!(random() % 5)) {
	strcat (string, PICK1(adverbs));
	strcat (string, " ");
    }
    strcat (string, PICK1(adjectives));
}

be (string)		/* this should be beefed up considerably */
char *string;
{
    strcat (string, (random() % 3) ? "is" : "was");
}

put_clause (string)	/* a clause to preceed the sentence */
char *string;
{
    if (random() % 3)
	strcat (string, PICK1(hedge)), strcat (string, " ");
    else {
	strcat (string, PICK1(clause));
	strcat (string, " ");
	sentence (string);
	strcat (string, ", ");
    }
}

punctuate (string)		/* punctuate a sentence */
char *string;
{
    *string = toupper (*string);
    strcat (string, ".");
}