
    gR+                        d dl m Z  d dlZd dlZd dlZd dlZd dlmZ d dlmZ ej	        d          dk    Z
e
rd Znd Z G d d	e          Zd
dddZddddZi Zi ZdD ]]Z e e          j        Ze                                ee<   	 eeee         <   e                                eee         <   S# e$ r Y Zw xY w G d d          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z G d" d#e          Z G d$ d%e          Z  G d& d'e          Z! G d( d)e          Z"e"Z# G d* d+e          Z$ G d, d-e$          Z% G d. d/e$          Z& G d0 d1e$          Z' G d2 d3e$          Z( G d4 d5e$          Z) G d6 d7e$          Z* G d8 d9e*          Z+ G d: d;e+          Z, G d< d=e+          Z- G d> d?e+          Z. G d@ dAe+          Z/ G dB dCe+          Z0 G dD dEe+          Z1 G dF dGe+          Z2 G dH dIe+          Z3 G dJ dKe$          Z4 G dL dMe$          Z5 G dN dOe5          Z6 G dP dQe$          Z7 G dR dSe$          Z8 G dT dUe$          Z9 G dV dWe$          Z: G dX dYe:          Z; G dZ d[e$          Z< G d\ d]e$          Z= G d^ d_e=          Z> G d` dae          Z? G db dce$          Z@ G dd dee$          ZA G df dge$          ZB G dh di          ZC eCd          ZD eCd          ZE eCd          ZF G dj dk          ZG eGdl          ZH eGdm          ZI G dn do          ZJ eJ            ZK G dp dq          ZL G dr dse$          ZM G dt dueM          ZN G dv dweO          ZP G dx dyeP          ZQ G dz d{          ZR G d| d}eP          ZS G d~ deP          ZTd ZUdS )    )arrayN)X)lock3c                     | S N xs    S/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/Xlib/protocol/rq.py_bytes_itemr   #   s        c                      t          |           S r   ordr
   s    r   r   r   &   s    1vvr   c                       e Zd ZdS )BadDataErrorN__name__
__module____qualname__r	   r   r   r   r   )   s          r   r   bhl)         BHLbhilc                   :    e Zd ZdZdZdZdZdZdZdZ	dZ
d Zd ZdS )Fielda  Field objects represent the data fields of a Struct.

    Field objects must have the following attributes:

       name         -- the field name, or None
       structcode   -- the struct codes representing this field
       structvalues -- the number of values encodes by structcode

    Additionally, these attributes should either be None or real methods:

       check_value  -- check a value before it is converted to binary
       parse_value  -- parse a value after it has been converted from binary

    If one of these attributes are None, no check or additional
    parsings will be done one values when converting to or from binary
    form.  Otherwise, the methods should have the following behaviour:

       newval = check_value(val)
         Check that VAL is legal when converting to binary form.  The
         value can also be converted to another Python value.  In any
         case, return the possibly new value.  NEWVAL should be a
         single Python value if structvalues is 1, a tuple of
         structvalues elements otherwise.

       newval = parse_value(val, display)
         VAL is an unpacked Python value, which now can be further
         refined.  DISPLAY is the current Display object.  Return the
         new value.  VAL will be a single value if structvalues is 1,
         a tuple of structvalues elements otherwise.

    If `structcode' is None the Field must have the method
    f.parse_binary_value() instead.  See its documentation string for
    details.

    Nr   c                     d S r   r	   selfs    r   __init__zField.__init__x   s    r   c                 &    t          d| z            )aB  value, remaindata = f.parse_binary_value(data, display, length, format)

        Decode a value for this field from the binary string DATA.
        If there are a LengthField and/or a FormatField connected to this
        field, their values will be LENGTH and FORMAT, respectively.  If
        there are no such fields the parameters will be None.

        DISPLAY is the display involved, which is really only used by
        the Resource fields.

        The decoded value is returned as VALUE, and the remaining part
        of DATA shold be returned as REMAINDATA.
        z8Neither structcode or parse_binary_value provided for %s)RuntimeErrorr&   datadisplaylengthformats        r   parse_binary_valuezField.parse_binary_value{   s!     U!" # # 	#r   )r   r   r   __doc__namedefault
structcodestructvaluescheck_valueparse_valuekeyword_argsr'   r/   r	   r   r   r#   r#   H   sb        " "H DGJLKKL  # # # # #r   r#   c                       e Zd Zd ZdS )Padc                 J    || _         d|z  | _        d|z  | _        d| _        d S )N    z%dxr   )sizevaluer3   r4   )r&   r<   s     r   r'   zPad.__init__   s-    	T\
$,r   Nr   r   r   r'   r	   r   r   r9   r9      s#            r   r9   c                       e Zd Zd ZdS )ConstantFieldc                     || _         d S r   r=   r&   r=   s     r   r'   zConstantField.__init__   s    


r   Nr>   r	   r   r   r@   r@      s#            r   r@   c                       e Zd ZdZdZdS )Opcoder   r   Nr   r   r   r3   r4   r	   r   r   rE   rE              JLLLr   rE   c                       e Zd ZdZdZd ZdS )	ReplyCoder   r   c                     d| _         d S Nr   rB   r%   s    r   r'   zReplyCode.__init__   s    


r   N)r   r   r   r3   r4   r'   r	   r   r   rI   rI      s-        JL    r   rI   c                        e Zd ZdZdZdZd ZdS )LengthFielda  A LengthField stores the length of some other Field whose size
    may vary, e.g. List and String8.

    Its name should be the same as the name of the field whose size
    it stores.

    The lf.get_binary_value() method of LengthFields is not used, instead
    a lf.get_binary_length() should be provided.

    Unless LengthField.get_binary_length() is overridden in child classes,
    there should also be a lf.calc_length().
    r    r   c                     |S )zjnewlen = lf.calc_length(length)

        Return a new length NEWLEN based on the provided LENGTH.
        r	   r&   r-   s     r   calc_lengthzLengthField.calc_length   s	     r   N)r   r   r   r0   r3   r4   rP   r	   r   r   rM   rM      s9          JL    r   rM   c                       e Zd ZdS )TotalLengthFieldNr   r	   r   r   rR   rR      s        Dr   rR   c                       e Zd ZdZdZd ZdS )RequestLengthr   r   c                     |dz  S )Nr   r	   rO   s     r   rP   zRequestLength.calc_length   s    {r   Nr   r   r   r3   r4   rP   r	   r   r   rT   rT      s-        JL    r   rT   c                       e Zd ZdZdZd ZdS )ReplyLengthr    r   c                     |dz
  dz  S )N    r   r	   rO   s     r   rP   zReplyLength.calc_length   s    !!r   NrV   r	   r   r   rX   rX      s-        JL" " " " "r   rX   c                       e Zd Zd ZdS )LengthOfc                 8    || _         t          |         | _        d S r   r1   unsigned_codesr3   r&   r1   r<   s      r   r'   zLengthOf.__init__       	(.r   Nr>   r	   r   r   r\   r\      s#        / / / / /r   r\   c                   (    e Zd ZdZdZd Zd Zd ZdS )	OddLengthr   r   c                     || _         d S r   )r1   r&   r1   s     r   r'   zOddLength.__init__   s    			r   c                     |dz  S )Nr   r	   rO   s     r   rP   zOddLength.calc_length   s    zr   c                     |dk    rdS dS )Nr   evenoddr	   )r&   r=   r,   s      r   r6   zOddLength.parse_value   s    A::65r   N)r   r   r   r3   r4   r'   rP   r6   r	   r   r   rc   rc      sK        JL        r   rc   c                       e Zd ZdZdZd ZdS )FormatFieldzA FormatField encodes the format of some other field, in a manner
    similar to LengthFields.

    The ff.get_binary_value() method is not used, replaced by
    ff.get_binary_format().
    r   c                 8    || _         t          |         | _        d S r   r^   r`   s      r   r'   zFormatField.__init__   ra   r   N)r   r   r   r0   r4   r'   r	   r   r   rk   rk      s4          L/ / / / /r   rk   c                       e Zd ZddZdS )
