URI:
       tt10.c - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tt10.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 }