a
    ñ»jìw  ã                   @   st  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	m
Z
 ddlmZmZ ddlmZ ddlmZmZ z(ddlZddlT ddlT dd	lmZ W n ey¶   ed
ƒ‚Y n0 dd„ Z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Z$dZ%dZ dZ&dZ'dZ(e)dƒZ*dZ+G dd„ de,ƒZ-G dd„ de,ƒZ.G dd„ de,ƒZ/G dd„ de0ƒZ1G d d!„ d!e,ƒZ2G d"d#„ d#e,ƒZ3G d$d%„ d%e,ƒZ4G d&d'„ d'e,ƒZ5G d(d)„ d)e,ƒZ6G d*d+„ d+e,ƒZ7G d,d-„ d-e0ƒZ8G d.d/„ d/e,ƒZ9G d0d1„ d1e,ƒZ:g d2¢Z;e&d e'd e(d d3d iZ<dJd5d6„Z=G d7d8„ d8e>ƒZ?e;D ]Z@eAe?e@eBeCjDe@ƒƒ �qejCjDjEZFeGeF_HeGeGeIgeF_JeKZLeKZMeKZNeOePƒZQeRe?jS_Hg e?jS_JeTe?jU_HePePeKePeLge?jU_JeRe?jV_HeTeWePeXeQge?jV_JeRe?jY_HeTeZePeXeQge?jY_JeRe?j[_Hg e?j[_JeRe?j\_HeTeKge?j\_JeRe?j]_HeTeQge?j]_JeRe?j^_HeTeKge?j^_JePe?j__He`ePge?j__JeRe?ja_HeTeQge?ja_JeNe?jb_HeceGge?jb_JeTe?jd_HePge?jd_JeRe?je_HeTeKePeQge?je_JeRe?jf_HeTeKePeQge?jf_JeRe?jg_HeTeKeKeXeKge?jg_JeRe?jh_HeTge?jh_JeRe?ji_HeTeKge?ji_JeRe?jj_HeTeXge?jj_JeRe?jk_HeTePge?jk_JeRe?jl_HeTeXge?jl_JeRe?jm_HeTeWge?jm_JeRe?jn_He`ge?jn_JeRe?jo_HeTeReKge?jo_JeRe?jp_HeTeKePeQeLge?jp_JeRe?jq_HeTe`ePeXeQge?jq_JeRe?jr_HeTeMePeQeKge?jr_JeCjsjtZuG d9d:„ d:eƒZ dKd;d<„ZveweGeKeKeGƒZxdaydazd=d>„ Z{d?d@„ Z|e}dAk�rpddlZddl~Z~dBdC„ Ze?dƒZ€e€e_�e€e_‚e€ ƒ¡  e„edDƒedEƒƒ e€ …dFdG¡ e€ †dH¡ e„dIƒ e‡dGƒD ]Zˆe€ ‰¡ ZŠe„eŠƒ �qV[€dS )Lé   )ÚEventé    N)Ú	AnsiStateÚ
AnsiWriter)ÚKeyPressÚmake_key_press)Úlog)Ú
ensure_strÚensure_unicode)Ú*)Úcall_functionz You need ctypes to run this codec                 C   s   d S ©N© )Ústringr   r   úAE:\soccer\ml_env\Lib\site-packages\pyreadline3/console/console.pyÚnolog*   s    r   iöÿÿÿiõÿÿÿé   é   é   é   é   é   é   l        i   @c                   @   s   e Zd ZdefdefgZdS )ÚCOORDÚXÚYN©Ú__name__Ú
__module__Ú__qualname__Úc_shortÚ_fields_r   r   r   r   r   I   s   r   c                   @   s(   e Zd ZdefdefdefdefgZdS )Ú
SMALL_RECTÚLeftÚTopÚRightÚBottomNr   r   r   r   r   r"   M   s
   ür"   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )ÚCONSOLE_SCREEN_BUFFER_INFOÚdwSizeÚdwCursorPositionÚwAttributesÚsrWindowÚdwMaximumWindowSizeN)r   r   r   r   r    r"   r!   r   r   r   r   r'   V   s   ûr'   c                   @   s   e Zd ZdefdefgZdS )Ú
CHAR_UNIONÚUnicodeCharÚ	AsciiCharN)r   r   r   Úc_wcharÚc_charr!   r   r   r   r   r-   `   s   r-   c                   @   s   e Zd ZdefdefgZdS )Ú	CHAR_INFOÚCharÚ
AttributesN)r   r   r   r-   r    r!   r   r   r   r   r2   d   s   r2   c                	   @   s@   e Zd ZdefdefdefdefdefdefdefdefgZd	S )
ÚKEY_EVENT_RECORDÚbKeyDownZpad2Zpad1ZwRepeatCountÚwVirtualKeyCodeZwVirtualScanCodeÚuCharÚdwControlKeyStateN)r   r   r   Úc_byter    r-   Úc_intr!   r   r   r   r   r5   h   s   ør5   c                   @   s(   e Zd ZdefdefdefdefgZdS )ÚMOUSE_EVENT_RECORDÚdwMousePositionÚdwButtonStater9   ÚdwEventFlagsN)r   r   r   r   r;   r!   r   r   r   r   r<   u   s
   ür<   c                   @   s   e Zd ZdefgZdS )ÚWINDOW_BUFFER_SIZE_RECORDr(   N)r   r   r   r   r!   r   r   r   r   r@   ~   s   r@   c                   @   s   e Zd ZdefgZdS )ÚMENU_EVENT_RECORDÚdwCommandIdN)r   r   r   Úc_uintr!   r   r   r   r   rA   ‚   s   rA   c                   @   s   e Zd ZdefgZdS )ÚFOCUS_EVENT_RECORDÚ	bSetFocusN)r   r   r   r:   r!   r   r   r   r   rD   †   s   rD   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )ÚINPUT_UNIONÚKeyEventÚ