ValueFieldNc                 "    || _         || _        d S r   )r1   r2   )r&   r1   r2   s      r   r'   zValueField.__init__   s    	r   r   r>   r	   r   r   rn   rn      s(             r   rn   c                       e Zd ZdZdZdS )Int8r   r   NrF   r	   r   r   rq   rq      rG   r   rq   c                       e Zd ZdZdZdS )Int16r   r   NrF   r	   r   r   rs   rs     rG   r   rs   c                       e Zd ZdZdZdS )Int32r   r   NrF   r	   r   r   ru   ru     rG   r   ru   c                       e Zd ZdZdZdS )Card8r   r   NrF   r	   r   r   rw   rw     rG   r   rw   c                       e Zd ZdZdZdS )Card16r   r   NrF   r	   r   r   ry   ry     rG   r   ry   c                       e Zd ZdZdZdS )Card32r    r   NrF   r	   r   r   r{   r{     rG   r   r{   c                   *    e Zd ZdZdZddZd Zd ZdS )	Resource__resource__resourcer	   Nc                 L    t                               | ||           || _        d S r   )r{   r'   codes)r&   r1   r   r2   s       r   r'   zResource.__init__  s#    dG,,,


r   c                 b    	  t          || j                              S # t          $ r |cY S w xY wr   )getattrcast_functionAttributeErrorrC   s     r   r5   zResource.check_value!  sF    	575$"455777 	 	 	LLL	s    ..c                 l    || j         v r|S |                    | j                  }|r |||          S |S r   )r   get_resource_class
class_namer&   r=   r,   cs       r   r6   zResource.parse_value'  sJ     DJL&&t77 	1We$$$Lr   )r	   N)r   r   r   r   r   r'   r5   r6   r	   r   r   r}   r}     sP        "MJ     
 
 
 
 
r   r}   c                       e Zd ZdZdZdS )Window
__window__windowNr   r   r   r   r   r	   r   r   r   r   3           MJJJr   r   c                       e Zd ZdZdZdS )Pixmap
__pixmap__pixmapNr   r	   r   r   r   r   7  r   r   r   c                       e Zd ZdZdZdS )Drawable__drawable__drawableNr   r	   r   r   r   r   ;          "MJJJr   r   c                       e Zd ZdZdZdS )Fontable__fontable__fontableNr   r	   r   r   r   r   ?  r   r   r   c                       e Zd ZdZdZdS )Font__font__fontNr   r	   r   r   r   r   C  s        MJJJr   r   c                       e Zd ZdZdZdS )GC__gc__gcNr   r	   r   r   r   r   G  s        MJJJr   r   c                       e Zd ZdZdZdS )Colormap__colormap__colormapNr   r	   r   r   r   r   K  r   r   r   c                       e Zd ZdZdZdS )Cursor
__cursor__cursorNr   r	   r   r   r   r   O  r   r   r   c                       e Zd ZdZdZd ZdS )Boolr   r   c                 
    |  S r   r	   rC   s     r   r5   zBool.check_valueX  s    9}r   N)r   r   r   r4   r3   r5   r	   r   r   r   r   T  s-        LJ    r   r   c                        e Zd ZdZddZd ZdS )Setr   Nc                 p    t                               | ||           t          |         | _        || _        d S r   )rn   r'   r_   r3   values)r&   r1   r<   r   r2   s        r   r'   zSet.__init__^  s1    D$000(.r   c                 \    || j         vr"t          d| j        d|d| j                   |S )Nzfield z: argument z not in )r   
ValueErrorr1   r&   vals     r   r5   zSet.check_valuec  sD    dk!!* $			333= > > > 
r   r   )r   r   r   r4   r'   r5   r	   r   r   r   r   [  s<        L   
    r   r   c                       e Zd Zd ZdS )Gravityc                 2   t                               | |dt          j        t          j        t          j        t          j        t          j        t          j        t          j	        t          j
        t          j        t          j        t          j        f           d S rK   )r   r'   r   ForgetGravityStaticGravityNorthWestGravityNorthGravityNorthEastGravityWestGravityCenterGravityEastGravitySouthWestGravitySouthGravitySouthEastGravityre   s     r   r'   zGravity.__init__k  sb    T4Q_ao$%$6$%$6$%OQ]$%$6$%$6%8 	9 	9 	9 	9 	9r   Nr>   r	   r   r   r   r   j  s#        9 9 9 9 9r   r   c                       e Zd ZdZd ZdS )FixedStringr   c                 P    t                               | |           d|z  | _        d S )Nz%ds)rn   r'   r3   r`   s      r   r'   zFixedString.__init__w  s'    D$'''$,r   N)r   r   r   r4   r'   r	   r   r   r   r   t  s(        L' ' ' ' 'r   r   c                   &    e Zd ZdZddZd Zd ZdS )String8Nr   c                 J    t                               | |           || _        d S r   rn   r'   padr&   r1   r   s      r   r'   zString8.__init__  #    D$'''r   c                     t          |          }t          r+t          |          t          u r|                    d          }| j        r|dd|dz  z
  dz  z  z   |d fS ||d fS )NUTF-8r;   r   )len_PY3typestrencoder   )r&   r   slens      r   
