3
	;^'                 @   s  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 d dl mZ d dl mZ d dl m	Z	 d dl m
Z
 d dl mZ d dl mZ d d	l mZ d d
l mZ d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZddlmZ ddlmZ ddlmZ yd dl mZ ejZejZW n ek
rR   dZY nX ee
Z ej!Z!e!j"Z"e!j#Z#e!j$Z$e!j%Z%e!j&Z&eedej!fZ'eeeeee	dej(fZ)ee je jdej!fZ*e"dBZ+e"dCZ,e"dDZ-d Z.dZ/d Z0dZ1dZ2d Z3dZ4dZ5d Z6d!Z7G d"d# d#e j8Z9edkr*dZ:n
dEd%d&Z:G d'd( d(ej;Z<G d)d* d*e<Z=G d+d, d,e<Z>G d-d. d.e?Z@G d/d0 d0e?ZAeB ZCd1d2 ZDd3d4 ZEd5d6 ZFd7d8 ZGerd9d: ZHeH ZId;d< ZJeEeFeGd=ZKd>d? ZLd@dA ZMdS )F    N)byref)c_char)c_char_p)c_int)	c_ssize_t)c_ulong)c_void_p)POINTER)	py_object)windll)WinError)WINFUNCTYPE)DWORD)HANDLE)LPCWSTR)LPWSTR   )_NonClosingTextIOWrapper)PY2)	text_type)	pythonapiGetCommandLineWCommandLineToArgvW	LocalFree
            i        i  c               @   sj   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d	efd
efdefgZ	e
rfe	jdded f dS )	Py_bufferbufobjlenitemsizereadonlyndimformatshapestrides
suboffsetsZinternalr   Z
smalltabler   N)__name__
__module____qualname__r   r
   r   r   r   	c_ssize_p_fields_r   insert r2   r2   N/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/click/_winconsole.pyr    U   s   
r    Fc             C   sP   t  }|rtnt}tt| t|| zt|j }|j|j	S t
t| X d S )N)r    PyBUF_WRITABLEPyBUF_SIMPLEPyObject_GetBufferr
   r   r   r#   from_addressr!   PyBuffer_Release)r"   writabler!   flagsZbuffer_typer2   r2   r3   
get_buffern   s    
r;   c               @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleRawIOBasec             C   s
   || _ d S )N)handle)selfr=   r2   r2   r3   __init__z   s    z!_WindowsConsoleRawIOBase.__init__c             C   s   t jj|  dS )NT)io	RawIOBaseisatty)r>   r2   r2   r3   rB   }   s    z_WindowsConsoleRawIOBase.isattyN)r,   r-   r.   r?   rB   r2   r2   r2   r3   r<   y   s   r<   c               @   s   e Zd Zdd Zdd ZdS )_WindowsConsoleReaderc             C   s   dS )NTr2   )r>   r2   r2   r3   readable   s    z_WindowsConsoleReader.readablec             C   s   t |}|sdS |d r tdt|dd}|d }t }tt| j||t|d }t t	krht
jd |s|tdjt |d tkrdS d|j S )Nr   r   z>cannot read odd number of bytes from UTF-16-LE encoded consoleT)r9   g?zWindows error: {})r#   
ValueErrorr;   r   ReadConsoleWr   r=   r   GetLastErrorERROR_OPERATION_ABORTEDtimesleepOSErrorr'   EOFvalue)r>   bZbytes_to_be_readbufferZcode_units_to_be_readZcode_units_readrvr2   r2   r3   readinto   s,    

z_WindowsConsoleReader.readintoN)r,   r-   r.   rD   rQ   r2   r2   r2   r3   rC      s   rC   c               @   s(   e Zd Zdd Zedd Zdd ZdS )_WindowsConsoleWriterc             C   s   dS )NTr2   )r>   r2   r2   r3   r9      s    z_WindowsConsoleWriter.writablec             C   s"   | t krdS | tkrdS dj| S )NERROR_SUCCESSERROR_NOT_ENOUGH_MEMORYzWindows error {})rS   rT   r'   )errnor2   r2   r3   _get_error_message   s
    z(_WindowsConsoleWriter._get_error_messagec             C   sl   t |}t|}t|td }t }tt| j||t|d  d|j	 }|dkrh|dkrht
