Fix bugs, add makefile
This commit is contained in:
parent
6d635299db
commit
5cd6ad8060
5
CMakeLists.txt
Normal file
5
CMakeLists.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.6)
|
||||||
|
project(magidoor)
|
||||||
|
|
||||||
|
set(SOURCE_FILES MD_Getc.c MD_Printf.c MD_Init.c MagiDoor.h)
|
||||||
|
add_library(mdoor STATIC ${SOURCE_FILES})
|
26
MD_Getc.c
Normal file
26
MD_Getc.c
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include <errno.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include "MagiDoor.h"
|
||||||
|
|
||||||
|
char md_getc() {
|
||||||
|
char c;
|
||||||
|
ssize_t ret;
|
||||||
|
while (1) {
|
||||||
|
if (mdcontrol.socket == -1) {
|
||||||
|
ret = read(STDIN_FILENO, &c, 1);
|
||||||
|
} else {
|
||||||
|
ret = recv(mdcontrol.socket, &c, 1, 0);
|
||||||
|
}
|
||||||
|
if (ret == 0) {
|
||||||
|
md_exit(0);
|
||||||
|
}
|
||||||
|
if (ret == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) {
|
||||||
|
sleep(1);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
md_putchar(c);
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
}
|
42
MD_Init.c
42
MD_Init.c
@ -1,4 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include "MagiDoor.h"
|
#include "MagiDoor.h"
|
||||||
|
|
||||||
|
|
||||||
@ -11,7 +15,7 @@
|
|||||||
|
|
||||||
MDDoorControl_t mdcontrol;
|
MDDoorControl_t mdcontrol;
|
||||||
|
|
||||||
|
struct termios ttysave;
|
||||||
|
|
||||||
int read_door32(const char *dropfile) {
|
int read_door32(const char *dropfile) {
|
||||||
FILE *fptr;
|
FILE *fptr;
|
||||||
@ -32,7 +36,7 @@ int read_door32(const char *dropfile) {
|
|||||||
fgets(buffer, 256, fptr); // User's real name
|
fgets(buffer, 256, fptr); // User's real name
|
||||||
ptr1 = strrchr(buffer, ' ');
|
ptr1 = strrchr(buffer, ' ');
|
||||||
if (ptr1 != NULL) {
|
if (ptr1 != NULL) {
|
||||||
*ptr1 = '\0'
|
*ptr1 = '\0';
|
||||||
ptr1++;
|
ptr1++;
|
||||||
strncpy(mdcontrol.user_firstname, buffer, 32);
|
strncpy(mdcontrol.user_firstname, buffer, 32);
|
||||||
strncpy(mdcontrol.user_lastname, ptr1, 32);
|
strncpy(mdcontrol.user_lastname, ptr1, 32);
|
||||||
@ -87,7 +91,7 @@ int read_doorsys(const char *dropfile) {
|
|||||||
fgets(buffer, 256, fptr); // User Name
|
fgets(buffer, 256, fptr); // User Name
|
||||||
ptr1 = strrchr(buffer, ' ');
|
ptr1 = strrchr(buffer, ' ');
|
||||||
if (ptr1 != NULL) {
|
if (ptr1 != NULL) {
|
||||||
*ptr1 = '\0'
|
*ptr1 = '\0';
|
||||||
ptr1++;
|
ptr1++;
|
||||||
strncpy(mdcontrol.user_firstname, buffer, 32);
|
strncpy(mdcontrol.user_firstname, buffer, 32);
|
||||||
strncpy(mdcontrol.user_lastname, ptr1, 32);
|
strncpy(mdcontrol.user_lastname, ptr1, 32);
|
||||||
@ -96,7 +100,7 @@ int read_doorsys(const char *dropfile) {
|
|||||||
memset(mdcontrol.user_lastname, '\0', 32);
|
memset(mdcontrol.user_lastname, '\0', 32);
|
||||||
}
|
}
|
||||||
fgets(buffer, 256, fptr); // Location
|
fgets(buffer, 256, fptr); // Location
|
||||||
strncpy(mdcontrol.user_location, 32);
|
strncpy(mdcontrol.user_location, buffer, 32);
|
||||||
|
|
||||||
fgets(buffer, 256, fptr); // voice phone
|
fgets(buffer, 256, fptr); // voice phone
|
||||||
fgets(buffer, 256, fptr); // data phone
|
fgets(buffer, 256, fptr); // data phone
|
||||||
@ -155,18 +159,42 @@ int read_doorsys(const char *dropfile) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void md_exit(int exitcode) {
|
||||||
|
if (mdcontrol.socket == -1) {
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &ttysave);
|
||||||
|
} else {
|
||||||
|
#if defined(WIN32) || defined (_MSC_VER)
|
||||||
|
WSACleanup();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
exit(exitcode);
|
||||||
|
}
|
||||||
|
|
||||||
int md_init(const char *dropfile) {
|
int md_init(const char *dropfile) {
|
||||||
char *filename = strrchr(dropfile, PATH_SEP);
|
char *filename = strrchr(dropfile, PATH_SEP);
|
||||||
|
struct termios ttystate;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (filename == NULL) {
|
if (filename == NULL) {
|
||||||
filename = dropfile;
|
filename = (char *)dropfile;
|
||||||
} else {
|
} else {
|
||||||
filename++;
|
filename++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcasecmp(dropfile, "door.sys") == 0) {
|
if (strcasecmp(dropfile, "door.sys") == 0) {
|
||||||
return read_doorsys(dropfile);
|
ret = read_doorsys(dropfile);
|
||||||
} else if (strcasecmp(dropfile, "door32.sys") == 0) {
|
} else if (strcasecmp(dropfile, "door32.sys") == 0) {
|
||||||
return read_door32(dropfile);
|
ret = read_door32(dropfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mdcontrol.socket == -1) {
|
||||||
|
tcgetattr(STDIN_FILENO, &ttystate);
|
||||||
|
ttysave = ttystate;
|
||||||
|
|
||||||
|
ttystate.c_lflag &= ~(ICANON | ECHO);
|
||||||
|
ttystate.c_cc[VMIN] = 1;
|
||||||
|
tcsetattr(STDIN_FILENO, TCSANOW, &ttystate);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
12
MD_Printf.c
12
MD_Printf.c
@ -1,5 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include "MagiDoor.h"
|
||||||
|
|
||||||
void md_putchar(char c) {
|
void md_putchar(char c) {
|
||||||
if (mdcontrol.socket == -1) {
|
if (mdcontrol.socket == -1) {
|
||||||
@ -15,8 +18,9 @@ void md_printcode(char *code) {
|
|||||||
int colour = 0;
|
int colour = 0;
|
||||||
int bgcolour = 0;
|
int bgcolour = 0;
|
||||||
char codebuffer[10];
|
char codebuffer[10];
|
||||||
|
int i;
|
||||||
|
|
||||||
part = strtok(code, ' ');
|
part = strtok(code, " ");
|
||||||
if (part != NULL) {
|
if (part != NULL) {
|
||||||
if (strcmp(part, "bright") == 0) {
|
if (strcmp(part, "bright") == 0) {
|
||||||
bright = 1;
|
bright = 1;
|
||||||
@ -37,7 +41,7 @@ void md_printcode(char *code) {
|
|||||||
} else if (strcmp(part, "white") == 0) {
|
} else if (strcmp(part, "white") == 0) {
|
||||||
colour = 7;
|
colour = 7;
|
||||||
}
|
}
|
||||||
part = strtok(NULL, ' ');
|
part = strtok(NULL, " ");
|
||||||
if (part != NULL) {
|
if (part != NULL) {
|
||||||
if (bright == 0) {
|
if (bright == 0) {
|
||||||
bgcolour = colour;
|
bgcolour = colour;
|
||||||
@ -45,7 +49,7 @@ void md_printcode(char *code) {
|
|||||||
}
|
}
|
||||||
if (strcmp(part, "bright") == 0) {
|
if (strcmp(part, "bright") == 0) {
|
||||||
bright = 1;
|
bright = 1;
|
||||||
part = strtok(NULL, ' ');
|
part = strtok(NULL, " ");
|
||||||
}
|
}
|
||||||
if (part != NULL) {
|
if (part != NULL) {
|
||||||
|
|
||||||
@ -84,7 +88,7 @@ void md_printf(const char *fmt, ...) {
|
|||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
vsnprintf(buffer, sizeof buffer, fmt, ap);
|
vsnprintf(buffer, sizeof buffer, fmt, ap);
|
||||||
va_end(ap)
|
va_end(ap);
|
||||||
|
|
||||||
char *ptr;
|
char *ptr;
|
||||||
char *cbptr;
|
char *cbptr;
|
||||||
|
@ -17,5 +17,8 @@ typedef struct MDDoorControl {
|
|||||||
extern MDDoorControl_t mdcontrol;
|
extern MDDoorControl_t mdcontrol;
|
||||||
|
|
||||||
extern int md_init(const char *dropfile);
|
extern int md_init(const char *dropfile);
|
||||||
|
extern void md_exit(int exitcode);
|
||||||
|
extern void md_putchar(char c);
|
||||||
|
extern void md_printf(const char *fmt, ...);
|
||||||
|
extern char md_getc();
|
||||||
#endif
|
#endif
|
Loading…
x
Reference in New Issue
Block a user