<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Tue, 15 Jul 1986 01:01:42 GMT
From   : Ross Alford <alford%ecsvax.uucp@BRL.ARPA>
Subject: uuencode source, com, and discussion

I apologize for the delay.  This message and the one that follows
contain the Turbo Pascal source and uuencoded binaries for uuencode
and uudecode to run under CP/M 2.2 (and probably 3.0).  I know
that posting software to net.micro.cpm is not very usual, but I received
a number of requests for the source and/or binaries, and rather than
try to send to individuals, I decided to post.
 
Re my suggestion that CP/Mers exchange software via the net:  I have
a couple of responses to mail and news followups.  First, what I
would suggest is that software exchange take one of two forms--either
posting articles containing only source and documentation, which would
best be applied to programs written for ASM and maybe Turbo, both of 
which are almost universally accessible (or MBASIC, I suppose); or
for software written in less universal languages, posting files with
a short header describing the contents, followed by a uuencoded 
library file containing source, documentation, and object code.  I've
noticed lately that most newer software on RCPM systems is packaged
this way, and it does seem sensible.  If the .LBR file is squeezed
before uuencoding, on average the uuencoded version will be no larger
than the unsqueezed original.  We might want to establish either a
net.micro.cpm.sources or something similar if there was a lot of traffic,
but perhaps at first could just use net.micro.cpm, since the volume is
now low anyway.  I do agree that source should always be included when
it is available (and perhaps not too huge.  240k .ASM files would
probably be stretching things).
 
To start things off, then, in response to popular request, here follow
uuencode.pas and uuencode.uue (the encoded binary, which can be decoded
with UN*X uudecode before downloading to your system).  The files are
separated by ---------------CUT HERE-----------lines, since I've
never figured out how to package shar files.
 
Ross Alford
   ...mcnc!ecsvax!alford
Program uuencode;

  CONST header = 'begin';
        trailer = 'end';
        defaultMode = '644';
        defaultExtension = '.uue';
        offset = 32;
        charsPerLine = 60;
        bytesPerHunk = 3;
        sixBitMask = $3F;
        endofinfile : boolean = FALSE;

  TYPE string80 = string[80];

  VAR inf : file;
      outfile: text;
      infilename, outfilename, mode: string80;
      lineLength, numbytes, bytesInLine: integer;
      line: array [0..59] of char;
      hunk: array [0..2] of byte;
      chars: array [0..3] of byte;


{  procedure debug;

    var i: integer;

    procedure writebin(x: byte);

      var i: integer;

      begin
        for i := 1 to 8 do
          begin
            write ((x and $80) shr 7);
            x := x shl 1
          end;
        write (' ')
      end;

    begin
      for i := 0 to 2 do writebin(hunk[i]);
      writeln;
      for i := 0 to 3 do writebin(chars[i]);
      writeln;
      for i := 0 to 3 do writebin(chars[i] and sixBitMask);
      writeln
    end;  }

{Binary file read added by Ross Alford,  ...!mcnc!ecsvax!alford.  The original
 MSDOS versions of uuencode/decode just use read/write on a FILE OF BYTE.
 CP/M Turbo expects some file info to be stored in the first 4 bytes of files
 of any type other than TEXT.  Getbyte (below) and Putbyte (in UUDECODE)
 bypass this 'feature' by using blockread and blockwrite.  The only global
 variables either use are 'infilename' and 'inf' or 'outfilename' and 'outf'}

function getbyte(var b : byte) : boolean;

type bufptr = ^bufrec;
     bufrec = record
                next : bufptr;
                buffer : array[1..128] of byte
              end;

const sectstobuf = 8;                {max number of sectors to buffer}
      sectsread : integer = 0;       {constants are essentially statics}
      bytptr : integer = 129;
      notopen : boolean = TRUE;
      j : integer = 0;
      infsize : integer = 0;
      listsave : integer  = 0;

var list,temp,temp2 : bufptr;

