allegro4r 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +58 -0
  3. data/README.txt +94 -0
  4. data/examples/exdbuf.rb +58 -0
  5. data/examples/exfixed.rb +46 -0
  6. data/examples/exflame.rb +200 -0
  7. data/examples/exflip.rb +87 -0
  8. data/examples/exfont.rb +70 -0
  9. data/examples/exhello.rb +46 -0
  10. data/examples/exjoy.rb +206 -0
  11. data/examples/exkeys.rb +216 -0
  12. data/examples/exmem.rb +50 -0
  13. data/examples/exmidi.rb +97 -0
  14. data/examples/exmouse.rb +149 -0
  15. data/examples/expal.rb +70 -0
  16. data/examples/expat.rb +62 -0
  17. data/examples/exsample.rb +89 -0
  18. data/examples/extimer.rb +84 -0
  19. data/examples/unifont.dat +0 -0
  20. data/ext/a4r_API_BITMAP.c +27 -0
  21. data/ext/a4r_API_DIGI_DRIVER.c +14 -0
  22. data/ext/a4r_API_GFX_DRIVER.c +14 -0
  23. data/ext/a4r_API_JOYSTICK_AXIS_INFO.c +53 -0
  24. data/ext/a4r_API_JOYSTICK_BUTTON_INFO.c +27 -0
  25. data/ext/a4r_API_JOYSTICK_DRIVER.c +14 -0
  26. data/ext/a4r_API_JOYSTICK_INFO.c +84 -0
  27. data/ext/a4r_API_JOYSTICK_STICK_INFO.c +62 -0
  28. data/ext/a4r_API_KEYBOARD_DRIVER.c +14 -0
  29. data/ext/a4r_API_MIDI_DRIVER.c +14 -0
  30. data/ext/a4r_API_MOUSE_DRIVER.c +14 -0
  31. data/ext/a4r_API_PALETTE.c +63 -0
  32. data/ext/a4r_API_RGB.c +118 -0
  33. data/ext/a4r_API_TIMER_DRIVER.c +14 -0
  34. data/ext/a4r_API_bitmap_objects.c +310 -0
  35. data/ext/a4r_API_blitting_and_sprites.c +86 -0
  36. data/ext/a4r_API_digital_sample_routines.c +83 -0
  37. data/ext/a4r_API_direct_access_to_video_memory.c +102 -0
  38. data/ext/a4r_API_drawing_primitives.c +114 -0
  39. data/ext/a4r_API_file_and_compression_routines.c +27 -0
  40. data/ext/a4r_API_fixed_point_math_routines.c +98 -0
  41. data/ext/a4r_API_fonts.c +147 -0
  42. data/ext/a4r_API_graphics_modes.c +155 -0
  43. data/ext/a4r_API_joystick_routines.c +213 -0
  44. data/ext/a4r_API_keyboard_routines.c +420 -0
  45. data/ext/a4r_API_misc.c +133 -0
  46. data/ext/a4r_API_mouse_routines.c +220 -0
  47. data/ext/a4r_API_music_routines_midi.c +147 -0
  48. data/ext/a4r_API_palette_routines.c +112 -0
  49. data/ext/a4r_API_sound_init_routines.c +29 -0
  50. data/ext/a4r_API_text_output.c +178 -0
  51. data/ext/a4r_API_timer_routines.c +250 -0
  52. data/ext/a4r_API_transparency_and_patterned_drawing.c +87 -0
  53. data/ext/a4r_API_truecolor_pixel_formats.c +44 -0
  54. data/ext/a4r_API_unicode_routines.c +53 -0
  55. data/ext/a4r_API_using_allegro.c +98 -0
  56. data/ext/allegro4r.c +866 -0
  57. data/ext/allegro4r.h +311 -0
  58. data/ext/extconf.rb +11 -0
  59. metadata +112 -0
