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