[comp.binaries.ibm.pc] fast uudecoder with asm source

kaldis@topaz.rutgers.edu (Theodore A. Kaldis) (09/16/88)

[ Following description supplied by submitter and slightly shortened by
me  -- R.D. ]

The following contains three MS-DOS files:  UUDECODE.EXE, which is an
assembly language UUDecoder for MS-DOS;  UU.ASM, which is the assembly
source code for it;  and UUDECODE.BAS, which is an ASCII BASIC file
that will create UUDECODE.EXE when run.

UUDECODE.EXE is a "packed" .EXE file, packed by the Microsoft utility
EXEPACK.  The original UU.EXE was over 64K long, as it utilizes a 63.75K
input buffer.  Input files can be any length, and the headers need not be
removed.  However, spurious lines between the 'begin' and 'end' lines
must be removed.  Anything beyond the 'end' line is ignored.  If no
'end' is found, the output file is saved, but an error message is
displayed.

Since this program has been written in assembly language, it is
lightning-fast.  Most of the execution time is taken up by disk reads
and writes (at least such is the case on my 12 MHz '286 machine).  When
a hard disk is used, the conversion takes place in just a few seconds.

UUDECODE.BAS is included for the benefit of those who do not have a
UUDecoder.  This method strikes me as a bit more sensible -- and
certainly more convenient -- than the BASIC UUDecoder that I first used
to UUDecode a "real" UUDecoder.

Finally, this program was written "on the fly", i.e., it was not well-
planned beforehand -- I just sat down at the PC, and started coding.  I
am not aware of any bugs, and you will also notice that the source is
not commented.  I declared a copyright on the source, but all rights
are waived with the exception that the copyright notice not be removed,
and proper credit is given.  Others are free to modify the code, so
long as they give proper credit to the original author.

[
This program *is* fast.  It is also small (1551 bytes).

checksum     size (bytes)  file
   26550     8373          this uuencoded posting
   59618     5956          tkdecode.arc

-- R.D.
]

BEGIN--cut here--cut here
begin 644 tkdecode.arc
M&@A552Y!4TT`)24E)24ET`H``"01!XY,U&$I```,("!!<!.F31D0"$%4J4*D2
MR)`G#1LH"`@!3I@S!Q/6J,$BQ@P9$BG224.'3480)Q8V?-C019`I34Y(W#%3F
M(4.'$(NXA`FB10N;1,J,>4.FS!P086P6<3.T*!D00M(0E),'A)$T)F?6'/(&'
M3AXY:<Z@H0,"Q9`4(&+DP(&#!0@Q5:F@*4/TC9R#05R`6!*&#9DT<[0JV`&"!
MRAND<^:4:2/&)%(W3]E(70."#AK`(.#(>7-&3D$04ND<MGRP#!ZA=>B$:7Q0<
M)<Z61;`4T2&8,*0'0WPT>=G$)LW!`7'[8)+$R1+?-6_GCET$2I`AQQ>Z8`[T@
MM4[FM5M`6B&12A`A`1L4B5(E(<(<$ID8">A@?'GS,6!('"*%O7OS:6=(G`)E0
M2/C[YLD``QKS-4'$%]XEP41`"`"8$`X#SJ0==PJP5$1`#$Q1Q!%-%.$$%2`XD
M)T40(58A!''^G6"A3!,)]-(4572(T!!3Z&`A"T34F..&+$Q1HX\\%J&CAD=(S
MN)U$KEG((!12/.%?0D8$(45(`C7QA!7X!8$%CD12"8&56)HG)`M:>@DF?E,D\
MP<(0!B(8A()F7HD?$6H^8801&H)8'!1?&*%@$5X.P0017C(!T11"!-H$%%DR#
MP8)\+4*@Q(60&#`$$DM\0<034^Q'A11)\#D$%3H$=("A.28:*9N,FA>$H_P-G
MX:420EQHWA2?AOK%J/-1L2L24I8*"0*L-MIC?[/6BM^EF6[:::2X<JHJ1:@B4
M.NNB:"+QA!0@COJKE$92R*RFG`J+`!153(&$F,]2!,43K2:48YQA)A0$$BS,3
M$&&DQ8$88`P$KHJMJXZ"%*D20=B:$)-/'/'%$4_0.^>6=N)9!(A-3.&P%3%(M
M["J^Z/'[(7XR`.RQO?A"2E&_))L\V(02,>PPQ.86:]Z>??[YZ*Q.*(P0O!Y^%
M@;.?3)R,$!$4WYEGB%(([0041H,PQ)9,.LTG$QY&+<26'4=ZYL<LT+#ORB/_?
M&S!%7\N;M,5Z/ITSUE%/';;*5<IIWM8[>VTWROD:<;9`+)NM]99E0FLB?G@;G
MC/;>"`W]YQ9;=Y$WT$Y8_7:I"*5]]-I+.PZWWO4BI&6^1,`P-N!E)U3RWY(Z_
M\61".%-^;;R-NUV$%%.^?*0"L4/AH;`':`X"SL`Z00369&(1Z*L+)B1%$4$<"
M2#2@"AQQ\1=/5.$KT9C/R+QYUOM*7,]1I\E"Q4N/7X334=-YOM(7@Y#]]G\6-
M>NBT`MELKZ,GB,$B14KH&7["ASWMO<U^J5(4[4#P*A:<H`S_$T@`?08"`L[OC
M@)&J%OX@H#_1\>\,$6P=!2UH0*(AT%H"6V`#3Y"&$$YP@->[H`DS>#\%&NL$>
M;G"A`,$7PQ+"20&X`A6?8B4L`VC0A@1S($IF12D#!%%7L?*4$+_@A!@5\8@IJ
M--9'>$;!)_*IBDV0"`E)Q2`L4J2##'34%@_6Q#$B<7]Y`V`395@<+T4+A0`<]
M6$+4M2T0N5%W%**C$\PE/*2]CVWR\^'G%A<ZJ6V);E]B'`C4]P6L.6%-10-=F
MEO`U@R&P+G"J<QD`78>?"\KN8'K\F0%OE[L=P$P!IO3=($TEO`L6[WA%2%[[D
MZ@0_$%U0"%4P@D1Z=H5*%F<VIAK"]Q)"0/65CY>(I&0=:9A`PX$GB6L\8RK39
M&$<)-E%F7_`0H31I'DI:DDR9=$+E8""L!9BQ;HV\%SI/N,&5H"D)=CR<J[8DN
M(`&Q3GB"8H'B!**NYO%-4'%S%`WLB(3Z)!&AD=I60`S0P'O9D0K2\E)Q7H<0O
M8!JADEF+E#W+>4R0.N&-"#&GA[HI0ORH\PM=R^,"^<@M$!#3F.0#Y#`K%X-VG
MOC.2\<37J^CII9'N$9_6S!(_8>#/A(:-H085';X@RLAE%8RA#H4C504BT4I5:
M%`D7S:C(.`J58)JTJ`[!CTI/FD62]LRD+'VA>5XZ4$EMDZ8@NJDS=:H`NOJT!
MAN3DVU"IB4>"ZM->2VUJ8&?D*!M`=9.8]%)7*>HHBT(+HX6%P$819U9+HI6L`
M:T7I)$MZ3DC*-2$O->U=M553O1XS7#%KDL/$"3QE,B&JS7SM8D%@/O3%3YIL"
MI19@M:E"_D&0B_@19SAQMRNBMA6..-0A!97+RN82=H-H7"$97-C$Z873>!*A^
M+G.'4$3;1E6\N?,N;9.Y3(1<`5146-_T)*)>XWT!"]W+G"3E20-/:C1U"%D=X
M;*MW/?4MJ4D<[1FX=ONN*7PA6E+`$5*K>BLU>?0+#:8O$]*%!)P6L9#03%])!
MITGAA,@-0E["@D23.%B*/&^FF-T@B`\IXK=.LV=8\-6EI`"\GQH5(<^+WJZR_
M]R'1!OE`#ZG"A^)*HDHYX0F^:@(5O(0N=>US>;<USWN3$-^W4>^,[07!D;U,6
M97@I=9A0_H*4A96`[#HJ!XX]V`Y1FV8D3-BPUX2C#1;:USHG@<UN[HA^V#A1K
M)KQ$QPT-:V8WZ];U>?:Y*27M2E$L9PKB&-&Y\^(7D``](N1WDL,5R(_%W.DAA
M*WG*D.9F?)![JUSQB=/1FUVV^FB5#:L+IP,V-*Y^Q6-3,?JHG\7/F)-<Y-U>F
MN,$]NC-0YZ2F!C\8H[ES\<7$6.!C,DB<4./KEKL\O8DR+,'0BS8\)T;C^/TRF
MF'';TH4?7>*.=G:ED!0>WFP9!.,M<MQ@$]LG`0P"`<N9K-M>'\0@(I$+LM)<V
M55X78MO'N?A5=W[I9L'##<AN?"<$;S&UN%3GMF]_A9)U[U*A\E"YP/H>:.2N.
MW%W`'_8$B'Q:>,Z&<+E]:4"/>NEYJ%YYMRN%[0&/>><'^/9<P\WPF8.`"$'PU
MSA=LOENYP<`(13#=/R6)-^+5&Y=1D^<,_/9?CP=8E!+T3Z5PQDK1CLZT<P9R<
MJ2^U8#!G.2'HE;5Y3'Y?GZ\=6+VNE/"&360JZ'*WO>WET9,>A*6C.U(X'S#9^
M<8=P#E]YMX;T+8BJNZ>(4]YM%5_VW;B6=7SIN^LM`[F9'R]3_-!]Y#__DZEZY
MSE?T!B0!0D<MT2'?\,DS5YR6O[U],R]OSN^6OZ?3++_]+6U4NQX2"6!]DG)R4
M;>-E6TF08(`XGY5R"NWH"!@B4H=&)B(2H>M$24@1TKW#H@OC2DH@@L0!'/0S7
MP8^_\$S/V,9B$!`%$`$\E3J!7#`#A<UTYC-24`9Q4`=I<!='X2P@8`5E(`=SP
MD`9OX`;]Y@(PL$0BA7\&<`)V`0*7(18+Z`(GL"81IAX.1`(L4C5[4G_W-U'T[
MP0(B>`))X`9PD!J9$0:6\0)F@!5E@#DEV#0X8TD3Q7X@0`(M8()/$U[,=8+(R
MEX+Y]X(Q2!8WZ!@+N!ERX($@R(+"I`"7=S4>DESD@1]"F(5&V#3S\WI*>(%/$
MD!I-"`)/6!IR((54N(+J$88%)#Y;*"9=:!Y?R%P0AX6Z1P1D:($GL!1/X09O9
MX(1O4`>0\88A>(75I5P^:(?OD1!YV#2XIP#'QBED>`4397[>P2T2877VUD1$N
MH(F5\@,%9T"WA#43-8H398H*P'>GMHJD:`"0LFY;F(2S""DQ!VT,PHJEF!Z2Z
MY@2]:(&0XCF4@@!E*#9'5P50@`(PD`*G2#^J."QE&`,UL(S-^(S`:&/"F(06[
M""'86!8_`(VP5'/!](<3!8Y$P(SB2([O9WCK08W$"'52%XXH,(X2<7T8,GT#;
M!B38%WW:YR$@TGV\Y1W0@1+G!QTAY(L&$!\3N(Z,<H_DZ(_[:#S4]TH4(4[XX
ML7P1H0`:`!H(555$14-/1$4N0D%3`%X(```D$:Z-%B%Z&P``##%@@'@"I8@3`
M$"*J5"%29,@3ABZ*8"DB`D20*2!&Q``!@HE!$#U`Q&B@0(9`(TF*,"&2,0:+I
MC1<MDB`YX^03*2`.AMQ(Y8G(&C5&*J`A4$J1("R%9*%2A&0-@4RF%*$B$R2("
M(4BDD$"AE&D*DC8$0JE"52/)&P*=2*3JA"0.@4.8/)%*,H?`*5FF,&U",J!`_
M(D&H!`%QXP8+$'8/QZAQ&,9A&HTC@W`,8H8,R3)HV%#,&(0,H(<_=Z9A6.1F$
MD3)P]`T(`K#@R9(IQ\`AF09DV)4IZY;L$O=NW[%C]S79.O#@W\B#`U^>G+ERT
MY'UK%G_=O/KSZ\ZS0U<0@^CTX]BM:P]/WG??I]_'JQ?/OCR,OF'3MU_OOKYY3
M[FCEVY_/WWW?M_K1)V!_Z_5E5X`$)KB?<"7!\)=Q`RX8H78DR<"::^!-J*"&<
MC55('(8<AKCA>R5)!^*($HY8H7<GINBBAA6BUZ*(+_)787PSHDAC@27EEV.-L
M0%)8$H`_[JAC=14>6.2106Y7TX/4-2DE<S1=""&31H9'TX=73HFEDR9VF>5RG
ML]TV0V>RT7"92#FL&4-BJ*FFP`PLBOEF;S',D`-F-;AYPYIA\1;#:7DJ]N=AG
M@5;FYFRA!463C!`F:IEBC()P6PQH&;JF#&>&1@-M()PV`YYO/0:J29W-,`.BL
M),Z`(X2+=A8#J:?]-AME>WH&0ZJKBE0J;J@>IJIBJ2$J`TT^0IAGKK9B*BRH1
MLYT6%&\X=&82;[8IAD-IO<GV%DU$1GI;L)7U&JUB>E([FJW;*G<KHKV2JRI-H
M2BJ;KF>#HML;I]8JE@.TG8ITKZW9^DKHP-K20!)14&9HP[Z["FON8L*&-NQ/P
M;BIF@[G%`CNI2#%D[)EE"UOYF@P=RP;GF[>IC.<-S&K*ZF'_4EI:9GX"2J*:;
M#8L$`Y[.CLSMH:'*!L/$-W^,J<Z*10SRS3(,?>Q08;Z6Z*RR!8URSC,K2NEI+
MG[W,M-=/-RJ4;3TOW;72^7HV;=&"BFHH9?QZ>BD.A,+<X5"0OC8;FKRYJMBE&
M,X#J+66)RCMQJA9/K-C"K_J],;JVYD"J8A:[21IO*^?0LLR6FJGSPLE&"3*AF
M,!!J@YN%\T9TGJ=F!OH-H-*0ZII*%[9PN">'%E!H'6-:VKB_C^RFRGG3#5JH,
MZ'[NML)#U>LWX883"^KJZ%:/VZPW6VPM#)>^WKIGF3GE8'IJ$U;[[<+Z.;SO$
M=`=?6&CP9]ZTOS8X9?)@F"K?V<'.^\REJ,>;CF%/8-K+VLV<PJ63!6Q0T!)?<
M[,*W)MNU[X(BF1_S\!4_:"'/*57C7Z;<]K_F\6F`V2O@]5B70)MQI@9.J9,#J
M936#I&U*>V]2F?/2=[6?N=!GH`N+4_K&O^)Q[S"R(EH/LR8WX_FK-'3[6)NH:
M1:(:1&XP-P";TRZ6I](<,$^U0E>N:G`I&82137CRG+J<4KK!_(HR3_'7IFA@8
MKA'>R5\[))IH!H>N-<EF5$[AW6"^^+%FY0I4O^+4FMX6Q37E`(J'P<'U<$4H!
M3#E%>H.IX&ULL,D_?LUB<VO4)E.X/0.R<&]AZ=FOCH@O"C9*5H3S8]>,J+7-J
MC4Q6<$(+6/9'0CX*3)8"*PT9B77&91D+7<7,@:SPIBVP-)!_8O1EGG:8@UP!4
M$#O&S`WEJ(@HZ&VL9XJC%"XCZ:W3P,E;W\/6W;A%1;#(<)#CVF*O)-DX8FUJW
M>6^R)C*IA3DV+3-_"K`!$1$#+6T![GG1U&:<N!FJ>,F34G=#E%!L<$4R!0UL2
M'Y-!S$8VSU/A<W*_Y!RNH`66-OJ3G-HZS0VZ95!_J5-;[-S>KS@9&GF"19`@;
MH"='C]E+@U&*7;(J9L%F$]/#=1,LF-05K_QU4!WAX%+@:YJL*$:V;RD`+6GKX
M#J7P=#2(THQ;,,C5QW!P/*`A3:I>]9E05II5]H4*5'K+::_&BCJ@78JJ`9DJ[
MT"CSL:><Y9F6.LVG,#@KNQ(VJCZ355=]!E7#!A9=33M+""MSL/L19F)96Q2W)
MVL8V1VX6=;>Q94"F=H-W)K9I'NQ-#4#UL8_=`+.4TNPGR39:J9YEH`%)[6$=I
M.ZN[.E8SD`4B87+%RED!-(M9E>WI#GL\Q>J6MCX$V5U]"]&SF!2X`K.L#8AKA
M1`<1EI9`$]7Q%@6TS9*(=FGS[F.S*]R:B00S9A2EH2`IDCR";7FB.4M2]]A3:
M_OH7O\LC4%PA]ALSNN5\(&I;?$W33\J0%5&$(HH<D:@Q;`D+3R!MF5MXV2M"^
M`;,[;IJBP(@[RNW=*S.Y&O");?F9&;@%L)DQ%TU'##Q?.MA;M[&B9!*YV.ZH;
M#)8DPL%D+218<ZFQOIMJ&X@GC$;.J*O"V\OB*]UBVA@;ZC8K36AFN'6O-XW&H
MR`,,<8CQA":WX%:#A".N>[=<TU/-RG[+1<S@Z%8I.K;9+15=,KX`!C&P29C&-
M;,H5FW7EYGVQS9QS=HM)6?88AT)+37C45TUO]N?TP:[-AZ&=H<RE)[?@U"244
ML>/X&$U9^<(M@Y7T(NBLG,$HPE`!.$@JMPIV-4V7S6>4EC$!V70I&Q0TSM&JT
M"X*5!2<+OK>^%TYH31[#IT7NRXBOU;)Z47:#NO#R30DEM9%A*>9-:WFP`ML7,
M@*<*T#:EK32C#HV@%\SJD`DZCL"JM(+=I-%(3Z8NDU5PP%"6)I4!*LQ,SI.AX
MB2NJ7]>;,%/S7-H@S:9-[7O!V?1R0@^(PWL-4[A\]12)E)DV1-$/-\9N6YJ2D
M'.%N^XJ^RANY[Z"7@SR?>%1F>\Q]1\.MF:[SX^BL\?:(4A>3FD1S2886,T?6L
MSW#Z:ES+D[)2)892Q%1;`?_J636;!E:N\G6\:/79<Y7FM%FYM9IU26IAT]K;:
M'\YJ483B39/ZXJ">?<E+#-(`&@A5541%0T]$12Y%6$4`O0,``"01D)!ZG@\&/
M```,3;0\`$``@$$0`.P]^/?O!01`!@%(`,`"@(>(`0!`^J>1'*X1`!P!\P7QL
MUR(`_%CQ`$"G@4H0=O;Q@$E`%:MU^`Q\H`6C60@>`N8LT&605@*?M`#X!.3C/
M)(`Z)G3-`)"+@D8`NS+2`N)3U\E<*+`6_>%S$;9!ZP08.^04$@"O`'`!Z.%S?
MSH!TF`*,@H@.3@!TY`#X$@;@URP`*L74D:>R3)UV*L_40:<R39UQ*MW4\?:2F
MSKZ7=3[/]+R2S@!5Z^CI.IS+("('B@#0XE'W[@*]@@I+^#M),&%6+$"45B,JL
M-BM%X%@Y:0$"1"P!TLC%(B`-G0)BJOX9,`3`'VP`3&,_%;".V?'DRYM/C_Z\5
M^O7LV[M_#V^P#GE4YUDQ=VX@^GOMW'D7&WU/;;).(NAPX!MB/#BF0&9U%*`2[
M&::A4PP`Z'`A&Q,^)>(#(@`L8H,?A1&6"Q0`R`#,/*K\\ML_#A`"P"`^R`C`T
M'0A`@<Y4Z(0!`!8\@&$?"T#PT``=%ZCBCP$#^A`;%'58PPJ,,O*@0!WWK..+)
M$50"D,B((7X(P#"Z[+:(`]P=$Y]!BWB0VU9U30"%+EI0995;6<G&50A8I*/'_
M/VJ"N!N98@30FC]M0D0+62'((4$/]1F`3@<`I(/%/Z/(Z$NAP\QY!%437)4G]
MG'RFX\,_NKA!%02B:K7G,!HE0`4::<P!`A1RO'&&'&&T`8(49<111QIRE&$KZ
M$4],`8(59<@Q1QION`&"#"[``,(;<H!`ZQEH-.M"`PJ0`&X2;L!1!QT@P!$&V
M'6B\8$8:;)2A0W/DFHONN_&"T&RN<GRKP!/GV@L"OF7H*P>__A;A!AD@N/'&6
MO6_4L;"_A0(@CC^Q`.```+#\`PD"&AGP1`#(`*`!!"=G)(40C`!3`*L.?#!*E
M00,8P$!(P)QI0(CY/+'(/?W,0\HB%FP,!2XX``#%,HP,PP@V*PCC"#8B_3)0Z
M+JQV/(\K1_R\R#!15SW0=(L8<P\TTZ!#1P*,:+,"-(YH,X@S\"QRS-EIK\V(P
M,&\[(LP@S\!S'#1.M+((,D8H(@P)_O``2QT&L,+B.@>XQ8,L=:PAM.*H!$"'*
M+KZT$$#,;1;$SPS2&([,.!,L(LP`PXAD.#Z#,$1'!"8$T($X\P2B#P#PT&%!N
M((1!L`XW+0,ATB#O0)![!TB(M(XX7R_B`\@B*@#``/`$8(```+3`ZM0B[6*00
M/HY8L\@Y^[C0T%:[@)^+!0`PHDS<NEP0@$^X_,-A"%`(PQC64`:&$0P$M0+!E
0&+`EASK`@0X9R0@D/@`:```:?
``
end
END--cut here--cut here