U ,a6@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/python38/lib64/python3.8/binhex.pyrsi@c@seZdZddZdS)FInfocCsd|_d|_d|_dS)Nz????r)TypeCreatorFlagsselfrrr __init__0szFInfo.__init__N)rrrrrrrr r /sr c Cstt}t|d2}|d}d|kr,d|_|dd|}W5QRXtj |\}}| ddd}|||dfS) NrbirZTEXT:-r ) r ioopenreadrseektellospathsplitreplace)namefinfofpdataZdsizedirfilerrr getfileinfo5s  r'c@s,eZdZddZddZddZddZd S) openrsrccGsdSNrrargsrrr rCszopenrsrc.__init__cGsdSNrr*rrr rFsz openrsrc.readcGsdSr)rr*rrr writeIszopenrsrc.writecCsdSr)rrrrr 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$hqxdataLINELENlinelenrr1rrr rRsz_Hqxcoderengine.__init__cCsh|j||_t|j}|dd}|jd|}|j|d|_|sHdS|jt||_|ddS)Nr)r$lenr2binasciib2a_hqx_flush)rr$ZdatalenZtodorrr r.Xs   z_Hqxcoderengine.writecCsrd}|t|j|jkrH||j}|j|j||dt|_|}q|j|d|_|rn|j|jddS)Nr s: )r7r2r4r1r.r3)rZforcefirstZlastrrr r:cs z_Hqxcoderengine._flushcCs6|jr|jt|j|_|d|j|`dS)Nr )r$r2r8r9r:r1r/rrrr r/ns   z_Hqxcoderengine.closeN)rrr__doc__rr.r:r/rrrr r0Os   r0c@s(eZdZdZddZddZddZdS) _Rlecoderenginez4Write data to the RLE-coder in suitably large chunkscCs||_d|_dSr,)r1r$r5rrr rxsz_Rlecoderengine.__init__cCs@|j||_t|jtkrdSt|j}|j|d|_dSr,)r$r7REASONABLY_LARGEr8 rlecode_hqxr1r.)rr$rledatarrr r.|s    z_Rlecoderengine.writecCs0|jrt|j}|j||j|`dSr))r$r8r@r1r.r/)rrArrr r/s    z_Rlecoderengine.closeN)rrrr=rr.r/rrrr r>usr>c@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)BinHexc Cs|\}}}}d}t|tr.|}t|d}d}zR|dt|} t| |_d|_|dkr`t }||_ ||_ | ||t |_Wn|r|YnXdS)NFwbTs0(This file must be converted with BinHex 4.0) :r) isinstancestrrrr.r0r>r1crcr dlenrlen _writeinfo _DID_HEADERstater/) rZname_finfo_dlen_rlenr1r!r"rGrHZclose_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-1>hz>ii)r7rbytesencoderrrDrEstructpackrrGrH_write _writecrc) rr!r"nldtpZcrZd2Zd3Zd4inforrr rIs     zBinHex._writeinfocCs t||j|_|j|dSr))r8crc_hqxrFr1r.rr$rrr rSsz BinHex._writecCs4|jdkrd}nd}|jt||jd|_dS)NrrNz>H)rFr1r.rQrR)rZfmtrrr rTs  zBinHex._writecrccCs0|jtkrtd|jt||_||dS)NzWriting data at the wrong time)rKrJrrGr7rSrZrrr r.s z BinHex.writecCs,|jdkrtd|jf|t|_dS)NrzIncorrect data size, diff=%r)rGrrHrT _DID_DATArKrrrr close_datas zBinHex.close_datacCsB|jtkr||jtkr$td|jt||_||dS)Nz'Writing resource data at the wrong time)rKr[r\rrHr7rSrZrrr write_rsrcs   zBinHex.write_rsrccCsx|jdkrdSzJ|jtkr"||jtkr4td|jdkrNtd|jf|W5d|_|j}|`|XdS)NzClose at the wrong timerz$Incorrect resource-datasize, diff=%r)rKr1r/r[r\rrHrTr5rrr r/s     z BinHex.closeN) rrrrrIrSrTr.r\r]r/rrrr rBs rBc Cst|}t||}t|d*}|d}|s0q<||q |W5QRXt|d}|d}|shqt||qX| | dS)zEbinhex(infilename, outfilename): create binhex-encoded copy of a filerN) r'rBrrrr.r\r(r]r/)inpoutr"r1ifprVrrr rs      c@s(eZdZdZddZddZddZdS) _Hqxdecoderenginez*Read data via the decoder in 4-byte chunkscCs||_d|_dS)Nr)raeofrrarrr rsz_Hqxdecoderengine.__init__cCsd}|}|dkr|jr|S|ddd}|j|}zt|\}|_WqWntjk rdYnX|jd}|s~td||}q6||}|t|}|s|jstdq|S)z&Read at least wtd bytes (or until EOF)r-rrr6r zPremature EOF on binhex file)rcrarr8Za2b_hqxZ Incompleterr7)rZtotalwtdZdecdatawtdr$Z decdatacurnewdatarrr rs*      z_Hqxdecoderengine.readcCs|jdSr)rar/rrrr r/%sz_Hqxdecoderengine.closeN)rrrr=rrr/rrrr rbs rbc@s0eZdZdZddZddZddZdd Zd S) _RledecoderenginezRead data via the RLE-codercCs||_d|_d|_d|_dS)Nr-r)ra pre_buffer post_bufferrcrdrrr r+sz_Rledecoderengine.__init__cCsD|t|jkr"||t|j|jd|}|j|d|_|Sr))r7rk_fill)rrfrvrrr 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) Nrer-rMr6rr ) rjrarrcrkr8Z rledecode_hqxr7RUNCHAR)rrfZmarkrrr rl8s*     z_Rledecoderengine._fillcCs|jdSr)rhrrrr r/[sz_Rledecoderengine.closeN)rrrr=rrrlr/rrrr ri(s #ric@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)HexBincCsft|trt|d}|d}|s,td|dkr6q|dkrqBqt|}t||_d|_ | dS)Nrr zNo binhex data foundr;:r) rDrErrrrrbrirarF _readheader)rraZchZhqxifprrr r_s    zHexBin.__init__cCs |j|}t||j|_|Sr))rarr8rYrF)rr7r$rrr _readus z HexBin._readcCsNtd|jddd@}|jd@|_||jkrDtd|j|fd|_dS)NrNrrizCRC error, computed %x, read %x)rQunpackrarrFr)rZfilecrcrrr _checkcrczs  zHexBin._checkcrccCs|d}|t|}|d}||dd}|dd}td|ddd}td|dd d|_td|d dd|_||_t|_||j_ ||j_ ||j_ t |_ dS) Nr  rN rz>l)ruordrwrQrvrGrHFNamer rrrrJrK)rr7ZfnameresttypeZcreatorflagsrrr rts    zHexBin._readheadercGsj|jtkrtd|r,|d}t||j}n|j}d}t||krZ|||t|}q6|j||_|S)NzRead data at wrong timerr-)rKrJrminrGr7ru)rnrmrrr rs   z HexBin.readcCs6|jtkrtd|jr$||j}|t|_dS)Nzclose_data at wrong time)rKrJrrGrurwr[rZdummyrrr r\s   zHexBin.close_datacGsZ|jtkr||jtkr$td|r>|d}t||j}n|j}|j||_||S)Nz Read resource data at wrong timer)rKrJr\r[rrrHru)rrrrr read_rsrcs   zHexBin.read_rsrccCsD|jdkrdSz|jr"||j}|W5d|_|jXdSr))rKrar/rHrrwrrrr r/s   z HexBin.closeN) rrrrrurwrtrr\rr/rrrr rr^s  rrc Cst|}|j}|s|j}t|d"}|d}|s6qB||q&W5QRX||d}|rt |d}|||d}|sq||qv| | dS)z6hexbin(infilename, outfilename) - Decode binhexed filerCr^N) rrr r~rrrr.r\rr(r/)r_r`rar"r1rVrrr rs(      )r=rrrQr8__all__ ExceptionrrJr[r?r3rqr r'r(r0r>rBrrbrirrrrrrr s,   &^*6h