10 'BINHEX/BAS - by Tim Mann - converted to BASIC/S syntax on 7/2/81 by Bill Stockwell 20 CLS:PRINT:PRINT"Hex to binary/Binary to hex":PRINT" file converter":PRINT 30 CLEAR 5000 40 O$="OK":M$="0123456789ABCDEF":N$=MID$(M$,2):C$="Yy" 50 PRINT"Type 1 to convert a binary file to hex" 60 PRINT" 2 to convert a hex file to binary" 70 PRINT:INPUT D%:PRINT 80 IF D%=1 THEN 400 90 IF D%=2 THEN 110 100 GOTO 50 110 INPUT"Hex file name";H$ 120 INPUT"Binary file name";B$ 130 OPEN"I",1,H$ 140 OPEN"O",2,B$ 150 IF EOF(1) THEN 320 160 LINE INPUT#1,D$:E$=LEFT$(D$,3):S$=" ":A%=INSTR(E$,S$):H%=1:C%=0:R$="*" 170 IF A%=0 THEN 220 180 H%=2 190 GOTO 220 200 IF EOF(1) THEN 360 210 LINE INPUT#1,D$ 220 IF D$="" THEN 200 230 X$=LEFT$(D$,1) 240 IF X$=R$ THEN 340 250 IF D$=O$ THEN 200 260 L%=LEN(D$) 270 FOR I%=1 TO L%:X$=MID$(D$,I%,2) 280 GOSUB 730:Y$=CHR$(Y%):PRINT#2,Y$;:I%=I%+H% 290 C%=C%+Y%:C%=C% AND 255 300 NEXT I% 310 GOTO 200 320 CLOSE 1:CLOSE 2:PRINT"Done":PRINT 330 GOTO 50 340 X$=MID$(D$,2) 350 PRINT"Checksum in file = ";:PRINT X$ 360 X%=C% 370 GOSUB 700:Y$=LEFT$(Y$,2) 380 PRINT"Calculated checksum = ";:PRINT Y$ 390 GOTO 320 400 INPUT"Binary file name";B$ 410 INPUT"Hex file name";H$:X$="":C%=0 420 S$="":T%=29:INPUT"Insert spaces in hex file (y/n)";X$:A%=INSTR(C$,X$) 430 IF A%=0 THEN 450 440 S$=" ":T%=20 450 X$="":F%=0:INPUT"Add checksum to hex file (y/n)";X$:A%=INSTR(C$,X$) 460 IF A%=0 THEN 480 470 F%=1 480 OPEN"I",1,B$:CLOSE 1:OPEN"R",1,B$,1 490 OPEN"O",2,H$ 500 FIELD 1,1 AS F$ 510 S%=0 520 FOR I%=1 TO T% 530 IF EOF(1) THEN 630 540 S%=S%+1:GET 1,S%:X%=ASC(F$):C%=C%+X%:C%=C% AND 255 550 GOSUB 700 560 PRINT#2,Y$; 570 NEXT I% 580 IF EOF(1) THEN 630 590 S%=S%+1:GET 1,S%:X%=ASC(F$):C%=C%+X%:C%=C% AND 255 600 GOSUB 700 610 PRINT#2,Y$ 620 GOTO 520 630 A$="":PRINT#2,A$ 640 IF F%=0 THEN 670 650 X%=C% 660 GOSUB 700:A$="*":A$=A$+Y$:PRINT#2,A$ 670 CLOSE 1:CLOSE 2 680 PRINT"Done":PRINT 690 GOTO 50 700 Z%=X% AND 15:Z%=Z%+1:Z$=MID$(M$,Z%,1) 710 X=CSNG(X%):X=X/16:Y%=CINT(X):Y%=Y% AND 15:Y%=Y%+1 720 Y$=MID$(M$,Y%,1):Y$=Y$+Z$:Y$=Y$+S$:RETURN 730 L$=LEFT$(X$,1):D%=INSTR(N$,L$):D%=D%*16:L$=RIGHT$(X$,1) 740 E%=INSTR(N$,L$):Y%=E%+D%:RETURN