MouseEventÚWindowBufferSizeEventÚ	MenuEventÚ
FocusEventN)	r   r   r   r5   r<   r@   rA   rD   r!   r   r   r   r   rF   Š   s   ûrF   c                   @   s   e Zd ZdefdefgZdS )ÚINPUT_RECORDÚ	EventTyper   N)r   r   r   r    rF   r!   r   r   r   r   rL   ”   s   rL   c                   @   s   e Zd ZdefdefgZdS )ÚCONSOLE_CURSOR_INFOr(   ÚbVisibleN)r   r   r   r;   r:   r!   r   r   r   r   rN   ˜   s   rN   )ÚAllocConsoleÚCreateConsoleScreenBufferÚFillConsoleOutputAttributeÚFillConsoleOutputCharacterWÚFreeConsoleÚGetConsoleCursorInfoÚGetConsoleModeÚGetConsoleScreenBufferInfoÚGetConsoleTitleWÚGetNumberOfConsoleInputEventsÚGetProcAddressÚGetStdHandleÚPeekConsoleInputWÚReadConsoleInputWÚScrollConsoleScreenBufferWÚSetConsoleActiveScreenBufferÚSetConsoleCursorInfoÚSetConsoleCursorPositionÚSetConsoleModeÚSetConsoleScreenBufferSizeÚSetConsoleTextAttributeÚSetConsoleTitleWÚSetConsoleWindowInfoÚWriteConsoleWÚWriteConsoleOutputCharacterWÚ	WriteFileé[   éè  c                    s    ‡ ‡fdd„t dtˆƒˆ ƒD ƒS )Nc                    s   g | ]}ˆ||ˆ  … ‘qS r   r   )Ú.0Ústart©ÚsizeÚtextr   r   Ú
<listcomp>Æ   ó    zsplit_block.<locals>.<listcomp>r   )ÚrangeÚlen)rp   ro   r   rn   r   Úsplit_blockÅ   s    ru   c                   @   s^  e Zd ZdZdNdd„Zdd„ Zdd„ Zd	d
„ ZdOdd„Zdd„ Z	e
 d¡Ze
 d¡ZddddddddddddddddddœZe
 d ¡ZdPd!d"„ZdQd#d$„ZdRd%d&„Zd'ejv r¼dSd(d$„ZeZd)d*„ Zd+d,„ Zd-d.„ ZdTd0d1„ZdUd2d3„Zd4d5„ ZdVd6d7„ZdWd8d9„Zd:d;„ Zd<d=„ Zd>d?„ Zd@dA„ Z dBdC„ Z!dXdDdE„Z"dYdFdG„Z#dZdHdI„Z$dJdK„ Z%dLdM„ Z&dS )[ÚConsolezConsole driver for Windows.r   c                 C   sL  |r*|   ttB dddd¡| _|  | j¡ n|  t¡| _|  t¡| _t	dƒ| _
