home *** CD-ROM | disk | FTP | other *** search
/ TestDrive Super Store 3.0 / TESTDRIVE_3.ISO / realizer / utility / hexdump.rlz < prev   
Encoding:
Text File  |  1992-09-30  |  5.8 KB  |  196 lines

  1. '***********************************************************************
  2. '    HexDump.rlz                      
  3. '
  4. '    Hex dump file browser
  5. '
  6. '    Copyright ⌐ 1991-1992 Computer Associates International, Inc.
  7. '    All rights reserved.
  8. '
  9. '***********************************************************************
  10.  
  11. PROC CreateForm
  12.     LOCAL n, m, h, k
  13.  
  14.     n = 14
  15.     m = (96 - 6*n)/5
  16.     h = 9
  17.     k = m + n
  18.     formHexdump = FormQUnique
  19.     FormNew(formHexdump; "Hex Dump", _Title + _Minimize + _Close)
  20.     FormControl(_Size; 0.5 pct, 5 pct, 99 pct, 90 pct)
  21.     FormSetObject(25, _CaptionLeft, "File name:", 5 pct, 2 pct) 
  22.     FormSetObject(30, _CaptionLeft, "", 17 pct, 2 pct, 40 pct, _Default) 
  23.     FormSetObject(60, _CaptionLeft, "Length:", 5 pct, 12 pct, _Default, _Default) 
  24.     FormSetObject(70, _CaptionLeft, "", 14 pct, 12 pct, 20 pct, _Default) 
  25.     FormSetObject(80, _CaptionLeft, "Modify date:", 60 pct, 2 pct) 
  26.     FormSetObject(90, _CaptionLeft, "", 75  pct, 2 pct, 24 pct, _Default) 
  27.     FormSetObject(40, _CaptionLeft, "Offset:", 60 pct, 12 pct) 
  28.     FormSetObject(50, _EditText, "", 68 pct, 10.5 pct, 27 pct, _Default) 
  29.     FormSetObject(20, _Log, "dump", 0.25 pct, 21 pct, 99.5 pct, 63 pct) 
  30.     FormSetObject(100, _Button, "File...", 2 pct, 88 pct, n pct, _Default)
  31.     FormSetObject(110, _Button, "Next", 2+k pct, 88 pct, n pct, _Default)
  32.     FormSetObject(120, _Button, "Prev", 2+2*k pct, 88 pct, n pct,_Default)
  33.     FormSetObject(130, _Button, "Goto offset", 2+3*k pct, 88 pct, n pct, _Default)
  34.     FormSetObject(140, _Button, "Print", 2+4*k pct, 88 pct, n pct, _Default)
  35.     FormSetObject(2, _Button, "Quit", 2+5*k pct, 88 pct, n pct, _Default)
  36.  
  37.     FOR n = 110 TO 140 STEP 10
  38.         FormModifyObject(n, _Gray)
  39.     NEXT n         
  40.  
  41.     formPrint = FormQUnique
  42.     FormNew(formPrint; "Hex Dump Print", _Title)
  43.     FormControl(_Size; _Center, _Center, 35 pct, 40 pct)
  44.     FormSetObject(10, _CaptionLeft, "Starting offset:", 5 pct, 10 pct)
  45.     FormSetObject(20, _TextBox, "", 60 pct, 10 pct, 30 pct, _Default)
  46.     FormSetObject(30, _CaptionLeft, "Ending offset:", 5 pct, 30 pct)
  47.     FormSetObject(40, _EditText, "", 60 pct, 30 pct, 30 pct, _Default)
  48.     FormSetObject(1, _DefButton, "Print", 8 pct, 65 pct, 35 pct, 23 pct)
  49.     FormSetObject(2, _Button, "Cancel", 57 pct, 65 pct, 35 pct, 23 pct)
  50.  
  51.     FormSelect(formHexdump)
  52.     FormSetProc(formprocHexdump)     
  53.     FormControl(_Show)     
  54.      
  55.     'Use a monospaced font 
  56.     FontNew(1; "Terminal", 8) 
  57.     LogControl(_SetFont; 1) 
  58. END PROC     
  59.       
  60. PROC formprocHexdump(param)     
  61.     LOCAL i
  62.  
  63.     FormSelect(param[_FormNum])
  64.     SELECT CASE param[_ItemNum]     
  65.     CASE 100    'File... 
  66.         'Get the name of the file to open 
  67.         fname = StdOpen("*.*", "File to display:", "Dump") 
  68.         IF fname <> "" THEN 
  69.             'Display the file name, size, and date in the form 
  70.             FormModifyObject(30, _Normal, fname)         
  71.             flen = FileQ(fname, _Size)         
  72.             FormModifyObject(70, _Normal, Sprint("P(0)", flen)) 
  73.             FormModifyObject(90, _Normal, Sprint("D(M1/D1/Y1)",  FileQ(fname, _DateTime))) 
  74.             'Display and set the offset to 0 
  75.             offset = 0         
  76.             FormModifyObject(50, _Normal, "0")   
  77.             'If a file is already open, close it 
  78.             IF fnum THEN         
  79.                 FileClose(fnum)         
  80.             ELSE         
  81.                 fnum = FileQUnique         
  82.             END IF    
  83.             'Open the file and display the data 
  84.             FileOpen(fnum, fname)         
  85.             FOR i = 110 TO 140 STEP 10
  86.                 FormModifyObject(i, _Normal)
  87.             NEXT i
  88.             DumpIt         
  89.         END IF             
  90.  
  91.     CASE 110    'Next 
  92.         'Move forward 256 bytes.  Update and display the offset 
  93.         IF offset + 256 < flen THEN      
  94.             offset = offset + 256
  95.         END IF  
  96.         DumpIt      
  97.  
  98.     CASE 120    'Prev     
  99.         'Move backward 256 bytes, if possible. 
  100.         'Update and display the offset 
  101.         IF offset < 256 THEN       
  102.             offset = 0       
  103.         ELSE       
  104.             offset = offset - 256       
  105.         END IF       
  106.         DumpIt    
  107.      
  108.     CASE 130, 1        'Goto offset 
  109.         'Read the offset from the form and go to it 
  110.         offset = StrToNum(FormQStr(50))       
  111.         IF offset < 0 THEN       
  112.             offset = 0       
  113.         ELSEIF offset >flen THEN
  114.             offset = Max(0, flen - 256)
  115.         END IF
  116.         DumpIt         
  117.  
  118.     CASE 140    'Print
  119.         FormSelect(formPrint)
  120.         FormModifyObject(20, _Normal, "0")
  121.         FormModifyObject(40, _Normal, Sprint("P(0)", flen - 1))
  122.         IF FormWait = 1 THEN
  123.             PrintIt
  124.         END IF
  125.         FormControl(_Hide)
  126.         FormSelect(formHexdump)
  127.         FormControl(_Show)
  128.  
  129.     CASE 2    'Quit     
  130.         RESET _All
  131.         EXIT PROGRAM 
  132.     END SELECT     
  133. END PROC     
  134.  
  135. PROC DumpIt     
  136.     LOCAL n, buf2
  137.     IF fnum THEN     'A file is opened 
  138.         'Read the data and pass it to the external routine 
  139.         FileSeek(fnum, offset, _Beg)
  140.         FileRead(fnum, dat, 256)      
  141.         hexdump(dat, buf, Len(dat), offset)      
  142.         n = InStr(buf, Chr$(0))
  143.         IF n THEN
  144.             buf2 = Left$(buf, n-1)
  145.         END IF
  146.         PRINT #20, formHexdump; Chr$(12) + buf2   
  147.         FormModifyObject(50,  _Normal, Sprint("P(0)", offset))     
  148.     END IF   
  149. END PROC      
  150.  
  151. PROC PrintIt     
  152.     LOCAL offstart, offend, OutLog, n, buf2
  153.  
  154.     IF fnum THEN     'A file is opened 
  155.         offstart = Max(StrToNum(FormQStr(20)), 0)
  156.         offend = Min(StrToNum(FormQStr(40)), flen)
  157.         
  158.         OutLog = LogQUnique
  159.         LogNew(OutLog; fname)
  160.         FontNew(2; "courier", 10)
  161.         LogControl(_SetFont; 2) 
  162.  
  163.         FormNew(FormQUnique)
  164.         FormControl(_Size; 40 pct, 45 pct, 20 pct, 10 pct)
  165.         FormSetObject(10, _CaptionCenter, "Preparing Data...", _Center, _Center; _Red)
  166.         FormControl(_Show)
  167.  
  168.         FileSeek(fnum, offstart, _Beg)
  169.         WHILE offstart <= offend
  170.             'Read the data and pass it to the external routine 
  171.             FileRead(fnum, dat, Min(offend - offstart + 1, 256))  
  172.             hexdump(dat, buf, Len(dat), offstart)      
  173.             n = InStr(buf, Chr$(0))
  174.             IF n THEN
  175.                 buf2 = Left$(buf, n-1)
  176.             END IF
  177.             PRINT #OutLog; buf2   
  178.             offstart = offstart + 256
  179.         END WHILE
  180.  
  181.         FormControl(_Close)
  182.         FormSelect(formPrint)
  183.  
  184.         LogControl(_Print)
  185.         LFLUSH
  186.         LogControl(_Close)
  187.         FontControl(_Close)
  188.     END IF   
  189. END PROC      
  190.  
  191.  
  192. EXTERNAL QSys(_ProgDir) + "hexdump"  PROC hexdump(POINTER, POINTER, INTEGER, WORD)        
  193. buf = String$(1222, " ")  
  194. fnum = 0    
  195. CreateForm
  196.