projects
/
super-star-trek.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add the README and spec files
[super-star-trek.git]
/
sst.c
diff --git
a/sst.c
b/sst.c
index e4fe2afe0fcf55a0eab1f3f5d3a4001e47c6bd79..ae209e2cb373ed7cf7ad8a156e1fbf01b55bc092 100644
(file)
--- a/
sst.c
+++ b/
sst.c
@@
-1,15
+1,21
@@
#define INCLUDED // Define externs here
\r
#include "sst.h"
\r
#include <ctype.h>
\r
#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
#include <time.h>
\r
#ifdef MSDOS
\r
#include <dos.h>
\r
#endif
\r
#include <time.h>
\r
+
\r
+#ifndef SSTDOC
\r
+#define SSTDOC "sst.doc"
\r
+#endif
\r
\r
int getch(void);
\r
\r
static char line[128], *linep = line;
\r
static int linecount; /* for paging */
\r
\r
int getch(void);
\r
\r
static char line[128], *linep = line;
\r
static int linecount; /* for paging */
\r
+static int screenheight = 24;
\r
\r
static void clearscreen(void);
\r
\r
\r
static void clearscreen(void);
\r
\r
@@
-102,7
+108,7
@@
static void listCommands(int x) {
\r
static void helpme(void) {
\r
int i, j;
\r
\r
static void helpme(void) {
\r
int i, j;
\r
- char cmdbuf[32];
\r
+ char cmdbuf[32]
, *cp
;
\r
char linebuf[132];
\r
FILE *fp;
\r
/* Give help on commands */
\r
char linebuf[132];
\r
FILE *fp;
\r
/* Give help on commands */
\r
@@
-129,37
+135,42
@@
static void helpme(void) {
strcpy(cmdbuf, " ABBREV");
\r
}
\r
else {
\r
strcpy(cmdbuf, " ABBREV");
\r
}
\r
else {
\r
- strcpy(cmdbuf, " Mnemonic: ");
\r
-
j = 0
;
\r
-
while ((cmdbuf[j+13] = toupper(commands[i][j])) != 0) j++
;
\r
+ for (j = 0; commands[i][j]; j++)
\r
+
cmdbuf[j] = toupper(commands[i][j])
;
\r
+
cmdbuf[j] = '\0'
;
\r
}
\r
}
\r
- fp = fopen(
"sst.doc"
, "r");
\r
+ fp = fopen(
SSTDOC
, "r");
\r
if (fp == NULL) {
\r
prout("Spock- \"Captain, that information is missing from the");
\r
prout(" computer. You need to find SST.DOC and put it in the");
\r
prout(" current directory.\"");
\r
return;
\r
}
\r
if (fp == NULL) {
\r
prout("Spock- \"Captain, that information is missing from the");
\r
prout(" computer. You need to find SST.DOC and put it in the");
\r
prout(" current directory.\"");
\r
return;
\r
}
\r
- i = strlen(cmdbuf);
\r
- do {
\r
- if (fgets(linebuf, 132, fp) == NULL) {
\r
+ for (;;) {
\r
+ if (fgets(linebuf, sizeof(linebuf), fp) == NULL) {
\r
prout("Spock- \"Captain, there is no information on that command.\"");
\r
fclose(fp);
\r
return;
\r
}
\r
prout("Spock- \"Captain, there is no information on that command.\"");
\r
fclose(fp);
\r
return;
\r
}
\r
- } while (strncmp(linebuf, cmdbuf, i) != 0);
\r
+ if (linebuf[0] == '%' && linebuf[1] == '%'&& linebuf[2] == ' ') {
\r
+ for (cp = linebuf+3; isspace(*cp); cp++)
\r
+ continue;
\r
+ linebuf[strlen(linebuf)-1] = '\0';
\r
+ if (strcmp(cp, cmdbuf) == 0)
\r
+ break;
\r
+ }
\r
+ }
\r
\r
skip(1);
\r
prout("Spock- \"Captain, I've found the following information:\"");
\r
skip(1);
\r
\r
\r
skip(1);
\r
prout("Spock- \"Captain, I've found the following information:\"");
\r
skip(1);
\r
\r
- do {
\r
- if (linebuf[0]!=12) { // ignore page break lines
\r
- linebuf[strlen(linebuf)-1] = '\0'; // No \n at end
\r
- prout(linebuf);
\r
- }
\r
- fgets(linebuf,132,fp);
\r
- } while (strstr(linebuf, "******")==NULL);
\r
+ while (fgets(linebuf, sizeof(linebuf),fp)) {
\r
+ if (strstr(linebuf, "******"))
\r
+ break;
\r
+ /* use fputs here to avoid % expansion */
\r
+ fputs(linebuf, stdout);
\r
+ }
\r
fclose(fp);
\r
}
\r
\r
fclose(fp);
\r
}
\r
\r
@@
-323,7
+334,7
@@
static void makemoves(void) {
events();
\r
if (alldone) break; // Events did us in
\r
}
\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
atover(0);
\r
continue;
\r
}
\r
@@
-331,7
+342,7
@@
static void makemoves(void) {
if (hitme && justin==0) {
\r
attack(2);
\r
if (alldone) break;
\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
atover(0);
\r
hitme = TRUE;
\r
continue;
\r
@@
-349,6
+360,10
@@
int main(int argc, char **argv) {
int hitme;
\r
char ch;
\r
prelim();
\r
int hitme;
\r
char ch;
\r
prelim();
\r
+ char *LINES = getenv("LINES");
\r
+
\r
+ if (LINES)
\r
+ screenheight = atoi(LINES);
\r
\r
if (argc > 1) {
\r
fromcommandline = 1;
\r
\r
if (argc > 1) {
\r
fromcommandline = 1;
\r
@@
-373,13
+388,13
@@
int main(int argc, char **argv) {
skip(1);
\r
\r
if (tourn && alldone) {
\r
skip(1);
\r
\r
if (tourn && alldone) {
\r
- pr
intf
("Do you want your score recorded?");
\r
+ pr
outn
("Do you want your score recorded?");
\r
if (ja()) {
\r
chew2();
\r
freeze(FALSE);
\r
}
\r
}
\r
if (ja()) {
\r
chew2();
\r
freeze(FALSE);
\r
}
\r
}
\r
- pr
intf
("Do you want to play again?");
\r
+ pr
outn
("Do you want to play again?");
\r
if (!ja()) break;
\r
}
\r
skip(1);
\r
if (!ja()) break;
\r
}
\r
skip(1);
\r
@@
-407,20
+422,20
@@
void cramen(int i) {
proutn(s);
\r
}
\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
}
\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
}
\r
\r
void crmshp(void) {
\r
@@
-530,18
+545,6
@@
int ja(void) {
}
\r
}
\r
\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
double square(double i) { return i*i; }
\r
\r
static void clearscreen(void) {
\r
@@
-583,7
+586,7
@@
void pause(int i) {
void skip(int i) {
\r
while (i-- > 0) {
\r
linecount++;
\r
void skip(int i) {
\r
while (i-- > 0) {
\r
linecount++;
\r
- if (linecount >=
23
)
\r
+ if (linecount >=
screenheight
)
\r
pause(0);
\r
else
\r
putchar('\n');
\r
pause(0);
\r
else
\r
putchar('\n');
\r
@@
-591,22
+594,34
@@
void skip(int i) {
}
\r
\r
\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
}
\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
}
\r
\r
-void prouts(char *
s
) {
\r
+void prouts(char *
fmt, ...
) {
\r
clock_t endTime;
\r
clock_t endTime;
\r
+ char *s, buf[BUFSIZ];
\r
/* print slowly! */
\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
endTime = clock() + CLOCKS_PER_SEC*0.05;
\r
while (clock() < endTime) ;
\r
- putchar(*s
++
);
\r
+ putchar(*s);
\r
fflush(stdout);
\r
}
\r
}
\r
fflush(stdout);
\r
}
\r
}
\r
@@
-637,7
+652,7
@@
void debugme(void) {
proutn("Reset damage? ");
\r
if (ja() != 0) {
\r
int i;
\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
stdamtim = 1e30;
\r
}
\r
proutn("Toggle idebug? ");
\r
@@
-649,7
+664,7
@@
void debugme(void) {
proutn("Cause selective damage? ");
\r
if (ja() != 0) {
\r
int i, key;
\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
proutn("Kill ");
\r
proutn(device[i]);
\r
proutn("? ");
\r
@@
-657,7
+672,7
@@
void debugme(void) {
key = scan();
\r
if (key == IHALPHA && isit("y")) {
\r
damage[i] = 10.0;
\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
}
\r
}
\r
}
\r
@@
-676,12
+691,12
@@
void debugme(void) {
case FSCMOVE: proutn("SC Move "); break;
\r
case FSCDBAS: proutn("SC Base Destroy "); break;
\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
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
}
\r
}
\r
chew();
\r