note
	description: "A virtual keyboard key."
	author: "Louis Marchand"
	date: "Sun, 30 Apr 2017 15:08:50 +0000"
	revision: "2.1"

deferred class 
	GAME_VIRTUAL_KEY

feature {NONE} -- Initialization

	default_create
			-- Process instances of classes with no creation clause.
			-- (Default: do nothing.)
			-- (from ANY)
		do
		end
	
feature -- Access

	generating_type: TYPE [detachable GAME_VIRTUAL_KEY]
			-- Type of current object
			-- (type of which it is a direct instance)
			-- (from ANY)
		external
			"built_in"
		ensure -- from ANY
			generating_type_not_void: Result /= Void
		end

	generator: STRING_8
			-- Name of current object's generating class
			-- (base class of the type of which it is a direct instance)
			-- (from ANY)
		external
			"built_in"
		ensure -- from ANY
			generator_not_void: Result /= Void
			generator_not_empty: not Result.is_empty
		end

	is_0: BOOLEAN
			-- Current represent the 0 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_0
		end

	is_1: BOOLEAN
			-- Current represent the 1 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_1
		end

	is_2: BOOLEAN
			-- Current represent the 2 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_2
		end

	is_3: BOOLEAN
			-- Current represent the 3 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_3
		end

	is_4: BOOLEAN
			-- Current represent the 4 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_4
		end

	is_5: BOOLEAN
			-- Current represent the 5 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_5
		end

	is_6: BOOLEAN
			-- Current represent the 6 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_6
		end

	is_7: BOOLEAN
			-- Current represent the 7 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_7
		end

	is_8: BOOLEAN
			-- Current represent the 8 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_8
		end

	is_9: BOOLEAN
			-- Current represent the 9 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_9
		end

	is_a: BOOLEAN
			-- Current represent the A key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_a
		end

	is_again: BOOLEAN
			-- Current represent the again key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_again
		end

	is_ampersand: BOOLEAN
			-- Current represent the ampersand key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ampersand
		end

	is_application: BOOLEAN
			-- Current represent the application key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_application
		end

	is_application_control_back: BOOLEAN
			-- Current represent the back key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_back
		end

	is_application_control_bookmarks: BOOLEAN
			-- Current represent the bookmarks key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_bookmarks
		end

	is_application_control_forward: BOOLEAN
			-- Current represent the forward key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_forward
		end

	is_application_control_home: BOOLEAN
			-- Current represent the home key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_home
		end

	is_application_control_refresh: BOOLEAN
			-- Current represent the refresh key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_refresh
		end

	is_application_control_search: BOOLEAN
			-- Current represent the search key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_search
		end

	is_application_control_stop: BOOLEAN
			-- Current represent the stop key of the application control keyboard section
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ac_stop
		end

	is_as400_keypad_equals: BOOLEAN
			-- Current represent the key pad equals key for as400 keyboard
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_equalsas400
		end

	is_asterisk: BOOLEAN
			-- Current represent the asterisk key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_asterisk
		end

	is_at: BOOLEAN
			-- Current represent the at key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_at
		end

	is_audio_mute: BOOLEAN
			-- Current represent the audio mute key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_audiomute
		end

	is_audio_next: BOOLEAN
			-- Current represent the audio_next key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_audionext
		end

	is_audio_play: BOOLEAN
			-- Current represent the audio play key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_audioplay
		end

	is_audio_prev: BOOLEAN
			-- Current represent the audio prev key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_audioprev
		end

	is_audio_stop: BOOLEAN
			-- Current represent the audio stop key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_audiostop
		end

	is_b: BOOLEAN
			-- Current represent the B key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_b
		end

	is_backquote: BOOLEAN
			-- Current represent the backquote key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_backquote
		end

	is_backslash: BOOLEAN
			-- Current represent the backslash key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_backslash
		end

	is_backspace: BOOLEAN
			-- Current represent the backspace key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_backspace
		end

	is_brightness_up: BOOLEAN
			-- Current represent the brightness up key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_brightnessup
		end

	is_brightnessdown: BOOLEAN
			-- Current represent the brightnessdown key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_brightnessdown
		end

	is_c: BOOLEAN
			-- Current represent the C key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_c
		end

	is_calculator: BOOLEAN
			-- Current represent the calculator key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_calculator
		end

	is_cancel: BOOLEAN
			-- Current represent the cancel key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_cancel
		end

	is_caps_lock: BOOLEAN
			-- Current represent the caps lock key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_capslock
		end

	is_caret: BOOLEAN
			-- Current represent the caret key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_caret
		end

	is_clear: BOOLEAN
			-- Current represent the clear key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_clear
		end

	is_clear_again: BOOLEAN
			-- Current represent the clear again key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_clearagain
		end

	is_colon: BOOLEAN
			-- Current represent the colon key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_colon
		end

	is_comma: BOOLEAN
			-- Current represent the comma key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_comma
		end

	is_computer: BOOLEAN
			-- Current represent the computer key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_computer
		end

	is_copy: BOOLEAN
			-- Current represent the copy key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_copy
		end

	is_crsel: BOOLEAN
			-- Current represent the crsel key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_crsel
		end

	is_currency_sub_unit: BOOLEAN
			-- Current represent the currency sub unit key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_currencysubunit
		end

	is_currency_unit: BOOLEAN
			-- Current represent the currency unit key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_currencyunit
		end

	is_cut: BOOLEAN
			-- Current represent the cut key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_cut
		end

	is_d: BOOLEAN
			-- Current represent the D key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_d
		end

	is_decimal_separator: BOOLEAN
			-- Current represent the decimal separator key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_decimalseparator
		end

	is_delete: BOOLEAN
			-- Current represent the delete key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_delete
		end

	is_display_switch: BOOLEAN
			-- Current represent the display switch key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_displayswitch
		end

	is_dollar: BOOLEAN
			-- Current represent the dollar key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_dollar
		end

	is_double_quote: BOOLEAN
			-- Current represent the double quote key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_quotedbl
		end

	is_down: BOOLEAN
			-- Current represent the down key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_down
		end

	is_e: BOOLEAN
			-- Current represent the E key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_e
		end

	is_eject: BOOLEAN
			-- Current represent the eject key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_eject
		end

	is_end: BOOLEAN
			-- Current represent the end key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_end
		end

	is_equals: BOOLEAN
			-- Current represent the equals key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_equals
		end

	is_erase_eaze_alternate_erase: BOOLEAN
			-- Current represent the alternate erase key for Erase Eaze keyboard
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_alterase
		end

	is_escape: BOOLEAN
			-- Current represent the escape key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_escape
		end

	is_exclaim: BOOLEAN
			-- Current represent the exclaim key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_exclaim
		end

	is_execute: BOOLEAN
			-- Current represent the execute key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_execute
		end

	is_exsel: BOOLEAN
			-- Current represent the exsel key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_exsel
		end

	is_f: BOOLEAN
			-- Current represent the F key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f
		end

	is_f1: BOOLEAN
			-- Current represent the f1 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f1
		end

	is_f10: BOOLEAN
			-- Current represent the f10 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f10
		end

	is_f11: BOOLEAN
			-- Current represent the f11 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f11
		end

	is_f12: BOOLEAN
			-- Current represent the f12 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f12
		end

	is_f13: BOOLEAN
			-- Current represent the f13 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f13
		end

	is_f14: BOOLEAN
			-- Current represent the f14 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f14
		end

	is_f15: BOOLEAN
			-- Current represent the f15 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f15
		end

	is_f16: BOOLEAN
			-- Current represent the f16 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f16
		end

	is_f17: BOOLEAN
			-- Current represent the f17 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f17
		end

	is_f18: BOOLEAN
			-- Current represent the f18 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f18
		end

	is_f19: BOOLEAN
			-- Current represent the f19 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f19
		end

	is_f2: BOOLEAN
			-- Current represent the f2 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f2
		end

	is_f20: BOOLEAN
			-- Current represent the f20 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f20
		end

	is_f21: BOOLEAN
			-- Current represent the f21 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f21
		end

	is_f22: BOOLEAN
			-- Current represent the f22 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f22
		end

	is_f23: BOOLEAN
			-- Current represent the f23 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f23
		end

	is_f24: BOOLEAN
			-- Current represent the f24 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f24
		end

	is_f3: BOOLEAN
			-- Current represent the f3 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f3
		end

	is_f4: BOOLEAN
			-- Current represent the f4 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f4
		end

	is_f5: BOOLEAN
			-- Current represent the f5 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f5
		end

	is_f6: BOOLEAN
			-- Current represent the f6 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f6
		end

	is_f7: BOOLEAN
			-- Current represent the f7 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f7
		end

	is_f8: BOOLEAN
			-- Current represent the f8 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f8
		end

	is_f9: BOOLEAN
			-- Current represent the f9 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_f9
		end

	is_find: BOOLEAN
			-- Current represent the find key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_find
		end

	is_g: BOOLEAN
			-- Current represent the G key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_g
		end

	is_greater: BOOLEAN
			-- Current represent the greater key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_greater
		end

	is_h: BOOLEAN
			-- Current represent the H key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_h
		end

	is_hash: BOOLEAN
			-- Current represent the hash key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_hash
		end

	is_help: BOOLEAN
			-- Current represent the help key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_help
		end

	is_home: BOOLEAN
			-- Current represent the home key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_home
		end

	is_i: BOOLEAN
			-- Current represent the I key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_i
		end

	is_insert: BOOLEAN
			-- Current represent the insert key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_insert
		end

	is_j: BOOLEAN
			-- Current represent the J key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_j
		end

	is_k: BOOLEAN
			-- Current represent the K key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_k
		end

	is_keyboard_illumination_down: BOOLEAN
			-- Current represent the keyboard illumination down key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kbdillumdown
		end

	is_keyboard_illumination_toggle: BOOLEAN
			-- Current represent the keyboard illumination toggle key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kbdillumtoggle
		end

	is_keyboard_illuminationup: BOOLEAN
			-- Current represent the keyboard illumination up key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kbdillumup
		end

	is_keypad_0: BOOLEAN
			-- Current represent the key pad 0 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_0
		end

	is_keypad_00: BOOLEAN
			-- Current represent the key pad 00 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_00
		end

	is_keypad_000: BOOLEAN
			-- Current represent the key pad 000 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_000
		end

	is_keypad_1: BOOLEAN
			-- Current represent the key pad 1 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_1
		end

	is_keypad_2: BOOLEAN
			-- Current represent the key pad 2 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_2
		end

	is_keypad_3: BOOLEAN
			-- Current represent the key pad 3 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_3
		end

	is_keypad_4: BOOLEAN
			-- Current represent the key pad 4 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_4
		end

	is_keypad_5: BOOLEAN
			-- Current represent the key pad 5 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_5
		end

	is_keypad_6: BOOLEAN
			-- Current represent the key pad 6 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_6
		end

	is_keypad_7: BOOLEAN
			-- Current represent the key pad 7 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_7
		end

	is_keypad_8: BOOLEAN
			-- Current represent the key pad 8 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_8
		end

	is_keypad_9: BOOLEAN
			-- Current represent the key pad 9 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_9
		end

	is_keypad_a: BOOLEAN
			-- Current represent the key pad a key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_a
		end

	is_keypad_ampersand: BOOLEAN
			-- Current represent the key pad ampersand key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_ampersand
		end

	is_keypad_at: BOOLEAN
			-- Current represent the key pad at key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_at
		end

	is_keypad_b: BOOLEAN
			-- Current represent the key pad b key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_b
		end

	is_keypad_backspace: BOOLEAN
			-- Current represent the key pad backspace key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_backspace
		end

	is_keypad_binary: BOOLEAN
			-- Current represent the key pad binary key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_binary
		end

	is_keypad_c: BOOLEAN
			-- Current represent the key pad c key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_c
		end

	is_keypad_clear: BOOLEAN
			-- Current represent the key pad clear key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_clear
		end

	is_keypad_clear_entry: BOOLEAN
			-- Current represent the key pad clear entry key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_clearentry
		end

	is_keypad_colon: BOOLEAN
			-- Current represent the key pad colon key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_colon
		end

	is_keypad_comma: BOOLEAN
			-- Current represent the key pad comma key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_comma
		end

	is_keypad_d: BOOLEAN
			-- Current represent the key pad d key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_d
		end

	is_keypad_decimal: BOOLEAN
			-- Current represent the key pad decimal key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_decimal
		end

	is_keypad_divide: BOOLEAN
			-- Current represent the key pad divide key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_divide
		end

	is_keypad_double_ampersand: BOOLEAN
			-- Current represent the key pad double ampersand key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_dblampersand
		end

	is_keypad_double_vertical_bar: BOOLEAN
			-- Current represent the key pad double vertical bar key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_dblverticalbar
		end

	is_keypad_e: BOOLEAN
			-- Current represent the key pad e key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_e
		end

	is_keypad_enter: BOOLEAN
			-- Current represent the key pad enter key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_enter
		end

	is_keypad_exclamation_mark: BOOLEAN
			-- Current represent the key pad exclamation mark key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_exclam
		end

	is_keypad_f: BOOLEAN
			-- Current represent the key pad f key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_f
		end

	is_keypad_greater: BOOLEAN
			-- Current represent the key pad greater key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_greater
		end

	is_keypad_hash: BOOLEAN
			-- Current represent the key pad hash key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_hash
		end

	is_keypad_hexadecimal: BOOLEAN
			-- Current represent the key pad hexadecimal key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_hexadecimal
		end

	is_keypad_left_brace: BOOLEAN
			-- Current represent the key pad left brace key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_leftbrace
		end

	is_keypad_left_parenthesis: BOOLEAN
			-- Current represent the key pad left parenthesis key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_leftparen
		end

	is_keypad_less: BOOLEAN
			-- Current represent the key pad less key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_less
		end

	is_keypad_mem_add: BOOLEAN
			-- Current represent the key pad mem add key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memadd
		end

	is_keypad_mem_clear: BOOLEAN
			-- Current represent the key pad mem clear key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memclear
		end

	is_keypad_mem_divide: BOOLEAN
			-- Current represent the key pad mem divide key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memdivide
		end

	is_keypad_mem_multiply: BOOLEAN
			-- Current represent the key pad mem multiply key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memmultiply
		end

	is_keypad_mem_recall: BOOLEAN
			-- Current represent the key pad mem recall key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memrecall
		end

	is_keypad_mem_store: BOOLEAN
			-- Current represent the key pad mem store key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memstore
		end

	is_keypad_mem_subtract: BOOLEAN
			-- Current represent the key pad mem subtract key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_memsubtract
		end

	is_keypad_minus: BOOLEAN
			-- Current represent the key pad minus key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_minus
		end

	is_keypad_multiply: BOOLEAN
			-- Current represent the key pad multiply key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_multiply
		end

	is_keypad_octal: BOOLEAN
			-- Current represent the key pad octal key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_octal
		end

	is_keypad_percent: BOOLEAN
			-- Current represent the key pad percent key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_percent
		end

	is_keypad_period: BOOLEAN
			-- Current represent the key pad period key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_period
		end

	is_keypad_plus: BOOLEAN
			-- Current represent the key pad plus key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_plus
		end

	is_keypad_plus_minus: BOOLEAN
			-- Current represent the key pad plus minus key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_plusminus
		end

	is_keypad_power: BOOLEAN
			-- Current represent the key pad power key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_power
		end

	is_keypad_right_brace: BOOLEAN
			-- Current represent the key pad right brace key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_rightbrace
		end

	is_keypad_right_parenthesis: BOOLEAN
			-- Current represent the key pad right parenthesis key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_rightparen
		end

	is_keypad_space: BOOLEAN
			-- Current represent the key pad space key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_space
		end

	is_keypad_tab: BOOLEAN
			-- Current represent the key pad tab key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_tab
		end

	is_keypad_vertical_bar: BOOLEAN
			-- Current represent the key pad vertical bar key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_verticalbar
		end

	is_keypad_xor: BOOLEAN
			-- Current represent the key pad xor key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_xor
		end

	is_kp_equals: BOOLEAN
			-- Current represent the kp_equals key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_kp_equals
		end

	is_l: BOOLEAN
			-- Current represent the L key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_l
		end

	is_left: BOOLEAN
			-- Current represent the left key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_left
		end

	is_left_alt: BOOLEAN
			-- Current represent the left alt key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_lalt
		end

	is_left_bracket: BOOLEAN
			-- Current represent the leftbracket key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_leftbracket
		end

	is_left_ctrl: BOOLEAN
			-- Current represent the left ctrl key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_lctrl
		end

	is_left_gui: BOOLEAN
			-- Current represent the left gui key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_lgui
		end

	is_left_parenthesis: BOOLEAN
			-- Current represent the left parenthesis key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_leftparen
		end

	is_left_shift: BOOLEAN
			-- Current represent the left shift key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_lshift
		end

	is_less: BOOLEAN
			-- Current represent the less key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_less
		end

	is_m: BOOLEAN
			-- Current represent the M key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_m
		end

	is_mail: BOOLEAN
			-- Current represent the mail key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_mail
		end

	is_media_select: BOOLEAN
			-- Current represent the media select key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_mediaselect
		end

	is_menu: BOOLEAN
			-- Current represent the menu key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_menu
		end

	is_minus: BOOLEAN
			-- Current represent the minus key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_minus
		end

	is_mode: BOOLEAN
			-- Current represent the mode key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_mode
		end

	is_mute: BOOLEAN
			-- Current represent the mute key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_mute
		end

	is_n: BOOLEAN
			-- Current represent the N key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_n
		end

	is_numlock_clear: BOOLEAN
			-- Current represent the numlock clear key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_numlockclear
		end

	is_o: BOOLEAN
			-- Current represent the O key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_o
		end

	is_oper: BOOLEAN
			-- Current represent the oper key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_oper
		end

	is_out: BOOLEAN
			-- Current represent the out key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_out
		end

	is_p: BOOLEAN
			-- Current represent the P key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_p
		end

	is_page_down: BOOLEAN
			-- Current represent the page down key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_pagedown
		end

	is_page_up: BOOLEAN
			-- Current represent the page up key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_pageup
		end

	is_paste: BOOLEAN
			-- Current represent the paste key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_paste
		end

	is_pause: BOOLEAN
			-- Current represent the pause key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_pause
		end

	is_percent: BOOLEAN
			-- Current represent the percent key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_percent
		end

	is_period: BOOLEAN
			-- Current represent the period key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_period
		end

	is_plus: BOOLEAN
			-- Current represent the plus key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_plus
		end

	is_power: BOOLEAN
			-- Current represent the power key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_power
		end

	is_print_screen: BOOLEAN
			-- Current represent the print screen key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_printscreen
		end

	is_prior: BOOLEAN
			-- Current represent the prior key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_prior
		end

	is_q: BOOLEAN
			-- Current represent the Q key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_q
		end

	is_question_mark: BOOLEAN
			-- Current represent the question mark key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_question
		end

	is_quote: BOOLEAN
			-- Current represent the quote key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_quote
		end

	is_r: BOOLEAN
			-- Current represent the R key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_r
		end

	is_return: BOOLEAN
			-- Current represent the return key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_return
		end

	is_return2: BOOLEAN
			-- Current represent the return2 key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_return2
		end

	is_right: BOOLEAN
			-- Current represent the right key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_right
		end

	is_right_alt: BOOLEAN
			-- Current represent the right alt key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_ralt
		end

	is_right_bracket: BOOLEAN
			-- Current represent the right bracket key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_rightbracket
		end

	is_right_ctrl: BOOLEAN
			-- Current represent the right ctrl key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_rctrl
		end

	is_right_gui: BOOLEAN
			-- Current represent the right gui key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_rgui
		end

	is_right_parenthesis: BOOLEAN
			-- Current represent the right parenthesis key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_rightparen
		end

	is_right_shift: BOOLEAN
			-- Current represent the right shift key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_rshift
		end

	is_s: BOOLEAN
			-- Current represent the S key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_s
		end

	is_scroll_lock: BOOLEAN
			-- Current represent the scroll lock key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_scrolllock
		end

	is_select: BOOLEAN
			-- Current represent the select key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_select
		end

	is_semicolon: BOOLEAN
			-- Current represent the semicolon key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_semicolon
		end

	is_separator: BOOLEAN
			-- Current represent the separator key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_separator
		end

	is_slash: BOOLEAN
			-- Current represent the slash key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_slash
		end

	is_sleep: BOOLEAN
			-- Current represent the sleep key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_sleep
		end

	is_space: BOOLEAN
			-- Current represent the space key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_space
		end

	is_stop: BOOLEAN
			-- Current represent the stop key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_stop
		end

	is_sysreq: BOOLEAN
			-- Current represent the sysreq key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_sysreq
		end

	is_t: BOOLEAN
			-- Current represent the T key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_t
		end

	is_tab: BOOLEAN
			-- Current represent the tab key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_tab
		end

	is_thousands_separator: BOOLEAN
			-- Current represent the thousands separator key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_thousandsseparator
		end

	is_u: BOOLEAN
			-- Current represent the U key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_u
		end

	is_underscore: BOOLEAN
			-- Current represent the underscore key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_underscore
		end

	is_undo: BOOLEAN
			-- Current represent the undo key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_undo
		end

	is_unknown: BOOLEAN
			-- Current is not a valid key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_unknown
		end

	is_up: BOOLEAN
			-- Current represent the up key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_up
		end

	is_v: BOOLEAN
			-- Current represent the V key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_v
		end

	is_volume_down: BOOLEAN
			-- Current represent the volume down key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_volumedown
		end

	is_volume_up: BOOLEAN
			-- Current represent the volume up key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_volumeup
		end

	is_w: BOOLEAN
			-- Current represent the W key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_w
		end

	is_www: BOOLEAN
			-- Current represent the www key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_www
		end

	is_x: BOOLEAN
			-- Current represent the X key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_x
		end

	is_y: BOOLEAN
			-- Current represent the Y key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_y
		end

	is_z: BOOLEAN
			-- Current represent the Z key
		do
			Result := virtual_code = {GAME_SDL_VIRTUAL_KEY}.sdlk_z
		end

	virtual_code: INTEGER_32
			-- Code of the key using the virtual layout keyboard
			-- (should be compatible between systems)
		deferred
		end
	
