File:  [Research Unix] / researchv9 / jtools / src / pi / journal.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:21:59 2018 UTC (8 years, 1 month ago) by root
Branches: belllabs, MAIN
CVS tags: researchv9-SUN3_old, researchv9-SUN3, HEAD
researchv9-SUN3(old)

#include "journal.pri"
#include "core.pub"
#include "format.h"
SRCFILE("journal.c")

Journal::Journal(char *p)
{
	proc = p;
	key = 0;
	length = 50;
	lastreq = 0;
}

void Journal::open()
{
	trace("%d.open()", this);		VOK;
	if( !pad ){
		pad = new Pad((PadRcv*) this);
		banner();
	}
	pad->makecurrent();
}

void Journal::hostclose()
{
	trace( "%d.hostclose()", this );	VOK;
	if( pad ){
		delete pad;
		pad = 0;
	}
	if( bls ){
		delete bls;
		delete ct;
		bls = 0;
		ct = 0;
	}
	invalidate();
}

void Journal::banner()
{
	trace("%d.banner()", this);	VOK;
	if( pad ){
		pad->banner("Journal: %s", proc);
		pad->name("Journal %s", proc);
		pad->tabs(2);
		pad->options(TRUNCATE|NO_TILDE);
		if( !bls ){
			bls = new Bls[length];
			ct = new int[length];
		}
	}
}

void Journal::insert(PRINTF_ARGS)
{
	trace("%.insert(%s)", this, fmt);
	if( !this ) return;	VOK;
	if( !this->pad || !bls ) return;			// can that be?
	Bls t(PRINTF_COPY);
	if( !t.text[0] ) return;
	long i = key%length;
	if( key==0 || strcmp(bls[i].text, t.text) ){
		i = (++key)%length;
		ct[i] = 0;
		bls[i].clear();
		bls[i].af("%s", t.text);
	}
	if( lastreq == key )
		linereq(key);
	else
		pad->createline(key);
	++ct[i];
	if( key-length > 0 ) pad->removeline(key-length);
}

void Journal::linereq(long i, Attrib a)
{
	trace("%.linereq(%d,%x)", this, i, a); VOK;
	if( i <= key-length || !bls ) return;			// too late!
	int mod = i%length;
	if( ct[mod] > 1 )
		pad->insert(i, a, "%s (%d)", bls[mod].text, ct[mod]);
	else
		pad->insert(i, a, "%s", bls[mod].text);
	lastreq = i;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.