Initial commit

This commit is contained in:
Andrew Pamment 2019-11-30 15:51:53 +10:00
commit 6d635299db
3 changed files with 314 additions and 0 deletions

172
MD_Init.c Normal file
View File

@ -0,0 +1,172 @@
#include <stdio.h>
#include "MagiDoor.h"
#if defined(WIN32) || defined(_MSC_VER)
#define PATH_SEP '\\'
#else
#define PATH_SEP '/'
#endif
MDDoorControl_t mdcontrol;
int read_door32(const char *dropfile) {
FILE *fptr;
char buffer[256];
char *ptr1;
fptr = fopen(dropfile, "r");
if (!fptr) {
return -1;
}
fgets(buffer, 256, fptr); // com type
fgets(buffer, 256, fptr); // socket handle
mdcontrol.socket = strtol(buffer, NULL, 10);
fgets(buffer, 256, fptr); // baud rate
fgets(buffer, 256, fptr); // BBS ID
fgets(buffer, 256, fptr); // User record pos (1 based)
fgets(buffer, 256, fptr); // User's real name
ptr1 = strrchr(buffer, ' ');
if (ptr1 != NULL) {
*ptr1 = '\0'
ptr1++;
strncpy(mdcontrol.user_firstname, buffer, 32);
strncpy(mdcontrol.user_lastname, ptr1, 32);
} else {
strncpy(mdcontrol.user_firstname, buffer, 32);
memset(mdcontrol.user_lastname, '\0', 32);
}
fgets(buffer, 256, fptr); // User's handle
strncpy(mdcontrol.user_alias, buffer, 32);
fgets(buffer, 256, fptr); // User's sec level
mdcontrol.user_seclevel = strtol(buffer, NULL, 10);
fgets(buffer, 256, fptr); // time left (minutes)
mdcontrol.user_timeleft = strtol(buffer, NULL, 10) * 60;
fgets(buffer, 256, fptr); // emulation
fgets(buffer, 256, fptr); // node no
mdcontrol.node = strtol(buffer, NULL, 10);
#if defined(WIN32) || defined(_MSC_VER)
WSADATA wsa;
WSAStartup(WINSOCK_VERSION, &wsa);
#else
mdcontrol.socket = -1;
#endif
return 0;
}
int read_doorsys(const char *dropfile) {
FILE *fptr;
char buffer[256];
char *ptr1;
fptr = fopen(dropfile, "r");
if (!fptr) {
return -1;
}
fgets(buffer, 256, fptr); // Comport
fgets(buffer, 256, fptr); // Ebaud
fgets(buffer, 256, fptr); // data bits
fgets(buffer, 256, fptr); // node number
mdcontrol.node = strtol(buffer, NULL, 10);
fgets(buffer, 256, fptr); // Lbaud
fgets(buffer, 256, fptr); // Screen Display
fgets(buffer, 256, fptr); // Printer On
fgets(buffer, 256, fptr); // Page Bell
fgets(buffer, 256, fptr); // Caller alarm
fgets(buffer, 256, fptr); // User Name
ptr1 = strrchr(buffer, ' ');
if (ptr1 != NULL) {
*ptr1 = '\0'
ptr1++;
strncpy(mdcontrol.user_firstname, buffer, 32);
strncpy(mdcontrol.user_lastname, ptr1, 32);
} else {
strncpy(mdcontrol.user_firstname, buffer, 32);
memset(mdcontrol.user_lastname, '\0', 32);
}
fgets(buffer, 256, fptr); // Location
strncpy(mdcontrol.user_location, 32);
fgets(buffer, 256, fptr); // voice phone
fgets(buffer, 256, fptr); // data phone
fgets(buffer, 256, fptr); // password
fgets(buffer, 256, fptr); // sec level
mdcontrol.user_seclevel = strtol(buffer, NULL, 10);
fgets(buffer, 256, fptr); // calls
fgets(buffer, 256, fptr); // last login
fgets(buffer, 256, fptr); // time left (seconds)
mdcontrol.user_timeleft = strtol(buffer, NULL, 10);
fgets(buffer, 256, fptr); // time left (minutes)
fgets(buffer, 256, fptr); // graphics
fgets(buffer, 256, fptr); // screen len
fgets(buffer, 256, fptr); // usermode
fgets(buffer, 256, fptr); // extra 1
fgets(buffer, 256, fptr); // extra 2
fgets(buffer, 256, fptr); // expiry date
fgets(buffer, 256, fptr); // rec num
fgets(buffer, 256, fptr); // protocol
fgets(buffer, 256, fptr); // uploads
fgets(buffer, 256, fptr); // downloads
fgets(buffer, 256, fptr); // Lim down k
fgets(buffer, 256, fptr); // Lim down k2
fgets(buffer, 256, fptr); // DOB
fgets(buffer, 256, fptr); // User Base
fgets(buffer, 256, fptr); // Message Base
fgets(buffer, 256, fptr); // Sysop Name
strncpy(mdcontrol.sysop_name, buffer, 32);
fgets(buffer, 256, fptr); // Handle
strncpy(mdcontrol.user_alias, buffer, 32);
fgets(buffer, 256, fptr); // Next Event
fgets(buffer, 256, fptr); // Error Free
fgets(buffer, 256, fptr); // Always N
fgets(buffer, 256, fptr); // Always Y
fgets(buffer, 256, fptr); // Def Colour
fgets(buffer, 256, fptr); // Always 0
fgets(buffer, 256, fptr); // Last Login 2
fgets(buffer, 256, fptr); // Time Login
fgets(buffer, 256, fptr); // Last Login Time
fgets(buffer, 256, fptr); // Max Integer
fgets(buffer, 256, fptr); // Downs today
fgets(buffer, 256, fptr); // Upload K
fgets(buffer, 256, fptr); // Download K
fgets(buffer, 256, fptr); // Comment
fgets(buffer, 256, fptr); // Always 0
fgets(buffer, 256, fptr); // posted
fclose(fptr);
mdcontrol.socket = -1;
return 0;
}
int md_init(const char *dropfile) {
char *filename = strrchr(dropfile, PATH_SEP);
if (filename == NULL) {
filename = dropfile;
} else {
filename++;
}
if (strcasecmp(dropfile, "door.sys") == 0) {
return read_doorsys(dropfile);
} else if (strcasecmp(dropfile, "door32.sys") == 0) {
return read_door32(dropfile);
}
}

