
    i'                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZm	Z	 ddl
mZ ddlmZ ddlmZmZ ddl
mZ dd	l
mZ er G d
 de      Znd.dZ G d de      Z ej,                   ej.                  d       ej.                  d       ej.                  d       ej0                  d            Z ej,                   ej4                  d       ej.                  d       ej.                  d       ej6                  d       ej4                  d       ej4                  d       ej4                  d       ej0                  d            Z ej,                   ej.                  d       ej0                  d       ej:                  dd       ej0                  d       ej<                  de            Z ej,                   ej@                  d       ejB                  d       ej4                  d       ej4                  d       ej4                  d        ej6                  d!       ej6                  d"       ej6                  d#       ej6                  d$       ej6                  d%       ej6                  d&       ej4                  d'       ej.                  d(       ej.                  d)       ej.                  d*       ej:                  d+d       ej<                  d+e            Z" G d, d-ejF                        Z$y)/    N)PY3byte2int
indexbytes   )error)ge)lockconnect   )rqeventc                        e Zd ZddZd Zd Zy)	bytesviewNc                     |t        |      |z
  }t        |t              rt        |      }n@t        |t              r|j
                  }n#t        dj                  t        |                  ||||z    | _        y Nzunsupported type: {})	len
isinstancebytes
memoryviewr   view	TypeErrorformattype)selfdataoffsetsizer   s        _/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/Xlib/protocol/display.py__init__zbytesview.__init__1   si    |4y'$&!$'D),yy 6 = =d4j IJJVF4K0DI    c                 ,    t        | j                        S N)r   r   r   s    r   __len__zbytesview.__len__<   s    tyy>!r!   c                 p    t        |t              rt        | j                  |         S | j                  |   S r#   )r   slicer   r   )r   keys     r   __getitem__zbytesview.__getitem__?   s-    #u%TYYs^,,99S>!r!   r   N)__name__
__module____qualname__r    r%   r)    r!   r   r   r   /   s    		1	"	"r!   r   c                     t        | t        t        f      s#t        dj	                  t        |                   |t        |       |z
  }t        | ||      S r   )r   r   bufferr   r   r   r   )r   r   r   s      r   r   r   F   sM    $0299$t*EFF<t9V#DdFD))r!   c                   (   e Zd Zi Zej
                  j                         Zej                  j                         Z
ddZd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd ZddZd Zd ZddZd Zd Zd Zd ZddZd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&y) DisplayNc           	         t        j                  |      \  }}}}}|| _        || _        t        j                  ||||      | _        t        j                  | j
                  ||||      \  }}t        j                         | _	        d | _
        t        j                         | _        t        j                         | _        g | _        t        j                         | _        d| _        g | _        t        j                         | _        d| _        d| _        d| _        t        j                         | _        d| _        t        j                         | _        | j
                  j1                  t
        j2                  t
        j4                        }	t7        j8                  dt7        j:                  t7        j<                  |	d                  }	t?        |	      | _         g | _!        d| _"        d| _#        d| _$        d| _%        t        j                         | _&        i | _'        d| _(        d | _)        tU        jV                  dtU        jX                  dd            d   | _-        | jZ                  rd}
nd	}
t]        | |
d
d||      }|j^                  dk7  r*ta        jb                  | j                  |jd                        || _3        ti        | j                  tk        | jf                  jl                        dz
        | _        y )Nr   r   r   r!   BBH   B   l      )
byte_orderprotocol_majorprotocol_minorauth_prot_nameauth_prot_data)7r
   get_displaydisplay_namedefault_screen
