#define INCLUDED // Define externs here\r
#include "sst.h"\r
#include <ctype.h>\r
+#include <stdarg.h>\r
#ifdef MSDOS\r
#include <dos.h>\r
#endif\r
\r
static void clearscreen(void);\r
\r
-#define NUMCOMMANDS 34\r
-\r
/* Compared to original version, I've changed the "help" command to\r
"call" and the "terminate" command to "quit" to better match\r
user expectations. The DECUS version apparently made those changes\r
*/\r
\r
\r
-static char *commands[NUMCOMMANDS] = {\r
+static char *commands[] = {\r
"srscan",\r
"lrscan",\r
"phasers",\r
"quit",\r
"help"\r
};\r
+#define NUMCOMMANDS sizeof(commands)/sizeof(commands[0])\r
\r
static void listCommands(int x) {\r
prout(" SRSCAN MOVE PHASERS CALL\n"\r
warp(1);\r
break;\r
case 5: // shields\r
- sheild(1);\r
+ doshield(1);\r
if (ididit) {\r
attack(2);\r
shldchg = 0;\r
events();\r
if (alldone) break; // Events did us in\r
}\r
- if (d.galaxy[quadx][quady] == 1000) { // Galaxy went Nova!\r
+ if (game.state.galaxy[quadx][quady] == 1000) { // Galaxy went Nova!\r
atover(0);\r
continue;\r
}\r
if (hitme && justin==0) {\r
attack(2);\r
if (alldone) break;\r
- if (d.galaxy[quadx][quady] == 1000) { // went NOVA! \r
+ if (game.state.galaxy[quadx][quady] == 1000) { // went NOVA! \r
atover(0);\r
hitme = TRUE;\r
continue;\r
}\r
\r
\r
-void main(int argc, char **argv) {\r
+int main(int argc, char **argv) {\r
int i;\r
int hitme;\r
char ch;\r
skip(1);\r
\r
if (tourn && alldone) {\r
- printf("Do you want your score recorded?");\r
+ proutn("Do you want your score recorded?");\r
if (ja()) {\r
chew2();\r
freeze(FALSE);\r
}\r
}\r
- printf("Do you want to play again?");\r
+ proutn("Do you want to play again?");\r
if (!ja()) break;\r
}\r
skip(1);\r
case IHP: s = "Planet"; break;\r
case IHB: s = "Starbase"; break;\r
case IHBLANK: s = "Black hole"; break;\r
- case IHT: s = "Tholean"; break;\r
- case IHWEB: s = "Tholean web"; break;\r
+ case IHT: s = "Tholian"; break;\r
+ case IHWEB: s = "Tholian web"; break;\r
default: s = "Unknown??"; break;\r
}\r
proutn(s);\r
}\r
\r
-void cramlc(int key, int x, int y) {\r
- if (key == 1) proutn(" Quadrant");\r
- else if (key == 2) proutn(" Sector");\r
- proutn(" ");\r
- crami(x, 1);\r
- proutn(" - ");\r
- crami(y, 1);\r
+char *cramlc(enum loctype key, int x, int y) {\r
+ static char buf[32];\r
+ buf[0] = '\0';\r
+ if (key == quadrant) strcpy(buf, "Quadrant ");\r
+ else if (key == sector) strcpy(buf, "Sector ");\r
+ sprintf(buf+strlen(buf), "%d-%d", x, y);\r
+ return buf;\r
}\r
\r
void crmena(int i, int enemy, int key, int x, int y) {\r
if (i == 1) proutn("***");\r
cramen(enemy);\r
proutn(" at");\r
- cramlc(key, x, y);\r
+ proutn(cramlc(key, x, y));\r
}\r
\r
void crmshp(void) {\r
chew();\r
return IHEOL;\r
}\r
- gets(line);\r
+ fgets(line, sizeof(line), stdin);\r
+ line[strlen(line)-1] = '\0';\r
linep = line;\r
}\r
// Skip leading white space\r
}\r
}\r
\r
-void cramf(double x, int w, int d) {\r
- char buf[64];\r
- sprintf(buf, "%*.*f", w, d, x);\r
- proutn(buf);\r
-}\r
-\r
-void crami(int i, int w) {\r
- char buf[16];\r
- sprintf(buf, "%*d", w, i);\r
- proutn(buf);\r
-}\r
-\r
double square(double i) { return i*i; }\r
\r
static void clearscreen(void) {\r
}\r
\r
\r
-void proutn(char *s) {\r
- fputs(s, stdout);\r
+void proutn(char *fmt, ...) {\r
+ va_list ap;\r
+ va_start(ap, fmt);\r
+ vprintf(fmt, ap);\r
+ va_end(ap);\r
}\r
\r
-void prout(char *s) {\r
- proutn(s);\r
- skip(1);\r
+void prout(char *fmt, ...) {\r
+ va_list ap;\r
+ va_start(ap, fmt);\r
+ vprintf(fmt, ap);\r
+ va_end(ap);\r
+ skip(1);\r
}\r
\r
-void prouts(char *s) {\r
+void prouts(char *fmt, ...) {\r
clock_t endTime;\r
+ char *s, buf[BUFSIZ];\r
/* print slowly! */\r
- while (*s) {\r
+ va_list ap;\r
+ va_start(ap, fmt);\r
+ vsprintf(buf, fmt, ap);\r
+ va_end(ap);\r
+ skip(1);\r
+ for (s = buf; *s; s++) {\r
endTime = clock() + CLOCKS_PER_SEC*0.05;\r
while (clock() < endTime) ;\r
- putchar(*s++);\r
+ putchar(*s);\r
fflush(stdout);\r
}\r
}\r
proutn("Reset damage? ");\r
if (ja() != 0) {\r
int i;\r
- for (i=0; i <= ndevice; i++) if (damage[i] > 0.0) damage[i] = 0.0;\r
+ for (i=0; i <= NDEVICES; i++) if (damage[i] > 0.0) damage[i] = 0.0;\r
stdamtim = 1e30;\r
}\r
proutn("Toggle idebug? ");\r
proutn("Cause selective damage? ");\r
if (ja() != 0) {\r
int i, key;\r
- for (i=1; i <= ndevice; i++) {\r
+ for (i=1; i <= NDEVICES; i++) {\r
proutn("Kill ");\r
proutn(device[i]);\r
proutn("? ");\r
key = scan();\r
if (key == IHALPHA && isit("y")) {\r
damage[i] = 10.0;\r
- if (i == DRADIO) stdamtim = d.date;\r
+ if (i == DRADIO) stdamtim = game.state.date;\r
}\r
}\r
}\r
case FSCMOVE: proutn("SC Move "); break;\r
case FSCDBAS: proutn("SC Base Destroy "); break;\r
}\r
- cramf(future[i]-d.date, 8, 2);\r
+ proutn("%.2f", future[i]-game.state.date);\r
chew();\r
proutn(" ?");\r
key = scan();\r
if (key == IHREAL) {\r
- future[i] = d.date + aaitem;\r
+ future[i] = game.state.date + aaitem;\r
}\r
}\r
chew();\r