forked from nakidai/csnake
Add input function
parent
03481db05f
commit
9dc2da1f90
2
Makefile
2
Makefile
|
@ -7,7 +7,7 @@ LD = ld
|
|||
RM = rm -f
|
||||
SRCDIR = src
|
||||
OBJDIR = obj
|
||||
SRC = main.c screen.c
|
||||
SRC = main.c screen.c input.c
|
||||
OBJ = $(addprefix $(OBJDIR)/,$(SRC:.c=.o))
|
||||
|
||||
default: $(OUT)
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef __INPUT_H__
|
||||
#define __INPUT_H__
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
typedef struct input_args_t
|
||||
{
|
||||
char *out;
|
||||
bool *alive;
|
||||
} inputArgs;
|
||||
|
||||
void input(void *vargp);
|
||||
|
||||
#endif /* __INPUT_H__ */
|
|
@ -0,0 +1,33 @@
|
|||
#include "input.h"
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <termios.h>
|
||||
|
||||
char getch(void)
|
||||
{
|
||||
char buf = 0;
|
||||
struct termios old = { 0 };
|
||||
fflush(stdout);
|
||||
if (tcgetattr(0, &old) < 0) perror("tcsetattr()");
|
||||
old.c_lflag &= ~ICANON; // local modes = Non Canonical mode
|
||||
old.c_lflag &= ~ECHO; // local modes = Disable echo.
|
||||
old.c_cc[VMIN] = 1; // control chars (MIN value) = 1
|
||||
old.c_cc[VTIME] = 0; // control chars (TIME value) = 0 (No time)
|
||||
if (tcsetattr(0, TCSANOW, &old) < 0) perror("tcsetattr ICANON");
|
||||
if (read(0, &buf, 1) < 0) perror("read()");
|
||||
old.c_lflag |= ICANON; // local modes = Canonical mode
|
||||
old.c_lflag |= ECHO; // local modes = Enable echo.
|
||||
if (tcsetattr(0, TCSADRAIN, &old) < 0) perror ("tcsetattr ~ICANON");
|
||||
return buf;
|
||||
}
|
||||
|
||||
void input(void *vargp)
|
||||
{
|
||||
char *out = ((inputArgs *)vargp)->out;
|
||||
bool *alive = ((inputArgs *)vargp)->alive;
|
||||
|
||||
while (*alive)
|
||||
{
|
||||
*out = getch();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue