[comp.sys.ibm.pc] BTOA, ATOB for PC

ray@ole.UUCP (Ray Berry) (01/25/89)

    Here is 'c' source code for the two unix utilities 'atob' and 'btoa'.
(="binary to ascii" and "ascii to binary").  They work by converting back
and forth between 32 bit words and 5-digit base-85 ascii character groups.  
    The original source for these was posted this past week to comp.misc.
The versions included here are substantially updated and tweaked for Turbo 
C and MSC.  Inline asm is provided for the TurboC version of btoa to speed 
up the base conversion.  The compatibility of these programs has been 
confirmed by comparing their outputs with those of a BSD4.3 system running 
the original source versions on a variety of files. 

    I've also included a pre-formatted image of the man page.  

begin 666 btoa.arc
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
1?OH3H`*%!$$-ZM$.R("]&@!:
`
end
-- 
Ray Berry  KB7HT uucp: ...{uw-beaver|uiucuxc}tikal!ole!ray CS: 73407,3152 
Seattle Silicon Corp. 3075 112th Ave NE. Bellevue WA 98004 (206) 828 4422