
    A"S?                     F   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 d dlmZm	Z	 ddl
mZmZ ej        d          dk    rd Znd Z G d	 d
          Z ej         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           ej        d           ej        d           ej        d                    Z ej         ej        d           ej        d           ej        dd           ej        d           ej        de                    Z ej         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j        d"           ej        d#           ej        d$           ej        d%           ej        d&           ej        d'           ej        d(d           ej        d(e                    Z G d) d*ej                  ZdS )+    N)error)lockconnect   )rqevent3c                     | S N xs    X/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/Xlib/protocol/display.py_bytes_itemr   '   s        c                      t          |           S r   )ordr   s    r   r   r   *   s    1vvr   c                   (   e Zd Zi Zi Zej                                        Ze	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 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'dS ) 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                    | _        g | _        d| _        d| _        d| _        d| _        t          j                    | _        i | _        d| _        d | _         tC          j"        dtC          j#        dd                    d         | _$        | j$        rd}nd}tK          | |d	d||
          }	|	j&        dk    rtO          j(        | j        |	j)                  |	| _*        tW          | j        tY          | j*        j-                  dz
            | _        d S )Nr   r   r   BBH   B   l      )
byte_orderprotocol_majorprotocol_minorauth_prot_nameauth_prot_data).r   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sent_requestsrequest_length	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minlenroots)
selfdisplaynamehost	displaynoscreenno	auth_name	auth_dataorderrs
             r   __init__zDisplay.__init__4   s6   *1*=g*F*F'dIx &(tY??&/04dI G  G	9 "&!3!5!5  &*%7%9%9"&*&8&:&:# #'"4"6"6 #022#133 !%!3!5!5    !% 2 4 4 ! " !-fk#v.F.FGGJ? 	EEE #40546454=4=? ? ? 8q==.t/@!(KKK 	!$"5s49?7K7Ka7OPPr   c                     | j         S r   )r#   rM   s    r   get_display_namezDisplay.get_display_name   s      r   c                     | j         S r   )r$   rY   s    r   get_default_screenzDisplay.get_default_screen   s    ""r   c                 \    |                                   | j                                        S r   )check_for_errorr&   filenorY   s    r   r_   zDisplay.fileno   s(    {!!###r   c                    |                                   | j                                         | j                                         | j        sh| j                                         | j                                         |                     d           | j                                         | j        h| j        d         }| j        d= | j                                         | j                                         |S )Nr   )r   r   )r^   r+   acquirer,   r-   r1   releasesend_and_recv)rM   r   s     r   
next_eventzDisplay.next_event   s    	"**,,, 	#++---
 " 	2
 ''))) '//111 q))) '//111# " 	2,  #Q#++---
 	"**,,, r   c                    |                                   | j                                         |                     d           | j                                         t          | j                  }| j                                         |S )Nr   )recv)r^   r1   ra   rc   r,   rK   r-   rb   )rM   counts     r   pending_eventszDisplay.pending_events   s     	##%%%!$$$ 	#++---D$%%#++---r   c                     |                                   | j                                         |                     d           d S )Nr   )flush)r^   r1   ra   rc   rY   s    r   rj   zDisplay.flush   sF    ##%%%1%%%%%r   c                 X    |                                   |                     d           d S )Nclient)rj   close_internalrY   s    r   closezDisplay.close   s)    

H%%%%%r   c                     || _         d S r   )r@   )rM   handlers     r   set_error_handlerzDisplay.set_error_handler   s    $r   c                    | j                                          	 | j        }|| j        v r?|dz   }|| j        j        k    rd}|| j        k    rt          j        d          || j        v ?d| j        |<   || _        | j        j        |z  | j         	                                 S # | 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)
r=   ra   r?   r>   rI   resource_id_maskr   ResourceIDErrorresource_id_baserb   )rM   is     r   allocate_resource_idzDisplay.allocate_resource_id   s     	%%'''	,%At(((Ety111A---/0EFFF t((( $(Da $%D!9-1!))++++D!))++++s   A.B# #B>c                 X   | j                                          	 || j        j        z  }||z
  | j        j        k    r	 | j                                          dS 	 | j        |= n# t          $ r Y nw xY w| j                                          dS # | 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)r=   ra   rI   rs   ru   rb   r>   KeyError)rM   ridrv   s      r   free_resource_idzDisplay.free_resource_id   s     	%%'''	,di00A Qw$)444 !))+++++%a((    !))+++++D!))++++s/   "B A# "B #
