home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib33a.dsk
/
MARCH.1988
/
BINARY.DWN.bas
next >
Wrap
BASIC Source File
|
2023-02-26
|
5KB
|
103 lines
10 REM ***************************
20 REM * BINARY.DWN *
30 REM * BY GARY LITTLE *
40 REM ***************************
100 NORMAL : TEXT : NOTRACE : HOME
110 IF PEEK(48896) = 76 THEN 130
120 PRINT "THIS PROGRAM REQUIRES PRODOS.": END
130 D$ = CHR$(4)
140 PRINT D$;"PREFIX": INPUT PX$
150 CD = 8192: REM CODE START
160 EC = CD +21: REM ERROR CODE LOCATION
170 PN = CD +22: REM PATHNAME LOCATION
180 DT = 10752: REM BLOCK BUFFER ADDRESS ($2A00)
190 LL = DT +20: REM EOF LOCATION
200 PRINT "[BINARY.DWN]": PRINT
210 PRINT "BINARY II TO PRODOS FILE CONVERTER"
220 PRINT "(VERSION 1.50 --- APRIL 5, 1987)"
230 PRINT "BY ";: INVERSE : PRINT "GARY B. LITTLE": NORMAL : PRINT
240 PRINT "THIS PROGRAM EXTRACTS THE PRODOS FILES"
250 PRINT "FROM A BINARY II FILE."
260 PRINT : PRINT "THIS PROGRAM IS IN THE PUBLIC DOMAIN."
270 PRINT : PRINT "ENTER THE ";: INVERSE : PRINT "FULL PATHNAME";
280 NORMAL : PRINT " OF THE": PRINT "BINARY II FILE TO BE ANALYZED"
290 PRINT "(E.G., /MY.DISK/MY.FILES/THE.FILE ):": PRINT
300 INPUT "";F$: IF F$ = "" THEN HOME : GOTO 850
310 IF LEFT$(F$,1) < >"/" THEN 1030
320 ONERR GOTO 1020
330 PRINT D$;"VERIFY";F$: POKE 216,0
340 PRINT : PRINT "ENTER THE NAME OF THE DIRECTORY WHERE"
350 PRINT "THE EXTRACTED FILES ARE TO BE STORED"
360 PRINT "(E.G., /DATA.DISK/FILES/ ):": PRINT
370 INPUT "";PF$: IF PF$ = "" THEN HOME : GOTO 850
380 ONERR GOTO 1000
390 PRINT D$;"PREFIX";PF$: POKE 216,0
400 FOR I = 0 TO 297: READ X: POKE CD +I,X: NEXT
410 L = LEN(F$)
420 POKE PN,L
430 FOR I = 1 TO L: POKE PN +I, ASC( MID$ (F$,I,1)): NEXT
440 HOME
450 CALL CD +0: GOSUB 790: REM OPEN BINARY II FILE
460 PRINT "SCANNING THE BINARY II FILE:": PRINT
470 REM READ HEADER AND CHECK ID BYTES
480 CALL CD +6: GOSUB 790: REM READ 128 BYTES
490 I1 = PEEK(DT +0):I2 = PEEK(DT +1)
500 I3 = PEEK(DT +2):I4 = PEEK(DT +18)
510 IF I1 < >10 OR I2 < >71 OR I3 < >76 OR I4 < >2 THEN 770
520 FT = PEEK(DT +4): REM FILE TYPE
530 DF = PEEK(DT +125): REM DATA FLAGS
540 REM CALCULATE NUMBER OF BLOCKS TO READ
550 EF = PEEK(LL) +256 * PEEK(LL +1) +65536 * PEEK(LL +2)
560 NB = INT(EF/128) +((EF -128 * INT(EF/128)) < >0)
570 REM DISPLAY NAME OF FILE
580 L = PEEK(DT +23): FOR I = 1 TO L
590 CH = PEEK(DT +23 +I): IF CH <128 THEN CH = CH +128
600 PRINT CHR$(CH);: NEXT : HTAB 17
610 IF DF >127 THEN DF = DF -128: PRINT "COMPRESSED ";
620 IF DF >63 THEN DF = DF -64: PRINT "ENCRYPTED ";
630 IF DF = 1 THEN PRINT "PACKED ";
640 PRINT
650 TF = PEEK(DT +127): REM NUMBER OF FILES TO FOLLOW
660 CALL CD +3: GOSUB 790: REM OPEN PRODOS FILE
670 IF NB = 0 OR FT = 15 THEN 730
680 FOR I = 1 TO NB
690 CALL CD +6: GOSUB 790: REM READ 128 BYTES
700 CALL CD +9: GOSUB 790: REM WRITE 128 BYTES
710 NEXT I
720 CALL CD +18: GOSUB 790: REM SET EXACT EOF
730 CALL CD +15: GOSUB 790: REM CLOSE PRODOS FILE
740 IF TF < >0 THEN 480
750 CALL CD +12: REM CLOSE BINARY II FILE
760 PRINT : PRINT "CONVERSION COMPLETED.": GOTO 850
770 CALL CD +12: REM CLOSE BINARY II FILE
780 HOME : PRINT "ERROR: ";F$;" IS NOT A BINARY II FILE": GOTO 850
790 EN = PEEK(EC): REM GET ERROR CODE
800 IF EN = 0 THEN RETURN
810 POP : PRINT D$;"CLOSE"
820 PRINT : PRINT "ERROR: MLI CODE #";EN
830 IF EN = 70 THEN PRINT "FILE NOT FOUND"
840 IF EN = 71 THEN PRINT "DUPLICATE FILENAME"
850 PRINT D$;"PREFIX";PX$
860 END
1000 HOME : PRINT "ERROR: DIRECTORY NOT FOUND.": POKE 216,0: GOTO 850
1010 HOME : PRINT "ERROR: ILLEGAL FILE NAME.": POKE 216,0: GOTO 850
1020 HOME : PRINT "ERROR: FILE NOT FOUND.": POKE 216,0: GOTO 850
1030 HOME : PRINT "ERROR: NOT A FULL PATHNAME.": POKE 216,0: GOTO 850
5000 DATA 76,87,32,76,103,32,76,199,32,76,209,32,76,219,32,76,225
5010 DATA 32,76,237,32,0,0,0,0,0,0,0,0,0,0,0,0,0
5020 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5030 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5040 DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
5050 DATA 0,0,32,0,191,200,9,33,32,247,32,173,14,33,141,22,33
5060 DATA 96,169,7,141,0,42,169,23,141,1,42,169,42,141,2,42,173
5070 DATA 3,42,9,2,141,3,42,162,2,189,20,42,157,39,33,202,16
5080 DATA 247,48,23,162,3,189,14,42,157,8,42,202,16,247,32,0,191
5090 DATA 192,0,42,32,247,32,76,170,32,32,0,191,195,0,42,176,21
5100 DATA 32,0,191,200,15,33,176,13,173,20,33,141,30,33,141,38,33
5110 DATA 141,8,33,96,201,70,240,200,56,32,247,32,32,0,191,202,21
5120 DATA 33,32,247,32,96,32,0,191,203,29,33,32,247,32,96,169,0
5130 DATA 56,32,247,32,169,0,141,21,32,32,0,191,204,7,33,96,32
5140 DATA 0,191,208,37,33,32,247,32,96,141,21,32,144,8,104,104,32
5150 DATA 0,191,204,5,33,96,1,0,1,0,3,22,32,0,34,0,3
5160 DATA 23,42,0,38,0,4,0,0,42,128,0,0,0,4,0,0,42
5170 DATA 128,0,0,0,2,0,0,0,0