140 lines · 1.9 KB · C
RawDownload
#include "a.h" /* * 10. Input and Output Conventions and Character Translation. */ /* set escape character */voidr_ec(int argc, Rune **argv){	if(argc == 1)		backslash = '\\';	else		backslash = argv[1][0];} /* turn off escape character */voidr_eo(int argc, Rune **argv){	USED(argc);	USED(argv);	backslash = -2;} /* continuous underline (same as ul in troff) for the next N lines *//* set underline font */voidg_uf(int argc, Rune **argv){	USED(argc);	USED(argv);} /* set control character */voidr_cc(int argc, Rune **argv){	if(argc == 1)		dot = '.';	else		dot = argv[1][0];} /* set no-break control character */voidr_c2(int argc, Rune **argv){	if(argc == 1)		tick = '\'';	else		tick = argv[1][0];} /* output translation */ inte_bang(void){	Rune *line;		line = readline(CopyMode);	out(line);	outrune('\n');	free(line);	return 0;} inte_X(void){	int c;		while((c = getrune()) >= 0 && c != '\'' && c != '\n')		outrune(c);	if(c == '\n'){		warn("newline in %CX'...'", backslash);		outrune(c);	}	if(c < 0)		warn("eof in %CX'...'", backslash);	return 0;} inte_quote(void){	int c; 	if(inputmode&ArgMode){		/* Leave \" around for argument parsing */		ungetrune('"');		return '\\';	}	while((c = getrune()) >= 0 && c != '\n')		;	return '\n';} inte_newline(void){	return 0;} inte_e(void){	return backslash;} voidr_comment(Rune *name){	int c;		USED(name);	while((c = getrune()) >= 0 && c != '\n')		;} voidt10init(void){	addreq(L("ec"), r_ec, -1);	addreq(L("eo"), r_eo, 0);	addreq(L("lg"), r_nop, -1);	addreq(L("cc"), r_cc, -1);	addreq(L("c2"), r_c2, -1);	addreq(L("tr"), r_warn, -1);	addreq(L("ul"), r_nop, -1);	addraw(L("\\\""), r_comment);		addesc('!', e_bang, 0);	addesc('X', e_X, 0);	addesc('\"', e_quote, CopyMode|ArgMode);	addesc('\n', e_newline, CopyMode|ArgMode|HtmlMode);	addesc('e', e_e, 0);}