libx11 0.1.0 → 0.2.0

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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/bin/generate-constants +92 -0
  3. data/bin/generate-functions +64 -0
  4. data/bin/generate-structs +103 -0
  5. data/bin/typesym.rb +50 -0
  6. data/example/window_manager.rb +10 -14
  7. data/lib/libx11/version.rb +1 -1
  8. data/lib/libx11/x.rb +573 -132
  9. data/lib/libx11/xlib.rb +463 -28
  10. data/lib/libx11/xlib/depth.rb +11 -0
  11. data/lib/libx11/xlib/screen.rb +28 -0
  12. data/lib/libx11/xlib/screen_format.rb +12 -0
  13. data/lib/libx11/xlib/visual.rb +16 -0
  14. data/lib/libx11/xlib/{xany_event.rb → x_any_event.rb} +1 -1
  15. data/lib/libx11/xlib/x_arc.rb +14 -0
  16. data/lib/libx11/xlib/{xbutton_event.rb → x_button_event.rb} +2 -2
  17. data/lib/libx11/xlib/x_char2b.rb +10 -0
  18. data/lib/libx11/xlib/x_char_struct.rb +14 -0
  19. data/lib/libx11/xlib/{xcirculate_event.rb → x_circulate_event.rb} +1 -1
  20. data/lib/libx11/xlib/{xcirculate_request_event.rb → x_circulate_request_event.rb} +2 -2
  21. data/lib/libx11/xlib/{xclient_message_event.rb → x_client_message_event.rb} +0 -0
  22. data/lib/libx11/xlib/x_color.rb +14 -0
  23. data/lib/libx11/xlib/{xcolormap_event.rb → x_colormap_event.rb} +2 -2
  24. data/lib/libx11/xlib/{xconfigure_event.rb → x_configure_event.rb} +2 -2
  25. data/lib/libx11/xlib/{xconfigure_request_event.rb → x_configure_request_event.rb} +2 -2
  26. data/lib/libx11/xlib/{xcreate_window_event.rb → x_create_window_event.rb} +2 -2
  27. data/lib/libx11/xlib/{xcrossing_event.rb → x_crossing_event.rb} +4 -4
  28. data/lib/libx11/xlib/{xdestroy_window_event.rb → x_destroy_window_event.rb} +1 -1
  29. data/lib/libx11/xlib/x_edata_object.rb +14 -0
  30. data/lib/libx11/xlib/{xerror_event.rb → x_error_event.rb} +0 -0
  31. data/lib/libx11/xlib/{xevent.rb → x_event.rb} +34 -34
  32. data/lib/libx11/xlib/{xexpose_event.rb → x_expose_event.rb} +1 -1
  33. data/lib/libx11/xlib/x_ext_codes.rb +12 -0
  34. data/lib/libx11/xlib/{xfocus_change_event.rb → x_focus_change_event.rb} +2 -2
  35. data/lib/libx11/xlib/x_font_prop.rb +10 -0
  36. data/lib/libx11/xlib/x_font_set_extents.rb +10 -0
  37. data/lib/libx11/xlib/x_font_struct.rb +24 -0
  38. data/lib/libx11/xlib/{xgeneric_event.rb → x_generic_event.rb} +0 -0
  39. data/lib/libx11/xlib/{xgeneric_event_cookie.rb → x_generic_event_cookie.rb} +1 -1
  40. data/lib/libx11/xlib/{xgraphics_expose_event.rb → x_graphics_expose_event.rb} +1 -2
  41. data/lib/libx11/xlib/{xgravity_event.rb → x_gravity_event.rb} +1 -1
  42. data/lib/libx11/xlib/x_host_address.rb +11 -0
  43. data/lib/libx11/xlib/x_key_event.rb +23 -0
  44. data/lib/libx11/xlib/x_keyboard_control.rb +16 -0
  45. data/lib/libx11/xlib/x_keyboard_state.rb +15 -0
  46. data/lib/libx11/xlib/{xkeymap_event.rb → x_keymap_event.rb} +1 -1
  47. data/lib/libx11/xlib/{xmap_event.rb → x_map_event.rb} +2 -2
  48. data/lib/libx11/xlib/x_map_request_event.rb +14 -0
  49. data/lib/libx11/xlib/{xmapping_event.rb → x_mapping_event.rb} +1 -1
  50. data/lib/libx11/xlib/x_modifier_keymap.rb +10 -0
  51. data/lib/libx11/xlib/{xmotion_event.rb → x_motion_event.rb} +2 -2
  52. data/lib/libx11/xlib/{xno_expose_event.rb → x_no_expose_event.rb} +1 -1
  53. data/lib/libx11/xlib/x_pixmap_format_values.rb +11 -0
  54. data/lib/libx11/xlib/x_point.rb +10 -0
  55. data/lib/libx11/xlib/{xproperty_event.rb → x_property_event.rb} +1 -1
  56. data/lib/libx11/xlib/x_rectangle.rb +12 -0
  57. data/lib/libx11/xlib/{xreparent_event.rb → x_reparent_event.rb} +2 -2
  58. data/lib/libx11/xlib/{xresize_request_event.rb → x_resize_request_event.rb} +1 -1
  59. data/lib/libx11/xlib/x_segment.rb +12 -0
  60. data/lib/libx11/xlib/{xselection_clear_event.rb → x_selection_clear_event.rb} +1 -1
  61. data/lib/libx11/xlib/{xselection_event.rb → x_selection_event.rb} +1 -1
  62. data/lib/libx11/xlib/{xselection_request_event.rb → x_selection_request_event.rb} +1 -1
  63. data/lib/libx11/xlib/x_server_interpreted_address.rb +12 -0
  64. data/lib/libx11/xlib/x_set_window_attributes.rb +23 -0
  65. data/lib/libx11/xlib/x_text_item.rb +12 -0
  66. data/lib/libx11/xlib/x_text_item16.rb +12 -0
  67. data/lib/libx11/xlib/x_time_coord.rb +11 -0
  68. data/lib/libx11/xlib/{xunmap_event.rb → x_unmap_event.rb} +2 -2
  69. data/lib/libx11/xlib/{xvisibility_event.rb → x_visibility_event.rb} +1 -1
  70. data/lib/libx11/xlib/x_window_attributes.rb +31 -0
  71. data/lib/libx11/xlib/x_window_changes.rb +15 -0
  72. data/lib/libx11/xlib/xgc_values.rb +31 -0
  73. data/lib/libx11/xlib/xic_callback.rb +10 -0
  74. data/lib/libx11/xlib/xim_callback.rb +10 -0
  75. data/lib/libx11/xlib/xim_styles.rb +10 -0
  76. data/lib/libx11/xlib/xim_values_list.rb +10 -0
  77. data/lib/libx11/xlib/xmb_text_item.rb +12 -0
  78. data/lib/libx11/xlib/xom_char_set_list.rb +10 -0
  79. data/lib/libx11/xlib/xom_font_info.rb +11 -0
  80. data/lib/libx11/xlib/xom_orientation.rb +10 -0
  81. data/lib/libx11/xlib/xwc_text_item.rb +12 -0
  82. data/libx11.gemspec +2 -1
  83. metadata +105 -49
  84. data/lib/libx11/xlib/xkey_event.rb +0 -23
  85. data/lib/libx11/xlib/xmap_request_event.rb +0 -18