121
MD_Printf.c Normal file
View File

@ -0,0 +1,121 @@
#include <stdio.h>
#include <stdarg.h>
void md_putchar(char c) {
if (mdcontrol.socket == -1) {
putchar(c);
} else {
send(mdcontrol.socket, &c, 1, 0);
}
}
void md_printcode(char *code) {
char *part;
int bright = 0;
int colour = 0;
int bgcolour = 0;
char codebuffer[10];
part = strtok(code, ' ');
if (part != NULL) {
if (strcmp(part, "bright") == 0) {
bright = 1;
} else if (strcmp(part, "black") == 0) {
colour = 0;
} else if (strcmp(part, "red") == 0) {
colour = 1;
} else if (strcmp(part, "green") == 0) {
colour = 2;
} else if (strcmp(part, "yellow") == 0) {
colour = 3;
} else if (strcmp(part, "blue") == 0) {
colour = 4;
} else if (strcmp(part, "magenta") == 0) {
colour = 5;
} else if (strcmp(part, "cyan") == 0) {
colour = 6;
} else if (strcmp(part, "white") == 0) {
colour = 7;
}
part = strtok(NULL, ' ');
if (part != NULL) {
if (bright == 0) {
bgcolour = colour;
colour = 0;
}
if (strcmp(part, "bright") == 0) {
bright = 1;
part = strtok(NULL, ' ');
}
if (part != NULL) {
if (strcmp(part, "black") == 0) {
colour = 0;
} else if (strcmp(part, "red") == 0) {
colour = 1;
} else if (strcmp(part, "green") == 0) {
colour = 2;
} else if (strcmp(part, "yellow") == 0) {
colour = 3;
} else if (strcmp(part, "blue") == 0) {
colour = 4;
} else if (strcmp(part, "magenta") == 0) {
colour = 5;
} else if (strcmp(part, "cyan") == 0) {
colour = 6;
} else if (strcmp(part, "white") == 0) {
colour = 7;
}
}
}
}
snprintf(codebuffer, 10, "\027[%d;4%d;3%dm", bright, bgcolour, colour);
for (i=0;i<10;i++) {
md_putchar(codebuffer[i]);
}
}
void md_printf(const char *fmt, ...) {
char buffer[4096];
char codebuf[128];
va_list ap;
va_start(ap, fmt);
vsnprintf(buffer, sizeof buffer, fmt, ap);
va_end(ap)
char *ptr;
char *cbptr;
ptr = buffer;
while (*ptr != '\0') {
if (*ptr == '`') {
ptr++;
if (*ptr == '`') {
md_putchar('`');
ptr++;
continue;
} else if (*ptr == '\0') {
break;
}
cbptr = codebuf;
while(*ptr != '`' && *ptr != '\0' && cbptr - codebuf < 127) {
*cbptr = *ptr;
ptr++;
cbptr++;
*cbptr = '\0';
}
md_printcode(codebuf);
if (*ptr == '\0') {
break;
}
ptr++;
continue;
}
md_putchar(*ptr);
ptr++;
}
}

21
MagiDoor.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef __MAGIDOOR_H__
#define __MAGIDOOR_H__
typedef struct MDDoorControl {
char user_alias[32];
char user_firstname[32];
char user_lastname[32];
int user_timeleft;
char sysop_name[32];
int node;
char user_location[32];
int user_seclevel;
int socket;
} MDDoorControl_t;
extern MDDoorControl_t mdcontrol;
extern int md_init(const char *dropfile);
#endif