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