Fix bugs, add makefile

This commit is contained in:
Andrew Pamment 2019-11-30 18:32:36 +10:00
parent 6d635299db
commit 5cd6ad8060
5 changed files with 78 additions and 12 deletions

5
CMakeLists.txt Normal file
View 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
View 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;
}
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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