+#ifdef SERGEEV
+#define _GNU_SOURCE
+#endif /* SERGEEV */
#include <stdio.h>
+#ifdef SERGEEV
+#include <unistd.h>
+#endif /* SERGEEV */
#include <termios.h>
#include <curses.h>
#include <signal.h>
#include <ctype.h>
#include <stdarg.h>
+#ifdef SERGEEV
+#include <conio.h>
+#endif /* SERGEEV */
#ifdef MSDOS
#include <dos.h>
#endif
#include <time.h>
+#ifdef SERGEEV
+#include "sstlinux.h"
+#endif /* SERGEEV */
#include "sst.h"
+#ifndef SERGEEV
static int linecount; /* for paging */
+#endif /* SERGEEV */
static int screenheight = 24, screenwidth = 80;
+#ifndef SERGEEV
static int curses = FALSE;
+#else /* SERGEEV */
+static int curses = TRUE;
+#endif /* SERGEEV */
static void outro(int sig) {
/* wrap up, either normally or due to signal */
if(signal(SIGQUIT,SIG_IGN) != SIG_IGN)
(void)signal(SIGQUIT,fastexit);
- if (curses = usecurses) {
+ if ((curses = usecurses)) {
(void)initscr();
#ifdef KEY_MIN
keypad(stdscr, TRUE);
#endif
}
-void pause(int i) {
- char buf[BUFSIZ], *prompt;
+void pause_game(int i) {
+ char *prompt;
+#ifndef SERGEEV
+ char buf[BUFSIZ];
+#else /* SERGEEV */
+ drawmaps(0);
+ setwnd(5);
+#endif /* SERGEEV */
if (i==1) {
if (skill > 2)
prompt = "[ANOUNCEMENT ARRIVING...]";
prompt = "[PRESS ENTER TO CONTINUE]";
}
+#ifndef SERGEEV
if (curses) {
- waddch('\n');
+ waddch(stdscr, '\n');
waddstr(stdscr, prompt);
wgetnstr(stdscr, buf, sizeof(buf));
wclear(stdscr);
wrefresh(stdscr);
} else {
putchar('\n');
- prout(prompt);
+ proutn(prompt);
fgets(buf, sizeof(buf), stdin);
if (i != 0) {
clearscreen();
}
linecount = 0;
}
+#else /* SERGEEV */
+ proutn(prompt);
+ getche();
+ clrscr();
+ setwnd(4);
+ clrscr();
+#endif /* SERGEEV */
}
void skip(int i) {
+#ifndef SERGEEV
while (i-- > 0) {
if (curses) {
int y, x;
getyx(stdscr, y, x);
if (y == screenheight-1)
- pause(0);
+ pause_game(0);
else
waddch(stdscr, '\n');
} else {
linecount++;
if (linecount >= screenheight)
- pause(0);
+ pause_game(0);
else
putchar('\n');
}
+#else /* SERGEEV */
+ while (i-- > 0) proutn("\n\r");
+}
+
+static void vproutn(char *fmt, va_list ap) {
+ char *s, *p;
+ vasprintf(&s, fmt, ap);
+ p=s;
+ if ((curwnd==4)&&(wherey()==wnds[curwnd].wndbottom-wnds[curwnd].wndtop)){
+ if (strchr(s,'\n')) {
+ p=strchr(s,'\n');
+ p[0]=0;
+ cprintf("%s",s);
+ p++;
+ pause_game(0);
+ }
+#endif /* SERGEEV */
}
+#ifdef SERGEEV
+ if ((curwnd==4)&&(wherey()>wnds[curwnd].wndbottom-wnds[curwnd].wndtop+1))
+ cprintf("\r");
+// setwnd(curwnd);
+ if (strchr(s,'\n') || strchr(s,'\r')) clreol();
+ cprintf("%s",p);
+ free(s);
+#endif /* SERGEEV */
}
void proutn(char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
+#ifndef SERGEEV
if (curses) {
vw_printw(stdscr, fmt, ap);
wrefresh(stdscr);
} else
vprintf(fmt, ap);
+#else /* SERGEEV */
+ vproutn(fmt, ap);
+#endif /* SERGEEV */
va_end(ap);
}
void prout(char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
+#ifndef SERGEEV
if (curses) {
vw_printw(stdscr, fmt, ap);
wrefresh(stdscr);
} else
vprintf(fmt, ap);
+#else /* SERGEEV */
+ vproutn(fmt, ap);
+#endif /* SERGEEV */
va_end(ap);
skip(1);
}
void proutc(char *line) {
line[strlen(line)-1] = '\0';
+#ifndef SERGEEV
if (curses)
waddstr(stdscr, line);
else
fputs(line, stdout);
+#else /* SERGEEV */
+ cputs(line);
+#endif /* SERGEEV */
skip(1);
}
+#ifdef SERGEEV
+static void prchr(char *s){
+ char str[2];
+ strncpy(str,s,1);
+ str[1]=0;
+ proutn(str);
+}
+
+static void vprouts(char *fmt, va_list ap) {
+ char *s, *p;
+ vasprintf(&s, fmt, ap);
+ p=s;
+ while (*p) {
+ prchr(p++);
+ delay(30);
+ }
+ free(s);
+}
+
+#endif /* SERGEEV */
void prouts(char *fmt, ...) {
+#ifndef SERGEEV
clock_t endTime;
char *s, buf[BUFSIZ];
/* print slowly! */
fflush(stdout);
}
}
+#else /* SERGEEV */
+ va_list ap;
+ va_start(ap, fmt);
+ vprouts(fmt, ap);
+ va_end(ap);
+#endif /* SERGEEV */
}
-void getline(char *line, int max)
+void warble(void)
+/* sound and visual effects for teleportation */
{
+#ifdef SERGEEV
+ int posx, posy;
+ posx=wherex();
+ posy=wherey();
+ drawmaps(1);
+ setwnd(4);
+ gotoxy(posx,posy);
+ sound(50);
+ delay(1000);
+ nosound();
+#else
+ prouts(" . . . . . ");
+#endif /* SERGEEV */
+}
+
+void getline(char *line, int max) {
if (curses) {
+#ifndef SERGEEV
wgetnstr(stdscr, line, max);
wrefresh(stdscr);
+#else /* SERGEEV */
+ line[0]=max-1;
+ cgets(line);
+ memmove(line,&line[2],max-3);
+#endif /* SERGEEV */
} else {
fgets(line, max, stdin);
line[strlen(line)-1] = '\0';
}
}
+
+void commandhook(char *cmd, int before) {
+}