get_socketsocketget_authr	   allocate_locksocket_error_locksocket_errorevent_queue_read_lockevent_queue_write_lockevent_queuerequest_queue_lockrequest_serialrequest_queuesend_recv_locksend_activerecv_activeevent_waitingevent_wait_lockrequest_waitingrequest_wait_lock
getsockopt
SOL_SOCKET	SO_RCVBUFmathpowfloorlogintrecv_buffer_sizesent_requestsrecv_packet_len	data_send	data_recvdata_sent_bytesresource_id_lockresource_idslast_resource_iderror_handlerstructunpackpack
big_endianConnectionSetupRequeststatusr   DisplayConnectionErrorreasoninfominr   roots)r   displaynameprotocolhost	displaynoscreenno	auth_name	auth_databuffer_sizeorderrs               r   r    zDisplay.__init__S   s   4;4G4G4P1hi &((xyI&//T08$	 K	9 "&!3!3!5  &*%7%7%9"&*&8&8&:# #'"4"4"6 #002#113 !%!3!3!5 kk,,V->->-3-=-=?hhq$**TXXk1-E"FG #K 0     !% 2 2 4 ! " !--fkk#v.FGJ??EE #40546454=4=? 88q=..t/@/@!((KK 	!$"5"5s499??7Ka7OPr!   c                     | j                   S r#   )r@   r$   s    r   get_display_namezDisplay.get_display_name   s       r!   c                     | j                   S r#   )rA   r$   s    r   get_default_screenzDisplay.get_default_screen   s    """r!   c                 V    | j                          | j                  j                         S r#   )check_for_errorrC   filenor$   s    r   r   zDisplay.fileno   s!    {{!!##r!   c                     | j                          | j                  j                          | j                  j                          | j                  sm| j
                  j                          | j                  j                          | j                  d       | j                  j                          | j                  sm| j                  d   }| j                  d= | j                  j                          | j                  j                          |S )NTr   r   )r   rH   acquirerI   rJ   rN   releasesend_and_recv)r   r   s     r   
next_eventzDisplay.next_event   s     	""**, 	##++-
 ""
 '') ''//1 t, ''//1# "",   #Q##++-
 	""**, r!   c                    | j                          | j                  j                          | j                  d       | j                  j                          t        | j                        }| j                  j                          |S )NT)recv)r   rN   r   r   rI   r   rJ   r   )r   counts     r   pending_eventszDisplay.pending_events   sn     	##%$' 	##++-D$$%##++-r!   c                 |    | j                          | j                  j                          | j                  d       y )NT)flush)r   rN   r   r   r$   s    r   r   zDisplay.flush   s1    ##%4(r!   c                 F    | j                          | j                  d       y )Nclient)r   close_internalr$   s    r   closezDisplay.close  s    

H%r!   c                     || _         y r#   )rf   )r   handlers     r   set_error_handlerzDisplay.set_error_handler  s
    $r!   c                    | j                   j                          	 | j                  }|| j                  v rS|dz   }|| j                  j
                  kD  rd}|| j                  k(  rt        j                  d      || j                  v rSd| j                  |<   || _        | j                  j                  |z  | j                   j                          S # | j                   j                          w xY w)zid = d.allocate_resource_id()

        Allocate a new X resource id number ID.

        Raises ResourceIDError if there are no free resource ids.
        r   r   zout of resource idsN)
rc   r   re   rd   ro   resource_id_maskr   ResourceIDErrorresource_id_baser   )r   is     r   allocate_resource_idzDisplay.allocate_resource_id	  s     	%%'	,%%At(((Etyy111A---//0EFF t((( $(Da $%D!99--1!!))+D!!))+s   A,C 	.C C.c                    | j                   j                          	 || j                  j                  z  }||z
  | j                  j                  k7  r	 | j                   j                          y	 | j                  |= | j                   j                          y# t        $ r Y &w xY w# | j                   j                          w xY w)zd.free_resource_id(rid)

        Free resource id RID.  Attempts to free a resource id which
        isn't allocated by us are ignored.
        N)rc   r   ro   r   r   r   rd   KeyError)r   ridr   s      r   free_resource_idzDisplay.free_resource_id!  s     	%%'	,dii000A Qw$))444 !!))+%%a( !!))+   !!))+s)   5B% .B 	B"B% !B""B% %Cc                 :    | j                   j                  ||      S )zclass = d.get_resource_class(class_name, default = None)

        Return the class to be used for X resource objects of type
        CLASS_NAME, or DEFAULT if no such class is set.
        )resource_classesget)r   
