fixing input
it almost works sob
This commit is contained in:
parent
1517f2caea
commit
ed2e5a01f9
90
silly.c
Normal file
90
silly.c
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
#include <math.h>
|
||||||
|
#include <float.h>
|
||||||
|
#include <iso646.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
size_t f(float x, int n)
|
||||||
|
{
|
||||||
|
bool is_negative = x < 0;
|
||||||
|
x = fabsf(x);
|
||||||
|
|
||||||
|
float pow10 = 1;
|
||||||
|
float factor = n < 0 ? 0.1 : 10;
|
||||||
|
|
||||||
|
size_t decs = 0;
|
||||||
|
size_t zeroes = 0;
|
||||||
|
for (int i = 0; decs < FLT_DIG and i < abs(n); i++) {
|
||||||
|
float next_pow = pow10 * factor;
|
||||||
|
float mod = fmodf(x * next_pow, 10);
|
||||||
|
|
||||||
|
if (mod == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
pow10 = next_pow;
|
||||||
|
if (decs != 0 or (int)mod != 0)
|
||||||
|
decs += 1;
|
||||||
|
else
|
||||||
|
zeroes += 1;
|
||||||
|
}
|
||||||
|
decs += n * (n < 0);
|
||||||
|
|
||||||
|
uint_fast64_t x_integ = roundf(x * pow10);
|
||||||
|
|
||||||
|
size_t ints = 0;
|
||||||
|
for (int y = x_integ / pow10; y > 0; y /= 10)
|
||||||
|
ints += 1;
|
||||||
|
|
||||||
|
size_t len = (is_negative) + (ints == 0) + ints + (decs != 0) + zeroes + decs;
|
||||||
|
char buf[len + 1];
|
||||||
|
buf[len] = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < decs; i++) {
|
||||||
|
buf[--len] = x_integ % 10 + 48;
|
||||||
|
x_integ /= 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < zeroes; i++) {
|
||||||
|
buf[--len] = '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (decs != 0)
|
||||||
|
buf[--len] = '.';
|
||||||
|
|
||||||
|
if (n < 0) for (int i = 0; i < -n; i++) {
|
||||||
|
buf[--len] = '0';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ints == 0) {
|
||||||
|
buf[--len] = '0';
|
||||||
|
} else for (int i = 0; i < ints; i++) {
|
||||||
|
buf[--len] = x_integ % 10 + 48;
|
||||||
|
x_integ /= 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_negative)
|
||||||
|
buf[--len] = '-';
|
||||||
|
|
||||||
|
printf("%s\n", buf);
|
||||||
|
printf("\t%f : decs:%llu, ints:%u, zeroes:%u\n", pow10, decs, ints, zeroes);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
f(39, 3); // "39"
|
||||||
|
f(39.39, 9); // "39.39"
|
||||||
|
f(0.3939, 3); // "0.394"
|
||||||
|
f(39e-9, 9); // "0.000000039"
|
||||||
|
|
||||||
|
f(3939, -2); // "3900"
|
||||||
|
|
||||||
|
f(39.99, 0); // 39.99 expected: 40
|
||||||
|
f(39.99, 1); // 39. expected: 40
|
||||||
|
f(39.99, 2); // 39. expected: 39.99
|
||||||
|
|
||||||
|
f(-39.3939, 3); // -39.4 expected: -39.394
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#define IO_BUF_SIZE 16
|
#define IO_BUF_SIZE 16
|
||||||
|
|
||||||
enum InputType {
|
enum CtrlType {
|
||||||
KEY,
|
KEY,
|
||||||
AXIS,
|
AXIS,
|
||||||
JOYSTICK,
|
JOYSTICK,
|
||||||
|
@ -20,7 +20,7 @@ enum InputType {
|
||||||
ESCAPE
|
ESCAPE
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InputRecord {
|
struct CtrlRecord {
|
||||||
u16 id;
|
u16 id;
|
||||||
u8 type;
|
u8 type;
|
||||||
|
|
||||||
|
@ -40,15 +40,15 @@ struct InputRecord {
|
||||||
struct timespec timestamp;
|
struct timespec timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InputBuffer {
|
struct RecordBuffer {
|
||||||
struct InputRecord records[IO_BUF_SIZE];
|
struct CtrlRecord records[IO_BUF_SIZE];
|
||||||
size_t count;
|
size_t count;
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InputBuffer NewInputBuffer()
|
struct RecordBuffer NewInputBuffer()
|
||||||
{
|
{
|
||||||
struct InputBuffer buf;
|
struct RecordBuffer buf;
|
||||||
buf.count = 0;
|
buf.count = 0;
|
||||||
buf.mutex = PTHREAD_MUTEX_INITIALIZER;
|
buf.mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
return buf;
|
return buf;
|
||||||
|
@ -74,27 +74,6 @@ struct Axis {
|
||||||
struct timespec last_released;
|
struct timespec last_released;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum KeyCode {
|
|
||||||
LEFT,
|
|
||||||
RIGHT,
|
|
||||||
SOFT_DROP,
|
|
||||||
HARD_DROP,
|
|
||||||
ROTATE_CCW,
|
|
||||||
ROTATE_CW,
|
|
||||||
ROTATE_180,
|
|
||||||
SWAP,
|
|
||||||
ESC
|
|
||||||
};
|
|
||||||
|
|
||||||
enum AxisCode {
|
|
||||||
VSCROLL,
|
|
||||||
HSCROLL
|
|
||||||
};
|
|
||||||
|
|
||||||
enum JoystickCode {
|
|
||||||
MOUSE
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef u32 hashtype;
|
typedef u32 hashtype;
|
||||||
hashtype Hash(void *item, size_t size)
|
hashtype Hash(void *item, size_t size)
|
||||||
{
|
{
|
||||||
|
@ -273,7 +252,7 @@ struct Axis *CtrlGet(Ctrl *ctrl, u16f code, u8f type)
|
||||||
return code_bkt->axis;
|
return code_bkt->axis;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_key(struct Axis *axis, struct InputRecord *record)
|
void update_key(struct Axis *axis, struct CtrlRecord *record)
|
||||||
{
|
{
|
||||||
if (record->data.key.is_down)
|
if (record->data.key.is_down)
|
||||||
axis->last_pressed = record->timestamp;
|
axis->last_pressed = record->timestamp;
|
||||||
|
@ -283,26 +262,26 @@ void update_key(struct Axis *axis, struct InputRecord *record)
|
||||||
axis->data.key.is_down = record->data.key.is_down;
|
axis->data.key.is_down = record->data.key.is_down;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_axis(struct Axis *axis, struct InputRecord *record)
|
void update_axis(struct Axis *axis, struct CtrlRecord *record)
|
||||||
{
|
{
|
||||||
axis->data.axis.value = record->data.axis.value;
|
axis->data.axis.value = record->data.axis.value;
|
||||||
axis->last_pressed = record->timestamp;
|
axis->last_pressed = record->timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update_joystick(struct Axis *axis, struct InputRecord *record)
|
void update_joystick(struct Axis *axis, struct CtrlRecord *record)
|
||||||
{
|
{
|
||||||
axis->data.joystick.x = record->data.joystick.x;
|
axis->data.joystick.x = record->data.joystick.x;
|
||||||
axis->data.joystick.y = record->data.joystick.y;
|
axis->data.joystick.y = record->data.joystick.y;
|
||||||
axis->last_pressed = record->timestamp;
|
axis->last_pressed = record->timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CtrlPoll(Ctrl *ctrl, struct InputBuffer *buf)
|
bool CtrlPoll(Ctrl *ctrl, struct RecordBuffer *buf)
|
||||||
{
|
{
|
||||||
pthread_mutex_lock(&buf->mutex);
|
pthread_mutex_lock(&buf->mutex);
|
||||||
pthread_mutex_lock(&ctrl->mutex);
|
pthread_mutex_lock(&ctrl->mutex);
|
||||||
|
|
||||||
for (size_t i = 0; i < buf->count; i++) {
|
for (size_t i = 0; i < buf->count; i++) {
|
||||||
struct InputRecord *rec = &buf->records[i];
|
struct CtrlRecord *rec = &buf->records[i];
|
||||||
|
|
||||||
struct Axis *axis = find_axis(&ctrl->binds, rec->id, rec->type);
|
struct Axis *axis = find_axis(&ctrl->binds, rec->id, rec->type);
|
||||||
if (axis == nullptr)
|
if (axis == nullptr)
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#define IO_BUF_SIZE 16
|
#define IO_BUF_SIZE 16
|
||||||
|
|
||||||
enum InputType {
|
enum CtrlType {
|
||||||
KEY,
|
KEY,
|
||||||
AXIS,
|
AXIS,
|
||||||
JOYSTICK,
|
JOYSTICK,
|
||||||
|
@ -20,7 +20,7 @@ enum InputType {
|
||||||
ESCAPE
|
ESCAPE
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InputRecord {
|
struct CtrlRecord {
|
||||||
u16 id;
|
u16 id;
|
||||||
u8 type;
|
u8 type;
|
||||||
|
|
||||||
|
@ -40,13 +40,13 @@ struct InputRecord {
|
||||||
struct timespec timestamp;
|
struct timespec timestamp;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InputBuffer {
|
struct RecordBuffer {
|
||||||
struct InputRecord records[IO_BUF_SIZE];
|
struct CtrlRecord records[IO_BUF_SIZE];
|
||||||
size_t count;
|
size_t count;
|
||||||
pthread_mutex_t mutex;
|
pthread_mutex_t mutex;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InputBuffer NewInputBuffer();
|
struct RecordBuffer NewInputBuffer();
|
||||||
|
|
||||||
struct Axis {
|
struct Axis {
|
||||||
union {
|
union {
|
||||||
|
@ -68,7 +68,7 @@ struct Axis {
|
||||||
struct timespec last_released;
|
struct timespec last_released;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum KeyCode {
|
enum CtrlCode {
|
||||||
LEFT,
|
LEFT,
|
||||||
RIGHT,
|
RIGHT,
|
||||||
SOFT_DROP,
|
SOFT_DROP,
|
||||||
|
@ -77,15 +77,9 @@ enum KeyCode {
|
||||||
ROTATE_CW,
|
ROTATE_CW,
|
||||||
ROTATE_180,
|
ROTATE_180,
|
||||||
SWAP,
|
SWAP,
|
||||||
ESC
|
ESC,
|
||||||
};
|
|
||||||
|
|
||||||
enum AxisCode {
|
|
||||||
VSCROLL,
|
VSCROLL,
|
||||||
HSCROLL
|
HSCROLL,
|
||||||
};
|
|
||||||
|
|
||||||
enum JoystickCode {
|
|
||||||
MOUSE
|
MOUSE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -129,4 +123,4 @@ bool CtrlMap(Ctrl *ctrl, u16f code, u16f bind, u8f type);
|
||||||
|
|
||||||
struct Axis *CtrlGet(Ctrl *ctrl, u16f code, u8f type);
|
struct Axis *CtrlGet(Ctrl *ctrl, u16f code, u8f type);
|
||||||
|
|
||||||
bool CtrlPoll(Ctrl *ctrl, struct InputBuffer *buf);
|
bool CtrlPoll(Ctrl *ctrl, struct RecordBuffer *buf);
|
|
@ -14,27 +14,23 @@
|
||||||
|
|
||||||
struct input_args {
|
struct input_args {
|
||||||
Ctrl *ctrl;
|
Ctrl *ctrl;
|
||||||
struct InputBuffer *buf;
|
struct RecordBuffer *buf;
|
||||||
pthread_mutex_t mutex;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void *block_input(void *args_ptr)
|
void *block_input(void *args_ptr)
|
||||||
{
|
{
|
||||||
struct input_args *args = args_ptr;
|
struct input_args *args = args_ptr;
|
||||||
Ctrl *ctrl = args->ctrl;
|
Ctrl *ctrl = args->ctrl;
|
||||||
struct InputBuffer *buf = args->buf;
|
struct RecordBuffer *buf = args->buf;
|
||||||
printf("RECIEVED BUF: %u, %u\n", args->ctrl, args->buf);
|
free(args_ptr);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
printf("\tIN LOOP\n");
|
|
||||||
bool success;
|
bool success;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
success = WindowsBlockInput(buf);
|
success = WindowsBlockInput(buf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("%llu\n", buf->records[0].timestamp.tv_sec);
|
|
||||||
|
|
||||||
if (!success) {
|
if (!success) {
|
||||||
printf("winfail");
|
printf("winfail");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -44,17 +40,13 @@ void *block_input(void *args_ptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StartInput(Ctrl *ctrl, struct InputBuffer *buf)
|
void StartInput(Ctrl *ctrl, struct RecordBuffer *buf)
|
||||||
{
|
{
|
||||||
printf("START INPUT:%u\n", buf);
|
struct input_args *args = malloc(sizeof(struct input_args));
|
||||||
struct input_args args = {
|
args->ctrl = ctrl;
|
||||||
.ctrl = ctrl,
|
args->buf = buf;
|
||||||
.buf = buf,
|
|
||||||
.mutex = PTHREAD_MUTEX_INITIALIZER
|
pthread_create(&ctrl->thread, nullptr, block_input, args);
|
||||||
};
|
|
||||||
pthread_mutex_lock(&args.mutex);
|
|
||||||
pthread_create(&ctrl->thread, nullptr, block_input, &args);
|
|
||||||
pthread_mutex_destroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void JoinInput(Ctrl *ctrl)
|
void JoinInput(Ctrl *ctrl)
|
||||||
|
|
|
@ -8,6 +8,6 @@
|
||||||
#include "ctrl.h"
|
#include "ctrl.h"
|
||||||
#include "fumotris.h"
|
#include "fumotris.h"
|
||||||
|
|
||||||
void StartInput(Ctrl *ctrl, struct InputBuffer *buf);
|
void StartInput(Ctrl *ctrl, struct RecordBuffer *buf);
|
||||||
|
|
||||||
void JoinInput(Ctrl *ctrl);
|
void JoinInput(Ctrl *ctrl);
|
|
@ -21,7 +21,7 @@ bool WindowsInit()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WindowsBlockInput(struct InputBuffer *buf)
|
bool WindowsBlockInput(struct RecordBuffer *buf)
|
||||||
{
|
{
|
||||||
return WinBlockInput(buf);
|
return WinBlockInput(buf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,6 @@
|
||||||
|
|
||||||
bool WindowsInit();
|
bool WindowsInit();
|
||||||
|
|
||||||
bool WindowsBlockInput(struct InputBuffer *buf);
|
bool WindowsBlockInput(struct RecordBuffer *buf);
|
||||||
|
|
||||||
bool WindowsWait(double seconds);
|
bool WindowsWait(double seconds);
|
|
@ -43,7 +43,7 @@ bool WinInitConsole()
|
||||||
return SetConsoleMode(windows.input_handle, mode);
|
return SetConsoleMode(windows.input_handle, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_key_record(struct InputRecord *record, KEY_EVENT_RECORD win_key)
|
void set_key_record(struct CtrlRecord *record, KEY_EVENT_RECORD win_key)
|
||||||
{
|
{
|
||||||
record->type = KEY;
|
record->type = KEY;
|
||||||
record->id = win_key.wVirtualKeyCode;
|
record->id = win_key.wVirtualKeyCode;
|
||||||
|
@ -53,7 +53,7 @@ void set_key_record(struct InputRecord *record, KEY_EVENT_RECORD win_key)
|
||||||
record->type = ESCAPE;
|
record->type = ESCAPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool set_mouse_record(struct InputRecord *record, MOUSE_EVENT_RECORD win_mouse)
|
bool set_mouse_record(struct CtrlRecord *record, MOUSE_EVENT_RECORD win_mouse)
|
||||||
{
|
{
|
||||||
switch (win_mouse.dwEventFlags) {
|
switch (win_mouse.dwEventFlags) {
|
||||||
case MOUSE_WHEELED:
|
case MOUSE_WHEELED:
|
||||||
|
@ -78,14 +78,14 @@ bool set_mouse_record(struct InputRecord *record, MOUSE_EVENT_RECORD win_mouse)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_window_record(struct InputRecord *record, WINDOW_BUFFER_SIZE_RECORD win_resize)
|
void set_window_record(struct CtrlRecord *record, WINDOW_BUFFER_SIZE_RECORD win_resize)
|
||||||
{
|
{
|
||||||
record->type = WINDOW;
|
record->type = WINDOW;
|
||||||
record->data.joystick.x = win_resize.dwSize.X;
|
record->data.joystick.x = win_resize.dwSize.X;
|
||||||
record->data.joystick.y = win_resize.dwSize.Y;
|
record->data.joystick.y = win_resize.dwSize.Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool dispatch_record(struct InputRecord *record, INPUT_RECORD win_record)
|
bool dispatch_record(struct CtrlRecord *record, INPUT_RECORD win_record)
|
||||||
{
|
{
|
||||||
switch (win_record.EventType) {
|
switch (win_record.EventType) {
|
||||||
case KEY_EVENT:
|
case KEY_EVENT:
|
||||||
|
@ -102,18 +102,14 @@ bool dispatch_record(struct InputRecord *record, INPUT_RECORD win_record)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WinBlockInput(struct InputBuffer *buf)
|
bool WinBlockInput(struct RecordBuffer *buf)
|
||||||
{
|
{
|
||||||
printf("\twin blocked: %u\n", buf);
|
|
||||||
size_t win_size = IO_BUF_SIZE - buf->count;
|
size_t win_size = IO_BUF_SIZE - buf->count;
|
||||||
printf("\twhar\n");
|
|
||||||
INPUT_RECORD win_buf[win_size];
|
INPUT_RECORD win_buf[win_size];
|
||||||
DWORD count;
|
DWORD count;
|
||||||
|
|
||||||
printf("\treading in..\n");
|
|
||||||
if (!ReadConsoleInput(windows.input_handle, win_buf, win_size, &count))
|
if (!ReadConsoleInput(windows.input_handle, win_buf, win_size, &count))
|
||||||
return false;
|
return false;
|
||||||
printf("\read done\n");
|
|
||||||
|
|
||||||
struct timespec now;
|
struct timespec now;
|
||||||
timespec_get(&now, TIME_UTC);
|
timespec_get(&now, TIME_UTC);
|
||||||
|
@ -121,7 +117,7 @@ bool WinBlockInput(struct InputBuffer *buf)
|
||||||
pthread_mutex_lock(&buf->mutex);
|
pthread_mutex_lock(&buf->mutex);
|
||||||
|
|
||||||
for (size_t i = 0; i < count; i++) {
|
for (size_t i = 0; i < count; i++) {
|
||||||
struct InputRecord record;
|
struct CtrlRecord record;
|
||||||
record.timestamp = now;
|
record.timestamp = now;
|
||||||
|
|
||||||
bool include = dispatch_record(&record, win_buf[i]);
|
bool include = dispatch_record(&record, win_buf[i]);
|
||||||
|
@ -143,9 +139,7 @@ bool WinWait(double seconds)
|
||||||
if (!SetWaitableTimer(windows.timer, &duration, 0, NULL, NULL, FALSE))
|
if (!SetWaitableTimer(windows.timer, &duration, 0, NULL, NULL, FALSE))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
printf("about to wait..\n");
|
|
||||||
DWORD result = WaitForSingleObject(windows.timer, INFINITE);
|
DWORD result = WaitForSingleObject(windows.timer, INFINITE);
|
||||||
printf("waitforsingle\n");
|
|
||||||
if (result != WAIT_OBJECT_0)
|
if (result != WAIT_OBJECT_0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,6 @@ bool WinInitTimer();
|
||||||
|
|
||||||
bool WinInitConsole();
|
bool WinInitConsole();
|
||||||
|
|
||||||
bool WinBlockInput(struct InputBuffer *buf);
|
bool WinBlockInput(struct RecordBuffer *buf);
|
||||||
|
|
||||||
bool WinWait(double seconds);
|
bool WinWait(double seconds);
|
|
@ -71,8 +71,7 @@ size_t TermBufToChars(struct TermBuf *term, char *buf, size_t max_chars)
|
||||||
u8f last_bg = 0;
|
u8f last_bg = 0;
|
||||||
u8f last_fg = 0;
|
u8f last_fg = 0;
|
||||||
|
|
||||||
//size_t filled = snprintf(buf, max_chars, "\x1b[H\x1b[0m");
|
size_t filled = snprintf(buf, max_chars, "\x1b[H\x1b[0m");
|
||||||
size_t filled = snprintf(buf, max_chars, "\x1b[0m");
|
|
||||||
|
|
||||||
for(size_t y = 0; y < term->hgt; y++) {
|
for(size_t y = 0; y < term->hgt; y++) {
|
||||||
for(size_t x = 0; x < term->wid; x++) {
|
for(size_t x = 0; x < term->wid; x++) {
|
||||||
|
|
|
@ -15,7 +15,9 @@
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const enum KeyCode key_codes[] = {
|
const size_t code_count = 12;
|
||||||
|
|
||||||
|
const enum CtrlCode codes[12] = {
|
||||||
LEFT,
|
LEFT,
|
||||||
RIGHT,
|
RIGHT,
|
||||||
SOFT_DROP,
|
SOFT_DROP,
|
||||||
|
@ -24,9 +26,15 @@ const enum KeyCode key_codes[] = {
|
||||||
ROTATE_CW,
|
ROTATE_CW,
|
||||||
ROTATE_180,
|
ROTATE_180,
|
||||||
SWAP,
|
SWAP,
|
||||||
ESC
|
ESC,
|
||||||
|
|
||||||
|
VSCROLL,
|
||||||
|
HSCROLL,
|
||||||
|
|
||||||
|
MOUSE
|
||||||
};
|
};
|
||||||
const u16f key_binds[] = {
|
|
||||||
|
const u16f binds[12] = {
|
||||||
0x25,
|
0x25,
|
||||||
0x27,
|
0x27,
|
||||||
0x28,
|
0x28,
|
||||||
|
@ -35,14 +43,13 @@ const u16f key_binds[] = {
|
||||||
'X',
|
'X',
|
||||||
'A',
|
'A',
|
||||||
'C',
|
'C',
|
||||||
0x1B
|
0x1B,
|
||||||
};
|
|
||||||
|
|
||||||
const enum AxisCode axis_codes[] = {
|
0,
|
||||||
VSCROLL,
|
1,
|
||||||
HSCROLL
|
|
||||||
|
0
|
||||||
};
|
};
|
||||||
const u16f axis_binds[] = { 0, 1 };
|
|
||||||
|
|
||||||
u8 I[16] = {
|
u8 I[16] = {
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
|
@ -51,7 +58,7 @@ u8 I[16] = {
|
||||||
0, 0, 0, 0
|
0, 0, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
void Loop(Ctrl *ctrl, struct InputBuffer *in_buf)
|
void Loop(Ctrl *ctrl, struct RecordBuffer *in_buf)
|
||||||
{
|
{
|
||||||
struct TermBuf term = NewTermBuf(20, 20);
|
struct TermBuf term = NewTermBuf(20, 20);
|
||||||
struct CharBlk4 term_blks[term.area];
|
struct CharBlk4 term_blks[term.area];
|
||||||
|
@ -74,15 +81,14 @@ void Loop(Ctrl *ctrl, struct InputBuffer *in_buf)
|
||||||
|
|
||||||
for (int i = 0; i < 7779997; i++) {
|
for (int i = 0; i < 7779997; i++) {
|
||||||
CtrlPoll(ctrl, in_buf);
|
CtrlPoll(ctrl, in_buf);
|
||||||
printf("polled\n");
|
|
||||||
|
|
||||||
TetrMapToTermBuf(&board, &term);
|
TetrMapToTermBuf(&board, &term);
|
||||||
TetrMapToTermBuf(&falling, &term);
|
TetrMapToTermBuf(&falling, &term);
|
||||||
|
|
||||||
TermBufToChars(&term, out, out_max);
|
TermBufToChars(&term, out, out_max);
|
||||||
//puts(out);
|
puts(out);
|
||||||
|
|
||||||
printf("%u\n", WindowsWait(0.01));
|
WindowsWait(0.5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +99,7 @@ int main()
|
||||||
Ctrl ctrl;
|
Ctrl ctrl;
|
||||||
NEW_CTRL(ctrl, 13, 13);
|
NEW_CTRL(ctrl, 13, 13);
|
||||||
|
|
||||||
for (size_t i = 0; i < 9; i++) {
|
for (size_t i = 0; i < code_count; i++) {
|
||||||
CtrlMap(&ctrl, key_binds[i], key_codes[i], KEY);
|
CtrlMap(&ctrl, key_binds[i], key_codes[i], KEY);
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < 2; i++) {
|
for (size_t i = 0; i < 2; i++) {
|
||||||
|
@ -104,7 +110,7 @@ int main()
|
||||||
|
|
||||||
printf("set controls\n");
|
printf("set controls\n");
|
||||||
|
|
||||||
struct InputBuffer in_buf = {
|
struct RecordBuffer in_buf = {
|
||||||
.count = 0,
|
.count = 0,
|
||||||
.mutex = PTHREAD_MUTEX_INITIALIZER
|
.mutex = PTHREAD_MUTEX_INITIALIZER
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue