1import ctypes23class MPDExpr(ctypes.Structure):4 pass56class MPDExprOP(ctypes.Union):7 pass89MPDExprOP._fields_ = [('str', ctypes.c_char_p),10 ('expr', ctypes.POINTER(MPDExpr))]1112MPDExpr._fields_ = [('name', ctypes.c_char_p),13 ('op', ctypes.c_uint),14 ('o1', MPDExprOP),15 ('next', ctypes.POINTER(MPDExpr))]1617class MPDRange(ctypes.Structure):18 _fields_ = [('start', ctypes.c_size_t),19 ('end', ctypes.c_ssize_t)]2021class MPDCmd(ctypes.Structure):22 pass2324class MPDValue(ctypes.Union):25 _fields_ = [('ival', ctypes.c_int),26 ('uval', ctypes.c_uint),27 ('sval', ctypes.c_char_p),28 ('fval', ctypes.c_float),29 ('bval', ctypes.c_bool),30 ('rval', MPDRange),31 ('eval', ctypes.POINTER(MPDExpr)),32 ('cmdval', ctypes.POINTER(MPDCmd))]3334class MPDArg(ctypes.Structure):35 _fields_ = [('type', ctypes.c_uint),36 ('v', MPDValue)]3738MPDCmd._fields_ = [('name', ctypes.c_char_p),39 ('argc', ctypes.c_size_t),40 ('argv', ctypes.POINTER(ctypes.POINTER(MPDArg)))]4142# TODO: Use python3 enum43class MPDVal(object):44 INT = 045 UINT = 146 STR = 247 FLOAT = 348 BOOL = 449 RANGE = 550 EXPR = 651 CMD = 7