File: ctypes-test.py

package info (click to toggle)
freecell-solver 3.12.0-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 4,332 kB
  • sloc: ansic: 29,493; perl: 8,911; xml: 5,162; python: 1,124; sh: 777; ruby: 358; cpp: 304; makefile: 150
file content (48 lines) | stat: -rw-r--r-- 1,194 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys
from ctypes import *

def main(argv):
    fcs = CDLL("libfreecell-solver.so")
    libc = CDLL("libc.so.6")

    user = fcs.freecell_solver_user_alloc()

    board = file(argv.pop(0)).read()

    fcs.freecell_solver_user_solve_board(user,
        c_char_p(
           board
        )
    )

    fcs.freecell_solver_user_current_state_as_string.restype = c_void_p

    class MOVE(Structure):
        _fields_ = [("c", c_byte * 4)]

    move = MOVE()

    def print_state(user=user):
        as_string = fcs.freecell_solver_user_current_state_as_string(
            user, 1, 0, 1
            )

        print "%s\n\n====================\n" % (string_at(as_string)),

        libc.free(as_string)

    print "-=-=-=-=-=-=-=-=-=-=-=-\n\n",

    print_state()

    while (fcs.freecell_solver_user_get_next_move(user, pointer(move)) == 0):
        as_string = fcs.freecell_solver_user_move_to_string_w_state(user, move, 0)
        print "\n%s\n\n" % (string_at(as_string)),
        libc.free(as_string)
        print_state()
    fcs.freecell_solver_user_free(user);

#----------------------------------------------------------------------

if __name__ == "__main__":
    main(sys.argv[1:])