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.