-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRaw.pm
2283 lines (2120 loc) · 107 KB
/
Raw.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# ABSTRACT: FFI bindings for SDL2
package SDL2;
use strict;
use warnings;
use Carp ();
use FFI::C;
use FFI::CheckLib ();
use FFI::Platypus 1.00;
use Ref::Util;
use Sub::Util ();
use version ();
my $ffi;
BEGIN {
$ffi = FFI::Platypus->new( api => 1 );
$ffi->lib( FFI::CheckLib::find_lib_or_exit lib => 'SDL2' );
FFI::C->ffi($ffi);
}
use Config;
use constant {
K_SCANCODE_MASK => 1 << 30,
BYTEORDER => $Config{byteorder},
BIG_ENDIAN => 4321,
LIL_ENDIAN => 1234,
MIX_MAXVOLUME => 128,
FALSE => 0,
TRUE => 1,
QUERY => -1,
IGNORE => 0,
DISABLE => 0,
ENABLE => 1,
RELEASED => 0,
PRESSED => 1,
SWSURFACE => 0,
PREALLOC => 1,
RLEACCEL => 2,
DONTFREE => 4,
SIMD_ALIGNED => 8,
};
# Hints - https://github.com/libsdl-org/SDL/blob/main/include/SDL_hints.h
use constant {
HINT_ACCELEROMETER_AS_JOYSTICK => 'SDL_ACCELEROMETER_AS_JOYSTICK',
HINT_ALLOW_ALT_TAB_WHILE_GRABBED => 'SDL_ALLOW_ALT_TAB_WHILE_GRABBED',
HINT_ALLOW_TOPMOST => 'SDL_ALLOW_TOPMOST',
HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION => 'SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION',
HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION => 'SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION',
HINT_ANDROID_BLOCK_ON_PAUSE => 'SDL_ANDROID_BLOCK_ON_PAUSE',
HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO => 'SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO',
HINT_ANDROID_TRAP_BACK_BUTTON => 'SDL_ANDROID_TRAP_BACK_BUTTON',
HINT_APPLE_TV_CONTROLLER_UI_EVENTS => 'SDL_APPLE_TV_CONTROLLER_UI_EVENTS',
HINT_APPLE_TV_REMOTE_ALLOW_ROTATION => 'SDL_APPLE_TV_REMOTE_ALLOW_ROTATION',
HINT_AUDIO_CATEGORY => 'SDL_AUDIO_CATEGORY',
HINT_AUDIO_DEVICE_APP_NAME => 'SDL_AUDIO_DEVICE_APP_NAME',
HINT_AUDIO_DEVICE_STREAM_NAME => 'SDL_AUDIO_DEVICE_STREAM_NAME',
HINT_AUDIO_RESAMPLING_MODE => 'SDL_AUDIO_RESAMPLING_MODE',
HINT_AUTO_UPDATE_JOYSTICKS => 'SDL_AUTO_UPDATE_JOYSTICKS',
HINT_AUTO_UPDATE_SENSORS => 'SDL_AUTO_UPDATE_SENSORS',
HINT_BMP_SAVE_LEGACY_FORMAT => 'SDL_BMP_SAVE_LEGACY_FORMAT',
HINT_DISPLAY_USABLE_BOUNDS => 'SDL_DISPLAY_USABLE_BOUNDS',
HINT_EMSCRIPTEN_ASYNCIFY => 'SDL_EMSCRIPTEN_ASYNCIFY',
HINT_EMSCRIPTEN_KEYBOARD_ELEMENT => 'SDL_EMSCRIPTEN_KEYBOARD_ELEMENT',
HINT_ENABLE_STEAM_CONTROLLERS => 'SDL_ENABLE_STEAM_CONTROLLERS',
HINT_EVENT_LOGGING => 'SDL_EVENT_LOGGING',
HINT_FRAMEBUFFER_ACCELERATION => 'SDL_FRAMEBUFFER_ACCELERATION',
HINT_GAMECONTROLLERCONFIG => 'SDL_GAMECONTROLLERCONFIG',
HINT_GAMECONTROLLERCONFIG_FILE => 'SDL_GAMECONTROLLERCONFIG_FILE',
HINT_GAMECONTROLLERTYPE => 'SDL_GAMECONTROLLERTYPE',
HINT_GAMECONTROLLER_IGNORE_DEVICES => 'SDL_GAMECONTROLLER_IGNORE_DEVICES',
HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT => 'SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT',
HINT_GAMECONTROLLER_USE_BUTTON_LABELS => 'SDL_GAMECONTROLLER_USE_BUTTON_LABELS',
HINT_GRAB_KEYBOARD => 'SDL_GRAB_KEYBOARD',
HINT_IDLE_TIMER_DISABLED => 'SDL_IOS_IDLE_TIMER_DISABLED',
HINT_IME_INTERNAL_EDITING => 'SDL_IME_INTERNAL_EDITING',
HINT_IOS_HIDE_HOME_INDICATOR => 'SDL_IOS_HIDE_HOME_INDICATOR',
HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS => 'SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS',
HINT_JOYSTICK_HIDAPI => 'SDL_JOYSTICK_HIDAPI',
HINT_JOYSTICK_HIDAPI_CORRELATE_XINPUT => 'SDL_JOYSTICK_HIDAPI_CORRELATE_XINPUT',
HINT_JOYSTICK_HIDAPI_GAMECUBE => 'SDL_JOYSTICK_HIDAPI_GAMECUBE',
HINT_JOYSTICK_HIDAPI_JOY_CONS => 'SDL_JOYSTICK_HIDAPI_JOY_CONS',
HINT_JOYSTICK_HIDAPI_PS4 => 'SDL_JOYSTICK_HIDAPI_PS4',
HINT_JOYSTICK_HIDAPI_PS4_RUMBLE => 'SDL_JOYSTICK_HIDAPI_PS4_RUMBLE',
HINT_JOYSTICK_HIDAPI_PS5 => 'SDL_JOYSTICK_HIDAPI_PS5',
HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED => 'SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED',
HINT_JOYSTICK_HIDAPI_PS5_RUMBLE => 'SDL_JOYSTICK_HIDAPI_PS5_RUMBLE',
HINT_JOYSTICK_HIDAPI_STADIA => 'SDL_JOYSTICK_HIDAPI_STADIA',
HINT_JOYSTICK_HIDAPI_STEAM => 'SDL_JOYSTICK_HIDAPI_STEAM',
HINT_JOYSTICK_HIDAPI_SWITCH => 'SDL_JOYSTICK_HIDAPI_SWITCH',
HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED => 'SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED',
HINT_JOYSTICK_HIDAPI_XBOX => 'SDL_JOYSTICK_HIDAPI_XBOX',
HINT_JOYSTICK_RAWINPUT => 'SDL_JOYSTICK_RAWINPUT',
HINT_JOYSTICK_THREAD => 'SDL_JOYSTICK_THREAD',
HINT_LINUX_JOYSTICK_DEADZONES => 'SDL_LINUX_JOYSTICK_DEADZONES',
HINT_MAC_BACKGROUND_APP => 'SDL_MAC_BACKGROUND_APP',
HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK => 'SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK',
HINT_MOUSE_DOUBLE_CLICK_RADIUS => 'SDL_MOUSE_DOUBLE_CLICK_RADIUS',
HINT_MOUSE_DOUBLE_CLICK_TIME => 'SDL_MOUSE_DOUBLE_CLICK_TIME',
HINT_MOUSE_FOCUS_CLICKTHROUGH => 'SDL_MOUSE_FOCUS_CLICKTHROUGH',
HINT_MOUSE_NORMAL_SPEED_SCALE => 'SDL_MOUSE_NORMAL_SPEED_SCALE',
HINT_MOUSE_RELATIVE_MODE_WARP => 'SDL_MOUSE_RELATIVE_MODE_WARP',
HINT_MOUSE_RELATIVE_SCALING => 'SDL_MOUSE_RELATIVE_SCALING',
HINT_MOUSE_RELATIVE_SPEED_SCALE => 'SDL_MOUSE_RELATIVE_SPEED_SCALE',
HINT_MOUSE_TOUCH_EVENTS => 'SDL_MOUSE_TOUCH_EVENTS',
HINT_NO_SIGNAL_HANDLERS => 'SDL_NO_SIGNAL_HANDLERS',
HINT_OPENGL_ES_DRIVER => 'SDL_OPENGL_ES_DRIVER',
HINT_ORIENTATIONS => 'SDL_IOS_ORIENTATIONS',
HINT_PREFERRED_LOCALES => 'SDL_PREFERRED_LOCALES',
HINT_QTWAYLAND_CONTENT_ORIENTATION => 'SDL_QTWAYLAND_CONTENT_ORIENTATION',
HINT_QTWAYLAND_WINDOW_FLAGS => 'SDL_QTWAYLAND_WINDOW_FLAGS',
HINT_RENDER_BATCHING => 'SDL_RENDER_BATCHING',
HINT_RENDER_DIRECT3D11_DEBUG => 'SDL_RENDER_DIRECT3D11_DEBUG',
HINT_RENDER_DIRECT3D_THREADSAFE => 'SDL_RENDER_DIRECT3D_THREADSAFE',
HINT_RENDER_DRIVER => 'SDL_RENDER_DRIVER',
HINT_RENDER_LOGICAL_SIZE_MODE => 'SDL_RENDER_LOGICAL_SIZE_MODE',
HINT_RENDER_OPENGL_SHADERS => 'SDL_RENDER_OPENGL_SHADERS',
HINT_RENDER_SCALE_QUALITY => 'SDL_RENDER_SCALE_QUALITY',
HINT_RENDER_VSYNC => 'SDL_RENDER_VSYNC',
HINT_RETURN_KEY_HIDES_IME => 'SDL_RETURN_KEY_HIDES_IME',
HINT_RPI_VIDEO_LAYER => 'SDL_RPI_VIDEO_LAYER',
HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL => 'SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL',
HINT_THREAD_PRIORITY_POLICY => 'SDL_THREAD_PRIORITY_POLICY',
HINT_THREAD_STACK_SIZE => 'SDL_THREAD_STACK_SIZE',
HINT_TIMER_RESOLUTION => 'SDL_TIMER_RESOLUTION',
HINT_TOUCH_MOUSE_EVENTS => 'SDL_TOUCH_MOUSE_EVENTS',
HINT_TV_REMOTE_AS_JOYSTICK => 'SDL_TV_REMOTE_AS_JOYSTICK',
HINT_VIDEO_ALLOW_SCREENSAVER => 'SDL_VIDEO_ALLOW_SCREENSAVER',
HINT_VIDEO_DOUBLE_BUFFER => 'SDL_VIDEO_DOUBLE_BUFFER',
HINT_VIDEO_EXTERNAL_CONTEXT => 'SDL_VIDEO_EXTERNAL_CONTEXT',
HINT_VIDEO_HIGHDPI_DISABLED => 'SDL_VIDEO_HIGHDPI_DISABLED',
HINT_VIDEO_MAC_FULLSCREEN_SPACES => 'SDL_VIDEO_MAC_FULLSCREEN_SPACES',
HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS => 'SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS',
HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT => 'SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT',
HINT_VIDEO_WIN_D3DCOMPILER => 'SDL_VIDEO_WIN_D3DCOMPILER',
HINT_VIDEO_X11_FORCE_EGL => 'SDL_VIDEO_X11_FORCE_EGL',
HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR => 'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR',
HINT_VIDEO_X11_NET_WM_PING => 'SDL_VIDEO_X11_NET_WM_PING',
HINT_VIDEO_X11_WINDOW_VISUALID => 'SDL_VIDEO_X11_WINDOW_VISUALID',
HINT_VIDEO_X11_XINERAMA => 'SDL_VIDEO_X11_XINERAMA',
HINT_VIDEO_X11_XRANDR => 'SDL_VIDEO_X11_XRANDR',
HINT_VIDEO_X11_XVIDMODE => 'SDL_VIDEO_X11_XVIDMODE',
HINT_WAVE_FACT_CHUNK => 'SDL_WAVE_FACT_CHUNK',
HINT_WAVE_RIFF_CHUNK_SIZE => 'SDL_WAVE_RIFF_CHUNK_SIZE',
HINT_WAVE_TRUNCATION => 'SDL_WAVE_TRUNCATION',
HINT_WINDOWS_DISABLE_THREAD_NAMING => 'SDL_WINDOWS_DISABLE_THREAD_NAMING',
HINT_WINDOWS_ENABLE_MESSAGELOOP => 'SDL_WINDOWS_ENABLE_MESSAGELOOP',
HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS => 'SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS',
HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL => 'SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL',
HINT_WINDOWS_INTRESOURCE_ICON => 'SDL_WINDOWS_INTRESOURCE_ICON',
HINT_WINDOWS_INTRESOURCE_ICON_SMALL => 'SDL_WINDOWS_INTRESOURCE_ICON_SMALL',
HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 => 'SDL_WINDOWS_NO_CLOSE_ON_ALT_F4',
HINT_WINDOWS_USE_D3D9EX => 'SDL_WINDOWS_USE_D3D9EX',
HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN => 'SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN',
HINT_WINRT_HANDLE_BACK_BUTTON => 'SDL_WINRT_HANDLE_BACK_BUTTON',
HINT_WINRT_PRIVACY_POLICY_LABEL => 'SDL_WINRT_PRIVACY_POLICY_LABEL',
HINT_WINRT_PRIVACY_POLICY_URL => 'SDL_WINRT_PRIVACY_POLICY_URL',
HINT_XINPUT_ENABLED => 'SDL_XINPUT_ENABLED',
HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING => 'SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING',
};
# Init flags
use constant {
INIT_TIMER => 0x000001,
INIT_AUDIO => 0x000010,
INIT_VIDEO => 0x000020,
INIT_JOYSTICK => 0x000200,
INIT_HAPTIC => 0x001000,
INIT_GAMECONTROLLER => 0x002000,
INIT_EVENTS => 0x004000,
INIT_SENSOR => 0x008000,
INIT_NOPARACHUTE => 0x100000,
};
use constant INIT_EVERYTHING => (
INIT_TIMER | INIT_AUDIO | INIT_VIDEO | INIT_EVENTS |
INIT_JOYSTICK | INIT_HAPTIC | INIT_GAMECONTROLLER | INIT_SENSOR
);
# Window flags
use constant {
WINDOWPOS_UNDEFINED => 0x1FFF0000,
WINDOWPOS_CENTERED => 0x2FFF0000,
};
# Mouse buttons
use constant {
BUTTON_LEFT => 1,
BUTTON_MIDDLE => 2,
BUTTON_RIGHT => 3,
BUTTON_X1 => 4,
BUTTON_X2 => 5,
};
# Audio flags
use constant {
AUDIO_U8 => 0x0008, # Unsigned 8-bit samples
AUDIO_S8 => 0x8008, # Signed 8-bit samples
AUDIO_U16LSB => 0x0010, # Unsigned 16-bit samples
AUDIO_S16LSB => 0x8010, # Signed 16-bit samples
AUDIO_U16MSB => 0x1010, # As above, but big-endian byte order
AUDIO_S16MSB => 0x9010, # As above, but big-endian byte order
AUDIO_S32LSB => 0x8020, # 32-bit integer samples
AUDIO_S32MSB => 0x9020, # As above, but big-endian byte order
AUDIO_F32LSB => 0x8120, # 32-bit floating point samples
AUDIO_F32MSB => 0x9120, # As above, but big-endian byte order
AUDIO_MASK_BITSIZE => 0xFF,
AUDIO_MASK_DATATYPE => 1 << 8,
AUDIO_MASK_ENDIAN => 1 << 12,
AUDIO_MASK_SIGNED => 1 << 15,
};
use constant {
AUDIO_U16 => AUDIO_U16LSB,
AUDIO_S16 => AUDIO_S16LSB,
AUDIO_S32 => AUDIO_S32LSB,
AUDIO_F32 => AUDIO_F32LSB,
};
sub enum {
require enum::hash;
require constant;
my %enums = @_;
while ( my ( $name, $values ) = each %enums ) {
my $const = Ref::Util::is_hashref $values ? $values : { enum::hash::enum( @$values ) };
constant->import($const);
my $variable = __PACKAGE__ . '::' . $name;
no strict 'refs';
%{$variable} = ( %{$variable}, reverse %$const );
}
}
sub pixel_format {
my ( $type, $order, $layout, $bits, $bytes ) = @_;
return ( 1 << 28 )
| ( $type << 24 )
| ( $order << 20 )
| ( $layout << 16 )
| ( $bits << 8 )
| $bytes;
}
BEGIN {
enum(
ArrayOrder => [qw(
ARRAYORDER_NONE
ARRAYORDER_RGB
ARRAYORDER_RGBA
ARRAYORDER_ARGB
ARRAYORDER_BGR
ARRAYORDER_BGRA
ARRAYORDER_ABGR
)],
BlendFactor => [qw(
BLENDFACTOR_ZERO
BLENDFACTOR_ONE
BLENDFACTOR_SRC_COLOR
BLENDFACTOR_ONE_MINUS_SRC_COLOR
BLENDFACTOR_SRC_ALPHA
BLENDFACTOR_ONE_MINUS_SRC_ALPHA
BLENDFACTOR_DST_COLOR
BLENDFACTOR_ONE_MINUS_DST_COLOR
BLENDFACTOR_DST_ALPHA
BLENDFACTOR_ONE_MINUS_DST_ALPHA
)],
BlendMode => {
BLENDMODE_NONE => 0x00000000,
BLENDMODE_BLEND => 0x00000001,
BLENDMODE_ADD => 0x00000002,
BLENDMODE_MOD => 0x00000004,
BLENDMODE_MUL => 0x00000008,
BLENDMODE_INVALID => 0x7FFFFFFF,
},
BlendOperation => [qw(
BLENDOPERATION_ADD
BLENDOPERATION_SUBTRACT
BLENDOPERATION_REV_SUBTRACT
BLENDOPERATION_MINIMUM
BLENDOPERATION_MAXIMUM
)],
BitmapOrder => [qw(
BITMAPORDER_NONE
BITMAPORDER_4321
BITMAPORDER_1234
)],
DisplayEventID => [qw(
DISPLAYEVENT_NONE
DISPLAYEVENT_ORIENTATION
DISPLAYEVENT_CONNECTED
DISPLAYEVENT_DISCONNECTED
)],
DisplayOrientation => [qw(
ORIENTATION_UNKNOWN
ORIENTATION_LANDSCAPE
ORIENTATION_LANDSCAPE_FLIPPED
ORIENTATION_PORTRAIT
ORIENTATION_PORTRAIT_FLIPPED
)],
EventAction => [qw(
ADDEVENT
PEEKEVENT
GETEVENT
)],
EventType => [qw(
FIRSTEVENT=0
QUIT=0x100
APP_TERMINATING
APP_LOWMEMORY
APP_WILLENTERBACKGROUND
APP_DIDENTERBACKGROUND
APP_WILLENTERFOREGROUND
APP_DIDENTERFOREGROUND
LOCALECHANGED
DISPLAYEVENT=0x150
WINDOWEVENT=0x200
SYSWMEVENT
KEYDOWN=0x300
KEYUP
TEXTEDITING
TEXTINPUT
KEYMAPCHANGED
MOUSEMOTION=0x400
MOUSEBUTTONDOWN
MOUSEBUTTONUP
MOUSEWHEEL
JOYAXISMOTION=0x600
JOYBALLMOTION
JOYHATMOTION
JOYBUTTONDOWN
JOYBUTTONUP
JOYDEVICEADDED
JOYDEVICEREMOVED
CONTROLLERAXISMOTION=0x650
CONTROLLERBUTTONDOWN
CONTROLLERBUTTONUP
CONTROLLERDEVICEADDED
CONTROLLERDEVICEREMOVED
CONTROLLERDEVICEREMAPPED
CONTROLLERTOUCHPADDOWN
CONTROLLERTOUCHPADMOTION
CONTROLLERTOUCHPADUP
CONTROLLERSENSORUPDATE
FINGERDOWN=0x700
FINGERUP
FINGERMOTION
DOLLARGESTURE=0x800
DOLLARRECORD
MULTIGESTURE
CLIPBOARDUPDATE=0x900
DROPFILE=0x1000
DROPTEXT
DROPBEGIN
DROPCOMPLETE
AUDIODEVICEADDED=0x1100
AUDIODEVICEREMOVED
SENSORUPDATE=0x1200
RENDER_TARGETS_RESET=0x2000
RENDER_DEVICE_RESET
USEREVENT=0x8000
LASTEVENT=0xFFFF
)],
GameControllerAxis => [qw(
CONTROLLER_AXIS_INVALID
CONTROLLER_AXIS_LEFTX
CONTROLLER_AXIS_LEFTY
CONTROLLER_AXIS_RIGHTX
CONTROLLER_AXIS_RIGHTY
CONTROLLER_AXIS_TRIGGERLEFT
CONTROLLER_AXIS_TRIGGERRIGHT
CONTROLLER_AXIS_MAX
)],
GameControllerBindType => [qw(
CONTROLLER_BINDTYPE_NONE
CONTROLLER_BINDTYPE_BUTTON
CONTROLLER_BINDTYPE_AXIS
CONTROLLER_BINDTYPE_HAT
)],
GameControllerButton => [qw(
CONTROLLER_BUTTON_INVALID
CONTROLLER_BUTTON_A
CONTROLLER_BUTTON_B
CONTROLLER_BUTTON_X
CONTROLLER_BUTTON_Y
CONTROLLER_BUTTON_BACK
CONTROLLER_BUTTON_GUIDE
CONTROLLER_BUTTON_START
CONTROLLER_BUTTON_LEFTSTICK
CONTROLLER_BUTTON_RIGHTSTICK
CONTROLLER_BUTTON_LEFTSHOULDER
CONTROLLER_BUTTON_RIGHTSHOULDER
CONTROLLER_BUTTON_DPAD_UP
CONTROLLER_BUTTON_DPAD_DOWN
CONTROLLER_BUTTON_DPAD_LEFT
CONTROLLER_BUTTON_DPAD_RIGHT
CONTROLLER_BUTTON_MAX
)],
GameControllerType => [qw(
CONTROLLER_TYPE_UNKNOWN
CONTROLLER_TYPE_XBOX360
CONTROLLER_TYPE_XBOXONE
CONTROLLER_TYPE_PS3
CONTROLLER_TYPE_PS4
CONTROLLER_TYPE_NINTENDO_SWITCH_PRO
CONTROLLER_TYPE_VIRTUAL
CONTROLLER_TYPE_PS5
)],
GLattr => [qw(
GL_RED_SIZE
GL_GREEN_SIZE
GL_BLUE_SIZE
GL_ALPHA_SIZE
GL_BUFFER_SIZE
GL_DOUBLEBUFFER
GL_DEPTH_SIZE
GL_STENCIL_SIZE
GL_ACCUM_RED_SIZE
GL_ACCUM_GREEN_SIZE
GL_ACCUM_BLUE_SIZE
GL_ACCUM_ALPHA_SIZE
GL_STEREO
GL_MULTISAMPLEBUFFERS
GL_MULTISAMPLESAMPLES
GL_ACCELERATED_VISUAL
GL_RETAINED_BACKING
GL_CONTEXT_MAJOR_VERSION
GL_CONTEXT_MINOR_VERSION
GL_CONTEXT_EGL
GL_CONTEXT_FLAGS
GL_CONTEXT_PROFILE_MASK
GL_SHARE_WITH_CURRENT_CONTEXT
GL_FRAMEBUFFER_SRGB_CAPABLE
GL_CONTEXT_RELEASE_BEHAVIOR
GL_CONTEXT_RESET_NOTIFICATION
GL_CONTEXT_NO_ERROR
)],
GLprofile => {
GL_CONTEXT_PROFILE_CORE => 0x0001,
GL_CONTEXT_PROFILE_COMPATIBILITY => 0x0002,
GL_CONTEXT_PROFILE_ES => 0x0004,
},
GLcontextFlag => {
GL_CONTEXT_DEBUG_FLAG => 0x0001,
GL_CONTEXT_FORWARD_COMPATIBLE_FLAG => 0x0002,
GL_CONTEXT_ROBUST_ACCESS_FLAG => 0x0004,
GL_CONTEXT_RESET_ISOLATION_FLAG => 0x0008,
},
GLcontextReleaseFlag => [qw(
GL_CONTEXT_RELEASE_BEHAVIOR_NONE
GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
)],
GLContextResetNotification => [qw(
GL_CONTEXT_RESET_NO_NOTIFICATION
GL_CONTEXT_RESET_LOSE_CONTEXT
)],
HatPosition => {
HAT_CENTERED => 0x0,
HAT_UP => 0x1,
HAT_RIGHT => 0x2,
HAT_DOWN => 0x4,
HAT_LEFT => 0x8,
},
HintPriority => [qw(
HINT_DEFAULT
HINT_NORMAL
HINT_OVERRIDE
)],
HitTestResult => [qw(
HITTEST_NORMAL
HITTEST_DRAGGABLE
HITTEST_RESIZE_TOPLEFT
HITTEST_RESIZE_TOP
HITTEST_RESIZE_TOPRIGHT
HITTEST_RESIZE_RIGHT
HITTEST_RESIZE_BOTTOMRIGHT
HITTEST_RESIZE_BOTTOM
HITTEST_RESIZE_BOTTOMLEFT
HITTEST_RESIZE_LEFT
)],
JoystickPowerLevel => [qw(
JOYSTICK_POWER_UNKNOWN
JOYSTICK_POWER_EMPTY
JOYSTICK_POWER_LOW
JOYSTICK_POWER_MEDIUM
JOYSTICK_POWER_FULL
JOYSTICK_POWER_WIRED
JOYSTICK_POWER_MAX
)],
LogCategory => [qw(
LOG_CATEGORY_APPLICATION
LOG_CATEGORY_ERROR
LOG_CATEGORY_ASSERT
LOG_CATEGORY_SYSTEM
LOG_CATEGORY_AUDIO
LOG_CATEGORY_VIDEO
LOG_CATEGORY_RENDER
LOG_CATEGORY_INPUT
LOG_CATEGORY_TEST
LOG_CATEGORY_RESERVED1
LOG_CATEGORY_RESERVED2
LOG_CATEGORY_RESERVED3
LOG_CATEGORY_RESERVED4
LOG_CATEGORY_RESERVED5
LOG_CATEGORY_RESERVED6
LOG_CATEGORY_RESERVED7
LOG_CATEGORY_RESERVED8
LOG_CATEGORY_RESERVED9
LOG_CATEGORY_RESERVED10
LOG_CATEGORY_CUSTOM
)],
LogPriority => [qw(
LOG_PRIORITY_VERBOSE=1
LOG_PRIORITY_DEBUG
LOG_PRIORITY_INFO
LOG_PRIORITY_WARN
LOG_PRIORITY_ERROR
LOG_PRIORITY_CRITICAL
NUM_LOG_PRIORITIES
)],
MessageBoxFlags => {
MESSAGEBOX_ERROR => 0x010,
MESSAGEBOX_WARNING => 0x020,
MESSAGEBOX_INFORMATION => 0x040,
MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT => 0x080,
MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT => 0x100,
},
MessageBoxButtonFlags => {
MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT => 1,
MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT => 2,
},
MessageBoxColorType => [qw(
MESSAGEBOX_COLOR_BACKGROUND
MESSAGEBOX_COLOR_TEXT
MESSAGEBOX_COLOR_BUTTON_BORDER
MESSAGEBOX_COLOR_BUTTON_BACKGROUND
MESSAGEBOX_COLOR_BUTTON_SELECTED
MESSAGEBOX_COLOR_MAX
)],
MouseWheelDirection => [qw(
MOUSEWHEEL_NORMAL
MOUSEWHEEL_FLIPPED
)],
PackedLayout => [qw(
PACKEDLAYOUT_NONE
PACKEDLAYOUT_332
PACKEDLAYOUT_4444
PACKEDLAYOUT_1555
PACKEDLAYOUT_5551
PACKEDLAYOUT_565
PACKEDLAYOUT_8888
PACKEDLAYOUT_2101010
PACKEDLAYOUT_1010102
)],
PackedOrder => [qw(
PACKEDORDER_NONE
PACKEDORDER_XRGB
PACKEDORDER_RGBX
PACKEDORDER_ARGB
PACKEDORDER_RGBA
PACKEDORDER_XBGR
PACKEDORDER_BGRX
PACKEDORDER_ABGR
PACKEDORDER_BGRA
)],
PixelType => [qw(
PIXELTYPE_UNKNOWN
PIXELTYPE_INDEX1
PIXELTYPE_INDEX4
PIXELTYPE_INDEX8
PIXELTYPE_PACKED8
PIXELTYPE_PACKED16
PIXELTYPE_PACKED32
PIXELTYPE_ARRAYU8
PIXELTYPE_ARRAYU16
PIXELTYPE_ARRAYU32
PIXELTYPE_ARRAYF16
PIXELTYPE_ARRAYF32
)],
PowerState => [qw(
POWERSTATE_UNKNOWN
POWERSTATE_ON_BATTERY
POWERSTATE_NO_BATTERY
POWERSTATE_CHARGING
POWERSTATE_CHARGED
)],
RendererFlags => {
RENDERER_SOFTWARE => 0x00000001,
RENDERER_ACCELERATED => 0x00000002,
RENDERER_PRESENTVSYNC => 0x00000004,
RENDERER_TARGETTEXTURE => 0x00000008,
},
RendererFlip => [qw(
FLIP_NONE
FLIP_HORIZONTAL
FLIP_VERTICAL
)],
ScaleMode => [qw(
SCALEMODENEAREST
SCALEMODELINEAR
SCALEMODEBEST
)],
ScanCode => [qw(
SCANCODE_UNKNOWN
SCANCODE_A=4
SCANCODE_B
SCANCODE_C
SCANCODE_D
SCANCODE_E
SCANCODE_F
SCANCODE_G
SCANCODE_H
SCANCODE_I
SCANCODE_J
SCANCODE_K
SCANCODE_L
SCANCODE_M
SCANCODE_N
SCANCODE_O
SCANCODE_P
SCANCODE_Q
SCANCODE_R
SCANCODE_S
SCANCODE_T
SCANCODE_U
SCANCODE_V
SCANCODE_W
SCANCODE_X
SCANCODE_Y
SCANCODE_Z
SCANCODE_1
SCANCODE_2
SCANCODE_3
SCANCODE_4
SCANCODE_5
SCANCODE_6
SCANCODE_7
SCANCODE_8
SCANCODE_9
SCANCODE_0
SCANCODE_RETURN
SCANCODE_ESCAPE
SCANCODE_BACKSPACE
SCANCODE_TAB
SCANCODE_SPACE
SCANCODE_MINUS
SCANCODE_EQUALS
SCANCODE_LEFTBRACKET
SCANCODE_RIGHTBRACKET
SCANCODE_BACKSLASH
SCANCODE_NONUSHASH
SCANCODE_SEMICOLON
SCANCODE_APOSTROPHE
SCANCODE_GRAVE
SCANCODE_COMMA
SCANCODE_PERIOD
SCANCODE_SLASH
SCANCODE_CAPSLOCK
SCANCODE_F1
SCANCODE_F2
SCANCODE_F3
SCANCODE_F4
SCANCODE_F5
SCANCODE_F6
SCANCODE_F7
SCANCODE_F8
SCANCODE_F9
SCANCODE_F10
SCANCODE_F11
SCANCODE_F12
SCANCODE_PRINTSCREEN
SCANCODE_SCROLLLOCK
SCANCODE_PAUSE
SCANCODE_INSERT
SCANCODE_HOME
SCANCODE_PAGEUP
SCANCODE_DELETE
SCANCODE_END
SCANCODE_PAGEDOWN
SCANCODE_RIGHT
SCANCODE_LEFT
SCANCODE_DOWN
SCANCODE_UP
SCANCODE_NUMLOCKCLEAR
SCANCODE_KP_DIVIDE
SCANCODE_KP_MULTIPLY
SCANCODE_KP_MINUS
SCANCODE_KP_PLUS
SCANCODE_KP_ENTER
SCANCODE_KP_1
SCANCODE_KP_2
SCANCODE_KP_3
SCANCODE_KP_4
SCANCODE_KP_5
SCANCODE_KP_6
SCANCODE_KP_7
SCANCODE_KP_8
SCANCODE_KP_9
SCANCODE_KP_0
SCANCODE_KP_PERIOD
SCANCODE_NONUSBACKSLASH
SCANCODE_APPLICATION
SCANCODE_POWER
SCANCODE_KP_EQUALS
SCANCODE_F13
SCANCODE_F14
SCANCODE_F15
SCANCODE_F16
SCANCODE_F17
SCANCODE_F18
SCANCODE_F19
SCANCODE_F20
SCANCODE_F21
SCANCODE_F22
SCANCODE_F23
SCANCODE_F24
SCANCODE_EXECUTE
SCANCODE_HELP
SCANCODE_MENU
SCANCODE_SELECT
SCANCODE_STOP
SCANCODE_AGAIN
SCANCODE_UNDO
SCANCODE_CUT
SCANCODE_COPY
SCANCODE_PASTE
SCANCODE_FIND
SCANCODE_MUTE
SCANCODE_VOLUMEUP
SCANCODE_VOLUMEDOWN
SCANCODE_KP_COMMA
SCANCODE_KP_EQUALSAS400
SCANCODE_INTERNATIONAL1
SCANCODE_INTERNATIONAL2
SCANCODE_INTERNATIONAL3
SCANCODE_INTERNATIONAL4
SCANCODE_INTERNATIONAL5
SCANCODE_INTERNATIONAL6
SCANCODE_INTERNATIONAL7
SCANCODE_INTERNATIONAL8
SCANCODE_INTERNATIONAL9
SCANCODE_LANG1
SCANCODE_LANG2
SCANCODE_LANG3
SCANCODE_LANG4
SCANCODE_LANG5
SCANCODE_LANG6
SCANCODE_LANG7
SCANCODE_LANG8
SCANCODE_LANG9
SCANCODE_ALTERASE
SCANCODE_SYSREQ
SCANCODE_CANCEL
SCANCODE_CLEAR
SCANCODE_PRIOR
SCANCODE_RETURN2
SCANCODE_SEPARATOR
SCANCODE_OUT
SCANCODE_OPER
SCANCODE_CLEARAGAIN
SCANCODE_CRSEL
SCANCODE_EXSEL
SCANCODE_KP_00=176
SCANCODE_KP_000
SCANCODE_THOUSANDSSEPARATOR
SCANCODE_DECIMALSEPARATOR
SCANCODE_CURRENCYUNIT
SCANCODE_CURRENCYSUBUNIT
SCANCODE_KP_LEFTPAREN
SCANCODE_KP_RIGHTPAREN
SCANCODE_KP_LEFTBRACE
SCANCODE_KP_RIGHTBRACE
SCANCODE_KP_TAB
SCANCODE_KP_BACKSPACE
SCANCODE_KP_A
SCANCODE_KP_B
SCANCODE_KP_C
SCANCODE_KP_D
SCANCODE_KP_E
SCANCODE_KP_F
SCANCODE_KP_XOR
SCANCODE_KP_POWER
SCANCODE_KP_PERCENT
SCANCODE_KP_LESS
SCANCODE_KP_GREATER
SCANCODE_KP_AMPERSAND
SCANCODE_KP_DBLAMPERSAND
SCANCODE_KP_VERTICALBAR
SCANCODE_KP_DBLVERTICALBAR
SCANCODE_KP_COLON
SCANCODE_KP_HASH
SCANCODE_KP_SPACE
SCANCODE_KP_AT
SCANCODE_KP_EXCLAM
SCANCODE_KP_MEMSTORE
SCANCODE_KP_MEMRECALL
SCANCODE_KP_MEMCLEAR
SCANCODE_KP_MEMADD
SCANCODE_KP_MEMSUBTRACT
SCANCODE_KP_MEMMULTIPLY
SCANCODE_KP_MEMDIVIDE
SCANCODE_KP_PLUSMINUS
SCANCODE_KP_CLEAR
SCANCODE_KP_CLEARENTRY
SCANCODE_KP_BINARY
SCANCODE_KP_OCTAL
SCANCODE_KP_DECIMAL
SCANCODE_KP_HEXADECIMAL
SCANCODE_LCTRL=224
SCANCODE_LSHIFT
SCANCODE_LALT
SCANCODE_LGUI
SCANCODE_RCTRL
SCANCODE_RSHIFT
SCANCODE_RALT
SCANCODE_RGUI
SCANCODE_MODE=257
SCANCODE_AUDIONEXT
SCANCODE_AUDIOPREV
SCANCODE_AUDIOSTOP
SCANCODE_AUDIOPLAY
SCANCODE_AUDIOMUTE
SCANCODE_MEDIASELECT
SCANCODE_WWW
SCANCODE_MAIL
SCANCODE_CALCULATOR
SCANCODE_COMPUTER
SCANCODE_AC_SEARCH
SCANCODE_AC_HOME
SCANCODE_AC_BACK
SCANCODE_AC_FORWARD
SCANCODE_AC_STOP
SCANCODE_AC_REFRESH
SCANCODE_AC_BOOKMARKS
SCANCODE_BRIGHTNESSDOWN
SCANCODE_BRIGHTNESSUP
SCANCODE_DISPLAYSWITCH
SCANCODE_KBDILLUMTOGGLE
SCANCODE_KBDILLUMDOWN
SCANCODE_KBDILLUMUP
SCANCODE_EJECT
SCANCODE_SLEEP
SCANCODE_APP1
SCANCODE_APP2
SCANCODE_AUDIOREWIND
SCANCODE_AUDIOFASTFORWARD
NUM_SCANCODES=512
)],
SystemCursor => [qw(
SYSTEM_CURSOR_ARROW
SYSTEM_CURSOR_IBEAM
SYSTEM_CURSOR_WAIT
SYSTEM_CURSOR_CROSSHAIR
SYSTEM_CURSOR_WAITARROW
SYSTEM_CURSOR_SIZENWSE
SYSTEM_CURSOR_SIZENESW
SYSTEM_CURSOR_SIZEWE
SYSTEM_CURSOR_SIZENS
SYSTEM_CURSOR_SIZEALL
SYSTEM_CURSOR_NO
SYSTEM_CURSOR_HAND
NUM_SYSTEM_CURSORS
)],
SYSWM_TYPE => [qw(
SYSWM_UNKNOWN
SYSWM_WINDOWS
SYSWM_X11
SYSWM_DIRECTFB
SYSWM_COCOA
SYSWM_UIKIT
SYSWM_WAYLAND
SYSWM_MIR
SYSWM_WINRT
SYSWM_ANDROID
SYSWM_VIVANTE
SYSWM_OS2
SYSWM_HAIKU
SYSWM_KMSDRM
)],
TextureAccess => [qw(
TEXTUREACCESS_STATIC
TEXTUREACCESS_STREAMING
TEXTUREACCESS_TARGET
)],
TextureModulate => [qw(
TEXTUREMODULATE_NONE
TEXTUREMODULATE_COLOR
TEXTUREMODULATE_ALPHA
)],
WindowEventID => [qw(
WINDOWEVENT_NONE
WINDOWEVENT_SHOWN
WINDOWEVENT_HIDDEN
WINDOWEVENT_EXPOSED
WINDOWEVENT_MOVED
WINDOWEVENT_RESIZED
WINDOWEVENT_SIZE_CHANGED
WINDOWEVENT_MINIMIZED
WINDOWEVENT_MAXIMIZED
WINDOWEVENT_RESTORED
WINDOWEVENT_ENTER
WINDOWEVENT_LEAVE
WINDOWEVENT_FOCUS_GAINED
WINDOWEVENT_FOCUS_LOST
WINDOWEVENT_CLOSE
WINDOWEVENT_TAKE_FOCUS
WINDOWEVENT_HIT_TEST
)],
WindowFlags => {
WINDOW_FULLSCREEN => 0x00000001,
WINDOW_OPENGL => 0x00000002,
WINDOW_SHOWN => 0x00000004,
WINDOW_HIDDEN => 0x00000008,
WINDOW_BORDERLESS => 0x00000010,
WINDOW_RESIZABLE => 0x00000020,
WINDOW_MINIMIZED => 0x00000040,
WINDOW_MAXIMIZED => 0x00000080,
WINDOW_MOUSE_GRABBED => 0x00000100,
WINDOW_INPUT_FOCUS => 0x00000200,
WINDOW_MOUSE_FOCUS => 0x00000400,
WINDOW_FULLSCREEN_DESKTOP => 0x00001001,
WINDOW_FOREIGN => 0x00000800,
WINDOW_ALLOW_HIGHDPI => 0x00002000,
WINDOW_MOUSE_CAPTURE => 0x00004000,
WINDOW_ALWAYS_ON_TOP => 0x00008000,
WINDOW_SKIP_TASKBAR => 0x00010000,
WINDOW_UTILITY => 0x00020000,
WINDOW_TOOLTIP => 0x00040000,
WINDOW_POPUP_MENU => 0x00080000,
WINDOW_KEYBOARD_GRABBED => 0x00100000,
WINDOW_VULKAN => 0x10000000,
WINDOW_METAL => 0x20000000,
WINDOW_INPUT_GRABBED => 0x00000100,
},
);
}
BEGIN {
enum(
HatPosition => {
HAT_RIGHTUP => HAT_RIGHT | HAT_UP,
HAT_RIGHTDOWN => HAT_RIGHT | HAT_DOWN,
HAT_LEFTUP => HAT_LEFT | HAT_UP,
HAT_LEFTDOWN => HAT_LEFT | HAT_DOWN,
},
Keycode => {
K_UNKNOWN => 0,
K_RETURN => ord "\r",
K_ESCAPE => 27, # 033
K_BACKSPACE => ord "\b",
K_TAB => ord "\t",
K_SPACE => ord ' ',
K_EXCLAIM => ord '!',
K_QUOTEDBL => ord '"',
K_HASH => ord '#',
K_PERCENT => ord '%',
K_DOLLAR => ord '$',
K_AMPERSAND => ord '&',
K_QUOTE => ord "'",
K_LEFTPAREN => ord '(',
K_RIGHTPAREN => ord ')',
K_ASTERISK => ord '*',
K_PLUS => ord '+',
K_COMMA => ord ',',
K_MINUS => ord '-',
K_PERIOD => ord '.',
K_SLASH => ord '/',
K_0 => ord '0',
K_1 => ord '1',
K_2 => ord '2',
K_3 => ord '3',
K_4 => ord '4',
K_5 => ord '5',
K_6 => ord '6',