pack_valuezString8.pack_value  sp    3xx 	&DII$$**W%%C8 	#1tax<1"455tTAAd?"r   c                    |,	 |                     d          dfS # t          $ r |dfcY S w xY w| j        r|d|dz  z
  dz  z   }n|}|d |         }	 |                     d          }n# t          $ r Y nw xY w|||d          fS )Nr   r   r   )decodeUnicodeDecodeErrorr   )r&   r+   r,   r-   r.   r   ss          r   r/   zString8.parse_binary_value  s    >!{{7++S00% ! ! !Sy   ! 8 	a&1*n12DDD&M	!!AA! 	 	 	D	$tuu+~s    ,,A( (
A54A5r   r   r   r   r3   r'   r   r/   r	   r   r   r   r   |  sK        J   	# 	# 	#    r   r   c                   &    e Zd ZdZddZd Zd ZdS )String16Nr   c                 J    t                               | |           || _        d S r   r   r   s      r   r'   zString16.__init__  r   r   c                     t          |          t          u rd |D             }t          |          }| j        r	d|dz  z  }nd}t	          j        dd|z  z   ft          |          z    |z   |d fS )Nc                 ,    g | ]}t          |          S r	   r   ).0r   s     r   
<listcomp>z'String16.pack_value.<locals>.<listcomp>  s    '''a3q66'''r   s     r   r   >r   )r   r   r   r   structpacktuple)r&   r   r   r   s       r   r   zString16.pack_value  s    99''3'''C3xx8 	TAX&CCCcC$J.1E#JJ>?#Ed 	r   c                     |dk    rt          |          dz  dz
  }n|dk    rt          |          dz  }| j        r	||dz  z   }n|}t          j        dd|z  z   |d |dz                     ||dz  d          fS )Nri   r   r   rh   r   r   )r   r   r   unpack)r&   r+   r,   r-   r.   r   s         r   r/   zString16.parse_binary_value  s    U??YY!^a'FFvYY!^F8 	VaZ(DDDcC&L0${
{2CDDTAXYY! 	!r   r   r   r	   r   r   r   r     sK        J     ! ! ! ! !r   r   c                   *    e Zd ZdZdZddZd Zd ZdS )ListzThe List, FixedList and Object fields store compound data objects.
    The type of data objects must be provided as an object with the
    following attributes and methods:

    ...

    Nr   c                 X    t                               | |           || _        || _        d S r   )rn   r'   r   r   )r&   r1   r   r   s       r   r'   zList.__init__  s*    D$'''	r   c                    |1g }| j         j        9|r5| j                             ||          \  }}|                    |           |5n d| j         j        z   }t	          j        |          }d}	|	|z   t          |          k    rt	          j        |||	|	|z                      }
| j         j        dk    r|
d         }
| j         j	        |                    |
           n.|                    | j         	                    |
|                     |	|z   }	|	|z   t          |          k    ||	d          }nd gt          |          z  }| j         j        4t          |          D ]#}| j                             ||          \  ||<   }$nd| j         j        z   }t	          j        |          }d}	t          d|          D ]}	 t	          j        |||	|	|z                      }
n# t          $ r d}
Y nw xY w| j         j        dk    r|
d         }
| j         j	        |
||<   n| j         	                    |
|          ||<   |	|z   }	||	d          }| j        r|t          |          dz  d          }||fS )N=r   r   s       r   )r   r3   parse_binaryappendr   calcsizer   r   r4   r6   intrange	Exceptionr   )r&   r+   r,   r-   r.   retr   scoder   posvis               r   r/   zList.parse_binary_value  s   >Cy#+ $ $	 6 6tW E EICJJsOOO  $ di22u--DjCII--eT#sTz/-BCCAy-22aDy,4

1

49#8#8G#D#DEEE*C DjCII-- CDDz &3v;;&Cy#+v I IA#'9#9#9$#H#HLCFDDI di22u--q&)) % %A0"M%c3:o1FGG$ 0 0 0/0 y-22aDy,4!"A!%!6!6q'!B!BA*CCCDDz8 	(D		A'DDys     G!!G0/G0c                    | j         j        rUt          | j         j                  dk    r8t          t          | j         j                 |                                          }nIg }|D ]/}|                    | j                             |                     0d                    |          }| j	        r t          |          }|dd|dz  z
  dz  z  z   }|t          |          d fS )Nr   r   r;   r   )
r   r3   r   r   struct_to_array_codestobytesr   r   joinr   )r&   r   r+   r   dlens        r   r   zList.pack_value  s    9 	"C	(<$=$=$B$B.ty/CD"$ $$+GII D D 5 5DI0033444488D>>D8 	7t99D%AqLA#566DSXXt##r   r   )r   r   r   r0   r3   r'   r/   r   r	   r   r   r   r     sX          J   
: : :x$ $ $ $ $r   r   c                   "    e Zd ZddZd Zd ZdS )	FixedListr   c                 N    t                               | |||           || _        d S r   )r   r'   r<   )r&   r1   r<   r   r   s        r   r'   zFixedList.__init__(  s%    dD$,,,			r   c                 H    t                               | ||| j        |          S r   )r   r/   r<   r*   s        r   r/   zFixedList.parse_binary_value,  s     &&tT7DIvNNNr   c                     t          |          | j        k    rt          d| j        z            t                              | |          S )Nz length mismatch for FixedList %s)r   r<   r   r1   r   r   r   s     r   r   zFixedList.pack_value/  s?    s88ty  ADIMNNNtS)))r   Nr   r   r   r   r'   r/   r   r	   r   r   r  r  '  sI           O O O* * * * *r   r  c                   2    e Zd ZdZddZd Zd Zd Zd ZdS )ObjectNc                     t                               | ||           || _        | j        j        | _        | j        j        | _        d S r   )rn   r'   r   r3   r4   )r&   r1   r   r2   s       r   r'   zObject.__init__8  s@    D$000	). I2r   c                 f   | j         j        | j                             ||          S d| j         j        z   }t          j        |          }t          j        ||d |                   }| j         j        dk    r|d         }| j         j        | j                             ||          }|||d          fS )Nr   r   r   )r   r3   r   r   r   r   r4   r6   )r&   r+   r,   r-   r.   r   r   r   s           r   r/   zObject.parse_binary_value>  s    9'9))$888 $)..E?5))DeT%4%[11Ay%**aDy$0I))!W55d455k>!r   c                 T    | j         j        |S | j                             ||          S r   )r   r6   )r&   r   r,   s      r   r6   zObject.parse_valueO  s*    9 (J9((g666r   c                     | j         j        rBt          | j         j                  dk    r%t          j        d| j         j        z   |          d d fS | j                             |          S )Nr   r   )r   r3   r   r   r   r   r   s     r   r   zObject.pack_valueU  s_    9 	-C	(<$=$=$B$B;sTY%993??tKK9'',,,r   c                 R   | j         j        |S t          |          t          u r|S t          |          t          u r|}n/t	          |t
                    r|j        }nt          d|z            g }| j         j        D ])}|j	        r |
                    ||j	                            *|S )Nz9Object value must be tuple, dictionary or DictWrapper: %s)r   r3   r   dict
isinstanceDictWrapper_data	TypeErrorfieldsr1   r   )r&   r   r+   valsfs        r   r5   zObject.check_value\  s    9'J99J99DD[)) 	_9DDWZ]]^^^! 	* 	*Av *DL)))r   r   )	r   r   r   r3   r'   r/   r6   r   r5   r	   r   r   r	  r	  5  si        J3 3 3 3" " ""7 7 7- - -    r   r	  c                       e Zd ZdZd Zd ZdS )PropertyDataNc                 ^   |t          |          |dz  z  }nt          |          }|dk    rd }||fS |dk    r#d|d |         f}||d|dz  z
  dz  z   d          }n}|dk    r<dt          t          d         |d d|z                     f}|d||dz  z   z  d          }n;|dk    r5dt          t          d         |d d|z                     f}|d|z  d          }t	          |d                   t
          u r5	 |d         |d                             d          f}n# t          $ r Y nw xY w||fS )	N   r   r      r   rZ   r   r   )r   r   r   array_unsigned_codesr   bytesr   r   )r&   r+   r,   r-   r.   r   s         r   r/   zPropertyData.parse_binary_valueu  sw   >YY6Q;/FF[[FQ;;C9q[[d7F7m$C1vz>Q"67889DDr\\u1!4d;AJ;6GHHICVfqj01223DDr\\u1!4d;AJ;6GHHICF
$DA<<5  1vs1v}}W556%    Dys   7#D 
D('D(c                 F   |\  }}|dvrt          d|z            t          r+t          |          t          u r|                    d          }t          |          t
          u r4|dz  }t          |          }||z  r|||z  z
  }|d |         }n|}||z  }nft          |          t          u rt          |          }|dz  }t          t          |         |                                          }t          |          }t          |          }|dd|dz  z
  dz  z  z   }|||fS )N)r  r  rZ   zInvalid property data format %dr   r  r;   r   )r   r   r   r   r   r  r   r   listr   r  r   )	r&   r=   fmtr   r<   vlenr+   r  dls	            r   r   zPropertyData.pack_value  s7   Sk!!@3FGGG 	&DII$$**W%%C99!8Ds88Dd{ dTk)5D5z4<DD CyyE!!3ii!8D.t4c::BBDDDs88DYYeBF
a/00T3r   r   r   r   r3   r/   r   r	   r   r   r  r  r  s7        J  <    r   r  c                        e Zd Zd Zd Zd ZdS )FixedPropertyDatac                 J    t                               | |           || _        d S r   )r  r'   r<   r`   s      r   r'   zFixedPropertyData.__init__  s#    dD)))			r   c                 T    t                               | ||| j        |dz  z  |          S )Nr  )r  r/   r<   r*   s        r   r/   z$FixedPropertyData.parse_binary_value  s3    ..tT7/3yVq[/I6S S 	Sr   c                     t                               | |          \  }}}t          |          | j        k    rt	          d|          |||fS )Nz)Wrong data length for FixedPropertyData: )r  r   r   r<   r   )r&   r=   r+   r  r   s        r   r   zFixedPropertyData.pack_value  s\    &11$>>dCt99	!!,"'% + , , , T3r   Nr  r	   r   r   r%  r%    sD          S S S    r   r%  c                   ,    e Zd ZdZdZdZd Zd Zd ZdS )	ValueListNr   usekeywordsc                     || _         dt          |         |fz  | _        t          j        | j                  | _        g | _        d}|D ]*}|j         r!| j                            ||f           |dz  }+d S )Nz=%s%dxr   )r1   r_   maskcoder   r   maskcodelenr  r   )r&   r1   maskr   r  flagr  s          r   r'   zValueList.__init__  s    	 N4$8##>>!?4=99 	! 	!Av !""At9---qy	! 	!r   c                 \   d}d}|| j         k    r|}| j        D ]t\  }}|j        |v rf||z  }||j                 }|j        |                    |          }t	          j        d|j        z   |          }||z   ddt          |          z
  z  z   }ut	          j        | j        |          |z   d d fS )Nr   r   r   r;   r   )	r2   r  r1   r5   r   r   r3   r   r-  )	r&   argkeysr/  r+   fieldr0  r   ds	            r   r   zValueList.pack_value  s    $,C; 		7 		7KE4zS  d{%*o$0++C00CKe&6 6<<ax%1s1vv:"66{4=$//$6dBBr   c           
      :   i }t          t          j        | j        |d | j                           d                   }|| j        d          }| j        D ]\  }}||z  r|j        rpt          j        d|j        z   |d t          j        d|j        z                                }	|j        dk    r|	d         }	|j	        |	                    |	|          }	n#|
                    |d d         |d d           \  }	}
|	||j        <   |dd          }t          |          |fS )Nr   r   r   r   )r   r   r   r-  r.  r  r3   r   r4   r6   r/   r1   r  )r&   r+   r,   r-   r.   rr/  r4  r0  r  r5  s              r   r/   zValueList.parse_binary_value  s:   6=5Fd6F5F0GHHKLLD$%%&; 	  	 KE4d{  # 
V!=u/?)?)-.VvsUEU?U/V/V.V)WY YD)Q..#Aw(4$00w?? $66tBQBx$PTUUGD! $%*ABBx1~~t##r   )	r   r   r   r3   r7   r2   r'   r   r/   r	   r   r   r*  r*    sS        JLG
! 
! 
!C C C($ $ $ $ $r   r*  c                       e Zd ZdZd Zd ZdS )KeyboardMappingNc                    |t          |          }nd|z  |z  }t          t          d         |d |                   }g }t          dt          |          |          D ]"}|                    ||||z                       #|||d          fS )Nr   r   )r   r   r  r   r   )	r&   r+   r,   r-   r.   r  ar   r   s	            r   r/   z"KeyboardMapping.parse_binary_value
  s    >t99DDv:&D&q)4;77q#a&&&)) 	* 	*AJJqQZ())))DKr   c                    d}|D ]}t          |t          |                    } t          t          d                   }|D ][}|D ]}|                    |           t          t          |          |          D ]!}|                    t          j                   "\|                                t          |          |fS )Nr   r   )	maxr   r   r  r   r   r   NoSymbolr   r&   r=   keycodesr   r;  kr   s          r   r   zKeyboardMapping.pack_value  s     	- 	-A8SVV,,HH&q)** 	% 	%A  3q668,, % %$$$$% yy{{CJJ00r   r#  r	   r   r   r9  r9    s7        J     1 1 1 1 1r   r9  c                       e Zd ZdZd Zd ZdS )ModifierMappingNc                     t          t          d         |d d|z                     }g }t          dd          D ](}|                    |||z  |dz   |z                      )||d|z  d          fS )Nr   r  r   )r   r  r   r   )r&   r+   r,   r-   r.   r;  r   r   s           r   r/   z"ModifierMapping.parse_binary_value+  s    &q)4V+<==q! 	9 	9AJJqVq1u&6678888DV%%%r   c                    t          |          dk    rt          d          d}|D ]}t          |t          |                    } t          t          d                   }|D ]Q}|D ]}|                    |           t          t          |          |          D ]}|                    d           R|                                t          |          |fS )Nr  z/ModifierMapping list should have eight elementsr   r   )r   r   r=  r   r  r   r   r   r?  s          r   r   zModifierMapping.pack_value4  s    u::??PQQQ 	- 	-A8SVV,,HH&q)** 	 	A  3q668,,   yy{{CJJ00r   r#  r	   r   r   rC  rC  (  s7        J& & &1 1 1 1 1r   rC  c                       e Zd ZdZd Zd ZdS )
EventFieldNc                 r    t          |t                    st          |d| j                  |j        d d fS )Nz is not an Event for field )r  Eventr   r1   _binaryrC   s     r   r   zEventField.pack_valueI  s?    %'' 	WEEE499UVVV}dD((r   c                     ddl m} |j                            t	          |d                   dz  |j                  } |||d d                   |dd          fS )Nr   )event   rZ   )r,   
binarydata)Xlib.protocolrL  event_classesgetr   AnyEvent)r&   r+   r,   r-   r.   rL  estructs          r   r/   zEventField.parse_binary_valueO  si    '''''''++KQ,@,@4,GXXwtCRCyAAA49LLr   )r   r   r   r3   r   r/   r	   r   r   rG  rG  F  s<        J) ) )M M M M Mr   rG  c                       e Zd Zd ZdS )	ScalarObjc                 0    || _         d| _        d | _        d S rK   )r3   r4   r6   )r&   codes     r   r'   zScalarObj.__init__]  s    r   Nr>   r	   r   r   rU  rU  \  s#                 r   rU  c                   "    e Zd ZdZdZd Zd ZdS )ResourceObjr    r   c                     || _         d S r   )r   )r&   r   s     r   r'   zResourceObj.__init__j  s    $r   c                 V    |                     | j                  }|r |||          S |S r   )r   r   r   s       r   r6   zResourceObj.parse_valuem  s8     &&t77 	1We$$$Lr   N)r   r   r   r3   r4   r'   r6   r	   r   r   rY  rY  f  s<        JL% % %    r   rY  r   r   c                       e Zd ZdZd Zd ZdS )StrClassNc                     t          |          t          ur|                    d          }t          r!t          t	          |          g          |z   }nt          t	          |                    |z   }|S )Nr   )r   r  r   r   r   chrr   s     r   r   zStrClass.pack_value|  sc    99E!!**W%%C 	&S
##c)CCc#hh--#%C
r   c                     t          |d                   dz   }|d|         }	 |                    d          }n# t          $ r Y nw xY w|||d          fS )Nr   r   r   )r   r   r   )r&   r+   r,   r   r   s        r   r   zStrClass.parse_binary  so    47##a'4L	!!AA! 	 	 	D	$tuu+~s   : 
AA)r   r   r   r3   r   r   r	   r   r   r]  r]  y  s7        J      r   r]  c                   4    e Zd ZdZd Zd Zd Zd	dZd	dZdS )
StructaR  Struct objects represents a binary data structure.  It can
    contain both fields with static and dynamic sizes.  However, all
    static fields must appear before all dynamic fields.

    Fields are represented by various subclasses of the abstract base
    class Field.  The fields of a structure are given as arguments
    when instantiating a Struct object.

    Struct objects have two public methods:

      to_binary()    -- build a binary representation of the structure
                        with the values given as arguments
      parse_binary() -- convert a binary (string) representation into
                        a Python dictionary or object.

    These functions will be generated dynamically for each Struct
    object to make conversion as fast as possible.  They are
    generated the first time the methods are called.

    c                    || _         d| _        d| _        g | _        d | _        g | _        | j         D ]z}|j        W| j        rJ | j        |j        z   | _        |j        dk    r.| j                            |           | j        |j        z   | _        `| j                            |           {t          j
        | j                  | _        | j        rd | _        d| _        d S | j        dd          | _        | j        | _        d S )Nr   r   r   )r  static_codesstatic_valuesstatic_fieldsstatic_size
var_fieldsr3   r4   r   r   r   )r&   r  r  s      r   r'   zStruct.__init__  s      	* 	*A |'?***$($5$D! >A%%&--a000)-);an)LD&
 &&q))))!?4+<==? 	3"DO !D"/3DO $ 2Dr   c                 J   d}t          | j                  }g }g }g }d}d}	| j        D ]P}
|
j        rd}d}nd}|d|
j        |	|dz  z   }|d|
j        z  z   }|                    d|
j        z             |	dz   }	Qd	| j        z  g}d}	| j        D ]W}
t          |
t                    rt          |
t                    r_| j        r|                    d
|	|fz             n|                    t          |
                    | j                                       n|                    d|	|
j        fz             nt          |
t                    r|                    d|
j        z             nqt          |
t                    r)|                    t          |
j                             n3|
j        dk    rB|
j         |                    d|	|
j        fz             n|                    |
j                   ng }t#          |
j                  D ]!}|                    d|
j        |fz             "|
j        $|dd                    |          |	|
j        fz  z   }n$|dd                    |          d|
j        dz   }||z   }|
j        rS|
j        |                    |
j                   n1|                    |
j        dt)          |
j                             |	dz   }	Ydd                    |          z  }| j        r |d|dd                    |          dz   }n|d|z  z   }| j        D ]\}
|
j        rS|
j        |                    |
j                   +|                    |
j        dt)          |
j                             ]||z   }|r|                    d           dd                    |          z  |z   }t+                                                      }t/          ||           t1          j        |d         |           | _         | j        |i |S )ah  data = s.to_binary(...)

        Convert Python values into the binary representation.  The
        arguments will be all value fields with names, in the order
        given when the Struct object was instantiated.  With one
        exception: fields with default arguments will be last.

        Returns the binary representation as the string DATA.

         r   r   z, _keyword_argszf  _%(name)s, _%(name)s_length, _%(name)s_format = self.var_fields[%(fno)d].pack_value(%(name)s%(kw)s)
)r1   fnokwz + len(_%s)z_%sz"%s"z&self.static_fields[%d].calc_length(%s)z.self.static_fields[%d].calc_length(_%s_length)z
_%s_formatNz&self.static_fields[%d].check_value(%s)z_%s_%dz.  %s = self.static_fields[%d].check_value(%s)
, z   = 
zstruct.pack(%s)z	  return z + z  return %s
z**_keyword_argszdef to_binary(self, %s):
	to_binary)r   rg  rh  r7   r1   r   rd  rf  r  rM   rR   rP   rk   r@   r=   r4   r5   r   r   r2   reprglobalscopyexectypes
MethodTyperp  )r&   varargsr3  rW  total_lengthjoinsargsdefargskwargr   r  rl  	pack_argsr;  jr   gs                    r   rp  zStruct.to_binary  s    4+,,  	 	A~ &  V'(v&'%'* ** +D (-!&*@@LLL(((AAA d//0	# ;	 ;	A![)) 8N a!122 6 O!(()Q,-|+<*= > > > > "((Q]]4;K-L-L)M)MNNNN$$%U*+QV&5 6 6 6 6 A{++ )N  !67777 A}-- %N  QW.... >Q&& }0!(()Q./[*9 : : : :
 "((0000 A"1>22 9 9QVQK!78888}0#'X*.))A,,16)B(C  D  $ttyy||||QVVV&LL )AI 6 Ny(AF++++AFFFDOOO'LMMMAAA !499Y#7#77 ? 	14$$$

58I8I8I8IJJDD /D00D  	J 	JAv J9$KK''''NNQY#HIIIg~ 	+KK)*** ,diioo=D$ IINNT1)!K.$?? t~w/$///r   c                     t          |          t          u r | j        |i i S t          |          t          u r | j        di |S t	          |t
                    r | j        di |j        S t          d|z            )z This function allows Struct objects to be used in List and
        Object fields.  Each item represents the arguments to pass to
        to_binary, either a tuple, a dictionary or a DictWrapper.

        r	   z%s is not a tuple or a list)r   r   rp  r  r  r  r  r   rC   s     r   r   zStruct.pack_valuex  s     ;;%!4>5/B///%[[D  !4>2////{++ 	H!4>25555<FGGGr   r   c                 0   d}d}d}| j         D ]}|j        snt          |t                    rnit          |t                    rnS|j        dk    rt          |          }nd|||j        z   fz  }|j        |d|j        d|dz   }n|d	|j        ||fz  z   }|dz   }||j        z   }|d