|  | jt| j
ƒ¡ |  | jd¡ tƒ }|  | jt|ƒ¡ |j| _|j| _tƒ | _|j| j_t| jƒ| _| jd@ }| jD ]$}| j| durÄ| j|  |O  < qÄtd| j ƒ d| _d| _tj| _t  t!| jj"ƒ¡j#| _$t%| jj&_'t%g| jj&_(t)t*d| jj&ƒ dS )zŒInitialize the Console object.

        newbuffer=1 will allocate a new buffer so the old content will be restored
        on exit.
        r   Nr   é   éð   zinitial attr=%xÚPyMem_Malloc)+rQ   ÚGENERIC_READÚGENERIC_WRITEÚhoutr_   r[   ÚSTD_OUTPUT_HANDLEÚSTD_INPUT_HANDLEÚhinÚDWORDÚinmoderV   Úbyrefrb   r'   rW   r*   ÚattrÚsaveattrr   ZdefaultstateÚwinattrr   Ú
ansiwriterÚescape_to_colorr   Z	softspaceÚserialÚctypesÚ	pythonapiZ	pythondllÚc_void_pÚfrom_addressÚ	addressofZPyOS_InputHookÚvalueÚinputHookPtrÚc_size_tZPyMem_RawMallocÚrestypeÚargtypesÚsetattrrv   )ÚselfZ	newbufferÚinfoÚ
backgroundÚescaper   r   r   Ú__init__Ì   s>    ÿ




ÿ
zConsole.__init__c                 C   s,   |   | j| j¡ |  | j| j¡ |  ¡  dS )z"Cleanup the console when finished.N)rd   r|   r„   rb   r   r�   rT   ©r”   r   r   r   Ú__del__ü   s    zConsole.__del__c                 C   s2   t ƒ }|  | jt|ƒ¡ |j}|j}|j}||fS r   )r'   rW   r|   r‚   r+   r$   r&   )r”   r•   ÚrectÚtopÚbotr   r   r   Ú_get_top_bot  s    zConsole._get_top_botc                 C   sX   |dk s|dk rHt ƒ }|  | jt|ƒ¡ |dk rH|jj| }|jj| }t|d> |B ƒS )zOReturn a long with x and y packed inside,
        also handle negative x and y.r   r   )r'   rW   r|   r‚   r+   r%   r&   r;   ©r”   ÚxÚyr•   r   r   r   Úfixcoord  s    zConsole.fixcoordNc                 C   sJ   |du r0t ƒ }|  | jt|ƒ¡ |jj|jjfS |  | j|  ||¡¡S dS )z Move or query the window cursor.N)	r'   rW   r|   r‚   r)   r   r   ra   r¢   rŸ   r   r   r   Úpos  s
    zConsole.posc                 C   s   |   dd¡ dS )zMove to home.r   N)r£   r™   r   r   r   Úhome"  s    zConsole.homez(?\[[0-9;]+m?)z?\[([0-9;]+)m?r   r   é   r   é   r   é   é
   é   é	   é   é   rw   )z0;30z0;31z0;32z0;33z0;34z0;35z0;36z0;37z1;30z1;31z1;32z1;33z1;34z1;35z1;36z1;37Ú0z	([
	])c                 C   sr  t |ƒ}|  ¡ \}}|  ¡ \}}d}| j |¡}|D �]6}	|  |	|¡}
