magidoor/MD_Init.c
2019-11-30 15:51:53 +10:00

173 lines
5.0 KiB
C

#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);
}
}