z   }|dz   }t                      	                                }	t          ||	           t          j        |	d         |           | _        |                     |||          S )zThis function is used by List and Object fields to convert
        Struct objects with no var_fields into Python values.

        z=def parse_value(self, val, display, rawdict = 0):
  ret = {}
r   r   %d:%dN  ret["	"] = val[]
C  ret["%s"] = self.static_fields[%d].parse_value(val[%s], display)
z*  if not rawdict: return DictWrapper(ret)
z  return ret
r6   )rf  r1   r  rM   rk   r4   r   r6   rr  rs  rt  ru  rv  )
r&   r   r,   rawdictrW  vnork  r  vranger  s
             r   r6   zStruct.parse_value  s_    # %	' %	'A 6 <A{++ <A{++ < >Q&& XXFF$S1>-A'BBF
 =(4qvvvvvv"NNDD $E&'fc6%:$; <D 'C&CCCC&& IINNT1 +Am,<dCC Wg666r   c           
      z   d| j         | j        fz  }i }i }d}d}| j        D ]}	|	j        snt	          |	t
                    r%|	j        d|z  ||	j        <   nd||fz  ||	j        <   nvt	          |	t                    rd|z  ||	j        <   nS|	j        dk    rt          |          }
nd|||	j        z   fz  }
|	j        |d|	j        d	|
d
z   }n|d|	j        ||
fz  z   }|dz   }||	j        z   }|d| j        z  z   }d}| j
        D ]J}	|d|	j        ||                    |	j        d          |                    |	j        d          fz  z   }|dz   }K|dz   }|dz   }t                                                      }t          ||           t          j        |d         |           | _        |                     |||          S )a  values, remdata = s.parse_binary(data, display, rawdict = 0)

        Convert a binary representation of the structure into Python values.

        DATA is a string or a buffer containing the binary data.
        DISPLAY should be a Xlib.protocol.display.Display object if
        there are any Resource fields or Lists with ResourceObjs.

        The Python values are returned as VALUES.  If RAWDICT is true,
        a Python dictionary is returned, where the keys are field
        names and the values are the corresponding Python value.  If
        RAWDICT is false, a DictWrapper will be returned where all
        fields are available as attributes.

        REMDATA are the remaining binary data, unused by the Struct object.

        zfdef parse_binary(self, data, display, rawdict = 0):
  ret = {}
  val = struct.unpack("%s", data[:%d])
