[net.micro.atari] uuENcode.c for the ST. Source. Long

mugc@utecfa.UUCP (ModemUserGroupChairman) (11/26/85)

	Here is a version of uuencode that will run on the ST when
compiled with the DRI-C compiler. 
	This version was hacked out of the uuencode.c that appeared
on net.sources a while ago. Uudecode.c, if I remember correctly,
worked right away so I did not bother to archive it. You should be
able to get it off net.sources.
	The only portion that had to be modified was the part of the
code used to open a file. The original file used efopen() which then
called fopen(). I had to modify it to fopenb() to open binary files.
	The source follows. Link it with osbind.

	Enjoy.

	--------------------------------
/*
 *
 * Uuencode -- encode a file so that it's printable ascii, short lines
 *
 * Slightly modified from a version posted to net.sources a while back,
 * and suitable for compilation on the IBM PC
 *
 */

/*
 * Modified for the Atari 520ST  (October 27, 1985)
 */

#include <stdio.h>
#include <osbind.h>

char *progname = "UUENCODE";

#define USAGE "Usage: UUENCODE file [>outfile]\n"

/* ENC is the basic 1 character encoding function to make a char printing */
#define ENC(c) (((c) & 077) + ' ')

main(argc, argv)
	int argc; char *argv[];
	{
	FILE *in, *out, *efopen(), *efopenb();

	if (argc < 2) {
		fprintf(stderr, USAGE);
		exit(2);
		}
	in = efopenb(argv[1], "r");
	if (argc == 3) {
	   out = efopen(argv[2], "w");
        }
	else out = stdout;
	fprintf(out, "begin %o %s\n", 0777, argv[1]);
	encode(in, out);
	fprintf(out, "end\n");
	}

/*
 * copy from in to out, encoding as you go along.
 */

encode(in, out)
	FILE *in, *out;
	{
	char buf[80];
	int i, n;
	for (;;) {
		n = fr(in, buf, 45);
		putc(ENC(n), out);
		for (i=0; i<n; i += 3)
		      outdec(&buf[i], out);
		putc('\n', out);
		if (n <= 0)
			break;
		}
	}

/*
 * output one group of 3 bytes, pointed at by p, on file f.
 */

outdec(p, f)
	char *p; FILE *f;
	{
	int c1, c2, c3, c4;
	c1 = *p >> 2;
	c2 = (*p << 4) & 060 | (p[1] >> 4) & 017;
	c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03;
	c4 = p[2] & 077;
	putc(ENC(c1), f);
	putc(ENC(c2), f);
	putc(ENC(c3), f);
	putc(ENC(c4), f);
	}

/* fr: like read but stdio */

int fr(fd, buf, cnt)
	FILE *fd; char *buf; int cnt;
	{
	int c, i;
	for (i = 0; i < cnt; i++) {
		c = getc(fd);
		if (c == EOF)
			return(i);
		buf[i] = c;
		}
	return (cnt);
	}


FILE *
efopen(fn, mode)
	char *fn, *mode;
	{
	FILE *unit;
	if ((unit = fopen(fn, mode)) == NULL)
		error("Cannot open file %s", fn);
	else
		return unit;
	}

extern char *progname;

error(s1, s2)
	char *s1, *s2;
	{
	fprintf(stderr, "%s: ", progname);
	fprintf(stderr, s1, s2);
	exit(1);
	}


/* 
 * efopenb is a slightly modified efopen()
 * All it does is use the ST fopenb() call to open
 * a binary file.
 * Note that this is uuencode so only the input file
 * needs to be opened with this function.
 */

FILE *
efopenb(fn, mode)
	char *fn, *mode;
	{
	FILE *unit;
	if ((unit = fopenb(fn, mode)) == NULL)
		error("Cannot open file %s", fn);
	else
		return unit;
	}