@@ -0,0 +1,4 @@
1
+ === 0.0.1 / 2009-04-17
2
+
3
+ * Initial Release.
4
+ * Added Ruby ports and API support for the Allegro examples exhello, exmem, expal, expat, exflame, exdbuf, exflip, exfixed, exfont, exmouse, extimer, exkeys (limited support), exjoy, exsample, and exmidi.
@@ -0,0 +1,58 @@
1
+ ext/a4r_API_BITMAP.c
2
+ ext/a4r_API_bitmap_objects.c
3
+ ext/a4r_API_blitting_and_sprites.c
4
+ ext/a4r_API_digital_sample_routines.c
5
+ ext/a4r_API_DIGI_DRIVER.c
6
+ ext/a4r_API_direct_access_to_video_memory.c
7
+ ext/a4r_API_drawing_primitives.c
8
+ ext/a4r_API_file_and_compression_routines.c
9
+ ext/a4r_API_fixed_point_math_routines.c
10
+ ext/a4r_API_fonts.c
11
+ ext/a4r_API_GFX_DRIVER.c
12
+ ext/a4r_API_graphics_modes.c
13
+ ext/a4r_API_JOYSTICK_AXIS_INFO.c
14
+ ext/a4r_API_JOYSTICK_BUTTON_INFO.c
15
+ ext/a4r_API_JOYSTICK_DRIVER.c
16
+ ext/a4r_API_JOYSTICK_INFO.c
17
+ ext/a4r_API_joystick_routines.c
18
+ ext/a4r_API_JOYSTICK_STICK_INFO.c
19
+ ext/a4r_API_KEYBOARD_DRIVER.c
20
+ ext/a4r_API_keyboard_routines.c
21
+ ext/a4r_API_MIDI_DRIVER.c
22
+ ext/a4r_API_misc.c
23
+ ext/a4r_API_MOUSE_DRIVER.c
24
+ ext/a4r_API_mouse_routines.c
25
+ ext/a4r_API_music_routines_midi.c
26
+ ext/a4r_API_PALETTE.c
27
+ ext/a4r_API_palette_routines.c
28
+ ext/a4r_API_RGB.c
29
+ ext/a4r_API_sound_init_routines.c
30
+ ext/a4r_API_text_output.c
31
+ ext/a4r_API_TIMER_DRIVER.c
32
+ ext/a4r_API_timer_routines.c
33
+ ext/a4r_API_transparency_and_patterned_drawing.c
34
+ ext/a4r_API_truecolor_pixel_formats.c
35
+ ext/a4r_API_unicode_routines.c
36
+ ext/a4r_API_using_allegro.c
37
+ ext/allegro4r.c
38
+ ext/allegro4r.h
39
+ ext/extconf.rb
40
+ examples/exdbuf.rb
41
+ examples/exfixed.rb
42
+ examples/exflame.rb
43
+ examples/exflip.rb
44
+ examples/exfont.rb
45
+ examples/exhello.rb
46
+ examples/exjoy.rb
47
+ examples/exkeys.rb
48
+ examples/exmem.rb
49
+ examples/exmidi.rb
50
+ examples/exmouse.rb
51
+ examples/expal.rb
52
+ examples/expat.rb
53
+ examples/exsample.rb
54
+ examples/extimer.rb
55
+ examples/unifont.dat
56
+ Manifest.txt
57
+ README.txt
58
+ History.txt
@@ -0,0 +1,94 @@
1
+ ______ ___ ___ __ __
2
+ /\ _ \ /\_ \ /\_ \ /\ \\ \
3
+ \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___\ \ \\ \ _ __
4
+ \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ \ \\ \_ /\`'__\
5
+ \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ \__ ,__\ \ \/
6
+ \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/\/_/\_\_/\ \_\
7
+ \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ \/_/ \/_/
8
+ /\____/
9
+ \_/__/ Version 0.0.1
10
+
11
+ = Allegro4r
12
+
13
+ http://allegro4r.rubyforge.org
14
+
15
+ Ruby binding to the Allegro game programming library. <http://alleg.sourceforge.net>
16
+
17
+ == REQUIREMENTS:
18
+
19
+ * Allegro 4.2.2 <http://alleg.sourceforge.net/wip.html>
20
+
21
+ == INSTALL:
22
+
23
+ * Install Allegro 4.2.2
24
+
25
+ Windows:: The easiest way to install Allegro is to download the precompiled binaries found here[http://www.allegro.cc/files/].
26
+ Download the MinGW binary version. For 32 bit Windows, put the files in the System32 directory. For 64 bit Windows, put the files in the SysWOW64 directory.
27
+
28
+ Linux:: For Debian based Linux (e.g. Ubuntu), install the allegro4.2 or liballegro4.2 package: <tt>sudo apt-get install allegro4.2</tt>
29
+ More package information can be found here[http://packages.debian.org/source/lenny/allegro4.2].
30
+
31
+ * <tt>gem install allegro4r</tt>
32
+
33
+ == EXAMPLES:
34
+
35
+ See code examples in the examples directory.
36
+
37
+ == HISTORY:
38
+
39
+ See History.txt
40
+
41
+ == LICENSE:
42
+
43
+ (The MIT License)
44
+
45
+ Copyright (c) 2009 Jason Frey
46
+
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of this software and associated documentation files (the
49
+ 'Software'), to deal in the Software without restriction, including
50
+ without limitation the rights to use, copy, modify, merge, publish,
51
+ distribute, sublicense, and/or sell copies of the Software, and to
52
+ permit persons to whom the Software is furnished to do so, subject to
53
+ the following conditions:
54
+
55
+ The above copyright notice and this permission notice shall be
56
+ included in all copies or substantial portions of the Software.
57
+
58
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
59
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
61
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
62
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
63
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
64
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
65
+
66
+ Except as contained in this notice, the name(s) of the above copyright
67
+ holders shall not be used in advertising or otherwise to promote the
68
+ sale, use, or other dealings in this Software without prior written
69
+ authorization.
70
+
71
+ == ALLEGRO LICENSE:
72
+
73
+ Allegro is gift-ware. It was created by a number of people working in
74
+ cooperation, and is given to you freely as a gift. You may use, modify,
75
+ redistribute, and generally hack it about in any way you like, and you do not
76
+ have to give us anything in return.
77
+
78
+ However, if you like this product you are encouraged to thank us by making a
79
+ return gift to the Allegro community. This could be by writing an add-on
80
+ package, providing a useful bug report, making an improvement to the library,
81
+ or perhaps just releasing the sources of your program so that other people can
82
+ learn from them. If you redistribute parts of this code or make a game using
83
+ it, it would be nice if you mentioned Allegro somewhere in the credits, but
84
+ you are not required to do this. We trust you not to abuse our generosity.
85
+
86
+ By Shawn Hargreaves, 18 October 1998.
87
+
88
+ DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
89
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
90
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT.
91
+ IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE
92
+ LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR
93
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
94
+ OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,58 @@
1
+ #
2
+ # Example program (C Version) for the Allegro library, by Shawn Hargreaves.
3
+ # (Ruby port by Jason Frey)
4
+ #
5
+ # This program demonstrates the use of double buffering.
6
+ # It moves a circle across the screen, first just erasing and
7
+ # redrawing directly to the screen, then with a double buffer.
8
+ #
9
+
10
+ require 'rubygems'
11
+ require 'allegro4r'
12
+ include Allegro4r::API
13
+
14
+ exit 1 if allegro_init != 0
15
+ install_timer
16
+ install_keyboard
17
+
18
+ if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
19
+ if set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0
20
+ set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
21
+ allegro_message("Unable to set any graphic mode\n%s\n" % allegro_error)
22
+ exit 1
23
+ end
24
+ end
25
+
26
+ set_palette(desktop_palette)
27
+
28
+ # allocate the memory buffer
29
+ buffer = create_bitmap(SCREEN_W(), SCREEN_H())
30
+
31
+ # First without any buffering...
32
+ # Note use of the global retrace_counter to control the speed. We also
33
+ # compensate screen size (GFX_SAFE) with a virtual 320 screen width.
34
+ clear_keybuf
35
+ c = retrace_count + 32
36
+ while retrace_count - c <= 320 + 32
37
+ acquire_screen
38
+ clear_to_color(screen, makecol(255, 255, 255))
39
+ circlefill(screen, (retrace_count - c) * SCREEN_W()/320, SCREEN_H()/2, 32, makecol(0, 0, 0))
40
+ textprintf_ex(screen, font, 0, 0, makecol(0, 0, 0), -1, "No buffering (%s)" % gfx_driver.name)
41
+ release_screen
42
+
43
+ break if keypressed
44
+ end
45
+
46
+ # and now with a double buffer...
47
+ clear_keybuf
48
+ c = retrace_count + 32;
49
+ while retrace_count - c <= 320 + 32
50
+ clear_to_color(buffer, makecol(255, 255, 255))
51
+ circlefill(buffer, (retrace_count - c) * SCREEN_W()/320, SCREEN_H()/2, 32, makecol(0, 0, 0))
52
+ textprintf_ex(buffer, font, 0, 0, makecol(0, 0, 0), -1, "Double buffered (%s)" % gfx_driver.name)
53
+ blit(buffer, screen, 0, 0, 0, 0, SCREEN_W(), SCREEN_H())
54
+
55
+ break if keypressed
56
+ end
57
+
58
+ destroy_bitmap(buffer)
@@ -0,0 +1,46 @@
1
+ #
2
+ # Example program (C Version) for the Allegro library, by Shawn Hargreaves.
3
+ # (Ruby port by Jason Frey)
4
+ #
5
+ # This program demonstrates how to use fixed point numbers, which
6
+ # are signed 32-bit integers storing the integer part in the
7
+ # upper 16 bits and the decimal part in the 16 lower bits. This
8
+ # example also uses the unusual approach of communicating with
9
+ # the user exclusively via the allegro_message() function.
10
+ #
11
+
12
+ require 'rubygems'
13
+ require 'allegro4r'
14
+ include Allegro4r::API
15
+
16
+ exit 1 if allegro_init != 0
17
+
18
+ # convert integers to fixed point like this
19
+ x = itofix(10)
20
+
21
+ # convert floating point to fixed point like this
22
+ y = ftofix(3.14)
23
+
24
+ # fixed point variables can be assigned, added, subtracted, negated,
25
+ # and compared just like integers, eg:
26
+ z = x + y
27
+ allegro_message("%f + %f = %f\n" % [fixtof(x), fixtof(y), fixtof(z)])
28
+
29
+ # you can't add integers or floating point to fixed point, though:
30
+ # z = x + 3
31
+ # would give the wrong result.
32
+
33
+ # fixed point variables can be multiplied or divided by integers or
34
+ # floating point numbers, eg:
35
+ z = y * 2
36
+ allegro_message("%f * 2 = %f\n" % [fixtof(y), fixtof(z)])
37
+
38
+ # you can't multiply or divide two fixed point numbers, though:
39
+ # z = x * y;
40
+ # would give the wrong result. Use fixmul() and fixdiv() instead, eg:
41
+ z = fixmul(x, y)
42
+ allegro_message("%f * %f = %f\n" % [fixtof(x), fixtof(y), fixtof(z)])
43
+
44
+ # fixed point trig and square root are also available, eg:
45
+ z = fixsqrt(x)
46
+ allegro_message("fixsqrt(%f) = %f\n" % [fixtof(x), fixtof(z)])
@@ -0,0 +1,200 @@
1
+ #
2
+ # Example program (C Version) for the Allegro library, by Shawn Hargreaves.
3
+ # (Ruby port by Jason Frey)
4
+ #
5
+ # This program demonstrates how to write directly to video memory.
6
+ # It implements a simple fire effect, first by calling getpixel() and
7
+ # putpixel(), then by accessing video memory directly a byte at a
8
+ # time, and finally using block memory copy operations.
9
+ #
10
+
11
+ require 'rubygems'
12
+ require 'allegro4r'
13
+ include Allegro4r::API
14
+
15
+ # The fire is formed from several 'hotspots' which are moved randomly
16
+ # across the bottom of the screen.
17
+ FIRE_HOTSPOTS = 48
18
+ $hotspot = Array.new(FIRE_HOTSPOTS, 0)
19
+
20
+ # This function updates the bottom line of the screen with a pattern
21
+ # of varying intensities which are then moved upwards and faded out
22
+ # by the code in main.
23
+ def draw_bottom_line_of_fire
24
+ # zero the buffer
25
+ (0...SCREEN_W()).each do |c|
26
+ $temp[c] = 0
27
+ end
28
+
29
+ (0...FIRE_HOTSPOTS).each do |c|
30
+ ($hotspot[c] - 20...$hotspot[c] + 20).each do |c2|
31
+ if c2 >= 0 && c2 < SCREEN_W()
32
+ $temp[c2] = MIN($temp[c2] + 20 - ABS($hotspot[c] - c2), 192)
33
+ end
34
+ end
35
+
36
+ # move the hotspots
37
+ $hotspot[c] += (AL_RAND() & 7) - 3
38
+ if $hotspot[c] < 0
39
+ $hotspot[c] += SCREEN_W()
40
+ elsif $hotspot[c] >= SCREEN_W()
41
+ $hotspot[c] -= SCREEN_W()
42
+ end
43
+ end
44
+
45
+ # display the buffer
46
+ (0...SCREEN_W()).each do |c|
47
+ putpixel(screen, c, SCREEN_H() - 1, $temp[c])
48
+ end
49
+ end
50
+
51
+ palette = PALETTE.new
52
+
53
+ exit 1 if allegro_init != 0
54
+ install_keyboard
55
+ if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
56
+ if set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0
57
+ allegro_message("Error setting graphics mode\n%s\n" % allegro_error)
58
+ exit 1
59
+ end
60
+ end
61
+
62
+ begin
63
+ $temp = "\0" * SCREEN_W()
64
+ rescue NoMemoryError
65
+ set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
66
+ allegro_message("Not enough memory? This is a joke right!?!\n")
67
+ exit 0
68
+ end
69
+
70
+ (0...FIRE_HOTSPOTS).each do |c|
71
+ $hotspot[c] = AL_RAND() % SCREEN_W()
72
+ end
73
+
74
+ # fill our palette with a gradually altering sequence of colors
75
+ (0...64).each do |c|
76
+ palette[c].r = c;
77
+ palette[c].g = 0;
78
+ palette[c].b = 0;
79
+ end
80
+ (64...128).each do |c|
81
+ palette[c].r = 63;
82
+ palette[c].g = c - 64;
83
+ palette[c].b = 0;
84
+ end
85
+ (128...192).each do |c|
86
+ palette[c].r = 63;
87
+ palette[c].g = 63;
88
+ palette[c].b = c - 128;
89
+ end
90
+ (192...256).each do |c|
91
+ palette[c].r = 63;
92
+ palette[c].g = 63;
93
+ palette[c].b = 63;
94
+ end
95
+
96
+ set_palette(palette)
97
+
98
+ textout_ex(screen, font, "Using get/putpixel", 0, 0, makecol(255,255,255), makecol(0, 0, 0))
99
+
100
+ # using getpixel and putpixel is slow :-)
101
+ while !keypressed
102
+ acquire_screen
103
+
104
+ draw_bottom_line_of_fire
105
+
106
+ (64...SCREEN_H() - 1).each do |y|
107
+ # read line
108
+ (0...SCREEN_W()).each do |x|
109
+ c = getpixel(screen, x, y + 1)
110
+
111
+ c -= 1 if c > 0
112
+
113
+ putpixel(screen, x, y, c)
114
+ end
115
+ end
116
+ release_screen
117
+ end
118
+
119
+ clear_keybuf
120
+ textout_ex(screen, font, "Using direct memory writes", 0, 0, makecol(255,255,255), makecol(0, 0, 0))
121
+
122
+ # It is much faster if we access the screen memory directly. This
123
+ # time we read an entire line of the screen into our own buffer,
124
+ # modify it there, and then write the whole line back in one go.
125
+ # That is to avoid having to keep switching back and forth between
126
+ # different scanlines: if we only copied one pixel at a time, we
127
+ # would have to call bmp_write_line for every single pixel rather
128
+ # than just twice per line.
129
+ while !keypressed
130
+ acquire_screen
131
+ draw_bottom_line_of_fire
132
+
133
+ bmp_select(screen)
134
+
135
+ (64...SCREEN_H() - 1).each do |y|
136
+ # get an address for reading line y+1
137
+ address = bmp_read_line(screen, y + 1)
138
+
139
+ # read line with farptr functions
140
+ (0...SCREEN_W()).each do |x|
141
+ $temp[x] = bmp_read8(address + x)
142
+ end
143
+
144
+ # adjust it
145
+ (0...SCREEN_W()).each do |x|
146
+ $temp[x] -= 1 if $temp[x] > 0
147
+ end
148
+
149
+ # get an address for writing line y
150
+ address = bmp_write_line(screen, y)
151
+
152
+ # write line with farptr functions
153
+ (0...SCREEN_W()).each do |x|
154
+ bmp_write8(address + x, $temp[x,1])
155
+ end
156
+ end
157
+
158
+ bmp_unwrite_line(screen)
159
+ release_screen
160
+ end
161
+
162
+ clear_keybuf
163
+ textout_ex(screen, font, "Using block data transfers", 0, 0, makecol(255,255,255), makecol(0, 0, 0))
164
+
165
+ # It is even faster if we transfer the data in 32 bit chunks, rather
166
+ # than only one pixel at a time. This method may not work on really
167
+ # unusual machine architectures, but should be ok on just about
168
+ # anything that you are practically likely to come across.
169
+ while !keypressed
170
+ acquire_screen
171
+ draw_bottom_line_of_fire
172
+
173
+ bmp_select(screen)
174
+
175
+ (64...SCREEN_H() - 1).each do |y|
176
+ # get an address for reading line y+1
177
+ address = bmp_read_line(screen, y + 1)
178
+
179
+ # read line in 32 bit chunks
180
+ (0...SCREEN_W()).step(4) do |x| # JF - sizeof(uint32_t)
181
+ $temp[x...x + 4] = bmp_read32(address + x)
182
+ end
183
+
184
+ # adjust it
185
+ (0...SCREEN_W()).each do |x|
186
+ $temp[x] -= 1 if $temp[x] > 0
187
+ end
188
+
189
+ # get an address for writing line y
190
+ address = bmp_write_line(screen, y)
191
+
192
+ # write line in 32 bit chunks
193
+ (0...SCREEN_W()).step(4) do |x| # JF - sizeof(uint32_t)
194
+ bmp_write32(address + x, $temp[x...x + 4])
195
+ end
196
+ end
197
+
198
+ bmp_unwrite_line(screen)
199
+ release_screen
200
+ end