11000 KEY OFF
21001 DEFINT A-Z
31010 REM Trap error opening input file
41020 ON ERROR GOTO 1600
51030 CLS
61040 LOCATE 5,11
71050 PRINT STRING$(40," ")
81060 LOCATE 5,11
91070 INPUT "Enter name of input file: ", INFILE$
101080 OPEN INFILE$ FOR INPUT AS #1
111090 LOCATE 8,10
121100 PRINT STRING$(40," ")
131110 REM Trap error opening output file
141120 ON ERROR GOTO 1640
151130 LOCATE 8,10
161140 INPUT "Enter name of output file: ", OUTFILE$
171150 OPEN "R", #2,OUTFILE$, 1
181160 FIELD #2, 1 AS N$
191170 REM Trap error at end of file
201180 ON ERROR GOTO 1680
211190 REM Search for header line
221200 LINE INPUT #1,A$
231210 IF LEFT$(A$,5) <>"begin" THEN 1200
241220 LOCATE 11,10
251230 PRINT "Header = ";A$
261240 SP = ASC(" ")
271250 DIM BUF(100)
281260 RECNO# = 1
291270 REM Main loop
301280 LINE INPUT #1, A$
311290 P = 0
321300 COUNT = ASC(LEFT$(A$,1)) - SP
331310 IF COUNT = 64 THEN COUNT = 0
341320 IF COUNT = 0 THEN 1560
351330 ADJ = COUNT MOD 4
361340 FOR I = 2 TO LEN(A$) STEP 4
371350    X1 = ASC(MID$(A$,I,I)) - SP
381360    IF X1 = 64 THEN X1 = 0
391370    X2 = ASC(MID$(A$,I+1,I+1)) - SP
401380    IF X2 = 64 THEN X2 = 0
411390    X3 = ASC(MID$(A$,I+2,I+2)) - SP
421400    IF X3 = 64 THEN X3 = 0
431410    X4 = ASC(MID$(A$,I+3,I+3)) - SP
441420    IF X4 = 64 THEN X4 = 0
451430    P = P + 1
461440    BUF(P) = (X2\16) + (X1*4)
471450    P = P + 1
481460    BUF(P) = (X3\4) + ((X2 MOD 16) * 16)
491470    P = P + 1
501480    BUF(P) = X4 + ((X3 MOD 4) * 64)
511490 NEXT I
521500 FOR I = 1 TO P
531510   LSET N$ = CHR$(BUF(I))
541520   PUT #2, RECNO#
551530   RECNO# = RECNO# + 1
561540 NEXT I
571550 GOTO 1280
581560 END
591570 REM
601580 REM Error trapping routines
611590 REM
621600 LOCATE 22,20
631610 PRINT "Can't open input file"
641620 GOSUB 1740
651630 RESUME 1020
661640 LOCATE 22,20
671650 PRINT "Can't open output file"
681660 GOSUB 1740
691670 RESUME 1090
701680 LOCATE 22,20
711690 PRINT "Header line not found"
721700 GOSUB 1740
731710 LOCATE 24,1
741720 END
751740 FOR I = 1 TO 5000: NEXT I
761750 LOCATE 22,20
771760 PRINT STRING$(30," ")
781770 RETURN
79