'----------------------------------------' 'WendelSoft Binary File Editor 2001 v1.0 ' '----------------------------------------' 'Copyright (C) WendelSoft 1997-2001 ' '----------------------------------------' 'Fun‡„o: ' 'Visualizar e editar arquivos em formato ' 'bin rio. ' '----------------------------------------' '16.02.2001 - 17.02.2001 ' '----------------------------------------' 'Programador: Wendel Scardua ' '----------------------------------------' DECLARE SUB NewPrint (l%, c%, expr$, cor%) DECLARE SUB Box (l1%, c1%, l2%, c2%, char$, f%) DECLARE SUB GetTxt (t$) DECLARE SUB GetNum (n&) DECLARE SUB PressEnterFor (n$) DEFINT A-Z VIEW PRINT Block$ = SPACE$(1024) DO COLOR 0, 7 Box 1, 1, 25, 80, "", 1 LOCATE 1, 2: PRINT "[ WendelSoft Binary File Editor 2001 ]"; 1 LOCATE 3, 2: PRINT "Arquivo :"; GetTxt arq$ IF arq$ = "" THEN EXIT DO LOCATE 3, 2: PRINT SPACE$(78); OPEN arq$ FOR BINARY AS #1 size& = LOF(1) IF size& = 0 THEN CLOSE #1: KILL arq$: GOTO 1 bl1& = 0: bl2& = 0: bflag = 0 lin = 1: col = 1: page = 0 alin = 1: acol = 1 ReLoad = -1 BlDisp = -1 FOR i = 0 TO 9: plist&(i) = 0: NEXT COLOR 15, 3 LOCATE 25, 1: PRINT SPACE$(80); LOCATE 25, 1: PRINT ""; COLOR 0, 7 Box 2, 2, 19, 67, "", 1 Box 20, 2, 24, 67, "", 1 Box 2, 68, 5, 79, "", 1 LOCATE 2, 3: PRINT "[ "; arq$; " ]"; LOCATE 2, 69: PRINT "[ Byte ]"; Box 6, 68, 9, 79, "", 1 LOCATE 6, 69: PRINT "[ Pos ]"; Box 10, 68, 13, 79, "", 1 LOCATE 10, 69: PRINT "[ Tam ]"; Box 14, 68, 17, 79, "", 1 LOCATE 14, 69: PRINT "[ Ini-B ]"; Box 18, 68, 21, 79, "", 1 LOCATE 18, 69: PRINT "[ Fim-B ]"; LOCATE 11, 69: PRINT USING "D:########"; size&; LOCATE 12, 69: PRINT "H:"; RIGHT$("00000000" + HEX$(size&), 8); esc = 0 DO IF BlDisp THEN BlDisp = 0 LOCATE 15, 69: PRINT USING "D:########"; bl1&; LOCATE 16, 69: PRINT "H:"; RIGHT$("00000000" + HEX$(bl1&), 8); LOCATE 19, 69: PRINT USING "D:########"; bl2&; LOCATE 20, 69: PRINT "H:"; RIGHT$("00000000" + HEX$(bl2&), 8); END IF IF ReLoad OR page <> apage THEN GET #1, page * 1024& + 1, Block$ BlockSize& = LOF(1) - page * 1024& IF BlockSize& > 1024 THEN BlockSize& = 1024 Backup$ = Block$ FOR i = 0 TO 15 NewPrint 3 + i, 3, MID$(Block$, 64 * i + 1, 64), 112 NEXT curs = -1 ReLoad = 0 apage = page END IF aposit = (alin - 1) * 64 + acol posit = (lin - 1) * 64 + col IF curs OR lin <> alin OR col <> acol THEN b$ = MID$(Block$, aposit, 1) NewPrint 2 + alin, 2 + acol, b$, 112 b$ = MID$(Block$, posit, 1) NewPrint 2 + lin, 2 + col, b$, 31 COLOR 0, 7 n = ASC(MID$(Block$, posit, 1)) LOCATE 3, 69: PRINT USING "Dec:###"; n; LOCATE 4, 69: PRINT "Hex:"; RIGHT$("00" + HEX$(n), 2); bpos& = page * 1024& + (lin - 1) * 64 + col LOCATE 7, 69: PRINT USING "D:########"; bpos&; LOCATE 8, 69: PRINT "H:"; RIGHT$("00000000" + HEX$(bpos&), 8); curs = 0: alin = lin: acol = col END IF p& = 0 k$ = INKEY$ SELECT CASE k$ CASE CHR$(0) + "H" lin = lin - 1: IF lin = 0 THEN lin = 16 CASE CHR$(0) + "P" lin = lin + 1: IF lin = 17 THEN lin = 1 CASE CHR$(0) + "K" col = col - 1: IF col = 0 THEN col = 64 CASE CHR$(0) + "M" col = col + 1: IF col = 65 THEN col = 1 CASE CHR$(0) + "I" page = page - 1 IF page = -1 THEN page = 0 CASE CHR$(0) + "Q" page = page + 1 CASE CHR$(0) + "<" LOCATE 22, 3: PRINT "Posi‡„o :"; GetNum p& Box 20, 2, 24, 67, "", 1 CASE CHR$(0) + "=", CHR$(0) + ">" curs = -1 IF k$ = CHR$(0) + ">" THEN LOCATE 22, 3: PRINT "Expressao(Hex) :"; GetTxt findhex$ findexp$ = "" FOR i = 1 TO LEN(findhex$) STEP 2 findexp$ = findexp$ + CHR$(VAL("&H" + MID$(findhex$, i, 2))) NEXT ELSE LOCATE 22, 3: PRINT "Texto :"; GetTxt findtxt$ findexp$ = findtxt$ END IF siz = LEN(findexp$) IF siz > 0 THEN posit& = page * 1024& + (lin - 1) * 64 + col + 1 bfind$ = SPACE$(8192) p& = 0 FOR i& = posit& TO size& - siz + 1 STEP 8192 - siz LOCATE 7, 69: PRINT USING "D:########"; i&; LOCATE 8, 69: PRINT "H:"; RIGHT$("00000000" + HEX$(i&), 8); GET #1, i&, bfind$ p& = INSTR(bfind$, findexp$) IF p& > 0 THEN p& = i& + p& - 1: EXIT FOR NEXT IF p& = 0 THEN FOR i& = 1 TO posit& - siz + 1 STEP 8192 - siz LOCATE 7, 69: PRINT USING "D:########"; i&; LOCATE 8, 69: PRINT "H:"; RIGHT$("00000000" + HEX$(i&), 8); GET #1, i&, bfind$ p& = INSTR(bfind$, findexp$) IF p& > 0 THEN p& = i& + p& - 1: EXIT FOR NEXT END IF bfind$ = "" END IF Box 20, 2, 24, 67, "", 1 CASE CHR$(0) + "?" bflag = 1 - bflag bp& = page * 1024& + (lin - 1) * 64 + col IF bflag THEN bl1& = bp& ELSE bl2& = bp& BlDisp = -1 CASE CHR$(0) + "@" LOCATE 22, 3: PRINT "Gravar bloco em :"; GetTxt blarq$ LOCATE 22, 3: PRINT SPACE$(60); LOCATE 22, 3: PRINT "Pedir troca de discos(S/N) ? "; DO: op$ = UCASE$(INPUT$(1)): LOOP UNTIL op$ = "S" OR op$ = "N" PRINT op$; cond = op$ = "S" BEEP LOCATE 22, 3: PRINT SPACE$(60); IF cond THEN PressEnterFor "Destino" OPEN blarq$ FOR BINARY AS #2 SEEK #2, LOF(2) + 1 FOR i& = bl1& TO bl2& STEP 8192 IF bl2& - i& + 1 >= 8192 THEN s = 8192 ELSE s = bl2& - i& + 1 btmp$ = SPACE$(s) IF cond THEN PressEnterFor "Origem" GET #1, i&, btmp$ IF cond THEN PressEnterFor "Destino" PUT #2, SEEK(2), btmp$ NEXT btmp$ = "" CLOSE #2 Box 20, 2, 24, 67, "", 1 CASE CHR$(0) + "A" SCREEN , , 1, 1 SHELL "Command /kPrompt Tecle EXIT para retornar ao Binary File Editor 2001$_$p$_Comando:" SCREEN , , 0, 0 curs = -1 CASE CHR$(27): esc = -1 CASE CHR$(16): k$ = INPUT$(1): GOTO 2 CASE CHR$(17) k = VAL(INPUT$(1)) p& = plist&(k) CASE CHR$(11) k = VAL(INPUT$(1)) plist&(k) = page * 1024& + (lin - 1) * 64 + col CASE CHR$(32) TO CHR$(255) 2 IF LEN(k$) = 1 THEN MID$(Block$, posit, 1) = k$ curs = -1 END IF END SELECT IF p& > 0 THEN p& = p& - 1 page = p& \ 1024 lin = (p& MOD 1024) \ 64 + 1 col = (p& MOD 1024) MOD 64 + 1 END IF IF page * 1024& + (lin - 1) * 64 + col > size& THEN lin = 1: col = 1 IF page * 1024& + (lin - 1) * 64 + col > size& THEN page = apage END IF IF page <> apage OR esc THEN IF Block$ <> Backup$ THEN LOCATE 22, 3: PRINT "Gravar altera‡”es(S/N) ? "; DO: k$ = UCASE$(INPUT$(1)): LOOP UNTIL k$ = "S" OR k$ = "N" PRINT k$; BEEP IF k$ = "S" THEN bb$ = LEFT$(Block$, BlockSize&): PUT #1, apage * 1024& + 1, bb$ Box 20, 2, 24, 67, "", 1 END IF END IF LOOP UNTIL esc CLOSE #1 LOOP COLOR 7, 0 CLS SYSTEM SUB Box (l1, c1, l2, c2, char$, f) ff = -(f <> 0) IF char$ = "" THEN char$ = "ÚÄ¿³ÙÄÀ³" + SPACE$(ff) char$ = LEFT$(char$ + SPACE$(8 + ff), 8 + ff) ln = c2 - c1 - 1 LOCATE l1, c1: PRINT MID$(char$, 1, 1); STRING$(ln, MID$(char$, 2, 1)); MID$(char$, 3, 1); LOCATE l2, c1: PRINT MID$(char$, 7, 1); STRING$(ln, MID$(char$, 6, 1)); MID$(char$, 5, 1); IF f THEN FOR l = l1 + 1 TO l2 - 1 LOCATE l, c1: PRINT MID$(char$, 8, 1); STRING$(ln, MID$(char$, 9, 1)); MID$(char$, 4, 1); NEXT ELSE FOR l = l1 + 1 TO l2 - 1 LOCATE l, c1: PRINT MID$(char$, 8, 1); LOCATE l, c2: PRINT MID$(char$, 4, 1); NEXT END IF END SUB SUB GetNum (n&) IF n& = 0 THEN b$ = "" ELSE b$ = LTRIM$(STR$(n&)) l = CSRLIN c = POS(0) DO LOCATE l, c: PRINT b$; " "; k$ = INPUT$(1) SELECT CASE k$ CASE "0" TO "9": b$ = b$ + k$: n& = VAL(b$) CASE CHR$(27): n& = 0: EXIT SUB CASE CHR$(13): EXIT SUB CASE CHR$(8): IF b$ <> "" THEN b$ = LEFT$(b$, LEN(b$) - 1): n& = VAL(b$) END SELECT LOOP END SUB SUB GetTxt (t$) l = CSRLIN c = POS(0) DO LOCATE l, c: PRINT t$; " "; k$ = INPUT$(1) SELECT CASE k$ CASE CHR$(27): t$ = "": EXIT SUB CASE CHR$(13): EXIT SUB CASE CHR$(8): IF t$ <> "" THEN t$ = LEFT$(t$, LEN(t$) - 1) CASE ELSE: t$ = t$ + k$ END SELECT LOOP END SUB SUB NewPrint (l, c, expr$, cor) DEF SEG = 45482 idx& = 160 * (l - 1) + 2 * (c - 1) + 25952 IF cor = 0 THEN ncor = 7 ELSE ncor = cor FOR i = 1 TO LEN(expr$) POKE idx&, ASC(MID$(expr$, i, 1)) POKE idx& + 1, ncor idx& = idx& + 2 NEXT END SUB SUB PressEnterFor (n$) LOCATE 22, 3: PRINT "Insira disco de "; n$; " e tecle"; DO: LOOP UNTIL INKEY$ = CHR$(13) END SUB