    indexing
    	description: "Virtual Key code (VK) constants."
    	legal: "See notice at end of class."
    	status: "See notice at end of class."
    	date: "$Date: 2006-07-24 17:47:17 -0700 (Mon, 24 Jul 2006) $"
    	revision: "$Revision: 61615 $"

    class interface
    	WEL_VK_CONSTANTS

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

    feature -- Access

    	generating_type: STRING_8
    			-- Name of current object's generating type
    			-- (type of which it is a direct instance)
    			-- (from ANY)

    	generator: STRING_8
    			-- Name of current object's generating class
    			-- (base class of the type of which it is a direct instance)
    			-- (from ANY)

    	vk_0: INTEGER_32 is 48

    	vk_1: INTEGER_32 is 49

    	vk_2: INTEGER_32 is 50

    	vk_3: INTEGER_32 is 51

    	vk_4: INTEGER_32 is 52

    	vk_5: INTEGER_32 is 53

    	vk_6: INTEGER_32 is 54

    	vk_7: INTEGER_32 is 55

    	vk_8: INTEGER_32 is 56

    	vk_9: INTEGER_32 is 57
    			-- Vk_a thru Vk_z are the same as their ASCII equivalents: 'A' thru 'Z'.

    	vk_a: INTEGER_32 is 65

    	vk_add: INTEGER_32 is 107
    			-- Declared in Windows as VK_ADD

    	vk_alt: INTEGER_32 is 18
    			-- Declared in Windows as VK_MENU
    			-- Was declared in WEL_VK_CONSTANTS as synonym of Vk_menu.

    	vk_apps: INTEGER_32 is 93
    			-- Declared in Windows as VK_APPS
    			-- Vk_0 thru Vk_9 are the same as their ASCII equivalents: '0' thru '9'.

    	vk_b: INTEGER_32 is 66

    	vk_back: INTEGER_32 is 8
    			-- Declared in Windows as VK_BACK

    	vk_c: INTEGER_32 is 67

    	vk_cancel: INTEGER_32 is 3
    			-- Declared in Windows as VK_CANCEL

    	vk_capital: INTEGER_32 is 20
    			-- Declared in Windows as VK_CAPITAL

    	vk_clear: INTEGER_32 is 12
    			-- Declared in Windows as VK_CLEAR

    	vk_control: INTEGER_32 is 17
    			-- Declared in Windows as VK_CONTROL

    	vk_d: INTEGER_32 is 68

    	vk_decimal: INTEGER_32 is 110
    			-- Declared in Windows as VK_DECIMAL

    	vk_delete: INTEGER_32 is 46
    			-- Declared in Windows as VK_DELETE

    	vk_divide: INTEGER_32 is 111
    			-- Declared in Windows as VK_DIVIDE

    	vk_down: INTEGER_32 is 40
    			-- Declared in Windows as VK_DOWN

    	vk_e: INTEGER_32 is 69

    	vk_end: INTEGER_32 is 35
    			-- Declared in Windows as VK_END

    	vk_escape: INTEGER_32 is 27
    			-- Declared in Windows as VK_ESCAPE

    	vk_execute: INTEGER_32 is 43
    			-- Declared in Windows as VK_EXECUTE

    	vk_f: INTEGER_32 is 70

    	vk_f1: INTEGER_32 is 112
    			-- Declared in Windows as VK_F1

    	vk_f10: INTEGER_32 is 121
    			-- Declared in Windows as VK_F10

    	vk_f11: INTEGER_32 is 122
    			-- Declared in Windows as VK_F11

    	vk_f12: INTEGER_32 is 123
    			-- Declared in Windows as VK_F12

    	vk_f13: INTEGER_32 is 124
    			-- Declared in Windows as VK_F13

    	vk_f14: INTEGER_32 is 125
    			-- Declared in Windows as VK_F14

    	vk_f15: INTEGER_32 is 126
    			-- Declared in Windows as VK_F15

    	vk_f16: INTEGER_32 is 127
    			-- Declared in Windows as VK_F16

    	vk_f17: INTEGER_32 is 128
    			-- Declared in Windows as VK_F17

    	vk_f18: INTEGER_32 is 129
    			-- Declared in Windows as VK_F18

    	vk_f19: INTEGER_32 is 130
    			-- Declared in Windows as VK_F19

    	vk_f2: INTEGER_32 is 113
    			-- Declared in Windows as VK_F2

    	vk_f20: INTEGER_32 is 131
    			-- Declared in Windows as VK_F20

    	vk_f21: INTEGER_32 is 132
    			-- Declared in Windows as VK_F21

    	vk_f22: INTEGER_32 is 133
    			-- Declared in Windows as VK_F22

    	vk_f23: INTEGER_32 is 134
    			-- Declared in Windows as VK_F23

    	vk_f24: INTEGER_32 is 135
    			-- Declared in Windows as VK_F24

    	vk_f3: INTEGER_32 is 114
    			-- Declared in Windows as VK_F3

    	vk_f4: INTEGER_32 is 115
    			-- Declared in Windows as VK_F4

    	vk_f5: INTEGER_32 is 116
    			-- Declared in Windows as VK_F5

    	vk_f6: INTEGER_32 is 117
    			-- Declared in Windows as VK_F6

    	vk_f7: INTEGER_32 is 118
    			-- Declared in Windows as VK_F7

    	vk_f8: INTEGER_32 is 119
    			-- Declared in Windows as VK_F8

    	vk_f9: INTEGER_32 is 120
    			-- Declared in Windows as VK_F9

    	vk_g: INTEGER_32 is 71

    	vk_h: INTEGER_32 is 72

    	vk_help: INTEGER_32 is 47
    			-- Declared in Windows as VK_HELP

    	vk_home: INTEGER_32 is 36
    			-- Declared in Windows as VK_HOME

    	vk_i: INTEGER_32 is 73

    	vk_insert: INTEGER_32 is 45
    			-- Declared in Windows as VK_INSERT

    	vk_j: INTEGER_32 is 74

    	vk_k: INTEGER_32 is 75

    	vk_l: INTEGER_32 is 76

    	vk_lbutton: INTEGER_32 is 1
    			-- Declared in Windows as VK_LBUTTON

    	vk_lcontrol: INTEGER_32 is 162
    			-- Declared in Windows as VK_LCONTROL

    	vk_left: INTEGER_32 is 37
    			-- Declared in Windows as VK_LEFT

    	vk_lmenu: INTEGER_32 is 164
    			-- Declared in Windows as VK_LMENU

    	vk_lshift: INTEGER_32 is 160
    			-- Declared in Windows as VK_LSHIFT

    	vk_m: INTEGER_32 is 77

    	vk_mbutton: INTEGER_32 is 4
    			-- Declared in Windows as VK_MBUTTON

    	vk_menu: INTEGER_32 is 18
    			-- Declared in Windows as VK_MENU
    			-- Was declared in WEL_VK_CONSTANTS as synonym of Vk_alt.

    	vk_multiply: INTEGER_32 is 106
    			-- Declared in Windows as VK_MULTIPLY

    	vk_n: INTEGER_32 is 78

    	vk_next: INTEGER_32 is 34
    			-- Declared in Windows as VK_NEXT

    	vk_numlock: INTEGER_32 is 144
    			-- Declared in Windows as VK_NUMLOCK

    	vk_numpad0: INTEGER_32 is 96
    			-- Declared in Windows as VK_NUMPAD0

    	vk_numpad1: INTEGER_32 is 97
    			-- Declared in Windows as VK_NUMPAD1

    	vk_numpad2: INTEGER_32 is 98
    			-- Declared in Windows as VK_NUMPAD2

    	vk_numpad3: INTEGER_32 is 99
    			-- Declared in Windows as VK_NUMPAD3

    	vk_numpad4: INTEGER_32 is 100
    			-- Declared in Windows as VK_NUMPAD4

    	vk_numpad5: INTEGER_32 is 101
    			-- Declared in Windows as VK_NUMPAD5

    	vk_numpad6: INTEGER_32 is 102
    			-- Declared in Windows as VK_NUMPAD6

    	vk_numpad7: INTEGER_32 is 103
    			-- Declared in Windows as VK_NUMPAD7

    	vk_numpad8: INTEGER_32 is 104
    			-- Declared in Windows as VK_NUMPAD8

    	vk_numpad9: INTEGER_32 is 105
    			-- Declared in Windows as VK_NUMPAD9

    	vk_o: INTEGER_32 is 79

    	vk_p: INTEGER_32 is 80

    	vk_pause: INTEGER_32 is 19
    			-- Declared in Windows as VK_PAUSE

    	vk_print: INTEGER_32 is 42
    			-- Declared in Windows as VK_PRINT

    	vk_prior: INTEGER_32 is 33
    			-- Declared in Windows as VK_PRIOR

    	vk_q: INTEGER_32 is 81

    	vk_r: INTEGER_32 is 82

    	vk_rbutton: INTEGER_32 is 2
    			-- Declared in Windows as VK_RBUTTON

    	vk_rcontrol: INTEGER_32 is 163
    			-- Declared in Windows as VK_RCONTROL

    	vk_return: INTEGER_32 is 13
    			-- Declared in Windows as VK_RETURN

    	vk_right: INTEGER_32 is 39
    			-- Declared in Windows as VK_RIGHT

    	vk_rmenu: INTEGER_32 is 165
    			-- Declared in Windows as VK_RMENU

    	vk_rshift: INTEGER_32 is 161
    			-- Declared in Windows as VK_RSHIFT

    	vk_s: INTEGER_32 is 83

    	vk_scroll: INTEGER_32 is 145
    			-- Declared in Windows as VK_SCROLL

    	vk_select: INTEGER_32 is 41
    			-- Declared in Windows as VK_SELECT

    	vk_separator: INTEGER_32 is 108
    			-- Declared in Windows as VK_SEPARATOR

    	vk_shift: INTEGER_32 is 16
    			-- Declared in Windows as VK_SHIFT

    	vk_snapshot: INTEGER_32 is 44
    			-- Declared in Windows as VK_SNAPSHOT

    	vk_space: INTEGER_32 is 32
    			-- Declared in Windows as VK_SPACE

    	vk_subtract: INTEGER_32 is 109
    			-- Declared in Windows as VK_SUBTRACT

    	vk_t: INTEGER_32 is 84

    	vk_tab: INTEGER_32 is 9
    			-- Declared in Windows as VK_TAB

    	vk_u: INTEGER_32 is 85

    	vk_up: INTEGER_32 is 38
    			-- Declared in Windows as VK_UP

    	vk_v: INTEGER_32 is 86

    	vk_w: INTEGER_32 is 87

    	vk_x: INTEGER_32 is 88

    	vk_y: INTEGER_32 is 89

    	vk_z: INTEGER_32 is 90

    feature -- Comparison

    	frozen deep_equal (some: ANY; other: like arg #1): BOOLEAN
    			-- Are `some' and `other' either both void
    			-- or attached to isomorphic object structures?
    			-- (from ANY)
    		ensure -- from ANY
    			shallow_implies_deep: standard_equal (some, other) implies Result
    			both_or_none_void: (some = Void) implies (Result = (other = Void))
    			same_type: (Result and (some /= Void)) implies some.same_type (other)
    			symmetric: Result implies deep_equal (other, some)

    	frozen equal (some: ANY; other: like arg #1): BOOLEAN
    			-- Are `some' and `other' either both void or attached
    			-- to objects considered equal?
    			-- (from ANY)
    		ensure -- from ANY
    			definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.is_equal (other))

    	is_equal (other: like Current): BOOLEAN
    			-- Is `other' attached to an object considered
    			-- equal to current object?
    			-- (from ANY)
    		require -- from ANY
    			other_not_void: other /= Void
    		ensure -- from ANY
    			symmetric: Result implies other.is_equal (Current)
    			consistent: standard_is_equal (other) implies Result

    	frozen standard_equal (some: ANY; other: like arg #1): BOOLEAN
    			-- Are `some' and `other' either both void or attached to
    			-- field-by-field identical objects of the same type?
    			-- Always uses default object comparison criterion.
    			-- (from ANY)
    		ensure -- from ANY
    			definition: Result = (some = Void and other = Void) or else ((some /= Void and other /= Void) and then some.standard_is_equal (other))

    	frozen standard_is_equal (other: like Current): 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
    		ensure -- from ANY
    			same_type: Result implies same_type (other)
    			symmetric: Result implies other.standard_is_equal (Current)

    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

    	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
    		ensure -- from ANY
    			definition: Result = (conforms_to (other) and other.conforms_to (Current))

    feature -- Duplication

    	copy (other: like Current)
    			-- 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)
    		ensure -- from ANY
    			is_equal: is_equal (other)

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

    	frozen deep_twin: like Current
    			-- New object structure recursively duplicated from Current.
    			-- (from ANY)
    		ensure -- from ANY
    			deep_equal: deep_equal (Current, Result)

    	frozen standard_copy (other: like Current)
    			-- 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)
    		ensure -- from ANY
    			is_standard_equal: standard_is_equal (other)

    	frozen standard_twin: like Current
    			-- New object field-by-field identical to `other'.
    			-- Always uses default copying semantics.
    			-- (from ANY)
    		ensure -- from ANY
    			standard_twin_not_void: Result /= Void
    			equal: standard_equal (Result, Current)

    	frozen twin: like Current
    			-- New object equal to `Current'
    			-- twin calls copy; to change copying/twining semantics, redefine copy.
    			-- (from ANY)
    		ensure -- from ANY
    			twin_not_void: Result /= Void
    			is_equal: Result.is_equal (Current)

    feature -- Basic operations

    	frozen default: like Current
    			-- Default value of object's type
    			-- (from ANY)

    	frozen default_pointer: POINTER
    			-- Default value of type `POINTER'
    			-- (Avoid the need to write `p'.default for
    			-- some `p' of type `POINTER'.)
    			-- (from ANY)

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

    	frozen do_nothing
    			-- Execute a null action.
    			-- (from ANY)

    feature -- Output

    	io: STD_FILES
    			-- Handle to standard file setup
    			-- (from ANY)

    	out: STRING_8
    			-- New string containing terse printable representation
    			-- of current object
    			-- Was declared in ANY as synonym of tagged_out.
    			-- (from ANY)

    	print (some: ANY)
    			-- Write terse external representation of `some'
    			-- on standard output.
    			-- (from ANY)

    	frozen tagged_out: STRING_8
    			-- New string containing terse printable representation
    			-- of current object
    			-- Was declared in ANY as synonym of out.
    			-- (from ANY)

    feature -- Platform

    	operating_environment: OPERATING_ENVIRONMENT
    			-- Objects available from the operating system
    			-- (from ANY)

    invariant
    		-- from ANY
    	reflexive_equality: standard_is_equal (Current)
    	reflexive_conformance: conforms_to (Current)

    indexing
    	copyright: "Copyright (c) 1984-2006, Eiffel Software and others"
    	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
    	source: "[
    		Eiffel Software
    		356 Storke Road, Goleta, CA 93117 USA
    		Telephone 805-685-1006, Fax 805-685-6869
    		Website http://www.eiffel.com
    		Customer support http://support.eiffel.com
    	]"

    end -- class WEL_VK_CONSTANTS