Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#include "a.h"
2
 
3
/*
4
 * 10. Input and Output Conventions and Character Translation.
5
 */
6
 
7
/* set escape character */
8
void
9
r_ec(int argc, Rune **argv)
10
{
11
	if(argc == 1)
12
		backslash = '\\';
13
	else
14
		backslash = argv[1][0];
15
}
16
 
17
/* turn off escape character */
18
void
19
r_eo(int argc, Rune **argv)
20
{
21
	USED(argc);
22
	USED(argv);
23
	backslash = -2;
24
}
25
 
26
/* continuous underline (same as ul in troff) for the next N lines */
27
/* set underline font */
28
void
29
g_uf(int argc, Rune **argv)
30
{
31
	USED(argc);
32
	USED(argv);
33
}
34
 
35
/* set control character */
36
void
37
r_cc(int argc, Rune **argv)
38
{
39
	if(argc == 1)
40
		dot = '.';
41
	else
42
		dot = argv[1][0];
43
}
44
 
45
/* set no-break control character */
46
void
47
r_c2(int argc, Rune **argv)
48
{
49
	if(argc == 1)
50
		tick = '\'';
51
	else
52
		tick = argv[1][0];
53
}
54
 
55
/* output translation */
56
 
57
int
58
e_bang(void)
59
{
60
	Rune *line;
61
 
62
	line = readline(CopyMode);
63
	out(line);
64
	outrune('\n');
65
	free(line);
66
	return 0;
67
}
68
 
69
int
70
e_X(void)
71
{
72
	int c;
73
 
74
	while((c = getrune()) >= 0 && c != '\'' && c != '\n')
75
		outrune(c);
76
	if(c == '\n'){
77
		warn("newline in %CX'...'", backslash);
78
		outrune(c);
79
	}
80
	if(c < 0)
81
		warn("eof in %CX'...'", backslash);
82
	return 0;
83
}
84
 
85
int
86
e_quote(void)
87
{
88
	int c;
89
 
90
	if(inputmode&ArgMode){
91
		/* Leave \" around for argument parsing */
92
		ungetrune('"');
93
		return '\\';
94
	}
95
	while((c = getrune()) >= 0 && c != '\n')
96
		;
97
	return '\n';
98
}
99
 
100
int
101
e_newline(void)
102
{
103
	return 0;
104
}
105
 
106
int
107
e_e(void)
108
{
109
	return backslash;
110
}
111
 
112
void
113
r_comment(Rune *name)
114
{
115
	int c;
116
 
117
	USED(name);
118
	while((c = getrune()) >= 0 && c != '\n')
119
		;
120
}
121
 
122
void
123
t10init(void)
124
{
125
	addreq(L("ec"), r_ec, -1);
126
	addreq(L("eo"), r_eo, 0);
127
	addreq(L("lg"), r_nop, -1);
128
	addreq(L("cc"), r_cc, -1);
129
	addreq(L("c2"), r_c2, -1);
130
	addreq(L("tr"), r_warn, -1);
131
	addreq(L("ul"), r_nop, -1);
132
	addraw(L("\\\""), r_comment);
133
 
134
	addesc('!', e_bang, 0);
135
	addesc('X', e_X, 0);
136
	addesc('\"', e_quote, CopyMode|ArgMode);
137
	addesc('\n', e_newline, CopyMode|ArgMode|HtmlMode);
138
	addesc('e', e_e, 0);
139
}
140