@@ -0,0 +1,15 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XWindowChanges < FFI::Struct
4
+ layout(
5
+ :x, :int,
6
+ :y, :int,
7
+ :width, :int,
8
+ :height, :int,
9
+ :border_width, :int,
10
+ :sibling, :Window,
11
+ :stack_mode, :int,
12
+ )
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,31 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XGCValues < FFI::Struct
4
+ layout(
5
+ :function, :int,
6
+ :plane_mask, :ulong,
7
+ :foreground, :ulong,
8
+ :background, :ulong,
9
+ :line_width, :int,
10
+ :line_style, :int,
11
+ :cap_style, :int,
12
+ :join_style, :int,
13
+ :fill_style, :int,
14
+ :fill_rule, :int,
15
+ :arc_mode, :int,
16
+ :tile, :Pixmap,
17
+ :stipple, :Pixmap,
18
+ :ts_x_origin, :int,
19
+ :ts_y_origin, :int,
20
+ :font, :Font,
21
+ :subwindow_mode, :int,
22
+ :graphics_exposures, :bool,
23
+ :clip_x_origin, :int,
24
+ :clip_y_origin, :int,
25
+ :clip_mask, :Pixmap,
26
+ :dash_offset, :int,
27
+ :dashes, :char,
28
+ )
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XICCallback < FFI::Struct
4
+ layout(
5
+ :client_data, :XPointer,
6
+ :callback, :XICProc,
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XIMCallback < FFI::Struct
4
+ layout(
5
+ :client_data, :XPointer,
6
+ :callback, :XIMProc,
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XIMStyles < FFI::Struct
4
+ layout(
5
+ :count_styles, :ushort,
6
+ :supported_styles, :pointer,
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XIMValuesList < FFI::Struct
4
+ layout(
5
+ :count_values, :ushort,
6
+ :supported_values, :pointer,
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XmbTextItem < FFI::Struct
4
+ layout(
5
+ :chars, :string,
6
+ :nchars, :int,
7
+ :delta, :int,
8
+ :font_set, :pointer,
9
+ )
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XOMCharSetList < FFI::Struct
4
+ layout(
5
+ :charset_count, :int,
6
+ :charset_list, :pointer,
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XOMFontInfo < FFI::Struct
4
+ layout(
5
+ :num_font, :int,
6
+ :font_struct_list, :pointer,
7
+ :font_name_list, :pointer,
8
+ )
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XOMOrientation < FFI::Struct
4
+ layout(
5
+ :num_orientation, :int,
6
+ :orientation, :pointer,
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module LibX11
2
+ module Xlib
3
+ class XwcTextItem < FFI::Struct
4
+ layout(
5
+ :chars, :pointer,
6
+ :nchars, :int,
7
+ :delta, :int,
8
+ :font_set, :pointer,
9
+ )
10
+ end
11
+ end
12
+ end
@@ -20,9 +20,10 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ['lib']
21
21
 
22
22
  spec.add_dependency 'ffi', '~> 1.9'
23
+ spec.add_development_dependency 'activesupport'
23
24
  spec.add_development_dependency 'bundler', '~> 1.11'
25
+ spec.add_development_dependency 'pry-byebug'
24
26
  spec.add_development_dependency 'rake', '~> 10.0'
25
27
  spec.add_development_dependency 'rake-compiler'
26
28
  spec.add_development_dependency 'rspec', '~> 3.0'
27
- spec.add_development_dependency 'pry-byebug'
28
29
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libx11
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-04-16 00:00:00.000000000 Z
11
+ date: 2016-04-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -25,35 +25,35 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.9'
27
27
  - !ruby/object:Gem::Dependency
28
- name: bundler
28
+ name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.11'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.11'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: '1.11'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
54
+ version: '1.11'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake-compiler
56
+ name: pry-byebug
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
@@ -67,21 +67,21 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec
70
+ name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
75
+ version: '10.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.0'
82
+ version: '10.0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: pry-byebug
84
+ name: rake-compiler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.0'
97
111
  description: Ruby binding of libx11 mostly for xlib
98
112
  email:
99
113
  - takashikkbn@gmail.com
@@ -109,7 +123,11 @@ files:
109
123
  - README.md
110
124
  - Rakefile
111
125
  - bin/console
126
+ - bin/generate-constants
127
+ - bin/generate-functions
128
+ - bin/generate-structs
112
129
  - bin/setup
130
+ - bin/typesym.rb
113
131
  - bin/window-manager
114
132
  - example/aliases.rb
115
133
  - example/create_window.rb
@@ -119,41 +137,79 @@ files:
119
137
  - lib/libx11/version.rb
120
138
  - lib/libx11/x.rb
121
139
  - lib/libx11/xlib.rb
140
+ - lib/libx11/xlib/depth.rb
122
141
  - lib/libx11/xlib/display.rb
123
- - lib/libx11/xlib/xany_event.rb
124
- - lib/libx11/xlib/xbutton_event.rb
125
- - lib/libx11/xlib/xcirculate_event.rb
126
- - lib/libx11/xlib/xcirculate_request_event.rb
127
- - lib/libx11/xlib/xclient_message_event.rb
128
- - lib/libx11/xlib/xcolormap_event.rb
129
- - lib/libx11/xlib/xconfigure_event.rb
130
- - lib/libx11/xlib/xconfigure_request_event.rb
131
- - lib/libx11/xlib/xcreate_window_event.rb
132
- - lib/libx11/xlib/xcrossing_event.rb
133
- - lib/libx11/xlib/xdestroy_window_event.rb
134
- - lib/libx11/xlib/xerror_event.rb
135
- - lib/libx11/xlib/xevent.rb
136
- - lib/libx11/xlib/xexpose_event.rb
137
- - lib/libx11/xlib/xfocus_change_event.rb
138
- - lib/libx11/xlib/xgeneric_event.rb
139
- - lib/libx11/xlib/xgeneric_event_cookie.rb
140
- - lib/libx11/xlib/xgraphics_expose_event.rb
141
- - lib/libx11/xlib/xgravity_event.rb
142
- - lib/libx11/xlib/xkey_event.rb
143
- - lib/libx11/xlib/xkeymap_event.rb
144
- - lib/libx11/xlib/xmap_event.rb
145
- - lib/libx11/xlib/xmap_request_event.rb
146
- - lib/libx11/xlib/xmapping_event.rb
147
- - lib/libx11/xlib/xmotion_event.rb
148
- - lib/libx11/xlib/xno_expose_event.rb
149
- - lib/libx11/xlib/xproperty_event.rb
150
- - lib/libx11/xlib/xreparent_event.rb
151
- - lib/libx11/xlib/xresize_request_event.rb
152
- - lib/libx11/xlib/xselection_clear_event.rb
153
- - lib/libx11/xlib/xselection_event.rb
154
- - lib/libx11/xlib/xselection_request_event.rb
155
- - lib/libx11/xlib/xunmap_event.rb
156
- - lib/libx11/xlib/xvisibility_event.rb
142
+ - lib/libx11/xlib/screen.rb
143
+ - lib/libx11/xlib/screen_format.rb
144
+ - lib/libx11/xlib/visual.rb
145
+ - lib/libx11/xlib/x_any_event.rb
146
+ - lib/libx11/xlib/x_arc.rb
147
+ - lib/libx11/xlib/x_button_event.rb
148
+ - lib/libx11/xlib/x_char2b.rb
149
+ - lib/libx11/xlib/x_char_struct.rb
150
+ - lib/libx11/xlib/x_circulate_event.rb
151
+ - lib/libx11/xlib/x_circulate_request_event.rb
152
+ - lib/libx11/xlib/x_client_message_event.rb
153
+ - lib/libx11/xlib/x_color.rb
154
+ - lib/libx11/xlib/x_colormap_event.rb
155
+ - lib/libx11/xlib/x_configure_event.rb
156
+ - lib/libx11/xlib/x_configure_request_event.rb
157
+ - lib/libx11/xlib/x_create_window_event.rb
158
+ - lib/libx11/xlib/x_crossing_event.rb
159
+ - lib/libx11/xlib/x_destroy_window_event.rb
160
+ - lib/libx11/xlib/x_edata_object.rb
161
+ - lib/libx11/xlib/x_error_event.rb
162
+ - lib/libx11/xlib/x_event.rb
163
+ - lib/libx11/xlib/x_expose_event.rb
164
+ - lib/libx11/xlib/x_ext_codes.rb
165
+ - lib/libx11/xlib/x_focus_change_event.rb
166
+ - lib/libx11/xlib/x_font_prop.rb
167
+ - lib/libx11/xlib/x_font_set_extents.rb
168
+ - lib/libx11/xlib/x_font_struct.rb
169
+ - lib/libx11/xlib/x_generic_event.rb
170
+ - lib/libx11/xlib/x_generic_event_cookie.rb
171
+ - lib/libx11/xlib/x_graphics_expose_event.rb
172
+ - lib/libx11/xlib/x_gravity_event.rb
173
+ - lib/libx11/xlib/x_host_address.rb
174
+ - lib/libx11/xlib/x_key_event.rb
175
+ - lib/libx11/xlib/x_keyboard_control.rb
176
+ - lib/libx11/xlib/x_keyboard_state.rb
177
+ - lib/libx11/xlib/x_keymap_event.rb
178
+ - lib/libx11/xlib/x_map_event.rb
179
+ - lib/libx11/xlib/x_map_request_event.rb
180
+ - lib/libx11/xlib/x_mapping_event.rb
181
+ - lib/libx11/xlib/x_modifier_keymap.rb
182
+ - lib/libx11/xlib/x_motion_event.rb
183
+ - lib/libx11/xlib/x_no_expose_event.rb
184
+ - lib/libx11/xlib/x_pixmap_format_values.rb
185
+ - lib/libx11/xlib/x_point.rb
186
+ - lib/libx11/xlib/x_property_event.rb
187
+ - lib/libx11/xlib/x_rectangle.rb
188
+ - lib/libx11/xlib/x_reparent_event.rb
189
+ - lib/libx11/xlib/x_resize_request_event.rb
190
+ - lib/libx11/xlib/x_segment.rb
191
+ - lib/libx11/xlib/x_selection_clear_event.rb
192
+ - lib/libx11/xlib/x_selection_event.rb
193
+ - lib/libx11/xlib/x_selection_request_event.rb
194
+ - lib/libx11/xlib/x_server_interpreted_address.rb
195
+ - lib/libx11/xlib/x_set_window_attributes.rb
196
+ - lib/libx11/xlib/x_text_item.rb
197
+ - lib/libx11/xlib/x_text_item16.rb
198
+ - lib/libx11/xlib/x_time_coord.rb
199
+ - lib/libx11/xlib/x_unmap_event.rb
200
+ - lib/libx11/xlib/x_visibility_event.rb
201
+ - lib/libx11/xlib/x_window_attributes.rb
202
+ - lib/libx11/xlib/x_window_changes.rb
203
+ - lib/libx11/xlib/xgc_values.rb
204
+ - lib/libx11/xlib/xic_callback.rb
205
+ - lib/libx11/xlib/xim_callback.rb
206
+ - lib/libx11/xlib/xim_styles.rb
207
+ - lib/libx11/xlib/xim_values_list.rb
208
+ - lib/libx11/xlib/xmb_text_item.rb
209
+ - lib/libx11/xlib/xom_char_set_list.rb
210
+ - lib/libx11/xlib/xom_font_info.rb
211
+ - lib/libx11/xlib/xom_orientation.rb
212
+ - lib/libx11/xlib/xwc_text_item.rb
157
213
  - libx11.gemspec
158
214
  homepage: https://github.com/k0kubun/libx11-ruby
159
215
  licenses:
@@ -1,23 +0,0 @@
1
- module LibX11
2
- module Xlib
3
- class XKeyEvent < FFI::Struct
4
- layout(
5
- :type, :int,
6
- :serial, :ulong,
7
- :send_event, :Bool,
8
- :display, Display.ptr,
9
- :window, :Window,
10
- :root, :Window,
11
- :subwindow, :Window,
12
- :time, :Time,
13
- :x, :int,
14
- :y, :int,
15
- :x_root, :int,
16
- :y_root, :int,
17
- :state, :uint,
18
- :keycode, :uint,
19
- :same_screen, :Bool,
20
- )
21
- end
22
- end
23
- end
@@ -1,18 +0,0 @@
1
- module LibX11
2
- module Xlib
3
- class XMapRequestEvent < FFI::Struct
4
- layout(
5
- :type, :int,
6
- :serial, :ulong,
7
- :send_event, :Bool,
8
- :display, Display.ptr,
9
- :event, :Window,
10
- :window, :Window,
11
- :parent, :Window,
12
- :x, :int,
13
- :y, :int,
14
- :override_redirect, :Bool,
15
- )
16
- end
17
- end
18
- end