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