t|	ƒdk�r(|	d dkrnd}|d7 }nˆ|	d dkr€d}nv|	d dkrºdt|d ƒd  }||krö||8 }|d7 }n<|	d dkrÈn.|	d dkrî|d8 }|dk rö|d8 }n|d7 }||k�rd}|d7 }||k�rl|d7 }|d }q4||
7 }t|| ƒ}|| }||7 }||kr4||| d 7 }|d }q4|S )	ah  write text at current cursor position while watching for scrolling.

        If the window scrolls because you are at the bottom of the screen
        buffer, all positions that you are storing will be shifted by the
        scroll amount. For example, I remember the cursor position of the
        prompt so that I can redraw the line but if the window scrolls,
        the remembered position is off.

        This variant of write tries to keep track of the cursor position
        so that it will know when the screen buffer is scrolled. It
        returns the number of lines that the buffer scrolled.

        r   r   Ú
úú	r   úú)r
   r£   ro   Úmotion_char_reÚsplitÚwrite_colorrt   Úint)r”   rp   rƒ   r    r¡   ÚwÚhÚscrollÚchunksÚchunkÚnÚlr   r   r   Úwrite_scrollingB  sN    







zConsole.write_scrollingc              	   C   s†   t |ƒ}| j ||¡\}}tdƒ}|D ]Z\}}td| ƒ td| ƒ |  | j|j¡ t|ƒD ] }|  	| j|t
|ƒt|ƒd ¡ q^q&|S )Nr   zconsole.attr:%szconsole.chunk:%s)r
   r†   rµ   r€   r   rd   r|   r…   ru   rg   rt   r‚   )r”   rp   rƒ   r¼   ÚresÚjunkr»   Úshort_chunkr   r   r   rµ   {  s    ÿzConsole.write_colorc                 C   sr   t |ƒ}td||f ƒ |du r&| j}tdƒ}|  | j|¡ ttƒD ]$}|  | jt |ƒt	|ƒt
|ƒd¡ qDt	|ƒS )z&write text at current cursor position.zwrite("%s", %s)Nr   )r
   r   rƒ   r€   rd   r|   ru   r»   rg   rt   r‚   )r”   rp   rƒ   rÀ   rÁ   r   r   r   Úwrite_plain‰  s    ûzConsole.write_plainZEMACSc                 C   s4   t |ƒ}tdƒ}|  | j|t|ƒt|ƒd ¡ t|ƒS )Nr   )r	   r€   ri   r|   rt   r‚   )r”   rp   rƒ   rÀ   r   r   r   rµ   Ÿ  s    c                 C   s   t |ƒ}td| ƒ |  |¡S )Nzwrite("%s"))r
   r   rµ   )r”   rp   r   r   r   Úwrite¨  s    zConsole.writec                 C   s   dS )NTr   r™   r   r   r   Úisatty¯  s    zConsole.isattyc                 C   s   d S r   r   r™   r   r   r   Úflush²  s    zConsole.flushú c              
   C   sØ   |du r| j }t|ƒdkrt‚tƒ }|  | jt|ƒ¡ |jjdksN|jj	dkrd|  
