mirror of
https://github.com/chocolate-doom/research.git
synced 2025-02-16 17:11:22 +00:00
62 lines
960 B
Text
62 lines
960 B
Text
|
#!/usr/bin/env ruby
|
||
|
#
|
||
|
# Generate the table of offsets for different action pointers
|
||
|
# in the different Heretic versions.
|
||
|
#
|
||
|
|
||
|
require "common.rb"
|
||
|
|
||
|
def action_func_names
|
||
|
names = {}
|
||
|
|
||
|
for config in CONFIGS
|
||
|
config::ACTION_POINTERS.each_value do |name|
|
||
|
names[name] = true
|
||
|
end
|
||
|
end
|
||
|
|
||
|
names.keys
|
||
|
end
|
||
|
|
||
|
def get_func_offset(config, name)
|
||
|
config::ACTION_POINTERS.each_pair do |offset, funcname|
|
||
|
if name == funcname
|
||
|
return offset
|
||
|
end
|
||
|
end
|
||
|
|
||
|
0
|
||
|
end
|
||
|
|
||
|
def func_offsets(name)
|
||
|
CONFIGS.map do |config|
|
||
|
get_func_offset(config, name)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def format_func_offsets(offsets)
|
||
|
formatted = offsets.map do |offset|
|
||
|
if offset == 0
|
||
|
" NULL"
|
||
|
else
|
||
|
sprintf("%6i", offset)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
"{ " + formatted.join(", ") + " }"
|
||
|
end
|
||
|
|
||
|
puts "static HHEActionPointer action_pointers[] = {"
|
||
|
|
||
|
for name in action_func_names.sort
|
||
|
offsets = func_offsets(name)
|
||
|
print " { "
|
||
|
print format_func_offsets(offsets) + ", "
|
||
|
print name.to_json
|
||
|
print " },\n"
|
||
|
end
|
||
|
|
||
|
puts "};"
|
||
|
puts
|
||
|
|