Trivial refactoring suggested by 2to3. All regression tests pass.
[super-star-trek.git] / sst.py
diff --git a/sst.py b/sst.py
index d037ff4db205f844c098f9e60d7aadca6f1e672c..2c65025580ed3b123bca43bd909a44b97b977802 100755 (executable)
--- a/sst.py
+++ b/sst.py
@@ -11,7 +11,7 @@ Stas Sergeev, and Eric S. Raymond.
 See the doc/HACKING file in the distribution for designers notes and advice
 on how to modify (and how not to modify!) this code.
 """
-import os, sys, math, curses, time, readline, cPickle, random, copy, gettext, getpass
+import os, sys, math, curses, time, readline, pickle, random, copy, gettext, getpass
 
 version = "2.1"
 
@@ -901,7 +901,7 @@ def doshield(shraise):
     if shraise:
        action = "SHUP"
     else:
-       key = scanner.next()
+       key = scanner.nexttok()
        if key == "IHALPHA":
            if scanner.sees("transfer"):
                action = "NRG"
@@ -960,7 +960,7 @@ def doshield(shraise):
        game.ididit = True
        return
     elif action == "NRG":
-       while scanner.next() != "IHREAL":
+       while scanner.nexttok() != "IHREAL":
            scanner.chew()
            proutn(_("Energy to transfer to shields- "))
         nrg = scanner.real
@@ -1086,7 +1086,7 @@ def torpedo(origin, bearing, dispersion, number, nburst):
     # Loop to move a single torpedo 
     setwnd(message_window)
     for step in range(1, QUADSIZE*2):
-        if not track.next():
+        if not track.nexttok():
             break
         w = track.sector()
        if not w.valid_sector():
@@ -1110,7 +1110,7 @@ def torpedo(origin, bearing, dispersion, number, nburst):
             # In the C/FORTRAN version, dispersion was 2.5 radians, which
             # is 143 degrees, which is almost exactly 4.8 clockface units
             displacement = course(track.bearing+randreal(-2.4, 2.4), distance=2**0.5)
-            displacement.next()
+            displacement.nexttok()
             bumpto = displacement.sector()
            if not bumpto.valid_sector():
                return hit
@@ -1152,7 +1152,7 @@ def torpedo(origin, bearing, dispersion, number, nburst):
                         return None
                     proutn(crmena(True, iquad, "sector", w))
                     displacement = course(track.bearing+randreal(-2.4, 2.4), distance=2**0.5)
-                    displacement.next()
+                    displacement.nexttok()
                     bumpto = displacement.sector()
                     if not bumpto.valid_sector():
                         prout(_(" damaged but not destroyed."))
@@ -1551,7 +1551,7 @@ def torps():
        return
     # First, get torpedo count
     while True:
-        scanner.next()
+        scanner.nexttok()
        if scanner.token == "IHALPHA":
            huh()
            return
@@ -1576,7 +1576,7 @@ def torps():
     # Next, get targets
     target = []
     for i in range(n):
-       key = scanner.next()
+       key = scanner.nexttok()
        if i == 0 and key == "IHEOL":
            break       # no coordinate waiting, we will try prompting 
        if i == 1 and key == "IHEOL":
@@ -1763,7 +1763,7 @@ def phasers():
     # Original code so convoluted, I re-did it all
     # (That was Tom Almy talking about the C code, I think -- ESR)
     while automode == "NOTSET":
-       key = scanner.next()
+       key = scanner.nexttok()
        if key == "IHALPHA":
            if scanner.sees("manual"):
                if len(game.enemies)==0:
@@ -1773,7 +1773,7 @@ def phasers():
                    automode = "AUTOMATIC"
                else:
                    automode = "MANUAL"
-                   key = scanner.next()
+                   key = scanner.nexttok()
            elif scanner.sees("automatic"):
                if (not itarg) and len(game.enemies) != 0:
                    automode = "FORCEMAN"
@@ -1781,7 +1781,7 @@ def phasers():
                    if len(game.enemies)==0:
                        prout(_("Energy will be expended into space."))
                    automode = "AUTOMATIC"
-                   key = scanner.next()
+                   key = scanner.nexttok()
            elif scanner.sees("no"):
                no = True
            else:
@@ -1811,7 +1811,7 @@ def phasers():
     if automode == "AUTOMATIC":
        if key == "IHALPHA" and scanner.sees("no"):
            no = True
-           key = scanner.next()
+           key = scanner.nexttok()
        if key != "IHREAL" and len(game.enemies) != 0:
            prout(_("Phasers locked on target. Energy available: %.2f")%avail)
        irec = 0
@@ -1824,7 +1824,7 @@ def phasers():
            proutn(_("%d units required. ") % irec)
            scanner.chew()
            proutn(_("Units to fire= "))
-           key = scanner.next()
+           key = scanner.nexttok()
            if key != "IHREAL":
                return
            rpow = scanner.real
@@ -1838,7 +1838,7 @@ def phasers():
            # chicken out 
            scanner.chew()
            return
-        key = scanner.next()
+        key = scanner.nexttok()
        if key == "IHALPHA" and scanner.sees("no"):
            no = True
        if ifast:
@@ -1919,10 +1919,10 @@ def phasers():
                    proutn("??")
                proutn(")  ")
                proutn(_("units to fire at %s-  ") % crmena(False, ienm, "sector", aim))                
-               key = scanner.next()
+               key = scanner.nexttok()
            if key == "IHALPHA" and scanner.sees("no"):
                no = True
-               key = scanner.next()
+               key = scanner.nexttok()
                continue
            if key == "IHALPHA":
                huh()
@@ -1942,7 +1942,7 @@ def phasers():
                prout(_("Available energy exceeded -- try again."))
                scanner.chew()
                return
-           key = scanner.next() # scan for next value 
+           key = scanner.nexttok() # scan for next value 
            k += 1
        if rpow == 0.0:
            # zero energy -- abort 
@@ -2286,7 +2286,7 @@ def events():
                supercommander()
        elif evcode == FDSPROB: # Move deep space probe 
            schedule(FDSPROB, 0.01)
-            if not game.probe.next():
+            if not game.probe.nexttok():
                if not game.probe.quadrant().valid_quadrant() or \
                    game.state.galaxy[game.probe.quadrant().i][game.probe.quadrant().j].supernova:
                    # Left galaxy or ran into supernova
@@ -2417,7 +2417,7 @@ def wait():
     "Wait on events."
     game.ididit = False
     while True:
-       key = scanner.next()
+       key = scanner.nexttok()
        if key  != "IHEOL":
            break
        proutn(_("How long? "))
@@ -2717,7 +2717,7 @@ def selfdestruct():
     skip(1)
     prout(_("SELF-DESTRUCT-SEQUENCE-WILL-BE-ABORTED"))
     skip(1)
-    scanner.next()
+    scanner.nexttok()
     if game.passwd != scanner.token:
        prouts(_("PASSWORD-REJECTED;"))
        skip(1)
@@ -3277,7 +3277,7 @@ def cgetline():
                 elif line[0] != "#":
                     break
        else:
-           line = raw_input() + "\n"
+           line = input() + "\n"
     if logfp:
        logfp.write(line)
     return line
@@ -3606,13 +3606,13 @@ def imove(icourse=None, noattack=False):
     # Move out
     game.quad[game.sector.i][game.sector.j] = '.'
     for m in range(icourse.moves):
-        icourse.next()
+        icourse.nexttok()
         w = icourse.sector()
         if icourse.origin.quadrant() != icourse.location.quadrant():
             newquadrant(noattack)
             break
         elif check_collision(w):
-            print "Collision detected"
+            print("Collision detected")
             break
         else:
             game.sector = w
@@ -3693,7 +3693,7 @@ def getcourse(isprobe):
            navmode = "manual"
            key = "IHEOL"
            break
-        key = scanner.next()
+        key = scanner.nexttok()
        if key == "IHEOL":
            proutn(_("Manual or automatic- "))
            iprompt = True
@@ -3701,11 +3701,11 @@ def getcourse(isprobe):
        elif key == "IHALPHA":
             if scanner.sees("manual"):
                navmode = "manual"
-               key = scanner.next()
+               key = scanner.nexttok()
                break
             elif scanner.sees("automatic"):
                navmode = "automatic"
-               key = scanner.next()
+               key = scanner.nexttok()
                break
            else:
                huh()
@@ -3727,21 +3727,21 @@ def getcourse(isprobe):
                proutn(_("Destination sector or quadrant&sector- "))
            scanner.chew()
            iprompt = True
-           key = scanner.next()
+           key = scanner.nexttok()
        if key != "IHREAL":
            huh()
            raise TrekError
        xi = int(round(scanner.real))-1
-       key = scanner.next()
+       key = scanner.nexttok()
        if key != "IHREAL":
            huh()
            raise TrekError
        xj = int(round(scanner.real))-1
-       key = scanner.next()
+       key = scanner.nexttok()
        if key == "IHREAL":
            # both quadrant and sector specified 
            xk = int(round(scanner.real))-1
-           key = scanner.next()
+           key = scanner.nexttok()
            if key != "IHREAL":
                huh()
                raise TrekError
@@ -3780,13 +3780,13 @@ def getcourse(isprobe):
            proutn(_("X and Y displacements- "))
            scanner.chew()
            iprompt = True
-           key = scanner.next()
+           key = scanner.nexttok()
        itemp = "verbose"
        if key != "IHREAL":
            huh()
            raise TrekError
        delta.j = scanner.real
-       key = scanner.next()
+       key = scanner.nexttok()
        if key != "IHREAL":
            huh()
            raise TrekError
@@ -3829,7 +3829,7 @@ class course:
         self.step = 0
     def arrived(self):
         return self.location.roundtogrid() == self.final
-    def next(self):
+    def nexttok(self):
         "Next step on course."
         self.step += 1
         self.nextlocation = self.location + self.increment
@@ -3973,7 +3973,7 @@ def warp(wcourse, involuntary):
             look = wcourse.moves
             while look > 0:
                 look -= 1
-                wcourse.next()
+                wcourse.nexttok()
                 w = wcourse.sector()
                 if not w.valid_sector():
                     break
@@ -4003,7 +4003,7 @@ def warp(wcourse, involuntary):
 def setwarp():
     "Change the warp factor."
     while True:
-        key=scanner.next()
+        key=scanner.nexttok()
         if key != "IHEOL":
             break
        scanner.chew()
@@ -4189,7 +4189,7 @@ def probe():
        else:
            prout(_("Uhura- \"The previous probe is still reporting data, Sir.\""))
        return
-    key = scanner.next()
+    key = scanner.nexttok()
     if key == "IHEOL":
         if game.nprobes == 1:
             prout(_("1 probe left."))
@@ -4201,7 +4201,7 @@ def probe():
     game.isarmed = False
     if key == "IHALPHA" and scanner.token == "armed":
        game.isarmed = True
-       key = scanner.next()
+       key = scanner.nexttok()
     elif key == "IHEOL":
        proutn(_("Arm NOVAMAX warhead? "))
        game.isarmed = ja()
@@ -4553,7 +4553,7 @@ def beam():
     skip(1)
     prouts("WWHOOOIIIIIRRRRREEEE.E.E.  .  .  .  .   .    .")
     skip(2)
-    if withprob(0.98):
+    if not withprob(0.98):
        prouts("BOOOIIIOOOIIOOOOIIIOIING . . .")
        skip(2)
        prout(_("Scotty-  \"Oh my God!  I've lost them.\""))
@@ -5104,7 +5104,7 @@ def status(req=0):
 def request():
     "Request specified status data, a historical relic from slow TTYs."
     requests = ("da","co","po","ls","wa","en","to","sh","kl","sy", "ti")
-    while scanner.next() == "IHEOL":
+    while scanner.nexttok() == "IHEOL":
        proutn(_("Information desired? "))
     scanner.chew()
     if scanner.token in requests:
@@ -5148,21 +5148,21 @@ def eta():
        prout(_("COMPUTER DAMAGED, USE A POCKET CALCULATOR."))
        skip(1)
        return
-    if scanner.next() != "IHREAL":
+    if scanner.nexttok() != "IHREAL":
        prompt = True
        scanner.chew()
        proutn(_("Destination quadrant and/or sector? "))
-       if scanner.next()!="IHREAL":
+       if scanner.nexttok()!="IHREAL":
            huh()
            return
     w1.j = int(scanner.real-0.5)
-    if scanner.next() != "IHREAL":
+    if scanner.nexttok() != "IHREAL":
        huh()
        return
     w1.i = int(scanner.real-0.5)
-    if scanner.next() == "IHREAL":
+    if scanner.nexttok() == "IHREAL":
        w2.j = int(scanner.real-0.5)
-       if scanner.next() != "IHREAL":
+       if scanner.nexttok() != "IHREAL":
            huh()
            return
        w2.i = int(scanner.real-0.5)
@@ -5186,7 +5186,7 @@ def eta():
     while True:
        scanner.chew()
        proutn(_("Time or arrival date? "))
-       if scanner.next()=="IHREAL":
+       if scanner.nexttok()=="IHREAL":
            ttime = scanner.real
            if ttime > game.state.date:
                ttime -= game.state.date # Actually a star date
@@ -5200,7 +5200,7 @@ def eta():
            break
        scanner.chew()
        proutn(_("Warp factor? "))
-       if scanner.next()== "IHREAL":
+       if scanner.nexttok()== "IHREAL":
            wfl = True
            twarp = scanner.real
            if twarp<1.0 or twarp > 10.0:
@@ -5218,7 +5218,7 @@ def eta():
                if not wfl:
                    return
                proutn(_("New warp factor to try? "))
-               if scanner.next() == "IHREAL":
+               if scanner.nexttok() == "IHREAL":
                    wfl = True
                    twarp = scanner.real
                    if twarp<1.0 or twarp > 10.0:
@@ -5251,7 +5251,7 @@ def eta():
            (scheduled(FCDBAS)<ttime+game.state.date and game.battle == w1):
            prout(_("The starbase there will be destroyed by then."))
        proutn(_("New warp factor to try? "))
-       if scanner.next() == "IHREAL":
+       if scanner.nexttok() == "IHREAL":
            wfl = True
            twarp = scanner.real
            if twarp<1.0 or twarp > 10.0:
@@ -5277,10 +5277,10 @@ def freeze(boss):
     "Save game."
     if boss:
        scanner.push("emsave.trk")
-    key = scanner.next()
+    key = scanner.nexttok()
     if key == "IHEOL":
         proutn(_("File name: "))
-        key = scanner.next()
+        key = scanner.nexttok()
     if key != "IHALPHA":
         huh()
         return
@@ -5291,7 +5291,7 @@ def freeze(boss):
     except IOError:
        prout(_("Can't freeze game as file %s") % scanner.token)
        return
-    cPickle.dump(game, fp)
+    pickle.dump(game, fp)
     fp.close()
     scanner.chew()
 
@@ -5299,10 +5299,10 @@ def thaw():
     "Retrieve saved game."
     global game
     game.passwd = None
-    key = scanner.next()
+    key = scanner.nexttok()
     if key == "IHEOL":
        proutn(_("File name: "))
-       key = scanner.next()
+       key = scanner.nexttok()
     if key != "IHALPHA":
        huh()
        return True
@@ -5313,7 +5313,7 @@ def thaw():
     except IOError:
        prout(_("Can't thaw game in %s") % scanner.token)
        return
-    game = cPickle.load(fp)
+    game = pickle.load(fp)
     fp.close()
     scanner.chew()
     return False
@@ -5584,7 +5584,7 @@ def setup():
        prout(_("%d stardates.") % int(game.intime))
        proutn(_("%d starbases in ") % game.inbase)
     for i in range(game.inbase):
-       proutn(`game.state.baseq[i]`)
+       proutn(repr(game.state.baseq[i]))
        proutn("  ")
     skip(2)
     proutn(_("The Enterprise is currently in Quadrant %s") % game.quadrant)
@@ -5611,9 +5611,9 @@ def choose():
        scanner.chew()
 #      if not scanner.inqueue: # Can start with command line options 
        proutn(_("Would you like a regular, tournament, or saved game? "))
-        scanner.next()
+        scanner.nexttok()
         if scanner.sees("tournament"):
-           while scanner.next() == "IHEOL":
+           while scanner.nexttok() == "IHEOL":
                proutn(_("Type in tournament number-"))
            if scanner.real == 0:
                scanner.chew()
@@ -5639,7 +5639,7 @@ def choose():
        proutn(_("What is \"%s\"? ") % scanner.token)
        scanner.chew()
     while game.length==0 or game.skill==SKILL_NONE:
-       if scanner.next() == "IHALPHA":
+       if scanner.nexttok() == "IHALPHA":
             if scanner.sees("short"):
                game.length = 1
            elif scanner.sees("medium"):
@@ -5667,10 +5667,10 @@ def choose():
            elif game.skill == SKILL_NONE:
                proutn(_("Are you a Novice, Fair, Good, Expert, or Emeritus player? "))
     # Choose game options -- added by ESR for SST2K
-    if scanner.next() != "IHALPHA":
+    if scanner.nexttok() != "IHALPHA":
        scanner.chew()
        proutn(_("Choose your game style (plain, almy, fancy or just press enter): "))
-       scanner.next()
+       scanner.nexttok()
     if scanner.sees("plain"):
        # Approximates the UT FORTRAN version.
        game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_THINGY | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE | OPTION_WORLDS)
@@ -5854,7 +5854,7 @@ def setpassword():
        while True:
            scanner.chew()
            proutn(_("Please type in a secret password- "))
-           scanner.next()
+           scanner.nexttok()
            game.passwd = scanner.token
            if game.passwd != None:
                break
@@ -5923,12 +5923,12 @@ def listCommands():
 
 def helpme():
     "Browse on-line help."
-    key = scanner.next()
+    key = scanner.nexttok()
     while True:
        if key == "IHEOL":
            setwnd(prompt_window)
            proutn(_("Help on what command? "))
-           key = scanner.next()
+           key = scanner.nexttok()
        setwnd(message_window)
        if key == "IHEOL":
            return
@@ -5986,7 +5986,7 @@ def makemoves():
            setwnd(prompt_window)
            clrscr()
            proutn("COMMAND> ")
-           if scanner.next() == "IHEOL":
+           if scanner.nexttok() == "IHEOL":
                if game.options & OPTION_CURSES:
                    makechart()
                continue
@@ -6081,7 +6081,7 @@ def makemoves():
        elif cmd == "EMEXIT":           # Emergency exit
            clrscr()                    # Hide screen
            freeze(True)                # forced save
-           raise SystemExit,1          # And quick exit
+           raise SystemExit(1)         # And quick exit
        elif cmd == "PROBE":
            probe()                     # Launch probe
            if game.ididit:
@@ -6160,7 +6160,7 @@ def crmena(stars, enemy, loctype, w):
        buf += _("Quadrant ")
     elif loctype == "sector":
        buf += _("Sector ")
-    return buf + `w`
+    return buf + repr(w)
 
 def crmshp():
     "Emit our ship name." 
@@ -6187,7 +6187,7 @@ class sstscanner:
         self.token = None
         self.real = 0.0
         self.inqueue = []
-    def next(self):
+    def nexttok(self):
         # Get a token from the user
         self.real = 0.0
         self.token = ''
@@ -6238,12 +6238,12 @@ class sstscanner:
         return int(round(scanner.real))
     def getcoord(self):
         s = Coord()
-        scanner.next()
+        scanner.nexttok()
        if scanner.type != "IHREAL":
            huh()
            return None
        s.i = scanner.int()-1
-        scanner.next()
+        scanner.nexttok()
        if scanner.type != "IHREAL":
            huh()
            return None
@@ -6256,7 +6256,7 @@ def ja():
     "Yes-or-no confirmation."
     scanner.chew()
     while True:
-       scanner.next()
+       scanner.nexttok()
        if scanner.token == 'y':
            return True
        if scanner.token == 'n':
@@ -6296,7 +6296,7 @@ def debugme():
        for i in range(NDEVICES):
            proutn("Kill %s?" % device[i])
            scanner.chew()
-           key = scanner.next()
+           key = scanner.nexttok()
             if key == "IHALPHA" and scanner.sees("y"):
                game.damage[i] = 10.0
     proutn("Examine/change events? ")
@@ -6327,7 +6327,7 @@ def debugme():
                proutn("never")
            proutn("? ")
            scanner.chew()
-           key = scanner.next()
+           key = scanner.nexttok()
            if key == 'n':
                unschedule(i)
                scanner.chew()
@@ -6336,7 +6336,7 @@ def debugme():
                if i == FENSLV or i == FREPRO:
                    scanner.chew()
                    proutn("In quadrant- ")
-                   key = scanner.next()
+                   key = scanner.nexttok()
                    # "IHEOL" says to leave coordinates as they are 
                    if key != "IHEOL":
                        if key != "IHREAL":
@@ -6344,7 +6344,7 @@ def debugme():
                            unschedule(i)
                            continue
                        w.i = int(round(scanner.real))
-                       key = scanner.next()
+                       key = scanner.nexttok()
                        if key != "IHREAL":
                            prout("Event %d canceled, no y coordinate." % (i))
                            unschedule(i)
@@ -6378,7 +6378,7 @@ if __name__ == '__main__':
                     replayfp = open(val, "r")
                 except IOError:
                     sys.stderr.write("sst: can't open replay file %s\n" % val)
-                    raise SystemExit, 1
+                    raise SystemExit(1)
                 try:
                     line = replayfp.readline().strip()
                     (leader, __, seed) = line.split()
@@ -6400,11 +6400,11 @@ if __name__ == '__main__':
             elif switch == '-x':
                 game.idebug = True
             elif switch == '-V':
-                print "SST2K", version
-                raise SystemExit, 0 
+                print("SST2K", version)
+                raise SystemExit(0) 
             else:
                 sys.stderr.write("usage: sst [-t] [-x] [startcommand...].\n")
-                raise SystemExit, 1
+                raise SystemExit(1)
         # where to save the input in case of bugs
         if "TMPDIR" in os.environ:
             tmpdir = os.environ['TMPDIR']
@@ -6423,7 +6423,8 @@ if __name__ == '__main__':
                     (getpass.getuser(),socket.gethostname(),time.ctime()))
         random.seed(seed)
         scanner = sstscanner()
-        map(scanner.append, arguments)
+        for arg in arguments:
+            scanner.append(arg)
         try:
             iostart()
             while True: # Play a game 
@@ -6455,10 +6456,10 @@ if __name__ == '__main__':
             prout(_("May the Great Bird of the Galaxy roost upon your home planet."))
         finally:
             ioend()
-        raise SystemExit, 0
+        raise SystemExit(0)
     except KeyboardInterrupt:
         if logfp:
             logfp.close()
-        print ""
+        print("")
 
 # End.