r   Nzval[%d]z4self.static_fields[%d].parse_value(val[%d], display)r   r  r  r  r  r  z  data = data[%d:]
zR  ret["%s"], data = self.var_fields[%d].parse_binary_value(data, display, %s, %s)
Nonez)  if not rawdict: ret = DictWrapper(ret)
z  return ret, data
r   )rd  rg  rf  r1   r  rM   r6   rk   r4   r   rh  rQ  rr  rs  rt  ru  rv  r   )r&   r+   r,   r  rW  lengthsformatsr  rk  r  r  r  s               r   r   zStruct.parse_binary  s@   (; $d&678
 # %	' %	'A
 6 <
 A{++ <=(&/#oGAFOO(G*-s(4GAFOO A{++ <"+c/ >Q&& XXFF$S1>-A'BBF=(4qvvvvvv"NNDD $E&'fc6%:$; <D 'C&CC,t/???
  	 	A 7  fc%kk!&&99%kk!&&99;; <D 'CCBB,, IINNT1!,Q~->EE   w888r   Nr   )	r   r   r   r0   r'   rp  r   r6   r   r	   r   r   rb  rb    s         *"3 "3 "3Rd0 d0 d0NH H H$A7 A7 A7 A7Hb9 b9 b9 b9 b9 b9r   rb  c                   p    e Zd Z e edd           ed           edd                    Zd Zd Z	dS )	TextElements8stringr   deltar   r   c                    d}i }|D ]&}t           r+t          |          t          u r|                    d          }t          |          t          u rd|f}t          |          t
          t          fv st          |t                    rht          |          t
          u r|\  }}n|d         }|d         }|s|r7||d<   |d d         |d<   | | j	        j
        di |z   }d}|dd          }|5|7t          |d          r|                                }|t          j        d	d