A0-B /A00B B)c                 8    | 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)rM   
class_namedefaults      r   get_resource_classzDisplay.get_resource_class  s     $((W===r   c                     || j         |<   d S r   extension_major_opcodes)rM   extnamemajors      r   set_extension_majorzDisplay.set_extension_major  s    05$W---r   c                     | j         |         S r   r   )rM   r   s     r   get_extension_majorzDisplay.get_extension_major   s    +G44r   c                     || j         |<   d S r   )event_classes)rM   codeevts      r   add_extension_eventzDisplay.add_extension_event#      #&4   r   c                     || j         |<   d S r   )error_classes)rM   r   errs      r   add_extension_errorzDisplay.add_extension_error&  r   r   c                     | j                                          | j        }| j                                          |r|d S r   )r)   ra   r*   rb   rM   r   s     r   r^   zDisplay.check_for_error.  sK    &&(((&&((( 	I	 	r   c                 "   | j         r| j         | j                                         | j        |_        | j        dz   dz  | _        | j                            ||f           t          | j                  }| j                                         d S )Nr      )	r*   r.   ra   r/   _serialr0   appendrK   rb   )rM   requestwait_for_responseqlens       r   send_requestzDisplay.send_request6  s     	$##'')))-#2Q6%?!!7,=">???4%&&'')))))r   c                    d | _         d | _        d | _        d | _        d | _        | j                                         | j                                         t          j
        |          | _        | j                                         d S r   )r0   r8   r-   r:   r;   r&   rn   r)   ra   r   ConnectionClosedErrorr*   rb   )rM   whoms     r   rm   zDisplay.close_internalG  s    !! 	 	&&(((!7==&&(((((r   c                    |s|| j         s|s|r| j        r|r*| j        }| j        sd| _        |                                 n+|)| j        }| j        sd| _        |                                 | j                                         |s|rdS |                                 |                                 dS | j        s
d}d| _        nd}d}d}	 |s| j         s| j	                                         | j
        D ]5\  }	}
| j        |	j        z   | _        |
r| j                            |	           6| j
        dd= | j	                                         | j        r
d| _         d}n	d| _         d}| j                                         |r|| j        t!          | j                  z   }	 |r	| j        g}ng }|s|rd}nd}t%          j        | j        g|g |          \  }}}nH# t&          $ r;}|j        t(          j        k    r|| j                                         Y d}~Od}~ww xY w|r{	 | j                            | j                  }n7# t&          $ r*}|                     d|d         z             | j        d}~ww xY w| j        |d         | _        | j        |z   | _        d}|r|r	 | j                            d          }n6# t&          $ r)}|                     d|j        z             | j        d}~ww xY w|s|                     d           | j        | j        |z   | _        |                     |          }n;| j                                         d| _         | j                                         dS |r|| j        k    rn-|r| j        rn#||rn|rn| j                                         | j                                         |rd| _         |rd| _        | j        r d| _        | j                                         | j        r d| _        | j                                         | j                                         dS )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 recieved, event should be true.

        To wait for a response to a certain request (either an error
        or a response), request should be set the 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: %si   server)r2   r3   r5   r4   ra   r7   r6   r1   rb   r.   r0   r:   _binaryr8   r   r<   rK   r&   selectOSErrorerrnoEINTRsendrm   r*   rf   strerrorr;   parse_responser-   )rM   rj   r   r   rf   	wait_lock	recievingflush_bytessendingreqwaitwritesettimeoutrswsesr   rv   gotreq
bytes_recvs                       r   rc   zDisplay.send_and_recvX  sy   N  4	w*0@* + +$($4 +  
( 0	) ()*D&%%'''$ 2	+ (+,D(%%''' '')))
     F  	I DIN	*   d.  
 '//111!%!3 7 7IC%)^ck%ADN 7*11#666&qqq)'//111 >  '(D$GG'(D$G '')))
  I,"2S5H5HH   " $}HH!H
  #5 #GG"G#]DK=(BPP
B    9++I
 #++---  @,((88AA , , ,''s1v(=>>>++, "&!3'+';a'?$ F   0%)[%5%5d%;%;

