[net.sources] uudecode in MS-BASIC

rde@ukc.ac.uk (R.D.Eager) (02/17/86)

[food for line eater]

There  has been some discussion about public domain versions of uudecode
for those souls who didn't get it in a distribution. I  thought  it  was
time  to post the updated version of uudecode in Microsoft BASIC; I have
made a minor change to cater for a variation in  coding  encountered  on
some uuencoded files.

This  program  is  short  enough  that  it  can  be  typed in by hand if
necessary. I hope it is of some  use  to  micro  owners  without  direct
access to other uudecodes.

---------CUT HERE--------CUT HERE----------CUT HERE---------CUT HERE------
1000 DEFINT A-Z
1010 REM Trap filing errors
1020 ON ERROR GOTO 1600
1030 CLS
1040 LOCATE 5,11
1050 PRINT STRING$(40," ")
1060 LOCATE 5,11
1070 INPUT "Enter name of input file: ", INFILE$
1080 OPEN INFILE$ FOR INPUT AS #1
1090 LOCATE 8,10
1100 PRINT STRING$(40," ")
1110 LOCATE 8,10
1120 INPUT "Enter name of output file: ", OUTFILE$
1130 OPEN "R", #2,OUTFILE$, 1
1140 FIELD #2, 1 AS N$
1150 REM Search for header line
1160 LINE INPUT #1,A$
1170 IF LEFT$(A$,5) <>"begin" THEN 1160
1180 LOCATE 11,10
1190 PRINT "Header = ";A$
1200 SP = ASC(" ")
1210 DIM BUF(5000)
1220 P = 0
1230 REM Main loop
1240 LINE INPUT #1, A$
1250 P = 0
1260 COUNT = ASC(LEFT$(A$,1)) - SP
1270 IF COUNT <> 64 THEN 1290
1280 COUNT = 0
1290 IF COUNT = 0 THEN 1560
1300 ADJ = COUNT MOD 4
1310 FOR I = 2 TO LEN(A$) STEP 4
1320    X1 = ASC(MID$(A$,I,I)) - SP
1330    IF X1 <> 64 THEN 1350
1340    X1 = 0
1350    X2 = ASC(MID$(A$,I+1,I+1)) - SP
1360    IF X2 <> 64 THEN 1380
1370    X2 = 0
1380    X3 = ASC(MID$(A$,I+2,I+2)) - SP
1390    IF X3 <> 64 THEN 1410
1400    X3 = 0
1410    X4 = ASC(MID$(A$,I+3,I+3)) - SP
1420    IF X4 <> 64 THEN 1440
1430    X4 = 0
1440    P = P + 1
1450    BUF(P) = (X2\16) + (X1*4)
1460    P = P + 1
1470    BUF(P) = (X3\4) + ((X2 MOD 16) * 16)
1480    P = P + 1
1490    BUF(P) = X4 + ((X3 MOD 4) * 64)
1500 NEXT I
1510 FOR I = 1 TO P
1520   LSET N$ = CHR$(BUF(I))
1530   PUT #2
1540 NEXT I
1550 GOTO 1240
1560 END
1570 REM
1580 REM Error trapping routine for file handling
1590 REM
1600 IF ERL <> 1080 GOTO 1650          ' not input file problem
1610 LOCATE 22,20
1620 PRINT "Can't open input file"
1630 GOSUB 1780
1640 RESUME 1040
1650 IF ERL <> 1130 GOTO 1700          ' not output file problem
1660 LOCATE 22,20
1670 PRINT "Can't open output file"
1680 GOSUB 1780
1690 RESUME 1090
1700 IF ERL <> 1160 THEN 1770
1710 LOCATE 22,20
1720 PRINT "Header line not found"
1730 GOSUB 1780
1740 GOSUB 1780
1750 LOCATE 24,1
1760 END
1770 ERROR ERR
1780 FOR I = 1 TO 5000: NEXT I
1790 LOCATE 22,20
1800 PRINT STRING$(30," ")
1810 RETURN
TE 24,1
1760 END
1770 ERROR ERR
1780 FOR I = 1 TO 5000: NEXT I
1
---------CUT HERE--------CUT HERE----------CUT HERE---------CUT HERE------
-- 
           Bob Eager

           rde@ukc.UUCP
           rde@ukc
           ...!mcvax!ukc!rde

           Phone: +44 227 66822 ext 7589

nclee@sbcs.UUCP (Nai Chi Lee) (02/19/86)

> This  program  is  short  enough  that  it  can  be  typed in by hand if
> necessary....
>							Bob Eager

Well, you don't have to.
Just download the program listing to your PC using Kermit/Xmodem/CrossTalk
or whatever. Save it as a text file called, say, TEXT.BAS

Enter BASIC, load"TEXT", the text file gets converted into BASIC internally.
Save this program under a different name like UUDECODE

Exit BASIC, you now have a (smaller) file called UUDECODE.BAS

CSNET: nclee@sbcs.csnet
ARPA: nclee%suny-sb.csnet@csnet-relay.arpa
UUCP: {allegra, hocsd, philabs, ogcvax} !sbcs!nclee

"It is difficult to make something foolproof because fools are so ingenious."
[Anon]