1000 '****************************************** 1010 '* PROGRAM COM2DATA Version 1.0 * 1020 '* * 1030 '* (1983) by David Whitman * 1040 '* * 1050 '* Reads a .COM format file and produces * 1060 '* a file of DATA statements, which may * 1070 '* be merged into a BASIC program. * 1080 '****************************************** 1090 ' 1095 'print title page 1100 GOSUB 5000 1110 ' 1120 'set up error trapping, declare all integers 1130 ON ERROR GOTO 6000: DEFINT A-Z 1140 ' 1150 'open input file 1160 LOCATE 1,1: GOSUB 4000: INPUT "Name of COM file? [.com] ",C$ 1170 IF C$ = "" THEN BEEP: GOTO 1160 1180 'if no extension, add default 1190 IF INSTR(C$,".") = 0 THEN IN$ = C$ + ".com" ELSE IN$ = C$: C$ = LEFT$(C$,INSTR(C$,".")-1) 1191 'test if file exists 1192 OPEN IN$ FOR INPUT AS #1: CLOSE #1 1193 'and open it 1200 OPEN IN$ AS #1 LEN=1: FIELD #1, 1 AS BYTE$ 1210 ' 1220 'open output file 1230 LOCATE 3,1: GOSUB 4000: PRINT "Name for DATA file? ["; C$; ".dat] "; 1240 INPUT "", D$ 1250 'default to input name with extension .dat 1260 IF D$ = "" THEN D$ = C$ + ".dat" 1270 OPEN D$ FOR OUTPUT AS #2 1280 ' 1290 'get starting line number 1291 GOSUB 4000 1300 LOCATE 5,1: INPUT "Starting line number? [1000] ", L$ 1310 'scan for non-numeric digits, bitch if so 1320 FOR I = 1 TO LEN(L$) 1330 N$ = MID$(L$,I,1) 1340 IF INSTR("0123456789", N$) = 0 THEN LOCATE 5,1: BEEP: PRINT SPACE$(79): GOTO 1300 1350 NEXT I 1360 IF L$ = "" THEN LINENUM = 1000 ELSE LINENUM = VAL(L$) 1370 IF LINENUM <= 0 THEN LOCATE 5,1: BEEP: PRINT SPACE$(79): GOTO 1300 1380 ' 1390 'set display width and number of data entrys per line 1400 'users with 40 column displays, edit appropriately 1410 WIDTH.OF.DISPLAY = 80: ENTRYS.PER.LINE = 10 1430 ' 1440 'whew! now do it. 1444 CLS: GOSUB 4000: GOSUB 4000 1445 LOCATE 10, (WIDTH.OF.DISPLAY-7)/2: COLOR 16,7: PRINT"*WORKING*": COLOR 7,0 1450 ENTRYS.USED = 0: NUMBYTES = 0 1455 GET 1 1460 WHILE NOT EOF(1) 1490 'and send it to output file 1500 GOSUB 1550 1506 GET 1 1510 WEND 1520 ' 1530 'Clean up 1535 'if any data not written yet, lop off trailing comma and write it. 1540 IF ENTRYS.USED > 0 THEN PRINT#2, LEFT$(BUFFER$,LEN(BUFFER$)-1) 1543 FOR I = 1 TO 3: SOUND 500*I,3: NEXT: SOUND 550,5: SOUND 800,3 1544 CLS 1545 SYSTEM 1550 '****************************************** 1560 '* SUBROUTINE OUTPUT * 1570 '* * 1580 '* Builds up DATA statements in buffer. * 1590 '* Dumps buffer to output file when full. * 1600 '****************************************** 1610 ' 1620 'set up if necessary 1630 IF ENTRYS.USED = 0 THEN BUFFER$ = STR$(LINENUM) + " DATA" 1640 ' 1650 'add new value to buffer 1660 H$ = RIGHT$("0" + HEX$(ASC(BYTE$)),2) 1670 BUFFER$ = BUFFER$ + " &H" + H$ 1680 ' 1690 'Is the line full yet? Dump if so. 1700 ENTRYS.USED = ENTRYS.USED + 1 1710 IF ENTRYS.USED < ENTRYS.PER.LINE THEN BUFFER$ = BUFFER$ + ",": GOTO 1750 1720 PRINT#2, BUFFER$ 1730 ENTRYS.USED = 0 1740 LINENUM = LINENUM + 10 1750 RETURN 1760 ON ERROR GOTO 0 4000 'one liner to make noise #1 4010 FOR I = 1 TO 3: SOUND 1000*I,1: NEXT I: RETURN 5000 '********************** 5010 '* SUBROUTINE TITLE * 5020 '* Prints title page. * 5030 '********************** 5040 ' 5050 SCREEN 0,0,0: WIDTH 80: KEY OFF: CLS: LOCATE 6,1,0 5060 PRINT TAB(18) "?";STRING$(45,"?");"?" 5070 PRINT TAB(18) "? ?" 5080 PRINT TAB(18) "? COM2DATA version 1.0 ?" 5090 PRINT TAB(18) "? ?" 5091 PRINT TAB(18) "? (1983) by David Whitman ?" 5094 PRINT TAB(18) "? ?" 5097 PRINT TAB(18) "? Machine language file conversion utility. ?" 5160 PRINT TAB(18) "? ?" 5170 PRINT TAB(18) "?";STRING$(45,"?");"?" 5180 LOCATE 23,27: PRINT "Hit any key to continue..." 5185 GOSUB 4000 'noise #1 5190 I$ = INKEY$: IF I$ = "" THEN 5190 5200 CLS 5210 RETURN 6000 '***************** 6010 '* Error handler * 6020 '***************** 6030 ' 6040 IF ERR <> 53 THEN 6100 6050 COLOR 0,7: BEEP: LOCATE 2,1 6060 PRINT IN$; " not found. Press Esc to exit, anything else to continue." 6070 IN$ = INKEY$: IF IN$ = "" THEN 6070 6075 IF IN$ = CHR$(27) THEN SYSTEM 6080 LOCATE ,1: COLOR 7,0: PRINT SPACE$(79) 6085 LOCATE 1,1: PRINT SPACE$(79): LOCATE ,1: RESUME 1160 6090 ' 6100 IF ERR <> 6 OR ERL <> 1360 THEN 6200 6110 BEEP: LOCATE 5,1: PRINT SPACE$(79): LOCATE ,1: RESUME 1300 6200 ON ERROR GOTO 0 F ERR <> 6 OR ERL <> 1360 T