" 0 0 0++L3<,GHHH"//0 & 0++H555"//%)^j%@DN!0099FF '//111'(D$'//111 F  (<<<  )  "v"  
 '')))]N	*j 	##%%% 	! D 	! D 	+!"D ((*** 	-#$D "**,,,##%%%%%sH   %7G 
H"'0HH"(I 
I<%I77I<)K 
K7$K22K7c                    |dk    r|                                  S d}	 | j        r6t          | j                  | j        k     r|S |                     |          p|}t          | j                  dk     r|S t          | j        d                   }|dk    r|                     |          p|}n^|dk    rCt          t          j	        d| j        dd                   d                   }d|dz  z   | _        n| 
                    |           )a%  Internal method.

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

        If REQUEST is -1, we're parsing the server connection setup
        response.
        r   r       z=L      )parse_connection_setupr9   rK   r;   parse_request_responser   parse_error_responseintrA   rB   parse_event_response)rM   r   r   rtyperlens        r   r   zDisplay.parse_responsem  s'    b==..000 	1" Lt~&&)<<<!M!88AAKVF
 4>""R''  q 122E zz227;;Ev ! 6=t~ac/BCCAFGG&(4!8m## ))%000=	1r   c                    t          | j        d                   }| j                            |t          j                  } || | j        d d                   }| j        dd          | _        |                     |j                  }|r|                    |          r~t          |t          j                  rY| j                                         | j        r d| _        | j                                         | j                                         ||j        k    S | j        rt          j        | j        |d            n|                     |           dS )Nr   r   r   )r   r;   r   r~   r   XErrorget_waiting_requestsequence_number
_set_error
isinstancer   ReplyRequestr1   ra   r6   r7   rb   r@   call_error_handlerdefault_error_handler)rM   r   r   estructer   s         r   r   zDisplay.parse_error_response  sL   4>!,-- $((u|<<GD$."-.., &&q'899  	3>>!$$ 	
 #r// .#++---' 5+,D(*22444#++---a/// ! .%d&8!TBBBB**1---1r   c                 J    t           j                            d|z             d S )NzX protocol error:
%s
)sysstderrwriter   s     r   r   zDisplay.default_error_handler  s$    
2S899999r   c                    |                                  }t          j        d| j        dd                   d         }||j        k    rt          d|j        d|d          |                    | j        d | j                            | j        | j        d          | _        d| _        | j        	                                 | j
        r d| _
        | j                                         | j                                         |j        |k    S )Nz=H   r   r   zExpected reply for request z
, but got z.  Can't happen!)get_waiting_replyrequestrA   rB   r;   r   RuntimeError_parse_responser9   r1   ra   r6   r7   rb   r   )rM   r   r   snos       r   r   zDisplay.parse_request_response  s   ++-- mD$.1"566q9#+,"%+++sss 4 5 5 5 	DN+?D,?+?@AAA (;(<(<=
 	##%%% 	-#$D "**,,,##%%% "g--r   c                 <   | j                             |dz  t          j                  } || | j        d d                   }| j        dd          | _        |                     |j        dz
  dz             | j                                         | j	        
                    |           | j                                         | j                                         | j        r d| _        | j                                         | j                                         d S )N   r   )rN   
binarydatar   r   r   )r   r~   r   AnyEventr;   r   r   r,   ra   r-   r   rb   r1   r4   r5   )rM   etyper   r   s       r   r   zDisplay.parse_event_response  s    $((u~FFGd1DEEE, 	  !"3a"75!@AAA
 	#++---"""#++--- 	##%%% 	+!"D ((***##%%%%%r   c                    | j         sd S | j         d         j        | j        k    r| j        dz   }|| j        k     r|dz   }n| j        }|| j        k    r|dz
  }|| j         d         j        k     rd S d }t          | j                   }d}d}t	          dt          | j                             D ]L}| j         |         j        |z   }||k     rd}||z   }|}||k    r| j         |         }|dz   } n||k     rd }|} nM| j         d |= |S )Nr   r   r   )r8   r   r/   rK   range)	rM   r   last_serialr   reqposadjlastrv   rnos	            r   r   zDisplay.get_waiting_request  s_   ! 	4 a (4+>>>-5KT(((Ek -KT(((Ek #A&...4 T'((q#d01122 	 	A$Q'/#5C TzzCiDczz(+Qs  ww'
r   c                     t          dt          | j                            D ];}t          | j        |         d          r| j        |         }| j        d |dz   = |c S <t	          d          )Nr   _replyr   z0Request reply to unknown request.  Can't happen!)r   rK   r8   hasattrr   )rM   rv   r   s      r   r   z Display.get_waiting_replyrequestF  s    q#d01122 	S 	SAt)!,h77 (+&vAv.


 QRRRr   c                 v   | j         d         }	 |j        r|j        d         dz  }t          | j                  |k     rdS |j        d         dk    r#| j        d|j        d                  |j        d<   nG|j                            | j        d|         | d	          \  }}|j                            |           | j         d= | j        |d         | _        dS t          | j                  d
k     rdS |j                            | j        dd
         | d	          \  |_        }| j        d
