home *** CD-ROM | disk | FTP | other *** search
- 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 # (<cr> 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