o w[e9@s dZddlZddlZddlZddlZddlZddlZejdeddgdZ Gddde Z dZ d Z d Zd Zd ZGd ddZddZGdddZejddZGdddZGdddZGdddZddZGdddZGdd d ZGd!d"d"Zd#d$ZdS)%zMacintosh binhex compression/decompression. easy interface: binhex(inputfilename, outputfilename) hexbin(inputfilename, outputfilename) Nzthe binhex module is deprecated) stacklevel)binhexhexbinErrorc@s eZdZdS)rN)__name__ __module__ __qualname__r r /usr/lib/python3.10/binhex.pyr%sri@c@seZdZddZdS)FInfocCsd|_d|_d|_dS)Nz????r)TypeCreatorFlagsselfr r r __init__6s zFInfo.__init__N)rrr rr r r r r5s rcCst}t|d}|d}d|vrd|_|dd|}Wdn1s*wYtj |\}}| ddd}|||dfS) NrbirTEXTr:-r ) rioopenreadrseektellospathsplitreplace)namefinfofpdatadsizedirfiler r r getfileinfo;s    r*c@s,eZdZddZddZddZddZd S) openrsrccGdSNr rargsr r r rIzopenrsrc.__init__cGsdSNr r.r r r rLr0z openrsrc.readcGr,r-r r.r r r writeOr0zopenrsrc.writecCr,r-r rr r r closeRr0zopenrsrc.closeN)rrr rrr3r4r r r r r+Hs  r+ccsDttddtdVWddS1swYdS)Nignore)warningscatch_warningsfilterwarningsDeprecationWarningr r r r _ignore_deprecation_warningXs  "r;c@0eZdZdZddZddZddZdd Zd S) _Hqxcoderenginez(Write data to the coder in 3-byte chunkscCs ||_d|_d|_td|_dS)Nr2r )ofpr&hqxdataLINELENlinelenrr>r r r rbsz_Hqxcoderengine.__init__cCs|j||_t|j}|dd}|jd|}|j|d|_|s$dSt|jt||_Wdn1s;wY|ddS)Nr)r&lenr;r?binasciib2a_hqx_flush)rr&datalentodor r r r3hs   z_Hqxcoderengine.writecCsd}|t|j|jkr-||j}|j|j||dt|_|}|t|j|jks |j|d|_|rB|j|jddSdS)Nr s: )rDr?rAr>r3r@)rforcefirstlastr r r rGts z_Hqxcoderengine._flushcCs\|jr t|jt|j|_Wdn1swY|d|j|`dS)Nr )r&r;r?rErFrGr>r4rr r r r4s  z_Hqxcoderengine.closeN)rrr __doc__rr3rGr4r r r r r=_s  r=c@(eZdZdZddZddZddZdS) _Rlecoderenginez4Write data to the RLE-coder in suitably large chunkscC||_d|_dSr1)r>r&rBr r r r z_Rlecoderengine.__init__cCsf|j||_t|jtkrdStt|j}Wdn1s#wY|j|d|_dSr1)r&rDREASONABLY_LARGEr;rE rlecode_hqxr>r3)rr&rledatar r r r3s   z_Rlecoderengine.writecCsV|jr"tt|j}Wdn1swY|j||j|`dSr-)r&r;rErTr>r3r4)rrUr r r r4s  z_Rlecoderengine.closeN)rrr rNrr3r4r r r r rPs  rPc@LeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)BinHexc Cs|\}}}}d}t|tr|}t|d}d}z*|dt|} t| |_d|_|dur0t }||_ ||_ | ||t |_WdS|rK|)NFwbTs0(This file must be converted with BinHex 4.0) :r) isinstancestrrrr3r=rPr>crcrdlenrlen _writeinfo _DID_HEADERstater4) rname_finfo_dlen_rlenr>r#r$r\r]close_on_errorofnamehqxerr r r rs*       zBinHex.__init__c Cst|}|dkr tdt|g|dd}|j|j}}t|tr)|d}t|tr3|d}||}t d|j }t d|j |j } |||| } | | |dS)N?zFilename too longzlatin-1>hz>ii)rDrbytesencoderrrYrZstructpackrr\r]_write _writecrc) rr#r$nldtpcrd2d3d4infor r r r^s      zBinHex._writeinfocCs t||j|_|j|dSr-)rEcrc_hqxr[r>r3rr&r r r rlsz BinHex._writecCs4|jdkrd}nd}|jt||jd|_dS)Nrrgz>H)r[r>r3rjrk)rfmtr r r rms  zBinHex._writecrccCs0|jtkr td|jt||_||dS)NzWriting data at the wrong time)r`r_rr\rDrlrwr r r r3s z BinHex.writecCs,|jdkr td|jf|t|_dS)NrzIncorrect data size, diff=%r)r\rr]rm _DID_DATAr`rr r r close_datas  zBinHex.close_datacCsB|jtkr ||jtkrtd|jt||_||dS)Nz'Writing resource data at the wrong time)r`ryrzrr]rDrlrwr r r write_rsrcs  zBinHex.write_rsrccCs|jdurdSz2|jtkr||jtkrtd|jdkr'td|jf|Wd|_|j}|`|dSd|_|j}|`|w)NzClose at the wrong timerz$Incorrect resource-datasize, diff=%r)r`ryrzrr]rmr>r4rBr r r r4s$       z BinHex.closeN) rrr rr^rlrmr3rzr{r4r r r r rWs  rWcCst|}t||}t|d} |d}|sn||q|Wdn1s-wYt|d} |d}|s@n||q8| | dS)zEbinhex(infilename, outfilename): create binhex-encoded copy of a filerTN) r*rWrrrr3rzr+r{r4)inpoutr$r>ifpror r r rs$        rc@rO) _Hqxdecoderenginez*Read data via the decoder in 4-byte chunkscCrQ)Nr)reofrrr r r rrRz_Hqxdecoderengine.__init__cCsd}|}|dkrl|jr |S|ddd}|j|} ztt|\}|_Wdn1s3wYWntjyCYnw|jd}|sPtd ||}q||}|t|}|sh|jshtd |dks|S) z&Read at least wtd bytes (or until EOF)r2rrrCTNr zPremature EOF on binhex file) rrrr;rEa2b_hqx IncompleterrD)rtotalwtddecdatawtdr& decdatacurnewdatar r r rs4     z_Hqxdecoderengine.readcC|jdSr-rr4rr r r r4:z_Hqxdecoderengine.closeN)rrr rNrrr4r r r r rs  !rc@r<) _RledecoderenginezRead data via the RLE-codercCs||_d|_d|_d|_dS)Nr2r)r pre_buffer post_bufferrrr r r r@s z_Rledecoderengine.__init__cCsD|t|jkr||t|j|jd|}|j|d|_|Sr-)rDr_fill)rrrvr r r rFs z_Rledecoderengine.readcCs@|j|j|d|_|jjr2t|jt|j|_Wdn1s(wYd|_dSt|j}|jddt dt krI|d}n,|jddt krW|d}n|jddt dkrg|d}n|jddt krqn|d }t|jt|jd||_Wdn1swY|j|d|_dS) Nrr2rfrCrr ) rrrrr;rrE rledecode_hqxrDRUNCHAR)rrmarkr r r rMs2     z_Rledecoderengine._fillcCrr-rrr r r r4rrz_Rledecoderengine.closeN)rrr rNrrrr4r r r r r=s  %rc@rV)HexBincCsht|tr t|d} |d}|std|dkrq |dkr!nq t|}t||_d|_ | dS)NrTr zNo binhex data foundrJ:r) rYrZrrrrrrrr[ _readheader)rrchhqxifpr r r rvs     zHexBin.__init__cCs |j|}t||j|_|Sr-)rrrErvr[)rrDr&r r r _reads z HexBin._readcCsNtd|jddd@}|jd@|_||jkr"td|j|fd|_dS)NrgrrizCRC error, computed %x, read %x)rjunpackrrr[r)rfilecrcr r r _checkcrcs   zHexBin._checkcrccCs|d}|t|}|d}||dd}|dd}td|ddd}td|dd d|_td|d dd|_||_t|_||j_ ||j_ ||j_ t |_ dS) Nr  rg rz>l)rordrrjrr\r]FNamerrrrr_r`)rrDfnameresttypecreatorflagsr r r rs     zHexBin._readheadercGst|jtkr td|r|d}t||j}n|j}d}t||kr2|||t|}t||ks!|j||_|S)NzRead data at wrong timerr2)r`r_rminr\rDr)rnrr r r rs   z HexBin.readcCs6|jtkr td|jr||j}|t|_dS)Nzclose_data at wrong time)r`r_rr\rrryrdummyr r r rzs   zHexBin.close_datacGsZ|jtkr ||jtkrtd|r|d}t||j}n|j}|j||_||S)Nz Read resource data at wrong timer)r`r_rzryrrr]r)rrr r r read_rsrcs    zHexBin.read_rsrccCsR|jdurdSz|jr||j}|Wd|_|jdSd|_|jwr-)r`r]rrrr4rr r r r4s    z HexBin.closeN) rrr rrrrrrzrr4r r r r rus  rcCst|}|j}|s |j}t|d} |d}|sn||qWdn1s,wY||d}|rYt |d}|| |d}|sOn||qG| | dS)z6hexbin(infilename, outfilename) - Decode binhexed filerXTr|N) rrrrrrr3rzrr+r4)r}r~rr$r>ror r r rs0        r)rNrE contextlibrrrjr7warnr:__all__ Exceptionrr_ryrSr@rrr*r+contextmanagerr;r=rPrWrrrrrr r r r s<  (^+8 h