home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 3 / 3008 < prev    next >
Text File  |  1991-03-06  |  6KB  |  222 lines

  1. Newsgroups: alt.sources
  2. From: christos@theory.tn.cornell.edu (Christos S. Zoulas)
  3. Subject: 4.3BSD nroff patches for System V machines
  4. Message-ID: <1991Mar7.001103.27891@batcomputer.tn.cornell.edu>
  5. Date: Thu, 7 Mar 1991 00:11:03 GMT
  6.  
  7. Hello,
  8.  
  9. I just happened to be on a system V box that did not come with nroff, so
  10. ported 4.3BSD nroff for it. The only problem was that nroff contains code 
  11. to read the term ``.o'' files which are in "a.out" format, but couldn't read 
  12. the ``.o'' files in "COFF" format.
  13.  
  14. The following patch adds COFF support to nroff, and support for boldfacing.
  15. [the boldfacing patch is courtesy of Lawrence Crowl <crowl@cs.rochester.edu>]
  16.  
  17. You'll need to define COFF in your Makefile if you are on a system V machine.
  18.  
  19. christos
  20.  
  21. *** n10.c.dist    Tue Jan 31 18:45:56 1989
  22. --- n10.c    Wed Mar  6 18:12:48 1991
  23. ***************
  24. *** 1,3 ****
  25. --- 1,4 ----
  26.   #ifndef lint
  27.   static char sccsid[] = "@(#)n10.c    4.2 4/17/85";
  28.   #endif lint
  29. ***************
  30. *** 10,15 ****
  31. --- 11,21 ----
  32.   #include "v.h"
  33.   extern
  34.   #include "tw.h"
  35. + #ifdef COFF
  36. + #include <aouthdr.h>
  37. + #include <filehdr.h>
  38. + #include <scnhdr.h>
  39. + #endif
  40.   /*
  41.   nroff10.c
  42.   
  43. ***************
  44. *** 49,54 ****
  45. --- 55,64 ----
  46.       char *q;
  47.       int x[8];
  48.       extern char *setbrk();
  49. + #ifdef COFF
  50. +     struct scnhdr sec;
  51. +     struct filehdr hdr;
  52. + #endif
  53.   
  54.       if(((i=open(termtab,0)) < 0) && (i=open("/usr/lib/term/tab37",0)) < 0){
  55.           prstr("Cannot open ");
  56. ***************
  57. *** 56,61 ****
  58. --- 66,72 ----
  59.           prstr("\n");
  60.           exit(-1);
  61.       }
  62. + #ifndef COFF
  63.       read(i,(char *)x,8*sizeof(int));
  64.       read(i,(char *)&t.bset,j = sizeof(int)*((int *)&t.zzz - &t.bset));
  65.       x[2] -= j;
  66. ***************
  67. *** 71,76 ****
  68. --- 82,144 ----
  69.       dtab = 8 * t.Em;
  70.       for(i=0; i<16; i++)tabtab[i] = dtab * (i+1);
  71.       if(eqflg)t.Adj = t.Hor;
  72. + #else
  73. +     if (read(i, (char *) &hdr, sizeof(struct filehdr)) != 
  74. +         sizeof(struct filehdr)) {
  75. +         prstr("Error reading ");
  76. +         prstr(termtab);
  77. +         prstr(" file header.\n");
  78. +         exit(-1);
  79. +     }
  80. +     if (!ISCOFF(hdr.f_magic)) {
  81. +         prstr("Error reading ");
  82. +         prstr(termtab);
  83. +         prstr(" (not a coff file)\n");
  84. +         exit(-1);
  85. +     }
  86. +     while (hdr.f_opthdr--) if (read(i, (char *) &sec, 1) != 1) {
  87. +         prstr("Error reading ");
  88. +         prstr(termtab);
  89. +         prstr(" optional header.\n");
  90. +         exit(-1);
  91. +     }
  92. +     if (read(i, (char *) &sec, sizeof(struct scnhdr)) != 
  93. +         sizeof(struct scnhdr)) {
  94. +         prstr("Error reading ");
  95. +         prstr(termtab);
  96. +         prstr(" section header.\n");
  97. +         exit(-1);
  98. +     }
  99. +     if (strcmp(sec.s_name, _DATA) != 0) {
  100. +         prstr("Wrong section type ");
  101. +         prstr(sec.s_name);
  102. +         prstr(" in ");
  103. +         prstr(termtab);
  104. +         prstr(".\n");
  105. +         exit(-1);
  106. +     }
  107. +     if (lseek(i, sec.s_scnptr, 0) == -1) {
  108. +         prstr("Error seeking to data section in ");
  109. +         prstr(termtab);
  110. +         prstr(".\n");
  111. +         exit(-1);
  112. +     }
  113. +     read(i,(char *)&t.bset,j = sizeof(int)*((int *)&t.zzz - &t.bset));
  114. +     x[2] -= j;
  115. +     q = setbrk(x[2]);
  116. +     lseek(i,(long)t.twinit + sec.s_scnptr,0);
  117. +     i = read(i,q,x[2]);
  118. +     j = q - t.twinit;
  119. +     for(p = &t.twinit; p < &t.zzz; p++){
  120. +         if(*p)*p += j;else *p = "";
  121. +     }
  122. +     sps = EM;
  123. +     ics = EM*2;
  124. +     dtab = 8 * t.Em;
  125. +     for(i=0; i<16; i++)tabtab[i] = dtab * (i+1);
  126. +     if(eqflg)t.Adj = t.Hor;
  127. + #endif /* COFF */
  128.   }
  129.   twdone(){
  130.       obufp = obuf;
  131. ***************
  132. *** 113,118 ****
  133. --- 181,192 ----
  134.       register char *codep;
  135.       extern char *plot();
  136.       int *q, w, j, phyw;
  137. +     int underlining_ok;    /* boolean, true iff we are allowed to
  138. +                    underline this character, we interpret this
  139. +                    to also mean allow simulating boldface using
  140. +                    backspacing */
  141. +     int bold_toggle;    /* boolean, true iff the terminal has hardware
  142. +                    bolding capability */
  143.   
  144.       for(q=oline; q<olinep; q++){
  145.       if((i = *q) & MOT){
  146. ***************
  147. *** 131,136 ****
  148. --- 205,211 ----
  149.           continue;
  150.       }
  151.       codep = t.codetab[k-32];
  152. +     underlining_ok = (*codep & 0200);
  153.       w = t.Char * (*codep++ & 0177);
  154.       phyw = w;
  155.       if(i&ZBIT)w = 0;
  156. ***************
  157. *** 137,143 ****
  158.       if(*codep && (esc || lead))move();
  159.       esct += w;
  160.       if(i&074000)xfont = (i>>9) & 03;
  161. !     if(*t.bdon & 0377){
  162.           if(!bdmode && (xfont == 2)){
  163.               oputs(t.bdon);
  164.               bdmode++;
  165. --- 212,219 ----
  166.       if(*codep && (esc || lead))move();
  167.       esct += w;
  168.       if(i&074000)xfont = (i>>9) & 03;
  169. !     bold_toggle = t.bdon && (*t.bdon & 0377);
  170. !     if(bold_toggle){
  171.           if(!bdmode && (xfont == 2)){
  172.               oputs(t.bdon);
  173.               bdmode++;
  174. ***************
  175. *** 147,156 ****
  176.               bdmode = 0;
  177.           }
  178.       }
  179. -     if(xfont == ulfont){
  180. -         for(k=w/t.Char;k>0;k--)oput('_');
  181. -         for(k=w/t.Char;k>0;k--)oput('\b');
  182. -     }
  183.       while(*codep != 0){
  184.           if(*codep & 0200){
  185.               codep = plot(codep);
  186. --- 223,228 ----
  187. ***************
  188. *** 158,166 ****
  189.               oput(' ');
  190.           }else{
  191.               if(plotmode)oputs(t.plotoff);
  192. !             *obufp++ = *codep++;
  193. !             if(obufp == (obuf + OBUFSZ + ascii - 1))flusho();
  194. ! /*            oput(*codep++);*/
  195.           }
  196.       }
  197.       if(!w)for(k=phyw/t.Char;k>0;k--)oput('\b');
  198. --- 230,245 ----
  199.               oput(' ');
  200.           }else{
  201.               if(plotmode)oputs(t.plotoff);
  202. !             if(underlining_ok){
  203. !                 if(xfont == ulfont){
  204. !                     oput('_');
  205. !                     oput('\b');
  206. !                 }else if(xfont == 2 && !bold_toggle){
  207. !                     oput(*codep);
  208. !                     oput('\b');
  209. !                 }
  210. !             }
  211. !             oput(*codep++);
  212.           }
  213.       }
  214.       if(!w)for(k=phyw/t.Char;k>0;k--)oput('\b');
  215. -- 
  216. +------------------------------------------------------------------------+
  217. | Christos Zoulas         | 389 Theory Center, Electrical Engineering,   |
  218. | christos@ee.cornell.edu | Cornell University, Ithaca NY 14853.         |
  219. | christos@crnlee.bitnet  | Phone: (607) 255 0302 |  Fax: (607) 254 4565 |
  220.