X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=io.c;h=258da5513f9bd5eeaf7e14d169925e5bebcd7d15;hp=81f1c8a18b70fdb3953cb5d7530f43de77d1b1f6;hb=49483a1747cd310e33eea758b32a453fb46d4aac;hpb=cf91699c89b88f76dcf63c60624635184e8cb7eb diff --git a/io.c b/io.c index 81f1c8a..258da55 100644 --- a/io.c +++ b/io.c @@ -1,19 +1,37 @@ +#ifdef SERGEEV +#define _GNU_SOURCE +#endif /* SERGEEV */ #include +#ifdef SERGEEV +#include +#endif /* SERGEEV */ #include #include #include #include #include +#ifdef SERGEEV +#include +#endif /* SERGEEV */ #ifdef MSDOS #include #endif #include +#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 */ @@ -41,7 +59,7 @@ void iostart(int usecurses) { 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); @@ -83,7 +101,13 @@ void clearscreen(void) { } void pause_game(int i) { +#ifndef SERGEEV char buf[BUFSIZ], *prompt; +#else /* SERGEEV */ + char *prompt; + drawmaps(0); + setwnd(5); +#endif /* SERGEEV */ if (i==1) { if (skill > 2) prompt = "[ANOUNCEMENT ARRIVING...]"; @@ -97,6 +121,7 @@ void pause_game(int i) { prompt = "[PRESS ENTER TO CONTINUE]"; } +#ifndef SERGEEV if (curses) { waddch(stdscr, '\n'); waddstr(stdscr, prompt); @@ -105,17 +130,25 @@ void pause_game(int i) { 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; @@ -131,42 +164,100 @@ void skip(int i) { 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! */ @@ -187,12 +278,28 @@ void prouts(char *fmt, ...) { fflush(stdout); } } +#else /* SERGEEV */ + va_list ap; + va_start(ap, fmt); + vprouts(fmt, ap); + va_end(ap); +#endif /* SERGEEV */ } +#ifndef SERGEEV void getline(char *line, int max) { +#else /* SERGEEV */ +void cgetline(char *line, int max) { +#endif /* SERGEEV */ 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';