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 <termios.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include "MagiDoor.h"
|
||||
|
||||
|
||||
@ -11,7 +15,7 @@
|
||||
|
||||
MDDoorControl_t mdcontrol;
|
||||
|
||||
|
||||
struct termios ttysave;
|
||||
|
||||
int read_door32(const char *dropfile) {
|
||||
FILE *fptr;
|
||||
@ -32,7 +36,7 @@ int read_door32(const char *dropfile) {
|
||||
fgets(buffer, 256, fptr); // User's real name
|
||||
ptr1 = strrchr(buffer, ' ');
|
||||
if (ptr1 != NULL) {
|
||||
*ptr1 = '\0'
|
||||
*ptr1 = '\0';
|
||||
ptr1++;
|
||||
strncpy(mdcontrol.user_firstname, buffer, 32);
|
||||
strncpy(mdcontrol.user_lastname, ptr1, 32);
|
||||
@ -87,7 +91,7 @@ int read_doorsys(const char *dropfile) {
|
||||
fgets(buffer, 256, fptr); // User Name
|
||||
ptr1 = strrchr(buffer, ' ');
|
||||
if (ptr1 != NULL) {
|
||||
*ptr1 = '\0'
|
||||
*ptr1 = '\0';
|
||||
ptr1++;
|
||||
strncpy(mdcontrol.user_firstname, buffer, 32);
|
||||
strncpy(mdcontrol.user_lastname, ptr1, 32);
|
||||
@ -96,7 +100,7 @@ int read_doorsys(const char *dropfile) {
|
||||
memset(mdcontrol.user_lastname, '\0', 32);
|
||||
}
|
||||
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); // data phone
|
||||
@ -155,18 +159,42 @@ int read_doorsys(const char *dropfile) {
|
||||
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) {
|
||||
char *filename = strrchr(dropfile, PATH_SEP);
|
||||
struct termios ttystate;
|
||||
int ret;
|
||||
|
||||
if (filename == NULL) {
|
||||
filename = dropfile;
|
||||
filename = (char *)dropfile;
|
||||
} else {
|
||||
filename++;
|
||||
}
|
||||
|
||||
if (strcasecmp(dropfile, "door.sys") == 0) {
|
||||
return read_doorsys(dropfile);
|
||||
ret = read_doorsys(dropfile);
|
||||
} 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 <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include "MagiDoor.h"
|
||||
|
||||
void md_putchar(char c) {
|
||||
if (mdcontrol.socket == -1) {
|
||||
@ -15,8 +18,9 @@ void md_printcode(char *code) {
|
||||
int colour = 0;
|
||||
int bgcolour = 0;
|
||||
char codebuffer[10];
|
||||
int i;
|
||||
|
||||
part = strtok(code, ' ');
|
||||
part = strtok(code, " ");
|
||||
if (part != NULL) {
|
||||
if (strcmp(part, "bright") == 0) {
|
||||
bright = 1;
|
||||
@ -37,7 +41,7 @@ void md_printcode(char *code) {
|
||||
} else if (strcmp(part, "white") == 0) {
|
||||
colour = 7;
|
||||
}
|
||||
part = strtok(NULL, ' ');
|
||||
part = strtok(NULL, " ");
|
||||
if (part != NULL) {
|
||||
if (bright == 0) {
|
||||
bgcolour = colour;
|
||||
@ -45,7 +49,7 @@ void md_printcode(char *code) {
|
||||
}
|
||||
if (strcmp(part, "bright") == 0) {
|
||||
bright = 1;
|
||||
part = strtok(NULL, ' ');
|
||||
part = strtok(NULL, " ");
|
||||
}
|
||||
if (part != NULL) {
|
||||
|
||||
@ -84,7 +88,7 @@ void md_printf(const char *fmt, ...) {
|
||||
|
||||
va_start(ap, fmt);
|
||||
vsnprintf(buffer, sizeof buffer, fmt, ap);
|
||||
va_end(ap)
|
||||
va_end(ap);
|
||||
|
||||
char *ptr;
|
||||
char *cbptr;
|
||||
|
@ -17,5 +17,8 @@ typedef struct MDDoorControl {
|
||||
extern MDDoorControl_t mdcontrol;
|
||||
|
||||
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
|
Loading…
x
Reference in New Issue
Block a user