a
    $a*                  
   @   s  d Z ddlZddlZddlZddlmZ ej Zz4ddl	m
Z
mZmZmZmZmZmZmZmZmZ W n$ ey   G dd deZY n0 G dd de
ZG d	d
 d
e
ZG dd de
ZG dd de
ZzeZW n ey   eZY n0 dd ZdZ dZ!egej"j#_$eej"j#_%eeegej"j&_$eej"j&_%eegej"j'_$eej"j'_%eeeeeeegej"j(_$eej"j(_%eeeeeeegej"j)_$eej"j)_%eeegej"j*_$eej"j*_%eeegej"j+_$eej"j+_%G dd deZej,- sej.- r"ej,- re pe!Z/ej"#e/Z0e Z1dd Z2zddl3Z3ddl4Z4ddl5Z5W n eyR   Y n0 ej,- slej.- rej67dddvrej,- rej,8 pej.8 Z9dd Z:z
e:  W n& e;y Z< zW Y dZ<[<ndZ<[<0 0 e:Z2dS )z
Emulate a vt100 terminal in cmd.exe

By wrapping sys.stdout / sys.stderr with Ansiterm,
the vt100 escape characters will be interpreted and
the equivalent actions will be performed with Win32
console commands.

    N)Utils)
	Structurewindllc_shortc_ushortc_ulongc_intbyrefc_wcharPOINTERc_longc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )AnsiTermc                 C   s6   || _ z| j j| _W n ty&   Y n0 | j j| _d S N)streamerrorsAttributeErrorencoding)selfr    r   j/home/jack/SDK/ZBT-AX3000-OpenWrt-21.02/build_dir/hostpkg/samba-4.14.12/third_party/waf/waflib/ansiterm.py__init__   s    AnsiTerm.__init__c                 C   s:   z*t   | j| | j  W t   n
t   0 d S r   )wlockacquirer   writeflushrelease)r   txtr   r   r   r       s
    AnsiTerm.writec                 C   s
   | j  S r   r   filenor   r   r   r   r    (   s    AnsiTerm.filenoc                 C   s   | j   d S r   )r   r   r!   r   r   r   r   +   s    AnsiTerm.flushc                 C   s
   | j  S r   )r   isattyr!   r   r   r   r$   .   s    AnsiTerm.isattyN)__name__
__module____qualname__r   r   r    r   r$   r   r   r   r   r      s
   r   c                   @   s   e Zd ZdefdefgZdS )COORDXYNr&   r'   r(   r   _fields_r   r   r   r   r)   2   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_RECTZLeftZTopZRightZBottomNr,   r   r   r   r   r.   5   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SizeCursorPosition
AttributesZWindowZMaximumWindowSizeN)r&   r'   r(   r)   r   r.   r-   r   r   r   r   r/   8   s   r/   c                   @   s   e Zd ZdefdefgZdS )CONSOLE_CURSOR_INFOZdwSizebVisibleN)r&   r'   r(   r   r   r-   r   r   r   r   r3   ;   s   r3   c                 C   s   | rt | p|S r   )int)Znumberdefaultr   r   r   <lambda>C       r7   iic                   @   s  e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zd6ddZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zeeeeeeee
e
eeeeeee	d)Zed*Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5S )7r   z)
		emulate a vt100 terminal in cmd.exe
		c                 C   s   || _ z|j| _W n ty$   Y n0 |j| _g | _| dkrDtpFt}tj	
|| _t | _t | _tj	| jt| j t | _tj	| jt| j}|dk| _d S )N      )r   r   r   r   cursor_historyr    STD_ERROR_HANDLESTD_OUTPUT_HANDLEr   kernel32GetStdHandlehconsoler/   _sbinfor3   _csinfoZGetConsoleCursorInfor	   _orig_sbinfoGetConsoleScreenBufferInfo_isatty)r   shandlerr   r   r   r   [   s    r   c                 C   s   t j| jt| j | jS )z+
			Updates self._sbinfo and returns it
			)r   r>   rD   r@   r	   rA   r!   r   r   r   screen_buffer_infoq   s    zAnsiTerm.screen_buffer_infoc                 C   s   |rt |pd}|  }|dkr8td|jj}|jj}nB|dkrdt|jj|jj}|jj|jj }n|j}|jj|jj }t }tj	
| jtd||t| tj	| j|j||t| d S Nr   r:   r9    )r5   rI   r)   r1   r+   r0   r*   r   r   r>   FillConsoleOutputCharacterWr@   r
   r	   FillConsoleOutputAttributer2   )r   parammodesbinfoZ
line_startZline_lengthchars_writtenr   r   r   
clear_linex   s    
zAnsiTerm.clear_linec                 C   s   t |d}|  }|dkr6tdd}|jj|jj }nb|dkrjtdd}|jj|jj }tj	| j
| n.|j}|jj|jj |jj|jj|jj   }t }tj| j
td||t| tj| j
|j||t| d S rJ   )to_intrI   r)   r1   r*   r+   r0   r   r>   SetConsoleCursorPositionr@   r   rL   r
   r	   rM   r2   )r   rN   rO   rP   Zclear_startZclear_lengthrQ   r   r   r   clear_screen   s    


