X-Git-Url: https://jxself.org/git/?p=super-star-trek.git;a=blobdiff_plain;f=io.c;h=bff7d46913fe55bedb7b824fb872f16febb60289;hp=12a1993e693272f9fd29ce546229e63d92ff7e88;hb=a8f5216ff30142b93e4ff3e9bc12535ed0792563;hpb=fb225a29a207cea8436c2deeced27f366492b227 diff --git a/io.c b/io.c index 12a1993..bff7d46 100644 --- a/io.c +++ b/io.c @@ -1,26 +1,15 @@ -#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 "conio.h" #include "sstlinux.h" -#endif /* SERGEEV */ #include "sst.h" #ifndef SERGEEV @@ -62,6 +51,11 @@ static void fastexit(int sig) { } void iostart(int usecurses) { +#ifdef SERGEEV + textattr(7); + clrscr(); + setwnd(FULLSCREEN_WINDOW); +#else (void) signal(SIGINT, fastexit); (void) signal(SIGINT, fastexit); #ifdef SIGIOT @@ -86,10 +80,13 @@ void iostart(int usecurses) { if (LINES) screenheight = atoi(LINES); } +#endif /* SERGEEV */ } void ioend(void) { +#ifndef SERGEEV outro(0); +#endif /* SERGEEV */ } void waitfor(void) { @@ -302,6 +299,92 @@ void c_printf (char *format, ... ) #endif /* SERGEEV */ } +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 */ + } else { + fgets(line, max, stdin); + line[strlen(line)-1] = '\0'; + } +} + +void setwnd(short wndnum){ +/* 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 */ +} + +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); + strcpy(line,"s"); + srscan(1); + if (l!=2){ + setwnd(SRSCAN_WINDOW); + clrscr(); + srscan(2); + setwnd(LRSCAN_WINDOW); + clrscr(); + strcpy(line,"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 */ { @@ -320,6 +403,62 @@ void warble(void) #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) { @@ -336,37 +475,3 @@ void setpassword(void) { #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 setwnd(short wndnum){ -/* 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 */ -} - -void commandhook(char *cmd, int before) { -}