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