This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
magicka/doors.c
2016-03-23 14:21:08 +10:00

96 lines
1.9 KiB
C

#include <stdio.h>
#include <sys/stat.h>
#include <ctype.h>
#include <stdlib.h>
#include "bbs.h"
extern struct bbs_config conf;
extern int mynode;
int write_door32sys(int socket, struct user_record *user) {
struct stat s;
char buffer[256];
FILE *fptr;
sprintf(buffer, "%s/node%d", conf.bbs_path, mynode);
if (stat(buffer, &s) != 0) {
mkdir(buffer, 0755);
}
sprintf(buffer, "%s/node%d/door32.sys", conf.bbs_path, mynode);
fptr = fopen(buffer, "w");
if (!fptr) {
printf("Unable to open %s for writing!\n", buffer);
return 1;
}
fprintf(fptr, "2\n"); // telnet type
fprintf(fptr, "%d\n", socket); // socket
fprintf(fptr, "38400\n"); // baudrate
fprintf(fptr, "Magicka %d.%d\n", VERSION_MAJOR, VERSION_MINOR);
fprintf(fptr, "%d\n", user->id);
fprintf(fptr, "%s %s\n", user->firstname, user->lastname);
fprintf(fptr, "%s\n", user->loginname);
fprintf(fptr, "%d\n", user->sec_level);
fprintf(fptr, "%d\n", user->timeleft);
fprintf(fptr, "1\n"); // ansi emulation = 1
fprintf(fptr, "%d\n", mynode);
fclose(fptr);
return 0;
}
void rundoor(int socket, struct user_record *user, char *cmd, int stdio) {
char buffer[256];
if (write_door32sys(socket, user) != 0) {
return;
}
if (stdio) {
} else {
sprintf(buffer, "%s %d %d", cmd, mynode, socket);
system(buffer);
}
}
int door_menu(int socket, struct user_record *user) {
int doquit = 0;
int dodoors = 0;
char prompt[128];
int i;
char c;
while (!dodoors) {
s_displayansi(socket, "doors");
sprintf(prompt, "\r\nTL: %dm :> ", user->timeleft);
s_putstring(socket, prompt);
c = s_getc(socket);
switch(tolower(c)) {
case 'q':
dodoors = 1;
break;
case 'g':
doquit = 1;
dodoors = 1;
break;
default:
{
for (i=0;i<conf.door_count;i++) {
if (tolower(c) == tolower(conf.doors[i]->key)) {
rundoor(socket, user, conf.doors[i]->command, conf.doors[i]->stdio);
break;
}
}
}
break;
}
}
return doquit;
}