[comp.unix.questions] Looking for Boldface/Underline Filter

wnp@killer.UUCP (Wolf Paul) (01/17/88)

Nroff by default produces boldface and underlines by means of backspacing.
My printer does not take to that too kindly, especially in NLQ mode.
Therefore I am looking for a filter which will convert backspace sequences
into overstruck lines, like so:

  "_^HT_^Hh_^Hi_^Hs _^Hi_^Hs _^Hu_^Hn_^Hd_^He_^Hr_^Hl_^Hi_^Hn_^He_^Hd.\r\n"

should be converted to

  "This is underlined.\r____ __ __________ \r\n"

and 

  "This word is b^Hb^Hbo^Ho^Hol^Hl^Hld^Hd^Hd.\r\n"

should become

  "This word is bold.\r             bold \r             bold \r\n"

Does anybody know of such a filter, in C source?

Please e-mail me at ihnp4!killer!wnp - that's the safest path.

Thanks!


Wolf Paul
ihnp4!killer!wnp
        -"- !dcs!wnp
        -"- !doulos!wnp

gwyn@brl-smoke.ARPA (Doug Gwyn ) (01/18/88)

In article <2941@killer.UUCP> wnp@killer.UUCP (Wolf Paul) writes:
>Therefore I am looking for a filter which will convert backspace sequences
>into overstruck lines, like so:

The copyn() module used by the lpserver in BRL's MDQS spooler package
performs such operations.  I'm mailing wnp a copy..

paul@vixie.UUCP (Paul Vixie Esq) (01/18/88)

In article <2941@killer.UUCP> wnp@killer.UUCP (Wolf Paul) writes:
>Nroff by default produces boldface and underlines by means of backspacing.
>My printer does not take to that too kindly, especially in NLQ mode.
>Therefore I am looking for a filter which will convert backspace sequences
>into overstruck lines [...] Does anybody know of such a filter, in C source?

I've got just what you're looking for -- I wrote it for my printer's NLQ
mode, wherein the printer was shaking back and forth enough to fall off its
stand :-(.  (All those bidirectional smarts, and they still don't have the
backspace in the prefetch scheme...)

Anyway, I just posted my quick hack to comp.sources.misc.  If it isn't so
ugly and unreadable that BSA rejects it, you ought to see it pretty soon.
-- 
Paul A Vixie Esq
paul%vixie@uunet.uu.net
{uunet,ptsfa,hoptoad}!vixie!paul
San Francisco, (415) 647-7023

res@cblpe.ATT.COM (Rob Stampfli) (01/19/88)

In article <2941@killer.UUCP> wnp@killer.UUCP (Wolf Paul) writes:
>Nroff by default produces boldface and underlines by means of backspacing.
>My printer does not take to that too kindly, especially in NLQ mode.
>Therefore I am looking for a filter which will convert backspace sequences
>into overstruck lines, like so:
>
>  "_^HT_^Hh_^Hi_^Hs _^Hi_^Hs _^Hu_^Hn_^Hd_^He_^Hr_^Hl_^Hi_^Hn_^He_^Hd.\r\n"
>
>should be converted to
>
>  "This is underlined.\r____ __ __________ \r\n"
>
>and 
>
>  "This word is b^Hb^Hbo^Ho^Hol^Hl^Hld^Hd^Hd.\r\n"
>
>should become
>
>  "This word is bold.\r             bold \r             bold \r\n"
>
>Does anybody know of such a filter, in C source?

Try the following, which a friend wrote years ago for an old 11/45 Unix
system.  I think it does just what you want, and now that you provoked me
to delve into it, I put it on my system and will use it.  I am posting this
to the net, since perhaps others may find it useful, too.  BTW, it supports
one command line argument, a single number for tab spacing (defaults to a tab
every 8 spaces).  And, please, no flames about the coding style or lack
of comments, etc.

To use:
	nroff -mm file.rof | canon >prn

begin 666 canon.arc
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
HFP-JZP1O8*]^^P9U0*\@, =PP+BI:P:QZ[>FNZ]\Z[<S61#_L!$: !&P
 
end

dave@lsuc.uucp (David Sherman) (01/21/88)

In article <2941@killer.UUCP> wnp@killer.UUCP (Wolf Paul) writes:
>Nroff by default produces boldface and underlines by means of backspacing.
>My printer does not take to that too kindly, especially in NLQ mode.
>Therefore I am looking for a filter which will convert backspace sequences
>into overstruck lines, like so:
>
>  "_^HT_^Hh_^Hi_^Hs _^Hi_^Hs _^Hu_^Hn_^Hd_^He_^Hr_^Hl_^Hi_^Hn_^He_^Hd.\r\n"
>
>should be converted to
>
>  "This is underlined.\r____ __ __________ \r\n"

We have a utility which does exactly that, called speed(1).
It was written by Tom Duff (now alice!td) in 1976 at U of Toronto,
and modified by Henry Spencer (now utzoo!henry) in 1978.
It ran on v6 UNIX so it should run on anything (though you might
get some warnings from your compiler about "old-fashioned" things...
I'll mail it to anyone who wants it.

David Sherman
The Law Society of Upper Canada
-- 
{ uunet!mnetor  pyramid!utai  decvax!utcsri  ihnp4!utzoo } !lsuc!dave