
    x:Jj                        d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	  ee
      j                         j                  d   ZddZddZdd	Zed
k(  r e        yy)zIClassify decompressed CNS payloads as images, tile maps, or unknown data.    )annotationsN)Path)decompress_cnsparse_image   c           
        | j                   d dd}	 t        | j                               }t        |      |d<   t        |      dk\  rt        j                  |dd d      }t        j                  |dd d      }d||z  dz  z   }d|cxk  rd	k  r:n n7d|cxk  rd	k  r,n n)t        |      |k(  r|j                  d
||||z  d       |S t        |      dk\  r[|d   }|d   }d||z  dz  z   }d|cxk  rd	k  r;n n8d|cxk  rd	k  r-n n*t        |      |k(  r|j                  d
||||z  dd       |S 	 t        |      \  }}}}}	||	z  dz   dz  dz  }
|
|z  }d|cxk  rdk  rKn |S d|cxk  rdk  r<n |S t        |      |k\  r*|j                  d|||	t        |      t        |      d       |S # t        $ r}t	        |      |d<   |cY d }~S d }~ww xY w# t        $ r}t	        |      |d<   Y d }~|S d }~ww xY w)Nunknown)namedecodedSizekinderrorr      r      little   tilemap)r   widthheight	tileCountr   )r   r   r   r   headerBytes       i   image)r   r   r   bpppaletteColors
pixelBytes)
r
   r   
read_bytes	Exceptionstrlenint
from_bytesupdater   )pathitemdecodedexcr   r   expected_mappalettepixelsr   strideexpected_pixelss               2/home/exedev/hwanse/tools/classify_cns_payloads.pyclassify_payloadr.      sA   		D
 !23
 g,D
7|qwq|X6!h756>A--uF 1c 1c'll6RKK%"$!&	 K
7|q
56>A--uF 1c 1c'll6RKK%"$!&#$ K!.9'.B+vw3;#*a/ 6/u K "#V!3t!3 K 9<F8VKK#"$%(\"%f+	 Kk  CWd  !CWK!sA   F/ 31G &G 58G /	G8GGG	G7G22G7c                n   i }| D ]   }|j                  |d   d      dz   ||d   <   " g d}t        |j                               D ]  \  }}|j                  d| d|         |j	                  g d       | D ]5  }|d   dk(  s|j                  d	|d
    d|d    d|d    d|d    d	       7 |j	                  g d       | D ]L  }|d   dk(  s|j                  d	|d
    d|j                  d      xs d d|j                  dd       d       N |j                  d       dj                  |      S )Nr   r   r   )z# CNS Payload Classification zMGenerated by `tools/classify_cns_payloads.py` from decompressed CNS payloads.r0   z	## Countsr0   z- `z`: )r0   z## Tile Mapsr0   z| file | size | decoded bytes |z| --- | ---: | ---: |r   z| r
   z | r   xr   r   z |)r0   z
## Unknownr0   z| file | decoded bytes | note |z| --- | ---: | --- |r	   -r   r0   
)getsorteditemsappendextendjoin)r6   countsr%   linesr   counts         r-   markdownr=   O   sz   F ?%zz$v,:Q>tF|?E flln- -es4&E7+,-	LL	
  k<9$LL2d6l^3tG}oQtH~>NcRVWdReQffhijk 
LL	
  m<9$LL2d6l^3txx/F/M#.NcRVRZRZ[bdfRgQhhjklm 
LL99U    c                 8   t        j                  t              } | j                  dt        t
        dz         | j                  dt        t
        dz  dz         | j                  dt        d        | j                         }t        |j                  j                  d	            D cg c]  }t        |       }}|j                  j                  j                  d
d
       |j                  j                  t        j                   |dd      dz   d       |j"                  r&|j"                  j                  t%        |      d       t'        dt)        |       d|j                          |j"                  rt'        d|j"                          y y c c}w )N)descriptionz	--src-dirextract_fld)typedefaultz
--json-outoutzcns_payloads.jsonz--md-outz*.cnsT)parentsexist_okFr   )ensure_asciiindentr3   zutf-8)encodingzwrote z CNS classifications -> zwrote markdown -> )argparseArgumentParser__doc__add_argumentr   ROOT
parse_argsr5   src_dirglobr.   json_outparentmkdir
write_textjsondumpsmd_outr=   printr    )parserargsr$   r6   s       r-   mainr\   y   sH   $$9F
$}8LM
4H[9[\

t<D06t||7H7H7Q0RSd#SESMMtd;MMTZZE!LtS^ef{{xA	F3u:,6t}}o
FG{{"4;;-01  Ts   *F__main__)r$   r   returndict)r6   z
list[dict]r^   r   )r^   None)rL   
__future__r   rJ   rV   pathlibr   
decode_cnsr   r   __file__resolverE   rN   r.   r=   r\   __name__ r>   r-   <module>rh      s[    O "    2 H~''*=@'T2" zF r>   