Move I/O to a separate module -- first step towards curses interface.
authorEric S. Raymond <esr@thyrsus.com>
Thu, 4 Nov 2004 21:33:11 +0000 (21:33 +0000)
committerEric S. Raymond <esr@thyrsus.com>
Thu, 4 Nov 2004 21:33:11 +0000 (21:33 +0000)
MAKEFILE.DOS
MAKEFILE.OS2
makefile
sst.c
sst.h

index e7e4821e68c5068e7a437c0dd9b106121d3f3334..c263c0c9de01e9e55dbd8a93ffff7853a8f420a5 100644 (file)
@@ -4,11 +4,11 @@ CFLAGS=-f87 -2 -m$(MODEL)
 .c.obj:; bcc $(CFLAGS) -c $*.c\r
 \r
 OBJS= sst.obj setup.obj reports.obj finish.obj moving.obj\\r
- battle.obj events.obj ai.obj planets.obj\r
+ battle.obj events.obj ai.obj planets.obj io.o\r
 \r
 sst.exe:       $(OBJS) sst.lnk\r
        bcc @sst.lnk\r
 \r
 \r
 sst.lnk:       makefile\r
-       >sst.lnk $(CFLAGS) -M $(OBJS) noeh$(MODEL).lib
\ No newline at end of file
+       >sst.lnk $(CFLAGS) -M $(OBJS) noeh$(MODEL).lib\r
index 98678f02736ade9b2d042c93ee1f6803c4e2dbac..a35865ee6bee7c0fec710b9bd7c8aa8b8d48fc6e 100644 (file)
@@ -5,7 +5,7 @@ CFLAGS=     -O
 .c.o:\r
        $(CC) $(CFLAGS) -c $<\r
 \r
-OFILES=     sst.o finish.o reports.o setup.o moving.o battle.o events.o ai.o planets.o\r
+OFILES=     sst.o finish.o reports.o setup.o moving.o battle.o events.o ai.o planets.o io.o\r
 \r
 HFILES=     sst.h\r
 \r
index 592f4ef2e2f811fbf657a049d2c09ff5f8b3f430..f98e173cd02512da078e185cfe200d57d834940c 100644 (file)
--- a/makefile
+++ b/makefile
@@ -7,7 +7,7 @@ CFLAGS=     -O -g -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
+CFILES= sst.c finish.c reports.c setup.c moving.c battle.c events.c ai.c planets.c io.c
 OFILES= $(CFILES:.c=.o)
 HFILES=sst.h
 DOCS = README sst-doc.xml sst.xml TODO
diff --git a/sst.c b/sst.c
index ee5bd3eeb3c64ca443c67fc1696a015ec752df79..d35b2556ae1407f297b0088838a2c5124b1140c0 100644 (file)
--- a/sst.c
+++ b/sst.c
@@ -1,21 +1,12 @@
 #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
 \r
 #ifndef SSTDOC\r
 #define SSTDOC "sst.doc"\r
 #endif\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
 /* Compared to original version, I've changed the "help" command to\r
    "call" and the "terminate" command to "quit" to better match\r
@@ -356,12 +347,9 @@ int main(int argc, char **argv) {
        int i;\r
        int hitme;\r
        char ch;\r
-       prelim();\r
-       char *LINES = getenv("LINES");\r
\r
-       if (LINES)\r
-           screenheight = atoi(LINES);\r
 \r
+       prelim(); \r
+       iostart();\r
        line[0] = '\0';\r
        if (argc > 1) {\r
                while (--argc > 0) {\r
@@ -466,14 +454,12 @@ void iran10(int *i, int *j) {
 }\r
 \r
 void chew(void) {\r
-       linecount = 0;\r
        linep = line;\r
        *linep = 0;\r
 }\r
 \r
 void chew2(void) {\r
        /* return IHEOL next time */\r
-       linecount = 0;\r
        linep = line+1;\r
        *linep = 0;\r
 }\r
@@ -482,8 +468,6 @@ int scan(void) {
        int i;\r
        char *cp;\r
 \r
-       linecount = 0;\r
-\r
        // Init result\r
        aaitem = 0.0;\r
        *citem = 0;\r
@@ -541,95 +525,6 @@ int ja(void) {
 \r
 double square(double i) { return i*i; }\r
                                                                        \r
-static void clearscreen(void) {\r
-       /* Somehow we need to clear the screen */\r
-#ifdef __BORLANDC__\r
-       extern void clrscr(void);\r
-       clrscr();\r
-#else\r
-       // proutn("\033[2J");   /* Hope for an ANSI display */\r
-       /* much more in that old-time TTY spirit to just throw linefeeds */\r
-       int i;\r
-       for (i = 0; i < screenheight; i++)\r
-           putchar('\n');\r
-#endif\r
-}\r
-\r
-/* We will pull these out in case we want to do something special later */\r
-\r
-void pause(int i) {\r
-       char buf[BUFSIZ];\r
-       putchar('\n');\r
-       if (i==1) {\r
-               if (skill > 2)\r
-                       prout("[ANOUNCEMENT ARRIVING...]");\r
-               else\r
-                       prout("[IMPORTANT ANNOUNCEMENT ARRIVING -- PRESS ENTER TO CONTINUE]");\r
-       }\r
-       else {\r
-               if (skill > 2)\r
-                       proutn("[CONTINUE?]");\r
-               else\r
-                       proutn("[PRESS ENTER TO CONTINUE]");\r
-\r
-       }\r
-       fgets(buf, sizeof(buf), stdin);\r
-       if (i != 0) {\r
-               clearscreen();\r
-       }\r
-       linecount = 0;\r
-}\r
-\r
-\r
-void skip(int i) {\r
-       while (i-- > 0) {\r
-               linecount++;\r
-               if (linecount >= screenheight)\r
-                       pause(0);\r
-               else\r
-                       putchar('\n');\r
-       }\r
-}\r
-\r
-\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 *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 proutc(char *line) {\r
-    line[strlen(line)-1] = '\0';\r
-    fputs(line, stdout);\r
-    skip(1);\r
-}\r
-\r
-void prouts(char *fmt, ...) {\r
-       clock_t endTime;\r
-       char *s, buf[BUFSIZ];\r
-       /* print slowly! */\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
-               fflush(stdout);\r
-       }\r
-}\r
-\r
 void huh(void) {\r
        chew();\r
        skip(1);\r
diff --git a/sst.h b/sst.h
index 09663191c0fc6c78c9e12880c8f027ca024a62b9..fc7ecc5355ffeb93a1c1ccda178919b261d3f404 100644 (file)
--- a/sst.h
+++ b/sst.h
@@ -420,3 +420,6 @@ void debugme(void);
 void attakreport(void);\r
 void movetho(void);\r
 void probe(void);\r
+void clearscreen(void);\r
+void iostart(void);\r
+\r