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 t

⟦ae4564731⟧ TextFile

    Length: 2786 (0xae2)
    Types: TextFile
    Names: »testspcl.c«

Derivation

└─⟦52210d11f⟧ Bits:30007239 EUUGD2: TeX 3 1992-12
    └─⟦af5ba6c8e⟧ »unix3.0/DVIWARE.tar.Z« 
        └─⟦ca79c7339⟧ 
            └─⟦this⟧ »DVIware/laser-setters/mctex/misc/testspcl.c« 

TextFile

/* test special decoding */

#include <stdio.h>
#include "../h/types.h"
#include "../h/sdecode.h"

/*
 * Run this program with input from a file containing lines of the form
 *	name arg1 arg2 ... argn
 */

void f_nop(), f_s(), f_d(), f_f(), f_dd(), f_ff(), f_ddddff();
void f_nd(), f_nx(), f_rest();

struct sdecode sd[] = {
	{ "4d2f",	sda_ddddff,	f_ddddff },
	{ "array",	sda_nd,		f_nd },
	{ "float",	sda_f,		f_f },
	{ "hex",	sda_nx,		f_nx },
	{ "int",	sda_d,		f_d },
	{ "nop",	sda_none,	f_nop },
	{ "rest",	sda_rest,	f_rest },
	{ "string",	sda_s,		f_s },
	{ "twofloat",	sda_ff,		f_ff },
	{ "twoint",	sda_dd,		f_dd },
};

char *DVIFileName, *ProgName;

/* ARGSUSED */
main(argc, argv)
	int argc;
	char **argv;
{
	register int l;
	register long off;
	char buf[1024];

	DVIFileName = "<stdin>";
	ProgName = argv[0];
	for (;;) {
		off = ftell(stdin);
		if (fgets(buf, sizeof(buf), stdin) == NULL)
			break;
		if ((l = strlen(buf)) == 0)
			continue;
		if (buf[--l] == '\n')
			buf[l] = 0;
		else {
			fprintf(stderr, "input line too long, aborting\n");
			exit(1);
		}
		if (buf[0] == '#') {
			puts(buf + 1);
			continue;
		}
		/* printf("trying `%s'\n", buf); */
		(void) fseek(stdin, off, 0);
		SDecode(stdin, l, sd, sizeof(sd) / sizeof(*sd));
		if ((l = getchar()) != '\n') {
			fprintf(stderr,
				"oops! got %c (%o) instead of newline\n",
				l, l);
			exit(2);
		}
	}
	exit(0);
}

void
f_nop(self)
	char *self;
{

	printf("%s()\n", self);
}

void
f_s(self, s)
	char *self, *s;
{

	printf("%s(%s)\n", self, s);
}

void
f_d(self, d)
	char *self;
	int d;
{

	printf("%s(%d)\n", self, d);
}

void
f_f(self, f)
	char *self;
	double f;
{

	printf("%s(%f)\n", self, f);
}

void
f_dd(self, d1, d2)
	char *self;
	int d1, d2;
{

	printf("%s(%d, %d)\n", self, d1, d2);
}

void
f_ff(self, f1, f2)
	char *self;
	double f1, f2;
{

	printf("%s(%f, %f)\n", self, f1, f2);
}


void
f_ddddff(self, d1, d2, d3, d4, f1, f2)
	char *self;
	int d1, d2, d3, d4;
	double f1, f2;
{

	printf("%s(%d, %d, %d, %d, %f, %f)\n", self, d1, d2, d3, d4, f1, f2);
}

static void
printarr(fn, fmt, n, arr)
	char *fn;
	register char *fmt;
	register int n, *arr;
{
	register char *sep;

	if (n == 0)
		printf("%s()", fn);
	else {
		fputs(fn, stdout);
		sep = "(";
		while (--n >= 0) {
			fputs(sep, stdout);
			printf(fmt, *arr++);
			sep = ", ";
		}
		fputs(")", stdout);
	}
	puts("");
}

void
f_nd(self, n, arr)
	char *self;
	int n, *arr;
{

	printarr(self, "%d", n, arr);
}

void
f_nx(self, n, arr)
	char *self;
	int n, *arr;
{

	printarr(self, "%#x", n, arr);
}


void
f_rest(self, l1, s, l2)
	char *self;
	i32 l1;
	char *s;
	i32 l2;
{

	printf("%s(%ld, s, %ld); s = `%.*s", self, (long)l1, (long)l2,
		l1 > 20 ? 20 : l1, s);
	if (l1 > 20)
		fputs("...", stdout);
	puts("'");
	while (--l2 >= 0)
		(void) getchar();
}