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!*	DT<[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