0 REM 02-02-85 <-- last backup 10 PRINT"Eric Gans" 20 PRINT"French Department, UCLA" 30 PRINT"Los Angeles, CA 90024" 40 PRINT"02/02/85" 50 ON ERROR GOTO 770 60 REM seems finished 11/1/84 70 PRINT TAB(35)"DCODE" 80 PRINT:PRINT" This program will decode MBasic's compressed file format to ASCII." 90 PRINT"It's not as fast as Basic itself but it gives you a better idea of what's" 100 PRINT"going on. Double-precision numbers are not supported." 110 PRINT:PRINT" The (data) file BCODE.DAT must be on disk to support this program." 120 PRINT"It has a few peculiarities (extra spaces before/after numbers, etc.)," 130 PRINT"but that shouldn't matter." 140 DEFINT A-Z 150 DIM NM$(256),C1(140),C2(140) 160 OPEN "I",1,"BCODE.DAT" 170 FOR I=1 TO 140 180 IF ZAP THEN N=K:INPUT#1,NM$,C1(I),K:ZAP=0:GOTO 200 190 INPUT#1,N,NM$,C1(I),K 200 IF K<>I+1 THEN C2(I)=K ELSE C2(I)=0:ZAP=-1 210 IF C1(I)<>255 THEN NM$(C1(I))=NM$ ELSE NM$(C2(I)-128)=NM$ 220 PRINT"."; 230 NEXT 240 CLOSE 250 PRINT 260 INPUT "File to read";F$ 270 FOR I=1 TO LEN(F$) 280 IF ASC(MID$(F$,I,1))>96 AND ASC(MID$(F$,I,1))<123 THEN MID$(F$,I,1)=CHR$(ASC(MID$(F$,I,1)) AND NOT 32) 290 NEXT 300 INPUT "Record # ( for 1)";RN 310 IF RN=0 THEN RN=1 320 OPEN "R",1,F$ 330 FIELD#1,128 AS B$ 340 GET#1,RN 350 IF EOF(1) THEN PRINT"File not found":CLOSE:KILL F$:GOTO 260 360 E$=INPUT$(1,#1) 370 E$=INPUT$(1,#1) 380 E1=ASC(E$) 390 E$=INPUT$(1,#1) 400 IF E$=CHR$(0) AND E1=0 THEN CLOSE:GOTO 260 410 E$=INPUT$(1,#1) 420 E1=ASC(E$) 430 E$=INPUT$(1,#1) 440 E2=ASC(E$) 450 PRINT E1+256*E2; 460 E$=INPUT$(1,#1) 470 IF HEXCODE=2 THEN N=ASC(E$):HEXCODE=1:GOTO 630 ELSE IF HEXCODE=1 THEN PRINT HEX$(256*ASC(E$)+N);:HEXCODE=0:GOTO 630 480 IF N2CODE=2 THEN N=ASC(E$):N2CODE=1:GOTO 630 ELSE IF N2CODE=1 THEN PRINT 256*ASC(E$)+N;:N2CODE=0:GOTO 630 490 IF NUMCODE THEN PRINT ASC(E$);:NUMCODE=0:GOTO 630 500 IF COLON THEN IF ASC(E$)=162 THEN PRINT NM$(58);:COLON=0:GOTO 630 ELSE PRINT":";:COLON=0 510 IF E$=CHR$(0) THEN 640 520 IF ASC(E$)=12 THEN PRINT"&H";:HEXCODE=2:GOTO 630 530 IF ASC(E$)=14 OR ASC(E$)=28 THEN N2CODE=2:GOTO 630 540 IF ASC(E$)=15 THEN NUMCODE=-1:GOTO 630 550 IF ASC(E$)>16 AND ASC(E$)<27 THEN PRINT ASC(E$)-17;:GOTO 630 560 IF ASC(E$)=29 THEN GOSUB 660:GOTO 630 570 IF E$=":" THEN COLON=-1:GOTO 630 580 IF ASC(E$)>31 AND ASC(E$)<127 THEN PRINT E$;:GOTO 630 590 IF FFCODE THEN PRINT NM$(ASC(E$)-128);:FFCODE=0:GOTO 630 600 IF E$=CHR$(180) THEN PRINT"WHILE";:E$=INPUT$(1,#1):GOTO 630 610 IF E$<>CHR$(255) THEN PRINT NM$(ASC(E$));:GOTO 630 620 FFCODE=-1 630 GOTO 460 640 PRINT 650 GOTO 370 660 REM single precision 670 DEFSNG N 680 FOR I=1 TO 4 690 E$=INPUT$(1,#1) 700 N(I)=ASC(E$) 710 NEXT 720 EX=N(4)-129 730 NB=2^EX*(1+2^(-7)*(N(3) AND 127)+2^(-15)*N(2)+2^(-31)*N(1)) 740 IF (N(3) AND 128) THEN NB=-NB 750 PRINT NB; 760 RETURN 770 REM ERRORS 780 'PRINT CHR$(7)"["ERR"/"ERL"]"; 790 IF ERR=62 AND E$=CHR$(15) THEN PRINT"26";:NUMCODE=0:RESUME 800 IF ERR=50 THEN RN=RN+1:GET#1,RN:RESUME 810 IF ERR=62 THEN E$=CHR$(26):RESUME NEXT 820 IF ERR=53 AND ERL=160 THEN PRINT"BCODE.DAT not on disk: program aborted":END 830 PRINT:PRINT"ERROR"ERR"IN LINE"ERL:STOP