|          z   }(t          |          }|dd|dz  z
  dz  z  z   d d fS )Nr   r   r   r  r     r	   r   z>BL   r;   r   )r   r   r   r   r  r   r  r  r  string_textitemrp  hasattrr   r   r   r   )r&   r=   r+   rz  r   r  r   r  s           r   r   zTextElements8.pack_value8  s    #	9 #	9A &Q3HHW%%Aww%F
 Aww5$-''![)) ( 77e## HE11gJE(A  q  $)DM%&ttWDN"@$"6"@""M"M"MMDE#$$A   q   1n-- )((Afk%a888 4yyeD1H122D$>>r   c                    g }	 t          |          dk     rnt          |d                   dk    rA|                    t          j        d|dd                   d                    |dd          }npt          |d                   dk    r$t          |d                   dk    r|dd          }n3| j                            ||          \  }}|                    |           |dfS )Nr   r   r   r  z>L   r   )r   r   r   r   r   r  r   )r&   r+   r,   r-   r.   r   r   s          r   r/   z TextElements8.parse_binary_valuee  s    	!4yy1}} 47##s**fmD$qs)<<Q?@@@ABBx T!W%%**{47/C/Cq/H/HABBx .;;D'JJ4a   !	!$ s{r   N)
r   r   r   rb  r\   rq   r   r  r   r/   r	   r   r   r  r  3  so        fhhx33"d7mm%gha888; ;O+? +? +?Z    r   r  c                   d    e Zd Z e edd           ed           edd                    ZdS )TextElements16r  r   r  r   r  N)r   r   r   rb  r\   rq   r   r  r	   r   r   r  r  }  sJ        fhhx33"d7mm&hxq999< <OOOr   r  c                       e Zd Zd ZdS )GetAttrDatac                     	 | j         r| j         |         S t          |          # t          $ r t          |          w xY wr   )r  r   KeyError)r&   attrs     r   __getattr__zGetAttrData.__getattr__  sU    	'z +z$''$T*** 	' 	' 	' &&&	's   % % ?N)r   r   r   r  r	   r   r   r  r    s#        ' ' ' ' 'r   r  c                   J    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )r  c                     || j         d<   d S )Nr  )__dict__)r&   r  s     r   r'   zDictWrapper.__init__  s    !%gr   c                     | j         |         S r   r  r&   keys     r   __getitem__zDictWrapper.__getitem__  s    z#r   c                     || j         |<   d S r   r  r&   r  r=   s      r   __setitem__zDictWrapper.__setitem__      
3r   c                     | j         |= d S r   r  r  s     r   __delitem__zDictWrapper.__delitem__      JsOOOr   c                     || j         |<   d S r   r  r  s      r   __setattr__zDictWrapper.__setattr__  r  r   c                     | j         |= d S r   r  r  s     r   __delattr__zDictWrapper.__delattr__  r  r   c                 *    t          | j                  S r   )r   r  r%   s    r   __str__zDictWrapper.__str__  s    4:r   c                 @    | j         dt          | j                  dS )N())	__class__rq  r  r%   s    r   __repr__zDictWrapper.__repr__  s#    >>>4
+;+;+;+;<<r   c                 b    t          |t                    r| j        |j        k    S | j        |k    S r   )r  r  r  r&   others     r   __eq__zDictWrapper.__eq__  s0    e[)) 	':,,:&&r   c                 .    |                      |           S r   )r  r  s     r   __ne__zDictWrapper.__ne__  s    ;;u%%%%r   N)r   r   r   r'   r  r  r  r  r  r  r  r  r  r	   r   r   r  r    s        & & &                  = = =' ' '& & & & &r   r  c                       e Zd ZddZd ZdS )RequestNc                     || _          | j        j        |i || _        d | _        |                    | |d u           d S r   )_errorhandler_requestrp  rJ  _serialsend_request)r&   r,   onerrorrz  r3  s        r   r'   zRequest.__init__  sM    $.t}.===T7$#677777r   c                 @    | j         t          | j         ||           S dS )Nr   )r  call_error_handlerr&   errors     r   
_set_errorzRequest._set_error  s%    )%d&8%FFF1r   r   )r   r   r   r'   r  r	   r   r   r  r    s7        8 8 8 8    r   r  c                   .    e Zd ZddZd Zd Zd Zd ZdS )	ReplyRequestr   c                    || _          | j        j        |i || _        d | _        d | _        d | _        t          j                    | _	        | j         
                    | d           |s|                                  d S d S rK   )_displayr  rp  rJ  r  r  _errorr   allocate_lock_response_lockr  reply)r&   r,   deferrz  r3  s        r   r'   zReplyRequest.__init__  s    .t}.===
