@@ -96,7 +96,7 @@ ALLEGRO_DEBUG_CHANNEL("dinput")
96
96
#include " allegro5/joystick.h"
97
97
#include " allegro5/internal/aintern_joystick.h"
98
98
#include " allegro5/internal/aintern_wjoydxnu.h"
99
-
99
+ # include " allegro5/internal/aintern_wunicode.h "
100
100
101
101
102
102
@@ -482,45 +482,45 @@ static BOOL CALLBACK object_enum_callback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVO
482
482
483
483
if (GUIDTYPE_EQ (__al_GUID_XAxis)) {
484
484
can->have_x = true ;
485
- _al_sane_strncpy (can->name_x , lpddoi->tszName , NAME_LEN);
485
+ _tcsncpy (can->name_x , lpddoi->tszName , NAME_LEN);
486
486
}
487
487
else if (GUIDTYPE_EQ (__al_GUID_YAxis)) {
488
488
can->have_y = true ;
489
- _al_sane_strncpy (can->name_y , lpddoi->tszName , NAME_LEN);
489
+ _tcsncpy (can->name_y , lpddoi->tszName , NAME_LEN);
490
490
}
491
491
else if (GUIDTYPE_EQ (__al_GUID_ZAxis)) {
492
492
can->have_z = true ;
493
- _al_sane_strncpy (can->name_z , lpddoi->tszName , NAME_LEN);
493
+ _tcsncpy (can->name_z , lpddoi->tszName , NAME_LEN);
494
494
}
495
495
else if (GUIDTYPE_EQ (__al_GUID_RxAxis)) {
496
496
can->have_rx = true ;
497
- _al_sane_strncpy (can->name_rx , lpddoi->tszName , NAME_LEN);
497
+ _tcsncpy (can->name_rx , lpddoi->tszName , NAME_LEN);
498
498
}
499
499
else if (GUIDTYPE_EQ (__al_GUID_RyAxis)) {
500
500
can->have_ry = true ;
501
- _al_sane_strncpy (can->name_ry , lpddoi->tszName , NAME_LEN);
501
+ _tcsncpy (can->name_ry , lpddoi->tszName , NAME_LEN);
502
502
}
503
503
else if (GUIDTYPE_EQ (__al_GUID_RzAxis)) {
504
504
can->have_rz = true ;
505
- _al_sane_strncpy (can->name_rz , lpddoi->tszName , NAME_LEN);
505
+ _tcsncpy (can->name_rz , lpddoi->tszName , NAME_LEN);
506
506
}
507
507
else if (GUIDTYPE_EQ (__al_GUID_Slider)) {
508
508
if (can->num_sliders < MAX_SLIDERS) {
509
- _al_sane_strncpy (can->name_slider [can->num_sliders ], lpddoi->tszName ,
509
+ _tcsncpy (can->name_slider [can->num_sliders ], lpddoi->tszName ,
510
510
NAME_LEN);
511
511
can->num_sliders ++;
512
512
}
513
513
}
514
514
else if (GUIDTYPE_EQ (__al_GUID_POV)) {
515
515
if (can->num_povs < MAX_POVS) {
516
- _al_sane_strncpy (can->name_pov [can->num_povs ], lpddoi->tszName ,
516
+ _tcsncpy (can->name_pov [can->num_povs ], lpddoi->tszName ,
517
517
NAME_LEN);
518
518
can->num_povs ++;
519
519
}
520
520
}
521
521
else if (GUIDTYPE_EQ (__al_GUID_Button)) {
522
522
if (can->num_buttons < MAX_BUTTONS) {
523
- _al_sane_strncpy (can->name_button [can->num_buttons ], lpddoi->tszName ,
523
+ _tcsncpy (can->name_button [can->num_buttons ], lpddoi->tszName ,
524
524
NAME_LEN);
525
525
can->num_buttons ++;
526
526
}
@@ -532,13 +532,14 @@ static BOOL CALLBACK object_enum_callback(LPCDIDEVICEOBJECTINSTANCE lpddoi, LPVO
532
532
}
533
533
534
534
535
- static char *add_string (char *buf, const char *src, int *pos, int bufsize)
535
+ static char *add_string (char *buf, const TCHAR *src, int *pos, int bufsize, const char * dfl )
536
536
{
537
- char *dest = buf + *pos;
538
-
537
+ char *dest;
538
+
539
+ dest = buf + *pos;
539
540
if (*pos >= bufsize - 1 ) {
540
541
/* Out of space. */
541
- ASSERT (dest[0 ] == ' \0 ' );
542
+ ALLEGRO_ASSERT (dest[0 ] == ' \0 ' );
542
543
return dest;
543
544
}
544
545
@@ -547,11 +548,16 @@ static char *add_string(char *buf, const char *src, int *pos, int bufsize)
547
548
dest++;
548
549
(*pos)++;
549
550
}
550
-
551
- _al_sane_strncpy (dest, src, bufsize - *pos);
552
- (*pos) += strlen (dest);
553
- ASSERT (*pos < bufsize);
554
-
551
+ if (src) {
552
+ dest = _twin_copy_tchar_to_utf8 (dest, src, bufsize - *pos);
553
+ } else {
554
+ dest = _al_sane_strncpy (dest, dfl, bufsize - *pos);
555
+ }
556
+ ALLEGRO_ASSERT (dest != 0 );
557
+ if (dest) {
558
+ (*pos) += strlen (dest);
559
+ ALLEGRO_ASSERT (*pos < bufsize);
560
+ }
555
561
return dest;
556
562
}
557
563
@@ -569,76 +575,75 @@ static void fill_joystick_info_using_caps_and_names(ALLEGRO_JOYSTICK_DIRECTX *jo
569
575
570
576
#define N_STICK (info->num_sticks)
571
577
#define N_AXIS (info->stick[N_STICK].num_axes)
572
- #define OR (A, B ) ((A) ? ADD_STRING(A) : ADD_STRING(B))
573
- #define ADD_STRING (s ) add_string(joy->all_names, (s), &pos, \
574
- sizeof (joy->all_names ))
578
+ #define ADD_STRING (A, dfl ) (add_string(joy->all_names, (A), &pos, \
579
+ sizeof (joy->all_names ), (dfl)))
575
580
576
581
/* the X, Y, Z axes make up the first stick */
577
582
if (can->have_x || can->have_y || can->have_z ) {
578
583
if (can->have_x ) {
579
584
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
580
- info->stick [N_STICK].axis [N_AXIS].name = OR (can->name_x , default_name_x);
585
+ info->stick [N_STICK].axis [N_AXIS].name = ADD_STRING (can->name_x , default_name_x);
581
586
joy->x_mapping .stick = N_STICK;
582
587
joy->x_mapping .axis = N_AXIS;
583
588
N_AXIS++;
584
589
}
585
590
586
591
if (can->have_y ) {
587
592
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
588
- info->stick [N_STICK].axis [N_AXIS].name = OR (can->name_y , default_name_y);
593
+ info->stick [N_STICK].axis [N_AXIS].name = ADD_STRING (can->name_y , default_name_y);
589
594
joy->y_mapping .stick = N_STICK;
590
595
joy->y_mapping .axis = N_AXIS;
591
596
N_AXIS++;
592
597
}
593
598
594
599
if (can->have_z ) {
595
600
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
596
- info->stick [N_STICK].axis [N_AXIS].name = OR (can->name_z , default_name_z);
601
+ info->stick [N_STICK].axis [N_AXIS].name = ADD_STRING (can->name_z , default_name_z);
597
602
joy->z_mapping .stick = N_STICK;
598
603
joy->z_mapping .axis = N_AXIS;
599
604
N_AXIS++;
600
605
}
601
606
602
- info->stick [N_STICK].name = ADD_STRING (default_name_stick);
607
+ info->stick [N_STICK].name = ADD_STRING (0 , default_name_stick);
603
608
N_STICK++;
604
609
}
605
610
606
611
/* the Rx, Ry, Rz axes make up the next stick */
607
612
if (can->have_rx || can->have_ry || can->have_rz ) {
608
613
if (can->have_rx ) {
609
614
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
610
- info->stick [N_STICK].axis [N_AXIS].name = OR (can->name_rx , default_name_rx);
615
+ info->stick [N_STICK].axis [N_AXIS].name = ADD_STRING (can->name_rx , default_name_rx);
611
616
joy->rx_mapping .stick = N_STICK;
612
617
joy->rx_mapping .axis = N_AXIS;
613
618
N_AXIS++;
614
619
}
615
620
616
621
if (can->have_ry ) {
617
622
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
618
- info->stick [N_STICK].axis [N_AXIS].name = OR (can->name_ry , default_name_ry);
623
+ info->stick [N_STICK].axis [N_AXIS].name = ADD_STRING (can->name_ry , default_name_ry);
619
624
joy->ry_mapping .stick = N_STICK;
620
625
joy->ry_mapping .axis = N_AXIS;
621
626
N_AXIS++;
622
627
}
623
628
624
629
if (can->have_rz ) {
625
630
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
626
- info->stick [N_STICK].axis [N_AXIS].name = OR (can->name_rz , default_name_rz);
631
+ info->stick [N_STICK].axis [N_AXIS].name = ADD_STRING (can->name_rz , default_name_rz);
627
632
joy->rz_mapping .stick = N_STICK;
628
633
joy->rz_mapping .axis = N_AXIS;
629
634
N_AXIS++;
630
635
}
631
636
632
- info->stick [N_STICK].name = ADD_STRING (default_name_stick);
637
+ info->stick [N_STICK].name = ADD_STRING (0 , default_name_stick);
633
638
N_STICK++;
634
639
}
635
640
636
641
/* sliders are assigned to one stick each */
637
642
for (i = 0 ; i < can->num_sliders ; i++) {
638
643
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL | ALLEGRO_JOYFLAG_ANALOGUE;
639
644
info->stick [N_STICK].num_axes = 1 ;
640
- info->stick [N_STICK].axis [0 ].name = ADD_STRING (" axis" );
641
- info->stick [N_STICK].name = OR (can->name_slider [i], default_name_slider);
645
+ info->stick [N_STICK].axis [0 ].name = ADD_STRING (0 , " axis" );
646
+ info->stick [N_STICK].name = ADD_STRING (can->name_slider [i], default_name_slider);
642
647
joy->slider_mapping [i].stick = N_STICK;
643
648
joy->slider_mapping [i].axis = 0 ;
644
649
N_STICK++;
@@ -648,16 +653,16 @@ static void fill_joystick_info_using_caps_and_names(ALLEGRO_JOYSTICK_DIRECTX *jo
648
653
for (i = 0 ; i < can->num_povs ; i++) {
649
654
info->stick [N_STICK].flags = ALLEGRO_JOYFLAG_DIGITAL;
650
655
info->stick [N_STICK].num_axes = 2 ;
651
- info->stick [N_STICK].axis [0 ].name = ADD_STRING (" left/right" );
652
- info->stick [N_STICK].axis [1 ].name = ADD_STRING (" up/down" );
653
- info->stick [N_STICK].name = OR (can->name_pov [i], default_name_hat);
656
+ info->stick [N_STICK].axis [0 ].name = ADD_STRING (0 , " left/right" );
657
+ info->stick [N_STICK].axis [1 ].name = ADD_STRING (0 , " up/down" );
658
+ info->stick [N_STICK].name = ADD_STRING (can->name_pov [i], default_name_hat);
654
659
joy->pov_mapping_stick [i] = N_STICK;
655
660
N_STICK++;
656
661
}
657
662
658
663
/* buttons */
659
664
for (i = 0 ; i < can->num_buttons ; i++) {
660
- info->button [i].name = OR (can->name_button [i], default_name_button[i]);
665
+ info->button [i].name = ADD_STRING (can->name_button [i], default_name_button[i]);
661
666
}
662
667
663
668
info->num_buttons = can->num_buttons ;
@@ -681,20 +686,20 @@ static void fill_joystick_info_using_caps_and_names(ALLEGRO_JOYSTICK_DIRECTX *jo
681
686
info->stick [2 ].axis [1 ].name = info->stick [1 ].axis [1 ].name = info->stick [0 ].axis [1 ].name ;
682
687
683
688
/* first four button names contained junk; replace with valid strings */
684
- info->button [ 0 ].name = ADD_STRING (" Triangle" );
685
- info->button [ 1 ].name = ADD_STRING (" Circle" );
686
- info->button [ 2 ].name = ADD_STRING (" X" );
687
- info->button [ 3 ].name = ADD_STRING (" Square" );
689
+ info->button [ 0 ].name = ADD_STRING (0 , " Triangle" );
690
+ info->button [ 1 ].name = ADD_STRING (0 , " Circle" );
691
+ info->button [ 2 ].name = ADD_STRING (0 , " X" );
692
+ info->button [ 3 ].name = ADD_STRING (0 , " Square" );
688
693
689
694
/* while we're at it, give these controls more sensible names, too */
690
- info->stick [0 ].name = ADD_STRING (" [L-stick] or D-pad" );
691
- info->stick [1 ].name = ADD_STRING (" [R-stick]" );
692
- info->stick [2 ].name = ADD_STRING (" [D-pad]" );
695
+ info->stick [0 ].name = ADD_STRING (0 , " [L-stick] or D-pad" );
696
+ info->stick [1 ].name = ADD_STRING (0 , " [R-stick]" );
697
+ info->stick [2 ].name = ADD_STRING (0 , " [D-pad]" );
693
698
}
694
699
695
700
#undef N_AXIS
696
701
#undef N_STICK
697
- #undef OR
702
+ #undef ADD_STRING
698
703
#undef ADD_STRING
699
704
}
700
705
@@ -925,7 +930,7 @@ static BOOL CALLBACK joystick_enum_callback(LPCDIDEVICEINSTANCE lpddi, LPVOID pv
925
930
memcpy (&joy->guid , &lpddi->guidInstance , sizeof (GUID));
926
931
memcpy (&joy->product_guid , &lpddi->guidProduct , sizeof (GUID));
927
932
928
- _al_sane_strncpy (joy->name , lpddi->tszInstanceName , sizeof (joy->name ));
933
+ _twin_copy_tchar_to_utf8 (joy->name , lpddi->tszInstanceName , sizeof (joy->name ));
929
934
930
935
/* fill in the joystick structure */
931
936
fill_joystick_info_using_caps_and_names (joy, &caps_and_names);
@@ -1127,10 +1132,10 @@ static bool joydx_init_joystick(void)
1127
1132
1128
1133
MAKE_UNION (&joystick_dinput, LPDIRECTINPUT *);
1129
1134
1130
- ASSERT (!joystick_dinput);
1131
- ASSERT (!joydx_num_joysticks);
1132
- ASSERT (!joydx_thread);
1133
- ASSERT (!STOP_EVENT);
1135
+ ALLEGRO_ASSERT (!joystick_dinput);
1136
+ ALLEGRO_ASSERT (!joydx_num_joysticks);
1137
+ ALLEGRO_ASSERT (!joydx_thread);
1138
+ ALLEGRO_ASSERT (!STOP_EVENT);
1134
1139
1135
1140
/* load DirectInput module */
1136
1141
_al_dinput_module = _al_win_safe_load_library (_al_dinput_module_name);
@@ -1200,7 +1205,7 @@ static void joydx_exit_joystick(void)
1200
1205
1201
1206
ALLEGRO_DEBUG (" Entering joydx_exit_joystick\n " );
1202
1207
1203
- ASSERT (joydx_thread);
1208
+ ALLEGRO_ASSERT (joydx_thread);
1204
1209
1205
1210
/* stop the thread */
1206
1211
SetEvent (STOP_EVENT);
@@ -1288,7 +1293,7 @@ static ALLEGRO_JOYSTICK *joydx_get_joystick(int num)
1288
1293
{
1289
1294
ALLEGRO_JOYSTICK *ret = NULL ;
1290
1295
unsigned i;
1291
- ASSERT (num >= 0 );
1296
+ ALLEGRO_ASSERT (num >= 0 );
1292
1297
1293
1298
EnterCriticalSection (&joydx_thread_cs);
1294
1299
0 commit comments