d         | _        ,)zCInternal function used to parse connection setup response.
        r   r   additional_lengthr   rF   Nreason_lengthrH   )rawdictr   )r8   _datarK   r;   _success_replyparse_binaryupdater   )rM   rV   alenr   ds        r   r   zDisplay.parse_connection_setupQ  s^   
 q!#	4 w 4w23a7 t~&&--1 78$))(,7P8P7P(QAGH%% +889N9= 9 L LDAqGNN1%%%&q)!%!6q t~&&**1X224>"1"3E371 3 F F
!%!3G#	4r   r   )NNNN)(__name__
__module____qualname__r}   r   r   xerror_classcopyr   r   event_classr   rW   rZ   r\   r_   rd   rh   rj   rn   rq   rw   r{   r   r   r   r   r   r^   r   rm   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   .   s        &++--M%**,,MQQ QQ QQ QQp! ! !# # #$ $ $1 1 1f  & & &
& & &% % %, , ,0, , ,0> > > >6 6 65 5 5' ' '' ' '  * * *") ) )"R& R& R& R&j.1 .1 .1b* * *Z: : :. . .>& & &D4 4 4l	S 	S 	S*4 *4 *4 *4 *4r   r   depthbits_per_pixelscanline_pad   	visual_idvisual_classbits_per_rgb_valuecolormap_entriesred_mask
green_mask	blue_maskr   visualsr   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dS )rE   r   r   )r   r   r   r   r    r   r!   rF   r   r   release_numberru   rs   motion_buffer_sizevendormax_request_lengthrL   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                            | df           |j                                         |                    d           d S )Nr   r   )r   )	_request	to_binaryr   r   r0   r   r1   ra   rc   )rM   rN   argskeyss       r   rW   zConnectionSetupRequest.__init__  su    .t}.===

 	$$dAY///
 	&&(((+++++r   N)r   r   r   r   StructSetPadCard16LengthOfString8r!  Card8r   Card32ListPixmapFormatScreenr   rW   r   r   r   rE   rE     s]       ry&"&q,?? "&))#")$455#")$455%"+&6::%"+&6:: "&))$"*%566$"*%5669 9H RY(++!/22"#344"#344"#677	: :F RY		*: ; ; )	*< = = )	*< = = )	*> ? ? +Ha 8 8 )	*> ? ? +GQ 7 7 +,<a @ @ (); < < ()B C C ()F G G ()E F F ( 7 7 ( 7 7 &q		 *
8 4 4 '(8, G G ' 8 8#" "N*, , , , ,r   rE   )r   r   r&   rA   r   Xlibr   Xlib.supportr   r    r   r   versionr   r   r%  r+  r'  r.  r,  r(  
VisualTyper)  r-  DepthWindowColormapr/  GetAttrDatarE   r   r   r   <module>r9     sp  ,     



       & & & & & & & &         ;q>S     M4 M4 M4 M4 M4 M4 M4 M4f ry("(7++""(#344""(>22 "&))  RY;//!.11!"677"#566":.."<00";// 
 		828G$$26!992;y!,,26!99279j11		 	 
IBIf%%BK 233BIm,,BIm,,BI233BI/00BI011BIn--BIo..BI233BI233BIm,,BH_--BH]++BH\**BK 0!44BG,e44!
 
(3, 3, 3, 3, 3,R^ 3, 3, 3, 3, 3,r   