151 lines · 2.3 KB · C
RawDownload
/*  * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */ #include "a.h" /* * 4 - Text filling, centering, and adjusting.   * 	"\ " - unbreakable space * 	.n register - length of last line *	nl register - text baseline position on this page *	.h register - baseline high water mark *	.k register - current horizontal output position *	\p - cause break at end of word, justify *	\& - non-printing zero-width filler *	tr - output translation *	\c - break (but don't) input line in .nf mode *	\c - break (but don't) word in .fi mode */ inte_space(void){	return 0xA0;	/* non-breaking space */} inte_amp(void){	return Uempty;} inte_c(void){	getrune();	bol = 1;	return 0;} voidr_br(int argc, Rune **argv){	USED(argc);	USED(argv);	br();} /* fill mode on */voidr_fi(int argc, Rune **argv){	USED(argc);	USED(argv);	nr(L(".fi"), 1);// warn(".fi");} /* no-fill mode */voidr_nf(int argc, Rune **argv){	USED(argc);	USED(argv);	nr(L(".fi"), 0);} /* adjust */voidr_ad(int argc, Rune **argv){	int c, n;		nr(L(".j"), getnr(L(".j"))|1);	if(argc < 2)		return;	c = argv[1][0];	switch(c){	default:		fprint(2, "%L: bad adjust %C\n", c);		return;	case 'r':		n = 2*2|1;		break;	case 'l':		n = 0;		break;	case 'c':		n = 1*2|1;		break;	case 'b':	case 'n':		n = 0*2|1;		break;	case '0':	case '1':	case '2':	case '3':	case '4':	case '5':		n = c-'0';		break;	}	nr(L(".j"), n);} /* no adjust */voidr_na(int argc, Rune **argv){	USED(argc);	USED(argv); 	nr(L(".j"), getnr(L(".j"))&~1);} /* center next N lines */voidr_ce(int argc, Rune **argv){	if(argc < 2)		nr(L(".ce"), 1);	else		nr(L(".ce"), eval(argv[1]));	/* XXX set trap */} voidt4init(void){	nr(L(".fi"), 1);	nr(L(".j"), 1); 	addreq(L("br"), r_br, 0);	addreq(L("fi"), r_fi, 0);	addreq(L("nf"), r_nf, 0);	addreq(L("ad"), r_ad, -1);	addreq(L("na"), r_na, 0);	addreq(L("ce"), r_ce, -1);		addesc(' ', e_space, 0);	addesc('p', e_warn, 0);	addesc('&', e_amp, 0);	addesc('c', e_c, 0);}