#!/usr/bin/env python # -*- mode: python; coding: utf-8; -*- # ---------------------------------------------------------------------------## # # Copyright (C) 1998-2003 Markus Franz Xaver Johannes Oberhumer # Copyright (C) 2003 Mt. Hood Playing Card Co. # Copyright (C) 2005-2009 Skomoroh # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # ---------------------------------------------------------------------------## import gettext import locale import os import subprocess import sys try: import jnius except ImportError: jnius = None import pysollib.settings # ************************************************************************ # * init # ************************************************************************ def init(): if 'LANG' not in os.environ: if os.name == 'nt': lang, enc = locale.getdefaultlocale() os.environ['LANG'] = lang elif jnius: # android Locale = jnius.autoclass('java.util.Locale') os.environ['LANG'] = Locale.getDefault().getLanguage() locale.setlocale(locale.LC_ALL, '') # install gettext locale_locations = ( # locale/ next to the pysol.py script sys.path[0], # locale/ next to library.zip (py2exe) os.path.dirname(sys.path[0]), # locale/ in curdir (works for e.g. py2app) os.curdir) # leaving the domain unbound means sys.prefix+'/share/locale' for par in locale_locations: locale_dir = os.path.join(par, 'locale') if os.path.isdir(locale_dir): gettext.bindtextdomain('pysol', locale_dir) break gettext.textdomain('pysol') # debug if 'PYSOL_CHECK_GAMES' in os.environ or 'PYSOL_DEBUG' in os.environ: pysollib.settings.CHECK_GAMES = True print('PySol debugging: set CHECK_GAMES to True') if 'PYSOL_DEBUG' in os.environ: try: pysollib.settings.DEBUG = int(os.environ['PYSOL_DEBUG']) except Exception: pysollib.settings.DEBUG = 1 print(('PySol debugging: set DEBUG to', pysollib.settings.DEBUG)) if '--version' in sys.argv: print("PySol FC version {}".format(pysollib.settings.VERSION)) sys.exit(0) # init toolkit if '--gtk' in sys.argv: pysollib.settings.TOOLKIT = 'gtk' sys.argv.remove('--gtk') elif '--tk' in sys.argv: pysollib.settings.TOOLKIT = 'tk' pysollib.settings.USE_TILE = False sys.argv.remove('--tk') elif '--tile' in sys.argv: pysollib.settings.TOOLKIT = 'tk' pysollib.settings.USE_TILE = True sys.argv.remove('--tile') elif '--kivy' in sys.argv: pysollib.settings.TOOLKIT = 'kivy' pysollib.settings.USE_TILE = False pysollib.settings.SELECT_GAME_MENU = False sys.argv.remove('--kivy') if pysollib.settings.TOOLKIT == 'tk': from six.moves import tkinter root = tkinter.Tk(className=pysollib.settings.TITLE) root.withdraw() if tkinter.TkVersion < 8.4: # we need unicode support sys.exit("%s needs Tcl/Tk 8.4 or better (you have %s)" % (pysollib.settings.TITLE, str(tkinter.TkVersion))) pysollib.settings.WIN_SYSTEM = root.tk.call('tk', 'windowingsystem') # if pysollib.settings.USE_TILE == 'auto': # check Tile pysollib.settings.USE_TILE = False try: root.tk.eval('package require tile 0.7.8') except tkinter.TclError: pass else: pysollib.settings.USE_TILE = True # "can't invoke event <>: application has been destroyed" root.destroy() tkinter._default_root = None # check FreeCell-Solver pysollib.settings.USE_FREECELL_SOLVER = False if os.name == 'nt': if sys.path[0] and not os.path.isdir(sys.path[0]): # i.e. library.zip d = os.path.dirname(sys.path[0]) os.chdir(d) # for read presets fcs_command = os.path.join( 'freecell-solver', 'bin', 'fc-solve.exe') pysollib.settings.FCS_COMMAND = fcs_command f = os.path.join('freecell-solver', 'presetrc') os.environ['FREECELL_SOLVER_PRESETRC'] = f if os.name in ('posix', 'nt'): try: try: import freecell_solver fc_solve_lib_obj = freecell_solver.FreecellSolver() assert fc_solve_lib_obj pysollib.settings.USE_FREECELL_SOLVER = True except Exception: pass if not pysollib.settings.USE_FREECELL_SOLVER: kw = {'shell': True, 'stdout': subprocess.PIPE, 'stderr': subprocess.PIPE, 'stdin': subprocess.PIPE, } if os.name != 'nt': kw['close_fds'] = True p = subprocess.Popen( pysollib.settings.FCS_COMMAND+' --help', **kw) p.stdin.close() line = p.stdout.readline() if sys.version_info >= (3,): line = line.decode("utf-8") if line.startswith('fc-solve'): pysollib.settings.USE_FREECELL_SOLVER = True if os.name == 'posix': os.wait() # kill zombi except Exception: # traceback.print_exc() pass os.environ['FREECELL_SOLVER_QUIET'] = '1' # run app without games menus (more fast start) if '--no-games-menu' in sys.argv: sys.argv.remove('--no-games-menu') pysollib.settings.SELECT_GAME_MENU = False