feature -- Comparison

	frozen deep_equal (a: detachable ANY; b: like arg #1): BOOLEAN
			-- Are a and b either both void
			-- or attached to isomorphic object structures?
			-- (from ANY)
		do
			if a = Void then
				Result := b = Void
			else
				Result := b /= Void and then a.is_deep_equal (b)
			end
		ensure -- from ANY
			instance_free: class
			shallow_implies_deep: standard_equal (a, b) implies Result
			both_or_none_void: (a = Void) implies (Result = (b = Void))
			same_type: (Result and (a /= Void)) implies (b /= Void and then a.same_type (b))
			symmetric: Result implies deep_equal (b, a)
		end

	frozen equal (a: detachable ANY; b: like arg #1): BOOLEAN
			-- Are a and b either both void or attached
			-- to objects considered equal?
			-- (from ANY)
		do
			if a = Void then
				Result := b = Void
			else
				Result := b /= Void and then a.is_equal (b)
			end
		ensure -- from ANY
			instance_free: class
			definition: Result = (a = Void and b = Void) or else ((a /= Void and b /= Void) and then a.is_equal (b))
		end

	frozen is_deep_equal alias "≡≡≡" (other: GAME_VIRTUAL_KEY): BOOLEAN
			-- Are Current and other attached to isomorphic object structures?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		external
			"built_in"
		ensure -- from ANY
			shallow_implies_deep: standard_is_equal (other) implies Result
			same_type: Result implies same_type (other)
			symmetric: Result implies other.is_deep_equal (Current)
		end

	is_equal (other: GAME_VIRTUAL_KEY): BOOLEAN
			-- Is other attached to an object considered
			-- equal to current object?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		external
			"built_in"
		ensure -- from ANY
			symmetric: Result implies other ~ Current
			consistent: standard_is_equal (other) implies Result
		end

	frozen standard_equal (a: detachable ANY; b: like arg #1): BOOLEAN
			-- Are a and b either both void or attached to
			-- field-by-field identical objects of the same type?
			-- Always uses default object comparison criterion.
			-- (from ANY)
		do
			if a = Void then
				Result := b = Void
			else
				Result := b /= Void and then a.standard_is_equal (b)
			end
		ensure -- from ANY
			instance_free: class
			definition: Result = (a = Void and b = Void) or else ((a /= Void and b /= Void) and then a.standard_is_equal (b))
		end

	frozen standard_is_equal alias "" (other: GAME_VIRTUAL_KEY): BOOLEAN
			-- Is other attached to an object of the same type
			-- as current object, and field-by-field identical to it?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		external
			"built_in"
		ensure -- from ANY
			same_type: Result implies same_type (other)
			symmetric: Result implies other.standard_is_equal (Current)
		end
	
feature -- Status report

	conforms_to (other: ANY): BOOLEAN
			-- Does type of current object conform to type
			-- of other (as per Eiffel: The Language, chapter 13)?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		external
			"built_in"
		end

	same_type (other: ANY): BOOLEAN
			-- Is type of current object identical to type of other?
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		external
			"built_in"
		ensure -- from ANY
			definition: Result = (conforms_to (other) and other.conforms_to (Current))
		end
	
feature -- Duplication

	frozen clone (other: detachable ANY): like other
		obsolete "Use `twin' instead. [2017-05-31]"
			-- Void if other is void; otherwise new object
			-- equal to other
			--
			-- For non-void other, clone calls copy;
			-- to change copying/cloning semantics, redefine copy.
			-- (from ANY)
		do
			if other /= Void then
				Result := other.twin
			end
		ensure -- from ANY
			instance_free: class
			equal: Result ~ other
		end

	copy (other: GAME_VIRTUAL_KEY)
			-- Update current object using fields of object attached
			-- to other, so as to yield equal objects.
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
			type_identity: same_type (other)
		external
			"built_in"
		ensure -- from ANY
			is_equal: Current ~ other
		end

	frozen deep_clone (other: detachable ANY): like other
		obsolete "Use `deep_twin' instead. [2017-05-31]"
			-- Void if other is void: otherwise, new object structure
			-- recursively duplicated from the one attached to other
			-- (from ANY)
		do
			if other /= Void then
				Result := other.deep_twin
			end
		ensure -- from ANY
			instance_free: class
			deep_equal: deep_equal (other, Result)
		end

	frozen deep_copy (other: GAME_VIRTUAL_KEY)
			-- Effect equivalent to that of:
			--		copy (other . deep_twin)
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
		do
			copy (other.deep_twin)
		ensure -- from ANY
			deep_equal: deep_equal (Current, other)
		end

	frozen deep_twin: GAME_VIRTUAL_KEY
			-- New object structure recursively duplicated from Current.
			-- (from ANY)
		external
			"built_in"
		ensure -- from ANY
			deep_twin_not_void: Result /= Void
			deep_equal: deep_equal (Current, Result)
		end

	frozen standard_clone (other: detachable ANY): like other
		obsolete "Use `standard_twin' instead. [2017-05-31]"
			-- Void if other is void; otherwise new object
			-- field-by-field identical to other.
			-- Always uses default copying semantics.
			-- (from ANY)
		do
			if other /= Void then
				Result := other.standard_twin
			end
		ensure -- from ANY
			instance_free: class
			equal: standard_equal (Result, other)
		end

	frozen standard_copy (other: GAME_VIRTUAL_KEY)
			-- Copy every field of other onto corresponding field
			-- of current object.
			-- (from ANY)
		require -- from ANY
			other_not_void: other /= Void
			type_identity: same_type (other)
		external
			"built_in"
		ensure -- from ANY
			is_standard_equal: standard_is_equal (other)
		end

	frozen standard_twin: GAME_VIRTUAL_KEY
			-- New object field-by-field identical to other.
			-- Always uses default copying semantics.
			-- (from ANY)
		external
			"built_in"
		ensure -- from ANY
			standard_twin_not_void: Result /= Void
			equal: standard_equal (Result, Current)
		end

	frozen twin: GAME_VIRTUAL_KEY
			-- New object equal to Current
			-- twin calls copy; to change copying/twinning semantics, redefine copy.
			-- (from ANY)
		external
			"built_in"
		ensure -- from ANY
			twin_not_void: Result /= Void
			is_equal: Result ~ Current
		end
	
feature -- Basic operations

	frozen as_attached: attached GAME_VIRTUAL_KEY
		obsolete "Remove calls to this feature. [2017-05-31]"
			-- Attached version of Current.
			-- (Can be used during transitional period to convert
			-- non-void-safe classes to void-safe ones.)
			-- (from ANY)
		do
			Result := Current
		end

	frozen default: detachable GAME_VIRTUAL_KEY
			-- Default value of object's type
			-- (from ANY)
		do
		end

	frozen default_pointer: POINTER
			-- Default value of type POINTER
			-- (Avoid the need to write p.default for
			-- some p of type POINTER.)
			-- (from ANY)
		do
		ensure -- from ANY
			instance_free: class
		end

	default_rescue
			-- Process exception for routines with no Rescue clause.
			-- (Default: do nothing.)
			-- (from ANY)
		do
		end

	frozen do_nothing
			-- Execute a null action.
			-- (from ANY)
		do
		ensure -- from ANY
			instance_free: class
		end
	
feature -- Output

	Io: STD_FILES
			-- Handle to standard file setup
			-- (from ANY)
		once
			create Result;
			Result.set_output_default
		ensure -- from ANY
			instance_free: class
			io_not_void: Result /= Void
		end

	out: STRING_8
			-- New string containing terse printable representation
			-- of current object
			-- (from ANY)
		do
			Result := tagged_out
		ensure -- from ANY
			out_not_void: Result /= Void
		end

	print (o: detachable ANY)
			-- Write terse external representation of o
			-- on standard output.
			-- (from ANY)
		local
			s: READABLE_STRING_8
		do
			if attached o then
				s := o.out
				if attached {READABLE_STRING_32} s as s32 then
					Io.put_string_32 (s32)
				elseif attached {READABLE_STRING_8} s as s8 then
					Io.put_string (s8)
				else
					Io.put_string_32 (s.as_string_32)
				end
			end
		ensure -- from ANY
			instance_free: class
		end

	frozen tagged_out: STRING_8
			-- New string containing terse printable representation
			-- of current object
			-- (from ANY)
		external
			"built_in"
		ensure -- from ANY
			tagged_out_not_void: Result /= Void
		end
	
feature -- Platform

	Operating_environment: OPERATING_ENVIRONMENT
			-- Objects available from the operating system
			-- (from ANY)
		once
			create Result
		ensure -- from ANY
			instance_free: class
			operating_environment_not_void: Result /= Void
		end
	
feature {NONE} -- Retrieval

	frozen internal_correct_mismatch
			-- Called from runtime to perform a proper dynamic dispatch on correct_mismatch
			-- from MISMATCH_CORRECTOR.
			-- (from ANY)
		local
			l_msg: STRING_32
			l_exc: EXCEPTIONS
		do
			if attached {MISMATCH_CORRECTOR} Current as l_corrector then
				l_corrector.correct_mismatch
			else
				create l_msg.make_from_string ("Mismatch: ".as_string_32)
				create l_exc;
				l_msg.append (generating_type.name_32);
				l_exc.raise_retrieval_exception (l_msg)
			end
		end
	
invariant
		-- from ANY
	reflexive_equality: standard_is_equal (Current)
	reflexive_conformance: conforms_to (Current)

end -- class GAME_VIRTUAL_KEY

Generated by ISE EiffelStudio