home *** CD-ROM | disk | FTP | other *** search
- '***********************************************************************
- ' HexDump.rlz
- '
- ' Hex dump file browser
- '
- ' Copyright ⌐ 1991-1992 Computer Associates International, Inc.
- ' All rights reserved.
- '
- '***********************************************************************
-
- PROC CreateForm
- LOCAL n, m, h, k
-
- n = 14
- m = (96 - 6*n)/5
- h = 9
- k = m + n
- formHexdump = FormQUnique
- FormNew(formHexdump; "Hex Dump", _Title + _Minimize + _Close)
- FormControl(_Size; 0.5 pct, 5 pct, 99 pct, 90 pct)
- FormSetObject(25, _CaptionLeft, "File name:", 5 pct, 2 pct)
- FormSetObject(30, _CaptionLeft, "", 17 pct, 2 pct, 40 pct, _Default)
- FormSetObject(60, _CaptionLeft, "Length:", 5 pct, 12 pct, _Default, _Default)
- FormSetObject(70, _CaptionLeft, "", 14 pct, 12 pct, 20 pct, _Default)
- FormSetObject(80, _CaptionLeft, "Modify date:", 60 pct, 2 pct)
- FormSetObject(90, _CaptionLeft, "", 75 pct, 2 pct, 24 pct, _Default)
- FormSetObject(40, _CaptionLeft, "Offset:", 60 pct, 12 pct)
- FormSetObject(50, _EditText, "", 68 pct, 10.5 pct, 27 pct, _Default)
- FormSetObject(20, _Log, "dump", 0.25 pct, 21 pct, 99.5 pct, 63 pct)
- FormSetObject(100, _Button, "File...", 2 pct, 88 pct, n pct, _Default)
- FormSetObject(110, _Button, "Next", 2+k pct, 88 pct, n pct, _Default)
- FormSetObject(120, _Button, "Prev", 2+2*k pct, 88 pct, n pct,_Default)
- FormSetObject(130, _Button, "Goto offset", 2+3*k pct, 88 pct, n pct, _Default)
- FormSetObject(140, _Button, "Print", 2+4*k pct, 88 pct, n pct, _Default)
- FormSetObject(2, _Button, "Quit", 2+5*k pct, 88 pct, n pct, _Default)
-
- FOR n = 110 TO 140 STEP 10
- FormModifyObject(n, _Gray)
- NEXT n
-
- formPrint = FormQUnique
- FormNew(formPrint; "Hex Dump Print", _Title)
- FormControl(_Size; _Center, _Center, 35 pct, 40 pct)
- FormSetObject(10, _CaptionLeft, "Starting offset:", 5 pct, 10 pct)
- FormSetObject(20, _TextBox, "", 60 pct, 10 pct, 30 pct, _Default)
- FormSetObject(30, _CaptionLeft, "Ending offset:", 5 pct, 30 pct)
- FormSetObject(40, _EditText, "", 60 pct, 30 pct, 30 pct, _Default)
- FormSetObject(1, _DefButton, "Print", 8 pct, 65 pct, 35 pct, 23 pct)
- FormSetObject(2, _Button, "Cancel", 57 pct, 65 pct, 35 pct, 23 pct)
-
- FormSelect(formHexdump)
- FormSetProc(formprocHexdump)
- FormControl(_Show)
-
- 'Use a monospaced font
- FontNew(1; "Terminal", 8)
- LogControl(_SetFont; 1)
- END PROC
-
- PROC formprocHexdump(param)
- LOCAL i
-
- FormSelect(param[_FormNum])
- SELECT CASE param[_ItemNum]
- CASE 100 'File...
- 'Get the name of the file to open
- fname = StdOpen("*.*", "File to display:", "Dump")
- IF fname <> "" THEN
- 'Display the file name, size, and date in the form
- FormModifyObject(30, _Normal, fname)
- flen = FileQ(fname, _Size)
- FormModifyObject(70, _Normal, Sprint("P(0)", flen))
- FormModifyObject(90, _Normal, Sprint("D(M1/D1/Y1)", FileQ(fname, _DateTime)))
- 'Display and set the offset to 0
- offset = 0
- FormModifyObject(50, _Normal, "0")
- 'If a file is already open, close it
- IF fnum THEN
- FileClose(fnum)
- ELSE
- fnum = FileQUnique
- END IF
- 'Open the file and display the data
- FileOpen(fnum, fname)
- FOR i = 110 TO 140 STEP 10
- FormModifyObject(i, _Normal)
- NEXT i
- DumpIt
- END IF
-
- CASE 110 'Next
- 'Move forward 256 bytes. Update and display the offset
- IF offset + 256 < flen THEN
- offset = offset + 256
- END IF
- DumpIt
-
- CASE 120 'Prev
- 'Move backward 256 bytes, if possible.
- 'Update and display the offset
- IF offset < 256 THEN
- offset = 0
- ELSE
- offset = offset - 256
- END IF
- DumpIt
-
- CASE 130, 1 'Goto offset
- 'Read the offset from the form and go to it
- offset = StrToNum(FormQStr(50))
- IF offset < 0 THEN
- offset = 0
- ELSEIF offset >flen THEN
- offset = Max(0, flen - 256)
- END IF
- DumpIt
-
- CASE 140 'Print
- FormSelect(formPrint)
- FormModifyObject(20, _Normal, "0")
- FormModifyObject(40, _Normal, Sprint("P(0)", flen - 1))
- IF FormWait = 1 THEN
- PrintIt
- END IF
- FormControl(_Hide)
- FormSelect(formHexdump)
- FormControl(_Show)
-
- CASE 2 'Quit
- RESET _All
- EXIT PROGRAM
- END SELECT
- END PROC
-
- PROC DumpIt
- LOCAL n, buf2
- IF fnum THEN 'A file is opened
- 'Read the data and pass it to the external routine
- FileSeek(fnum, offset, _Beg)
- FileRead(fnum, dat, 256)
- hexdump(dat, buf, Len(dat), offset)
- n = InStr(buf, Chr$(0))
- IF n THEN
- buf2 = Left$(buf, n-1)
- END IF
- PRINT #20, formHexdump; Chr$(12) + buf2
- FormModifyObject(50, _Normal, Sprint("P(0)", offset))
- END IF
- END PROC
-
- PROC PrintIt
- LOCAL offstart, offend, OutLog, n, buf2
-
- IF fnum THEN 'A file is opened
- offstart = Max(StrToNum(FormQStr(20)), 0)
- offend = Min(StrToNum(FormQStr(40)), flen)
-
- OutLog = LogQUnique
- LogNew(OutLog; fname)
- FontNew(2; "courier", 10)
- LogControl(_SetFont; 2)
-
- FormNew(FormQUnique)
- FormControl(_Size; 40 pct, 45 pct, 20 pct, 10 pct)
- FormSetObject(10, _CaptionCenter, "Preparing Data...", _Center, _Center; _Red)
- FormControl(_Show)
-
- FileSeek(fnum, offstart, _Beg)
- WHILE offstart <= offend
- 'Read the data and pass it to the external routine
- FileRead(fnum, dat, Min(offend - offstart + 1, 256))
- hexdump(dat, buf, Len(dat), offstart)
- n = InStr(buf, Chr$(0))
- IF n THEN
- buf2 = Left$(buf, n-1)
- END IF
- PRINT #OutLog; buf2
- offstart = offstart + 256
- END WHILE
-
- FormControl(_Close)
- FormSelect(formPrint)
-
- LogControl(_Print)
- LFLUSH
- LogControl(_Close)
- FontControl(_Close)
- END IF
- END PROC
-
-
- EXTERNAL QSys(_ProgDir) + "hexdump" PROC hexdump(POINTER, POINTER, INTEGER, WORD)
- buf = String$(1222, " ")
- fnum = 0
- CreateForm
-