t10.c (1978B)
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, c1; 73 74 c1 = getrune(); 75 if(c1 < 0 || c1 == '\n') { 76 c = c1; 77 c1 = 0; 78 } else { 79 while((c = getrune()) >= 0 && c != c1 && c != '\n') 80 ; 81 } 82 if(c == '\n'){ 83 warn("newline in %CX'...'", backslash); 84 outrune(c); 85 } 86 if(c < 0) 87 warn("eof in %CX'...'", backslash); 88 return 0; 89 } 90 91 int 92 e_quote(void) 93 { 94 int c; 95 96 if(inputmode&ArgMode){ 97 /* Leave \" around for argument parsing */ 98 ungetrune('"'); 99 return '\\'; 100 } 101 while((c = getrune()) >= 0 && c != '\n') 102 ; 103 return '\n'; 104 } 105 106 int 107 e_newline(void) 108 { 109 return 0; 110 } 111 112 int 113 e_e(void) 114 { 115 return backslash; 116 } 117 118 void 119 r_comment(Rune *name) 120 { 121 int c; 122 123 USED(name); 124 while((c = getrune()) >= 0 && c != '\n') 125 ; 126 } 127 128 void 129 t10init(void) 130 { 131 addreq(L("ec"), r_ec, -1); 132 addreq(L("eo"), r_eo, 0); 133 addreq(L("lg"), r_nop, -1); 134 addreq(L("cc"), r_cc, -1); 135 addreq(L("c2"), r_c2, -1); 136 addreq(L("tr"), r_warn, -1); 137 addreq(L("ul"), r_nop, -1); 138 addraw(L("\\\""), r_comment); 139 140 addesc('!', e_bang, 0); 141 addesc('X', e_X, 0); 142 addesc('\"', e_quote, CopyMode|ArgMode); 143 addesc('\n', e_newline, CopyMode|ArgMode|HtmlMode); 144 addesc('e', e_e, 0); 145 }