home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Brotikasten
/
BROTCD01.iso
/
geos
/
geos133.d64
/
bin.to.geos
< prev
next >
Wrap
Text File
|
1995-08-07
|
7KB
|
156 lines
5 REM COMMODORE TO APPLE CONVERSION
10 REM FOR GEOS FILES
20 REM BY TERRY VAN CAMP
30 REM AUGUST 1989
40 REM
50 HOME : PRINT
60 PRINT "INSERT DISK WITH BIN FILE TO CONVERT": PRINT " INTO CURRENT DRIVE"
70 PRINT : PRINT "PRESS ANY KEY TO START CONVERSION"
80 GET A$: HOME : PRINT
90 HM = 38400: REM $9600
100 ML = HM - 38 * 256: HIMEM: ML - 4 * 256: REM $7000
110 EB = ML + 255 - 39:PB = ML + 256:MB = PB + 256:GB = MB + 512:FB = GB + 512
115 FOR I = EB TO EB + 38: POKE I,0: NEXT
120 FOR I = ML TO ML + 25: READ X: POKE I,X: NEXT
130 D$ = CHR$ (4): POKE ML + 11, PEEK (48944): REM CURRENT UNIT NUM
140 DEF FN LB(X) = X - 256 * INT (X / 256)
150 POKE ML + 5, INT (ML / 256): POKE ML + 13, INT (GB / 256)
160 RW = 128:BL = 2:BH = 0: GOSUB 2000
170 IF ER = 1 GOTO 4500
180 REM CHECK DISK FOR #FILES & BIN
190 IF PEEK (GB + 37) < > 1 THEN PRINT "ONLY ONE FILE CAN BE ON THE DISK": GOTO 5000
200 E1 = GB + 43
210 IF PEEK (E1 + 16) < > 6 THEN PRINT "NOT A BIN FILE": GOTO 5000
220 REM OKAY TO START CONVERSION
230 REM GET NAME OF BIN FILE
240 DEF FN LN(X) = X - 16 * INT (X / 16)
250 NL = FN LN( PEEK (E1)):FI$ = ""
260 FOR I = 1 TO NL:FI$ = FI$ + CHR$ ( PEEK (E1 + I)): NEXT
270 REM READ-IN COMMODORE DIR ENTRY
280 PRINT D$;"BLOAD ";FI$;",A";GB;",L40"
290 T = PEEK (GB + 21):PT = 128:GT = 131:AC = 227
295 IF PEEK (GB + 22) = 8 THEN PT = 131:GT = 132:AC = 195
300 IF T < > 1 THEN PRINT "CANNOT CONVERT THIS TYPE OF FILE": GOTO 5000
310 PRINT : PRINT "CONVERTING": PRINT : PRINT FI$: PRINT : PRINT "PLEASE WAIT ...."
315 GOSUB 1000
320 FOR I = 0 TO 15:T = PEEK (GB + 3 + I)
330 IF T = 160 GOTO 350
340 POKE EB + 1 + I,T: NEXT
350 POKE EB,48 + I: REM STORAGE TYPE AND LENGTH
360 REM GET RECORD PNTRS
370 PRINT D$;"BLOAD ";FI$;",A";PB;",B508,L254"
380 PRINT D$;"BSAVE RECBLOCK,A";PB;",L254
390 REM FORMAT MASTER INDEX BLOCK
400 POKE MB + 127,0: POKE MB + 383,0
405 FOR I = MB + 128 TO MB + 128 + 127: POKE I,0: NEXT
410 FOR I = MB + 384 TO MB + 384 + 127: POKE I,0: NEXT
420 GOSUB 1500: REM SAVE MODIFIED HEADER BLK
430 REM DIR INFO ON MASTER INDEX & HEADER
440 GOSUB 2000: REM ALREADY SET FOR DIR READ
450 IF ER = 1 GOTO 4500
460 T = PEEK (E1 + 1 * 39 + 17): POKE EB + 17,T: REM INDEX PNTR
470 T = PEEK (E1 + 1 * 39 + 18): POKE EB + 18,T
480 T = PEEK (E1 + 2 * 39 + 17): POKE EB + 31,T: REM HEADER PNTR
490 T = PEEK (E1 + 2 * 39 + 18): POKE EB + 32,T: POKE GB + 37,1
530 REM REWRITE RECORDS
540 REM CLR DIR ENTRIES
550 POKE E1 + 39,0: POKE E1 + 2 * 39,0
560 RW = 129: GOSUB 2000
570 IF ER = 1 GOTO 4500
580 CR = 0:B = 3 * 254:TB = 2:TY = 0
590 FOR R = 1 TO 11
600 GOSUB 3500: REM GET RECORD LENGTH
610 IF RL = 0 THEN GOSUB 3000: GOTO 2500: REM NO MORE RECORDS
620 IF L > 8 * 4 * 256 THEN PRINT "RECORD TOO LONG": GOTO 5000
630 GOSUB 4000: REM REWRITE RECORD
640 CR = CR + 1:B = B + L: NEXT R
650 GOSUB 3000: REM GET DIR INFO & CLR ENTRIES
655 IF ER = 1 GOTO 4500
660 GOTO 590: REM START NEXT 11 RECORDS
1000 VTAB 19: HTAB 16
1010 PRINT "A Shareware Program"
1020 PRINT TAB( 22);"by": PRINT
1030 HTAB 16: PRINT "Terry Van Camp"
1040 HTAB 16: PRINT "16604 Cypress"
1050 HTAB 16: PRINT "Strongsville, Ohio 44136";
1060 RETURN
1500 REM HEADER SUBROUTINE
1510 PRINT D$;"BLOAD ";FI$;",A";GB + 2;",B254,L254"
1520 POKE GB,0: POKE GB + 1,0: POKE GB + 68,PT: POKE GB + 69,GT
1530 PRINT D$;"BSAVE HEADER,A";GB;",L256"
1540 RETURN
2000 REM BLK READ OR WRITE SUBROUTINE
2010 POKE ML + 14,BL: POKE ML + 15,BH
2020 POKE ML + 3,RW: CALL ML
2030 IF PEEK (8) < > 0 THEN ER = 1: RETURN
2040 ER = 0: RETURN
2500 REM ALL RECORDS CONVERTED
2505 IF ER = 1 GOTO 4500
2510 REM COMPLETE MASTER INDEX & DIR ENTRY-- & WRITE-OUT
2520 TL = FN LB(TY):TH = INT (TY / 256)
2525 IF TH > 255 THEN TH = 255
2530 POKE MB + 255,TL: POKE MB + 511,TH: REM LENGTH OF FILE
2540 POKE EB + 21,TL: POKE EB + 22,TH
2550 TL = FN LB(TB):TH = INT (TB / 256): REM #BLKS IN FILE
2560 POKE EB + 19,TL: POKE EB + 20,TH
2570 POKE EB + 16,GT: REM FILE TYPE CODE
2580 PRINT D$;"DELETE ";FI$: REM DELETE BIN FILE
2590 FOR I = 0 TO 22: POKE E1 + I, PEEK (EB + I): NEXT
2600 POKE E1 + 28,0: POKE E1 + 29,0: POKE E1 + 30,AC
2610 POKE E1 + 31, PEEK (EB + 31): POKE E1 + 32, PEEK (EB + 32)
2620 POKE GB + 37,1: GOSUB 2000: REM WRITE DIRECTORY
2630 IF ER = 1 GOTO 4500
2640 REM WRITE-OUT MASTER INDEX BLK
2650 TL = FN LB(MB):TH = INT (MB / 256)
2660 POKE ML + 12,TL: POKE ML + 13,TH
2670 BL = PEEK (EB + 17):BH = PEEK (EB + 18)
2680 GOSUB 2000
2690 IF ER = 1 GOTO 4500
2700 PRINT : PRINT "DONE!": GOTO 5000
3000 REM DIR CLEANUP SUBROUTINE
3010 IF RL = 0 AND R = 1 THEN RETURN
3015 POKE ML + 12, FN LB(GB): POKE ML + 13, INT (GB / 256):BL = 2:BH = 0
3020 RW = 128: GOSUB 2000: REM BLK #2 IN GB
3025 IF ER = 1 THEN RETURN
3030 FOR I = 1 TO R - 1:ES = E1 + I * 39: REM ES = ENTRY START
3040 BL = PEEK (ES + 17):BH = PEEK (ES + 18)
3050 POKE ML + 12, FN LB(FB): POKE ML + 13, INT (FB / 256)
3060 RW = 128: GOSUB 2000: REM READ-IN INDEX BLK FOR RECORD
3070 IF ER = 1 THEN RETURN
3080 TB = TB + PEEK (ES + 19) + 256 * PEEK (ES + 20)
3090 TL = PEEK (ES + 21):TH = PEEK (ES + 22)
3100 TY = TY + TL + 256 * TH
3110 POKE FB + 255,TL: POKE FB + 511,TH: REM FILE LENGTH
3115 RE$ = "": FOR H = ES + 5 TO ES + 7:T = PEEK (H)
3120 IF T = 0 GOTO 3130
3125 RE$ = RE$ + CHR$ (T): NEXT H
3130 RE = VAL (RE$)
3135 POKE MB + RE,BL: POKE MB + 256 + RE,BH: REM PNTR TO RECORD INDEX OF BLKS
3140 RW = 129: GOSUB 2000
3150 IF ER = 1 THEN RETURN
3160 POKE ES,0: NEXT I
3165 POKE ML + 12, FN LB(GB): POKE ML + 13, INT (GB / 256)
3170 POKE GB + 37,1:BL = 2:BH = 0:RW = 129: GOSUB 2000: REM REWRITE DIRECTORY
3180 RETURN
3500 REM RECORD LENGTH SUBROUTINE
3510 IF CR = 127 THEN RL = 0: RETURN
3520 SC = PEEK (PB + CR * 2)
3530 IF SC = 0 THEN T = PEEK (PB + CR * 2 + 1): POKE MB + CR,T: POKE MB + 256 + CR,T:CR = CR + 1: GOTO 3500
3540 L = SC * 254
3550 RL = (SC - 1) * 254 + PEEK (PB + CR * 2 + 1)
3560 RETURN
4000 REM REWRITE SUBROUTINE
4010 PRINT D$;"BLOAD ";FI$;",A";FB;",B";B;",L";L
4015 T = RL - 1
4020 IF T < 512 OR T = 512 THEN T = 514
4030 PRINT D$;"BSAVE TEMP";CR;",A";FB;",L";T
4040 RETURN
4500 INVERSE : PRINT "DISK I/O ERROR": NORMAL
5000 REM EXIT ROUTINE
5010 HIMEM: HM
5020 END
6000 REM ML ROUTINE (SET FOR READ OF DIR INTO GB)
6010 DATA 32,0,191,128,10,112,144,8,176,11,3,96,0,116,2,0
6020 DATA 169,0,133,8,96,169,1,133,8,96