DECLARE SUB PRINTDIGIT (VALUE%) DECLARE SUB PRINTBYTE (BYTE%) DECLARE SUB PRINTWORD (WORD&) DECLARE SUB PRINTDWORD (DWORD&) CLS INPUT "Enter name of file to view: ", FILENAME$ OPEN FILENAME$ FOR BINARY AS #1 START& = 0 DO LOCATE 1, 1 PRINT " "; FOR COLUMN% = 0 TO 15 PRINTBYTE (COLUMN%) PRINT " "; NEXT COLUMN% FOR COLUMN% = 0 TO 15 PRINTDIGIT (COLUMN%) NEXT COLUMN% PRINT PRINT FOR ROW% = 0 TO 16 PRINTDWORD (START& + ROW% * 16) PRINT ": "; FOR COLUMN% = 0 TO 15 IF START& + ROW% * 16 + COLUMN% < LOF(1) THEN GET #1, 1 + START& + ROW% * 16 + COLUMN%, WORD% PRINTBYTE (WORD% AND &HFF) PRINT " "; ELSE PRINT " "; END IF NEXT COLUMN% FOR COLUMN% = 0 TO 15 IF START& + ROW% * 16 + COLUMN% < LOF(1) THEN GET #1, 1 + START& + ROW% * 16 + COLUMN%, WORD% BYTE% = WORD% AND &HFF IF BYTE% < &H20 THEN BYTE% = &H40 + BYTE% COLOR 2 ELSE COLOR 7 END IF PRINT CHR$(BYTE%); ELSE COLOR 7 PRINT " "; END IF NEXT COLUMN% COLOR 7 PRINT NEXT ROW% PRINT PRINT "Use Up Arrow, Down Arrow, Page Up, and Page Down keys or menu letters:" PRINT " "; COLOR 15 PRINT "G"; COLOR 7 PRINT "o to "; COLOR 15 PRINT "O"; COLOR 7 PRINT "pen file "; COLOR 15 PRINT "Q"; COLOR 7 PRINT "uit" PRINT DO KEY$ = INKEY$ LOOP WHILE KEY$ = "" SELECT CASE KEY$ CASE CHR$(0) + CHR$(72) IF START& >= 16 THEN START& = START& - 16 ELSE START& = 0 END IF CASE CHR$(0) + CHR$(80) IF START& <= 2147483360 THEN START& = START& + 16 ELSE START& = 2147483376 END IF CASE CHR$(0) + CHR$(73) IF START& >= 256 THEN START& = START& - 256 ELSE START& = 0 END IF CASE CHR$(0) + CHR$(81) IF START& <= 2147483120 THEN START& = START& + 256 ELSE START& = 2147483376 END IF CASE "G", "g" INPUT "Enter byte number (offset) to display from: ", START& LOCATE 24, 1 FOR COLUMN% = 1 TO 80 PRINT " " NEXT COLUMN% CASE "O", "o" CLOSE #1 INPUT "Enter name of file to view: ", FILENAME$ LOCATE 24, 1 FOR COLUMN% = 1 TO 80 PRINT " " NEXT COLUMN% OPEN FILENAME$ FOR BINARY AS #1 START& = 0 CASE "Q", "q" CLS SYSTEM END SELECT LOOP WHILE -1 SUB PRINTBYTE (BYTE%) PRINTDIGIT (BYTE% \ 16) PRINTDIGIT (BYTE% MOD 16) END SUB SUB PRINTDIGIT (VALUE%) IF VALUE% < 10 THEN PRINT CHR$(&H30 + VALUE%); ELSE PRINT CHR$(&H41 + (VALUE% - 10)); END IF END SUB SUB PRINTDWORD (DWORD&) PRINTWORD (DWORD& \ 65536) PRINTWORD (DWORD& MOD 65536) END SUB SUB PRINTWORD (WORD&) PRINTBYTE (WORD& \ 256) PRINTBYTE (WORD& MOD 256) END SUB