eaiovnaovbqoebvqoeavibavo B  f6@sdZddlZddlZddlZddlZdddgZGdddeZdZdZ dZ d Z d Z Gd d d Z d dZGdddZGdddZGdddZGdddZddZGdddZGdddZGdddZddZdS)zMacintosh binhex compression/decompression. easy interface: binhex(inputfilename, outputfilename) hexbin(inputfilename, outputfilename) NbinhexhexbinErrorc@s eZdZdS)rN)__name__ __module__ __qualname__rr+/opt/alt/python37/lib64/python3.7/binhex.pyrsi@c@seZdZddZdS)FInfocCsd|_d|_d|_dS)Nz????r)TypeCreatorFlags)selfrrr __init__0szFInfo.__init__N)rrrrrrrr r /sr c Cstt}t|d2}|d}d|kr,d|_|dd|}WdQRXtj |\}}| ddd}|||dfS) NrbirZTEXT:-r ) r ioopenreadrseektellospathsplitreplace)namefinfofpdataZdsizedirfilerrr getfileinfo5s  r&c@s,eZdZddZddZddZddZd S) openrsrccGsdS)Nr)rargsrrr rCszopenrsrc.__init__cGsdS)Nr)rr(rrr rFsz openrsrc.readcGsdS)Nr)rr(rrr writeIszopenrsrc.writecCsdS)Nr)rrrr closeLszopenrsrc.closeN)rrrrrr*r+rrrr r'Bsr'c@s0eZdZdZddZddZddZdd Zd S) _Hqxcoderenginez(Write data to the coder in 3-byte chunkscCs ||_d|_d|_td|_dS)Nr)r )ofpr#hqxdataLINELENlinelen)rr-rrr rRsz_Hqxcoderengine.__init__cCsh|j||_t|j}|dd}|jd|}|j|d|_|sHdS|jt||_|ddS)Nr)r#lenr.binasciib2a_hqx_flush)rr#ZdatalenZtodorrr r*Xs   z_Hqxcoderengine.writecCsvd}xF|t|j|jkrJ||j}|j|j||dt|_|}qW|j|d|_|rr|j|jddS)Nr s: )r2r.r0r-r*r/)rZforcefirstZlastrrr r5cs z_Hqxcoderengine._flushcCs6|jr|jt|j|_|d|j|`dS)Nr )r#r.r3r4r5r-r+)rrrr r+ns   z_Hqxcoderengine.closeN)rrr__doc__rr*r5r+rrrr r,Os   r,c@s(eZdZdZddZddZddZdS) _Rlecoderenginez4Write data to the RLE-coder in suitably large chunkscCs||_d|_dS)Nr))r-r#)rr-rrr rxsz_Rlecoderengine.__init__cCs@|j||_t|jtkrdSt|j}|j|d|_dS)Nr))r#r2REASONABLY_LARGEr3 rlecode_hqxr-r*)rr#rledatarrr r*|s    z_Rlecoderengine.writecCs0|jrt|j}|j||j|`dS)N)r#r3r;r-r*r+)rr<rrr r+s    z_Rlecoderengine.closeN)rrrr8rr*r+rrrr r9usr9c@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)BinHexc Cs|\}}}}d}t|tr.|}t|d}d}yR|dt|} t| |_d|_|dkr`t }||_ ||_ | ||t |_Wn|r|YnXdS)NFwbTs0(This file must be converted with BinHex 4.0) :r) isinstancestrrrr*r,r9r-crcr dlenrlen _writeinfo _DID_HEADERstater+) rZname_finfo_dlen_rlenr-r r!rBrCZclose_on_errorZofnameZhqxerrrr rs*       zBinHex.__init__c Cst|}|dkrtdt|g|dd}|j|j}}t|trR|d}t|trf|d}||}t d|j }t d|j |j } |||| } | | |dS)N?zFilename too longzlatin-1z>hz>ii)r2rbytesencoderrr?r@structpackrrBrC_write _writecrc) rr r!nldtpZcrZd2Zd3Zd4inforrr rDs     zBinHex._writeinfocCs t||j|_|j|dS)N)r3crc_hqxrAr-r*)rr#rrr rMsz BinHex._writecCs4|jdkrd}nd}|jt||jd|_dS)Nrz>hz>H)rAr-r*rKrL)rZfmtrrr rNs  zBinHex._writecrccCs0|jtkrtd|jt||_||dS)NzWriting data at the wrong time)rFrErrBr2rM)rr#rrr r*s z BinHex.writecCs,|jdkrtd|jf|t|_dS)NrzIncorrect data size, diff=%r)rBrrCrN _DID_DATArF)rrrr close_datas zBinHex.close_datacCsB|jtkr||jtkr$td|jt||_||dS)Nz'Writing resource data at the wrong time)rFrTrUrrCr2rM)rr#rrr write_rsrcs   zBinHex.write_rsrccCsx|jdkrdSzJ|jtkr"||jtkr4td|jdkrNtd|jf|Wdd|_|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 Cst|}t||}t|d.}x|d}|s2P||q"W|WdQRXt|d}x|d}|snP||q^W| | dS)zEbinhex(infilename, outfilename): create binhex-encoded copy of a fileriN) r&r=rrrr*rUr'rVr+)inpoutr!r-ifprPrrr rs"    c@s(eZdZdZddZddZddZdS) _Hqxdecoderenginez*Read data via the decoder in 4-byte chunkscCs||_d|_dS)Nr)rYeof)rrYrrr rsz_Hqxdecoderengine.__init__cCsd}|}x|dkr|jr|S|ddd}|j|}xRyt|\}|_PWntjk rfYnX|jd}|std||}q:W||}|t|}|s |js tdq W|S)z&Read at least wtd bytes (or until EOF)r)rrr1r zPremature EOF on binhex file)r[rYrr3Za2b_hqxZ Incompleterr2)rZtotalwtdZdecdatawtdr#Z decdatacurnewdatarrr rs,       z_Hqxdecoderengine.readcCs|jdS)N)rYr+)rrrr r+%sz_Hqxdecoderengine.closeN)rrrr8rrr+rrrr rZs rZc@s0eZdZdZddZddZddZdd 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|jkr"||t|j|jd|}|j|d|_|S)N)r2ra_fill)rr]rvrrr r1s z_Rledecoderengine.readcCs|j|j|d|_|jjr>|jt|j|_d|_dSt|j}|jddtdtkrl|d}nX|jddtkr|d}n<|jddtdkr|d}n|jddtkrn|d }|jt|jd||_|j|d|_dS) Nr\r)rHr1rr ) r`rYrr[rar3Z rledecode_hqxr2RUNCHAR)rr]Zmarkrrr rb8s&    z_Rledecoderengine._fillcCs|jdS)N)rYr+)rrrr r+[sz_Rledecoderengine.closeN)rrrr8rrrbr+rrrr r_(s #r_c@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)HexBincCsjt|trt|d}x.|d}|s.td|dkr8q|dkrPqWt|}t||_d|_ | dS)Nrr zNo binhex data found :r) r?r@rrrrrZr_rYrA _readheader)rrYZchZhqxifprrr r_s    zHexBin.__init__cCs |j|}t||j|_|S)N)rYrr3rSrA)rr2r#rrr _readus z HexBin._readcCsNtd|jddd@}|jd@|_||jkrDtd|j|fd|_dS)Nz>hrrizCRC error, computed %x, read %x)rKunpackrYrrAr)rZfilecrcrrr _checkcrczs   zHexBin._checkcrccCs|d}|t|}|d}||dd}|dd}td|ddd}td|dd d|_td|d dd|_||_t|_||j_ ||j_ ||j_ t |_ dS) Nr  z>h rz>l)rlordrnrKrmrBrCFNamer rrrrErF)rr2ZfnameresttypeZcreatorflagsrrr rks    zHexBin._readheadercGsn|jtkrtd|r,|d}t||j}n|j}d}x&t||kr\|||t|}q8W|j||_|S)NzRead data at wrong timerr))rFrErminrBr2rl)rnrcrrr rs  z HexBin.readcCs6|jtkrtd|jr$||j}|t|_dS)Nzclose_data at wrong time)rFrErrBrlrnrT)rdummyrrr rUs   zHexBin.close_datacGsZ|jtkr||jtkr$td|r>|d}t||j}n|j}|j||_||S)Nz Read resource data at wrong timer)rFrErUrTrryrCrl)rrzrrr read_rsrcs   zHexBin.read_rsrccCsD|jdkrdSz|jr"||j}|Wdd|_|jXdS)N)rFrCr|rnrYr+)rr{rrr r+s   z HexBin.closeN) rrrrrlrnrkrrUr|r+rrrr rh^s  rhc Cst|}|j}|s|j}t|d&}x|d}|s8P||q(WWdQRX||d}|rt |d}||x|d}|sP||q|W| | dS)z6hexbin(infilename, outfilename) - Decode binhexed filer>iN) rhr rurrrr*rUr|r'r+)rWrXrYr!r-rPrrr rs,     )r8rrrKr3__all__ ExceptionrrErTr:r/rgr r&r'r,r9r=rrZr_rhrrrrr s,   &^*6h