ftp.nice.ch/pub/next/unix/editor/elvis-2.0.N.bs.tar.gz#/elvis-2.0.N.bs/elvdump.c

This is elvdump.c in view mode; [Download] [Up]

/* elvdump.c */
/* Copyright 1995 by Steve Kirkendall */

char id_elvdump[] = "$Id: elvdump.c,v 1.5 1996/01/19 23:16:16 steve Exp $";

/* This file contains a replacement for elvis' main() function.  The resulting
 * program will test each component of elvis.
 */

#include "elvis.h"
extern void dump(char *bufname, BOOLEAN useronly);

void msg(MSGIMP imp, char *format, ...)
{
	fprintf(stderr, "%s\n", format);
}

BOOLEAN calcnumber(CHAR *arg)
{
	return False;
}

BOOLEAN calctrue(CHAR *arg)
{
	return False;
}

WINDOW windefault;
WINDOW winofbuf(WINDOW window, BUFFER buffer)
{
	return windefault;
}

void dump(char *bufname, BOOLEAN useronly)
{
	BLK	*super;
	BLK	*bufinfo;
	BLK	*blklist;
	BLK	*chars;
	BLKNO	blkno, next;
	int	i, j;

	sesopen(True);
	seslock(0, False, SES_SUPER);
	super = sesblk(0);
	for (i = 0; i < SES_MAXSUPER; i++)
	{
		/* skip empty buffer slots */
		if (!super->super.buf[i])
		{
			continue;
		}

		/* read the bufinfo block */
		sesalloc(super->super.buf[i]);
		seslock(super->super.buf[i], False, SES_BUFINFO);
		bufinfo = sesblk(super->super.buf[i]);

		/* skip if "-u" and this isn't a user buffer */
		if (useronly && !strncmp(bufinfo->bufinfo.name, "Elvis ", 6))
		{
			sesunlock(super->super.buf[i], False);
			continue;
		}

		/* output buffer name, unless we're supposed to list contents */
		if (!bufname)
			printf("%6d  bufinfo, bufname=\"%s\", changes=%ld\n",
				super->super.buf[i],
				bufinfo->bufinfo.name,
				bufinfo->bufinfo.changes);

		/* if "-u" and we don't have a buffer name, then we're done */
		if (useronly && !bufname)
		{
			sesunlock(super->super.buf[i], False);
			continue;
		}

		/* for each blklist block... */
		for (blkno = bufinfo->bufinfo.first; blkno; blkno = next)
		{
			if (!bufname) printf("%6d      blklist for #%d\n", blkno, super->super.buf[i]);

			/* read the blklist block */
			sesalloc(blkno);
			seslock(blkno, False, SES_BLKLIST);
			blklist = sesblk(blkno);

			/* for each chars block... */
			for (j = 0; j < SES_MAXBLKLIST && blklist->blklist.blk[j].blkno; j++)
			{
				if (!bufname) printf("%6d          chars #%d[%d], chars=%d, lines=%d\n",
					blklist->blklist.blk[j].blkno,
					blkno,
					j,
					blklist->blklist.blk[j].nchars,
					blklist->blklist.blk[j].nlines);
				if (bufname && !strcmp(bufname, bufinfo->bufinfo.name))
				{
					/* read the chars block & output its contents */
					sesalloc(blklist->blklist.blk[j].blkno);
					seslock(blklist->blklist.blk[j].blkno, False, SES_CHARS);
					chars = sesblk(blklist->blklist.blk[j].blkno);
					fwrite(chars->chars.chars, blklist->blklist.blk[j].nchars, sizeof(CHAR), stdout);
					sesunlock(blklist->blklist.blk[j].blkno, False);
				}
			}

			/* release the blklist block */
			next = blklist->blklist.next;
			sesunlock(blkno, False);
		}

		/* release the bufinfo block */
		sesunlock(super->super.buf[i], False);
	}
	sesunlock(0, False);
	sesclose();
}

int main(int argc, char **argv)
{
	BOOLEAN useronly = False;

	optglobinit();
	if (argc >= 2 && !strcmp(argv[1], "-u"))
	{
		useronly = True;
		argv++;
		argc--;
	}
	if (argc == 1)
		dump(NULL, useronly);
	else if (argc == 2)
	{
		o_session = argv[1];
		dump(NULL, useronly);
	}
	else if (argc == 3)
	{
		o_session = argv[1];
		dump(argv[2], useronly);
	}
	else
	{
		fprintf(stderr, "usage: elvdump [-u] [session [buffer]]\n");
		exit(1);
	}
	exit(0);
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.