Files
2026-09-28 19:57:12 -04:00

463 lines
18 KiB
QBasic
Executable File

REM **** FILED.BAS file editor ****
REM **** By Danny Keck ****
REM **** version 1.51 ****
REM **** Last revised 10/22/97 ****
DIM aa2(64) AS STRING * 1
DIM b(64), c$(64)
DIM theseg, theaddr, thisis, sa, ae AS LONG
DIM a(8) AS STRING * 1
DIM aa AS STRING * 1
ON ERROR GOTO 3
erp = 1
GOTO 2
' **** Errorhandling *******************************************************
3 REM errorhandling
IF ERR = 71 THEN LOCATE 22, 1: PRINT " ": LOCATE 23, 1: PRINT "Drive not ready. ": BLEH = 1: IF nwdr = 1 THEN RESUME 81 ELSE LOCATE 5, 1: PRINT "Drive not ready. ": RESUME 27 ELSE og = 0
IF ERR = 76 THEN LOCATE 22, 1: PRINT " ": LOCATE 23, 1: PRINT "This directory does not exist.": BLEH = 1: IF nwdr = 1 THEN RESUME 81 ELSE LOCATE 5, 1: PRINT "This directory does not exist.": RESUME 27 ELSE og = 0
IF ERR = 68 THEN LOCATE 22, 1: PRINT " ": LOCATE 23, 1: PRINT "The drive does not exist. ": BLEH = 1: IF nwdr = 1 THEN RESUME 81 ELSE LOCATE 5, 1: PRINT "The drive does not exist. ": RESUME 27 ELSE og = 0
IF ERR = 75 THEN LOCATE 3, 50: PRINT "The filename is invalid. ": RESUME 27
IF ERR = 64 THEN LOCATE 3, 50: PRINT "The filename is invalid. ": RESUME 27
IF ERR = 52 THEN RESUME 27
IF ERR = 57 THEN LOCATE 23, 1: PRINT "The directory will not access. ": BLEH = 1: RESUME 81
IF ERR = 6 THEN PRINT "Overflow": END
PRINT : PRINT "Unexpected error:"; ERR; " ; dumping you out": END
END
' **** Quit or Load File ***************************************************
28 LOCATE 23, 1: PRINT "Are you sure? (Y/N)"
DO: ch2$ = INKEY$: LOOP UNTIL ch2$ = "Y" OR ch2$ = "y" OR ch2$ = "n" OR ch2$ = "N"
IF ch2$ = "n" OR ch2$ = "N" THEN LOCATE 23, 1: PRINT " ": LOCATE 23, 1: GOTO 8
IF ch$ = "q" OR ch$ = "Q" THEN CLOSE #1: CLS : : END
CLOSE #1
GOTO 2
' **** Load file ***********************************************************
2 CLS
27 LOCATE 20, 1: PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
'LOCATE 21, 1: PRINT "Current directory: "; : SHELL ("CD")
LOCATE 22, 1: PRINT ". to change the directory / Edit the first 1MB of memory"
LOCATE 23, 1: PRINT ".. to view the directory // Edit the I/O ports"
LOCATE 1, 1: PRINT "FilEd File Editor BASIC 6/15/97 Danny Keck ae908@seorf.ohiou.edu"
PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
PRINT " "
LOCATE 3, 1: INPUT "File to edit"; fln$
memed = 0: ported = 0
IF fln$ = "." THEN GOTO 80
IF fln$ = ".." THEN GOTO 83
IF fln$ = "/" THEN
LOCATE 3, 15: PRINT "Memory"
memed = 1: erp = 1
LOCATE 5, 40: PRINT "Length of file: 1048576 bytes": GOTO 5
END IF
IF fln$ = "//" THEN
LOCATE 3, 15: PRINT "I/O ports"
ported = 1: erp = 1
LOCATE 5, 40: PRINT "Length of file: 65535 bytes": GOTO 5
END IF
erp = 1
OPEN fln$ FOR BINARY AS #1 LEN = 1
IF LOF(1) = 0 THEN GOTO 34
LOCATE 5, 40: PRINT "Length of file:"; LOF(1); "bytes"
GOTO 5
34 LOCATE 5, 40: PRINT "File does not exist!! Create(Y/N)?"
a$ = INKEY$: IF a$ = "y" OR a$ = "Y" THEN a$ = "": GOTO 5
IF a$ = "n" OR a$ = "N" THEN a$ = "": CLOSE 1: KILL fln$: GOTO 2
GOTO 34
' **** View Directory ******************************************************
83 CLS
PRINT "Directory of "; : SHELL ("cd")
PRINT "Press control-C to cancel"
DO: ch$ = INKEY$: LOOP UNTIL ch$ <> ""
SHELL ("dir/p")
PRINT "Press any key to return"
DO: ch$ = INKEY$: LOOP UNTIL ch$ <> ""
GOTO 2
' **** New Directory *******************************************************
80 LOCATE 23, 1: PRINT " "
81 nwdr = 1
erp = 2
LOCATE 22, 1: PRINT " "
IF BLEH = 1 THEN BLEH = 0 ELSE LOCATE 23, 1: PRINT " "
LOCATE 22, 1: INPUT "Type in your new directory"; nd$
CHDIR nd$
nwdr = 0
GOTO 2
' **** Starting Address ****************************************************
29 LOCATE 23, 1: INPUT "New address "; sa
GOTO 10
5 LOCATE 5, 1: INPUT "Starting address "; sa
10 GOSUB 53: GOTO 52
53 IF memed = 0 AND ported = 0 THEN IF sa < 1 THEN sa = 1
IF ported = 1 OR memed = 1 THEN IF sa < 0 THEN sa = 0
IF memed = 1 THEN
IF d = 0 AND sa > 1048448 THEN sa = 1048448
IF d = -1 AND sa > 1047552 THEN sa = 1047552
END IF
IF ported = 1 THEN
IF d = 0 AND sa > 65407 THEN sa = 65407
IF d = -1 AND sa > 64511 THEN sa = 64511
END IF
RETURN
' **** Display *************************************************************
31 IF cupd = 0 THEN CLS
LOCATE 20, 1: PRINT " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
LOCATE 21, 1: PRINT " B back F forward N new addr S search E edit T type string"
IF memed = 0 AND ported = 0 THEN LOCATE 22, 1: PRINT " Q quit C compare L new file D dos M mode H ";
IF memed = 1 OR ported = 1 THEN LOCATE 22, 1: PRINT " Q quit C constnt L new file D dos M mode H ";
IF hmode = 0 THEN PRINT "hex" ELSE PRINT "decimal"
LOCATE 1, 2: PRINT fln$
IF memed = 0 AND ported = 0 THEN LOCATE 1, 40: PRINT "Length of file:"; LOF(1); "bytes"
IF memed = 1 THEN LOCATE 1, 2: PRINT "MemEd": LOCATE 1, 40: PRINT "Length of file: 1048576 bytes"
IF ported = 1 THEN LOCATE 1, 2: PRINT "PortEd": LOCATE 1, 40: PRINT "Length of file: 65536 bytes"
LOCATE 1, 74: PRINT "FilEd"
LOCATE 2, 1: IF d = 0 THEN PRINT sa; "-"; sa + 128 ELSE PRINT sa; "-"; sa + 1024
IF d = 0 THEN d1 = 8: d2 = 70 ELSE d1 = 64: d2 = 12
LOCATE 3, 1: PRINT " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
IF memed = 0 AND ported = 0 THEN FOR ia = 1 TO 16
I = sa + (ia - 1)
FOR j = 1 TO d1
IF cupd = -1 THEN liu$ = INKEY$: IF liu$ <> "" THEN ch$ = liu$
GET #1, I - ia + ((ia - 1) * d1) + 1 + (j - 1), aa2(j)
b(j) = VAL("&h" + (RIGHT$("0" + HEX$(ASC(aa2(j))), 2))): c$(j) = HEX$(b(j))
IF LEN(c$(j)) = 1 THEN c$(j) = "0" + c$(j)
NEXT j
LOCATE ia + 3, 1: PRINT I - ia + ((ia - 1) * d1) + 1
FOR j = 1 TO d1
IF cupd = -1 THEN liu$ = INKEY$: IF liu$ <> "" THEN ch$ = liu$
IF d = 0 THEN LOCATE ia + 3, (j * 7) + 6: IF hmode = 0 THEN PRINT USING "###"; b(j) ELSE PRINT " "; c$(j)
IF aa2(j) = CHR$(12) OR aa2(j) = CHR$(7) THEN aa2(j) = CHR$(0)
LOCATE ia + 3, d2 + j: PRINT aa2(j)
NEXT j
NEXT ia
RETURN
ELSE
FOR ia = 1 TO 16
I = sa + (ia - 1)
FOR j = 1 TO d1
IF cupd = -1 THEN liu$ = INKEY$: IF liu$ <> "" THEN ch$ = liu$
thisis = I - ia + ((ia - 1) * d1) + 1 + (j - 1)
theseg = INT(thisis / 16)
DEF SEG = theseg
theaddr = thisis - (theseg * 16)
IF memed = 1 THEN b(j) = PEEK(theaddr)
IF ported = 1 THEN IF thisis < 65536 THEN b(j) = INP(thisis) ELSE
aa2(j) = CHR$(b(j))
REM b(j) = VAL("&h" + (RIGHT$("0" + HEX$(ASC(aa2(j))), 2)))
c$(j) = HEX$(b(j))
IF LEN(c$(j)) = 1 THEN c$(j) = "0" + c$(j)
NEXT j
LOCATE ia + 3, 1: PRINT I - ia + ((ia - 1) * d1) + 1
FOR j = 1 TO d1
IF cupd = -1 THEN liu$ = INKEY$: IF liu$ <> "" THEN ch$ = liu$
IF d = 0 THEN LOCATE ia + 3, (j * 7) + 6: IF hmode = 0 THEN PRINT USING "###"; b(j) ELSE PRINT " "; c$(j)
IF aa2(j) = CHR$(12) OR aa2(j) = CHR$(7) THEN aa2(j) = CHR$(0)
LOCATE ia + 3, d2 + j: PRINT aa2(j)
NEXT j
NEXT ia
RETURN
' **** Choose Option *******************************************************
52 GOSUB 31
LOCATE 24, 1
8
IF cupd = 0 THEN DO
ch$ = INKEY$: LOOP UNTIL ch$ <> ""
IF ch$ = "f" OR ch$ = "F" THEN IF d = 0 THEN sa = sa + 128: GOTO 10 ELSE sa = sa + 1024: GOSUB 53: GOTO 10
IF ch$ = "q" OR ch$ = "Q" THEN GOTO 28
IF ch$ = "n" OR ch$ = "N" THEN GOTO 29
IF ch$ = "e" OR ch$ = "E" THEN GOTO 30
IF ch$ = "h" OR ch$ = "H" THEN IF hmode = 0 THEN hmode = 1: GOTO 10 ELSE hmode = 0: GOTO 10
IF ch$ = "s" OR ch$ = "S" THEN GOSUB 32: GOTO 10
IF ch$ = "t" OR ch$ = "T" THEN GOTO 60
IF ch$ = "c" OR ch$ = "C" THEN IF memed = 0 AND ported = 0 THEN GOTO 70 ELSE cupd = NOT cupd
IF ch$ = "l" OR ch$ = "L" THEN GOTO 28
IF ch$ = "d" OR ch$ = "D" THEN PRINT "Type EXIT to return to FilEd.": SHELL: GOTO 10
IF ch$ = "m" OR ch$ = "M" THEN d = NOT d: GOTO 10
IF ch$ = "b" OR ch$ = "B" THEN
IF d = 0 THEN
sa = sa - 128: GOSUB 53: GOTO 10
ELSE sa = sa - 1024: GOSUB 53: GOTO 10
END IF
END IF
IF cupd = -1 THEN ch$ = "": GOTO 10
GOTO 8
' **** Editing *************************************************************
30
LOCATE 21, 1: PRINT " "
LOCATE 22, 1: PRINT " "
LOCATE 22, 1: INPUT "Address to edit"; aed$
ae = VAL(aed$)
IF ae <> INT(ae) OR ae < 0 THEN GOTO 30
IF memed = 1 AND ae > 1048576 THEN GOTO 30
IF ported = 1 AND ae > 65535 THEN GOTO 30
sa = ae - 8: IF sa < 1 THEN sa = 1
GOSUB 53
GOSUB 31
40 LOCATE 21, 1: PRINT " "
LOCATE 22, 1: PRINT ae; " "
LOCATE 22, 15: INPUT "change to"; nae$
IF nae$ = "" THEN GOTO 10
nae = VAL(nae$)
IF nae < 0 OR nae > 255 OR nae <> INT(nae) THEN 40
a(1) = CHR$(nae)
IF memed = 0 AND ported = 0 AND ae <> 0 THEN PUT #1, ae, a(1)
thisis = ae
theseg = INT(thisis / 16)
DEF SEG = theseg
theaddr = thisis - (theseg * 16)
IF memed = 1 THEN POKE theaddr, nae
IF ported = 1 THEN OUT thisis, nae
GOTO 10
' **** Type String Editing *************************************************
60
LOCATE 21, 1: PRINT " "
LOCATE 22, 1: PRINT " "
LOCATE 22, 1: INPUT "First address of string to edit"; aed$
ae = VAL(aed$)
IF ae <> INT(ae) OR ae < 0 THEN GOTO 60
IF memed = 1 AND ae > 1048576 THEN GOTO 60
IF ported = 1 AND ae > 65535 THEN GOTO 60
sa = ae - 8: IF sa < 1 THEN sa = 1
GOSUB 53
GOSUB 31
61 LOCATE 22, 1: PRINT ae; " "
LOCATE 21, 1: PRINT " "
LOCATE 22, 15: INPUT "change to"; nae$
IF nae$ = "" THEN GOTO 10
FOR I = 1 TO LEN(nae$)
a(1) = CHR$(ASC(MID$(nae$, I, 1)))
IF memed = 0 AND ported = 0 AND ae <> 0 THEN PUT #1, ae + (I - 1), a(1)
thisis = ae + (I - 1)
theseg = INT(thisis / 16)
DEF SEG = theseg
theaddr = thisis - theseg * 16
IF memed = 1 THEN POKE theaddr, ASC(a(1))
IF ported = 1 THEN OUT thisis, ASC(a(1))
NEXT I
GOTO 10
' **** Comparisons *********************************************************
70
LOCATE 21, 1: PRINT " "
LOCATE 22, 1: PRINT " "
LOCATE 21, 1: PRINT fln$; " "
LOCATE 22, 1: INPUT " Name of file to compare with"; fl2$
IF fl2$ = "" THEN 10
OPEN fl2$ FOR BINARY AS #2 LEN = 1
CLS
fl1 = LOF(1): fl2 = LOF(2)
IF fl1 > fl2 THEN fle = fl1 ELSE fle = fl2
PRINT "Look for:": PRINT
PRINT "1) Any difference in values"
PRINT "2) A change from one specific value to another"
PRINT "3) A specific amount of change"
PRINT "4) Return to main menu"
DO
whone$ = INKEY$
LOOP UNTIL whone$ = "1" OR whone$ = "2" OR whone$ = "3" OR whone$ = "4"
IF whone$ = "4" THEN PRINT "Comparison cancelled": GOTO 71
whone = VAL(whone$)
ON whone GOTO 100, 101, 102
GOTO 71
100 CLS
PRINT "In "; fln$; " and "; fl2$
PRINT " the following addresses hold different values:"
PRINT
FOR I = 1 TO fle
a$ = INKEY$: IF a$ <> "" THEN PRINT "Comparison cancelled": GOTO 71
GET #1, I, a(1)
GET #2, I, aa
IF a(1) <> aa THEN PRINT I,
NEXT I
PRINT : PRINT "Comparison complete": GOTO 71
101 PRINT
PRINT fln$; : INPUT " What value in this file"; v1$
v1 = VAL(v1$)
PRINT fl2$; : INPUT " What value in this file"; v2$
v2 = VAL(v2$)
CLS
PRINT "In "; fln$; " and "; fl2$
PRINT " the following addresses have a change from"; v1; " to "; v2; ":"
PRINT
FOR I = 1 TO fle
a$ = INKEY$: IF a$ <> "" THEN PRINT "Comparison cancelled": GOTO 71
GET #1, I, a(1)
GET #2, I, aa
b = VAL("&h" + (RIGHT$("0" + HEX$(ASC(a(1))), 2)))
bb = VAL("&h" + (RIGHT$("0" + HEX$(ASC(aa)), 2)))
IF v1 = b AND v2 = bb THEN PRINT I,
NEXT I
PRINT : PRINT "Comparison complete": GOTO 71
102 PRINT
PRINT "From "; fln$; " to "; fl2$; " ,"
INPUT "how much change (positive or negative)"; v1$
v1 = VAL(v1$)
CLS
PRINT "From "; fln$; " to "; fl2$
PRINT " the following addresses have a change of"; v1
PRINT
FOR I = 1 TO fle
a$ = INKEY$: IF a$ <> "" THEN PRINT "Comparison cancelled": GOTO 71
GET #1, I, a(1)
GET #2, I, aa
b = VAL("&h" + (RIGHT$("0" + HEX$(ASC(a(1))), 2)))
bb = VAL("&h" + (RIGHT$("0" + HEX$(ASC(aa)), 2)))
IF b + v1 = bb THEN PRINT I,
NEXT I
PRINT : PRINT "Comparison complete": GOTO 71
71 CLOSE #2: a$ = INKEY$: IF a$ = "" THEN 71 ELSE GOTO 10
' **** Search **************************************************************
32
DIM aa3 AS STRING * 1
IF memed = 0 AND ported = 0 THEN fl# = LOF(1)
IF memed = 1 THEN fl# = 1048576
IF ported = 1 THEN fl# = 65535
fbch = fl# / 100: fch = fbch: fco = 1
49 LOCATE 21, 1: PRINT " "
LOCATE 22, 1: PRINT " "
LOCATE 22, 1: INPUT "Start at address:"; aed$
IF aed$ = "" THEN
ae = 1
ELSE
ae = VAL(aed$)
IF ae <> INT(ae) OR ae < 0 THEN GOTO 49
IF memed = 1 AND ae > 1048576 THEN GOTO 49
IF ported = 1 AND ae > 65535 THEN GOTO 49
END IF
62 LOCATE 22, 1: PRINT "Search for: (S)tring or (N)umber? Push (C) to cancel"
DO
se$ = INKEY$
LOOP UNTIL se$ = "s" OR se$ = "S" OR se$ = "n" OR se$ = "N" OR se$ = "c" OR se$ = "C"
IF se$ = "c" OR se$ = "C" THEN RETURN
IF se$ = "s" OR se$ = "S" THEN GOSUB 1000
IF se$ = "n" OR se$ = "N" THEN GOSUB 2000
GOTO 49
1000 REM string search
LOCATE 22, 1: PRINT " "
LOCATE 22, 1: INPUT "String to search for (in exact case)"; ses$
CLS
PRINT "Press a key to finish searching."
PRINT ses$; " at:"
sl = LEN(ses$)
I = ae
47 FOR j = 1 TO sl
a$ = INKEY$: IF a$ <> "" THEN PRINT "Search cancelled": GOTO 45
thisis = I
theseg = INT(thisis / 16)
DEF SEG = theseg
theaddr = thisis - (theseg * 16)
IF memed = 1 THEN dee = PEEK(theaddr): aa3 = CHR$(dee)
IF ported = 1 THEN aa3 = CHR$(INP(I))
IF memed = 0 AND ported = 0 THEN GET #1, I, aa3
b = VAL("&h" + (RIGHT$("0" + HEX$(ASC(aa3)), 2))): c$ = HEX$(b)
IF aa3 <> MID$(ses$, j, 1) THEN GOTO 48
IF j = 1 THEN ga = I
I = I + 1
NEXT j
PRINT ga,
48 '
'IF i = INT(fch) THEN
ci = (fl# / 100) * fco
IF I = INT(ci) THEN
fco = fco + 1
myrow = CSRLIN: mycol = POS(0)
LOCATE 2, 30: : PRINT (fco - 1); "% complete"
LOCATE myrow, mycol
fco = INT(fco)
'fch = fbch * fco
'fch = fch + fbch
END IF
I = I + 1: IF I <= fl# THEN 47
IF memed = 1 THEN 47
PRINT : PRINT "Search complete"
45 a$ = INKEY$: IF a$ = "" THEN 45 ELSE GOTO 10
GOTO 10
2000 REM number search
LOCATE 22, 1: PRINT " "
LOCATE 22, 1: INPUT "Value to search for"; ses$
ses = VAL(ses$): ns$ = HEX$(ses)
IF LEN(ns$) / 2 <> INT(LEN(ns$) / 2) THEN ns$ = "0" + ns$
ns = LEN(ns$)
CLS
PRINT "Press a key to finish searching."
PRINT ses; " at:"
I = ae
43 FOR j = 1 TO ns STEP 2
a$ = INKEY$: IF a$ <> "" THEN PRINT "Search cancelled": GOTO 42
thisis = I
theseg = INT(thisis / 16)
DEF SEG = theseg
theaddr = thisis - (theseg * 16)
IF memed = 1 THEN dee = PEEK(theaddr): aa3 = CHR$(dee)
IF ported = 1 THEN aa3 = CHR$(INP(I))
IF memed = 0 AND ported = 0 THEN GET #1, I, aa3
b = VAL("&h" + (RIGHT$("0" + HEX$(ASC(aa3)), 2))): c$ = HEX$(b): IF LEN(c$) = 1 THEN c$ = "0" + c$
IF c$ <> MID$(ns$, j, 2) THEN GOTO 44
IF j = 1 THEN ga = I
I = I + 1
NEXT j
PRINT ga,
44 '
ci = (fl / 100) * fco
IF I = INT(ci) THEN
fco = fco + 1
myrow = CSRLIN: mycol = POS(0)
LOCATE 2, 30: : PRINT (fco - 1); "% complete"
LOCATE myrow, mycol
fco = INT(fco)
'fch = fbch * fco
'fch = fch + fbch
END IF
I = I + 1: IF I <= fl# THEN 43
IF memed = 1 THEN GOTO 43
PRINT : PRINT "Search complete"
42 a$ = INKEY$: IF a$ = "" THEN 42 ELSE GOTO 10
GOTO 10
RETURN