class_namedefaults      r   get_resource_classzDisplay.get_resource_class9  s     $$((W==r!   c                 "    || j                   |<   y r#   extension_major_opcodes)r   extnamemajors      r   set_extension_majorzDisplay.set_extension_majorB  s    05$$W-r!   c                      | j                   |   S r#   r   )r   r   s     r   get_extension_majorzDisplay.get_extension_majorE  s    ++G44r!   c                     |d k(  r|| j                   |<   y || j                   vr||i| j                   |<   y || j                   |   |<   y r#   )event_classes)r   codeevtsubcodes       r   add_extension_eventzDisplay.add_extension_eventH  sP    
T/&)4d#$,,,+2C.t!!$'36t!!$'0r!   c                 "    || j                   |<   y r#   )error_classes)r   r   errs      r   add_extension_errorzDisplay.add_extension_errorQ  s    #&4 r!   c                     | j                   j                          | j                  }| j                   j                          |r|y r#   )rF   r   rG   r   r   r   s     r   r   zDisplay.check_for_errorY  s>    &&(&&(I r!   c                 P   | j                   r| j                   | j                  j                          | j                  |_        | j                  dz   dz  | _        | j
                  j                  ||f       t        | j
                        }| j                  j                          y )Nr      )	rG   rK   r   rL   _serialrM   appendr   r   )r   requestwait_for_responseqlens       r   send_requestzDisplay.send_requesta  s    ###'')--#22Q6%?!!7,=">?4%%&'')r!   c                    d | _         d | _        d | _        d | _        d | _        | j
                  j                          | j                  j                          t        j                  |      | _        | j                  j                          y r#   )rM   r^   rJ   r`   ra   rC   r   rF   r   r   ConnectionClosedErrorrG   r   )r   whoms     r   r   zDisplay.close_internalr  ss    !! 	 	&&(!77=&&(r!   c                 V
   |s|| j                   s|s|r| j                  r|r0| j                  }| j                  sId| _        |j	                          n1|/| j
                  }| j                  sd| _        |j	                          | j                  j                          |s|ryj	                          |j                          y| j                  s
d}d| _        nd}d}d}	 |s| j                   s| j                  j	                          | j                  D ]A  \  }	}
| j                  |	j                  z   | _        |
s'| j                  j                  |	       C | j                  dd= | j                  j                          | j                  r
d| _         d}n	d| _         d}| j                  j                          |s|sn|r$|"| j                  t!        | j                        z   }	 |r| j"                  g}ng }|s|rd}nd}t%        j$                  | j"                  g|g |      \  }}}|rN	 | j"                  j1                  | j                        }| j                  |d | _        | j                  |z   | _        d}|r|r	 | j6                  t!        | j8                        z
  }t;        | j<                  |      }| j"                  j?                  |      }|s| j3                  d       | j4                  tA        | j8                        |z   | _        | jC                  |      }n<| j                  j	                          d| _         | j                  j                          y|r|| j                  k\  rn3|r| jD                  rn$||rn|rn| j                  j	                          | j                  j	                          |rd| _         |rd| _        | j                  r!d| _        | j                  j                          | j                  r!d| _        | j
                  j                          | j                  j                          y# t$        j&                  $ r[}t)        |t*              r|j,                  }n|d   }|t,        j.                  k7  r | j                  j	                          Y d}~d}~ww xY w# t"        j&                  $ r%}| j3                  d|z         | j4                  d}~ww xY w# t"        j&                  $ r%}| j3                  d|z         | j4                  d}~ww xY w)a  send_and_recv(flush = None, event = None, request = None, recv = None)

        Perform I/O, or wait for some other thread to do it for us.

        send_recv_lock MUST be LOCKED when send_and_recv is called.
        It will be UNLOCKED at return.

        Exactly or one of the parameters flush, event, request and recv must
        be set to control the return condition.

        To attempt to send all requests in the queue, flush should
        be true.  Will return immediately if another thread is
        already doing send_and_recv.

        To wait for an event to be received, event should be true.

        To wait for a response to a certain request (either an error
        or a response), request should be set to that request's
        serial number.

        To just read any pending data from the server, recv should be true.

        It is not guaranteed that the return condition has been
        fulfilled when the function returns, so the caller has to loop
        until it is finished.
        Nr   r   z
