Files
infinitefusion-e18/Data/Scripts/007_Events and files/002_File_Mixins.rb
2020-09-05 22:34:32 +01:00

164 lines
2.1 KiB
Ruby

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<<x)
x+=8
break if x==16
end
return ret
end
def fgetdw
x=0
ret=0
each_byte do |i|
break if !i
ret|=(i<<x)
x+=8
break if x==32
end
return ret
end
def fgetsb
ret=fgetb
if (ret&0x80)!=0
return ret-256
else
return ret
end
end
def xfgetb(offset)
self.pos=offset
return fgetb
end
def xfgetw(offset)
self.pos=offset
return fgetw
end
def xfgetdw(offset)
self.pos=offset
return fgetdw
end
def getOffset(index)
self.binmode
self.pos=0
offset=fgetdw>>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