| j|  dd¡¡ |jj}tdƒ}t|jj	ƒD ]L}|  | j|||  d|¡t|ƒ¡ |  | jt|d ƒ||  d|¡t|ƒ¡ q€|| _ dS )zFill the entire screen.Nr   r   )rƒ   rt   Ú
ValueErrorr'   rW   r|   r‚   r)   r   r   ra   r¢   r(   r€   rs   rR   rS   Úord)r”   rƒ   Úfillr•   r·   r¼   r¡   r   r   r   Úpageµ  s$    ÿ ÿzConsole.pagec                 C   sZ   |du r| j }|  ||¡}tdƒ}|  | j|t|ƒ|t|ƒ¡ |  | j|||t|ƒ¡ dS )z!Write text at the given position.Nr   )rƒ   r¢   r€   rh   r|   rt   r‚   rR   )r”   r    r¡   rp   rƒ   r£   r¼   r   r   r   rp   Ì  s    zConsole.textc                 C   sp   |   ¡ \}}|  ¡ }|  ¡ \}}|  |d |d ||d d f¡ |d |k rl|  d|d d ||d f¡ d S )Nr   r   )rž   r£   ro   Ú	rectangle)r”   rœ   r�   r£   r·   r¸   r   r   r   Úclear_to_end_of_windowÖ  s    "zConsole.clear_to_end_of_windowc              	   C   s‚   |\}}}}t dƒ}|du r"| j}t||ƒD ]P}	|  ||	¡}
|  | j||| |
t|ƒ¡ |  | jt|d ƒ|| |
t|ƒ¡ q,dS )zFill Rectangle.r   N)	r€   rƒ   rs   r¢   rR   r|   r‚   rS   rÈ   )r”   r›   rƒ   rÉ   Úx0Úy0Úx1Úy1r¼   r¡   r£   r   r   r   rË   Þ  s    ÿzConsole.rectanglec                 C   s€   |du r| j }|\}}}}	t|||d |	d ƒ}
|  || || ¡}tƒ }t|d ƒ|j_||_|  | j	t
|
ƒt
|
ƒ|t
|ƒ¡S )zScroll a rectangle.Nr   r   )rƒ   r"   r¢   r2   r	   r3   r/   r4   r^   r|   r‚   )r”   r›   ZdxZdyrƒ   rÉ   rÍ   rÎ   rÏ   rÐ   ÚsourceÚdestÚstyler   r   r   r¹   ë  s    ÿzConsole.scrollc           
      C   sÔ   t ƒ }|  | jt|ƒ¡ |j}td|j|jf ƒ |j| }|j| }|| }|jj	d }|dk rjd}|}||kr~|}|| }t
ƒ }||_||_|j|_|j|_td||f ƒ |  | jdt|ƒ¡}	td|	 ƒ dS )z3Scroll the window by the indicated number of lines.zsw: rtop=%d rbot=%dr   r   zsn: top=%d bot=%dTzr=%dN)r'   rW   r|   r‚   r+   r   r$   r&   r(   r   r"   r#   r%   rf   )
r”   Úlinesr•   r›   rœ   r�   r¸   ZmaxbotZnrectÚrr   r   r   Úscroll_windowú  s,    

zConsole.scroll_windowc                 C   s„   t  | j¡j}tƒ }tdƒ}tdƒ}|r2t|dƒ |  | jt	|ƒ¡ |r|  
| jt	|ƒdt	|ƒ¡}|r|jdkrt| |ƒ}|S qdS )zGet next event from queue.r   r   r   N)r‹   rŒ   r�   rŽ   rL   r€   r   rY   r   r‚   r]   Úevent)r”   ZinputHookFuncÚCeventÚcountZevent_countÚstatusÚer   r   r   Úget  s    

