Initial commit
This commit is contained in:
commit
6d635299db
172
MD_Init.c
Normal file
172
MD_Init.c
Normal 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
121
MD_Printf.c
Normal 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
21
MagiDoor.h
Normal 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
|
Loading…
x
Reference in New Issue
Block a user