X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=io.c;h=d59a5092550843fcf3800b88524a224cf4c6af5b;hp=91d938720346faba5942380b9a30460d86adec8a;hb=c430e3a5fdb07728d3199f20cda2b566e6b60caa;hpb=10131f4148d32996badc7432cb5b9903dca873e0 diff --git a/io.c b/io.c index 91d9387..d59a509 100644 --- a/io.c +++ b/io.c @@ -6,15 +6,16 @@ #include #include #include +#include #include "conio.h" -#include "sstlinux.h" #include "sst.h" +#include "sstlinux.h" #ifndef SERGEEV static int linecount; /* for paging */ -#endif /* SERGEEV */ static int screenheight = 24, screenwidth = 80; +#endif /* SERGEEV */ #ifndef SERGEEV static int curses = FALSE; #else /* SERGEEV */ @@ -32,6 +33,7 @@ wnd wnds[6]={{1,1,80,25}, /* FULLSCREEN_WINDOW */ short curwnd; #endif /* SERGEEV */ +#ifndef SERGEEV static void outro(int sig) { /* wrap up, either normally or due to signal */ if (curses) { @@ -48,8 +50,15 @@ static void fastexit(int 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 @@ -74,10 +83,13 @@ void iostart(int usecurses) { if (LINES) screenheight = atoi(LINES); } +#endif /* SERGEEV */ } void ioend(void) { +#ifndef SERGEEV outro(0); +#endif /* SERGEEV */ } void waitfor(void) { @@ -156,9 +168,11 @@ void skip(int i) { } #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; @@ -244,8 +258,8 @@ static void vprouts(char *fmt, va_list ap) { } free(s); } - #endif /* SERGEEV */ + void prouts(char *fmt, ...) { #ifndef SERGEEV clock_t endTime; @@ -290,40 +304,6 @@ void c_printf (char *format, ... ) #endif /* SERGEEV */ } -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 */ -} - -void setpassword(void) { -#ifndef SERGEEV - while (TRUE) { - scan(); - strcpy(game.passwd, citem); - chew(); - if (*game.passwd != 0) break; - proutn("Please type in a secret password-"); - } -#else - int i; - for(i=0;i<3;i++) game.passwd[i]=(char)(97+(int)(Rand()*25)); - game.passwd[3]=0; -#endif /* SERGEEV */ -} - void cgetline(char *line, int max) { if (curses) { #ifndef SERGEEV @@ -358,3 +338,145 @@ void setwnd(short wndnum){ void commandhook(char *cmd, int before) { } + +/* + * Things past this point have policy implications. + */ + +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 */ +} + +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 */ +} + +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 */ +} + +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) { + 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) { + 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; + drawmaps(2); + game.quad[ix][iy]=iquad; + _setcursortype(_NOCURSOR); + sound(500); + delay(1000); + nosound(); + lowvideo(); + _setcursortype(_NORMALCURSOR); + } + } 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 setpassword(void) { +#ifndef SERGEEV + while (TRUE) { + scan(); + strcpy(game.passwd, citem); + chew(); + if (*game.passwd != 0) break; + proutn("Please type in a secret password-"); + } +#else + int i; + for(i=0;i<3;i++) game.passwd[i]=(char)(97+(int)(Rand()*25)); + game.passwd[3]=0; +#endif /* SERGEEV */ +} +