Subversion Repositories NedoOS

Rev

Rev 86 | Rev 344 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. maxmasksz=namln;20;24
  2.        IF masks
  3. loopM
  4.         LD HL,CURMASK
  5. MASK0   CALL IYKEY
  6.         CP key_enter
  7.         JR Z,MASKe
  8.          cp 0x20
  9.         JR C,MASK0 ;яЁюўшх єяЁрты ■∙шх ъэюяъш эх эєцэ√
  10.         LD (HL),A
  11.         INC HL
  12.         CALL PRSYM
  13.         ;LD A,(CURX)
  14.         push hl
  15.         ld de,CURMASK
  16.         scf
  17.         sbc hl,de
  18.         ld a,l
  19.         pop hl
  20.         CP maxmasksz-1
  21.         JR C,MASK0
  22. MASKe   LD (HL),0
  23.         JP LOOP
  24.  
  25. ;ьюцэю ьрёъє Єшяр M*.EXE
  26. CURMASK
  27.         DB "*"
  28.         DS maxmasksz-1
  29.         NOP
  30. CPMASK
  31. ;HL=filename,DE=mask
  32. ;both zeroend
  33. ;"?"=1sym,"*">=0sym
  34. ;ёшьтюы яюёых "*" эх ф.с тэєЄЁш "*"
  35. ;Z=ok
  36.         LD HL,CURFILE
  37.         LD DE,CURMASK
  38. CPMASK0 LD A,(DE)
  39.         OR A
  40.         RET Z ;fff=fff*
  41.         INC DE
  42.         CP "?"
  43.         JR Z,CPMASKY
  44.         CP "*"
  45.         JR NZ,CPMASKN
  46.         LD A,(DE)
  47.         OR A
  48.         RET Z ;fff*
  49. CPMSKZ  LD A,(DE)
  50.         SUB (HL)
  51.         JR Z,CPMASK0
  52.         INC HL
  53.         CP (HL)
  54.         JR NZ,CPMSKZ
  55.        ;ff*d<>ff1
  56.         INC A
  57.         RET
  58. CPMASKN CP (HL)
  59.         RET NZ
  60. CPMASKY INC HL
  61.         LD A,(HL)
  62.         OR A
  63.         JR NZ,CPMASK0
  64.         RET
  65.        ENDIF
  66. ;TWICE
  67. RdTabs
  68.         LD B,2
  69.         CALL LDA18B
  70.        LD A,C
  71.         RRA
  72.       ;LD (Bit2),A ;UnpAudioBlock
  73.        JR C,dpPnKIL
  74.         LD HL,FRIY2
  75.        LD (HL),B
  76.         LD DE,FRIY2+1
  77.         LD BC,FRIY2ln-1
  78.         LDIR
  79. dpPnKIL
  80.        IF mmc
  81.       ;Bit2=$+1
  82.       ;LD A,0
  83.        RRA
  84.        JR NC,dPPn2b
  85.         IF 1==0
  86.         call RST16
  87.         DB #D,#a,"Audio blocks are not supported",0
  88.        LD A,251
  89.        LD (flgALL),A
  90.         CALL IYKEY
  91.         JP SPGO
  92.         ELSE
  93.         LD B,2
  94.         CALL LDA18B
  95.         LD A,C
  96.      ;LD HL,_7604 ;CurChannel
  97.      ;CP (HL) ;=0
  98.      ;JR NC,$+4
  99.      ;LD (HL),0
  100.        ADD A,1 ;A=1..4
  101.         LD H,A
  102.         ld L,A
  103.         JR $+5
  104.         ENDIF
  105.        ENDIF
  106. dPPn2b
  107.         LD HL,bdlens
  108. dPPtetr LD B,4
  109.         CALL LDA18B
  110.         LD (HL),C
  111.         INC L
  112.         JR NZ,dPPtetr
  113.         LD DE,19+1
  114.        INC L
  115.        inc H
  116.        ;LD HL,bdlens+19+1
  117.         LD BC,bd
  118.         ;jr $
  119.         CALL MKTREE
  120.         LD BC,298+48+28 ;tabsize
  121.         LD HL,FRIY2 ;UnpOldTable
  122. dPP0   PUSH HL
  123.        PUSH BC
  124.         LD HL,bd
  125.         CALL DEHUFF
  126.         LD A,L
  127.        POP BC
  128.        POP HL
  129.         SUB 16
  130.         JR NC,dPPbr16
  131. ;<16 delta from prev codelen tab
  132.         ADD A,(HL)
  133.         AND #F
  134.         LD (HL),A
  135.         INC HL
  136.         DEC BC
  137.         JR dPPQ
  138. dPPbr16
  139.         PUSH BC
  140.         JR NZ,dPPn16
  141. ;16=prev len copies-3
  142.         LD B,2
  143.         CALL LDA18B
  144.        DEC HL
  145.        LD A,(HL)
  146.        INC HL
  147.        LD (dPPdupV),A
  148.         JR dPPfil3
  149. ;18=zerolens-11
  150. dPPn3b
  151.         LD B,7
  152.         CALL LDA18B
  153.         LD A,11
  154.         JR dPPfil
  155. dPPn16  DEC A
  156.         JR NZ,dPPn3b
  157. ;17=zerolens-3
  158.         LD B,3
  159.         CALL LDA18B
  160. dPPfil3 LD A,3
  161. dPPfil  ADD A,C
  162.         POP BC
  163. dPPdupV=$+1
  164. dPPdup0 LD (HL),0
  165.         INC HL
  166.         DEC BC
  167.         DEC A
  168.         JR NZ,dPPdup0
  169.         LD (dPPdupV),A
  170. dPPQ    LD A,B
  171.        OR A
  172.        JP M,qqqq ;??ERROR?
  173.         OR C
  174.         JP NZ,dPP0
  175. qqqq
  176.         LD DE,299
  177.         LD HL,ldlens+299
  178.         LD BC,ld
  179.         CALL MKTREE
  180.        ifdef retree
  181.        LD BC,ld
  182.        LD DE,reld
  183.        CALL RETREE
  184.        ENDIF
  185.       ifdef optbigBT
  186.        LD A,14
  187.        LD (obig),A
  188.       ENDIF
  189.         LD DE,49
  190.         LD HL,ddlens+49
  191.         LD BC,dd
  192.         CALL MKTREE
  193.       ifdef optbigBT
  194.        LD A,24
  195.        LD (obig),A
  196.       ENDIF
  197.         LD DE,29
  198.         LD HL,rdlens+29
  199.         LD BC,rd
  200. ;ёючфрэшх фхЁхтр. эєыш - сюыхх ъюЁюЄъшх тхЄъш
  201. ;ёэрўрыр ёючфр■Єё  тёх тхЄъш фы 
  202. ;ёшьтюыют ё bitlen=1, яюЄюь 2 ш Є.ф. фю 15
  203. ;by Roman Petrov
  204. ;FIXED:эх ёЄЁюшы яєёЄюх фхЁхтю
  205. MKTREE
  206.         PUSH BC
  207.         EXX
  208.         POP DE ;эрўрыю сєЇхЁр
  209.         LD H,D
  210.         LD L,E
  211.         XOR A ;=0 яЁшчэръ т√їюфр
  212.         PUSH AF
  213.         INC A ;=1
  214.         PUSH HL
  215.         PUSH AF
  216.         LD C,A
  217. MKTREE0 EXX      ;HL=ъюэ.bitlens+1
  218.         LD B,D
  219.         LD C,E
  220.        ;ADD HL,BC;єърч.эр яюёыхфэшщ bitlen
  221.       ;OR A
  222.        SBC HL,BC;єърч.эр 1щ bitlen
  223.         EXX
  224. MKTREE1 LD B,A
  225.         LD A,C
  226.         EXX
  227.        ;CPDR ;BC=ўшёыю ышёЄ№хт+1
  228.        CPIR
  229.         LD A,B
  230.         OR C
  231.         EXX
  232.         LD A,B
  233.         JR NZ,MKTREEY;эрщфхэ ёшьтюы ё Єръшь bitlen
  234.         INC C ;эх эрщфхэ Єръющ ёшьтюы
  235.        JR NZ,MKTREE0
  236.        JR MTREEbug
  237. MKTREE_DEEPER
  238.         INC DE ;эютюх ьхёЄю
  239.         INC DE ;фы 
  240.         INC DE ;эют√ї
  241.         INC DE ;єчыют
  242.         LD (HL),E
  243.         INC HL
  244.         LD (HL),D ;єърчрЄхы№ фы  "0"
  245.         LD H,D
  246.         LD L,E ;рфЁхё фы  "ъюф+0"
  247.         INC A  ;фышэр ¤Єюую ъюфр
  248.         PUSH HL ;чрэюёшь ¤Єю
  249.         PUSH AF ;т ёЄхъ
  250. MKTREEY CP C
  251.         JR NZ,MKTREE_DEEPER ;яюър эх єуыєсшьё  фю эєцэющ фышэ√
  252.        ;A=C
  253.         EXX
  254.         PUSH BC ;рэЄшэюьхЁ ышЄхЁрыр+1
  255.        PUSH DE ;Q+1
  256.         EXX
  257. MTREEbug
  258.        LD (MKhl),HL
  259.        POP HL
  260.         POP BC
  261.        ;DEC BC ;эюьхЁ ышЄхЁрыр
  262.        ;LD (HL),C
  263.        ;INC HL
  264.        ;LD (HL),B ;ЇюЁьшЁєхь ышёЄ
  265.        SCF
  266.        SBC HL,BC
  267.       ifdef optbigBT
  268. obig   JR $+8
  269.        SLA L
  270.        sla L
  271.        LD H,bigBT/256
  272.       ENDIF
  273. MKhl=$+1
  274.        LD (0),HL
  275.         LD C,A
  276.         POP AF
  277.         RET Z ;=0 яЁшчэръ т√їюфр
  278.         POP HL
  279.         INC HL
  280.         INC HL ;ёыхфє■∙шщ ётюсюфэ√щ єчхы
  281.            ;A=хую уыєсшэр
  282.            ;DE=рфЁхё ьхёЄр фы  эют√ї єчыют
  283.         JR MKTREE1
  284.        ifdef retree
  285. RETRp
  286.         LD A,218;JPC
  287.         LD (DE),A
  288.         INC DE
  289.        PUSH HL
  290.        PUSH DE
  291.        INC DE,DE
  292.        LD H,B
  293.        ld L,C
  294.        CALL RETREE ;фы  Ladr
  295.        POP HL
  296.        LD (HL),E ;рфЁхё Radr
  297.        INC HL
  298.        LD (HL),D
  299.        POP HL
  300.         LD C,(HL)
  301.         INC HL
  302.         LD B,(HL)
  303. RETREE
  304.         LD H,B,L,C
  305.         EX DE,HL
  306.         LD (HL),135;AAA
  307.         INC HL
  308.         LD (HL),204;CZ
  309.         INC HL
  310.         LD (HL),bitik
  311.         INC HL
  312.         LD (HL),bitik/256
  313.         INC HL
  314.         EX DE,HL
  315.         LD C,(HL)
  316.         INC HL
  317.         LD B,(HL)
  318.         INC HL
  319.        IF (ld/256)&#40
  320.         BIT 6,B
  321.        ELSE
  322.        if (ld/256)&#80
  323.         BIT 7,B
  324.        else
  325.        IF (ld/256)&#20
  326.         BIT 5,B
  327.        ENDIF
  328.        endif
  329.        ENDIF
  330.         JR NZ,RETRp
  331.         EX DE,HL
  332.         LD (HL),1
  333.         INC HL
  334.         LD (HL),C
  335.         INC HL
  336.         LD (HL),B
  337.         INC HL
  338.         LD (HL),208;RNC
  339.         INC HL
  340.         EX DE,HL
  341.         LD C,(HL)
  342.         INC HL
  343.         LD B,(HL)
  344.         INC HL
  345.        IF (ld/256)&#40
  346.         BIT 6,B
  347.        ELSE
  348.        if (ld/256)&#80
  349.         BIT 7,B
  350.        else
  351.        IF (ld/256)&#20
  352.         BIT 5,B
  353.        ENDIF
  354.        endif
  355.        ENDIF
  356.         JR NZ,RETREE;фы  Radr
  357.         EX DE,HL
  358.         LD (HL),1
  359.         INC HL
  360.         LD (HL),C
  361.         INC HL
  362.         LD (HL),B
  363.         INC HL
  364.         LD (HL),201
  365.         INC HL
  366.         EX DE,HL
  367.         RET
  368. reldstored
  369.         LD B,8
  370.         EXA
  371.         CALL LDA18B ;B=0,C=rez
  372.         EXA
  373.         RET
  374. lnreldstored=$-reldstored
  375. bitik
  376.         ;LD A,(IX)
  377.         ;INC LX
  378.         ;CALL Z,LDAsec
  379.         rarrdbyte
  380.       ;SCF ;?
  381.         RLA
  382.         RET
  383.        ENDIF
  384. ;----------
  385. SCFEOF  SCF
  386. EOF
  387. lnLSW=$+1
  388.         LD HL,0
  389.         LD DE,(NXTPOS)
  390.        ;OR A
  391.         SBC HL,DE
  392.        PUSH HL
  393. lnHSW=$+1
  394.         LD HL,0
  395.         LD DE,(NXTPOS+2)
  396.         SBC HL,DE
  397.        POP DE
  398.         RET
  399.  
  400.        IF unexp
  401. UNEXP
  402.        LD A,H
  403.        AND L,D,E
  404.        INC A
  405.        RET Z
  406.         call RST16
  407.         DB #D,#a,"Unexpected end"
  408.         DB 13,0
  409.        ;SCF
  410.         RET
  411.        ENDIF
  412.  
  413. PREPAR
  414.         ;jr $
  415.         CALL FINDFIL
  416.         RET C
  417.         XOR A
  418.         LD L,A,H,L
  419.         LD (volPKSZ),HL
  420.         LD (volPKSZ+2),HL
  421.         LD (volUNSZ),HL
  422.         LD (volUNSZ+2),HL
  423.         LD (pieces),HL
  424.        ;LD (pieces+2),HL
  425.        LD (ERRORS),HL
  426.        CALL PRTHEE
  427.         CALL TSTOLD
  428.         JR NC,_nISN
  429.         call RST16
  430.         DB "not RAR",0
  431.         SCF
  432.         RET
  433. PRTHEE
  434.       ;XOR A
  435.        LD HL,THEEND
  436.        LD (DEPADR),HL
  437.        LD (stAD),HL
  438.        LD (stPG),A
  439.        JP OUTMEcu
  440. _nISN
  441.         LD HL,(SIZEA)
  442.         LD DE,-13
  443.         ADD HL,DE
  444.        LD DE,0
  445.        CALL SEEKpos ;TODO
  446.        ;RET C
  447.         call RST16
  448.        DB #D,#a,0
  449.         LD A,(SOLFLG)
  450.         AND A
  451.         JR Z,NOTsol
  452.         call RST16
  453.        DB "Solid ",0
  454. NOTsol
  455.         LD A,(VOLFLG)
  456.         CP 2
  457.        JR NZ,NOTvol
  458.         call RST16
  459.        DB "volume",0
  460.         JR NOTarc
  461. NOTvol  call RST16
  462.        DB "archive",0
  463. NOTarc  
  464. PRRARNAME
  465. ;out: CY=0
  466.         call RST16
  467.         db " "
  468.        ;if 1==0
  469.        DB 1
  470. curfilenameaddr=$
  471.        DW 0;TWORK
  472.        ;endif      
  473.        DB #D,#a,0
  474.         OR A
  475.         RET
  476.  
  477. FINDFIL
  478.         ld de,(curfilenameaddr)
  479.         call openstream_file
  480.         or a
  481.         jp nz,openerror
  482.  
  483.         ld a,(filehandle)
  484.         ld b,a
  485.         OS_GETFILESIZE ;dehl=filesize
  486.        LD (lnLSW),hl
  487.        ld a,e
  488.        LD (lnHSW),A
  489.        ld a,d
  490.        LD (lnHSW+1),A
  491.        
  492.         LD HL,0
  493.        LD D,h
  494.         LD E,L
  495. SEEKst
  496. ;set position in archive file to dehl
  497.         ld (CURPOS),hl
  498.         ld (CURPOS+2),de
  499.  
  500.         ;ld de,0
  501.         ;ld hl,0 ;dehl=shift
  502.         ld a,(filehandle)
  503.         ld b,a
  504.         OS_SEEKHANDLE
  505.  
  506.        ;LD A,L
  507.        ;LD ly,a;LX,A
  508.        LD IY,DISKBUF+DISKBUFsz-1 ;TODO SEEK Єюы№ъю хёыш ъєёър эхЄ т сєЇхЁх
  509.         or a
  510.         ret
  511.  
  512. SEEKpos
  513. ;skip dehl bytes
  514.         ld a,h
  515.         or l
  516.         or d
  517.         or e
  518.         ret z
  519. SEEKpos0
  520.         rarrdbyte
  521.         dec hl
  522.         ld a,h
  523.         or l
  524.         jr nz,SEEKpos0
  525.         ld a,d
  526.         or e
  527.         dec de
  528.         jr nz,SEEKpos0
  529.         ret
  530.        
  531. LOADBLK
  532.         ;if 1==0
  533.         ld hl,(CURPOS)
  534.         add hl,bc
  535.         ld (CURPOS),hl
  536.         ld hl,(CURPOS+2)
  537.         jr nc,$+3
  538.         inc hl
  539.         ld (CURPOS+2),hl
  540.         ;endif        
  541. ;load bc bytes to de
  542.         PUSH BC
  543.         push DE
  544.        
  545. LOADBL0
  546.         ;LD A,(IX)
  547.         ;INC LX
  548.         ;CALL Z,LDAsec
  549.         rarrdbyte
  550.         LD (DE),A
  551.         INC DE
  552.         DEC BC
  553.         LD A,B
  554.         OR C
  555.         JR NZ,LOADBL0
  556.         POP HL
  557.         pop BC
  558.       ;OR A
  559.         RET
  560.  
  561.        IF crc
  562. UPCRC
  563.         PUSH BC
  564.        IF tcrc==0
  565.         LD C,(iy);(IX)
  566.         LD B,8
  567. crclp   LD A,E
  568.         XOR C
  569.         SRL C
  570.         srl H
  571.         RR L
  572.         rr D
  573.         rr E
  574.         RRA
  575.         JR NC,noxor
  576.         LD A,H
  577.         XOR #ED
  578.         LD H,A
  579.         LD A,L
  580.         XOR #B8
  581.         LD L,A
  582.         LD A,D
  583.         XOR #83
  584.         LD D,A
  585.         LD A,E
  586.         XOR #20
  587.         LD E,A
  588. noxor   DJNZ crclp
  589.        ELSE
  590.         LD B,H
  591.         ld C,L
  592.         LD A,E
  593.         XOR (iy);(IX)
  594.         LD L,A
  595.         LD H,TCRC/256
  596.         LD A,(HL)
  597.         XOR D
  598.         LD E,A
  599.         INC H
  600.         LD A,(HL)
  601.         XOR C
  602.         LD D,A
  603.         INC H
  604.         LD A,(HL)
  605.         XOR B
  606.         INC H
  607.         LD H,(HL)
  608.         ld L,A
  609.        ENDIF
  610.         POP BC
  611.         INC iy;IX
  612.         DEC BC
  613.         LD A,B
  614.         OR C
  615.         JR NZ,UPCRC
  616. UPPASS  RET
  617.        ENDIF
  618. DEHUFF
  619.         EXA
  620. DEHUFF0 ADD A,A
  621.         JR Z,NEWDEHF
  622.         JR NC,$+4 ;эюы№
  623. DEHFC   INC L  ;хфшэшЎр
  624.         INC L;HL
  625. DEHFNC  LD C,(HL)
  626.         INC L
  627.         LD H,(HL)
  628.         LD L,C
  629.        IF (rd/256)&#40
  630.         BIT 6,H
  631.        ELSE
  632.        if (rd/256)&#80
  633.         BIT 7,H
  634.        else
  635.        if (rd/256)&#20
  636.         BIT 5,H
  637.        endif
  638.        endif
  639.        ENDIF
  640.         JP NZ,DEHUFF0
  641.         EXA
  642.         RET
  643.  
  644. NEWDEHF
  645. ;?/frame
  646.         ;LD A,(IX)
  647.         ;INC LX
  648.         ;CALL Z,LDAsec
  649.         rarrdbyte
  650.        SCF
  651.         RLA
  652.         JR C,DEHFC
  653.         JP DEHFNC
  654. LDAldb0
  655. ;3t/frame
  656.         ;LD A,(IX)
  657.         ;INC LX
  658.         ;CALL Z,LDAsec
  659.         rarrdbyte
  660.        SCF
  661.         RLA
  662.         JP LDA0C
  663. LDAldb1
  664. ;4t/frame
  665.         ;LD A,(IX)
  666.         ;INC LX
  667.         ;CALL Z,LDAsec
  668.         rarrdbyte
  669.        SCF
  670.         RLA
  671.         JP LDA1C
  672. LDAldb2
  673. ;?/frame
  674.         ;LD A,(IX)
  675.         ;INC LX
  676.         ;CALL Z,LDAsec
  677.         rarrdbyte
  678.        SCF
  679.         RLA
  680.         JP LDA2C
  681. ;4 times
  682. LDA
  683.         CP 9
  684.         JR NC,lDA915
  685. ;3 times
  686. LDA18   LD B,A
  687. LDA18B
  688.       LD C,0
  689.         EXA
  690. LDA0    ADD A,A
  691.         JR Z,LDAldb0
  692. LDA0C   RL C
  693.         DJNZ LDA0
  694.         EXA
  695.         RET
  696. lDA915  SUB 8
  697. LDAB
  698.         LD B,A
  699.       LD C,0
  700.         EXA
  701. LDA1    ADD A,A
  702.         JR Z,LDAldb1
  703. LDA1C   RL C
  704.         DJNZ LDA1
  705.         LD B,C
  706.         LD C,1
  707. LDA2    ADD A,A
  708.         JR Z,LDAldb2
  709. LDA2C   RL C
  710.         JP NC,LDA2
  711.         EXA
  712. OLDdepk RET
  713.  
  714. restore
  715. ;ўЄхэшх ёхъЄюЁр destination file: restoreLAST (??? TODO) т stBUF
  716.         PUSH DE
  717. ;resec=$+1
  718. ;       LD HL,0
  719. ;        PUSH HL
  720. restoreLAST=$+1
  721.         LD DE,0
  722. ;р с√ы ыш уы■ъ? эшўхую эх яюэшьр■
  723.         LD (restoreLAST),HL
  724.        EX DE,HL
  725.         XOR A
  726.         SBC HL,DE
  727.        JR Z,restQ ;SAME SEC
  728.        ;IF border
  729.        ;LD A,2
  730.        ;OUT (-2),A
  731.        ;ENDIF
  732.         ;LD HL,stBUF
  733.         PUSH BC
  734.         push ix
  735.         push iy
  736.         ;LD BC,#105
  737.         ;CALL DOD
  738.         ld de,stBUF
  739.         ld hl,0x100
  740.         ld a,(savefilehandle)
  741.         ld b,a
  742.         OS_READHANDLE
  743.         pop iy
  744.         pop ix
  745.         POP BC
  746.        ;IF border
  747.        ;XOR A
  748.        ;OUT (-2),A
  749.        ;ENDIF
  750.       IF frmcnt
  751.       LD HL,(swaps)
  752.       INC HL
  753.       LD (swaps),HL
  754.       ENDIF
  755. restQ
  756.        if 1==0
  757.         POP HL
  758.         LD DE,stBUF
  759.         INC L
  760.         BIT 4,L
  761.         JR Z,$+4
  762.         INC H
  763.         LD L,E
  764.        LD A,H
  765.        SUB 160
  766.        JR C,$+3
  767.        LD H,A
  768.         LD (resec),HL
  769.        EX DE,HL ;??? TODO
  770.        endif
  771.  
  772.         POP DE
  773.         RET
  774.  
  775. GETPOSp
  776.         XOR A
  777.        LD E,L,L,H
  778.         LD H,A,D,A
  779.         ADD HL,HL,HL,HL,HL,HL
  780.         ADD HL,HL,HL,DE
  781.         RET
  782. ;------------------
  783.  
  784. PRHLDE
  785.         CALL PRNUM
  786.         EX DE,HL
  787.         CALL PRNUM
  788.         EX DE,HL
  789.         RET
  790. PDECPP
  791.         EXA
  792.         PUSH HL
  793.         EXX
  794.         POP HL
  795.         LD A,H
  796.         OR L
  797.         EXX
  798.         OR E,D
  799.         EX DE,HL
  800.         LD DE,DECBUF-1
  801.         JR NZ,pRDN0
  802.         LD A,"0"
  803.         LD (DE),A
  804.         DEC DE
  805. pRDN0   EXA
  806.         PUSH AF
  807. prd0
  808.         EXA
  809.         LD BC,#210A
  810.         XOR A
  811. prdDIV  RLA
  812.         SUB C
  813.         JR NC,$+3
  814.         ADD A,C
  815.         CCF
  816.         ADC HL,HL
  817.         EXX
  818.         ADC HL,HL
  819.         EXX
  820.         DJNZ prdDIV
  821.         LD C,A
  822.         OR H,L
  823.         EXX
  824.         OR H,L
  825.         EXX
  826.         LD A,"0"
  827.         JR NZ,$+4
  828.         LD A,32
  829. DECSPACE=$-1
  830.         ADD A,C
  831.         LD (DE),A
  832.         DEC DE
  833.         EXA
  834.         DEC A
  835.         JR NZ,prd0
  836.         POP AF
  837.         LD E,A
  838.        XOR A
  839.        LD D,A
  840.         LD HL,DECBUF
  841.         SBC HL,DE
  842.         RET
  843. PRDEC
  844.         EX DE,HL
  845.         LD HL,0
  846. PRDECHLDE
  847.        CALL PDECPP
  848. ;1,addr=TOKEN
  849. PRRST   LD A,(HL)
  850.         INC HL
  851.         DEC A
  852.         JR NZ,rstNat
  853.         LD E,(HL)
  854.         INC HL
  855.         LD D,(HL)
  856.         INC HL
  857.         PUSH HL
  858.         EX DE,HL
  859.         CALL PRRST
  860.         POP HL
  861.         JR PRRST
  862. rstNat  INC A
  863.         RET Z
  864.         CALL PRSYM
  865.        JR PRRST
  866.  
  867. RST16
  868.         pop hl
  869.         push af
  870.         call PRRST
  871.         pop af
  872.         jp (hl)
  873.  
  874. PRCUR
  875.         ld e,CURSORCOLOR
  876.         jr RECUR_go
  877. RECUR
  878.         ld e,COLOR
  879. RECUR_go
  880. ;        ld hl,0
  881. ;CURX=$-2
  882. ;CURY=$-1
  883. PRCURHL
  884.         push iy
  885.         push de
  886.         ex de,hl
  887.         ;OS_SETXY
  888.         pop de
  889.         OS_PRATTR
  890.         pop iy
  891.         ret
  892.  
  893. IYKEY
  894.         ;XOR A
  895.         ;LD (SCROLLINES),A
  896.        ;SCF ;Їыру с√ы эєцхэ Єюы№ъю т юфэюь ьхёЄх
  897. flgALL  EI ;/ret
  898. SUREKEY PUSH IX,HL,DE,BC
  899.        PUSH IY
  900.         CALL PRCUR
  901.         YIELDGETKEYLOOP
  902.         push af
  903.         CALL RECUR
  904.         pop af
  905.        POP IY
  906.         POP BC,DE,HL,IX
  907.         RET
  908.  
  909. PRNUM  
  910.         LD A,H
  911.         CALL PRHEX
  912.         LD A,L
  913. PRHEX  
  914.         PUSH HL
  915.         LD HL,HEXBUF
  916.         LD (HL),A
  917.         CALL HEXDIG
  918.         call HEXDIG
  919.         POP HL
  920.         RET
  921. HEXDIG  
  922.         XOR A
  923.         RLD
  924.         CP 10
  925.         CCF
  926.         ADC A,"0"
  927.         DAA
  928. PRSYM  
  929.         push AF
  930.         push BC
  931.         push DE
  932.         push HL
  933.         PUSH IX
  934.         push iy
  935.         PRCHAR;CALL PR64
  936.         pop iy
  937.         pop IX
  938.         pop HL
  939.         pop DE
  940.         pop BC
  941.         POP AF
  942.         RET
  943.  
  944. ;HL'HL/DE'DE*100%
  945. PERCENT
  946.         EXX
  947.          LD A,H
  948.          OR L
  949.         EXX
  950.         JR NZ,perN0 ;>ffff
  951.         LD A,H,H,L
  952.         EXX
  953.          LD L,A
  954.         EXX
  955.         LD A,D,D,E
  956.         EXX
  957.          LD E,A
  958.         EXX
  959. perN0  LD BC,#2164
  960.        XOR A
  961. perDIV RLA
  962.        SUB C
  963.        JR NC,$+3
  964.        ADD A,C
  965.        CCF
  966.        ADC HL,HL
  967.        EXX
  968.         ADC HL,HL
  969.        EXX
  970.        DJNZ perDIV
  971.         EX DE,HL
  972.        LD A,D
  973.        OR E
  974.         EXX
  975.         EX DE,HL
  976.        OR D,E
  977.         EXX
  978.        RET Z
  979.         XOR A
  980. perSUB  SBC HL,DE
  981.         EXX
  982.          SBC HL,DE
  983.         EXX
  984.         INC A
  985.         JR NC,perSUB
  986.         DEC A
  987.         CP 101
  988.         RET C
  989.         LD A,100
  990.         RET
  991.  
  992. TSTOLD
  993.         XOR A
  994.        LD (VOLFLG),A
  995.        LD (SOLFLG),A
  996.        LD (TSTARES),A
  997.         LD DE,ARCBEG
  998.         LD BC,7
  999.         CALL LOADBLK ;load bc bytes to de
  1000.         RET C
  1001.        ;LD HL,ARCBEG
  1002.         LD A,"R"
  1003.         CPI
  1004.         JR NZ,TSTRARH
  1005.         LD A,#45
  1006.         CPI
  1007.         JR NZ,TSTRARH
  1008.         LD A,#7E
  1009.         CPI
  1010.         JR NZ,TSTRARH
  1011.         LD A,#5E
  1012.         CP (HL)
  1013.         JR NZ,TSTRARH
  1014.         call RST16
  1015.         DB "old RAR"
  1016.        IF opt==0
  1017.         DB " format detected"
  1018.        ENDIF
  1019.         DB #D,#a,0
  1020.         LD A,1
  1021.         LD (TSTARES),A
  1022.         LD HL,0
  1023.        LD D,H
  1024.        ld E,L
  1025.        CALL SEEKst
  1026.        ;RET C
  1027.         SCF
  1028.         RET
  1029. TSTRARH
  1030.         LD HL,ARCBEG
  1031.         LD A,"R"
  1032.        SCF
  1033.         CPI
  1034.        RET NZ
  1035.         LD A,"a"
  1036.         CPI
  1037.        RET NZ
  1038.         LD A,"r"
  1039.         CPI
  1040.        RET NZ
  1041.         LD A,"!"
  1042.         CPI
  1043.        RET NZ
  1044.         LD A,#1A
  1045.         CPI
  1046.        RET NZ
  1047.         LD A,7
  1048.         SUB (HL)
  1049.         INC HL
  1050.         OR (HL)
  1051.        SCF
  1052.        RET NZ
  1053.         LD A,2
  1054.         LD (TSTARES),A
  1055.         LD DE,CRCA
  1056.         LD BC,13
  1057.         CALL upcrc;archead
  1058.         RET C
  1059.         LD A,(FLAGA)
  1060.         AND 1
  1061.        INC A
  1062.         LD (VOLFLG),A
  1063.        IF crc
  1064.         LD HL,-1
  1065.         LD DE,(CRCArea)
  1066.         AND A
  1067.         SBC HL,DE
  1068.         LD DE,(CRCA)
  1069.         SBC HL,DE
  1070.         JR Z,_9436
  1071.         call RST16
  1072.         DB "Archive header broken",#D,#a,0
  1073.         SCF
  1074.         RET
  1075. _9436
  1076.        ENDIF
  1077.         LD A,(FLAGA)
  1078.         AND 8
  1079.        RRCA
  1080.        RRCA
  1081.        RRCA
  1082.         LD (SOLFLG),A
  1083.        ;AND A
  1084.         RET
  1085.  
  1086. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1087. ;TWICE
  1088. ;CURPOS used only here
  1089. SCAN
  1090. ;scan archive for block type=hl
  1091.         LD (EXPTYP),HL
  1092.        
  1093.         if 1==0
  1094. SCAN0
  1095.        LD DE,CRCF
  1096.        LD BC,7
  1097.        call upcrc ;read 7 bytes
  1098.        RET C
  1099.        ;LD (CRCLO),HL
  1100.         LD DE,(SIZEF) ;from file header ;head size
  1101.        
  1102.         LD HL,7
  1103.        ;OR A
  1104.         SBC HL,DE
  1105.        CCF
  1106.         RET C ;<=7
  1107.  
  1108.        push de
  1109.        ld de,CRCF+7
  1110.        ld bc,32-7
  1111.        call addcrc ;read 32-7 bytes
  1112.        pop de
  1113.        ret c
  1114.  
  1115.         ld hl,0
  1116.  
  1117.       LD A,(FLAGF+1)
  1118.         RLA
  1119.         JR NC,nADD
  1120. ;╧юых ADD_SIZE яЁшёєЄёЄтєхЄ, Єюы№ъю хёыш (HEAD_FLAGS & 0x8000) != 0
  1121.         LD HL,(ADDSZF)
  1122.         ADD HL,DE
  1123.         LD de,(ADDSZF+2)
  1124.         jr nc,$+3
  1125.         inc de
  1126. nADD
  1127. ;dehl=add to curpos before TSTPP
  1128.  
  1129.         push hl
  1130.         LD HL,EXPTYP
  1131.         LD A,(TYPEF)
  1132.         CP (HL)
  1133.         pop hl
  1134.         JR Z,SCANREAD
  1135. SCANSKIP
  1136. ;dehl=add to curpos before TSTPP
  1137.         ld bc,32
  1138.         or a
  1139.         sbc hl,bc
  1140.         jr nc,$+3
  1141.         dec de
  1142.  
  1143.        CALL SEEKpos ;skip dehl bytes
  1144.         jr SCAN0
  1145.  
  1146.         else
  1147.        
  1148. SCAN0
  1149.         if 1==0
  1150.         LD HL,(DESCRIP+14)
  1151.         CALL GETPOSp
  1152.         PUSH HL
  1153.         LD HL,(TRSEC)
  1154.         CALL GETPOSp
  1155.         POP DE
  1156.        ;XOR A
  1157.         SBC HL,DE
  1158. ;TODO hly=current position in file
  1159.         LD E,ly;LX
  1160.         LD D,L,L,H
  1161.         LD H,A ;DEHL эрюсюЁюЄ
  1162.         LD (CURPOS),DE
  1163.         LD (CURPOS+2),HL
  1164.         endif
  1165.  
  1166.        LD DE,CRCF
  1167.        LD BC,7
  1168.        ;jr $
  1169.        call upcrc ;read 7 bytes
  1170.        RET C
  1171.        ;LD (CRCLO),HL
  1172.         LD DE,(SIZEF)
  1173.         LD HL,7
  1174.        ;OR A
  1175.         SBC HL,DE
  1176.        CCF
  1177.         RET C ;<=7
  1178.        push de
  1179.        ld de,CRCF+7
  1180.        ld bc,32-7
  1181.        call addcrc ;read 32-7 bytes ;TODO fix CRC
  1182.        pop de
  1183.        ret c
  1184. ;с√ыю: CURPOS=яючшЎш  эрўрыр чруюыютър
  1185. ;ЄхяхЁ№: CURPOS=яючшЎш  эрўрыр чруюыютър + 32
  1186.         LD HL,(CURPOS)
  1187.        ;LD DE,(SIZEF)
  1188.         ADD HL,DE
  1189.        EX DE,HL
  1190.         LD HL,(CURPOS+2)
  1191.         JR NC,$+3
  1192.         INC HL
  1193.       ;JR Z,nADD ;BLOCK #7B
  1194.         LD A,(FLAGF+1)
  1195.         RLA
  1196.         JR NC,nADD
  1197.        PUSH HL
  1198.         LD HL,(ADDSZF)
  1199.         ADD HL,DE
  1200.        EX DE,HL
  1201.        POP BC
  1202.         LD HL,(ADDSZF+2)
  1203.         ADC HL,BC
  1204. nADD
  1205.         ex de,hl
  1206.          ld bc,32
  1207.          or a
  1208.          sbc hl,bc
  1209.          jr nc,$+3
  1210.          dec de
  1211.         LD (NXTPOS),hl
  1212.         LD (NXTPOS+2),de
  1213.       CALL EOF
  1214.       RET C
  1215. _nUNE
  1216.         LD HL,EXPTYP
  1217.         LD A,(TYPEF)
  1218.         CP (HL)
  1219.         JR Z,SCANREAD
  1220. SCANSKIP
  1221.         LD HL,(NXTPOS)
  1222.        LD DE,(NXTPOS+2)
  1223.        CALL SEEKst
  1224.         JP SCAN0
  1225.       endif
  1226.  
  1227. SCANREAD
  1228. ;т√їюф шч scan
  1229.         LD HL,(NAMSIZE)
  1230.         LD DE,namln-1
  1231.         AND A
  1232.         SBC HL,DE
  1233.         ADD HL,DE
  1234.         JR C,$+3
  1235.         EX DE,HL
  1236.        ;LD (NAMSIZE),HL
  1237.         LD DE,CURFILE
  1238.         LD B,H
  1239.         ld C,L ;фышэр шьхэш Їрщыр
  1240.         CALL LOADBLK ;load bc bytes to de
  1241.         LD (DE),A;0
  1242.       IF crc==0
  1243.        OR A
  1244.        RET
  1245.       ELSE
  1246.        ;LD A,(TSTARES)
  1247.        ;CP 2 ;?
  1248.        ;JR NZ,nBROKEN
  1249.        PUSH HL
  1250.         LD HL,(CRCArea+2)
  1251.         LD DE,(CRCArea)
  1252.         ;LD BC,(NAMSIZE)
  1253.        EX (SP),iy;IX
  1254.         CALL UPCRC ;ёўшЄрхь CRC iy=CURFILE
  1255.        POP iy;IX
  1256.         LD HL,(CRCF)
  1257.         SCF
  1258.         ADC HL,DE
  1259.        CCF
  1260.        RET Z ;NC
  1261.         call RST16
  1262.         DB #D,#a,1
  1263.         DW CURFILE
  1264.         DB " bad header",#D,#a,0
  1265.         SCF
  1266.         RET
  1267.       ENDIF
  1268.      
  1269.      
  1270.  
  1271. ;CY=error
  1272. upcrc
  1273. ;de=addr, bc=size
  1274.       ;LD A,(TSTARES)
  1275.       ;DEC A
  1276.       ;SCF ;oldRAR
  1277.       ;RET Z
  1278.       IF crc==0
  1279. addcrc
  1280.        JP LOADBLK ;load bc bytes to de
  1281.       ELSE
  1282.         CALL LOADBLK ;load bc bytes to de
  1283.         RET C
  1284.         INC HL
  1285.         inc HL
  1286.        PUSH HL
  1287.         DEC C
  1288.         dec C ;2 срщЄр т эрўрых сыюър эх єўшЄ√трхь т CRC
  1289.         LD HL,-1
  1290.         ld D,H
  1291.         ld E,L
  1292. addcrcq
  1293.        EX (SP),iy;IX
  1294.         CALL UPCRC ;ёўшЄрхь CRC iy=CRCF/CRCA
  1295.        POP iy;IX
  1296.         LD (CRCArea),DE
  1297.         LD (CRCArea+2),HL
  1298.        ;AND A
  1299.         RET
  1300.  
  1301. addcrc
  1302.         CALL LOADBLK ;load bc bytes to de
  1303.         RET C
  1304.        push hl
  1305.         ld de,(CRCArea)
  1306.         ld hl,(CRCArea+2)
  1307.         jr addcrcq
  1308.       ENDIF
  1309.  
  1310. EXTRACT
  1311.        CALL PREPAR
  1312.        RET C
  1313. EXTR0
  1314.         LD HL,#8074
  1315.         CALL SCAN
  1316.        ;LD (SCANres),HL
  1317.        ;LD A,H
  1318.        ;OR L
  1319.        JP C,SHOWQUI
  1320.        IF masks
  1321.        CALL CPMASK
  1322.        JR NZ,EXnMSK
  1323.        ENDIF
  1324.         LD A,(TYPEF)
  1325.         CP #74
  1326.         JR Z,EXTR74 ;file
  1327. EXnMSK
  1328.         LD HL,(NXTPOS)
  1329.        LD DE,(NXTPOS+2)
  1330.        CALL SEEKst
  1331.         JP EXTRq
  1332.        ;jp _DEPKOK ;TODO ъръ яЁютхЁшЄ№?
  1333. EXTR74
  1334.         LD A,(FLAGF)
  1335.        RRA
  1336.        JR NC,EXnBAD
  1337.        ;LD A,(SOLFLG)
  1338.        ;OR A
  1339.        ;JR Z,EXnBAD
  1340.         call RST16
  1341.  DB "bad RAR type",0
  1342.         SCF
  1343.         RET
  1344. EXnBAD
  1345.         ;if 1==0
  1346.         LD HL,(NXTPOS)
  1347.         LD DE,(ADDSZF)
  1348.         SBC HL,DE
  1349.        EX DE,HL
  1350.        LD HL,(NXTPOS+2)
  1351.        LD BC,(ADDSZF+2)
  1352.        SBC HL,BC
  1353.        EX DE,HL
  1354.        CALL SEEKst
  1355.         ;endif ;TODO
  1356.        
  1357.         LD HL,CURFILE
  1358.         LD DE,OUTNAM
  1359.         LD BC,namln
  1360.         LDIR
  1361.        LD A,1
  1362.        LD (known),A
  1363.         LD A,(UNPVER)
  1364.         CP 13
  1365.         JR C,badver
  1366.         DEC A
  1367.         CP 20
  1368.         JR C,goodver
  1369. badver  call RST16
  1370.         DB #D,#a,"Bad method ",1
  1371.         DW CURFILE
  1372.         DB 0
  1373.        XOR A
  1374.        LD (known),A
  1375. goodver;LD A,(ATTR)
  1376.        ;BIT 3,A
  1377.        ;JP NZ,EXTRq
  1378.        ;AND 16
  1379.        ;JP NZ,EXTRq
  1380.         call RST16
  1381.         DB #D,#a,1
  1382.         DW OUTNAM
  1383.         DB "(Y,N,All)"
  1384.         DB 0
  1385.         LD HL,(UNPSIZE+2)
  1386.         LD (uNPremn+2),HL
  1387.         LD HL,(UNPSIZE)
  1388.         LD (uNPremn),HL
  1389.  
  1390.         CALL IYKEY
  1391.        cp key_esc
  1392.         JP z,SHOWQUI ;NC
  1393.         AND #DF
  1394.        LD (doSAVEk),A
  1395.         CP "N"
  1396.         JR NZ,KnN
  1397.         LD A,(FLAGA)
  1398.         AND 8
  1399.         JP Z,_DEPKOK ;not 'all'
  1400.        JR EXTRnOK
  1401. KnN     CP "A"
  1402.         JR NZ,KnALL
  1403.        LD A,201
  1404.        LD (flgALL),A
  1405. KnALL
  1406.         call SAVECREATE ;OUTNAM
  1407.  
  1408.         LD A,(METHOD)
  1409.         CP #30 ;storing
  1410.        JR NZ,NSTORE
  1411.         LD A,16
  1412.         LD (FLAGF),A
  1413.        LD HL,dd
  1414.        LD DE,dd+1
  1415.        LD BC,256
  1416.        LD (HL),8
  1417.        LDIR
  1418.        LD C,297&0xff
  1419.        LD (HL),B
  1420.        LDIR
  1421.        LD DE,299
  1422.        INC HL,HL
  1423.        LD BC,ld
  1424.        CALL MKTREE
  1425.        LD HL,(DEPADR)
  1426.        LD (stAD),HL
  1427.        LD A,(curPG)
  1428.        LD (stPG),A
  1429. NSTORE
  1430.         CALL DEPK
  1431.         call SAVECLOSE
  1432.         ;ld hl,0
  1433.         ;ld (ADDSZF),hl
  1434.         ;ld (ADDSZF+2),hl
  1435. _DEPKOK
  1436.         LD HL,(NXTPOS)
  1437.        LD DE,(NXTPOS+2)
  1438.        CALL SEEKst
  1439.        ; LD HL,(ADDSZF)
  1440.        ; LD de,(ADDSZF+2)
  1441.        ;CALL SEEKpos ;skip dehl bytes
  1442.  
  1443. EXTROK
  1444.         call RST16
  1445.         DB " Ok",0
  1446. EXTRnOK
  1447.         LD A,(known)
  1448.         OR A
  1449.         LD HL,(NXTPOS)
  1450.         LD DE,(NXTPOS+2)
  1451.        CALL Z,SEEKst
  1452. EXTRq
  1453.        CALL SCFEOF
  1454.         JP NC,EXTR0
  1455.        IF unexp
  1456.        CALL UNEXP
  1457.        ENDIF
  1458. SHOWQUI
  1459.         LD HL,(ERRORS)
  1460.         LD A,H
  1461.         OR L
  1462.         JR NZ,EXTRnAOK
  1463.         call RST16
  1464.         DB #D,#a,"All OK",0
  1465.         RET
  1466. EXTRnAOK
  1467.         call RST16
  1468.         DB #D,#a,"Total errors: ",0
  1469.         LD HL,(ERRORS)
  1470.         LD A,#10
  1471.         JP PRDEC
  1472.  
  1473. CONTENTS
  1474.        CALL PREPAR
  1475.        RET C
  1476.         call RST16
  1477.         DB "    Size Packed Ratio Date Met Ver"
  1478.         db #d,#a
  1479.         db 0
  1480. CONTENTS0;_9549
  1481.        ;CALL 8020
  1482.        ;RET NC
  1483.         LD HL,#0074
  1484.         CALL SCAN
  1485.         JP C,VOLpars
  1486.        IF masks
  1487.        CALL CPMASK
  1488.        JP NZ,CONTskip
  1489.        ENDIF
  1490.         LD A,(FLAGF)
  1491.         AND 4
  1492.        LD A,"*" ;encrypted
  1493.        JR NZ,$+4
  1494.        LD A,32
  1495.         CALL PRSYM
  1496.        ; call RST16
  1497.        ;DB 1
  1498.        ;DW CURFILE
  1499.        ;DB 0
  1500.         ;call RST16
  1501.         ;DB #D,#a,0
  1502.         LD HL,(UNPSIZE+2)
  1503.         LD DE,(UNPSIZE)
  1504.         LD A,7;unpacked size
  1505.         CALL PRDECHLDE
  1506.         LD HL,(ADDSZF+2)
  1507.         LD DE,(ADDSZF)
  1508.         LD A,7;packed size
  1509.         CALL PRDECHLDE
  1510.         call RST16
  1511.        DB " ",0
  1512.         LD A,(FLAGF)
  1513.         AND 3
  1514.         CP 3
  1515.         JR NZ,_npvnx
  1516.         call RST16
  1517. ;from prev to next vol
  1518.        DB " <->",0
  1519.         JR FILETIM
  1520. _npvnx CP 1
  1521.         JR NZ,_npv
  1522.         call RST16;from prev
  1523.        DB " <--",0
  1524.         JR FILETIM
  1525. _npv   CP 2
  1526.         JR NZ,_nnx
  1527.         call RST16;to next vol
  1528.        DB " -->",0
  1529.         JR FILETIM
  1530. _nnx    EXX
  1531.         LD HL,(UNPSIZE+2)
  1532.         LD DE,(ADDSZF+2)
  1533.         EXX
  1534.         LD HL,(UNPSIZE)
  1535.         LD DE,(ADDSZF)
  1536.         CALL PERCENT
  1537.         LD H,0,L,A
  1538.         LD A,3
  1539.         CALL PRDEC;ratio%
  1540.         call RST16
  1541.         DB "% ",0
  1542. FILETIM LD A,"0"
  1543.         LD (DECSPACE),A
  1544.         LD HL,(FTIME+2)
  1545.         LD DE,(FTIME)
  1546.         LD A,L
  1547.         AND 31
  1548.         ADD HL,HL
  1549.         add HL,HL
  1550.         add HL,HL
  1551.         LD L,A
  1552.         ld A,H
  1553.         AND #F
  1554.         LD H,A
  1555.         ld A,E
  1556.         SRL D
  1557.         RRA
  1558.         SRL D
  1559.         RRA
  1560.         SRL D
  1561.         RRA
  1562.         RRA
  1563.         RRA
  1564.         AND 63
  1565.         LD E,A
  1566.        LD A,L
  1567.         PUSH HL
  1568.         LD H,0
  1569.         LD A,2
  1570.         CALL PRDEC
  1571.         POP HL
  1572.         LD L,H
  1573.         ld H,0
  1574.         LD A,2
  1575.         CALL PRDEC
  1576.         LD A,(FTIME+3)
  1577.         SRL A
  1578.         LD L,A
  1579.         ld H,0
  1580.         LD DE,#7BC
  1581.         ADD HL,DE
  1582.         LD DE,100
  1583.         SBC HL,DE
  1584.         JR NC,$-2
  1585.         ADD HL,DE ;HL=юёЄрЄюъ mod 100
  1586.         LD A,2
  1587.         CALL PRDEC;эряхўрЄрЄ№ 2 ЎшЇЁ√
  1588.         LD A,32
  1589.         LD (DECSPACE),A
  1590.         LD A,(METHOD)
  1591.         LD (_meth),A
  1592.         call RST16
  1593.         DB " ",0,0
  1594. _meth=$-2
  1595.         LD A,(FLAGF)
  1596.         AND #E0
  1597.         CP #81
  1598.         JR NC,directory
  1599.         RLCA
  1600.         RLCA
  1601.         RLCA
  1602.        AND 7
  1603.         ADD A,"a"
  1604.         CALL PRSYM
  1605. directory call RST16
  1606.         DB " ",0
  1607.         LD HL,#2F0A
  1608.         LD A,(UNPVER)
  1609.         INC H
  1610.         SUB L
  1611.         JR NC,$-2
  1612.         ADD A,"0"+10
  1613.         LD (_96fd+2),A
  1614.         LD A,H
  1615.         LD (_96fd),A
  1616.         call RST16
  1617. _96fd  DB "0.0",0
  1618.  
  1619.         call RST16
  1620.         db " "
  1621.        DB 1
  1622.        DW CURFILE
  1623.         DB #D,#a
  1624.        DB 0
  1625.  
  1626.         LD A,(FLAGF)
  1627.        RRA
  1628.        JR C,Nfrprev
  1629.         LD HL,(volUNSZ)
  1630.         LD DE,(UNPSIZE)
  1631.         ADD HL,DE
  1632.         LD (volUNSZ),HL
  1633.         LD HL,(volUNSZ+2)
  1634.         LD DE,(UNPSIZE+2)
  1635.         ADC HL,DE
  1636.         LD (volUNSZ+2),HL
  1637.         LD HL,(pieces)
  1638.        INC HL
  1639.         LD (pieces),HL
  1640. Nfrprev LD HL,(volPKSZ)
  1641.         LD DE,(ADDSZF)
  1642.         ADD HL,DE
  1643.         LD (volPKSZ),HL
  1644.         LD HL,(volPKSZ+2)
  1645.         LD DE,(ADDSZF+2)
  1646.         ADC HL,DE
  1647.         LD (volPKSZ+2),HL
  1648. CONTskip
  1649.         LD HL,(NXTPOS)
  1650.        LD DE,(NXTPOS+2)
  1651.        CALL SEEKst
  1652.        
  1653.        ; LD HL,(ADDSZF)
  1654.        ; LD de,(ADDSZF+2)
  1655.        ;CALL SEEKpos ;skip dehl bytes
  1656.        
  1657.         CALL SCFEOF
  1658.         JP NC,CONTENTS0;_9549 ;next file
  1659. ;ърър -Єю ю°шсър? тэхчряэ√щ ъюэхЎ рЁїштр?
  1660.        IF unexp
  1661.        CALL UNEXP
  1662.        ENDIF
  1663. VOLpars
  1664.         call RST16
  1665.         DB #D,#a,0
  1666.  
  1667.        ;LD HL,(pieces+2)
  1668.        LD HL,(pieces)
  1669.        LD A,5
  1670.        CALL PRDEC
  1671.         LD HL,(volUNSZ+2)
  1672.         LD DE,(volUNSZ)
  1673.         LD A,9;17
  1674.         CALL PRDECHLDE
  1675.         LD HL,(volPKSZ+2)
  1676.         LD DE,(volPKSZ)
  1677.         LD A,9
  1678.         CALL PRDECHLDE
  1679.         call RST16
  1680.         DB " ",0
  1681.         EXX
  1682.         LD HL,(volUNSZ+2)
  1683.         LD DE,(volPKSZ+2)
  1684.         EXX
  1685.         LD HL,(volUNSZ)
  1686.         LD DE,(volPKSZ)
  1687.         CALL PERCENT
  1688.         LD H,0
  1689.         ld L,A
  1690.         LD A,3
  1691.         CALL PRDEC
  1692.         call RST16
  1693.         DB "%",#D,#a,0
  1694.         AND A
  1695.         RET
  1696.  
  1697. readerror
  1698.         call SAVECLOSE
  1699.         ;jp SPGO
  1700. SPGO
  1701.         call closestream_file
  1702. SPGO_sp=$+1
  1703.         LD SP,0;STACK;#6000
  1704. CLSGO
  1705.         ;CALL CLS
  1706.         call RST16
  1707.         ;DB "UNRAR",v1,".",v2,v3
  1708. ;        DB "A>A"
  1709. ;src=$-3
  1710. ;dst=$-1
  1711.         DB #D,#a,"Workfile"
  1712.         ;db " "
  1713. ;TWORK  DB "masm_src"
  1714.         db 0
  1715.         call PRRARNAME
  1716.         call RST16
  1717.         DB "Mask "
  1718.        db 1
  1719.        dw CURMASK
  1720.         db 0
  1721. LOOP
  1722.        LD A,251
  1723.        LD (flgALL),A
  1724.         call RST16
  1725.         DB #D,#a,">",0
  1726.         CALL IYKEY
  1727.         CP key_enter
  1728.         JR Z,CLSGO
  1729.        
  1730.         if 1==0
  1731.         LD HL,TDRIVS
  1732.         LD BC,8
  1733.         CPIR
  1734.         JR Z,loopDRV
  1735.         endif
  1736.        
  1737.         AND #DF
  1738.         CALL PRSYM
  1739.         call RST16
  1740.         DB #D,#a,0
  1741.         LD (COMSYM),A
  1742.         CP "E"
  1743.         JR Z,loopE
  1744.         CP "V"
  1745.         JR Z,loopV
  1746.         CP "Q"
  1747.         jp Z,quit
  1748.        IF masks
  1749.         CP "M"
  1750.         JP Z,loopM
  1751.        ENDIF
  1752. ;start here
  1753. loopW
  1754.         if 1==0
  1755. ;TODO
  1756.         CALL PRCAT
  1757.         JR C,CLSGO
  1758.         LD DE,TWORK
  1759.         LD BC,8
  1760.         LDIR
  1761.         endif
  1762.         JR CLSGO
  1763. loopE   CALL EXTRACT
  1764.         call closestream_file
  1765.         JR LOOP
  1766. loopV   CALL CONTENTS
  1767.         call closestream_file
  1768.         JR LOOP
  1769.        
  1770.         if 1==0
  1771. loopDRV LD A,7
  1772.         SUB C
  1773.         LD HL,src
  1774.         CP 4
  1775.         JR C,lDRVsrc
  1776.         LD HL,dst
  1777.         SUB 4
  1778. lDRVsrc ADD A,"A"
  1779.         LD (HL),A
  1780.         JR CLSGO
  1781.         endif
  1782.        
  1783. ;konec
  1784.  
  1785. GO
  1786.         ld (SPGO_sp),sp
  1787.        IFN tcrc
  1788.         LD L,A
  1789. MKTCRC0 EXX
  1790.         LD HL,0
  1791.         ld D,H
  1792.         ld E,A
  1793.         LD B,8
  1794. MKTCRC1 SRL H
  1795.         RR L
  1796.         rr D
  1797.         rr E
  1798.         JR NC,MKTCRCe
  1799.         EXA
  1800.         LD A,E
  1801.         XOR #20
  1802.         LD E,A
  1803.         ld A,D
  1804.         XOR #83
  1805.         LD D,A
  1806.         ld A,L
  1807.         XOR #B8
  1808.         LD L,A
  1809.         ld A,H
  1810.         XOR #ED
  1811.         LD H,A
  1812.         EXA
  1813. MKTCRCe DJNZ MKTCRC1
  1814.         PUSH HL
  1815.         PUSH DE
  1816.         EXX
  1817.        LD H,TCRC/256
  1818.         POP DE
  1819.         LD (HL),E
  1820.         INC H
  1821.         LD (HL),D
  1822.         INC H
  1823.         POP DE
  1824.         LD (HL),E
  1825.         INC H
  1826.         LD (HL),D
  1827.         INC L
  1828.         INC A
  1829.         JR NZ,MKTCRC0
  1830.        ENDIF  
  1831.        CALL PRAUTH;ONCE
  1832.         JP loopW
  1833.  
  1834. ;TODO
  1835. p48
  1836.         EXX
  1837.         LD H,D
  1838.         ld L,E
  1839.         LD BC,(disp)
  1840.         LD A,(curPG)
  1841.         SBC HL,BC
  1842.         SET 7,H
  1843. p48sz=$-p48
  1844.  
  1845. PRAUTH
  1846.         call RST16
  1847.         ;DB "UNRAR",v1,".",v2,v3,"lite",#D,#a
  1848.         db "v = view, e = extract, m = set mask, q = quit"
  1849.         ;DB "4=48",#D,#a
  1850.         ;DB "other keys=1M"
  1851.         db 0
  1852.         if 1==0
  1853.         CALL IYKEY
  1854.         OR 32
  1855.         CP "4"
  1856.         JR NZ,Npatch48
  1857.        LD HL,GPmem+GPmemsz-p48sz
  1858.        LD (GPaddrpatch),HL
  1859.        EX DE,HL
  1860.         LD HL,p48
  1861.         LD BC,p48sz
  1862.         LDIR
  1863.        LD A,201
  1864.        LD (OUTME),A
  1865.        ;LD (hobetasym),A ;no hobeta
  1866.         xor a
  1867.        JR patch2
  1868.        endif
  1869. Npatch48
  1870.         LD C,64;64-2;+1 ;ўшёыю ёЄЁрэшЎ ярь Єш?
  1871.         LD A,C
  1872.         LD (_p1+1),A ;шчэрўры№эю Єрь INITIALMEMPAGES;6
  1873. patch2
  1874.         LD (_4+1),A
  1875.         LD (_3+1),A
  1876.         LD (_5+1),A
  1877.         ;LD (_6+1),A
  1878.        LD (L_pg+1),A
  1879.         NEG
  1880.         LD L,A
  1881.         ld H,-1
  1882.         INC HL
  1883.         dup 6
  1884.         add hl,hl
  1885.         edup
  1886.         LD DE,THEEND/256-256
  1887.         ADD HL,DE
  1888.         LD (_2+1),HL
  1889.         RET
  1890.  
  1891.         ;DISPLAY /T,konec,"(",CODETOP,")"
  1892.