"022""4+++ 	JJLLLLL	 	r   c                    | j                                          | j        | j        ~| j        j                                         | j                                          | j                            | j                   | j                                          | j        | j        ~| j                                          d | _        | j        r| j        d S )N)request)	r  acquirer  r  r  send_recv_lockreleasesend_and_recvr  r%   s    r   r  zReplyRequest.reply  s    
 	##%%%j T[%8M(00222'')))M''$,'???''))) j T[%8 	##%%% ; 	+	 	r   c                     | j                                          | j                            || j        d          \  | _        }| j                                          d S )Nr   r  )r  r  _replyr   r  r  r  )r&   r+   r5  s      r   _parse_responsezReplyRequest._parse_response  sW    ##%%%00t}PQ0RR
A##%%%%%r   c                 x    | j                                          || _        | j                                          dS rK   )r  r  r  r  r  s     r   r  zReplyRequest._set_error  s8    ##%%%##%%%qr   c           	      H    d| j         d| j        d| j        d| j        d	S )N<z
 serial = z	, data = z
, error = r   )r  r  r  r  r%   s    r   r  zReplyRequest.__repr__  s3     <@NNNDLLLZ^ZdZdZdfjfqfqfqrrr   Nr  )r   r   r   r'   r  r  r  r  r	   r   r   r  r    si             (& & &
  s s s s sr   r  c                   "    e Zd ZddZd Zd ZdS )rI  Nc                 <   |r`|| _         | j                            ||d          \  | _        }| j        d         dz    | j        d<   | j        d         dz  | j        d<   d S | j        r