server: %sserver)#rO   rP   rR   rQ   r   rT   rS   rN   r   rK   rM   r`   _binaryr^   r   rb   r   rC   selectr   r   OSErrorerrnoEINTRsendr   rG   r_   ra   maxr]   r   r   parse_responserJ   )r   r   r   r   r   	wait_lock	receivingflush_bytessendingreqwaitwritesettimeoutrswsesr   r   r   gotreqr   
bytes_recvs                         r   r   zDisplay.send_and_recv  s   T w*0@0@$D$4$4  00	)))*D&%%'$ 22	+++,D(%%' '')
    I DI  d..
 ''//1!%!3!3 7IC%)^^ckk%ADN**11#67
 &&q)''//1 >>'(D$G'(D$G '') y
 ,"22S5HH$  $}H!H
 5G"G#]]DKK=(BP
B( ,((8A
 "&!3'+';';a'?$ F 0 $ 4 4s4>>7J J #D$9$95 A%)[[%5%5e%<

 &++H5"///%*4>>%:Z%GDN!009F ''//1'(D$''//1  (<(<< )) "v 
 '')q ~ 	##% D D!"D  ((*#$D ""**,##%[ << c7+99Dq6D5;;&
 ##++-& || ,''s(:;+++,$ "<< 0++L3,>?"///0sK   (AQ -%R5 AS0 R2AR--R25S- S((S-0T( T##T(c                    |dk(  r| j                         S d}	 | j                  rt        | j                        }| j                  rrt	        | j                        | j                  k  r|S dk(  r| j                  |      xs |}m|dz  t        j                  k(  r| j                  |       t        |      t	        | j                        dk  r|S dk(  r| j                  |      xs |}ni|dk(  s|dz  t        j                  k(  r=t        t        j                  d| j                  dd	       d         }d|dz  z   | _        n| j                  |       ?)
a%  Internal method.

        Parse data received from server.  If REQUEST is not None
        true is returned if the request with that serial number
        was received, otherwise false is returned.

        If REQUEST is -1, we're parsing the server connection setup
        response.
        Fr          r   z=L      )parse_connection_setupra   r   r_   r   parse_request_responser   GenericEventCodeparse_event_responseAssertionErrorparse_error_responser\   rg   rh   )r   r   r   rtyperlens        r   r   zDisplay.parse_response  sJ    b=..00 ~~ 0 ##t~~&)=)==!MA:!88AKVFT\R%8%88--e4(// 4>>"R' z227;Ev !ut|r/B/BB 6==t~~a/BCAFG')D1H}$ ))%0K r!   c                    t        | j                  d      }| j                  j                  |t        j
                        } || | j                  d d       }t        | j                  d      | _        | j                  |j                        }|r|j                  |      rt        |t        j                        ra| j                  j                          | j                  r!d| _        | j                   j#                          | j                  j#                          ||j                  k(  S | j$                  r"t        j&                  | j$                  |d        y| j)                  |       y)Nr   r   r   F)r   ra   r   r   r   XErrorr   get_waiting_requestsequence_number
