module FileInputMixin def fgetb x=0 ret=0 each_byte do |i| ret=i || 0 break end return ret end def fgetw x=0 ret=0 each_byte do |i| break if !i ret|=(i<>3 return 0 if index>=offset self.pos=index*8 return fgetdw end def getLength(index) self.binmode self.pos=0 offset=fgetdw>>3 return 0 if index>=offset self.pos=index*8+4 return fgetdw end def readName(index) self.binmode self.pos=0 offset=fgetdw>>3 return "" if index>=offset self.pos=index<<3 offset=fgetdw length=fgetdw return "" if length==0 self.pos=offset return read(length) end end module FileOutputMixin def fputb(b) b=b&0xFF write(b.chr) end def fputw(w) 2.times do b=w&0xFF write(b.chr) w>>=8 end end def fputdw(w) 4.times do b=w&0xFF write(b.chr) w>>=8 end end end class File < IO =begin unless defined?(debugopen) class << self alias debugopen open end end def open(f,m="r") debugopen("debug.txt","ab") { |file| file.write([f,m,Time.now.to_f].inspect+"\r\n") } if block_given? debugopen(f,m) { |file| yield file } else return debugopen(f,m) end end =end include FileInputMixin include FileOutputMixin end class StringInput include FileInputMixin def pos=(value) seek(value) end def each_byte while !eof? yield getc end end def binmode end end class StringOutput include FileOutputMixin end