patch from Javier Novoa:
[super-star-trek.git] / sst.py
diff --git a/sst.py b/sst.py
index 56297c0b6deb2caf8d45b4e37c40f691db1e57fd..35d1433b7b5b036afac60481ff79ee22f6625519 100755 (executable)
--- a/sst.py
+++ b/sst.py
@@ -5335,10 +5335,21 @@ def setup():
     game.nkinks = game.nhelp = game.casual = game.abandoned = 0
     game.iscate = game.resting = game.imine = game.icrystl = game.icraft = False
     game.isatb = game.state.nplankl = 0
-    game.state.starkl = game.state.basekl = 0
+    game.state.starkl = game.state.basekl = game.state.nworldkl = 0
     game.iscraft = "onship"
     game.landed = False
     game.alive = True
+
+    # the galaxy
+    game.state.galaxy = fill2d(GALSIZE, lambda i_unused, j_unused: Quadrant())
+    # the starchart
+    game.state.chart = fill2d(GALSIZE, lambda i_unused, j_unused: Page())
+
+    game.state.planets = []      # Planet information
+    game.state.baseq = []      # Base quadrant coordinates
+    game.state.kcmdr = []      # Commander quadrant coordinates
+    game.statekscmdr = Coord() # Supercommander quadrant coordinates
+
     # Starchart is functional but we've never seen it
     game.lastchart = FOREVER
     # Put stars in the galaxy
@@ -5768,54 +5779,55 @@ def setpassword():
 
 # Code from sst.c begins here
 
-commands = {
-    "SRSCAN":          OPTION_TTY,
-    "STATUS":          OPTION_TTY,
-    "REQUEST":         OPTION_TTY,
-    "LRSCAN":          OPTION_TTY,
-    "PHASERS":         0,
-    "TORPEDO":         0,
-    "PHOTONS":         0,
-    "MOVE":            0,
-    "SHIELDS":         0,
-    "DOCK":            0,
-    "DAMAGES":         0,
-    "CHART":           0,
-    "IMPULSE":         0,
-    "REST":            0,
-    "WARP":            0,
-    "SCORE":           0,
-    "SENSORS":         OPTION_PLANETS,
-    "ORBIT":           OPTION_PLANETS,
-    "TRANSPORT":       OPTION_PLANETS,
-    "MINE":            OPTION_PLANETS,
-    "CRYSTALS":        OPTION_PLANETS,
-    "SHUTTLE":         OPTION_PLANETS,
-    "PLANETS":         OPTION_PLANETS,
-    "REPORT":          0,
-    "COMPUTER":        0,
-    "COMMANDS":        0,
-    "EMEXIT":          0,
-    "PROBE":           OPTION_PROBE,
-    "SAVE":            0,
-    "FREEZE":          0,      # Synonym for SAVE
-    "ABANDON":         0,
-    "DESTRUCT":        0,
-    "DEATHRAY":        0,
-    "DEBUG":           0,
-    "MAYDAY":          0,
-    "SOS":             0,      # Synonym for MAYDAY
-    "CALL":            0,      # Synonym for MAYDAY
-    "QUIT":            0,
-    "HELP":            0,
-}
+commands = [
+    ("SRSCAN",         OPTION_TTY),
+    ("STATUS",         OPTION_TTY),
+    ("REQUEST",        OPTION_TTY),
+    ("LRSCAN",         OPTION_TTY),
+    ("PHASERS",        0),
+    ("TORPEDO",        0),
+    ("PHOTONS",        0),
+    ("MOVE",           0),
+    ("SHIELDS",        0),
+    ("DOCK",           0),
+    ("DAMAGES",        0),
+    ("CHART",          0),
+    ("IMPULSE",        0),
+    ("REST",           0),
+    ("WARP",           0),
+    ("SCORE",          0),
+    ("SENSORS",        OPTION_PLANETS),
+    ("ORBIT",          OPTION_PLANETS),
+    ("TRANSPORT",      OPTION_PLANETS),
+    ("MINE",           OPTION_PLANETS),
+    ("CRYSTALS",       OPTION_PLANETS),
+    ("SHUTTLE",        OPTION_PLANETS),
+    ("PLANETS",        OPTION_PLANETS),
+    ("REPORT",         0),
+    ("COMPUTER",       0),
+    ("COMMANDS",       0),
+    ("EMEXIT",         0),
+    ("PROBE",          OPTION_PROBE),
+    ("SAVE",           0),
+    ("FREEZE",         0),     # Synonym for SAVE
+    ("ABANDON",        0),
+    ("DESTRUCT",       0),
+    ("DEATHRAY",       0),
+    ("DEBUG",          0),
+    ("MAYDAY",         0),
+    ("SOS",            0),     # Synonym for MAYDAY
+    ("CALL",           0),     # Synonym for MAYDAY
+    ("QUIT",           0),
+    ("HELP",           0),
+    ("",               0),
+]
 
 def listCommands():
     "Generate a list of legal commands."
     prout(_("LEGAL COMMANDS ARE:"))
     emitted = 0
-    for key in commands:
-       if not commands[key] or (commands[key] & game.options):
+    for (key, opt) in commands:
+       if not opt or (opt & game.options):
             proutn("%-12s " % key)
             emitted += 1
             if emitted % 5 == 4:
@@ -5833,7 +5845,8 @@ def helpme():
        setwnd(message_window)
        if key == "IHEOL":
            return
-        if scanner.token.upper() in commands or scanner.token == "ABBREV":
+       cmds = map(lambda x: x[0], commands)
+       if scanner.token.upper() in cmds or scanner.token.upper() == "ABBREV":
            break
        skip(1)
        listCommands()
@@ -5896,16 +5909,19 @@ def makemoves():
            clrscr()
            setwnd(message_window)
            clrscr()
-            candidates = filter(lambda x: x.startswith(scanner.token.upper()),
-                                commands)
-            if len(candidates) == 1:
-                cmd = candidates[0]
-                break
-            elif candidates and not (game.options & OPTION_PLAIN):
-                prout("Commands with prefix '%s': %s" % (scanner.token, " ".join(candidates)))
-            else:
+           abandon_passed = False
+           for (cmd, opt) in commands:
+               # commands after ABANDON cannot be abbreviated
+               if cmd == "ABANDON":
+                   abandon_passed = True
+               if cmd == scanner.token.upper() or (not abandon_passed \
+                       and cmd.startswith(scanner.token.upper())):
+                   break;
+           if cmd == "":
                 listCommands()
                 continue
+            else:
+               break;
        if cmd == "SRSCAN":             # srscan
            srscan()
        elif cmd == "STATUS":           # status