#!/usr/bin/ruby -w #======================================================================= # vhex.rb - abrir archivos en modo binario, un pequeño visor hexadecimal #----------------------------------------------------------------------- # Utiliza el módulo Rtxt #----------------------------------------------------------------------- # FJA - neocipres@gmail.com Junio de 2008 #======================================================================= require 'mrtxt' include Rtxt begin bloque = '' texto = '' nomf, pos_i, pos_f = ARGV nomf = '' if !nomf if !pos_i open(nomf, 'rb') do |f| f.each_byte { |x| bloque << "[#{x.to_s(16).upcase}|#{x.chr}] "} end else p = 0 pi = pos_i.to_i pf = pos_f.to_i open(nomf, 'rb') do |f| if pi >= File.lstat(nomf).size pi = File.lstat(nomf).size - 1 pf = 1 else pf = File.lstat(nomf).size - pi if pf == 0 end while !f.eof? && p < pf f.pos = pi + p c = f.read(1) # read devuelve el caracter no el byte cod = c[0] # para obtener el valor entero de un determinado caracter texto << c if cod > 0 && cod < 256 bloque << "[#{cod.to_s(16).upcase}|#{c}] " p += 1 end end end puts "="*80 puts nuevo_ancho(bloque, 80, 'j') puts "="*80 puts "\n => El texto encontrado entre el byte #{pi} y el #{pi+pf-1} es: \n\n" if pos_i puts "#{nuevo_ancho(texto, 80, 'j')} \n\n" rescue if ARGV.size == 0 print "\n\t", "="*65 print "\n\t Uso: vhex <archivo> [byte de inicio] [número de bytes a leer]\n" print "\n\t\t vhex es un enlace simbólico a vhex.rb o cb14.rb " print "\n\t", "="*65, "\n\n" else puts "\n\t Error-> #{$!} en:\n\t #{$@}\n\n" end end