begin
  if notopen then
    begin
      notopen := FALSE;
      assign(inf,infilename);
      {$i-}
      reset(inf);
      {$i+}
      if ioresult <> 0 then
        begin
          writeln('File ',infilename,' not found.  Aborting');
          halt
        end;
      infsize := filesize(inf);
      new(list);
      list^.next := NIL;
      listsave := ord(list);
      sectsread := 0
    end;
  list := ptr(listsave);
  if bytptr > 128 then
    begin
      if list^.next <> NIL then
        begin
          temp := list^.next;
          dispose(list);
          list := temp;
          bytptr := 1
        end
        else begin
          dispose(list);
          list := NIL;
          j := 0;
          while (sectsread<infsize) and (j<sectstobuf) do
            begin
              new(temp2);
              temp2^.next := NIL;
              if list=NIL then
                begin
                  list := temp2;
                  temp := list
                end
                else begin
                  temp^.next := temp2;
                  temp := temp2
                end;
              blockread(inf,temp^.buffer,1);
              j := succ(j);
              sectsread := succ(sectsread)
            end;
          bytptr := 1
        end
    end;
    listsave := ord(list);
    if list <> NIL then
      begin
        b := list^.buffer[bytptr];
        bytptr := succ(bytptr);
        getbyte := TRUE
      end
      else begin
        b := 0;
        getbyte := FALSE
      end
end;

  procedure Abort (message: string80);

    begin {abort}
      writeln(message);
      close(inf);
      close(outfile);
      halt
    end; {abort}

  procedure Init;

    procedure GetFiles;

      VAR i: integer;
          temp: string80;
          ch: char;

      begin {GetFiles}
        if ParamCount < 1 then abort ('No input file specified.');
        infilename := ParamStr(1);
        {$I-}
        assign (inf, infilename);
        reset (inf);
        {$i+}
        if IOResult > 0 then abort (concat ('Can''t open file ', infilename));

        write('Uuencoding file ', infilename);

        i := pos('.', infilename);
        if i = 0
          then outfilename := infilename
          else outfilename := copy (infilename, 1, pred(i));
        mode := defaultMode;
        if ParamCount > 1 then
          for i := 2 to ParamCount do
            begin
              temp := Paramstr(i);
              if temp[1] in ['0'..'9']
                then mode := temp
                else outfilename := temp
            end;
        if pos ('.', outfilename) = 0
          then outfilename := concat(outfilename, defaultExtension);
        assign (outfile, outfilename);
        writeln (' to file ', outfilename, '.');

        {$i-}
        reset(outfile);
        {$i+}
        if IOresult = 0 then
          begin
            Write ('Overwrite current ', outfilename, '? [Y/N] ');
            repeat
              read (kbd, ch);
              ch := Upcase(ch)
            until ch in ['Y', 'N'];
            writeln (ch);
            if ch = 'N' then abort(concat (outfilename, ' not overwritten.'))
          end;
        close(outfile);

        {$i-}
        rewrite(outfile);
        {$i+}
        if ioresult > 0 then abort(concat('Can''t open ', outfilename));
      end; {getfiles}

    begin {Init}
      GetFiles;
      bytesInLine := 0;
      lineLength := 0;
      numbytes := 0;
      writeln (outfile, header, ' ', mode, ' ', infilename);
    end; {init}

  procedure FlushLine;

    VAR i: integer;

    procedure writeout(ch: char);

      begin {writeout}
        if ch = ' ' then write(outfile, '`')
                    else write(outfile, ch)
      end; {writeout}

    begin {FlushLine}
      write ('.');
      writeout(chr(bytesInLine + offset));
      for i := 0 to pred(lineLength) do
        writeout(line[i]);
      writeln (outfile);
      lineLength := 0;
      bytesInLine := 0
    end; {FlushLine}

  procedure FlushHunk;

    VAR i: integer;

    begin {FlushHunk}
      if lineLength = charsPerLine then FlushLine;
      chars[0] := hunk[0] shr 2;
      chars[1] := (hunk[0] shl 4) + (hunk[1] shr 4);
      chars[2] := (hunk[1] shl 2) + (hunk[2] shr 6);
      chars[3] := hunk[2] and sixBitMask;
      {debug;}
      for i := 0 to 3 do
        begin
          line[lineLength] := chr((chars[i] and sixBitMask) + offset);
          {write(line[linelength]:2);}
          lineLength := succ(lineLength)
        end;
      {writeln;}
      bytesInLine := bytesInLine + numbytes;
      numbytes := 0
    end; {FlushHunk}

  procedure encode1;

    begin {encode1};
      if numbytes = bytesperhunk then flushhunk;
      endofinfile := not (getbyte(hunk[numbytes]));
      numbytes := succ(numbytes)
    end; {encode1}

  procedure terminate;

    begin {terminate}
      if numbytes > 0 then flushhunk;
      if lineLength > 0
        then
          begin
            flushLine;
            flushLine;
          end
        else flushline;
      writeln (outfile, trailer);
      close (outfile);
      close (inf);
    end; {terminate}


  begin {uuencode}
    init;
    while not endofinfile do encode1;
    terminate
  end. {uuencode}
