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