From 89e52d61fcf689e15a8f831dea084a33ceaa8217 Mon Sep 17 00:00:00 2001 From: "Eric S. Raymond" Date: Sat, 5 Feb 2005 22:23:50 +0000 Subject: [PATCH] This completely merges the line-oriented and screen I/O managers, except it doesn't do color. --- TODO | 9 + battle.c | 3 +- io.c | 599 ++++++++++++++++++++++-------------------------------- makefile | 12 +- moving.c | 1 - reports.c | 9 +- setup.c | 1 - sst.c | 8 +- sst.h | 32 ++- 9 files changed, 287 insertions(+), 387 deletions(-) diff --git a/TODO b/TODO index f896c30..ae961f4 100644 --- a/TODO +++ b/TODO @@ -9,3 +9,12 @@ REST, DOCK, QUIT, and DAMAGE were in the original non-"super" version. * Add a field to the report indicating whether we have dilithium. + +* Look: + +Track for torpedo number 1- 6 - 5 7 - 6 8 - 7 ***Commander at Sector 8 - 7 damaged-- displaced by blast to Sector 9 - 8 + +Track for torpedo number 2- 6 - 5 7 - 6 8 - 6 +9 - 7 +***Commander at Sector 9 - 8 destroyed. +COMMAND> diff --git a/battle.c b/battle.c index 7904338..df13148 100644 --- a/battle.c +++ b/battle.c @@ -1,5 +1,4 @@ #include -#include "conio.h" #include "sst.h" void doshield(int i) { @@ -187,7 +186,7 @@ void torpedo(double course, double r, int inx, int iny, double *hit, int wait, i deltax /= bigger; deltay /= bigger; if (game.damage[DSRSENS]==0 || condit==IHDOCKED) - setwnd(LEFTUPPER_WINDOW); + setwnd(SRSCAN_WINDOW); else setwnd(LOWER_WINDOW); /* Loop to move a single torpedo */ diff --git a/io.c b/io.c index d87d097..54b109b 100644 --- a/io.c +++ b/io.c @@ -1,4 +1,3 @@ -#define _GNU_SOURCE #include #include #include @@ -8,323 +7,222 @@ #include #include -#include "conio.h" #include "sst.h" #include "sstlinux.h" -#ifndef SERGEEV static int linecount; /* for paging */ -static int screenheight = 24, screenwidth = 80; -#endif /* SERGEEV */ -#ifndef SERGEEV -static int curses = FALSE; -#else /* SERGEEV */ static int curses = TRUE; -#endif /* SERGEEV */ -#ifdef SERGEEV -typedef struct { - int wndleft,wndtop,wndright,wndbottom; -} wnd; -static wnd wnds[6]={{1,1,80,25}, /* FULLSCREEN_WINDOW */ - {1,1,25,12}, /* LEFTUPPER_WINDOW */ - {26,2,80,12}, /* SRSCAN_WINDOW */ - {65,1,80,10}, /* LRSCAN_WINDOW */ - {1,13,80,23}, /* LOWER_WINDOW */ - {1,24,80,25}, /* BOTTOM_WINDOW */ -}; -short curwnd; -#endif /* SERGEEV */ +WINDOW *curwnd; -#ifndef SERGEEV -static void outro(int sig) { +static void outro(void) /* wrap up, either normally or due to signal */ +{ if (curses) { clear(); + curs_set(1); (void)refresh(); (void)resetterm(); //(void)echo(); (void)endwin(); + putchar('\n'); } } -static void fastexit(int sig) { - outro(sig); - putchar('\n'); - exit(0); -} -#endif /* SERGEEV */ - -void iostart(int usecurses) { -#ifdef SERGEEV - initconio(); - textattr(7); - clrscr(); - setwnd(FULLSCREEN_WINDOW); -#else - (void) signal(SIGINT, fastexit); - (void) signal(SIGINT, fastexit); -#ifdef SIGIOT - (void) signal(SIGIOT,fastexit); /* for assert(3) */ -#endif /* SIGIOT */ - if(signal(SIGQUIT,SIG_IGN) != SIG_IGN) - (void)signal(SIGQUIT,fastexit); - - if ((curses = usecurses)) { - (void)initscr(); +void iostart(int usecurses) +{ + if ((curses = usecurses)) { + if (atexit(outro)){ + fprintf(stderr,"Unable to register outro(), exiting...\n"); + exit(1); + } + (void)initscr(); #ifdef KEY_MIN - keypad(stdscr, TRUE); + keypad(stdscr, TRUE); #endif /* KEY_MIN */ - (void)saveterm(); - (void)nonl(); - (void)cbreak(); - //(void)noecho(); - scrollok(stdscr, TRUE); - getmaxyx(stdscr, screenheight, screenwidth); - } else { - char *LINES = getenv("LINES"); - if (LINES) - screenheight = atoi(LINES); - } -#endif /* SERGEEV */ + (void)saveterm(); + (void)nonl(); + (void)cbreak(); + //(void)noecho(); + FULLSCREEN_WINDOW = stdscr; + SRSCAN_WINDOW = newwin(12, 25, 0, 0); + REPORT_WINDOW = newwin(10, 0, 1, 25); + LRSCAN_WINDOW = newwin(10, 0, 0, 64); + LOWER_WINDOW = newwin(0, 0, 12, 0); + BOTTOM_WINDOW = newwin(1, 0, LINES-1, 0); + scrollok(LOWER_WINDOW, TRUE); + } } -void ioend(void) { -#ifndef SERGEEV - outro(0); -#endif /* SERGEEV */ -} -void waitfor(void) { +void waitfor(void) /* wait for user action -- OK to do nothing if on a TTY */ -#ifdef SERGEEV - getche(); -#endif /* SERGEEV */ +{ + if (curses) + getch(); } -void pause_game(int i) { - char *prompt; -#ifndef SERGEEV - char buf[BUFSIZ]; -#else /* SERGEEV */ - drawmaps(0); - setwnd(BOTTOM_WINDOW); -#endif /* SERGEEV */ - if (i==1) { - if (skill > 2) - prompt = "[ANOUNCEMENT ARRIVING...]"; - else - prompt = "[IMPORTANT ANNOUNCEMENT ARRIVING -- PRESS ENTER TO CONTINUE]"; - } - else { - if (skill > 2) - prompt = "[CONTINUE?]"; - else - prompt = "[PRESS ENTER TO CONTINUE]"; +void pause_game(int i) +{ + char *prompt; + char buf[BUFSIZ]; + if (i==1) { + if (skill > 2) + prompt = "[ANOUNCEMENT ARRIVING...]"; + else + prompt = "[IMPORTANT ANNOUNCEMENT ARRIVING -- PRESS ENTER TO CONTINUE]"; + } + else { + if (skill > 2) + prompt = "[CONTINUE?]"; + else + prompt = "[PRESS ENTER TO CONTINUE]"; - } -#ifndef SERGEEV - if (curses) { - waddch(stdscr, '\n'); - waddstr(stdscr, prompt); - wgetnstr(stdscr, buf, sizeof(buf)); - wclear(stdscr); - wrefresh(stdscr); - } else { + } + if (curses) { + drawmaps(0); + setwnd(BOTTOM_WINDOW); + wclear(BOTTOM_WINDOW); + waddstr(BOTTOM_WINDOW, prompt); + wgetnstr(BOTTOM_WINDOW, buf, sizeof(buf)); + wclear(BOTTOM_WINDOW); + wrefresh(BOTTOM_WINDOW); + setwnd(LOWER_WINDOW); + } else { + putchar('\n'); + proutn(prompt); + fgets(buf, sizeof(buf), stdin); + if (i != 0) { + int j; + for (j = 0; j < 24; j++) putchar('\n'); - proutn(prompt); - fgets(buf, sizeof(buf), stdin); - if (i != 0) { - /* much more in that old-TTY spirit to throw linefeeds */ - int j; - for (j = 0; j < screenheight; j++) - putchar('\n'); - } - linecount = 0; } -#else /* SERGEEV */ - proutn(prompt); - getche(); - clrscr(); - setwnd(LOWER_WINDOW); - clrscr(); -#endif /* SERGEEV */ + linecount = 0; + } } -void skip(int i) { -#ifndef SERGEEV +void skip(int i) +{ while (i-- > 0) { if (curses) { - int y, x; - getyx(stdscr, y, x); - if (y == screenheight-1) - pause_game(0); - else - waddch(stdscr, '\n'); + proutn("\n\r"); } else { linecount++; - if (linecount >= screenheight) + if (linecount >= 24) pause_game(0); else putchar('\n'); } -#else /* SERGEEV */ - while (i-- > 0) proutn("\n\r"); -#endif /* SERGEEV */ + } } -static void vproutn(char *fmt, va_list ap) { -#ifdef SERGEEV - char *s, *p; - vasprintf(&s, fmt, ap); - p=s; - if ((curwnd==LOWER_WINDOW)&&(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 */ +static void vproutn(char *fmt, va_list ap) +{ + if (curses) { + vwprintw(curwnd, fmt, ap); + wrefresh(curwnd); } -#ifdef SERGEEV - if ((curwnd==LOWER_WINDOW)&&(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 */ + else + vprintf(fmt, ap); } -void proutn(char *fmt, ...) { +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, ...) { +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! */ - va_list ap; - va_start(ap, fmt); - vsprintf(buf, fmt, ap); - va_end(ap); - skip(1); - for (s = buf; *s; s++) { - endTime = clock() + CLOCKS_PER_SEC*0.05; - while (clock() < endTime) continue; - if (curses) { - waddch(stdscr, *s); - wrefresh(stdscr); - } - else { - putchar(*s); - fflush(stdout); - } - } -#else /* SERGEEV */ +void prouts(char *fmt, ...) +/* print slowly! */ +{ + clock_t endTime; + char *s, buf[BUFSIZ]; va_list ap; va_start(ap, fmt); - vprouts(fmt, ap); + vsprintf(buf, fmt, ap); va_end(ap); -#endif /* SERGEEV */ + skip(1); + for (s = buf; *s; s++) { + endTime = clock() + CLOCKS_PER_SEC*0.05; + while (clock() < endTime) continue; + if (curses) { + waddch(curwnd, *s); + wrefresh(curwnd); + } + else { + putchar(*s); + fflush(stdout); + } + } } -void cgetline(char *line, int max) { +void cgetline(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 */ + wgetnstr(curwnd, line, max); + strcat(line, "\n"); + wrefresh(curwnd); } else { fgets(line, max, stdin); - line[strlen(line)-1] = '\0'; } + line[strlen(line)-1] = '\0'; } -void setwnd(short wndnum){ +void setwnd(WINDOW *wnd) /* change windows -- OK for this to be a no-op in tty mode */ -#ifdef SERGEEV - int cury; - cury=wherey()+wnds[curwnd].wndtop-wnds[wndnum].wndtop; - if ((curwnd==FULLSCREEN_WINDOW)&&(wndnum!=FULLSCREEN_WINDOW)) clrscr(); - window(wnds[wndnum].wndleft, wnds[wndnum].wndtop, wnds[wndnum].wndright, wnds[wndnum].wndbottom); - if ((curwnd==wndnum)&&(cury>wnds[wndnum].wndbottom-wnds[wndnum].wndtop+1)){ - gotoxy(wnds[wndnum].wndright-wnds[wndnum].wndleft+1,wnds[wndnum].wndbottom-wnds[wndnum].wndtop+1); - skip(1); - } - curwnd=wndnum; - gotoxy(1,cury); -#endif /* SERGEEV */ +{ + if (curses) { + curwnd=wnd; + curs_set(wnd == FULLSCREEN_WINDOW || wnd == LOWER_WINDOW); + } +} + +void clreol (void) +/* clear to end of line -- can be a no-op in tty mode */ +{ + if (curses) { + wclrtoeol(curwnd); + wrefresh(curwnd); + } } +void clrscr (void) +/* clear screen -- can be a no-op in tty mode */ +{ + if (curses) { + wclear(curwnd); + wmove(curwnd,0,0); + wrefresh(curwnd); + } +} + +void textcolor (int color) +{ + if (curses) { + wattroff(curwnd, A_REVERSE); + // FIXME + } +} + +void highvideo (void) +{ + if (curses) { + attron(A_REVERSE); + } +} + void commandhook(char *cmd, int before) { } @@ -332,144 +230,131 @@ void commandhook(char *cmd, int before) { * Things past this point have policy implications. */ -void drawmaps(short l) { +void drawmaps(short l) /* hook to be called after moving to redraw maps */ -#ifdef SERGEEV - _setcursortype(_NOCURSOR); - if (l==1) sensor(); - if (l!=2) setwnd(LEFTUPPER_WINDOW); - gotoxy(1,1); - enqueue("no"); - srscan(SCAN_FULL); - if (l!=2){ - setwnd(SRSCAN_WINDOW); - clrscr(); - srscan(SCAN_NO_LEFTSIDE); - setwnd(LRSCAN_WINDOW); - clrscr(); - enqueue("l"); - lrscan(); - _setcursortype(_NORMALCURSOR); - } -#endif /* SERGEEV */ +{ + if (curses) { + if (l == 1) + sensor(); + if (l != 2) { + setwnd(SRSCAN_WINDOW); + wmove(curwnd, 0, 0); + enqueue("no"); + srscan(SCAN_FULL); + setwnd(REPORT_WINDOW); + wclear(REPORT_WINDOW); + wmove(REPORT_WINDOW, 0, 0); + srscan(SCAN_NO_LEFTSIDE); + setwnd(LRSCAN_WINDOW); + wclear(LRSCAN_WINDOW); + wmove(LRSCAN_WINDOW, 0, 0); + enqueue("l"); + lrscan(); + } + } } void boom(int ii, int jj) /* enemy fall down, go boom */ { -#ifdef SERGEEV - int crx, cry; - crx=wherex(); - cry=wherey(); - setwnd(LEFTUPPER_WINDOW); - drawmaps(2); - gotoxy(jj*2+3,ii+2); - highvideo(); - proutn("%c", game.quad[ii][jj]); - gotoxy(wherex()-1,wherey()); - sound(500); - delay(1000); - nosound(); - lowvideo(); - proutn("%c", game.quad[ii][jj]); - setwnd(LOWER_WINDOW); - gotoxy(crx,cry); - _setcursortype(_NORMALCURSOR); - delay(500); -#endif /* SERGEEV */ + if (curses) { + setwnd(SRSCAN_WINDOW); + drawmaps(2); + wmove(SRSCAN_WINDOW, ii*2+3, jj+2); + wattron(SRSCAN_WINDOW, A_REVERSE); + waddch(SRSCAN_WINDOW, game.quad[ii][jj]); + wrefresh(SRSCAN_WINDOW); + sound(500); + delay(1000); + nosound(); + wmove(SRSCAN_WINDOW, ii*2+3, jj+2); + wattroff(SRSCAN_WINDOW, A_REVERSE); + waddch(SRSCAN_WINDOW, game.quad[ii][jj]); + wrefresh(SRSCAN_WINDOW); + setwnd(LOWER_WINDOW); + delay(500); + } } void warble(void) /* sound and visual effects for teleportation */ { -#ifdef SERGEEV - int posx, posy; - posx=wherex(); - posy=wherey(); - drawmaps(1); - setwnd(LOWER_WINDOW); - gotoxy(posx,posy); - sound(50); - delay(1000); - nosound(); -#else - prouts(" . . . . . "); -#endif /* SERGEEV */ + if (curses) { + drawmaps(1); + setwnd(LOWER_WINDOW); + sound(50); + delay(1000); + nosound(); + } else + prouts(" . . . . . "); } void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad) /* torpedo-track animation */ { -#ifndef SERGEEV - if (l == 1) { - if (n != 1) { + if (!curses) { + if (l == 1) { + if (n != 1) { + skip(1); + proutn("Track for torpedo number %d- ", i); + } + else { + skip(1); + proutn("Torpedo track- "); + } + } else if (l==4 || l==9) skip(1); - proutn("Track for torpedo number %d- ", i); - } - else { - skip(1); - proutn("Torpedo track- "); - } - } else if (l==4 || l==9) - skip(1); - proutn("%d - %d ", (int)x, (int)y); -#else - if (game.damage[DSRSENS]==0 || condit==IHDOCKED) { - int crx, cry; - crx = wherex(); - cry = wherey(); - drawmaps(2); - delay((wait!=1)*400); - gotoxy(iy*2+3,ix+2); - if ((game.quad[ix][iy]==IHDOT)||(game.quad[ix][iy]==IHBLANK)){ - game.quad[ix][iy]='+'; - drawmaps(2); - game.quad[ix][iy]=iquad; - sound(l*10); - delay(100); - nosound(); - } - else { - game.quad[ix][iy]|=128; + proutn("%d - %d ", (int)x, (int)y); + } else { + if (game.damage[DSRSENS]==0 || condit==IHDOCKED) { drawmaps(2); - game.quad[ix][iy]=iquad; - _setcursortype(_NOCURSOR); - sound(500); - delay(1000); - nosound(); - lowvideo(); - _setcursortype(_NORMALCURSOR); + delay((wait!=1)*400); + if ((game.quad[ix][iy]==IHDOT)||(game.quad[ix][iy]==IHBLANK)){ + game.quad[ix][iy]='+'; + drawmaps(2); + game.quad[ix][iy]=iquad; + sound(l*10); + delay(100); + nosound(); + } + else { + game.quad[ix][iy] |= DAMAGED; + drawmaps(2); + game.quad[ix][iy]=iquad; + sound(500); + delay(1000); + nosound(); + wattroff(curwnd, A_REVERSE); + } + } else { + proutn("%d - %d ", (int)x, (int)y); } - gotoxy(crx, cry); - } else { - proutn("%d - %d ", (int)x, (int)y); } -#endif /* SERGEEV */ } -void makechart(void) { -#ifdef SERGEEV - _setcursortype(_NOCURSOR); - setwnd(LOWER_WINDOW); - clrscr(); - chart(0); - _setcursortype(_NORMALCURSOR); -#endif /* SERGEEV */ +void makechart(void) +{ + if (curses) { + setwnd(LOWER_WINDOW); + wclear(LOWER_WINDOW); + chart(0); + } } -void setpassword(void) { -#ifndef SERGEEV +void setpassword(void) +{ + if (!curses) { while (TRUE) { - scan(); - strcpy(game.passwd, citem); - chew(); - if (*game.passwd != 0) break; - proutn("Please type in a secret password-"); + scan(); + strcpy(game.passwd, citem); + chew(); + if (*game.passwd != 0) break; + proutn("Please type in a secret password-"); } -#else + } else { int i; for(i=0;i<3;i++) game.passwd[i]=(char)(97+(int)(Rand()*25)); game.passwd[3]=0; -#endif /* SERGEEV */ + } } diff --git a/makefile b/makefile index 78afa1c..4aa098e 100644 --- a/makefile +++ b/makefile @@ -7,7 +7,7 @@ CFLAGS= -O1 -g -Wall -DSSTDOC='"/usr/share/doc/sst/sst.doc"' .c.o: $(CC) $(CFLAGS) -c $< -CFILES= sst.c finish.c reports.c setup.c moving.c battle.c events.c ai.c planets.c io.c sstlinux.c conio.c +CFILES= sst.c finish.c reports.c setup.c moving.c battle.c events.c ai.c planets.c io.c sstlinux.c OFILES= $(CFILES:.c=.o) HFILES=sst.h DOCS = README sst-doc.xml sst.xml sst-layer.xsl TODO @@ -18,16 +18,16 @@ SOURCES= $(CFILES) $(HFILES) $(DOCS) sst.doc sst.6 makehelp.py makefile sst.spec all: sst sst.doc ai.o: ai.c sst.h -battle.o: battle.c conio.h sst.h +battle.o: battle.c sst.h conio.o: conio.c conio.h events.o: events.c sst.h finish.o: finish.c sst.h -io.o: io.c conio.h sst.h -moving.o: moving.c sstlinux.h conio.h sst.h +io.o: io.c sst.h +moving.o: moving.c sstlinux.h sst.h planets.o: planets.c sst.h reports.o: reports.c sst.h conio.h -setup.o: setup.c conio.h sst.h -sst.o: sst.c conio.h sstlinux.h sst.h +setup.o: setup.c sst.h +sst.o: sst.c sstlinux.h sst.h sstlinux.o: sstlinux.c sstlinux.h sst: $(OFILES) diff --git a/moving.c b/moving.c index 17f3a22..1797e1e 100644 --- a/moving.c +++ b/moving.c @@ -1,6 +1,5 @@ #include #include "sstlinux.h" -#include "conio.h" #include "sst.h" static void getcd(int, int); diff --git a/reports.c b/reports.c index cbbf1ff..54c73d9 100644 --- a/reports.c +++ b/reports.c @@ -2,7 +2,6 @@ #include #include #include -#include "conio.h" void attakreport(int l) { if (!l) { @@ -272,10 +271,12 @@ int srscan(int l) { case IHDOCKED: textcolor(LIGHTGRAY); break; case IHDEAD: textcolor(WHITE); } - if (game.quad[i][j]!=ship) highvideo(); + if (game.quad[i][j] != ship) + highvideo(); } - if (game.quad[i][j] & 128) highvideo(); - proutn("%c ",game.quad[i][j] & 127); + if (game.quad[i][j] & DAMAGED) + highvideo(); + proutn("%c ",game.quad[i][j] & ~DAMAGED); textcolor(LIGHTGRAY); } else diff --git a/setup.c b/setup.c index 4df8709..51089b6 100644 --- a/setup.c +++ b/setup.c @@ -1,6 +1,5 @@ #include #include -#include "conio.h" #include "sst.h" #ifdef __linux__ diff --git a/sst.c b/sst.c index 9e48a03..dc26b35 100644 --- a/sst.c +++ b/sst.c @@ -2,7 +2,6 @@ #include #include #include -#include "conio.h" #include "sstlinux.h" #include "sst.h" @@ -260,7 +259,7 @@ static void helpme(void) { while (fgets(linebuf, sizeof(linebuf),fp)) { if (strstr(linebuf, "******")) break; - proutc(linebuf); + proutn(linebuf); } fclose(fp); } @@ -493,6 +492,8 @@ int main(int argc, char **argv) { strcat(line, " "); } while (TRUE) { /* Play a game */ + setwnd(FULLSCREEN_WINDOW); + clrscr(); prelim(); setup(line[0] == '\0'); if (alldone) { @@ -513,11 +514,8 @@ int main(int argc, char **argv) { } proutn("Do you want to play again? "); if (!ja()) break; - setwnd(FULLSCREEN_WINDOW); - clrscr(); } skip(1); - ioend(); prout("May the Great Bird of the Galaxy roost upon your home planet."); return 0; } diff --git a/sst.h b/sst.h index 31fd2f4..cf44c73 100644 --- a/sst.h +++ b/sst.h @@ -2,6 +2,7 @@ #include #include #include +#include #ifndef INCLUDED #define EXTERN extern #else @@ -61,7 +62,7 @@ typedef struct { #define SSTMAGIC "SST2.0\n" -EXTERN short curwnd; +EXTERN WINDOW *curwnd; EXTERN struct { char magic[sizeof(SSTMAGIC)]; @@ -418,7 +419,6 @@ void snova(int, int); void scom(int *); void hittem(double *); void prouts(char *, ...); -void proutc(char *); int isit(char *); void preport(void); void orbit(void); @@ -434,8 +434,7 @@ void attakreport(int); void movetho(void); void probe(void); void iostart(int); -void ioend(void); -void setwnd(short); +void setwnd(WINDOW *); void warble(void); void boom(int ii, int jj); void tracktorpedo(int x, int y, int ix, int iy, int wait, int l, int i, int n, int iquad); @@ -452,10 +451,21 @@ void enqueue(char *s); #define SCAN_STATUS 3 #define SCAN_NO_LEFTSIDE 4 -/* these need to track io.c:wnd */ -#define FULLSCREEN_WINDOW 0 -#define LEFTUPPER_WINDOW 1 -#define SRSCAN_WINDOW 2 -#define LRSCAN_WINDOW 3 -#define LOWER_WINDOW 4 -#define BOTTOM_WINDOW 5 +WINDOW *FULLSCREEN_WINDOW; +WINDOW *SRSCAN_WINDOW; +WINDOW *REPORT_WINDOW; +WINDOW *LRSCAN_WINDOW; +WINDOW *LOWER_WINDOW; +WINDOW *BOTTOM_WINDOW; + +extern void clreol(void); +extern void clrscr(void); +extern void textcolor(int color); +extern void highvideo(void); + +enum COLORS { + BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, + DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE +}; + +#define DAMAGED 128 /* marker for damaged ship in starmap */ -- 2.31.1