begin 644 UUENCODE.COM
MP^(@S:M#;W!Y<FEG:'0@*$,I(#$Y.#4@0D]23$%.1"!);F,`!`"A0@``````
M```````````````````````````````````````````````````*3D5#(#@T
M,#%,4R!H:6QI=&5E9610$``)&UL_,FP;9QLJ`````````!M6````````````
M``````0;/0`````````````````!("`$`P```ALJ````!!L]("```AM%10T`
M`AM2?P`````"&U0````"&R@Q```"&RDQ`````'ZW-\@C]>5^S>@!X?$]R!CS
MS0`"#0H`R6_ES:8`R?Z`W&L"U(0"YG\8[N4A[@$8!.4AZ`$B$P+AX_7%U7XC
MMR@'Y<WH`>$8]-'!\>/)?;3(.B0!AX>'X^/CX\4!T@3!/2#T*QCHS=`!V"K.
M`1C?]<75Y2&H`<TU`B&B`<W0`2JZ`=0=`N'1P?')]<75Y2&T`1CI]<75Y2&N
M`1C@]3K@`+<H$,75Y:\RX``AR`'--0+AT<'QR?4ZX`#^_RCVQ=7E/O\RX``A
MP@$8X_7%U>4AO`$8VO7%U>7E$?``(8L!`1``[;#1.IX!3SJ<`8+5S=P"T3J?
M`4\ZG0&#S=P"(?``S=`!*J`!S1T"X='!\<DA\``&``GK(9L!-#4H`A+)&QLA
M"@,&`RL.+PR6,/R&]7G^,"@!$A/Q$.W)`0ID(6L!PS4"(7L!PS4"$0,`S5\#
MY@$8!A$&`,U?`V\F`,D1$@`8]!$,`!@($0\`&`,1"0#AP>4ZW0"W*!K5Q<V@
M`'RU*`_-X0/^$R`(S>$#_@/*U"#!T2H!`!GI(M(`>#+=`'FW*`L^PS(X`"'[
M'R(Y`"&E`Q&@``$8`.VP(;T#$;@``0P`[;"O;V<RT``BU``BU@`^?C+1`#+@
M`,G#%@/#(`/#.0/#+P/#-`/#*@/#.0/#(`/!`((`0P#$`,4`P0#%U>7=Y?WE
M]6\F`.7-I@#Q_>'=X>'1P<G%U>7=Y?WES:,`?1CK#O\8#`X`[5O2`!,:_B`H
M^B%E``8#S7L$&LVF!/Y!.!+^43`.1Q,:_CH@!GC60!,8`ANO(5P`=R,,#2@9
M&LV"!"`3_C\H#_XJ*`O^+B@'!@O-=P08$`8(S5X$&OXN(`83!@/-7@0A:``&
M&#8`(Q#[R1H,#2@(_C\H"?XJ*`O-@@0H"W<C$Q#IR1,^/Q@"/B!W(Q#\R<VF
M!/X@.`WEQ2&8!`$.`.VQP>')O\D@+BP[.CT_*EM=/#Y[??YAV/Y[T-8@R7S-
MM`1]]1\?'Q_-O03QY@_&D"?.0"?#R0.O-\M\P'RW?<@^_\DRV`#%S:\>P2H&
M`+?M0MJH(.O1^0$`_`DBQ@"O;V<BS@`RW``^PS+9`"'>("+:`.LBS`#IY2K&
M`+?M0B+&`.U;Q`"W[5(9Z^':=1WML,DJQ@#ML"+&`-G)7B-6(]5>(U8C3B-&
MX<G=X>L:3P8`+V\F_SGYZP/ML-WIT1I/!@`O;R;_.?GK`^VPZ=WAZR'@_SGY
MZ\4$!2@%KQ(3$/SML,$^()"1*`9'KQ(3$/S=Z=WA(>#_.?D&(*]W(Q#\W>G
MX47-N@6V=]WIW>'1?9,X]SQ/0\VZ!5]!K[/+(S`&MG<CKQX!$/,8W7CF^`\/
M#\8";R8`.7CF!SQ'KS<7$/W)Y=GKXW,C<B/1<R-R(W$C<,G=X7CK(0``1#E.
MY0DCX[DX`7D2$R.W*`-/[;#A^=WIW>%X(0``1#E.Y0DC7B-6&-S=X>MH)@!$
M.>VP(2``.?G=Z=WA(2``.5XC5F@F`$0Y[;`A(@`8Y]WAZW@O;R;_.?EP(T@&
M`.OML-WIM^U2&=@^D,,G(+?M4K?M0C`#"1G)/I'#)R"W[5+K$^IQ!O`8`?@1
M``#)U>NW[5+KX1CKM^U2(0$`R"O)S=\+&/7-L`D8\+?M4B$!`,`KR<W?"QCU
MS;`)&/#-<@<A`0#0*\G-WPL8]<VP"1CPS7('(0$`R-@KR<W?"QCTS;`)&._-
M<@<A``#(V"/)S=\+&/3-L`D8[\UR!R$!`-@KR<W?"QCUS;`)&/!474M"ZR$`
M`'JW/A`@`U,^""GK*>LP`0D](/;)?+7*`PI\JO7-@`?KS8`'ZT1-KV=O/A'M
M:NU",`()-S_+$\L2/2#PZ_'P&$CES9('RSS+'='KS0\'Z\MZR!@US6$'R"D0
M_<G-80?(RSS+'1#ZR>MZMR`(>_X0,`-'M\FO9V_)ZWRJ?/I^![K`?;O)%\G+
M?,A\+V=]+V\CR7WF`6\F`,GM2\H`[5O(`,75>$%*4QX`'\L8RQG+&LL;X1GK
MX>U*1$TAZ6(9(L@`ZR$9-NU*(LH`1$W)!@`1$"?-X@<1Z`/-X@<19`#-X@<>
M"LWB!WT8#:\\[5(P^QD$/2`"!<C&,-UW`-TCR=U^`-8D3R$``"`"W2/=?@#-
MI@36,#@I_@HX#@P-("'6!_X*.!O^$#`75%TIV"G8#`T@`E1=&=@IV%\6`!G8
M&,MYM\A\A\G=X>'E?28`(SE.@3@<=^LA``!$[4(Y^>OE`^VPZ^$K&T\#[;CK
M(_G=Z3X0PRD@W>'-R`17X<W="5_AY7V3.!H4%2@6NC@62@8`8#E[@E1=/6]@
M.7GMN.L8":\8`SQK+28`.7?YW>G=X>'E?28`(SGY;R8`W>G=X2$``%0Y7DLC
MY1E>0R/E&>7]X='A>9`X$#Q/Q=7E&KXH#.'1P2,-(/(A```8#B,3$.S1X<$A
M```YZ^U2_?G=Z=WAS<@$3^'-W0E?X7Z3.!L,#2@7D3@2]7Z1=P8`4!E470GQ
M/$_ML!@"'7/=Z=WAS=T)3]'M4^@`(0``.1KUAC@#N#@!>!+Q5UZ1."\\;WJ#
M.`2X?3@(>),X)I$X(SRW*!_%U2KH`%\=%@!"&0G1U>50&>OA3^VXT<$8!7H\
M*!E/>)$\NS@!>[<H#BKH``8`">LA`0`Y3^VP(0``5#E>$QGYW>G=X>$MPF8(
M;"8`W>DA`@!4.5X3&7XV`2-WR2$$`%0Y7DLCY1E>0R/E&>7]X='AK[@H!+D@
M"'BYX=']^=7I&KX@]B,3!0T8YWRW(`-]M\`^$<,I(,T-"M`^`<,G(,V!"ACU
MS:P/S9<*&.W9?;?9/@+*)R#-]0H8W]G+>-G"B`K9?;?9R-G%U>79?;<@!=G+
MN!A4Q<OXKPC9R_A]V94H$S`&[40(/0C9S7H++#T@^0@H`=GQYH`@#\V2"S`E
MS7L+MRP@'C<8(,W&"S_U*!`X`=G-K`O+>"`)S88++2#VS7(+\3@"R[BWV>'1
MP=G)V<MXV<(4"LV/"LT4"M@L+<AX[H!'R=E]M]G*<@M]M\C9A=G-30O%U>7
M.<UR"]DN!=D^"-TCW6X`",L=,`/-D@O->PL(/2#QV2W9(.7=;OO+>"`)",V'
M"RPM*`$M\?'QMPCQV<'AV=WAR[BP1RPMS'(+",E]M\C9E=D_S4T+Y>7EW3G9
M+@79/@@(S<8+.`/-K`L_RQ4(/2`,W74%W2O9+=DH#CX(S88+,-\(S:P+MQCA
MS88+.`3-Q@L_X='!RW@@!<V'"QB:+""7-QB5.`;&@#@&&!O&@#@7;]WCV>7%
M>,OXV:CF@/7+^-WEW2$``,GAV*]O1T]77V?)M\L8RQG+&LL;RQS)M\L4RQ/+
M$LL1RQ#)?-F$V6=[V8O97WK9BME7>=F)V4]XV8C91\E\V9399WO9F]E?>MF:
MV5=YV9G93WC9F-E'R7C9N-G`>=FYV<!ZV;K9P'O9N]G`?-F\V<G9>-FH\ND+
M>!?)RW@H!LWS"\@_R7W9O=G`M\C#Q@M]UH':<@L\_BC0V<75Y0C-<@L(-\U[
M"ST@^=E\V:399WO9H]E?>MFBV5=YV:'93WC9H-E'PWL*V<75Y=G-K`_9S?T+
MV<V!"ACK?;?(RW@^`\(G(,VL#WW&@,LOQH!OUA3UV<75Y<WU"LT-"BW%U>7-
M@0I]X='!V>'1P>.\XS#C\=G)V<V.#RW-@0K9S8X/+-E]_FS8Q<NXS=\+P3@)
MS?4*S30,S9<*RW@H`\T-"MDMV<W?"_4X`\V!"MDMV<W?"S@%V2S-@0I]_FPX
M.]D!JBH1JJHA?ZK-EPK=Y=TA!PT^!<TT#]WAS:P/S9<*S9<*Q=7EV<VL#RTM
MV2W-#0K9X='!V<V!"BPL\2PMR-AX[H!'R6>J/RLRUVZV*AWO.'0-T``-T'J(
MB(B("'ZKJJJJJBPM/@3*)R#+>,(G(-G-F`_9?2Z!E?7-]0K9S88/V<V!"L75
MY=DLS0T*V>'1P<WU"MWEW2&,#3X&S30/W>$LV<VB#RW9S0T*\<75Y6\F`#`!
M)<T($-DLS9<*V>'1P<T-"GW^9]IR"\E]BIW8B1U]Z:*++CI]CN,XCF-^29(D
M21)^S<S,S$Q_JZJJJBK9S:(/V;?+>/7+N,WU"GW^B#!'Q=7E+,W0#^7+/,L
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
M`=7=X=WEX=U.`MU&`]U>`-U6`1@;*MX`[5/>`-7=X=UU`-UT`>U+\`#=<0+
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
:S1L@(4A_S;`:S1L@R<TH(RK_("8`?>X!;P`!
`
end
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>