patth@dasys1.UUCP (Patt Haring) (08/04/87)
DOS 3.3 BINARY EXEC BINTRN.EXE BINARY TRANSFER
Creates EXECable DOS 3.3 text file from a binary file. Documentation
included in program and program listing.
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
--
Patt Haring UUCP: ..cmcl2!phri!dasys1!patth
Big Electric Cat Compu$erve: 76566,2510
New York, NY, USA MCI Mail: 306-1255; GEnphil.