File:  [Research Unix] / researchv9 / jerq / src / sam / term / util.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 "frame.h"

canfit(f, pt, b)
	register Frame *f;
	register Box *b;
	Point pt;
{
	register left=f->r.corner.x-pt.x;
	register uchar *p;
	if(b->len<0)
		return b->minwid<=left;
	if(left>=b->wid)
		return b->len;
	for(p=b->ptr; *p; p++)
		if((left-=(int)f->font->info[*p].width)<0) /* (int) for 3cc bug */
			return p-b->ptr;
	panic("canfit can't");
	return 0;	/* for cyntax */
}
cklinewrap(f, p, b)
	register Frame *f;
	register Point *p;
	register Box *b;
{
	if((b->len<0? b->minwid : b->wid)>f->r.corner.x-p->x)
		p->x=f->left, p->y+=f->font->height;
}
cklinewrap0(f, p, b)
	register Frame *f;
	register Point *p;
	register Box *b;
{
	if(canfit(f, *p, b)==0)
		p->x=f->left, p->y+=f->font->height;
}
advance(f, p, b)
	register Frame *f;
	register Point *p;
	register Box *b;
{
	if(b->len<0 && b->bc=='\n')
		p->x=f->left, p->y+=f->font->height;
	else
		p->x+=b->wid;
}
newwid(f, pt, b)
	register Frame *f;
	Point pt;
	Box *b;
{
	register c=f->r.corner.x;
	register x=pt.x;
	if(b->len>=0)
		return b->wid;
	if(b->bc=='\t'){
		if(x+b->minwid>c)
			x=pt.x=f->left;
		x+=f->maxtab;
		x-=(x-f->left)%f->maxtab;
		if(x-pt.x<b->minwid)
			x=pt.x+b->minwid;
		b->wid=x-pt.x;
	}
	return b->wid;
}
clean(f, pt, n0, n1)	/* look for mergeable boxes */
	register Frame *f;
	Point pt;
{
	register nb;
	register Box *b;
	register c=f->r.corner.x;
	for(nb=n0; nb<n1-1; nb++){
		b=&f->box[nb];
		cklinewrap(f, &pt, b);
		while(b[0].len>=0 && nb<n1-1 && b[1].len>=0 &&
		       pt.x+b[0].wid+b[1].wid<c){
				mergebox(f, nb);
				n1--;
		}
		advance(f, &pt, b);
	}
}

unix.superglobalmegacorp.com

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