| jt |S )Nr   r   )r#   r;   minMAX_BYTES_WRITTENr   WriteConsoleWr   r=   r   rM   rK   rV   rG   )r>   rN   Zbytes_to_be_writtenr!   Zcode_units_to_be_writtenZcode_units_writtenZbytes_writtenr2   r2   r3   write   s    
z_WindowsConsoleWriter.writeN)r,   r-   r.   r9   staticmethodrV   rZ   r2   r2   r2   r3   rR      s   rR   c               @   sH   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )ConsoleStreamc             C   s   || _ || _d S )N)_text_streamrO   )r>   text_streamZbyte_streamr2   r2   r3   r?      s    zConsoleStream.__init__c             C   s   | j jS )N)rO   name)r>   r2   r2   r3   r_      s    zConsoleStream.namec             C   sD   t |tr| jj|S y| j  W n tk
r6   Y nX | jj|S )N)
isinstancer   r]   rZ   flush	ExceptionrO   )r>   xr2   r2   r3   rZ      s    
zConsoleStream.writec             C   s   x|D ]}| j | qW d S )N)rZ   )r>   linesliner2   r2   r3   
writelines   s    
zConsoleStream.writelinesc             C   s   t | j|S )N)getattrr]   )r>   r_   r2   r2   r3   __getattr__   s    zConsoleStream.__getattr__c             C   s
   | j j S )N)rO   rB   )r>   r2   r2   r3   rB      s    zConsoleStream.isattyc             C   s   dj | j| jS )Nz'<ConsoleStream name={!r} encoding={!r}>)r'   r_   encoding)r>   r2   r2   r3   __repr__   s    zConsoleStream.__repr__N)r,   r-   r.   r?   propertyr_   rZ   rf   rh   rB   rj   r2   r2   r2   r3   r\      s   	r\   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	WindowsChunkedWriterz
    Wraps a stream (such as stdout), acting as a transparent proxy for all
    attribute access apart from method 'write()' which we wrap to write in
    limited chunks due to a Windows limitation on binary console streams.
    c             C   s
   || _ d S )N)_WindowsChunkedWriter__wrapped)r>   wrappedr2   r2   r3   r?      s    zWindowsChunkedWriter.__init__c             C   s   t | j|S )N)rg   rm   )r>   r_   r2   r2   r3   rh      s    z WindowsChunkedWriter.__getattr__c             C   sL   t |}d}x:||k rFt|| t}| jj||||   ||7 }qW d S )Nr   )r#   rW   rX   rm   rZ   )r>   textZtotal_to_writeZwrittenZto_writer2   r2   r3   rZ      s    
zWindowsChunkedWriter.writeN)r,   r-   r.   __doc__r?   rh   rZ   r2   r2   r2   r3   rl      s   rl   c             C   sD   t r@tj d d dkr@| tkr@tt| ttt|  tj|  d S )Nr      r   )rq   r   )r   sysgetwindowsversion_wrapped_std_streamssetattrrl   rg   add)r_   r2   r2   r3   _wrap_std_stream  s
    rw   c             C   s$   t tjttdddd}t|| S )Nz	utf-16-lestrictT)line_buffering)r   r@   BufferedReaderrC   STDIN_HANDLEr\   )buffer_streamr^   r2   r2   r3   _get_text_stdin  s    r}   c             C   s$   t tjttdddd}t|| S )Nz	utf-16-lerx   T)ry   )r   r@   BufferedWriterrR   STDOUT_HANDLEr\   )r|   r^   r2   r2   r3   _get_text_stdout  s    r   c             C   s$   t tjttdddd}t|| S )Nz	utf-16-lerx   T)ry   )r   r@   r~   rR   STDERR_HANDLEr\   )r|   r^   r2   r2   r3   _get_text_stderr"  s    r   c               C   s   t jdjtjdd  S )N r   )zlibcrc32joinrr   argvr2   r2   r2   r3   _hash_py_argv.  s    r   c                 s   t d} tt t|   s"t z fddtd| jD }W d t   X tt	ds|dd  }xFt
|dkr|d }|jd s|dkrP |dd  }|jd	rfP qfW |dd  S )
Nr   c                s   g | ]} | qS r2   r2   ).0i)argv_unicoder2   r3   
<listcomp>9  s    z%_get_windows_argv.<locals>.<listcomp>frozenr   --c-m)r   r   )r   r   r   r   r   rangerM   r   hasattrrr   r#   
startswith)Zargcr   argr2   )r   r3   _get_windows_argv3  s$    

r   )r   r   r   c             C   sN   t | dsdS y| j }W n tk
r.   dS X tj|}tt|tt S )NfilenoF)	r   r   rK   msvcrtZget_osfhandleboolGetConsoleModer   r   )fr   r=   r2   r2   r3   _is_consoleR  s    

r   c             C   sr   t d k	rn|dkrn|dkrnt| rntj| j }|d k	rntsTt| dd } | d krfd S ntj| j t	j
 || S d S )N	utf-16-lerx   rO   )r   N)rx   N)r;   r   _stream_factoriesgetr   r   rg   r   ZsetmodeosZO_BINARY)r   ri   errorsfuncr2   r2   r3   _get_windows_console_stream_  s    r   iii)F)Nctypesr@   r   rr   rI   r   r   r   r   r   r   r   r   r	   r
   r   r   r   Zctypes.wintypesr   r   r   r   r   _compatr   r   r   r   r6   r8   ImportErrorr/   kernel32ZGetStdHandlerF   rY   r   rG   r   shell32r   r   r{   r   r   r5   r4   rS   rT   rH   ZSTDIN_FILENOZSTDOUT_FILENOZSTDERR_FILENOrL   rX   	Structurer    r;   rA   r<   rC   rR   objectr\   rl   setrt   rw   r}   r   r   r   Z_initial_argv_hashr   r   r   r   r2   r2   r2   r3   <module>
   s   



	# "


