grthtrhthjhtyjytjytkergtrhtrjytjerhrfh3 \‚6ã@sÞdZddlZddlZddlZddlZdddgZGdd„deƒZdZdZ dZ d Z d Z Gd d „d ƒZ d d„ZGdd„dƒZGdd„dƒZGdd„dƒZGdd„dƒZdd„ZGdd„dƒZGdd„dƒZGdd„dƒZdd„ZdS)z‰Macintosh binhex compression/decompression. easy interface: binhex(inputfilename, outputfilename) hexbin(inputfilename, outputfilename) éNÚbinhexÚhexbinÚErrorc@s eZdZdS)rN)Ú__name__Ú __module__Ú __qualname__©rrú/usr/lib64/python3.6/binhex.pyrséi€é@ó�c@seZdZdd„ZdS)ÚFInfocCsd|_d|_d|_dS)Nz????r)ÚTypeÚCreatorÚFlags)Úselfrrr Ú__init__0szFInfo.__init__N)rrrrrrrr r /sr c Csttƒ}tj|dƒ�2}|jdƒ}d|kr,d|_|jddƒ|jƒ}WdQRXtjj |ƒ\}}|j dddƒ}|||dfS) NÚrbirZTEXTéú:ú-r ) r ÚioÚopenÚreadrÚseekÚtellÚosÚpathÚsplitÚreplace)ÚnameÚfinfoÚfpÚdataZdsizeÚdirÚfilerrr Ú getfileinfo5s  r&c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) ÚopenrsrccGsdS)Nr)rÚargsrrr rCszopenrsrc.__init__cGsdS)Nór)rr(rrr rFsz openrsrc.readcGsdS)Nr)rr(rrr ÚwriteIszopenrsrc.writecCsdS)Nr)rrrr ÚcloseLszopenrsrc.closeN)rrrrrr*r+rrrr r'Bsr'c@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) Ú_Hqxcoderenginez(Write data to the coder in 3-byte chunkscCs ||_d|_d|_td|_dS)Nr)r )Úofpr#ÚhqxdataÚLINELENÚlinelen)rr-rrr rRsz_Hqxcoderengine.__init__cCsh|j||_t|jƒ}|dd}|jd|…}|j|d…|_|sHdS|jtj|ƒ|_|jdƒdS)Nér)r#Úlenr.ÚbinasciiÚb2a_hqxÚ_flush)rr#ZdatalenZtodorrr r*Xs   z_Hqxcoderengine.writecCsvd}xF|t|jƒ|jkrJ||j}|jj|j||…dƒt|_|}qW|j|d…|_|rr|jj|jdƒdS)Nró s: )r2r.r0r-r*r/)rZforceÚfirstZlastrrr r5cs z_Hqxcoderengine._flushcCs6|jr|jtj|jƒ|_|jdƒ|jjƒ|`dS)Nr )r#r.r3r4r5r-r+)rrrr r+ns   z_Hqxcoderengine.closeN)rrrÚ__doc__rr*r5r+rrrr r,Os   r,c@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú_Rlecoderenginez4Write data to the RLE-coder in suitably large chunkscCs||_d|_dS)Nr))r-r#)rr-rrr rxsz_Rlecoderengine.__init__cCs@|j||_t|jƒtkrdStj|jƒ}|jj|ƒd|_dS)Nr))r#r2ÚREASONABLY_LARGEr3Ú rlecode_hqxr-r*)rr#Úrledatarrr r*|s    z_Rlecoderengine.writecCs0|jrtj|jƒ}|jj|ƒ|jjƒ|`dS)N)r#r3r;r-r*r+)rr<rrr r+„s    z_Rlecoderengine.closeN)rrrr8rr*r+rrrr r9usr9c@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚBinHexc Cs |\}}}}d}t|tƒr.|}tj|dƒ}d}yR|jdƒt|ƒ} t| ƒ|_d|_|dkr`t ƒ}||_ ||_ |j ||ƒt |_Wn|r”|jƒ‚YnXdS)NFÚwbTs0(This file must be converted with BinHex 4.0) :r)Ú isinstanceÚstrrrr*r,r9r-Úcrcr ÚdlenÚrlenÚ _writeinfoÚ _DID_HEADERÚstater+) rZname_finfo_dlen_rlenr-r r!rBrCZclose_on_errorZofnameZhqxerrrr rŒs*       zBinHex.__init__c Cs´t|ƒ}|dkrtdƒ‚t|gƒ|jdƒd}|j|j}}t|tƒrR|jdƒ}t|tƒrf|jdƒ}||}tj d|j ƒ}tj d|j |j ƒ} |||| } |j | ƒ|jƒdS)Né?zFilename too longzlatin-1óz>hz>ii)r2rÚbytesÚencoderrr?r@ÚstructÚpackrrBrCÚ_writeÚ _writecrc) rr r!ÚnlÚdÚtpZcrZd2Zd3Zd4Úinforrr rD£s     zBinHex._writeinfocCs tj||jƒ|_|jj|ƒdS)N)r3Úcrc_hqxrAr-r*)rr#rrr rM¶sz BinHex._writecCs4|jdkrd}nd}|jjtj||jƒƒd|_dS)Nrz>hz>H)rAr-r*rKrL)rZfmtrrr rNºs  zBinHex._writecrccCs0|jtkrtdƒ‚|jt|ƒ|_|j|ƒdS)NzWriting data at the wrong time)rFrErrBr2rM)rr#rrr r*Äs z BinHex.writecCs,|jdkrtd|jfƒ‚|jƒt|_dS)NrzIncorrect data size, diff=%r)rBrrCrNÚ _DID_DATArF)rrrr Ú close_dataÊs zBinHex.close_datacCsB|jtkr|jƒ|jtkr$tdƒ‚|jt|ƒ|_|j|ƒdS)Nz'Writing resource data at the wrong time)rFrTrUrrCr2rM)rr#rrr Ú write_rsrcÐs   zBinHex.write_rsrcc Csx|jdkrdSzJ|jtkr"|jƒ|jtkr4tdƒ‚|jdkrNtd|jfƒ‚|jƒWdd|_|j}|`|jƒXdS)NzClose at the wrong timerz$Incorrect resource-datasize, diff=%r)rFrTrUrrCrNr-r+)rr-rrr r+Øs     z BinHex.closeN) rrrrrDrMrNr*rUrVr+rrrr r=‹s r=c Cs�t|ƒ}t||ƒ}tj|dƒ�.}x|jdƒ}|s2P|j|ƒq"W|jƒWdQRXt|dƒ}x|jdƒ}|snP|j|ƒq^W|j ƒ|j ƒdS)zEbinhex(infilename, outfilename): create binhex-encoded copy of a fileriôN) r&r=rrrr*rUr'rVr+)ÚinpÚoutr!r-ÚifprPrrr rés"    c@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú_Hqxdecoderenginez*Read data via the decoder in 4-byte chunkscCs||_d|_dS)Nr)rYÚeof)rrYrrr rsz_Hqxdecoderengine.__init__c Cs¾d}|}x°|dkr¸|jr|S|ddd}|jj|ƒ}xRytj|ƒ\}|_PWntjk rfYnX|jjdƒ}|s€tdƒ‚||}q:W||}|t|ƒ}| r |j r tdƒ‚q W|S)z&Read at least wtd bytes (or until EOF)r)rrr1ér zPremature EOF on binhex file)r[rYrr3Za2b_hqxZ Incompleterr2)rZtotalwtdZdecdataÚwtdr#Z decdatacurÚnewdatarrr rs,      z_Hqxdecoderengine.readcCs|jjƒdS)N)rYr+)rrrr r+%sz_Hqxdecoderengine.closeN)rrrr8rrr+rrrr rZþs rZc@s0eZdZdZdd„Zdd„Zdd„Zdd „Zd S) Ú_RledecoderenginezRead data via the RLE-codercCs||_d|_d|_d|_dS)Nr)r)rYÚ pre_bufferÚ post_bufferr[)rrYrrr r+sz_Rledecoderengine.__init__cCsD|t|jƒkr"|j|t|jƒƒ|jd|…}|j|d…|_|S)N)r2raÚ_fill)rr]Úrvrrr r1s z_Rledecoderengine.readcCsô|j|jj|dƒ|_|jjr>|jtj|jƒ|_d|_dSt|jƒ}|jdd…tdtkrl|d}nX|jdd…tkrˆ|d}n<|jd d…tdkr¨|d}n|jd d …tkr¼n|d}|jtj|jd|…ƒ|_|j|d…|_dS) Nr\r)r1rHr réýÿÿÿéÿÿÿÿéþÿÿÿrfre) r`rYrr[rar3Z rledecode_hqxr2ÚRUNCHAR)rr]Zmarkrrr rb8s&    z_Rledecoderengine._fillcCs|jjƒdS)N)rYr+)rrrr r+[sz_Rledecoderengine.closeN)rrrr8rrrbr+rrrr r_(s #r_c@sLeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)ÚHexBincCsjt|tƒrtj|dƒ}x.|jdƒ}|s.tdƒ‚|dkr8q|dkrPqWt|ƒ}t|ƒ|_d|_ |j ƒdS)Nrr zNo binhex data foundó ó:r) r?r@rrrrrZr_rYrAÚ _readheader)rrYZchZhqxifprrr r_s    zHexBin.__init__cCs |jj|ƒ}tj||jƒ|_|S)N)rYrr3rSrA)rr2r#rrr Ú_readus z HexBin._readcCsNtjd|jjdƒƒdd@}|jd@|_||jkrDtd|j|fƒ‚d|_dS)Nz>hrriÿÿzCRC error, computed %x, read %x)rKÚunpackrYrrAr)rZfilecrcrrr Ú _checkcrczs   zHexBin._checkcrccCs¾|jdƒ}|jt|ƒƒ}|jdƒ}|jƒ|dd…}|dd…}tjd|dd…ƒd}tjd |dd …ƒd|_tjd |d d …ƒd|_||_tƒ|_||j_ ||j_ ||j_ t |_ dS)Nr r\réé z>hé rz>léérorprqrrrs)rlÚordrnrKrmrBrCÚFNamer rrrrErF)rr2ZfnameÚrestÚtypeZcreatorÚflagsrrr rk„s    zHexBin._readheadercGsn|jtkrtdƒ‚|r,|d}t||jƒ}n|j}d}x&t|ƒ|kr\||j|t|ƒƒ}q8W|j||_|S)NzRead data at wrong timerr))rFrErÚminrBr2rl)rÚnrcrrr r˜s  z HexBin.readcCs6|jtkrtdƒ‚|jr$|j|jƒ}|jƒt|_dS)Nzclose_data at wrong time)rFrErrBrlrnrT)rÚdummyrrr rU¦s   zHexBin.close_datacGsZ|jtkr|jƒ|jtkr$tdƒ‚|r>|d}t||jƒ}n|j}|j||_|j|ƒS)Nz Read resource data at wrong timer)rFrErUrTrryrCrl)rrzrrr Ú read_rsrc®s   zHexBin.read_rsrcc CsD|jdkrdSz|jr"|j|jƒ}|jƒWdd|_|jjƒXdS)N)rFrCr|rnrYr+)rr{rrr r+»s   z HexBin.closeN) rrrrrlrnrkrrUr|r+rrrr rh^s  rhc Cs®t|ƒ}|j}|s|j}tj|dƒ�&}x|jdƒ}|s8P|j|ƒq(WWdQRX|jƒ|jdƒ}|r¢t |dƒ}|j|ƒx|jdƒ}|sŒP|j|ƒq|W|j ƒ|j ƒdS)z6hexbin(infilename, outfilename) - Decode binhexed filer>iôN) rhr rurrrr*rUr|r'r+)rWrXrYr!r-rPrrr rÆs,     )r8rrrKr3Ú__all__Ú ExceptionrrErTr:r/rgr r&r'r,r9r=rrZr_rhrrrrr Ús,   &^*6h