_set_errorr   r   ReplyRequestrN   r   rS   rT   r   rf   call_error_handlerdefault_error_handler)r   r   r   estructer   s         r   r   zDisplay.parse_error_response  s$   $..!, $$((u||<D$.."-."4>>26 &&q'8'89 3>>!$
 #r/##++-''+,D(**224##++-a//// !!%%d&8&8!TB  **1-r!   c                 H    t         j                  j                  d|z         y )NzX protocol error:
%s
)sysstderrwriter   s     r   r   zDisplay.default_error_handler
  s    

2S89r!   c                 L   | j                         }t        j                  d| j                  dd       d   }||j                  k7  rt        d|j                  d|d      |j                  | j                  d | j                          t        | j                  | j                        | _        d| _        | j                  j                          | j                  r!d| _        | j                  j                          | j                  j                          |j                  |k(  S )Nz=Hr   r   r   zExpected reply for request z
, but got z.  Can't happen!)get_waiting_replyrequestrg   rh   ra   r   RuntimeError_parse_responser_   r   rN   r   rS   rT   r   r   )r   r   r   snos       r   r   zDisplay.parse_request_response  s    ++- mmD$..1"56q9#++"%++s 4 5 5 	DNN+@D,@,@AB #4>>43G3GH 
 	##%#$D ""**,##% ""g--r!   c                 ~   |dz  }|t         j                  k(  r| j                  }nd}| j                  j	                  |t
        j                        }t        |      t        k(  r1| j                  d   }t        |      t        k(  rt        |      }||   } || | j                  d |       }|t         j                  k(  rd| _        t        | j                  |      | _	        t        |d      r!| j                  |j                  dz
  dz         | j                   j#                          | j$                  j'                  |       | j                   j)                          | j*                  j#                          | j,                  r!d| _        | j.                  j)                          | j*                  j)                          y )Nr   r   r   )rr   
binarydatar   r   r   )r   r   r_   r   r   r   AnyEventr   dictra   strordr   hasattrr   r   rI   r   rJ   r   r   rN   rQ   rR   )r   etypelengthr   r   r   s         r   r   zDisplay.parse_event_response-  so   B'''))FF$$((?=D nnQ'G G}#g, g&Gd1HIB'''#$D "4>>6: 1'($$a&7&7!&;u%DE
 	##++-"##++- 	##%!"D  ((*##%r!   c                 j   | j                   sy | j                   d   j                  | j                  kD  r$| j                  dz   }|| j                  k  r&|dz   }n | j                  }|| j                  kD  r|dz
  }|| j                   d   j                  k  ry d }t        | j                         }d}d}t	        dt        | j                               D ]R  }| j                   |   j                  |z   }||k  rd}||z   }|}||k(  r| j                   |   }|dz   } n||k  sNd }|} n | j                   d |= |S )Nr   r   r   )r^   r   rL   r   range)	r   r   last_serialr   reqposadjlastr   rnos	            r   r   zDisplay.get_waiting_requestd  sa   !! a ((4+>+>>--5KT(((Ek --KT(((Ek ##A&... T''(q#d0012 	A$$Q'//#5C TzCiDcz((+Qs#	( ww'
r!   c                     t        dt        | j                              D ]@  }t        | j                  |   d      s| j                  |   }| j                  d |dz   = |c S  t	        d      )Nr   _replyr   z0Request reply to unknown request.  Can't happen!)r  r   r^   r  r   )r   r   r   s      r   r   z Display.get_waiting_replyrequest  ss    q#d0012 	SAt))!,h7((+&&vAv.
		S QRRr!   c                    | j                   d   }	 |j                  r|j                  d   dz  }t        | j                        |k  ry|j                  d   dk7  r*| j                  d|j                  d	    |j                  d
<   nI|j                  j                  | j                  d| | d      \  }}|j                  j                  |       | j                   d= | j                  |d | _        yt        | j                        dk  ry|j                  j                  | j                  dd | d      \  |_        }| j                  dd | _        @)zCInternal function used to parse connection setup response.
        r   Tadditional_lengthr   Frl   r   Nreason_lengthrn   )rawdictr   )r^   _datar   ra   _success_replyparse_binaryupdater  )r   r|   alenxds        r   r   zDisplay.parse_connection_setup  sG   
 q! wwww23a7 t~~&-  778$)(,7P8P(QAGGH% ++889N9= 9 ODAqGGNN1%&&q)!%!6 t~~&* XX224>>"13E374 3 I
!%!3G r!   r#   )FFNF)'r+   r,   r-   r   r   xerror_classcopyr   r   event_classr   r    r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r.   r!   r   r2   r2   N   s     &&++-M%%**,MWQ|!#$1f)
&%,0,0>657'*")"_&D	51p*Z:.>4&n4l	S*4r!   r2   depthbits_per_pixelscanline_pad   	visual_idvisual_classbits_per_rgb_valuecolormap_entriesred_mask
green_mask	blue_maskr   visualsrootdefault_colormapwhite_pixelblack_pixelcurrent_input_maskwidth_in_pixelsheight_in_pixelswidth_in_mmsheight_in_mmsmin_installed_mapsmax_installed_mapsroot_visualbacking_storesave_unders
root_depthallowed_depthsc                      e Zd Z ej                   ej
                  ddd       ej                  d       ej                  d       ej                  d       ej                  dd       ej                  dd       ej                  d       ej                  d       ej                  d      	      Z
 ej                   ej                  d	       ej                  d
       ej                  d       ej                  d       ej                  d            Z ej                   ej                  d       ej                  d       ej                  d       ej                  d       ej                  dd       ej                  d       ej                  dd       ej                  dd       ej                  d       ej                  d       ej                  d       ej                  d       ej                  d       ej                  d       ej                  d       ej                  d       ej                  de       ej                  de            Zd Zy)rk   r:   r   )r7   r8   r;   r<   r=   r   r>   rl   r  r  release_numberr   r   motion_buffer_sizevendormax_request_lengthrq   pixmap_formatsimage_byte_orderbitmap_format_bit_orderbitmap_format_scanline_unitbitmap_format_scanline_padmin_keycodemax_keycoder   c                      | j                   j                  |i || _        d | _        |j                  j                  | df       |j                  j                          |j                  d       y )NTr   )r   )	_request	to_binaryr   r  rM   r   rN   r   r   )r   rr   argskeyss       r   r    zConnectionSetupRequest.__init__&  se    .t}}..==

 	$$dD\2
 	&&(+r!   N)r+   r,   r-   r   StructSetPadCard16LengthOfString8rF  Card8r  Card32ListPixmapFormatScreenr  r    r.   r!   r   rk   rk      s   ryy&"&&q,? "&&)#"))$45#"))$45%"++&6:%"++&6: "&&)$"**%56$"**%569H RYY(+!/2"#34"#34"#67	:F RYY			*: ; )		*< = )		*< = )		*> ? +Ha 8 )		*> ? +GQ 7 +,<a @ (); < ()B C ()F G ()E F ( 7 ( 7 &q	 *

8 4 '(8, G ' 8#"N*,r!   rk   r*   )%r   rX   r   rC   rg   r   sixr   r   r    r   extr   supportr	   r
   r   r   objectr   r2   rJ  rP  rL  rS  rQ  rM  
VisualTyperN  rR  DepthWindowColormaprT  GetAttrDatark   r.   r!   r   <module>r_     s  2      
 * )   #  "F ".*A4f A4N ryy("((7+""((#34""((>2 "&&) RYY;/!.1!"67"#56":."<0";/
 			8288G$266!92;;y!,266!92779j1		 
IBIIf%BKK 23BIIm,BIIm,BII23BII/0BII01BIIn-BIIo.BII23BII23BIIm,BHH_-BHH]+BHH\*BKK 0!4BGG,e4!
(3,R^^ 3,r!   