URI: 
       tt4.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
       ---
       tt4.c (1972B)
       ---
            1 #include "a.h"
            2 
            3 /*
            4  * 4 - Text filling, centering, and adjusting.
            5  *         "\ " - unbreakable space
            6  *         .n register - length of last line
            7  *        nl register - text baseline position on this page
            8  *        .h register - baseline high water mark
            9  *        .k register - current horizontal output position
           10  *        \p - cause break at end of word, justify
           11  *        \& - non-printing zero-width filler
           12  *        tr - output translation
           13  *        \c - break (but don't) input line in .nf mode
           14  *        \c - break (but don't) word in .fi mode
           15  */
           16 
           17 int
           18 e_space(void)
           19 {
           20         return 0xA0;        /* non-breaking space */
           21 }
           22 
           23 int
           24 e_amp(void)
           25 {
           26         return Uempty;
           27 }
           28 
           29 int
           30 e_c(void)
           31 {
           32         getrune();
           33         bol = 1;
           34         return 0;
           35 }
           36 
           37 void
           38 r_br(int argc, Rune **argv)
           39 {
           40         USED(argc);
           41         USED(argv);
           42         br();
           43 }
           44 
           45 /* fill mode on */
           46 void
           47 r_fi(int argc, Rune **argv)
           48 {
           49         USED(argc);
           50         USED(argv);
           51         nr(L(".fi"), 1);
           52 /* warn(".fi"); */
           53 }
           54 
           55 /* no-fill mode */
           56 void
           57 r_nf(int argc, Rune **argv)
           58 {
           59         USED(argc);
           60         USED(argv);
           61         nr(L(".fi"), 0);
           62 }
           63 
           64 /* adjust */
           65 void
           66 r_ad(int argc, Rune **argv)
           67 {
           68         int c, n;
           69 
           70         nr(L(".j"), getnr(L(".j"))|1);
           71         if(argc < 2)
           72                 return;
           73         c = argv[1][0];
           74         switch(c){
           75         default:
           76                 fprint(2, "%L: bad adjust %C\n", c);
           77                 return;
           78         case 'r':
           79                 n = 2*2|1;
           80                 break;
           81         case 'l':
           82                 n = 0;
           83                 break;
           84         case 'c':
           85                 n = 1*2|1;
           86                 break;
           87         case 'b':
           88         case 'n':
           89                 n = 0*2|1;
           90                 break;
           91         case '0':
           92         case '1':
           93         case '2':
           94         case '3':
           95         case '4':
           96         case '5':
           97                 n = c-'0';
           98                 break;
           99         }
          100         nr(L(".j"), n);
          101 }
          102 
          103 /* no adjust */
          104 void
          105 r_na(int argc, Rune **argv)
          106 {
          107         USED(argc);
          108         USED(argv);
          109 
          110         nr(L(".j"), getnr(L(".j"))&~1);
          111 }
          112 
          113 /* center next N lines */
          114 void
          115 r_ce(int argc, Rune **argv)
          116 {
          117         if(argc < 2)
          118                 nr(L(".ce"), 1);
          119         else
          120                 nr(L(".ce"), eval(argv[1]));
          121         /* XXX set trap */
          122 }
          123 
          124 void
          125 t4init(void)
          126 {
          127         nr(L(".fi"), 1);
          128         nr(L(".j"), 1);
          129 
          130         addreq(L("br"), r_br, 0);
          131         addreq(L("fi"), r_fi, 0);
          132         addreq(L("nf"), r_nf, 0);
          133         addreq(L("ad"), r_ad, -1);
          134         addreq(L("na"), r_na, 0);
          135         addreq(L("ce"), r_ce, -1);
          136 
          137         addesc(' ', e_space, 0);
          138         addesc('p', e_warn, 0);
          139         addesc('&', e_amp, 0);
          140         addesc('c', e_c, 0);
          141 }