| j        |d<   d|d<    | j        j        d	i || _         d|d<   || _        d S )
Nr   r  r      
send_eventrM  r   sequence_numberr	   )rJ  _fieldsr   r  _coderp  )r&   rN  r,   r3  r+   s        r   r'   zEvent.__init__  s     	%DL#|88WCD  9  F  FDJ 04z&/AD/H+H'HDJ|$!%F!3d!:DJvz *#zV&'D"#14<12>>>DL!"DDJJJr   c                    g }| j                                         D ]K\  }}|dk    r|dk    r| j         d         r|dz  }|                    |dt          |                     Ld                    |          }| j        d|dS )Nr  r   r  rn  rm  r  r  )r  itemsr   rq  r   r  )r&   kwlistrl  r   kwss        r   r  zEvent.__repr__  s    z'')) 	7 	7GB\!!V||
< 8|DjMMrrr499956666ii>>>333//r   c                 v    t          |t                    r| j        |j        k    S t          | j        |          S r   )r  rI  r  cmpr  s     r   r  zEvent.__eq__  s5    eU## 	*:,,tz5)))r   )NN)r   r   r   r'   r  r  r	   r   r   rI  rI    sF           (
0 
0 
0* * * * *r   rI  c                     	  | ||          S #  t           j                            d           t          j                     Y dS xY w)Nz#Exception raised by error handler.
r   )sysstderrwrite	traceback	print_exc)handlerr  r  s      r   r  r    sO    wug&&&
?@@@qqs	    4A)Vr   r   r  r  ru  Xlibr   Xlib.supportr   versionr   r   r   r   signed_codesr_   r  r   r   itemsizer<   upperr  r#   r9   r@   rE   rI   rM   rR   rT   rX   r\   rc   rk   Formatrn   rq   rs   ru   rw   ry   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r%  r*  r9  rC  rG  rU  Card8Obj	Card16Obj	Card32ObjrY  	WindowObjColormapObjr]  Strrb  r  r  objectr  r  r  r  rI  r  r	   r   r   <module>r     s
  &        



                  {1~        $ # # # #9 # # # CC))cc++   	  A588D!"45l40167ggiinT233   C# C# C# C# C# C# C# C#L    %       E   
    ]              %   4	 	 	 	 	{ 	 	 	    $   " " " " "" " " "/ / / / /{ / / /       "/ / / / /% / / / 
           :       J       J       J       Z       Z   
    v   4    X       X       x       x       8              x       X   
    :       *   9 9 9 9 9c 9 9 9' ' ' ' '* ' ' '# # # # #j # # #L"! "! "! "! "!z "! "! "!L\$ \$ \$ \$ \$: \$ \$ \$~* * * * * * * *: : : : :Z : : :z@ @ @ @ @: @ @ @F       &<$ <$ <$ <$ <$ <$ <$ <$~1 1 1 1 1j 1 1 1B1 1 1 1 1j 1 1 1<M M M M M M M M,                IcNNIcNN	IcNN	         K!!	k*%%       * hjj_9 _9 _9 _9 _9 _9 _9 _9DF F F F FJ F F FT< < < < <] < < <' ' ' ' '& ' ' ' &  &  &  &  &+  &  &  &D       .s .s .s .s .s; .s .s .sb%* %* %* %* %*K %* %* %*N    s   (B00B87B8