[comp.sys.apple] DOS 3.3 Binary File Transfer Program

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.