(zAnsiTerm.clear_screenc                 C   s   |   }| j|j d S r   )rI   r;   appendr1   r   rN   rP   r   r   r   push_cursor   s    zAnsiTerm.push_cursorc                 C   s$   | j r | j  }tj| j| d S r   )r;   popr   r>   rT   r@   )r   rN   Zold_posr   r   r   
pop_cursor   s    
zAnsiTerm.pop_cursorc                 C   sr   | d\}}}t|dd }t|dd }|  }tttd||jjttd||jj}t	j
| j| d S )N;r:   r   )	partitionrS   rI   r)   minmaxr0   r*   r+   r   r>   rT   r@   )r   rN   ysepxrP   new_posr   r   r   
set_cursor   s    zAnsiTerm.set_cursorc                 C   sH   t |dd }|  }tttd||jj|jj}t	j
| j| d S )Nr:   r   )rS   rI   r)   r]   r^   r0   r*   r1   r+   r   r>   rT   r@   )r   rN   ra   rP   rb   r   r   r   
set_column   s    zAnsiTerm.set_columnr   c                 C   sV   |   }tttd|jj| |jjttd|jj| |jj}tj	
| j| d S Nr   )rI   r)   r]   r^   r1   r*   r0   r+   r   r>   rT   r@   )r   x_offsety_offsetrP   rb   r   r   r   move_cursor   s    zAnsiTerm.move_cursorc                 C   s   | j t|d d d S Nr:   )rg   rh   rS   r   rN   r   r   r   move_up   s    zAnsiTerm.move_upc                 C   s   | j t|dd d S ri   rj   rk   r   r   r   	move_down   s    zAnsiTerm.move_downc                 C   s   | j t|d d d S Nr:   )rf   rj   rk   r   r   r   	move_left   s    zAnsiTerm.move_leftc                 C   s   | j t|dd d S rn   rj   rk   r   r   r   
move_right   s    zAnsiTerm.move_rightc                 C   s&   |   }| j|jj t|dd d S Nr:   )rf   rg   rI   rh   r1   r*   rS   rW   r   r   r   	next_line   s
    zAnsiTerm.next_linec                 C   s(   |   }| j|jj t|d d d S rq   rr   rW   r   r   r   	prev_line   s
    
zAnsiTerm.prev_linec                 C   s    |d@ d> |d@ B |d@ d? B S )Nr:   r9      r   )r   cr   r   r   rgb2bgr   s    zAnsiTerm.rgb2bgrc                 C   s  | d}|  }|j}|D ]}t|d}d|  k r>dk rZn n|d@ | |d B }qd|  k rndk rn n|d	@ | |d
 d> B }q|dkr| jj}q|dkr|dO }q|dkr|dO }q|dkr|d@ |d@ d? B |d@ d> B }qtj| j	| d S )Nr[   r      &   i     '   0   i  (   ru   r:            i  p   )
splitrI   r2   rS   rw   rC   r   r>   SetConsoleTextAttributer@   )r   rN   ZcolsrP   attrrv   r   r   r   	set_color   s$    




"zAnsiTerm.set_colorc                 C   s"   d| j _tj| jt| j  d S Nr:   rB   r4   r   r>   SetConsoleCursorInfor@   r	   rk   r   r   r   show_cursor   s    zAnsiTerm.show_cursorc                 C   s"   d| j _tj| jt| j  d S re   r   rk   r   r   r   hide_cursor   s    zAnsiTerm.hide_cursor)ABCDEFGHfJKhlmrF   uz)(?:\x1b\[([0-9?;]*)([a-zA-Z])|([^\x1b]+))c                 C   sz   zjt   | jrT| j|D ]4\}}}|rF| j|}|rP|| | q| | qn| j	| W t 
  n
t 
  0 d S r   )r   r   rE   ansi_tokensfindallansi_command_tablegetwriteconsoler   r   r   )r   textrN   cmdr   Zcmd_funcr   r   r   r     s    r   c           
      C   s   t  }tjj}t|tr tjj}d}t|}d}|dkrt||}||||  }|| j	||t
|d }	|	dkrz|dL }q0||7 }||8 }q0d S )Nr   i   r:   )r   r   r>   ZWriteConsoleA
isinstance_typeZWriteConsoleWlenr]   r@   r	   )
r   r   rQ   r   donetodochunkZdoingbufrH   r   r   r   r     s     

zAnsiTerm.writeconsolec                 C   s
   | j  S r   r   r!   r   r   r   r    4  s    r"   c                 C   s   d S r   r   r!   r   r   r   r   7  s    r#   c                 C   s   | j S r   )rE   r!   r   r   r   r$   :  s    r%   N)r   r   ) r&   r'   r(   __doc__r   rI   rR   rU   rX   rZ   rc   rd   rh   rl   rm   ro   rp   rs   rt   rw   r   r   r   r   recompiler   r   r   r    r   r$   r   r   r   r   r   W   sV   	

c                   C   s   t jttt tjjd S r   )r   r>   rD   consoler	   rP   r0   r*   r   r   r   r   get_term_colsA  s    r   TERM )dumbemacsc                   C   s*   t dtttjt dddddd S )NZHHHHr   r:   )structunpackfcntlZioctlFDtermiosZ
TIOCGWINSZpackr   r   r   r   funN  s    r   )=r   osr   syswaflibr   	threadingLockr   ctypesr   r   r   r   r   r   r	   r
   r   r   ImportErrorobjectr   r)   r.   r/   r3   unicoder   	NameErrorstrrS   r=   r<   r>   r?   argtypesZrestyperD   r   rL   rM   rT   r   stdoutr$   stderrrG   r   rP   r   r   r   r   environr   r    r   r   	Exceptioner   r   r   r   <module>   sf   

4







 g,"