zConsole.getc                 C   s    |   ¡ }|jdkr^|jtvr^td| ƒ |jjdkr@|  d¡ qš|jjdkrX|  d¡ qš|S q |jdkr |jtdd	d
d	dƒkr td|j|j|jf ƒ |S q dS )z<Return next key press event from the queue, ignoring others.r   zconsole.getkeypress %sÚnextr§   ZprioriôÿÿÿÚ
KeyReleaseÚSFTzgetKeypress:%s,%s,%sN)	rÜ   ÚtypeÚkeycodeÚkey_modifiersr   ÚkeyinfoZkey_namerÖ   r   )r”   rÛ   r   r   r   Úgetkeypress%  s    
ÿzConsole.getkeypressc                 C   sz   t ƒ }tdƒ}|  | jt|ƒdt|ƒ¡}|r|jdkr|jdkr|jjj	rt
|jjjƒ}t|ƒdkrp|jjjj}|S qdS )zGet next character from queue.r   r   N)rL   r€   r]   r   r‚   rŽ   rM   r   rG   r6   Úkeysymr7   rt   r8   r/   )r”   rØ   rÙ   rÚ   Úsymr   r   r   Úgetchar7  s    ÿþýüzConsole.getcharc                 C   sB   t ƒ }tdƒ}|  | jt|ƒdt|ƒ¡}|r>|dkr>t| |ƒS dS )zCheck event queue.r   r   N)rL   r€   r\   r   r‚   r×   )r”   rØ   rÙ   rÚ   r   r   r   ÚpeekI  s
    zConsole.peekc                 C   s>   |r|   |¡ n*tdƒ}|  |d¡}|dkr:|jd|… S dS )zSet/get title.éÈ   r   N)re   Úcreate_unicode_bufferrX   rŽ   )r”   ÚtxtÚbufferr¼   r   r   r   ÚtitleQ  s    zConsole.titlec                 C   s˜   t ƒ }|  | jt|ƒ¡}|s dS |dur„|dur„|jj|jj d }|jj|jj d }t	||ƒ}t	||ƒ}|  
| j|  ||¡¡ n|jj|jjfS dS )zSet/get window size.Nr   )r'   rW   r|   r‚   r+   r%   r#   r&   r$   Úmaxrc   r¢   r(   r   r   )r”   ÚwidthÚheightr•   rÚ   ZwminZhminr   r   r   ro   [  s    

