1 REM BINHEX 1.0, OCTOBER 1984
2 REM -- BY DAN FLEYSHER --
3 REM (FLEYSHER.WBST@XEROX)
4 REM THIS BASIC PROGRAM CONVERTS A
5 REM BINARY DISK FILE TO THE EQUIV-
6 REM VALENT TEXT FILE CONTAINING
7 REM HEXIDECIMAL CHARACTERS.  THIS
8 REM FILE IS SUITABLE FOR LONG
9 REM DISTANCE (MODEM) TRANSMISSION,
10 REM AND CONTAINS A FULL CHECKSUM.
11 REM A COMPANION PROGRAM, HEXBIN,
12 REM CONVERTS THE HEX FILE BACK TO
13 REM THE ORIGINAL BINARY FORMAT.
14 REM
20 DIM FILEIN$(15),FILEOUT$(15),BYTE$(2)
30 BUFSIZ=37:DIM BUF$(BUFSIZ),HEX$(16)
40 HEX$="0123456789ABCDEF"
50 ? "}             BINHEX 1.0":? :?
60 TRAP 60:? "INPUT FILENAME";:INPUT FILEOUT$
70 GOSUB 1000:FILEIN$=FILEOUT$:?
80 TRAP 80:? "OUTPUT FILENAME";:INPUT FILEOUT$
90 IF FILEOUT$<>"" THEN 110
100 FILEOUT$="D:HEXFILE.TXT":? "                ";FILEOUT$:GOTO 120
110 GOSUB 1000:?
120 TRAP 40000:SUM=0
130 OPEN #4,4,0,FILEIN$:OPEN #5,8,0,FILEOUT$
140 PRINT #5:PRINT #5;".START."
150 BUF$=""
160 TRAP 300:FOR I=1 TO INT(BUFSIZ/2)
170 GET #4,BYTE:SUM=SUM+BYTE
180 NIBBLE=INT(BYTE/16)
190 INDEX=1+NIBBLE
200 BYTE$(1)=HEX$(INDEX,INDEX)
210 INDEX=1+BYTE-(16*NIBBLE)
220 BYTE$(2)=HEX$(INDEX,INDEX)
230 BUF$(LEN(BUF$)+1)=BYTE$
240 NEXT I:TRAP 40000
250 ? BUF$:PRINT #5;BUF$:GOTO 150
300 ? BUF$:PRINT #5;BUF$:POP
310 ? "CHECK SUM = ";SUM
320 PRINT #5;".STOP.";SUM
330 CLOSE #4:CLOSE #5
340 END
1000 IF LEN(FILEOUT$)<3 THEN GOTO 1040
1010 IF FILEOUT$(1,2)="D:" THEN RETURN
1020 IF LEN(FILEOUT$)<4 THEN GOTO 1040
1030 IF FILEOUT$(1,1)="D" AND FILEOUT$(3,3)=":" THEN RETURN
1040 BUF$=FILEOUT$:FILEOUT$="D:":FILEOUT$(3)=BUF$:RETURN