Make the internal pager actually work. In the process, remove getch()
[super-star-trek.git] / setup.c
diff --git a/setup.c b/setup.c
index 24c5f6f6d25e58a82da1c78e1650ed046cd1f875..5b8c20d2b65c1798caa07f31aa60e515be3b8dda 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -36,6 +36,7 @@ void freeze(int boss) {
                skip(1);\r
                return;\r
        }\r
+       strcpy(game.magic, SSTMAGIC);\r
        fwrite(&game, sizeof(game), 1, fp);\r
 \r
        fclose(fp);\r
@@ -69,6 +70,11 @@ void thaw(void) {
                return;\r
        }\r
        fread(&game, sizeof(game), 1, fp);\r
+       if (strcmp(game.magic, SSTMAGIC)) {\r
+               prout("Game file format is bad, should begin with " SSTMAGIC);\r
+               skip(1);\r
+               return;\r
+       }\r
 \r
        fclose(fp);\r
 \r
@@ -173,7 +179,7 @@ void abandn(void) {
        return;\r
 }\r
        \r
-void setup(void) {\r
+void setup(int needprompt) {\r
        int i,j, krem, klumper;\r
        int ix, iy;\r
        alldone = gamewon = 0;\r
@@ -181,7 +187,7 @@ void setup(void) {
        idebug = 0;\r
 #endif\r
        //  Decide how many of everything\r
-       if (choose()) return; // frozen game\r
+       if (choose(needprompt)) return; // frozen game\r
        // Prepare the Enterprise\r
        ship = IHE;\r
        energy = inenrg = 5000.0;\r
@@ -239,13 +245,13 @@ void setup(void) {
                                if (distq < 6.0*(6-inbase) && Rand() < 0.75) {\r
                                        contflag = TRUE;\r
 #ifdef DEBUG\r
-                                       printf("DEBUG: Abandoning base #%d at %d-%d\n", i, ix, iy);\r
+                                       proutn("DEBUG: Abandoning base #%d at %d-%d\n", i, ix, iy);\r
 #endif\r
                                        break;\r
                                }\r
 #ifdef DEBUG\r
                                else if (distq < 6.0 * (6-inbase)) {\r
-                                       printf("DEBUG: saving base #%d, close to #%d\n", i, j);\r
+                                       proutn("DEBUG: saving base #%d, close to #%d\n", i, j);\r
                                }\r
 #endif\r
                        }\r
@@ -334,53 +340,52 @@ void setup(void) {
        game.state.snap = 0;\r
                \r
        if (skill == 1) {\r
-               printf("It is stardate %d. The Federation is being attacked by\n",\r
+               prout("It is stardate %d. The Federation is being attacked by",\r
                           (int)game.state.date);\r
-               printf("a deadly Klingon invasion force. As captain of the United\n"\r
-                          "Starship U.S.S. Enterprise, it is your mission to seek out\n"\r
-                          "and destroy this invasion force of %d battle cruisers.\n",\r
+               prout("a deadly Klingon invasion force. As captain of the United");\r
+               prout("Starship U.S.S. Enterprise, it is your mission to seek out");\r
+               prout("and destroy this invasion force of %d battle cruisers.",\r
                           inkling);\r
-               printf("You have an initial allotment of %d stardates to complete\n"\r
-                          "your mission.  As you proceed you may be given more time.\n\n"\r
-                          "You will have %d supporting starbases.\n"\r
-                          "Starbase locations-  ",\r
-                          (int)intime, inbase);\r
+               prout("You have an initial allotment of %d stardates to complete", (int)intime);\r
+               prout("your mission.  As you proceed you may be given more time.");\r
+               prout("");\r
+               prout("You will have %d supporting starbases.", inbase);\r
+               proutn("Starbase locations-  ");\r
        }\r
        else {\r
-               printf("Stardate %d.\n\n"\r
-                          "%d Klingons.\nAn unknown number of Romulans\n",\r
-                          (int)game.state.date, inkling);\r
-               if (game.state.nscrem) printf("and one (GULP) Super-Commander.\n");\r
-               printf("%d stardates\n%d starbases in  ",(int)intime, inbase);\r
+               prout("Stardate %d.", (int)game.state.date);\r
+               prout("");\r
+               prout("%d Klingons.", inkling);\r
+               prout("An unknown number of Romulans.");\r
+               if (game.state.nscrem) prout("and one (GULP) Super-Commander.");\r
+                       prout("%d stardates.",(int)intime);\r
+                       proutn("%d starbases in ", inbase);\r
        }\r
        for (i = 1; i <= inbase; i++) {\r
-               cramlc(0, game.state.baseqx[i], game.state.baseqy[i]);\r
-               if (i < inbase) proutn("  ");\r
+               proutn(cramlc(0, game.state.baseqx[i], game.state.baseqy[i]));\r
+               proutn("  ");\r
        }\r
        skip(2);\r
-       proutn("The Enterprise is currently in");\r
-       cramlc(1, quadx, quady);\r
+       proutn("The Enterprise is currently in ");\r
+       proutn(cramlc(quadrant, quadx, quady));\r
        proutn(" ");\r
-       cramlc(2, sectx, secty);\r
+        proutn(cramlc(sector, sectx, secty));\r
        skip(2);\r
        prout("Good Luck!");\r
-       if (game.state.nscrem) proutn("  YOU'LL NEED IT.");\r
-       skip(1);\r
+       if (game.state.nscrem) prout("  YOU'LL NEED IT.");\r
        newqad(0);\r
        if (nenhere) shldup=1.0;\r
        if (neutz) attack(0);   // bad luck to start in a Romulan Neutral Zone\r
 }\r
 \r
-int choose(void) {\r
+int choose(int needprompt) {\r
        tourn = 0;\r
        thawed = 0;\r
        skill = 0;\r
        length = 0;\r
        while (TRUE) {\r
-               if (fromcommandline) /* Can start with command line options */\r
-                       fromcommandline = 0;\r
-               else\r
-                       proutn("Would you like a regular, tournament, or frozen game?");\r
+               if (needprompt) /* Can start with command line options */\r
+                   proutn("Would you like a regular, tournament, or frozen game?");\r
                scan();\r
                if (strlen(citem)==0) continue; // Try again\r
                if (isit("tournament")) {\r