RubyでHSPのオブジェクトファイルのインスペクタを作り中

TYPENAMES = %w(
TYPE_MARK TYPE_VAR TYPE_STRING TYPE_DNUM TYPE_INUM
TYPE_STRUCT TYPE_XLABEL TYPE_LABEL TYPE_INTCMD TYPE_EXTCMD
TYPE_EXTSYSVAR TYPE_CMPCMD TYPE_MODCMD TYPE_INTFUNC
TYPE_SYSVAR TYPE_PROGCMD TYPE_DLLFUNC TYPE_DLLCTRL
TYPE_USERDEF )
TYPENAMES.each_with_index do |typename, i|
	Object.const_set( typename, i )
end

obj = ARGF.read
pt_cs, max_cs, pt_ds, max_ds = *obj[16,16].unpack('i4')
cs = obj[pt_cs,max_cs]
ds = obj[pt_ds,max_ds]

i = 0
while i < max_cs
	c = *cs[i,2].unpack('s')
	type = c & 0x1fff
	ex1 = c & 0x2000 != 0
	ex2 = c & 0x4000 != 0
	if big_flag = c & 0x8000 != 0
		code = *cs[i+2,4].unpack('i')
	else
		code = *cs[i+2,2].unpack('s')
	end
	print "#{TYPENAMES[type]}"
	case type
	when TYPE_STRING
		puts "(%p)" % ds[code..-1].split("\0")[0]
	else
		puts
	end
	if big_flag
		i += 2 + 4
	else
		i += 2 + 2
	end
end

mes "hello, world!"のオブジェクトファイルをこれに渡したら

TYPE_EXTCMD
TYPE_STRING("hello, world!")
TYPE_PROGCMD
TYPE_PROGCMD
TYPE_LABEL

と出るところまで。