100 REM Binary Transfer 102 REM 104 REM This program converts binary files into EXECable DOS 3.3 106 REM text files. When EXECed, the text file creates a copy of 108 REM the original binary file under a name specified at the time 110 REM the EXEC file was created. 112 REM 114 REM Note that the binary file must NOT load between $800 (#2048) 116 REM and $5FFF (#24575). 118 REM 120 REM Lines #604 and #606 must be changed if you load DOS onto a 122 REM language card, or you use a DOS that does not store the 124 REM starting location and length of the last BLOADed or BRUN 126 REM binary file at the addresses indicated. 128 REM 130 REM RUN in 40-column mode only. 132 REM 134 REM by John Clifton 136 REM 138 REM 1985 10 14 140 REM 142 REM Binary Transfer is in the public domain. 146 REM ******************************************************** REM 198 REM Initialization 199 REM 200 HM = PEEK (115) + PEEK (116) * 256: HIMEM: 24576 202 TAB$ = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ":Q$ = CHR$ (34) 204 D$ = CHR$ (4):INB = 10:OUTB = 16: ONERR GOTO 1300 297 REM 298 REM Screen Page 1 299 REM 300 POKE 34,0: HOME : PRINT "Binary Transfer" 302 PRINT "===============": PRINT 304 PRINT " BT captures binary files as EXECable": PRINT 306 PRINT " DOS 3.3 text files.": PRINT : PRINT 308 PRINT " When EXECed, the text file will create": PRINT 310 PRINT " a copy of the original binary file": PRINT 312 PRINT " under a name specified at the time the": PRINT 314 PRINT " EXEC file was created.": GOSUB 800 397 REM 398 REM Screen Page 2 399 REM 400 GOSUB 1200: PRINT 402 PRINT " First, you will be asked for the name": PRINT 404 PRINT " of the binary file, second, for the": PRINT 406 PRINT " name of the EXEC file, and third, for": PRINT 408 PRINT " the name of the binary file to be": PRINT 410 PRINT " BSAVEd by the EXEC file.": PRINT : PRINT 412 PRINT " Note that the binary file must NOT": PRINT 414 PRINT " load between $800 (decimal #2048) and": PRINT 416 PRINT " $5FFF (#24575).": GOSUB 800 497 REM 498 REM File Selection 499 REM 500 GOSUB 1200 502 POKE 34,0: VTAB 4: HTAB 1: PRINT " Binary file name ..." 504 PRINT : PRINT " > ";:L = 30: GOSUB 900:BI$ = O$ 506 IF BI$ = "" THEN 1000 508 IF MID$ (BI$,1,1) = " " THEN BI$ = MID$ (BI$,2,30): GOTO 506 510 IF LEFT$ (BI$,1) > "@" AND LEFT$ (BI$,1) < "[" THEN 514 512 GOSUB 1100: GOTO 502 514 PRINT : PRINT " EXEC file to be created ...": PRINT 516 PRINT " > ";:L = 30: GOSUB 900:FI$ = O$ 518 IF FI$ = "" THEN 1000 520 IF MID$ (FI$,1,1) = " " THEN FI$ = MID$ (FI$,2,30): GOTO 518 522 IF LEFT$ (FI$,1) > "@" AND LEFT$ (FI$,1) < "[" THEN 526 524 GOSUB 1100: GOTO 502 526 PRINT : PRINT " Duplicate binary file ...": PRINT 528 PRINT " > ";:L = 30: GOSUB 900:BO$ = O$ 530 IF BO$ = "" THEN 1000 532 IF MID$ (BO$,1,1) = " " THEN BO$ = MID$ (BO$,2,30): GOTO 530 534 IF LEFT$ (BO$,1) > "@" AND LEFT$ (BO$,1) < "[" THEN 538 536 GOSUB 1100: GOTO 502 538 PRINT : PRINT : PRINT " Everything ok (y/n)? "; 540 GET O$: IF O$ = CHR$ (27) THEN PRINT : GOTO 1000 542 IF O$ = "N" OR O$ = "n" THEN 548 544 IF O$ = "Y" OR O$ = "y" THEN PRINT : GOTO 600 546 GOTO 540 548 PRINT : VTAB 5: HTAB 1: CALL - 958: GOTO 502 597 REM 598 REM Create EXEC file 599 REM 600 GOSUB 1200: VTAB 4: HTAB 1: PRINT "Creating EXEC file ..." 602 POKE 34,6: PRINT D$"MONCIO": PRINT D$"BLOAD "BI$ 604 ST = PEEK (43634) + PEEK (43635) * 256 606 LN = PEEK (43616) + PEEK (43617) * 256 608 IF ST > 24576 OR ST + LN < 2048 AND LN < > 0 THEN 620 610 POKE 34,0: GOSUB 1200: PRINT : CALL - 1059 612 PRINT " Can't continue ... target binary file": PRINT 614 PRINT " has been BLOADed inside space reserved": PRINT 616 PRINT " for program variables.": GOSUB 800 618 POKE 34,0: HOME : PRINT "Bye!": HIMEM: HM: NEW : END 620 PRINT D$"OPEN "FI$: PRINT D$"UNLOCK "FI$ 622 PRINT D$"DELETE "FI$: PRINT D$"OPEN "FI$: PRINT D$"WRITE "FI$ 624 PRINT "MONCIO": PRINT "NEW": PRINT "CALL-151" 626 CNTR = 0: FOR W = ST TO ST + LN 628 CNTR = CNTR + 1: IF CNTR < > 1 THEN 632 630 IN$ = STR$ (W): GOSUB 700: PRINT OUT$;: PRINT ": "; 632 IN$ = STR$ ( PEEK (W)): GOSUB 700: PRINT OUT$;: PRINT " "; 634 IF CNTR = 8 THEN CNTR = 0: PRINT 636 NEXT : IF CNTR < > 0 THEN PRINT 638 PRINT "FP": PRINT "HOME": PRINT "BSAVE "BO$",A"ST",L"LN 640 PRINT "NOMONCIO": PRINT "PRINT "Q$"File was BSAVEd as ..."Q$ 642 PRINT "PRINT "Q$BO$Q$: PRINT D$"CLOSE": PRINT D$"NOMONCIO" 644 GOSUB 1200: PRINT : PRINT " Another file (y/n)? "; 646 GET O$: IF O$ = CHR$ (27) THEN PRINT : GOTO 1000 648 IF O$ = "N" OR O$ = "n" THEN PRINT : GOTO 1000 650 IF O$ = "Y" OR O$ = "y" THEN PRINT : GOSUB 1200: GOTO 502 652 GOTO 646 697 REM 698 REM Convert Base 10 to Base 16 699 REM 700 OUT$ = "":NUM = 0:O$ = "":T$ = "": FOR I = 1 TO LEN (IN$) 702 J = ASC ( MID$ (IN$,I,1)) - ASC ("0") 704 IF J > 9 THEN J = J - 7 706 IF J < 0 OR J > = INB THEN 710 708 O$ = O$ + MID$ (IN$,I,1):NUM = NUM * INB + J 710 NEXT 712 J = INT (NUM / OUTB):V = NUM - J * OUTB + 1 714 OUT$ = OUT$ + MID$ (TAB$,V,1) 716 NUM = J: IF NUM < > 0 THEN 712 718 FOR X = LEN (OUT$) TO 1 STEP - 1 720 T$ = T$ + MID$ (OUT$,X,1): NEXT :OUT$ = T$ 722 IF LEN (OUT$) = 1 THEN OUT$ = "0" + OUT$ 724 RETURN 797 REM 798 REM Screen Hold Routine 799 REM 800 VTAB 24: HTAB 8: PRINT "Press any key to continue"; 802 POKE - 16368,0: WAIT - 16384,128:KEY = PEEK ( - 16384) 804 POKE - 16368,0: IF PEEK ( - 16384) = 27 THEN 1000 806 VTAB 24: HTAB 1: CALL - 868: RETURN 897 REM 898 REM Input Routine 899 REM 900 O$ = "": CALL - 868 902 GET X$: IF X$ > CHR$ (31) THEN 914 904 IF X$ = CHR$ (27) THEN 1000 906 IF X$ < > CHR$ (8) OR O$ = "" THEN 910 908 O$ = MID$ (O$,1, LEN (O$) - 1): CALL - 1008: CALL - 868 910 IF X$ = CHR$ (13) THEN PRINT : RETURN 912 GOTO 902 914 IF LEN (O$) = L THEN 902 916 IF X$ = ";" OR X$ = "," OR X$ = ":" THEN 902 918 IF X$ > "Z" THEN X$ = CHR$ ( ASC (X$) - 32) 920 PRINT X$;:O$ = O$ + X$: GOTO 902 997 REM 998 REM Exit 999 REM 1000 PRINT : PRINT D$"NOMONCIO" 1001 POKE 34,0: HOME : PRINT "Bye!": HIMEM: HM: END 1097 REM 1098 REM Illegal File Name 1099 REM 1100 VTAB 4: HTAB 1: CALL - 958: PRINT " Illegal file name" 1101 CALL - 1059: GOSUB 800: RETURN 1197 REM 1198 REM Clear Below Line 2 1199 REM 1200 VTAB 3: HTAB 1: CALL - 958: RETURN 1297 REM 1298 REM Error Handling 1299 REM 1300 PRINT : POKE 34,0: PRINT D$"CLOSE": PRINT D$"NOMONCIO" 1302 ER = PEEK (222): CALL - 1059: GOSUB 1200: VTAB 4: HTAB 2 1304 IF ER > 15 AND ER < > 255 THEN 1326 1306 IF ER = 4 THEN PRINT "Write Protected" 1308 IF ER = 6 THEN PRINT "File Not Found" 1310 IF ER = 8 THEN PRINT "I/O error" 1312 IF ER = 9 THEN PRINT "Disk Full" 1314 IF ER = 10 THEN PRINT "File Locked" 1316 IF ER = 11 THEN PRINT "DOS Syntax Error" 1318 IF ER = 12 THEN PRINT "No Buffers Available" 1320 IF ER = 13 THEN PRINT "File Type Mismatch" 1322 IF ER = 255 THEN PRINT "Control-C Interrupt Attempted" 1324 GOSUB 800: GOTO 500 1326 LI = PEEK (218) + PEEK (219) * 256 1328 PRINT " Error = "ER: PRINT : PRINT " Line = "LI: GOTO 1324