turner@imagen.UUCP (D'arc Angel) (12/03/85)

> 
> 	Here is a version of uuencode that will run on the ST when
> compiled with the DRI-C compiler. 

~~~~~~~~~~~~~easy lineater, good lineater~~~~~~~~~~~~~~~

for the alcyon C compiler a further hack was necessary, fopen and
fopenb must be declared as FILE *. Here is both uuencode.c and
uudecode.c plus the encoded version of jim's bouncing ball demo.

~~~~~~~~~~~~~~~~~~~~~~~UUENCODE.C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*
 *       The only portion that had to be modified was the part of the
 * code used to open a file. The original file used efopen() which then
 * called fopen(). I had to modify it to fopenb() to open binary files.
 *       The source follows. Link it with osbind.
 */

/*
 *
 * Uuencode -- encode a file so that it's printable ascii, short lines
 *
 * Slightly modified from a version posted to net.sources a while back,
 * and suitable for compilation on the IBM PC
 *
 */

/*
 * Modified for the Atari 520ST  (October 27, 1985)
 */

#include <stdio.h>
#include <osbind.h>

char *progname = "UUENCODE";

#define USAGE "Usage: UUENCODE file [>outfile]\n"

/* ENC is the basic 1 character encoding function to make a char printing */
#define ENC(c) (((c) & 077) + ' ')

FILE *in, *out, *efopen(), *efopenb(), *fopen(), *fopenb();

main(argc, argv)
        int argc; char *argv[];
        {

        if (argc < 2) {
                fprintf(stderr, USAGE);
                exit(2);
                }
        in = efopenb(argv[1], "r");
        if (argc == 3) {
           out = efopen(argv[2], "w");
        }
        else out = stdout;
        fprintf(out, "begin %o %s\n", 0777, argv[1]);
        encode(in, out);
        fprintf(out, "end\n");
        }

/*
 * copy from in to out, encoding as you go along.
 */

encode(in, out)
        FILE *in, *out;
        {
        char buf[80];
        int i, n;
        for (;;) {
                n = fr(in, buf, 45);
                putc(ENC(n), out);
                for (i=0; i<n; i += 3)
                      outdec(&buf[i], out);
                putc('\n', out);
                if (n <= 0)
                        break;
                }
        }

/*
 * output one group of 3 bytes, pointed at by p, on file f.
 */

outdec(p, f)
        char *p; FILE *f;
        {
        int c1, c2, c3, c4;
        c1 = *p >> 2;
        c2 = (*p << 4) & 060 | (p[1] >> 4) & 017;
        c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03;
        c4 = p[2] & 077;
        putc(ENC(c1), f);
        putc(ENC(c2), f);
        putc(ENC(c3), f);
        putc(ENC(c4), f);
        }

/* fr: like read but stdio */

int fr(fd, buf, cnt)
        FILE *fd; char *buf; int cnt;
        {
        int c, i;
        for (i = 0; i < cnt; i++) {
                c = getc(fd);
                if (c == EOF)
                        return(i);
                buf[i] = c;
                }
        return (cnt);
        }


FILE *
efopen(fn, mode)
        char *fn, *mode;
        {
        FILE *unit;
        if ((unit = fopen(fn, mode)) == NULL)
                error("Cannot open file %s", fn);
        else
                return unit;
        }

extern char *progname;

error(s1, s2)
        char *s1, *s2;
        {
        fprintf(stderr, "%s: ", progname);
        fprintf(stderr, s1, s2);
        exit(1);
        }


/* 
 * efopenb is a slightly modified efopen()
 * All it does is use the ST fopenb() call to open
 * a binary file.
 * Note that this is uuencode so only the input file
 * needs to be opened with this function.
 */

FILE *
efopenb(fn, mode)
        char *fn, *mode;
        {
        FILE *unit;
        if ((unit = fopenb(fn, mode)) == NULL)
                error("Cannot open file %s", fn);
        else
                return unit;
        }


~~~~~~~~~~~~~~~~~~~~~~~~~~~UUDECODE.C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*
 * Uudecode -- decode a uuencoded file back to binary form.
 *
 * Slightly modified from a version posted to net.sources once;
 * suitable for compilation on an IBM PC.
 *
 */

#include <stdio.h>
#include <osbind.h>

char *Progname = "UUDECODE";

#define USAGE "Usage: UUDECODE [file]\n"

/* single character decode */
#define DEC(c)  (((c) - ' ') & 077)

FILE *in, *out, *efopen(), *efopenb(), *fopen(), *fopenb();

main(argc, argv)
        int argc; char *argv[];
        {
        
        int mode;
        char dest[128];
        char buf[80];
        /* optional input arg */
        if (argc > 1) {
                in = efopen(argv[1], "r");
                argv++; argc--;
                }
        else
                in = stdin;
        if (argc != 1) {
                fprintf(stderr, USAGE);
                exit(2);
                }
        /* search for header line */
        for (;;) {
                if (fgets(buf, sizeof buf, in) == NULL) {
                        fprintf(stderr, "No begin line\n");
                        exit(3);
                        }
                if (strncmp(buf, "begin ", 6) == 0)
                        break;
                }
        sscanf(buf, "begin %o %s", &mode, dest);
        out = efopenb(dest, "w");  /* create output file */
        decode(in, out);
        fclose(out);
        if (fgets(buf, sizeof buf, in) == NULL || strcmp(buf, "end\n")) {
                fprintf(stderr, "No end line\n");
                exit(5);
                }
        }

/*
 * copy from in to out, decoding as you go along.
 */

decode(in, out)
        FILE *in, *out;
        {
        char buf[80];
        char *bp;
        int n;
        for (;;) {
                if (fgets(buf, sizeof buf, in) == NULL) {
                        fprintf(stderr, "Short file\n");
                        break;
                        }
                n = DEC(buf[0]);
                if (n <= 0)
                        break;
                bp = &buf[1];
                while (n > 0) {
                        outdec(bp, out, n);
                        bp += 4;
                        n -= 3;
                        }
                }
        }

/*
 * output a group of 3 bytes (4 input characters).
 * the input chars are pointed to by p, they are to
 * be output to file f.  n is used to tell us not to
 * output all of them at the end of the file.
 */

outdec(p, f, n)
        char *p; FILE *f; int n;
        {
        int c1, c2, c3;
        c1 = DEC(*p) << 2 | DEC(p[1]) >> 4;
        c2 = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
        c3 = DEC(p[2]) << 6 | DEC(p[3]);
        if (n >= 1)
                putc(c1, f);
        if (n >= 2)
                putc(c2, f);
        if (n >= 3)
                putc(c3, f);
        }


/* fr: like read but stdio */

int fr(fd, buf, cnt)
        FILE *fd; char *buf; int cnt;
        {
        int c, i;
        for (i = 0; i < cnt; i++) {
                c = getc(fd);
                if (c == EOF)
                        return(i);
                buf[i] = c;
                }
        return (cnt);
        }

/* If your library already has this function, use it and nuke the code below */

#ifdef noindex
/*
 * Return the ptr in sp at which the character c appears;
 * NULL if not found
 */

char *index(sp, c)
        register char *sp, c;
        {
        do {
                if (*sp == c)
                        return(sp);
                } while (*sp++);
        return(NULL);
        }
#endif


/* Open a file, aborting on failure */

/* Written by Bernie Roehl, June 1985 */

FILE *
efopen(fn, mode)
        char *fn, *mode;
        {
        FILE *unit;
        if ((unit = fopen(fn, mode)) == NULL)
                error("Cannot open file %s", fn);
        else
                return unit;
        }

extern char *Progname;

error(s1, s2)
        char *s1, *s2;
        {
        fprintf(stderr, "%s: ", Progname);
        fprintf(stderr, s1, s2);
        exit(1);
        }



/* 
 * efopenb is a slightly modified efopen()
 * All it does is use the ST fopenb() call to open
 * a binary file.
 * Note that this is uuencode so only the input file
 * needs to be opened with this function.
 */

FILE *
efopenb(fn, mode)
        char *fn, *mode;
        {
        FILE *unit;
        if ((unit = fopenb(fn, mode)) == NULL)
                error("Cannot open file %s", fn);
        else
                return unit;
        }
~~~~~~~~~~~~~~~~BOINK.UUE use uudecode on it~~~~~~~~~~~~~~~~~~~~~~~~
begin 777 C:BOINK.PRG
M8!H   CJ   8K  "8(P   K&             $*G/SP ($Y!(\   "&X7(\_
M/  2/SP !#\\  -.35R//SP !$Y.5(\SP   (;RP?  "9P "HB \  (%(D( 
M(\   "'N/SP  DY.6(\CP   (?(CP   (;Y"04/Y   APDCG0$ _//__/P$_
M/  '3DY<CTS? @(RP%)!LGP $&W@</]"9R\ +P _/  %3D[>_  ,80 &]"/\
M   #9   (>(S_      AYC/\  (  "'H,_S__P  (>Q">0  (>I!^0#_@D P
M_ $B,/P =C#\ 2(P_ !$4?D  "&R(_D   !P   AM"/\   "^@   '!A  3>
M(_P %      AEB/\  @     (9HC_  5     "&>(_P "      AHB/\  $ 
M    (:8C_        "&J(_P  "     AKC\\  (_/  !3DU83TJ 9@ !6C Y
M   AEM!\ !PR.0  (9I0030\ %]A  0B,#D  "&6,CD  "&:-#P 7V$  Z(@
M.0  (9XB.0  (:+0N0  (::PO     !L.'  1+D  "&F1'D  "'H0?D   -D
M-"@  #8H  HQ0P  ,4, &#%"  HQ0@ B2.?  &$ !Q9,WP #L+P R@  ;SP@
M/ #*  !$N0  (:9$>0  (>A!^0   V0T*   -B@ "C%#   Q0P 8,4( "C%"
M ")(Y\  80 &TDS?  ,D.0  (:[5N0  (:K2N0  (:JRO  $  !L#"(\  0 
M $2Y   AJK*\ %\  &\@DKP 7P  1('2O !?  !$N0  (:I(Y\  80 &?$S?
M  ,C^0  (9X  "&6(_D  "&B   AFB/    AGB/!   AHDA T'P '$A!4$%A
M  3(,#D  "&>,CD  "&B80 $>&$  B)@ /Z8(_D  "&T    <#\Y   AO"\Y
M   AOB\Y   AOC\\  5.3M[\  Q(>0  (<(_/  &3DY<CTAY   #7#\\  8_
M/  93DY0CR\Y   AN#\\ "!.05R/0F=.04CG__XP.0  (>S1>0  (>ID/B!Y
M   AXC Y   AYC(Y   AZ-# 0_D _X)((M@BV"+8(M@BV"+8T$%L!C \ !9@
M"+!\ !9O D) ,\   "'F4/D  "&R3-]__R\Y   AM$YU" L! 1 '   '9@=W
M!W<'=P=W!W<'  < !P '  < !P '9@=W!W<'=P=W!W<'  < !P '  < !P!'
M^0   YHV&FM:T,/2PR(:PY$D&(69PY$D&(69-!I.^R "(M@BV"+8(M@BV"+8
M(M@BV"+8(M@BV"+8(M@BV"+8(M@BV"+8(M@BV"+8(M@BV"+8(AK#D208A9G#
MD208A9G2P$[33G5^_T?Y   $ C8::_+3PR(:1D&#45")-!I.^R ",H=0B3*'
M4(DRAU"),H=0B3*'4(DRAU"),H=0B3*'4(DRAU"),H=0B3*'4(DRAU")(AI&
M08-10_$ "$[33G'2P$[3.$@F2#X;CEN.6XY;9_91BR8+EHPTPT9'-,<TQ]# 
M*$@^)(YDCF2.9&?V* Q0C)B+Y$PT^T 6M\QG!D9'-,<TQU')_\ T_/__3G4 
M/@ P "P *  D "  '  8 !0 $  ,  @ !   2.?__C\\__\O.0  (>XO.0  
M(?(_/  %3D[>_  ,< !1^0  (;)2@$HY   ALF?VL+D   C.8P8CP   ",X@
M.0  (>XC^0  (?(  "'N(\   "'R3-]__TYU-CP H,/#-@#B2,!\__C002)Y
M   A[M+ 0?D  >3BY$#0P# \ !8R/ !8=@ RV"+#,L,RV"+#,L,RV"+#,L,R
MV"+#,L,RV"+#,L,RV"+#,L,RV"+#,L,RV"+#,L,RV"+#,L/0P-+!4<K_Q$YU
M-CP H,/#-@#B2,!\__C002)Y   A[D/Q  (R/ !@=@ R@U"),H-0B3*#4(DR
M@U"),H-0B3*#4(DR@U"),H-0B3*#TL%1RO_:3G4P/ ?/0?D  >3B0IA1R/_\
M,#P *#(\ !8T/  !-CP FS@#/#P $#X\  9A  #\T$8Z/  -80  MM!&.CP 
M&V$  *S01E'/_^IA  #>T$8P/  H,CP %C0\ /$V/  !. (\/  ./CP !&$ 
M +[21CH\ !]A/-)&.CP #V$TTD91S__N80  I-)&0_D   B@(WD  "'N "!A
M  &\80#^5$/Y   (H"-Y   A[@ @8  !IDCG_  V/  !F$5M(C0%86C0130\
M !U60%=$;@170%9$F'P '6T(85#0?  =8.C8?  =- 1A0DS? #].=4CG_  T
M/  !F$5M(C8%82S2138\ !E605=$;@17059$F'P &6T(8132?  98.C8?  9
M-@1A!DS? #].=4/Y   (<C-  !PS00 >,T(  #-#  )@  $4POP H#0 XDC 
M?/_XT$$B>0  (>[2P,1\  _E2D'Y   B0B!P( !%^0  (H(D<B  ,#P 8+1\
M "1O E% 8 #\1L+\ * T .)(P'S_^-!!(GD  "'N0_$  L1\  _E2D7Y   B
M@B1R(  P/ !@M'P )&\"44!@ /QT1_D  ")"2?D  "*"0?D   CJ1?D  9S"
M,#P 0#(\ %\FR"C*86;4_ 2"0_D   A$0?D  "+",T  )CP\  $^/  ()L@H
MRC-& !PC2  @84IA.E)&T/P8 -3\!()1S__D,#P 2#-  "8^/  %)L@HRC-&
M !PC2  @82!A$%)&T/P; -3\!()1S__D3G5(Y__^80#\/DS??_].=4CG__XP
M/ !+3?D  "'V'-E1R/_\3?D  "'VH =,WW__3G4 =@!@  0      P,# P  
M      CJ  @ 0  "        (L( " !   (            !      \/#P\ 
M      'DX@ " "@          >3B  ( *         %  ,@ !  !  $    #
M       !Y.(  @ H          >    ( *   @          +SP  "$J8 8O
M/   (6 _/  @3DY<3TYU                                _ ?L$./P
M'^_^  '  <#^                                                
M        '0 < !P  ^%YX/L?_/_[@#R >G_^__@                     
M                                !]\'SP?  #\;W ?#____P.]"WSC_
M^3\'                                                     #WQ
M// \#P/_SW,_#____P"Y$X#QA_!X#P  P #  (                      
M                      #KG@>!X'___WO.^#[__O@!<B4.XP'@_Q\P $  
M\ #0                                   #  (  0 #KF-B'_W_X__?
M.<#X__C !\Q-/#,#\/__^ "L 'P Y                               
M    #@ )  < #]F/Q____\!_?.,#X/_@ !^8S7@]!_[__9  MP!] /,     
M                             !T $P / !\R/0X$_@<!_/./#X#_@ !_
M,9GP> ____BIP%H _L Y@                                 !V $X 
M/P!^Y&,<'_P  __.'CX!_@ !_W.9\'@/___XI?!D@.>P'&              
M                   !V0&X '\!^)C'>#_X  ?_G'F,!WP \__C,^#P'___
M\"4TXTC@W!^X                                 [<"< '_ _ CC^!_
MX  ?_SCS!@_^ /__QC/!\#____ BO>&"X'<?_@                      
M          [,#<,#_P_ QQ[ _L !/_]QYP_?_\#__XYS@?!____P(I7AC.!_
M'_U  (  P "                        ]N3.'#_\_@(X\@?R  W__X\\?
MQ__X_\<<8P/@____X"+=X<3@/Q_\H "P )  <                       
M]F;.'C_^_@$X^0?X  ?__\>./X'___^ /.,#X/___^ R2O'&\#\/_M  6 #(
M #@              0 !     =S,/#S__/P#<>,/X  ?__^''G\!____ 'C'
M]\#__P_ ,VWPX_ ?#_]8  0 S  \              ,  0 #  "SF'!X__CP
M!^/''\  /___#SS_ ____P!QQO'!\?\/P#-E\./P'P__;  J .8 '@      
M       #  $  P  9F,!X!_@X!_'CS^  '___QYX_@?___X \<;P(? ?#^ Q
M=O#Q\ \/_[0 E@#R (X             !P #  <  $S'/\ #P/P_#Q[_ 0#_
M__\\</P/___\ ..&X'W@ Q_\,3+P\? /#_]: ,L ^0#'              X 
M!@ .  ')CC@!!X#__QX\_@,!____>/'X#___^ #CCN!^X $?_S&[<'CP!X__
M50#-@/R PX             =  0 '  #F9QX<P?P__\\>/P' _____'A\!__
M__  QPS _, #/_\QN0AX^ ?__RF Y,#\0./             &P ( !@ !S,<
M\/P/___\>?#X#P?____AP^ ____@ ,<<P/S  S__<9T/?/\#__^NP&(@_F#A
MX            #L &  X  =F/.'\'____/'A$!_O_Q__X\?@/___X "/'(#\
M@ -__V&<'YS_X_^?E6!S$/\P\/            !V !$ <  /9CCA^!____CC
MPQX___\!_\>'P'___\  #AP!_  #__]AG!^"____@=JP.8C_F/AX        
M    ;  C &  '\QQP_ ____PXX<?O_^_ '^/#X#___^  !XX ?@ !___89P?
M@____X#+6/C4_\PX/            ,T 0P#  #^8\8?P?___\,>//X?_AP!_
M#@X!_O_^  $<. /X  ?__^.<'X/___^ S5C$S,?$/#P           '9 $<!
MP  _F..'X'___^#/#C\!_P  _QX> ?[__@ !/'@#^  '___CG!^#____@,VL
MPV+ YC\>           !LP"/ 8  ?S''#\#____ CQY_ ?\  /\\'//\#_SP
M SQX _@ !___XYP?@____X#-ML.!P',__P           R8!'@,! /]QQP_ 
M____P!X<_@/^  '_/#S\_ /\_P-X< ?P  ___\.</X/___^ S+?#C,!_/_T 
M (  @ "   9D AP& P'_XX\?@/___X <//P#_  #_W@X^#@'^/_'>/$'\  /
M___#G#^#____@,35P\W /S_\        @  .S (\#@,!_\../X'___^ /'C\
M!_P  _]X>/@$!_S___#Q#_  #___PQP_ ____P#&V\'&P#\__H  @ "  $  
M#9D$> P' __''#\#____ #AX^ ?X  ?_\'#P#P_____Q\8_P@ ___\,</P/_
M__\ QMO!QL _/_Z  (  @ !  !FS"' 8#P?_CAQ^ ____@!X\/@/^  '__#Q
M\ \/____\>'WX/@?]__#'#\#____ ,;;P<; /S_^@ "  (  0  ;,Q3P# \?
M_PXX_@?___X </'P#_  #__@X> ?'____^'CX.#_'^#_AQQ_ ____P#FRN'&
MX#\?_@  @ "  $  &V<78 ^?'W\<>/P'___\ /'A\!_P  __X>/@'Q_____C
MX^  ___@'X<<?P/___\ YDSAPN _'_[  $  P  @  MF!QD?_Q\'&''X#___
M^ #AX^ ?X  ?_\'#P#\_____P\/ /O__P &'''\#____ .9MX>/@'Q__P ! 
M ,  (  R9BX>'_X^ 3CA^!____@ P\/ /\  /__#P\ _/____\?'P#___\  
MAQR_ [__?P#F;>'CX!\?_X  0 #  "  -L8N/A_^/@$PXQ ?'__P ,?'P#_ 
M #__PX? ?S____^'AX!___^   <<!P,'__\ YFWAX^ ?'_]@ "  X  0 #;,
M+CP?_#X#<<,,/P/__ "'AX!_@ !__X>'@']_____AX^ ?___@  /'  # /__
M .-EX./@'Q__8  @ .  $  VS"X\'_P^ V'''_\ /__ CX^ ?X  ?_^'AX!_
M?____P^/ '___P  #AP!XP ?_^#C9N#AX!\?_\  H #@ )  %LP./#_\/@-C
MAQ^' '__^ \/ /\  /__#P\ ______\/#@#^__X  0X\ ?T  __^XR;@X> ?
M'__  *  X "0 !7,##P__#P#8X\?@ !___\?'X#_@ #__P\/ /______#QX 
M_O_^  $>. 'X  ?__^,V(/'@#]__L "0 /  B !EG%Q\/_Q\ ^..'X$ ?___
M'A[Q_O !__\>'@'^_____A\> /[__@ !'#@#^  '___C,ASQ_ ___Z  D #P
M (@ ;9A<>#_X? ?#CC^! '___SX^__[^ ?__'AX!_O____X>' '\__P  SQY
M _@ !___QS,_</^/_W\@ )  \ "( "V8''A_^'P'QQX_ 0#___\\//P\_\/\
M/SP< _S____\/CP!_/_\  ,\<0/P  ___\8S/@#___X/8 #0 /  R  IF!AX
M?_AX!\<</P, ____/#S\ /___ ,\/ /\_____#P\ _S__  #.'$'\  /___&
M,SX.___^ 5  R #X ,0 *QD8^'_X> ?''#\# /___WQ\_ /___P >#B'^/__
M?_@\> /X__@ !WCS!_  #___QF,^'____@!0  @ . #$ "LQ&/!_\'@/ASQ_
M P#___]X>/@'___X 'AX]_C__P_X?'@#^/_X  =XXP?@ !___XYG?A____X 
M4  T  P _ #+,;CP?_#X#XXX?@<!____>'CX!___^ #X</CP^/\'\'AX!_C_
M^  '<.,/X  ?__^,9GP>__[\ =  -  , /P VS&X\'_P^ ^..'X' ?____#P
M\ ____  \'#P$/ ?#_#X\ ?P__  #_'C#^  '___C&9\'O_^_ '8 #0 # #\
M %<S,/#_\/ /#CC^!P'____P\? /___P /#P\ SP P_\\/ /\/_P  _QYP_@
M !___XQF?![__OP!H !H !@ ^ !6<S'P__#P#QYX_@<!____\/'P#___\ #@
MX. ?X  ?__'QC_!_\( /X<<?P  ___\<QOP^__[\ :  :  8 /@ 5F/1X-_@
M,!\<</P/ ____^'AX!___^  X>'@'^  '__QX?_@#^#P'^/''\  /___&,SX
M//_\^ .@ &@ & #X #9C;>!CX!P?'''\#P/____AX^ ?___@ .'!X#_@ !__
MX>'@X!_@_Q_CSQ_  #___QC-^#S__/@#H !H !@ ^  F9FXA8> ?WQSQ_ \#
M____X>/@'___X ##P\ _P  __^/CX! ?\/__PXX_@0!___\8S?@\__SX [  
M:  8 /@ *F9F&6'X'_\\X?P? ____\/#P#___\  P\/ /\  /__#P\ \/_S_
M_\>./X$ ?___.8WX?/_\^ .P &@ & #X &LF)QY@_Q_^../X'P?____#Q\ _
M___  ,>'P'_  #__Q\? /S____^'CO^!@'___S&=\'S__/ #0 #0 #  \  ;
M-C<.,/\/_CGC&!_G_Q__@X> ?___@ "'AX!_@ !__X>'@']_____CQZ/ ?#_
MC_\QF_!X__CP!T  T  P /  &S8W#C#_#_XYPP8___\!_X>/@'___X  CX^ 
M?X  ?_^/CX!_?____X\<@ /__X#_,9OP>/_X\ =@ -  , #P #4V$PXP_P_^
M.<<'____ #^'CX!___^   \/ /\  /__#P\ ______\./ 'C__\ 'W&;\'C_
M^/ '8 #0 #  \  5LQ./$'\/_SG'!\?_QP _!P\ ____   ?#P#_  #__Q\?
M /______'C@!^?_Y  =C&^#X__C@!V  T  P /  #;,;CQA_!_\YQP? _\  
M/P\? /___P  'AX!_@ !__\>'@'^_____AQX _C_^  'XS,@\#_PX ]@ -  
M, #P !V3"X\8?P?_.<<'P/_  #\.'O'^#_[P 3X> ?X  ?__'CP!_/____P\
M< /P__  #\,V./$'\/@/@ "@ &  X  9FPN'&'\'_SG'!\#_P  _#C[__@'^
M_@$\/ /\  /__SP\ _S____\>/$'\/_P  _&-CYQ ?#_C\  H !@ .  "IL)
MAPA_!_\YQP? _\  /QX\_CP!_/_#?#P#_  #__\\> /X____^''C#^#_X  ?
MAF9^$0'P___  *  8 #@  [;!<<,/P/_&<<'P/_  #\<//P  _S__WAX!_@ 
M!___>'@'^/____CQPP_ _\  /XQL?!T#_O_]P "@ &  X  .VP7'##\#_QG&
M!\'_P  _''S\ P/___]X>(?X@ ?__WCP!_#____PX\<?P/_  #\8S?@\!___
M_(  @ "  $  #ML%QPP_ _\9Q@?!_\  /QQX_ <#____>/#_\/@/___P\0_P
M____\,../X'_@ !_&9GX> ?___B  (  @ !   5)!,<$/P/_&<8'P?_  #\<
M>/P' _____#P\/#_#_#_\>$/X/___^#'CC^!_X  ?S$S\/$/___P        
M@  ';0+C!A\!_YG.A\'_P( _&'#X#P?____QX?  ___P'^'#'\#____ AQQ_
M _\  /]C)N#B'_[_X0           VT"XP(? ?^9SH?!_\" /SCQ^ \'____
MX<'@./__X ?CQQ_ ____P(\<?P/_  #_9FSAY!_\_^(           &M *,!
MWP&_F<Z'P?_ @#\X\?@/!____^/#X#___^  PX>_@/__?X >./X'_@ !_\3,
MP\0__/_"            U0!+ /\ QYG.A\'_P( _..'X'P?____#@\!____ 
M (>.AX&'_W^ '''\#_P  __,F,.(/_C_A            %8 #@!^ $&9SH?!
M_\" /S#C\!\/____QX? ?___P "/#H !@/]_ #QS_ _\  /_F;"'D'_P_X@ 
M          !J "8 ?@!AV<PGPQ_ X#\QP_ _#____X</@/___X  'AP!XP ?
M_^ XX_@?^  '_S-P#S#_\/\(            -0 3 #\ ,$G,.<,'P/X_<<?P
M/P____^/'H#^__Z  3PX _D !__^><?X/_@ !_\V8 X@_^#^$           
M !L "0 ? !BMS)P#@\!__W''\#\/____'AP!_/_\  ,X< ?P  ____'.,#[P
M <__9L >0/_ _B             ,  4 #P ,I,R<.X/X?_]AA^!_'____QP\
M _S__  #>.$'X  ?___CC!A\^ /__\W /,#_P/P@            !0    < 
M!%;DSAS!_S_\8XY@?I__?_X\> /X__@ !_'##\  /___QQP_?/^#_W^;@'F 
M_X#X0             (    #  +B9&X<X?\?_&,.$/[__P_^.'$'\/_P  _C
MAQ^  '___YYY?@C_]_X/DP!Q /\ \(             !     0 !:V8G'N#_
M'_YC'![\__\!_'CS!_#_\  /QP\_  #___\\Y_P>___\ 38 \@#^ /$     
M                 )4V,P[P_X_^8QP?//\_ /QQYP_@_^  'X8^?@$!____
M<<SP//_\\ /N "8 /@#A                      #5LE..\'_/_F<<'P#_
M P#\\\</P/_  #\,>/P' ____^>9X'C_^. 'N !@ !@ _@              
M        6I()CGA_1_YF.1X'_@ !_^./GX!_@(!_&//X#P?____.=L'Q__# 
M#_  S  \ /P                      "S:!<8\/R/^)CD>!_X  ?_'GL>!
M/X#X?S'G\!\/____G,V#P__ @#_  #  \ #P                       5
M2@3&'#\3_B9S'@_^  '_CSR  W\ __]CSN ^'____G.W#X[_@0!_  #  ,  
MP                       "FD.YPH?!?\F<QX/_@ !_QYX >?_X/__QYS 
M?#____SF7AXY_@<!_P                                ,E N,#GP'_
M)F8>'OX! ?\YXP?A__[_X8]Y@/A____XG;A\=OP. _X                 
M                U0"# /\ 3RSN'![\ 0/_<\\/P/___\ >Y\'@__\_X#+@
M\=CP. _X                                 #( )@ ^ !$LS!P\_ ,#
M_V<<'P/___\ _<[[P?__!\!MP..@X& ?X                           
M       +  T #P $#=A\.!P'X__.<SX/___^ -^9P(? _S^ UP#.P,' /\  
M                                 @    ,  AV1L'",#W__.<_X/___
M^ !YXP?O !__\%P /P # /\                                     
M      "%(E-ASY^_?W<[\/C_^/ 'SGH^!@'^__^P 'P # #\            
M                                %80;<S?W#P_8W\? _\# /V.OX& ?
M___@H  P )  <                                             )X
M"P@/!P;_HWJ?!O\!@/\;X 8 _^#^'P       (                      
M                          /_ _\#\/W!_"#\'_/_O !@ /P X^      
M                                                 !  'P ?  \!
M"_Z&_G___@       /P                                         
M                        !S@%T 3X _<                         
M                     0 "  , !  %  8 "  )  H "P ,  T !A\', @0
M"1 *$ P0#0  [@$. NX##@3N!0^"     0 "  , !  %  8 "  )  H "P ,
M  T !A\'-@@0"1 *$ P0#0  [@$. NX##@3N!0^" $)?5T0     P       
M0E](5     #       )03$%.15]#5,      !$9'7T-/3   P      &0D=?
M0T],  #       A/4%]404(  ,      "E-?6$U)3@  P      .4U]934E.
M  #      !!37T9/4DT  ,      $E-?3EA71   P      64U].6$Q.  # 
M     !A37TY84$P  ,      &D1?6$U)3@  P      <1%]934E.  #     
M !Y$7T9/4DT  ,      ($1?3EA71   P      D1%].6$Q.  #      "9$
M7TY84$P  ,      *%!?041$4@  P      J4%].6$Q.  #      "Y07TY8
M4$P  ,      ,%!?34%32P  P      R4%]"3$]#2U_      $Q+1U]"3%0 
M ,    "@!U9"3$%.2P  P     !P4D5:      #   #_@F!6241?2$D  ,  
M /^" 59)1%],3P  P   _X(#0DE/4P    #       U"0T].4U1!5,      
M 4)#3TY/550 P      #0T].      #       )+0D0      ,      !$58
M0DE/4P  P      .4$A94T)!4T7       )'151215H  ,      !%-%5%-#
M4D5%P      %4T544$%,153       93151#3TQ/4L      !T-54E-#3TY&
MP      524M"1%=3  #      !E&3U)-7TA4 ,      8$187U-(041/P   
M   <1%E?4TA!1$_       A8,        ,   !0  %DP        P   "   
M5E@P      #    !  !663       ,       $%9,       P    "  6%]-
M24X   #       !87TU!6    ,   ,H  %E?34E.    P   !   65]-05@ 
M  #   !?  !#3TQ/4E])3L    #__W9?8G5F7V%DH0   "'N=E]S=V%P  "A
M    (;)V7V)A<U]A9*$    A\E]M86EN    @@      <W!?<V%V90"!    
M(;AS879E7W-T88(     ('-?<F5Z    @0   "&\9V]?:&]M90""     M9S
M7W9I9    ($    AOG-?;'5T    @0   "'"<V%V95]L=72"     &!B86QL
M7V-O;((    #9&-O;%]L:7-T@0   "'B8V]L7VEN9'B!    (>9C;VQ?:6YC
M<H$    AZ'1I;5]I;F-R@0   "'L8V]L7W1I;66!    (>IV8E]S879E ($ 
M   AM&YM.'(     @@    +Z>%]V8G5F  "!    (99Y7W9B=68  ($    A
MFGA?=F)A<P  @0   "&>>5]V8F%S  "!    (:)V>        ($    AIG9Y
M        @0   "&J87D       "!    (:YD<F%W7VET ((    !.')E<W1?
M<W1A@@    *B>%]N;W0R<VV"     <IX7VYO=#)B:8(    "#GE?;F]T,G-M
M@@    (T>5]N;W0R8FF"     EQK8F1?8FQO8X(    #7&YM.')?96YD@@  
M  -*;F]T,FQO  ""     SQN;W0R:&D  ((    #1&)I9V)A;&P I     CJ
M;6%S:U]M86NB    !%AB;VEN:U]B;*(    #E'-H861O=U]BH@    /Z8F]I
M;FM?;&^"     YIQ=6ET7V)L=((    #^&)L=%]T;W=E@@    .V<VAA9&]W
M7VR"    ! )S:&%D;W=?=((    $%FYE>'1?;&EN@@    1:9C%?;&]O< ""
M    !%QF<FEN9V5?,8(    $:&-T7VQO;W  @@    1X8FQT7W1A8@""    
M!*)O;F5?9G)I;H(    $F$)?5T0     P       0E](5     #       )0
M3$%.15]#5,      !$9'7T-/3   P      &0D=?0T],  #       A/4%]4
M04(  ,      "E-?6$U)3@  P      .4U]934E.  #      !!37T9/4DT 
M ,      $E-?3EA71   P      64U].6$Q.  #      !A37TY84$P  ,  
M    &D1?6$U)3@  P      <1%]934E.  #      !Y$7T9/4DT  ,      
M($1?3EA71   P      D1%].6$Q.  #      "9$7TY84$P  ,      *%!?
M041$4@  P      J4%].6$Q.  #      "Y07TY84$P  ,      ,%!?34%3
M2P  P      R4%]"3$]#2U_      $Q+1U]"3%0  ,    "@!U9"3$%.2P  
MP     !P4D5:      #   #_@F!6241?2$D  ,   /^" 59)1%],3P  P   
M_X(#15A"24]3  #       Y315130U)%1<      !4)!3$Q?2%0 P     !@
M0D%,3%\X5P#     & !"04Q,7SE7 ,     ; $U!4TM?3$5.P     2"5E]"
M549?5T3      *!314=?5T0  ,       5-%1U](5   P      !4T5'7U94
M  #      !E314=?2%H  ,      '4=!4%]65   P      #1T%07TA:  # 
M      -415A455)% ,       &)A;&Q?;6%KH@    >(9F]R;5]I;F2A    
M(D)M87-K7VEN9*$    B@F)A;&Q?9')AH@    <0<VAA9&]W7V2B    !U!G
M<FED7VUA:Z(    %SF)A;&Q?<F5PH@    48<W=A<%]N7W.B    !+YS:&%D
M;W=?9:(    %A'9?8G5F7V%RH0   @4B<WEN8S)V:62"    !.1M87A?8V]U
M;H(    (SG-W87!?<V-R@@    3\8F%C:U]A<F6!   !Y.)R7VQO;W   (( 
M   %1&5?;&]O<   @@    6D8VQR,E]L;V^"    !=AB;&%C:U]B;X(    &
M]G8R7VQO;W  @@    7^=E]W96%V97*"    !KIH,E]L;V]P ((    &/&A?
M=V5A=F5R@@    9^8F%C:U]B;&^"    "*!D;U]B;'0  ((    ((FA?=V5V
M7VQA@@    :L:%]W979?;&^"    !I1H7W=E=E\P ((    &GFA?=V5V7W%U
M@@    :T=E]W979?;&&"    !NAV7W=E=E]L;X(    &T'9?=V5V7S  @@  
M  ;:=E]W979?<76"    !O!L:6YE7V)L;X(    (<F)L=%]B86QL@@    =,
M8FQT7W-H862"    !X1M87-K7V%R98$   &<PF1O7VUA<VL @@    @48F%L
M;%]B;&^"    "$1F;W)M7V%R98$    BPF)A;&PX7VQO@@    ?*8F%L;#E?
M;&^"    !_1B;'1?8FQO8X$    A]FQO861?;&]O@@    @P1$]33U5.1 # 
M     "!%0DE/4P   ,      #F)N8V9L<@  H@    C28FYC=V%L  "B    
M"-IF;&]O<@   (0    A*F)N8P      @@    C@=V%L;     "$    (6  
M   *( X(#@8(/ 0(" @&' H&$@H*"@H*"A@*$ 8.!@80!@8X!@8J!@84'!($
M!@0&!A0&$@H&!A .$A8&" 8&+ 8*0&C*!A((" @&!@0&' AD/H0&$ :$* X*
2*! :!@8&& 9R#!X.( X@(@@ 
 
end
-- 
			god bless Lily St. Cyr
			 -Rocky Horror Picture Show

Name:	James Turner
Mail:	Imagen Corp. 2650 San Tomas Expressway, P.O. Box 58101
        Santa Clara, CA 95052-9400
AT&T:	(408) 986-9400
UUCP:	...{decvax,ucbvax}!decwrl!imagen!turner