zConsole.sizec                 C   sJ   t ƒ }|  | jt|ƒ¡rF|dur&||_|dur4||_|  | jt|ƒ¡ dS )zSet cursor on or off.N)rN   rU   r|   r‚   rO   r(   r`   )r”   Úvisiblero   r•   r   r   r   Úcursorl  s    zConsole.cursorc                 C   s   |   d¡ d S )Nr±   )rÃ   r™   r   r   r   Úbellv  s    zConsole.bellc                 C   s   |  j d7  _ | j S )zGet next event serial number.r   )rˆ   r™   r   r   r   Únext_serialy  s    zConsole.next_serial)r   )NN)N)N)N)N)NrÆ   )N)NrÆ   )NrÆ   )N)NN)NN)'r   r   r   Ú__doc__r˜   rš   rž   r¢   r£   r¤   ÚreÚcompileZterminal_escapeZescape_partsr‡   r³   r¾   rµ   rÂ   ÚosÚenvironrÃ   rÄ   rÅ   rÊ   rp   rÌ   rË   r¹   rÖ   rÜ   rä   rç   rè   rí   ro   rò   ró   rô   r   r   r   r   rv   É   sh   
0
	

ï

9













rv   c                   @   s   e Zd ZdZdd„ ZdS )r×   z"Represent events from the console.c                 C   sn  d| _ | ¡ | _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _|jtkr¤|jjjrbd| _ nd| _ |jjjj| _|jjj| _|jjj| _t| j| j| jƒ| _
nÆ|jtkrô|jjjt@ rÄd| _ nd| _ |jjjj| _|jjjj| _|jjj| _nv|jtk�r$d	| _ |jjj j| _|jjj j| _nF|jt!k�rL|jj"j#�rDd
| _ nd| _ n|jt$k�rjd| _ |jj%j&| _dS )z5Initialize an event from the Windows input structure.z??r   Ú Nr   rÞ   ZMotionZButtonZ	ConfigureZFocusInZFocusOutZMenu)'rà   rô   rˆ   rï   rð   r    r¡   Úcharrá   rå   rã   rM   Ú	KEY_EVENTr   rG   r6   r8   r.   r7   r9   Ústater   ÚMOUSE_EVENTrH   r?   ÚMOUSE_MOVEDr=   r   r   r>   ÚWINDOW_BUFFER_SIZE_EVENTrI   r(   ÚFOCUS_EVENTrK   rE   Ú
MENU_EVENTrJ   rB   )r”   ÚconsoleÚinputr   r   r   r˜   ù  sJ    



zevent.__init__N)r   r   r   rõ   r˜   r   r   r   r   r×   ö  s   r×   c                 C   s   t | ƒ}|S )zªGet a console handle.

    If buffer is non-zero, a new console buffer is allocated and
    installed.  Otherwise, this returns a handle to the current
    console buffer)rv   )rì   Úcr   r   r   Ú
getconsole(  s    r  c                 C   s²   z&t t|ƒƒ}|r$t|tƒs$tdƒ‚W nZ ty:   Y dS  tyR   t dƒ}Y n0 ty€   tdt	j
d� t ¡  t dƒ}Y n0 t|ƒ}t |d ¡}tt|tƒ||d ƒ |S )z7Wrap a Python readline so it behaves like GNU readline.zreadline must return a string.r   rú   zReadline internal error)Úfiler®   r   )r	   Úreadline_hookÚ
isinstanceÚbytesÚ	TypeErrorÚKeyboardInterruptÚEOFErrorÚBaseExceptionÚprintÚsysÚstderrÚ	tracebackÚ	print_excrt   rv   ry   Ú_strncpyÚcastÚc_char_p)ÚstdinÚstdoutÚpromptr¿   r¼   Úpr   r   r   Úhook_wrapper_23K  s     r  c                 C   s@   | a t t tjd d¡¡¡}tt	ƒa
t tt
ƒ¡j}||_dS )zMSet up things for the interpreter to call
    our function like GNU readline.ZPyOS_ReadlineFunctionPointerÚasciiN)r  r‹   rŒ   rv   rZ   r  Ú	dllhandleÚencodeÚ
HOOKFUNC23r  Úreadline_refr�   rŽ   )ÚhookZPyOS_RFPZ
func_startr   r   r   Úinstall_readlined  s    ÿÿr"  Ú__main__c                 C   s   t tt| ƒƒd@ ƒS )Néÿ   )ÚchrÚ	VkKeyScanrÈ   )rû   r   r   r   r  |  s    r  ÚdÚDr¦   r¨   zhi therezsome printed output)rk   )r   )‹r×   r   rø   rö   r  r  Zpyreadline3.unicode_helperZunicode_helperZpyreadline3.console.ansir   r   Zpyreadline3.keysymsr   r   Zpyreadline3.loggerr   r	   r
   Zctypes.utilr‰   Zctypes.wintypesÚ_ctypesr   ÚImportErrorr   r~   r}   ZENABLE_WINDOW_INPUTZENABLE_MOUSE_INPUTZENABLE_PROCESSED_INPUTZWHITEZBLACKr  rü   rÿ   rþ   r   r  ZVK_SHIFTZ
VK_CONTROLZVK_MENUr¶   rz   r{   Ú	Structurer   r"   r'   ÚUnionr-   r2   r5   r<   r@   rA   rD   rF   rL   rN   Úfuncsrâ   ru   Úobjectrv   Úfuncr“   ÚgetattrÚwindllÚkernel32Z	lstrcpynAr  r  r‘   r�   r’   r‹   ÚLPVOIDÚLPCVOIDZFARPROCÚPOINTERr€   ÚLPDWORDÚBOOLrP   ÚHANDLErQ   rR   ÚWORDr;   rS   Úc_ushortrT   rU   rV   rW   rX   Ú	c_wchar_prY   rZ   ÚHMODULEr[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   Zuser32Z
VkKeyScanAr&  r  Ú	CFUNCTYPEr  r  r   r  r"  r   Útimer  r  r  r  rÊ   r  r£   rÃ   rs   Úirä   Úqr   r   r   r   Ú<module>   sh  		
	
ü
   :
ûûûþþ
û
þ
ýû2


