2 #include <snes/snes.hpp>
3 #include <ui-libsnes/libsnes.hpp>
5 #include "core/controllerframe.hpp"
9 struct porttype_justifier
: public porttype_info
11 porttype_justifier() : porttype_info(PT_JUSTIFIER
, "justifier", 5) {}
12 void write(unsigned char* buffer
, unsigned idx
, unsigned ctrl
, short x
) const throw()
14 if(ctrl
>= 4 || idx
> 0)
19 serialize_short(buffer
+ 2 * ctrl
+ 1, x
);
24 buffer
[0] |= (1 << (ctrl
- 2));
26 buffer
[0] &= ~(1 << (ctrl
- 2));
31 short read(const unsigned char* buffer
, unsigned idx
, unsigned ctrl
) const throw()
33 if(ctrl
>= 4 || idx
> 0)
38 return unserialize_short(buffer
+ 2 * ctrl
+ 1);
41 return ((buffer
[0] & (1 << (ctrl
- 2))) != 0);
45 void display(const unsigned char* buffer
, unsigned idx
, char* buf
) const throw()
51 sprintf(buf
, "%i %i %c%c", unserialize_short(buffer
+ 1), unserialize_short(buffer
+ 3),
52 ((buffer
[0] & 1) ? 'T' : '-'), ((buffer
[0] & 2) ? 'S' : '-'));
55 size_t serialize(const unsigned char* buffer
, char* textbuf
) const throw()
58 sprintf(tmp
, "|%c%c %i %i", ((buffer
[0] & 1) ? 'T' : '.'), ((buffer
[0] & 2) ? 'S' : '.'),
59 unserialize_short(buffer
+ 1), unserialize_short(buffer
+ 3));
60 size_t len
= strlen(tmp
);
61 memcpy(textbuf
, tmp
, len
);
65 size_t deserialize(unsigned char* buffer
, const char* textbuf
) const throw()
69 if(read_button_value(textbuf
, idx
))
71 if(read_button_value(textbuf
, idx
))
73 serialize_short(buffer
+ 1, read_axis_value(textbuf
, idx
));
74 serialize_short(buffer
+ 3, read_axis_value(textbuf
, idx
));
75 skip_rest_of_field(textbuf
, idx
, false);
79 devicetype_t
devicetype(unsigned idx
) const throw()
81 return (idx
== 0) ? DT_JUSTIFIER
: DT_NONE
;
84 unsigned controllers() const throw()
89 unsigned internal_type() const throw()
91 return SNES_DEVICE_JUSTIFIER
;
94 bool legal(unsigned port
) const throw()