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

deferred class 
	GAME_PHYSICAL_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_PHYSICAL_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 physical 0 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_0
		end

	is_1: BOOLEAN
			-- Current represent the physical 1 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_1
		end

	is_2: BOOLEAN
			-- Current represent the physical 2 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_2
		end

	is_3: BOOLEAN
			-- Current represent the physical 3 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_3
		end

	is_4: BOOLEAN
			-- Current represent the physical 4 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_4
		end

	is_5: BOOLEAN
			-- Current represent the physical 5 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_5
		end

	is_6: BOOLEAN
			-- Current represent the physical 6 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_6
		end

	is_7: BOOLEAN
			-- Current represent the physical 7 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_7
		end

	is_8: BOOLEAN
			-- Current represent the physical 8 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_8
		end

	is_9: BOOLEAN
			-- Current represent the physical 9 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_9
		end

	is_a: BOOLEAN
			-- Current represent the physical a key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_a
		end

	is_again: BOOLEAN
			-- Current represent the physical again key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_again
		end

	is_apostrophe: BOOLEAN
			-- Current represent the physical apostrophe key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_apostrophe
		end

	is_app_1: BOOLEAN
			-- Current represent the physical app 1 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_app1
		end

	is_app_2: BOOLEAN
			-- Current represent the physical app 2 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_app2
		end

	is_application: BOOLEAN
			-- Current represent the physical application key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_application
		end

	is_application_control_back: BOOLEAN
			-- Current represent the physical back key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_back
		end

	is_application_control_bookmarks: BOOLEAN
			-- Current represent the physical bookmarks key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_bookmarks
		end

	is_application_control_forward: BOOLEAN
			-- Current represent the physical forward key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_forward
		end

	is_application_control_home: BOOLEAN
			-- Current represent the physical home key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_home
		end

	is_application_control_refresh: BOOLEAN
			-- Current represent the physical refresh key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_refresh
		end

	is_application_control_search: BOOLEAN
			-- Current represent the physical search key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_search
		end

	is_application_control_stop: BOOLEAN
			-- Current represent the physical stop key of the application_control keypad
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ac_stop
		end

	is_as400_keypad_equals: BOOLEAN
			-- Current represent the physical keypad equals key for as400 keyboard
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_equalsas400
		end

	is_audio_mute: BOOLEAN
			-- Current represent the physical audio mute key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_audiomute
		end

	is_audio_next: BOOLEAN
			-- Current represent the physical audio next key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_audionext
		end

	is_audio_play: BOOLEAN
			-- Current represent the physical audio play key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_audioplay
		end

	is_audio_prev: BOOLEAN
			-- Current represent the physical audio prev key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_audioprev
		end

	is_audio_stop: BOOLEAN
			-- Current represent the physical audio stop key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_audiostop
		end

	is_b: BOOLEAN
			-- Current represent the physical b key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_b
		end

	is_backslash: BOOLEAN
			-- Current represent the physical backslash key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_backslash
		end

	is_backspace: BOOLEAN
			-- Current represent the physical backspace key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_backspace
		end

	is_brightness_down: BOOLEAN
			-- Current represent the physical brightness down key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_brightnessdown
		end

	is_brightness_up: BOOLEAN
			-- Current represent the physical brightness up key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_brightnessup
		end

	is_c: BOOLEAN
			-- Current represent the physical c key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_c
		end

	is_calculator: BOOLEAN
			-- Current represent the physical calculator key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_calculator
		end

	is_cancel: BOOLEAN
			-- Current represent the physical cancel key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_cancel
		end

	is_caps_lock: BOOLEAN
			-- Current represent the physical caps lock key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_capslock
		end

	is_clear: BOOLEAN
			-- Current represent the physical clear key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_clear
		end

	is_clear_again: BOOLEAN
			-- Current represent the physical clear/again key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_clearagain
		end

	is_comma: BOOLEAN
			-- Current represent the physical comma key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_comma
		end

	is_computer: BOOLEAN
			-- Current represent the physical computer key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_computer
		end

	is_copy: BOOLEAN
			-- Current represent the physical copy key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_copy
		end

	is_crsel: BOOLEAN
			-- Current represent the physical crsel key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_crsel
		end

	is_currency_sub_unit: BOOLEAN
			-- Current represent the physical currency sub unit key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_currencysubunit
		end

	is_currency_unit: BOOLEAN
			-- Current represent the physical currency unit key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_currencyunit
		end

	is_cut: BOOLEAN
			-- Current represent the physical cut key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_cut
		end

	is_d: BOOLEAN
			-- Current represent the physical d key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_d
		end

	is_decimal_separator: BOOLEAN
			-- Current represent the physical decimal separator key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_decimalseparator
		end

	is_delete: BOOLEAN
			-- Current represent the physical delete key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_delete
		end

	is_display_switch: BOOLEAN
			-- Current represent the physical display switch key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_displayswitch
		end

	is_down: BOOLEAN
			-- Current represent the physical down key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_down
		end

	is_e: BOOLEAN
			-- Current represent the physical e key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_e
		end

	is_eject: BOOLEAN
			-- Current represent the physical eject key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_eject
		end

	is_end: BOOLEAN
			-- Current represent the physical end key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_end
		end

	is_equals: BOOLEAN
			-- Current represent the physical equals key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_equals
		end

	is_erase_eaze_alternate_erase: BOOLEAN
			-- Current represent the physical alternate erase key for Erase Eaze keyboard
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_alterase
		end

	is_escape: BOOLEAN
			-- Current represent the physical escape key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_escape
		end

	is_execute: BOOLEAN
			-- Current represent the physical execute key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_execute
		end

	is_exsel: BOOLEAN
			-- Current represent the physical exsel key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_exsel
		end

	is_f: BOOLEAN
			-- Current represent the physical f key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f
		end

	is_f1: BOOLEAN
			-- Current represent the physical f1 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f1
		end

	is_f10: BOOLEAN
			-- Current represent the physical f10 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f10
		end

	is_f11: BOOLEAN
			-- Current represent the physical f11 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f11
		end

	is_f12: BOOLEAN
			-- Current represent the physical f12 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f12
		end

	is_f13: BOOLEAN
			-- Current represent the physical f13 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f13
		end

	is_f14: BOOLEAN
			-- Current represent the physical f14 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f14
		end

	is_f15: BOOLEAN
			-- Current represent the physical f15 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f15
		end

	is_f16: BOOLEAN
			-- Current represent the physical f16 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f16
		end

	is_f17: BOOLEAN
			-- Current represent the physical f17 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f17
		end

	is_f18: BOOLEAN
			-- Current represent the physical f18 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f18
		end

	is_f19: BOOLEAN
			-- Current represent the physical f19 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f19
		end

	is_f2: BOOLEAN
			-- Current represent the physical f2 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f2
		end

	is_f20: BOOLEAN
			-- Current represent the physical f20 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f20
		end

	is_f21: BOOLEAN
			-- Current represent the physical f21 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f21
		end

	is_f22: BOOLEAN
			-- Current represent the physical f22 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f22
		end

	is_f23: BOOLEAN
			-- Current represent the physical f23 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f23
		end

	is_f24: BOOLEAN
			-- Current represent the physical f24 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f24
		end

	is_f3: BOOLEAN
			-- Current represent the physical f3 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f3
		end

	is_f4: BOOLEAN
			-- Current represent the physical f4 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f4
		end

	is_f5: BOOLEAN
			-- Current represent the physical f5 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f5
		end

	is_f6: BOOLEAN
			-- Current represent the physical f6 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f6
		end

	is_f7: BOOLEAN
			-- Current represent the physical f7 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f7
		end

	is_f8: BOOLEAN
			-- Current represent the physical f8 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f8
		end

	is_f9: BOOLEAN
			-- Current represent the physical f9 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_f9
		end

	is_find: BOOLEAN
			-- Current represent the physical find key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_find
		end

	is_g: BOOLEAN
			-- Current represent the physical g key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_g
		end

	is_grave_accent: BOOLEAN
			-- Current represent the physical grave accent key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_grave
		end

	is_h: BOOLEAN
			-- Current represent the physical h key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_h
		end

	is_help: BOOLEAN
			-- Current represent the physical help key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_help
		end

	is_home: BOOLEAN
			-- Current represent the physical home key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_home
		end

	is_i: BOOLEAN
			-- Current represent the physical i key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_i
		end

	is_insert: BOOLEAN
			-- Current represent the physical insert key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_insert
		end

	is_internationa_6: BOOLEAN
			-- Current represent the physical international 6 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international6
		end

	is_international_1: BOOLEAN
			-- Current represent the physical international 1 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international1
		end

	is_international_2: BOOLEAN
			-- Current represent the physical international 2 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international2
		end

	is_international_3: BOOLEAN
			-- Current represent the physical international 3 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international3
		end

	is_international_4: BOOLEAN
			-- Current represent the physical international 4 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international4
		end

	is_international_5: BOOLEAN
			-- Current represent the physical international 5 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international5
		end

	is_international_7: BOOLEAN
			-- Current represent the physical international 7 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international7
		end

	is_international_8: BOOLEAN
			-- Current represent the physical international 8 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international8
		end

	is_international_9: BOOLEAN
			-- Current represent the physical international 9 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_international9
		end

	is_iso_backslash: BOOLEAN
			-- Current represent the physical backslash key for ISO keyboard
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_nonusbackslash
		end

	is_iso_hash: BOOLEAN
			-- Current represent the physical hash key for ISO keyboard.
			-- Don't use this, use is_backslash instead.
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_nonushash
		end

	is_j: BOOLEAN
			-- Current represent the physical j key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_j
		end

	is_k: BOOLEAN
			-- Current represent the physical k key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_k
		end

	is_keyboard_illumination_down: BOOLEAN
			-- Current represent the physical keyboard illumination down key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kbdillumdown
		end

	is_keyboard_illumination_toggle: BOOLEAN
			-- Current represent the physical keyboard illumination toggle key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kbdillumtoggle
		end

	is_keyboard_illumination_up: BOOLEAN
			-- Current represent the physical keyboard illumination up key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kbdillumup
		end

	is_keypad_0: BOOLEAN
			-- Current represent the physical keypad 0 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_0
		end

	is_keypad_00: BOOLEAN
			-- Current represent the physical keypad 00 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_00
		end

	is_keypad_000: BOOLEAN
			-- Current represent the physical keypad 000 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_000
		end

	is_keypad_1: BOOLEAN
			-- Current represent the physical keypad 1 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_1
		end

	is_keypad_2: BOOLEAN
			-- Current represent the physical keypad 2 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_2
		end

	is_keypad_3: BOOLEAN
			-- Current represent the physical keypad 3 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_3
		end

	is_keypad_4: BOOLEAN
			-- Current represent the physical keypad 4 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_4
		end

	is_keypad_5: BOOLEAN
			-- Current represent the physical keypad 5 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_5
		end

	is_keypad_6: BOOLEAN
			-- Current represent the physical keypad 6 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_6
		end

	is_keypad_7: BOOLEAN
			-- Current represent the physical keypad 7 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_7
		end

	is_keypad_8: BOOLEAN
			-- Current represent the physical keypad 8 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_8
		end

	is_keypad_9: BOOLEAN
			-- Current represent the physical keypad 9 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_9
		end

	is_keypad_a: BOOLEAN
			-- Current represent the physical keypad a key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_a
		end

	is_keypad_ampersand: BOOLEAN
			-- Current represent the physical keypad ampersand key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_ampersand
		end

	is_keypad_at: BOOLEAN
			-- Current represent the physical keypad at key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_at
		end

	is_keypad_b: BOOLEAN
			-- Current represent the physical keypad b key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_b
		end

	is_keypad_backspace: BOOLEAN
			-- Current represent the physical keypad backspace key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_backspace
		end

	is_keypad_binary: BOOLEAN
			-- Current represent the physical keypad binary key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_binary
		end

	is_keypad_c: BOOLEAN
			-- Current represent the physical keypad c key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_c
		end

	is_keypad_clear: BOOLEAN
			-- Current represent the physical keypad clear key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_clear
		end

	is_keypad_clear_entry: BOOLEAN
			-- Current represent the physical keypad clear entry key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_clearentry
		end

	is_keypad_colon: BOOLEAN
			-- Current represent the physical keypad colon key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_colon
		end

	is_keypad_comma: BOOLEAN
			-- Current represent the physical keypad comma key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_comma
		end

	is_keypad_d: BOOLEAN
			-- Current represent the physical keypad d key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_d
		end

	is_keypad_decimal: BOOLEAN
			-- Current represent the physical keypad decimal key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_decimal
		end

	is_keypad_divide: BOOLEAN
			-- Current represent the physical keypad divide key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_divide
		end

	is_keypad_double_ampersand: BOOLEAN
			-- Current represent the physical keypad double ampersand key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_dblampersand
		end

	is_keypad_double_vertical_bar: BOOLEAN
			-- Current represent the physical keypad double vertical bar key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_dblverticalbar
		end

	is_keypad_e: BOOLEAN
			-- Current represent the physical keypad e key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_e
		end

	is_keypad_enter: BOOLEAN
			-- Current represent the physical keypad enter key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_enter
		end

	is_keypad_equals: BOOLEAN
			-- Current represent the physical keypad equals key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_equals
		end

	is_keypad_exclamation_mark: BOOLEAN
			-- Current represent the physical keypad exclamation mark key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_exclam
		end

	is_keypad_f: BOOLEAN
			-- Current represent the physical keypad f key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_f
		end

	is_keypad_greater: BOOLEAN
			-- Current represent the physical keypad greater key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_greater
		end

	is_keypad_hash: BOOLEAN
			-- Current represent the physical keypad hash key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_hash
		end

	is_keypad_hexadecimal: BOOLEAN
			-- Current represent the physical keypad hexadecimal key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_hexadecimal
		end

	is_keypad_left_brace: BOOLEAN
			-- Current represent the physical keypad left brace key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_leftbrace
		end

	is_keypad_left_parenthesis: BOOLEAN
			-- Current represent the physical keypad left parenthesis key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_leftparen
		end

	is_keypad_less: BOOLEAN
			-- Current represent the physical keypad less key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_less
		end

	is_keypad_mem_add: BOOLEAN
			-- Current represent the physical keypad mem add key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memadd
		end

	is_keypad_mem_clear: BOOLEAN
			-- Current represent the physical keypad mem clear key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memclear
		end

	is_keypad_mem_divide: BOOLEAN
			-- Current represent the physical keypad mem divide key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memdivide
		end

	is_keypad_mem_multiply: BOOLEAN
			-- Current represent the physical keypad mem multiply key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memmultiply
		end

	is_keypad_mem_recall: BOOLEAN
			-- Current represent the physical keypad mem recall key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memrecall
		end

	is_keypad_mem_store: BOOLEAN
			-- Current represent the physical keypad mem store key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memstore
		end

	is_keypad_mem_subtract: BOOLEAN
			-- Current represent the physical keypad mem subtract key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_memsubtract
		end

	is_keypad_minus: BOOLEAN
			-- Current represent the physical keypad minus key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_minus
		end

	is_keypad_multiply: BOOLEAN
			-- Current represent the physical keypad multiply key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_multiply
		end

	is_keypad_octal: BOOLEAN
			-- Current represent the physical keypad octal key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_octal
		end

	is_keypad_percent: BOOLEAN
			-- Current represent the physical keypad percent key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_percent
		end

	is_keypad_period: BOOLEAN
			-- Current represent the physical keypad period key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_period
		end

	is_keypad_plus: BOOLEAN
			-- Current represent the physical keypad plus key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_plus
		end

	is_keypad_plus_minus: BOOLEAN
			-- Current represent the physical keypad plus/minus key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_plusminus
		end

	is_keypad_power: BOOLEAN
			-- Current represent the physical kp_power key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_power
		end

	is_keypad_right_parenthesis: BOOLEAN
			-- Current represent the physical keypad right parenthesis key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_rightparen
		end

	is_keypad_rightbrace: BOOLEAN
			-- Current represent the physical keypad right brace key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_rightbrace
		end

	is_keypad_space: BOOLEAN
			-- Current represent the physical keypad space key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_space
		end

	is_keypad_tab: BOOLEAN
			-- Current represent the physical keypad tab key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_tab
		end

	is_keypad_vertical_bar: BOOLEAN
			-- Current represent the physical keypad vertical bar key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_verticalbar
		end

	is_keypad_xor: BOOLEAN
			-- Current represent the physical keypad xor key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_kp_xor
		end

	is_l: BOOLEAN
			-- Current represent the physical l key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_l
		end

	is_lang_1: BOOLEAN
			-- Current represent the physical lang 1 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang1
		end

	is_lang_2: BOOLEAN
			-- Current represent the physical lang 2 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang2
		end

	is_lang_3: BOOLEAN
			-- Current represent the physical lang 3 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang3
		end

	is_lang_4: BOOLEAN
			-- Current represent the physical lang 4 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang4
		end

	is_lang_5: BOOLEAN
			-- Current represent the physical lang 5 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang5
		end

	is_lang_6: BOOLEAN
			-- Current represent the physical lang 6 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang6
		end

	is_lang_7: BOOLEAN
			-- Current represent the physical lang 7 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang7
		end

	is_lang_8: BOOLEAN
			-- Current represent the physical lang 8 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang8
		end

	is_lang_9: BOOLEAN
			-- Current represent the physical lang 9 key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lang9
		end

	is_left: BOOLEAN
			-- Current represent the physical left key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_left
		end

	is_left_alt: BOOLEAN
			-- Current represent the physical left alt key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lalt
		end

	is_left_bracket: BOOLEAN
			-- Current represent the physical left bracket key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_leftbracket
		end

	is_left_ctrl: BOOLEAN
			-- Current represent the physical left ctrl key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lctrl
		end

	is_left_gui: BOOLEAN
			-- Current represent the physical left gui key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lgui
		end

	is_left_shift: BOOLEAN
			-- Current represent the physical left shift key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_lshift
		end

	is_m: BOOLEAN
			-- Current represent the physical m key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_m
		end

	is_mail: BOOLEAN
			-- Current represent the physical mail key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_mail
		end

	is_media_select: BOOLEAN
			-- Current represent the physical media select key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_mediaselect
		end

	is_menu: BOOLEAN
			-- Current represent the physical menu key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_menu
		end

	is_minus: BOOLEAN
			-- Current represent the physical minus key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_minus
		end

	is_mode: BOOLEAN
			-- Current represent the physical mode key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_mode
		end

	is_mute: BOOLEAN
			-- Current represent the physical mute key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_mute
		end

	is_n: BOOLEAN
			-- Current represent the physical n key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_n
		end

	is_num_lock_clear: BOOLEAN
			-- Current represent the physical num lock clear key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_numlockclear
		end

	is_o: BOOLEAN
			-- Current represent the physical o key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_o
		end

	is_oper: BOOLEAN
			-- Current represent the physical oper key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_oper
		end

	is_out: BOOLEAN
			-- Current represent the physical out key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_out
		end

	is_p: BOOLEAN
			-- Current represent the physical p key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_p
		end

	is_page_down: BOOLEAN
			-- Current represent the physical page down key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_pagedown
		end

	is_page_up: BOOLEAN
			-- Current represent the physical page up key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_pageup
		end

	is_paste: BOOLEAN
			-- Current represent the physical paste key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_paste
		end

	is_pause: BOOLEAN
			-- Current represent the physical pause key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_pause
		end

	is_period: BOOLEAN
			-- Current represent the physical period key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_period
		end

	is_power: BOOLEAN
			-- Current represent the physical power key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_power
		end

	is_print_screen: BOOLEAN
			-- Current represent the physical print screen key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_printscreen
		end

	is_prior: BOOLEAN
			-- Current represent the physical prior key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_prior
		end

	is_q: BOOLEAN
			-- Current represent the physical q key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_q
		end

	is_r: BOOLEAN
			-- Current represent the physical r key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_r
		end

	is_return: BOOLEAN
			-- Current represent the physical return key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_return
		end

	is_return_2: BOOLEAN
			-- Current represent the physical second return key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_return2
		end

	is_right: BOOLEAN
			-- Current represent the physical right key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_right
		end

	is_right_alt: BOOLEAN
			-- Current represent the physical right alt key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_ralt
		end

	is_right_bracket: BOOLEAN
			-- Current represent the physical right bracket key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_rightbracket
		end

	is_right_ctrl: BOOLEAN
			-- Current represent the physical right ctrl key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_rctrl
		end

	is_right_gui: BOOLEAN
			-- Current represent the physical right gui key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_rgui
		end

	is_right_shift: BOOLEAN
			-- Current represent the physical right shift key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_rshift
		end

	is_s: BOOLEAN
			-- Current represent the physical s key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_s
		end

	is_scroll_lock: BOOLEAN
			-- Current represent the physical scroll lock key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_scrolllock
		end

	is_select: BOOLEAN
			-- Current represent the physical select key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_select
		end

	is_semicolon: BOOLEAN
			-- Current represent the physical semicolon key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_semicolon
		end

	is_separator: BOOLEAN
			-- Current represent the physical separator key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_separator
		end

	is_slash: BOOLEAN
			-- Current represent the physical slash key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_slash
		end

	is_sleep: BOOLEAN
			-- Current represent the physical sleep key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_sleep
		end

	is_space: BOOLEAN
			-- Current represent the physical space key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_space
		end

	is_stop: BOOLEAN
			-- Current represent the physical stop key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_stop
		end

	is_sysreq: BOOLEAN
			-- Current represent the physical sysreq key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_sysreq
		end

	is_t: BOOLEAN
			-- Current represent the physical t key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_t
		end

	is_tab: BOOLEAN
			-- Current represent the physical tab key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_tab
		end

	is_thousands_separator: BOOLEAN
			-- Current represent the physical thousands separator key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_thousandsseparator
		end

	is_u: BOOLEAN
			-- Current represent the physical u key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_u
		end

	is_undo: BOOLEAN
			-- Current represent the physical undo key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_undo
		end

	is_unknown: BOOLEAN
			-- The Current physical key is not valid
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_unknown
		end

	is_up: BOOLEAN
			-- Current represent the physical up key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_up
		end

	is_v: BOOLEAN
			-- Current represent the physical v key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_v
		end

	is_volume_down: BOOLEAN
			-- Current represent the physical volume down key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_volumedown
		end

	is_volume_up: BOOLEAN
			-- Current represent the physical volume up key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_volumeup
		end

	is_w: BOOLEAN
			-- Current represent the physical w key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_w
		end

	is_www: BOOLEAN
			-- Current represent the physical www key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_www
		end

	is_x: BOOLEAN
			-- Current represent the physical x key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_x
		end

	is_y: BOOLEAN
			-- Current represent the physical y key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_y
		end

	is_z: BOOLEAN
			-- Current represent the physical z key
		do
			Result := physical_code = {GAME_SDL_SCANCODE}.sdl_scancode_z
		end

	physical_code: INTEGER_32
			-- Hardware code of the key
			-- (not 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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_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_PHYSICAL_KEY

Generated by ISE EiffelStudio