adamaig-ruby_activeworld 0.1-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,80 @@
1
+
2
+ AW_HEADER = "../lib/Aw.h"
3
+ RUBY_AW_ENUMS = "ruby_activeworld_enums.rb"
4
+
5
+ module RubyActiveworldUtils
6
+
7
+ @@ENUMS = {}
8
+
9
+ def self.parse_enum(typedefed_as)
10
+ File.open(RUBY_AW_ENUMS, "a") do |rawenum|
11
+ s = File.open(AW_HEADER,"r") {|f| s = f.read}
12
+ s =~ /typedef enum \{([^}]+?)\}\s*#{typedefed_as}\s*\;/m
13
+ enum_name = $~.captures[0]
14
+
15
+ enum_name = enum_name.split(/,/).reject {|x| x.strip!; x.nil? || x.empty? }.each do |x|
16
+ x.gsub!(/\/\/.*$/,"")
17
+ x.gsub!(/\/\*.*\*\//,"")
18
+ x.strip!
19
+ end
20
+
21
+ @@ENUMS[typedefed_as.to_sym] = {}
22
+ rawenum.write "
23
+ def self.#{typedefed_as.downcase}(v=nil)
24
+ r = v.nil? ? @@ENUMS[:#{typedefed_as}] : @@ENUMS[:#{typedefed_as}][v.to_sym]
25
+ raise \"Unknown AWSDK value '\#{v}'\" if r.nil?
26
+ r
27
+ end
28
+ \# Constants for the enum #{typedefed_as}\n"
29
+
30
+ next_value = 0
31
+ enum_name.each_with_index do |x,i|
32
+ vals = x.split("=").each {|v| v.strip!}
33
+ next_value = Integer(vals[1]) if vals[1]
34
+ @@ENUMS[typedefed_as.to_sym][vals[0].to_sym] = next_value
35
+
36
+ # define the constant at both the module and application instance levels
37
+
38
+ rawenum.write "#{" #{vals[0]} = #{next_value}".ljust(50)}\#original line : #{x}\n"
39
+ next_value += 1
40
+ end
41
+ end
42
+ end
43
+
44
+
45
+ def self.dump_enums
46
+ File.open(RUBY_AW_ENUMS, "a") do |rawenum|
47
+ rawenum.write "\n\# This hash provides named access to the enum values if desired\n @@ENUMS = {\n";
48
+ sorted_keys = @@ENUMS.keys.sort {|a,b| a.to_s <=> b.to_s}
49
+ sorted_keys.each do |key|
50
+ rawenum.write " :#{key} => {\n"
51
+ @@ENUMS[key].each_pair do |k,v|
52
+ rawenum.write " :#{k} => #{v},\n"
53
+ end
54
+ rawenum.write sorted_keys.last == key ? " }\n" : " },\n"
55
+ end
56
+ rawenum.write " }\n";
57
+ end
58
+ end
59
+ end
60
+
61
+ # when this file is loaded this generates all the enum values as constants
62
+ s = File.open(AW_HEADER,"r") {|f| s = f.read}
63
+ enums = []
64
+ while(s =~ /typedef enum \{[^}]*\}\s*?([^;]+?)\;/m)
65
+ enums << $~.captures[0].strip
66
+ s = $~.post_match
67
+ end
68
+
69
+
70
+ File.open(RUBY_AW_ENUMS, "w") do |rawenum|
71
+ rawenum.write "class RubyActiveworld\n def self.enums; @@ENUMS.keys; end;\n"
72
+ end
73
+
74
+ enums.each {|enum| RubyActiveworldUtils.parse_enum(enum)}
75
+
76
+ RubyActiveworldUtils.dump_enums
77
+
78
+ File.open(RUBY_AW_ENUMS, "a") do |rawenum|
79
+ rawenum.write "end"
80
+ end
@@ -0,0 +1,126 @@
1
+ s = "AW_EVENT_ADMIN_WORLD_DELETE
2
+ AW_EVENT_ADMIN_WORLD_INFO
3
+ AW_EVENT_AVATAR_ADD
4
+ AW_EVENT_AVATAR_CHANGE
5
+ AW_EVENT_AVATAR_CLICK
6
+ AW_EVENT_AVATAR_DELETE
7
+ AW_EVENT_AVATAR_RELOAD
8
+ AW_EVENT_BOTGRAM
9
+ AW_EVENT_BOTMENU
10
+ AW_EVENT_CAMERA
11
+ AW_EVENT_CELL_BEGIN
12
+ AW_EVENT_CELL_END
13
+ AW_EVENT_CELL_OBJECT
14
+ AW_EVENT_CHAT
15
+ AW_EVENT_CONSOLE_MESSAGE
16
+ AW_EVENT_CONTACT_STATE
17
+ AW_EVENT_ENTITY_ADD
18
+ AW_EVENT_ENTITY_CHANGE
19
+ AW_EVENT_ENTITY_DELETE
20
+ AW_EVENT_ENTITY_LINKS
21
+ AW_EVENT_ENTITY_RIDER_ADD
22
+ AW_EVENT_ENTITY_RIDER_CHANGE
23
+ AW_EVENT_ENTITY_RIDER_DELETE
24
+ AW_EVENT_HUD_CLEAR
25
+ AW_EVENT_HUD_CLICK
26
+ AW_EVENT_HUD_CREATE
27
+ AW_EVENT_HUD_DESTROY
28
+ AW_EVENT_JOIN
29
+ AW_EVENT_NOISE
30
+ AW_EVENT_OBJECT_ADD
31
+ AW_EVENT_OBJECT_BUMP
32
+ AW_EVENT_OBJECT_CLICK
33
+ AW_EVENT_OBJECT_DELETE
34
+ AW_EVENT_OBJECT_SELECT
35
+ AW_EVENT_SEND_FILE
36
+ AW_EVENT_TELEGRAM
37
+ AW_EVENT_TELEPORT
38
+ AW_EVENT_TERRAIN_BEGIN
39
+ AW_EVENT_TERRAIN_CHANGED
40
+ AW_EVENT_TERRAIN_DATA
41
+ AW_EVENT_TERRAIN_END
42
+ AW_EVENT_TOOLBAR_CLICK
43
+ AW_EVENT_UNIVERSE_ATTRIBUTES
44
+ AW_EVENT_UNIVERSE_DISCONNECT
45
+ AW_EVENT_URL
46
+ AW_EVENT_URL_CLICK
47
+ AW_EVENT_USER_INFO
48
+ AW_EVENT_VOIP_DATA
49
+ AW_EVENT_WORLD_ATTRIBUTES
50
+ AW_EVENT_WORLD_DISCONNECT
51
+ AW_EVENT_WORLD_INFO
52
+ AW_CALLBACK_ADDRESS
53
+ AW_CALLBACK_ADMIN
54
+ AW_CALLBACK_ADMIN_WORLD_LIST
55
+ AW_CALLBACK_ADMIN_WORLD_RESULT
56
+ AW_CALLBACK_ATTRIBUTES_RESET_RESULT
57
+ AW_CALLBACK_AVATAR_LOCATION
58
+ AW_CALLBACK_BOTGRAM_RESULT
59
+ AW_CALLBACK_BOTMENU_RESULT
60
+ AW_CALLBACK_CAV
61
+ AW_CALLBACK_CAV_RESULT
62
+ AW_CALLBACK_CAV_TEMPLATE
63
+ AW_CALLBACK_CAV_TEMPLATE_RESULT
64
+ AW_CALLBACK_CELL_RESULT
65
+ AW_CALLBACK_CITIZEN_ATTRIBUTES
66
+ AW_CALLBACK_CITIZEN_RESULT
67
+ AW_CALLBACK_CONTACT_ADD
68
+ AW_CALLBACK_CREATE
69
+ AW_CALLBACK_DELETE_ALL_OBJECTS_RESULT
70
+ AW_CALLBACK_ENTER
71
+ AW_CALLBACK_HUD_RESULT
72
+ AW_CALLBACK_IMMIGRATE
73
+ AW_CALLBACK_JOIN
74
+ AW_CALLBACK_LICENSE_ATTRIBUTES
75
+ AW_CALLBACK_LICENSE_RESULT
76
+ AW_CALLBACK_LOGIN
77
+ AW_CALLBACK_OBJECT_RESULT
78
+ AW_CALLBACK_PASSWORD_SEND
79
+ AW_CALLBACK_QUERY
80
+ AW_CALLBACK_REGISTER
81
+ AW_CALLBACK_RELOAD_REGISTRY
82
+ AW_CALLBACK_SEND_FILE
83
+ AW_CALLBACK_TELEGRAM_RESULT
84
+ AW_CALLBACK_TERRAIN_DELETE_ALL_RESULT
85
+ AW_CALLBACK_TERRAIN_LOAD_NODE_RESULT
86
+ AW_CALLBACK_TERRAIN_NEXT_RESULT
87
+ AW_CALLBACK_TERRAIN_SET_RESULT
88
+ AW_CALLBACK_UNIVERSE_EJECTION
89
+ AW_CALLBACK_UNIVERSE_EJECTION_RESULT
90
+ AW_CALLBACK_USER_LIST
91
+ AW_CALLBACK_WORLD_EJECTION
92
+ AW_CALLBACK_WORLD_EJECTION_RESULT
93
+ AW_CALLBACK_WORLD_INSTANCE
94
+ AW_CALLBACK_WORLD_LIST"
95
+
96
+ meth ="
97
+ VALUE %s(VALUE self%s) {
98
+ return Qnil;
99
+ }
100
+ void %s_hook(%s) {
101
+ rb_funcall(ruby_aw_instance(), rb_intern(\"%s\"), %s);
102
+ }
103
+ static VALUE receive_%s(VALUE self) {
104
+ return INT2NUM(aw_instance_%s_set(%s,%s_hook));
105
+ }
106
+ "
107
+ def_str = " rb_define_method(cRubyActiveworld, \"%s\",(VALUE(*)(ANYARGS))%s,%d);\n" +
108
+ " rb_define_method(cRubyActiveworld, \"receive_%s\",(VALUE(*)(ANYARGS))receive_%s,%d);"
109
+
110
+ methods = []
111
+ defs = []
112
+
113
+ s.split.each do |name|
114
+ lname = name.to_s.downcase
115
+ ruby_set_method_name = "receive_#{lname}"
116
+ event = name =~ /event/i ? true : false
117
+ ruby_callback_method_name = "#{lname.sub(/(aw_callback|aw_event)_/i,"")}#{"_event" if event}_callback"
118
+ methods.push( meth % [ruby_callback_method_name, event ? "" : ", VALUE rc",
119
+ ruby_callback_method_name, event ? "" : "int rc", ruby_callback_method_name, event ? "0" : "1, INT2FIX(rc)",
120
+ name.downcase,event ? "event" : "callback", name,ruby_callback_method_name] )
121
+ defs.push( def_str % [ruby_callback_method_name, ruby_callback_method_name, event ? 0 : 1,
122
+ lname, lname, event ? 0 : 1])
123
+ end
124
+
125
+ puts methods.join("\n")
126
+ puts defs.join("\n")