Subversion Repositories NedoOS

Rev

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

  1. ;ramdisk=1
  2. sureLE=0
  3. pakto=#C000 ;можно урезать (потом уходит в >0, что интерпретируется как pak9+)
  4. CATBUF=#8000
  5. CURBUF=#8900
  6. CATGFX=#8A00
  7. TCRC=#5000
  8. svbfsz=#200
  9. sets=17
  10. pgTEXT=#10
  11. pgLZ=#11
  12. ;коды Хаффмана<<:+#200/#400 (H/L)
  13. ldbit=#4000 ;кратно 512!
  14.         ;DISPLAY /T,ldbit,"..",ldbit+#5FF
  15. bitlens=ldbit+#600;сколько листьев в ярусе
  16.         ;DISPLAY /T,bitlens,"..",bitlens+#FF
  17.  
  18. bdbit=bitlens+#100
  19.         ;DISPLAY /T,bdbit,"..",bdbit+#2FF
  20.  
  21. huff=bdbit
  22. ;узлы (frq,adrA(L))
  23. ;adrB=adrA+4 (если это не литерал)
  24. ;H,L!
  25. ;max=595
  26. ;+еще 1 до переноса
  27. ;+еще 1 для признака конца НЕЗАНЯТЫХ (-1)
  28. huffend=597*4+huff
  29. lens=-95*4+huffend-298-48-28
  30.         ;DISPLAY /T,lens
  31.  
  32. ;отсортированы по возрастанию frq
  33. frqs=huffend ;декрементированные
  34.         ;DISPLAY /T,frqs,">=#5000"
  35. frqend=298*2+frqs
  36. frq2end=298*4+1+frqs
  37.         ;DISPLAY /T,frq2end
  38.  
  39. ;коды Хаффмана<<:+#100/#200 (H/L)
  40. ddbit=(frq2end+255)/256*256
  41. ddfrq=ddbit
  42. ddfrqend=ddbit+#300 ;сколько точно??? TODO
  43.         ;DISPLAY /T,ddbit,"..",ddfrqend-1
  44. LZCPtab=#5800;ddbit+256
  45. rdbit=ddbit+48 ;литералы 48..75
  46. rdfrq=ddfrq+96 ;!
  47.  
  48. OUTNAM
  49.         db "mynewrar.rar",0 ;TODO сгенерировать из ARCNAME
  50. ARCNAME;=#5CDD
  51.         db "mynewrarrar"
  52. ;filez=fout-512
  53. filez=#5D3B
  54. ;4 б/файл: paksz,unpsz
  55.  
  56. ;from=-MAX..XXXX
  57. ENTRCOP=23698 ;16 bytes
  58. ;ключи: 11bit
  59. keys=#4000 ;делится на 512!
  60. keymask=7
  61. ;переходы по ключам: pg3,4,6,7
  62.  
  63. ;todo:read arc AFTER lz&huf constr
  64. ;todo:файл резать по переполнению lz buf
  65. ;todo:грузить 2ю часть файла во весь буфер
  66. begin=#60D6+16 ;16=запас на левые досы
  67. ;em3d13=1
  68. ;h18=1;глючит выгрузка по 2 сект.на др.диск(496 в GO лечит?)
  69. dolds=0;1 ;коды повтора смещений (невыгодные)
  70. nastr=1 ;+174
  71. ;v1="3
  72. ;v2="3
  73. ;cache=1
  74. adir=30 ;можно ввести название директории (без \), если нажать A/C с Caps Shift
  75. k256=0;#56 ;1 pg keys winpgs=52..55
  76. k3b=1 ;3bytes keys
  77. filter=1
  78. fast0s=8 ;-0.1%
  79. fastCPIQ=1;0 ;+18
  80. fastTREE=1;1 ;+9
  81. fastWRI=1
  82. skipnotree=1
  83. ;flash=1
  84. ;panel=1
  85. zac=0 ;зачерк
  86. ;qc=1 ;+19
  87. ay=1
  88.  
  89. opt2s=0;1&ramdisk
  90.  
  91. ;RELDRV
  92. ;       LD (DRVLET),A
  93. RELOAD
  94.         LD SP,STACK
  95.        CALL OUTpgTEXT
  96.       ;A=16
  97.        IF ay
  98.         LD HL,AYREGE
  99.         LD D,14
  100. AY0     LD BC,-3
  101.         DEC D
  102.         DEC HL
  103.         OUT (C),D
  104.         LD B,#BF
  105.         LD A,(HL)
  106.         OUT (C),A
  107.         jr NZ,AY0
  108.        ELSE
  109.         OUT (-2),A
  110.        ENDIF
  111.         ;EI
  112.        ;HALT
  113.        ;CALL 8020
  114.        ;JNC $-4
  115.        LD DE,0
  116.        LD (selAsz),DE
  117.         ;LD HL,CATBUF
  118.         ;LD BC,#905
  119.         ;CALL DOS
  120.        XOR A
  121.        LD (WYBRA),A
  122.        IF adir
  123.        LD HL,fdir
  124.        LD (Lfname),HL
  125.        ENDIF
  126. ;        LD HL,(CURENTR)
  127. ;        LD DE,ENTRCOP
  128. ;        LD B,16
  129. ;CP0     LD A,(DE)
  130. ;        CP (HL)
  131. ;        INC HL
  132. ;        inc DE
  133. ;        jr NZ,$+4
  134. ;        DJNZ CP0
  135.         LD HL,CATGFX
  136.        ;jr Z,NOINCAT
  137.         LD DE,CATBUF
  138.         LD (CURENTR),DE
  139.         XOR A
  140.         LD (CURCATY),A
  141.         LD (CATTOP),HL
  142. ;NOINCAT
  143.         PUSH HL
  144.        ;LD DE,CATGFX+1
  145.        ld d,h
  146.        ld e,l
  147.        inc de
  148.         LD B,+(128*#50+1)/256 ;0.28
  149.        LD (HL),L
  150.        LDIR
  151.        ;CALL CLSA0
  152.         LD HL,CATBUF
  153.         POP DE
  154.        ;LD C,0
  155. PRCAT0  LD A,(HL)
  156.         OR A
  157.         jr Z,PRCATQ
  158.         PUSH BC
  159.         LD B,8
  160. PRCAT1 ;LD A,(HL)
  161.        ;INC HL
  162.         CALL PRGFXHL
  163.         INC DE
  164.         DJNZ PRCAT1
  165.        INC E
  166.        ;LD A,(HL)
  167.         CALL PRGFXHL
  168.        DEC E
  169.         DEC HL
  170.         LD A,(HL)
  171.         INC HL
  172.         INC HL
  173.         inc HL
  174.         LD C,(HL)
  175.         INC HL
  176.         LD B,(HL)
  177.         INC HL
  178.         CP "B"
  179.         jr Z,PRCHOB
  180.         DEC BC
  181.         INC B
  182.         LD A,(HL)
  183. PRCHOB  CP B
  184.         LD A,"$"
  185.         CALL NZ,PRGFX
  186.         INC HL
  187.         inc HL
  188.         inc HL
  189.         POP BC
  190.         LD A,E
  191.         ADD A,#50-8
  192.         LD E,A
  193.         jr NC,$+3
  194.         INC D
  195.         INC C
  196.         JR PRCAT0
  197. SELHEX
  198.         LD DE,PRNUM
  199.         LD A,(DE)
  200.         XOR 62^24
  201.         LD (DE),A
  202.        ;JP REFRESH
  203. PRCATQ
  204. REFRESH
  205.         ;CALL PANEL
  206.         LD DE,#4016;7
  207.         LD BC,(CATBUF+#8E5) ;free
  208.         CALL PRNUM
  209.         LD E,#10
  210.         LD HL,TMENU
  211.         CALL PRTEXT
  212.         LD DE,#4001
  213. DRVLET=$+1
  214.         LD A,0
  215.         ADD A,"A"
  216.         CALL PRTHI
  217.         LD A,":"
  218.         CALL PRTHI
  219.         LD B,11
  220.         LD HL,CATBUF+#8F5
  221. DISNM0  LD A,(HL)
  222.         INC HL
  223.         ADD A,A
  224.         jr Z,DISNMQ
  225.         PUSH AF
  226.        ;SRL A
  227.        RRA
  228.         CALL PRTHI
  229.         POP AF
  230.         jr C,DISNMQ
  231.         DJNZ DISNM0
  232. DISNMQ
  233.        IF nastr
  234.         CALL PRSET
  235.        ENDIF
  236.         LD HL,CPn
  237.         LD (HL),"n"
  238.         LD HL,ADDloop
  239.         LD (ADDjpnz),HL
  240. OLDENTR
  241. CURENTR=$+1
  242.         LD HL,CATBUF
  243. CURCATY=$+1
  244.         LD B,0 ;Y
  245.       ;HL=cur dir entry adr
  246. PRHEAD
  247.         CALL PRHEADP
  248. SELFIL0
  249.         LD (CURENTR),HL
  250.         LD A,B
  251.         LD (CURCATY),A
  252.        LD C,#78
  253.        CALL PRCUR
  254.         PUSH BC,HL
  255.         LD DE,#5010
  256.         CALL PRFN
  257.         LD E,#30
  258.         DEC L,L
  259.         LD C,(HL)
  260.         INC L
  261.         LD B,(HL)
  262.         PUSH HL
  263.         CALL PRNUM
  264.         POP HL
  265.         LD A,","
  266.         CALL PRTHI
  267.         INC L
  268.         LD C,(HL)
  269.         INC L
  270.         LD B,(HL)
  271.         PUSH HL
  272.         CALL PRNUM
  273.         POP HL
  274.         LD E,#56
  275.         INC L
  276.         LD L,(HL)
  277.         ld H,0
  278.        LD (selfsz),HL
  279.         CALL PRNUM3
  280. selAsz=$+1
  281.        LD HL,0
  282.        LD E,#D6
  283.        CALL PRNUM4
  284.         POP HL
  285.         PUSH HL
  286.        ;HALT
  287.         LD DE,ENTRCOP
  288.         LD BC,16
  289.         LDIR
  290. CATTOP=$+1
  291.         LD HL,0
  292.         CALL VIEGFX
  293.         POP HL,BC
  294.         CALL IYKEY
  295.         LD C,7
  296.         CALL PRCUR
  297.         CP 32
  298.         jr NZ,SELNSPC
  299.        PUSH HL
  300. SELSPC
  301.        IF zac
  302.         LD C,40
  303.        ELSE
  304.         LD C,0
  305.        ENDIF
  306.         CALL CAT2GFX
  307.        IF zac
  308.         LD E,L
  309.         ld D,5
  310.         LD A,(DE)
  311.         RRA
  312.         LD DE,10
  313.         jr C,$+5
  314.         LD DE,-10
  315.         RRA
  316.         jr C,$+3
  317.         SBC HL,DE
  318.         AND 3
  319.         ADD A,3
  320.         LD LX,A
  321.         LD HX,LX
  322.         LD C,10
  323.        ELSE
  324.         LD C,80
  325.        ENDIF
  326. WYBINV0 LD A,(HL)
  327.         CPL
  328.         LD (HL),A
  329.         INC HL
  330.        IF zac
  331.         DEC HX
  332.         jr NZ,WYBINVN
  333.         LD HX,LX
  334.         ADD HL,DE
  335.        ENDIF
  336. WYBINVN DEC C
  337.         jr NZ,WYBINV0
  338.        POP DE
  339.        PUSH DE
  340.         CALL WYBPP
  341.        jr Z,WYBY
  342.       ;такой файл не помечали
  343. WYB0Q   LD HL,WYBRA
  344.         LD A,(HL)
  345.         INC (HL)
  346.         ADD A,A
  347.         ADD A,0xff&((filez+1)/2)
  348.         LD L,A
  349.         ADC A,+(filez+1)/512
  350.         SUB L
  351.         LD H,A
  352.         ADD HL,HL
  353.         LD (HL),D
  354.         DEC HL
  355.         LD (HL),E
  356.         JR WYBYOK
  357. SELNSPC
  358.         CP 13
  359.         jr NZ,SELNENT
  360.        PUSH HL
  361.         LD C,8
  362.         CALL CAT2GFX
  363.         EX DE,HL
  364.         LD A,"$"
  365.         CALL PRGFX
  366.        POP DE
  367.        PUSH DE
  368.        CALL WYBPP
  369.        EX DE,HL
  370.        jr NZ,SELSPC
  371.         JR WYBYOKN
  372.       ;снять пометку
  373. WYBY     EX DE,HL
  374.          LD HL,WYBRA
  375.          DEC (HL)
  376.          LD H,D
  377.          ld L,E
  378.         DEC DE
  379.         INC HL,HL,HL
  380. WYBY0
  381.        DUP 4
  382.         LDI
  383.         INC BC
  384.        EDUP
  385.         DEC C
  386.         jr NZ,WYBY0
  387. WYBYOK
  388. selfsz=$+1
  389.        LD DE,0
  390.        LD HL,(selAsz)
  391.        jr NZ,$+6
  392.        SBC HL,DE
  393.        JR $+3
  394.        ADD HL,DE
  395.        LD (selAsz),HL
  396. WYBYOKN
  397.         CALL PRHEADP
  398.        POP HL
  399. SELDOWN LD DE,16
  400.         ADD HL,DE
  401.        ;A<>0
  402.         XOR A
  403.         OR (HL)
  404.         JP Z,OLDENTR
  405.         INC B
  406.         LD A,B
  407.         CP 22 ;HGT
  408.         jr NZ,STLFIL0
  409.         DEC B
  410.         LD E,#50
  411.         JR SELFUDM
  412. SELNENT
  413.         SUB 11
  414.         jr NZ,SELFnU
  415.         LD DE,-16
  416.         ADD HL,DE
  417.         LD A,H
  418.         CP CATBUF/256
  419.         JP C,OLDENTR
  420.         DEC B
  421.         JP P,SDLFIL0
  422.         INC B
  423.         LD DE,-#50
  424.         JR SELFUDM
  425. SELFILN SBC HL,DE
  426. STLFIL0 JR SDLFIL0
  427. SELFnU
  428.         INC A
  429.         jr Z,SELDOWN
  430.         INC A
  431.         jr NZ,SELFnR
  432.         LD A,22*2-1
  433.         SUB B
  434.         LD C,A
  435.         XOR A
  436.         LD DE,16
  437. SELFR0  ADD HL,DE
  438.         CP (HL)
  439.         jr Z,SELFgE
  440.         DEC C
  441.         jr NZ,SELFR0
  442.         LD D,A
  443.         LD A,22-1
  444.         SUB B
  445.         LD E,A
  446.        INC A
  447.        CALL SELpppp
  448.         LD DE,22*#50
  449. SELFUDM PUSH HL
  450.         LD HL,(CATTOP) ;адрес графики начала видимой части каталога
  451.         ADD HL,DE
  452.         LD (CATTOP),HL
  453.         POP HL
  454.         JR SDLFIL0
  455. SELFgE  LD HL,(CURENTR)
  456. SELFgE0 LD DE,16
  457.         ADD HL,DE
  458.         LD A,(HL)
  459.         SBC HL,DE
  460.         OR A
  461.         jr Z,SDLFIL0
  462.         ADD HL,DE
  463.         INC B
  464.         LD A,B
  465.         CP 22
  466.         jr NZ,SELFgE0
  467.         DEC B
  468.         LD E,#50
  469.         PUSH HL
  470.         LD HL,(CATTOP)
  471.         ADD HL,DE
  472.         LD (CATTOP),HL
  473.         POP HL
  474.         JR SELFgE0
  475. SELFnR
  476.         INC A
  477.         jr NZ,SELFnL
  478.         LD DE,-22*16
  479.         ADD HL,DE
  480.         PUSH HL
  481.         LD E,B
  482.         ld D,A
  483. SELpppp
  484.         EX DE,HL
  485.         add hl,hl
  486.         add hl,hl
  487.         add hl,hl
  488.         add hl,hl
  489.         EX DE,HL
  490.         SBC HL,DE
  491.        OR A
  492.        RET NZ
  493.         LD A,H
  494.         CP CATBUF/256
  495.         POP HL
  496.         LD DE,-22*#50
  497.         jr NC,SELFUDM
  498.         LD HL,CATGFX
  499.         LD (CATTOP),HL
  500.         LD HL,CATBUF
  501.         LD B,L;0
  502. SDLFIL0 JP SELFIL0
  503. SELFnL
  504.         INC A
  505.         JP Z,SELHEX
  506.          SUB -7
  507.          OR 32
  508.         CP "p"
  509.         JP Z,SELFILT
  510.         CP "c"
  511.         JP Z,SELCREA
  512.          CP "n"
  513.          JP Z,SELCREA
  514.         CP "a"
  515.         JP Z,SELADD
  516.        CP "s"
  517.        JP Z,SELSEP
  518.        CP "k"
  519.        jr NZ,SELFINk
  520.         LD DE,dicszM
  521.         LD A,(DE)
  522.         ADD A,A
  523. ;0=>0, -1=>-2, -#80=>0
  524.         jr NZ,SELkA2
  525.         jr C,SELkA2
  526.         LD A,-4
  527. SELkA2  LD (DE),A
  528.         NEG
  529.         RRCA
  530.         RRCA
  531.         LD C,47
  532.         INC C
  533.         SUB 10
  534.         jr NC,$-3
  535.         ADD A,10+"0"
  536.         LD DE,tKB+1
  537.         LD (DE),A
  538.         DEC DE
  539.         LD A,C
  540.         LD (DE),A
  541.         JP REFRESH
  542. SELFINk
  543.         CP "q"
  544.         jr NZ,SELNQUI
  545.         QUIT
  546. SELNQUI
  547.         CP "m"
  548.         jr Z,SELMET
  549.         CP "r"
  550.         jr Z,SELRAR
  551.        IF dolds
  552.        CP "+"
  553.        jr Z,SELdolds
  554.        ENDIF
  555.        IF nastr
  556.         CP "f"
  557.         jr Z,SELFINE
  558.        ENDIF
  559.         CP "h"
  560.         jr Z,SELHEA
  561.         ;LD E,"A"
  562.         ;CP "!"
  563.         ;jr Z,SELDEST
  564.         ;INC E
  565.         ;CP "@"|32
  566.         ;jr Z,SELDEST
  567.         ;INC E
  568.         ;SUB "#"
  569.         ;jr Z,SELDEST
  570.         ;INC E
  571.         ;DEC A
  572.         ;jr Z,SELDEST
  573.         ;SUB "1"-"$"
  574.         ;CP 4
  575.         ;JP C,RELDRV
  576.         JP SELFIL0
  577. ;SELDEST LD A,E
  578. ;        LD (TDEST),A
  579. ;        JP PRHEAD
  580. SELMET
  581.         LD DE,tmethod
  582.        PUSH HL
  583. Ptmets=$+1
  584.         LD HL,tmets
  585.         BIT 7,(HL)
  586.        jr Z,$+5
  587.         LD HL,tmets
  588.         LD C,H
  589.        LDI
  590.        LDI
  591.         LD DE,LEflag
  592.        LDI
  593.         LD DE,FMETH
  594.        LDI
  595.         LD (Ptmets),HL
  596.        POP HL
  597.         JP REFRESH
  598. SELRAR
  599.         LD DE,extext
  600.         LD A,(DE)
  601.         XOR "z"^"a"
  602.         LD (DE),A
  603.         INC DE
  604.         LD A,(DE)
  605.         XOR "x"^"r"
  606.         LD (DE),A
  607.         JP REFRESH
  608.        IF dolds
  609. SELdolds
  610.         LD DE,doldson
  611.         LD A,(DE)
  612.         XOR " "^"+"
  613.         LD (DE),A
  614.         JP REFRESH
  615.        ENDIF
  616. SELHEA
  617.         LD DE,THEADON
  618.         LD A,(DE)
  619.         XOR "n"^"f"
  620.         LD (DE),A
  621.         INC DE
  622.         LD A,(DE)
  623.         XOR " "^"f"
  624.         LD (DE),A
  625.         JP PRHEAD
  626.        
  627.        IF nastr
  628. SELFINE
  629. SELFINY=$+1
  630.         LD E,0 ;Y
  631. SELFIN0
  632.         LD A,E
  633.        LD (SELFINY),A
  634.         ADD A,A
  635.         add A,A
  636.         add A,A
  637.         ADD A,36
  638.         LD C,#1C*8
  639.         CALL 8880
  640.         LD (HL),#3C;H
  641.        CALL IYKEY
  642.         LD D,0
  643.         LD (HL),D
  644.         LD HL,SETS
  645.         ADD HL,DE
  646.         add HL,DE
  647.        ;CP 13
  648.        ;JP Z,OLDENTR
  649.        LD BC,SELFIN0
  650.        PUSH BC
  651.         LD C,(HL)
  652.         INC HL
  653.         LD B,(HL)
  654.         SUB 8
  655.         jr NZ,FINnL
  656.         LD A,(BC)
  657.         CP #80
  658.        RET Z
  659.         PUSH BC
  660.         LD HL,TSETMAY
  661.         CPIR
  662. FINLQ   POP BC
  663.         LD A,(HL)
  664.         LD (BC),A
  665. PRSET
  666.         PUSH DE
  667.         LD HL,#589C
  668.         LD DE,29
  669.         LD BC,sets*256+#17
  670. PRSET0  LD (HL),C
  671.         INC L
  672.         LD (HL),C
  673.         INC L
  674.         LD (HL),C
  675.         INC L
  676.         LD (HL),C
  677.         ADD HL,DE
  678.         DJNZ PRSET0
  679.         LD DE,#409C
  680.         LD HL,SETS
  681.        ;LD C,sets
  682. PRSET1
  683.         CALL PRTHI32
  684.        ;PUSH BC
  685.         LD C,(HL)
  686.         INC HL
  687.         LD B,(HL)
  688.         LD A,(BC)
  689.        ;POP BC
  690.         CALL PRHEX
  691.         CALL PRTHI32
  692.         DEC E,E,E,E
  693.         CALL NXTLIN
  694.         INC L
  695.        ;DEC C
  696.         jr NZ,PRSET1
  697.         POP DE
  698.         RET
  699. FINnL   DEC A
  700.         jr NZ,FINnR
  701.         LD A,(BC)
  702.         CP #FF
  703.        RET Z
  704.         PUSH BC
  705.         LD HL,TSETMAY
  706.         CPIR
  707.         DEC HL,HL
  708.         JR FINLQ
  709. FINnR   DEC A
  710.         jr NZ,FINnD
  711.         LD A,sets-1
  712.         CP E
  713.        RET Z
  714.         INC E
  715.        RET
  716. FINnD  DEC A
  717.        JP NZ,RELOAD
  718.         CP E
  719.        RET Z
  720.         DEC E
  721.        RET
  722.        ENDIF
  723. WYBPP
  724. WYBRA=$+1
  725.         LD C,0
  726.         LD A,C
  727.        ;OR A
  728.        ;JZ WYB0Q
  729.        SUB 1
  730.        RET C
  731.         LD HL,filez
  732. WYB0    LD A,(HL)
  733.         INC HL
  734.         CP E
  735.         jr NZ,WYBN
  736.         LD A,(HL)
  737.         CP D
  738.        ;JZ WYBY
  739.        RET Z
  740. WYBN    INC HL,HL,HL
  741.         DEC C
  742.         jr NZ,WYB0
  743.        INC C
  744.        RET
  745.  
  746. ;separate files pack
  747. SELSEP
  748.         CALL SOZDWYB
  749.         LD HL,SEPloop
  750.         LD (ADDjpnz),HL
  751. SEPloop
  752.       LD HL,4
  753.       LD (filezsz),HL ;чтоб не делать packlist
  754.         CALL OUTpgTEXT ;вплоть до DOS в LZ
  755.        IF ay==0
  756.         OUT (-2),A
  757.        ENDIF
  758.        PUSH AF
  759.         ;CALL GETfCUR ;hl=archive name
  760.         SET 7,H ;skip hob.flag
  761.         JR SEPlopU
  762.        
  763. ;create rar
  764. SELCREA
  765. ;a='n' (new)/'c' (create)
  766.        PUSH AF
  767.         ;PUSH HL
  768.         ;CALL SOZDWYB ;если файлы не выбраны, то выбрать текущий (hl)
  769.           ld hl,WYBRA
  770.           ld (hl),1
  771.         ;POP HL
  772. SEPlopU ;LD DE,ARCNAME
  773.         ;LD BC,8
  774.         ;LDIR
  775.         ld hl,ARCNAME+8;EX DE,HL
  776.        LD A,(THEADON)
  777.        CP "n"
  778.        LD (HL)," "
  779.        jr NZ,$+4 ;no rar header
  780.         LD (HL),"r"
  781.         ;CALL CON1NAM ;включает tosave, исправляет имя
  782.         ;TODO скопировать имя из (curfilenameaddr) в fdir
  783.         ;jr $
  784.         ld hl,(curfilenameaddr)
  785.          inc hl
  786.          ld a,(hl)
  787.          cp ':'
  788.          inc hl
  789.          jr z,$+4
  790.           dec hl
  791.           dec hl
  792.          ld a,(hl)
  793.          cp '/'
  794.          jr nz,$+3
  795.          inc hl
  796.         ld de,fdir
  797.         call strcopy
  798.         call setfilenamelen
  799.        POP AF
  800.        PUSH AF
  801.        ;CP pgTEXT ;separate(после OUTpgTEXT)
  802.        PUSH BC,DE,HL
  803.         ;LD C,#12 ;del
  804.       PUSH AF
  805.        ;CALL NZ,DOD
  806.         CALL PKST ;установить hl', de'
  807.        LD HL,(extext);"zx"
  808.       POP AF
  809.       ;jr Z,CRyOF ;separate
  810.       LD A,(THEADON)
  811.       CP "n"
  812.       jr Z,CRnOFF1
  813. ;no rar header
  814.       LD A,(WYBRA)
  815.       DEC A
  816.       jr NZ,$+5 ;TODO зачем???
  817. CRyOF LD HL,(unpsz)
  818. CRnOFF1
  819.        LD (ARCNAME+9),HL
  820.         ;LD A,46
  821.         ;LD (rrrE),A ;ini ext
  822.         ;CALL READs8
  823.         ;LD HL,(s8+#E1);1st free
  824.        ;LD (SAVE1st),HL
  825.  
  826. ;TODO ARCNAME->OUTNAM      
  827.        call SAVECREATE ;OUTNAM=name 8.3
  828. ;a=1: file exists, add to end
  829.        dec a
  830.        jr z,CREAfil ;don't add rar header
  831.        
  832.        LD A,(THEADON)
  833.        CP "n"
  834.        jr NZ,CREAfil ;no rar header
  835.         LD IX,RARHEAD
  836.         LD B,7
  837.         CALL BLOCK
  838.         LD IX,arhd
  839.         LD B,13-2
  840. ;B=len-2(CRC)
  841.         CALL UPCRC1
  842.         LD IX,arhd-2
  843.         LD (arhd-2),DE
  844.         LD B,13
  845.         CALL BLOCK
  846. CREAfil
  847.        POP HL,DE,BC
  848.         POP AF
  849.        CP "n";New
  850.         JP NZ,ADDend;Create
  851.         CALL SAVE_ ;flush outfile
  852.         call SAVECLOSE
  853.         JR RELOAZ
  854. SELFILT
  855.        CALL CLA ;сбрасывет lded
  856.         ;XOR A
  857.         ;CALL CONVNAM ;почему выключается tosave??? TODO
  858.        
  859. ;hl=(ADRfrom)
  860.        
  861.         CALL PKST ;установить hl', de'
  862.       ;header off
  863.         PUSH HL
  864.         LD HL,CPn
  865.         LD (HL),H ;<>#6E ;no CRC??? TODO почему???
  866.         POP HL
  867.  
  868.         CALL PACKfil
  869.         CALL QUIT_ ;печать статистики
  870.        ;CALL 8026
  871.        ;JC $-3
  872. RELOAZ  
  873.         ;jr $
  874.         ret ;JP RELOAD
  875.  
  876. SELADD
  877.         CALL SOZDWYB
  878. ADDloop
  879.         ;CALL READs8
  880.        ;LD HL,(s8+#E4) ;число файлов на диске
  881.        ; XOR A
  882.        ; CP L
  883.        ;jr Z,RELOAZ ;no archive
  884.         ;DEC L
  885.        ;LD H,A
  886.        ;ld D,H
  887.        ;ADD HL,HL,HL,HL,HL,HL,HL,HL
  888.        ;LD E,H
  889.        ;ld H,dirsec/256
  890.         ;PUSH HL
  891.        ;LD L,D
  892.         ;LD BC,#105
  893.         ;CALL DOD ;TODO
  894.         ;POP HL ;hl=дескриптор последнего архива на диске
  895.         ;LD A,(HL)
  896.         ;DEC A
  897.        ;jr Z,RELOAZ ;no archive
  898.         ;LD DE,ARCNAME
  899.         ;LD BC,11
  900.         ;LDIR
  901.         ;DEC L
  902.          ld hl,ARCNAME+8+2
  903.        LD A,"r"
  904.        CP (HL)
  905.        jr NZ,RELnrar ;rzx
  906.         DEC L
  907.        LD A,"a"
  908.        CP (HL)
  909.        jr Z,RELyrar
  910.         INC L
  911. RELnrar
  912.        LD A,(extext+1)
  913.        CP (HL)
  914.        jr NZ,RELOAZ  ;not RZX
  915.         DEC L
  916.        LD A,(extext)
  917.        CP (HL)
  918.        jr NZ,RELOAZ  ;not RZX
  919. RELyrar DEC L
  920.         ;LD A,(HL)
  921.         ;DEC A
  922.         ;CP "r"-1
  923.         ;jr NZ,$+4
  924.         ;LD A,46
  925.         ;LD (rrrE),A ;ini ext
  926.       ;узнаем длину
  927.         INC L,L,L
  928.         LD C,(HL)
  929.         INC L
  930.         LD B,(HL)
  931.         INC L
  932.         LD E,(HL) ;sectors
  933.        ;LD (SAV_a),HL
  934.        PUSH DE
  935.        PUSH BC
  936.       ;архив надо удалить
  937.        ;LD A,24
  938.        ;LD (SAV_jr),A
  939.         CALL CON1NAM
  940.        ;PUSH BC,DE,HL
  941.       ;грузим последний сектор архива
  942.         ;LD HL,(s8+#E1) ;1st free
  943.         ;DEC L
  944.         ;JP P,$+6
  945.         ;LD L,15
  946.         ;DEC H
  947.        ;LD (SAVE1st),HL
  948.         ;EX DE,HL
  949.         ;LD HL,fout
  950.         ; LD BC,#105
  951.         ;CALL DOD
  952.        ;POP HL,DE,BC
  953.         EXX
  954.        POP BC
  955.         DEC BC
  956.         LD L,C
  957.         LD H,fout/256
  958.         INC HL
  959. ;HL=fout+1..256
  960.        POP DE
  961.         DEC E
  962.         EXX
  963. ADDend  
  964.         ;jr $
  965.         ld a,(savefilehandle)
  966.         ld b,a
  967.         OS_TELLHANDLE
  968. ;out: dehl=offset
  969.         ld (recordstart),hl
  970.         ld (recordstartHSW),de
  971.  
  972.          ld de,(curfilenameaddr)
  973.          call openstream_file
  974.         CALL PACKfil
  975.          call SAVE_ ;flush outfile
  976.          push hl
  977. recordstart=$+1
  978.         ld hl,0
  979. recordstartHSW=$+1
  980.         ld de,0
  981. ;dehl=offset
  982.          call SAVEREWIND
  983.          pop hl
  984.         CALL BYTsPPPfout ;сохранить начало fout в начало файла (TODO или блока???)
  985.          call SAVECLOSE
  986.          call closestream_file
  987.          
  988.          ld hl,(curfilenameaddr)
  989.          call prtext
  990.          ld hl,tadded
  991.          call prtext
  992.          
  993.         CALL QUIT_
  994.        
  995.         if 1==0
  996. ;таблица упакованных файлов для выгрузки отдельно?
  997. fileCUR=$+1
  998.         LD HL,0;(fileCUR)
  999.         LD DE,(paksz)
  1000.         LD (HL),E
  1001.         INC HL
  1002.         LD (HL),D
  1003.         INC HL
  1004.         LD DE,(unpsz)
  1005.         LD (HL),E
  1006.         INC HL
  1007.         LD (HL),D
  1008.         INC HL
  1009.         LD (fileCUR),HL
  1010.         endif
  1011.        
  1012.         LD HL,WYBRA
  1013.         DEC (HL)
  1014. ADDjpnz=$+1
  1015.         JP NZ,ADDloop
  1016.        LD A,(THEADON)
  1017.        CP "n"
  1018.        jr Z,RELOAT
  1019. filezsz=$+1
  1020.       LD DE,0
  1021.       LD A,E
  1022.       SUB 4;паковали 1 файл=его параметры в дескрипторе "архива"
  1023.       OR D
  1024.       jr Z,RELOAT
  1025.       PUSH DE
  1026.         ;LD HL,TPLIST
  1027.         ;LD C,#13
  1028.         ;CALL DOD
  1029.         ;LD C,#12;del
  1030.         ;CALL DOD
  1031.         LD HL,filez;отсюда савить не хочт
  1032.        LD D,keys/256
  1033.        PUSH DE
  1034.        LD B,2
  1035.        LDIR ;??? TODO
  1036.        POP HL
  1037. ;filezsz=$+1
  1038. ;LD DE,0
  1039.       POP DE
  1040.         ;LD C,#B;saveC
  1041.         ;CALL DOD
  1042.        
  1043. ;TODO save file hl=addr, de=size
  1044.        
  1045. RELOAT  JP RELOAZ;RELOAD
  1046.  
  1047. ;3
  1048. CON1NAM
  1049.         ;CALL GETfCUR
  1050.          ld hl,ARCNAME
  1051.         LD A,1
  1052. CONVNAM
  1053. ;out: hl=(ADRfrom)
  1054.         LD (tosave),A
  1055.       ;CALL OUTpgTEXT
  1056.         LD BC,11
  1057.         ADD HL,BC
  1058.        ;BIT 7,H
  1059.        ;SET 7,H
  1060.         LD C,(HL)
  1061.         INC HL
  1062.         LD B,(HL) ;file length TODO
  1063.         INC HL
  1064.        LD A,(HL) ;<>0
  1065.        ;jr NZ,HOBNJR ;TODO убрать хобеты
  1066.        ; LD B,(HL)
  1067.        ; ld C,17
  1068.        ; PUSH HL
  1069.        ; PUSH HL
  1070.        ; LD HL,CNVNMHQ
  1071.        ; EX (SP),HL
  1072.        ; XOR A
  1073. ;HOBNJR  
  1074.         ;ld bc,0x100
  1075.         ;LD (unpsz),BC
  1076.  
  1077.       PUSH BC,HL
  1078.        LD E,A ;??? TODO
  1079.         RES 2,L
  1080.         DEC L
  1081.        PUSH HL
  1082.         LD BC,8
  1083. FNLEN0  DEC HL
  1084.         LD A,(HL)
  1085.         CP 32
  1086.         jr NZ,FNLENN
  1087.         DEC C
  1088.         jr NZ,FNLEN0
  1089.        INC C ;против пустого имени
  1090.        INC L
  1091. FNLENN
  1092.        IF filter==0
  1093.        PUSH BC
  1094.        LD A,".
  1095.       CPDR
  1096.       POP BC
  1097.       ENDIF
  1098.       POP HL
  1099.       IF filter==0
  1100.       JZ $+4 ;против 12.34< >
  1101.       ENDIF
  1102.       INC E
  1103.       DEC E
  1104.         PUSH HL
  1105.        PUSH DE
  1106. Lfname=$+1
  1107.        LD DE,fdir
  1108.        LD A,(HL)
  1109.        RES 3,L
  1110.       IF filter
  1111.       PUSH AF
  1112. filt0   LD A,(HL)
  1113.       LD (HL),"_"
  1114.       CP 33
  1115.       jr C,filtGOO
  1116.       CP "."
  1117.       jr Z,filtGOO
  1118.       LD (HL),A
  1119.        CP "+"
  1120.        jr Z,filtBAD
  1121.        CP 34
  1122.        jr Z,filtBAD
  1123.        CP "*"
  1124.        jr Z,filtBAD
  1125.        CP "/"
  1126.        jr Z,filtBAD
  1127.        CP 0x5c;"\"
  1128.        jr Z,filtBAD
  1129.        CP ":"
  1130.        jr C,filtGOO
  1131.        CP "@"
  1132.        jr NC,filtGOO
  1133. filtBAD LD (HL),"-"
  1134. filtGOO LDI
  1135.        JP PE,filt0
  1136.       POP AF
  1137.       ELSE
  1138.        LDIR
  1139.       ENDIF
  1140.        EX DE,HL
  1141.        POP BC
  1142.         POP DE
  1143.       jr Z,FNLyEXT
  1144.        CP " "
  1145.        jr Z,FNLnEXT
  1146. FNLyEXT LD (HL),"."
  1147.        INC HL
  1148.       INC C
  1149.       DEC C
  1150.       jr NZ,$+5
  1151.       LD (HL),"$"
  1152.       INC HL
  1153.        LD (HL),A
  1154.        INC HL
  1155.       PUSH HL
  1156.         EX DE,HL
  1157.         INC HL
  1158.         ;CALL goodH3
  1159.        LD B,(HL)
  1160.        INC HL
  1161.        LD C,(HL)
  1162.        INC HL
  1163.        POP HL
  1164.         LD A," "
  1165.         CP B
  1166.         jr Z,$+4
  1167.         LD (HL),B
  1168.         INC HL
  1169.         CP C
  1170.         jr Z,$+4
  1171.         LD (HL),C
  1172.         INC HL
  1173. FNLnEXT
  1174.        call setfilenamelen
  1175.      POP HL,BC
  1176.  
  1177.        INC L
  1178.        LD E,(HL)
  1179.        INC L
  1180.        LD D,(HL)
  1181. CNVNMUSE
  1182.         if 1==0
  1183. ;догрузить 32К
  1184.         ld bc,0x100;0x8000 ;костыль file size TODO
  1185.       DEC BC
  1186.       LD A,B
  1187.        INC B
  1188.       CP MAX/256
  1189.        INC A
  1190.        jr C,CNVNMUSEnokus
  1191.        LD BC,packfilsz;#8000 ;кусками по #8000
  1192.        ;LD (kus),BC
  1193. CNVNMUSEnokus
  1194.       SUB B
  1195.       LD (FILEremain),A ;важно 0/не0
  1196.        XOR A
  1197.        LD L,A
  1198.        SUB B
  1199.        LD H,A
  1200.       ;LD (ADRfrom),HL
  1201.       ;LD C,5 ;TODO убрать
  1202.       endif
  1203.        RET
  1204.        
  1205.        if 1==0
  1206. ;дб место под 17b заголовок с адр файла
  1207. CNVNMHQ
  1208.        EX DE,HL
  1209.        EX (SP),HL
  1210.       DEC B ;v11
  1211.        PUSH BC
  1212.        LD C,17
  1213.        LD (kus),BC
  1214.        LD BC,13
  1215.        OR A
  1216.        SBC HL,BC
  1217.        LDIR
  1218.       LD A,(HL) ;каталог там же!
  1219.       EX DE,HL
  1220.       LD (HL),B
  1221.       INC HL
  1222.       LD (HL),A
  1223.        LD DE,105
  1224.        LD L,D
  1225.        LD B,15
  1226. HOB0    LD A,(HL)
  1227.        ADD A,E
  1228.        LD E,A
  1229.        LD A,(HL)
  1230.        ADC A,D
  1231.        LD D,A
  1232.        INC HL
  1233.        DJNZ HOB0
  1234.        LD (HL),E
  1235.        INC HL
  1236.        LD (HL),D
  1237.        INC HL
  1238.        POP BC
  1239.        POP DE
  1240.        RET
  1241.        endif
  1242.  
  1243. setfilenamelen
  1244.        ld hl,fdir
  1245.        call strlen
  1246.        ;LD DE,-fdir
  1247.        ;ADD HL,DE
  1248.        LD (namsz),HL
  1249.        LD BC,32
  1250.        ADD HL,BC
  1251.        LD (fihdsz),HL
  1252.        ret
  1253.  
  1254. SOZDWYB
  1255. ;hl=адрес текущего дескриптора в CATBUF
  1256.       CALL CLA
  1257.        ;LD DE,filez
  1258.        ;ld (fileCUR),DE ;таблица упакованных файлов для выгрузки отдельно?
  1259.        LD A,(WYBRA)
  1260.        OR A
  1261.        jr NZ,SOZDWYn ;уже есть выбранные файлы
  1262.        INC A
  1263.        LD (WYBRA),A
  1264.        LD (filez),HL ;hl=адрес текущего дескриптора в CATBUF
  1265. SOZDWYn
  1266.        ADD A,A
  1267.        LD B,A ;b=selfiles*2
  1268.        ADD A,A
  1269.        LD E,A
  1270.        LD A,0
  1271.        ADC A,A
  1272.        LD D,A ;de=selfiles*4
  1273.        LD (filezsz),DE
  1274.       IF adir==0
  1275.        RET
  1276.       ELSE
  1277.        ;CALL 8026
  1278.        ;RET C
  1279.        CALL CLS
  1280.        ;LD (HL),#44
  1281.        ;LDIR
  1282. INCLX   INC B
  1283. INPUT0
  1284.        LD HL,fdir
  1285.        PUSH BC
  1286.       LD DE,#40E0
  1287.        CALL PR_B
  1288.       DEC HL
  1289.       dec E
  1290.        POP BC
  1291.       DEC E
  1292.      ;LD A,"_"
  1293.      ;CALL PRTHI
  1294.       CALL PRTHI32
  1295.        CALL IYKEY
  1296.        CP key_enter
  1297.        jr Z,INPOK
  1298.        cp 0x20
  1299.        jr C,INPDEL ;прочие системные кнопки не нужны
  1300.      ;JP M,INPUT0
  1301.       CP "/"
  1302.       jr NZ,$+4
  1303.       LD A,0x5c;"\"
  1304.        LD (HL),A
  1305.        LD A,B
  1306.        CP adir;+1
  1307.        jr NZ,INCLX
  1308. INPDEL  DJNZ INPUT0
  1309.        JR INCLX
  1310. INPOK
  1311.       LD (HL),0x5c;"\"
  1312.       INC HL
  1313.        LD (Lfname),HL
  1314.       ENDIF
  1315. CLA
  1316.        PUSH HL
  1317.        CALL CLS
  1318.        ;LD B,3
  1319.        ;LDIR
  1320.       ;LD (lded),BC ;TODO куда-то в другое место
  1321.        POP HL
  1322.        RET
  1323.  
  1324.  
  1325. CLPG
  1326.        push af
  1327.        CALL OUTME
  1328.         if 1==1
  1329.         ld hl,0xc000
  1330.         ld de,0xc001
  1331.         ld bc,0x3fff
  1332.         ld (hl),l;0
  1333.         ldir
  1334.         else ;может запортить bfxx
  1335.        LD HL,0
  1336.        LD (CLPGSP),SP
  1337.        LD SP,HL
  1338.       LD C,2
  1339.        LD B,L
  1340. CLPG0   DUP 16
  1341.        PUSH HL
  1342.        EDUP
  1343.        DJNZ CLPG0
  1344.       DEC C
  1345.       JR NZ,CLPG0
  1346. CLPGSP=$+1
  1347.        LD SP,0
  1348.         endif
  1349.        pop af
  1350.        RET
  1351.  
  1352. IYKEY
  1353.        PUSH HL
  1354.        ;LD HL,23560
  1355.        ;LD (HL),H
  1356.        ;LD A,(HL)
  1357.        ;CP H
  1358.        ;jr Z,$-2
  1359.        push bc
  1360.        push de
  1361.        push ix
  1362.        push iy ;TODO надо ли альтернативные?
  1363.        YIELDGETKEYLOOP
  1364.        pop iy
  1365.        pop ix
  1366.        pop de
  1367.        pop bc
  1368.        POP HL
  1369.        RET
  1370. ;2
  1371. UPCRC1
  1372.        LD HL,-1
  1373.        ld D,H
  1374.        ld E,L
  1375. UPCRC   PUSH BC
  1376.        LD C,(IX)
  1377.        CALL crcpp
  1378.        POP BC
  1379.        INC IX
  1380.        DJNZ UPCRC
  1381. INVCRC  CALL $+3
  1382.        EX DE,HL
  1383. INVHL   LD A,H
  1384.        CPL
  1385.        LD H,A
  1386.        LD A,L
  1387.        CPL
  1388.        LD L,A
  1389.        RET
  1390. crcpp
  1391.        LD B,8
  1392. crclp   LD A,E
  1393.        XOR C
  1394.        SRL C
  1395.        srl H
  1396.        RR L
  1397.        rr D
  1398.        rr E
  1399.        RRA
  1400.        jr NC,noxor
  1401.        LD A,H
  1402.        XOR #ED
  1403.        LD H,A
  1404.        LD A,L
  1405.        XOR #B8
  1406.        LD L,A
  1407.        LD A,D
  1408.        XOR #83
  1409.        LD D,A
  1410.        LD A,E
  1411.        XOR #20
  1412.        LD E,A
  1413. noxor   DJNZ crclp
  1414.        RET
  1415.  
  1416.       IF ay
  1417.        DW 300,400,500
  1418.        DB 0
  1419.        DB 7<3
  1420.        DB 16,16,16
  1421.        DW 6700
  1422.        DB 1
  1423. AYREGE
  1424.       ENDIF
  1425. tmets
  1426.        DB "fa",24,"4"
  1427.        DB "pu",24,"4"
  1428.        DB "be",40,"5"
  1429.        DB -1
  1430.       IF nastr
  1431. TSETMAY=$-1
  1432.        DB #FE,#FD,#FC,#FA,#F8,#F4,#F0
  1433.        DB #E8,#E0,#D0,#C0,#A0,#80
  1434.       ENDIF
  1435. TPLIST
  1436.        DB "packlistC"
  1437. THEAD
  1438.        DB "to A",13
  1439. TDEST=$-2
  1440.        DB "Header on ",13
  1441. THEADON=$-3
  1442.        DB "Mark ",0
  1443. TMENU
  1444.        DB " free",13
  1445. tMeth
  1446.        DB "Method:"
  1447. tmethod DB "best"
  1448. tKB     DB "32K",13
  1449.        DB 13
  1450.        DB "1-4 drives",13
  1451.       IF nastr
  1452.        DB "Finetune"
  1453.       ENDIF
  1454.        DB 13
  1455.        DB "Pack test",13
  1456.       DB "Separate pack"
  1457.        DB 13,"Create Rzx"
  1458. extext=$-2
  1459.       IF dolds
  1460. doldson DB " "
  1461.       ENDIF
  1462.        DB 13
  1463.        DB "New empty",13
  1464.        DB "Add",13
  1465.        DB 13
  1466.        DB "Quit to DOS"
  1467.        NOP
  1468. RARHEAD
  1469.        DB "Rar!",#1A,7,0
  1470.        DW 0 ;CRC
  1471. arhd    DB #73
  1472.        DW 0
  1473.        DW 13
  1474.        DW 0
  1475.        DW 0,0
  1476.  
  1477. fihd    DB #74
  1478.        DW #8000
  1479. fihdsz  DW 0
  1480. paksz   DS 4
  1481. unpsz   DS 4
  1482.        DB 82
  1483. filcrc  DS 4
  1484.        DS 4 ;TIME
  1485.        DB 20 ;VER
  1486. FMETH   DB "5"
  1487. namsz   DW 0
  1488.        DS 4 ;ATTR
  1489. fdir    ;DB " ";filename.$diz
  1490.        db "sometext.flz"
  1491.        ds fdir+256-$
  1492. ;Konez=$+13+adir
  1493.  
  1494. ;WASSETS
  1495.       ;DISP #5B05;(#5B5C)=#10
  1496. ;GDESETS
  1497. QUIT_
  1498.        XOR A
  1499.        OUT (-2),A
  1500.        ;CALL CLS
  1501.        ;INC H
  1502.        ;inc D
  1503.        ;LD (HL),71
  1504.        ;LDIR
  1505.        LD HL,(unpsz)
  1506.        LD DE,#488A
  1507.        CALL PRNUM2
  1508.       LD HL,(Lfname)
  1509.       LD E,#4B
  1510.       LD A,(namsz)
  1511.       SUB L
  1512.       ADD A,fdir&0xff
  1513.       LD B,A
  1514.       CALL PR_B
  1515.        LD HL,(paksz)
  1516.        LD E,#AA
  1517. PRNUM2
  1518.       PUSH HL
  1519.       CALL PRNUMD
  1520.       LD A,"="
  1521.       CALL PRTHI
  1522.       POP BC
  1523. PRNUMH
  1524.        LD A,"#"
  1525.        CALL PRTHI
  1526.        LD A,B
  1527.        CALL PRHEX
  1528.        LD A,C
  1529. PRHEX
  1530.        CALL PRHEXD
  1531. PRHEXD  RRCA
  1532.        RRCA
  1533.        RRCA
  1534.        RRCA
  1535.        PUSH AF
  1536.        AND 15
  1537.        CP 10
  1538.        CCF
  1539.        ADC A,"0"
  1540.        DAA
  1541.        CALL PRTHI
  1542.        POP AF
  1543.        RET
  1544. PRNUM
  1545.        LD A,PRNUMH-$-2
  1546.        LD H,B
  1547.        ld L,C
  1548. PRNUMD  LD BC,10000
  1549.        CALL PRDIG
  1550. PRNUM4  LD BC,1000
  1551.        CALL PRDIG
  1552. PRNUM3  LD BC,100
  1553.        CALL PRDIG
  1554.        LD C,10
  1555.        CALL PRDIG
  1556.        LD C,1
  1557. PRDIG
  1558.        LD A,"0"-1
  1559.        OR A
  1560.        INC A
  1561.        SBC HL,BC
  1562.        jr NC,$-3
  1563.        ADD HL,BC
  1564. PRJR    jr NC,PR8X8
  1565. PRTHI
  1566.        if 1==0
  1567.        PUSH BC,DE,HL
  1568.        CALL BEFOPR
  1569. PRTHI0  LD A,(HL)
  1570.        RRCA
  1571.        OR (HL)
  1572.        LD (DE),A
  1573.        INC L,D
  1574.        DJNZ PRTHI0
  1575.        POP HL,DE,BC
  1576.        INC E
  1577.        endif
  1578.        RET
  1579.  
  1580.         if 1==0 ;TODO
  1581. PR1234
  1582.        LD DE,#5941
  1583.         endif
  1584. PR88HEX
  1585.        LD A,H
  1586.        CALL PR12
  1587.        LD A,L
  1588. PR12    PUSH AF
  1589.        RRA
  1590.        RRA
  1591.        RRA
  1592.        RRA
  1593.        CALL PR8X8
  1594.        POP AF
  1595. PR8X8
  1596.       PUSH HL
  1597.        ADD A,A
  1598.        ADD A,A
  1599.        ADD A,A
  1600.        OR #80
  1601.        LD H,61
  1602.        CP 80+#80
  1603.        jr C,$+5
  1604.        SUB 72+#80
  1605.        INC H
  1606.        LD L,A
  1607. PR8X80  INC L
  1608.        LD A,(HL)
  1609.        ADD A,A,A,A
  1610.        LD B,A
  1611.       DUP 5
  1612.        SBC A,A
  1613.        LD (DE),A
  1614.        INC E
  1615.        SLA B
  1616.       EDUP
  1617.        SBC A,A
  1618.        LD (DE),A
  1619.       LD A,E
  1620.       ADD A,#1B
  1621.       LD E,A
  1622.       jr NC,PR8X80
  1623.       ADD A,#48
  1624.       LD E,A
  1625.       POP HL
  1626.        RET
  1627.       IF nastr
  1628. SETS
  1629.        DW SET1
  1630.        DW SET2
  1631.        DW SETA
  1632.        DW SETB
  1633.        DW SETC
  1634.        DW SETD
  1635.        DW SETE
  1636.        DW SETF
  1637.        DW SETG
  1638.        DW SETH
  1639.        DW SETI
  1640.        DW SETJ
  1641.        DW SETK
  1642.        DW SETL
  1643.        DW SETM
  1644.        DW SETN
  1645.        DW SETO
  1646.  
  1647.        ;DISPLAY $
  1648. SETSlen=$-SETS
  1649.       ENDIF
  1650.       ;ENT
  1651.  
  1652. ;GO
  1653. ;        JP RELOAD
  1654.  
  1655. MAX=0x8100;-Konez-#200-svbfsz/256<8
  1656. ;-(MAX+pakto/8*9)/256<8,fastWR:сожрёт окно
  1657. pak9=-MAX;продолж-е LZ данных
  1658. fout=-MAX-#200-svbfsz
  1659. ;первые 2сек.сохраняются в посл.очередь
  1660. ;чтобы успеть изменить paklen,CRC
  1661. ;s8=fout
  1662. ;dirsec=fout+#200
  1663.        ;DISPLAY /T,Konez,/T,MAX
  1664.