?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         DEVICE ZXSPECTRUM128
  2.         include "../_sdk/sys_h.asm"
  3.  
  4.        MACRO rarrdbyte
  5.         INC LY
  6.         LD A,(IY)
  7.         CALL Z,RDBYH
  8.        ENDM
  9.  
  10. INITIALMEMPAGES=24;32;6
  11.  
  12. STACK=0x4000
  13. DISKBUF=0x6c00
  14. DISKBUFsz=0x1000
  15.  
  16. crc=1;0
  17.  
  18. COLOR=7
  19. CURSORCOLOR=0x38
  20.  
  21. namln=MAXPATH_sz;100 ;#FA
  22.  
  23.         org PROGSTART
  24. cmd_begin
  25.         ld sp,STACK
  26.        
  27.         ld e,6 ;textmode
  28.         OS_SETGFX
  29.        
  30.         ;OS_GETMAINPAGES
  31. ;dehl=номера страниц в 0000,4000,8000,c000
  32.         ld hl,PTABL
  33.         ld b,INITIALMEMPAGES;64 ;TODO меньше для ATM2
  34. getpgs0
  35.         push bc
  36.         push hl
  37.         OS_NEWPAGE
  38.         pop hl
  39.         ld (hl),e
  40.         inc hl
  41.         pop bc
  42.         djnz getpgs0
  43.        
  44.         ld hl,COMMANDLINE
  45.         call skipword
  46.         call skipspaces
  47.         ld a,(hl)
  48.         or a
  49.         jr nz,$+5
  50.          ld hl,defaultfilename
  51.         ld (curfilenameaddr),hl
  52.        
  53. curfilenameaddr=$+1
  54.         ld de,0
  55. ;        call openstream_file
  56. ;        or a
  57. ;        jp nz,openerror
  58.        
  59.         ;CALL initdepk;Z6629 ;ИНИЦИАЛИЗАЦИЯ ДЕПAKEPA
  60.  
  61.         ld a,'c' ;"create" (not "new") ;new проверено - работает
  62.        call SELCREA
  63.         ;call depack
  64.         QUIT
  65.  
  66. readerror ;TODO
  67.        
  68. openerror
  69. error
  70. quit
  71. quitoperation
  72.         QUIT
  73.  
  74. copyname83
  75. ;hl->de
  76. ;длина имени не увеличивается - можно поверх?
  77. ;перекодирует слэш в прямой
  78. copyname83_element
  79.         ld b,8
  80. copyname83_0
  81.         ld a,(hl)
  82.         inc hl
  83.         or a
  84.         jr z,copyname83_q
  85.         cp 0x5c;'\'
  86.         jr z,copyname83_endelement
  87.         cp '/'
  88.         jr z,copyname83_endelement
  89.         cp '.'
  90.         jr z,copyname83_ext
  91.         ld (de),a
  92.         inc de
  93.         djnz copyname83_0
  94. ;8 chars of name copied, wait for dot or slash or terminator
  95. copyname83_skipname0
  96.         ld a,(hl)
  97.         inc hl
  98.         or a
  99.         jr z,copyname83_q
  100.         cp 0x5c;'\'
  101.         jr z,copyname83_endelement
  102.         cp '/'
  103.         jr z,copyname83_endelement
  104.         cp '.'
  105.         jr nz,copyname83_skipname0
  106. copyname83_ext
  107.         ld (de),a ;'.'
  108.         inc de
  109.         ld b,3
  110. copyname83_ext0
  111.         ld a,(hl)
  112.         inc hl
  113.         or a
  114.         jr z,copyname83_q
  115.         cp 0x5c;'\'
  116.         jr z,copyname83_endelement
  117.         cp '/'
  118.         jr z,copyname83_endelement
  119.         cp '.'
  120.         jr z,copyname83_skipext0
  121.         ld (de),a
  122.         inc de
  123.         djnz copyname83_ext0
  124. copyname83_skipext0
  125.         ld a,(hl)
  126.         inc hl
  127.         or a
  128.         jr z,copyname83_q
  129.         cp 0x5c;'\'
  130.         jr z,copyname83_endelement
  131.         cp '/'
  132.         jr nz,copyname83_skipext0
  133. copyname83_endelement
  134.         ld a,'/'
  135.         ld (de),a ;'/'
  136.         inc de
  137.         jr copyname83_element
  138. copyname83_q
  139.         ld (de),a ;0
  140.         ret
  141.  
  142. skipword
  143. ;hl=string
  144. ;out: hl=terminator/space addr
  145. getword0
  146.         ld a,(hl)
  147.         or a
  148.         ret z
  149.         cp ' '
  150.         ret z
  151.         inc hl
  152.         jr getword0
  153.  
  154. skipspaces
  155. ;hl=string
  156. ;out: hl=after last space
  157.         ld a,(hl)
  158.         cp ' '
  159.         ret nz
  160.         inc hl
  161.         jr skipspaces
  162.  
  163. strcopy
  164. ;hl->de
  165. strcopy0
  166.         ld a,(hl)
  167.         ldi
  168.         or a
  169.         jr nz,strcopy0
  170.         ret
  171.  
  172. PTABL
  173.         ds 64 ;page numbers, patched
  174.  
  175. OUTpgTEXT
  176.         LD A,pgTEXT;16 ;TODO
  177. OUTME
  178.        ;IF ramdisk
  179.        ; LD (BYTEPG),A
  180.        ;ENDIF
  181. OUTNO
  182.         PUSH BC
  183.        LD b,PTABL/256
  184.        ADD A,PTABL&0xff
  185.         LD c,A
  186.         LD A,(bc)
  187.         SETPG32KHIGH
  188.         POP BC
  189.         RET
  190.  
  191. mktcrc
  192.         XOR A
  193.         LD L,A
  194. MKTCRC0 EXX
  195.         LD C,0
  196.         LD H,C
  197.         ld L,C
  198.         ld D,C
  199.         ld E,A
  200.         EXA
  201.         CALL crcpp
  202.         EXA
  203.          PUSH HL
  204.          push DE
  205.         EXX
  206.         LD H,TCRC/256
  207.          POP DE
  208.         LD (HL),E
  209.         INC H
  210.         LD (HL),D
  211.         INC H
  212.          POP DE
  213.         LD (HL),E
  214.         INC H
  215.         LD (HL),D
  216.         INC L
  217.         INC A
  218.         JR NZ,MKTCRC0
  219.         ret
  220.  
  221. gencrc
  222. ;hl=addr, bc=length
  223.        LD A,(THEADON)
  224. CPn=$+1
  225.        CP "n"
  226.        JR NZ,NCRC
  227.         PUSH HL
  228.         POP IX
  229. CURCRC=$+1
  230.         LD DE,0
  231. CURCRC2=$+1
  232.         LD HL,0
  233.          CALL INVCRC
  234. FCRC0    PUSH BC
  235.         LD B,H
  236.         ld C,L
  237.          LD A,E
  238.          XOR (IX)
  239.          LD L,A
  240.         LD H,TCRC/256
  241.          LD A,(HL)
  242.          XOR D
  243.          LD E,A
  244.          INC H
  245.          LD A,(HL)
  246.         XOR C
  247.          LD D,A
  248.          INC H
  249.          LD A,(HL)
  250.         XOR B
  251.          INC H
  252.          LD H,(HL)
  253.          ld L,A
  254.          POP BC
  255.          INC IX
  256.          DEC BC
  257.          LD A,B
  258.          OR C
  259.          JR NZ,FCRC0
  260.          CALL INVCRC
  261.         LD (CURCRC),DE
  262.         LD (CURCRC2),HL
  263. NCRC
  264.         ret
  265.  
  266. minhl_bc_tobc
  267.         or a
  268.         sbc hl,bc
  269.         add hl,bc
  270.         ret nc ;bc<=hl
  271.         ld b,h
  272.         ld c,l
  273.         ret
  274.  
  275.        
  276. SAVEBLOCK
  277. ;de=bytes to save
  278. ;hl=addr
  279.          push bc
  280.         exx
  281.         push bc
  282.         push de
  283.         push hl
  284.         exx
  285.         ex af,af'
  286.        push af
  287.        ld a,(savefilehandle)
  288.        ld b,a
  289.        ex de,hl
  290.         push ix
  291.        push iy
  292. tosave=$+1
  293.       LD A,1;0
  294.       OR A
  295.       jr z,SAVEBLOCK_skip
  296.        OS_WRITEHANDLE
  297. SAVEBLOCK_skip
  298.        pop iy
  299.         pop ix
  300.        pop af
  301.        ex af,af'
  302.         exx
  303.         pop hl
  304.         pop de
  305.         pop bc
  306.         exx
  307.          pop bc
  308.         ret
  309.  
  310. strlen
  311. ;hl=str
  312. ;out: hl=length
  313.         ld bc,0 ;чтобы точно найти терминатор
  314.         xor a
  315.         cpir ;найдём обязательно, если длина=0, то bc=-1 и т.д.
  316.         ld hl,-1
  317.         or a
  318.         sbc hl,bc
  319.         ret
  320.  
  321. SAVECREATE
  322. ;out: a=1: file exists, add to end
  323.         push iy
  324.  
  325. ;сформировать filename 8.3 (во всех элементах):
  326.         ld hl,OUTNAM;Z664A
  327.         ld de,OUTNAM;filename
  328.         ;call strcopy
  329.         call copyname83 ;заодно перекодирует слэш в /
  330. ;TODO если нет такой директории, то create directory (например, "md scr/1" без слеша в конце):
  331.  
  332.         ld hl,OUTNAM
  333. SAVECREATE_dir0
  334. ;hl=текущий элемент пути
  335. ;1.проверить, что путь не кончился (т.е. дальше есть /)
  336.         push hl
  337.         call strlen
  338.         ld b,h
  339.         ld c,l
  340.         pop hl
  341.         ld a,'/'
  342.         cpir
  343.         jr nz,SAVECREATE_dirq
  344.         dec hl
  345. ;hl=at slash
  346. ;2.проверить, что есть i-й элемент пути (до слэша) - через CHDIR?
  347.         ld (hl),0
  348.         push hl
  349.         ld de,pathbuf
  350.         OS_GETPATH
  351.         ld de,OUTNAM
  352.         OS_CHDIR
  353.         push af
  354.         ld de,pathbuf
  355.         OS_CHDIR
  356.         pop af
  357.         or a
  358.         jr z,SAVECREATE_dirnomk ;такая директория уже есть
  359. ;3.если нет, то создать 0..i-й (текущий путь не меняем)
  360.         ld de,OUTNAM
  361.         OS_MKDIR
  362. SAVECREATE_dirnomk
  363.         pop hl
  364.         ld (hl),'/'
  365.         inc hl
  366.         jr SAVECREATE_dir0
  367. SAVECREATE_dirq
  368.  
  369.         ld de,OUTNAM;filename
  370.         OS_OPENHANDLE
  371.         or a
  372.         ld a,1
  373.         jr z,SAVECREATE_opened
  374.         ld de,OUTNAM;filename
  375.         OS_CREATEHANDLE
  376.         xor a
  377. SAVECREATE_opened
  378.         push af ;a=1: file exists, add to end
  379. ;b=new file handle
  380.         ld a,b
  381.         ld (savefilehandle),a
  382.        
  383.         ld a,(savefilehandle)
  384.         ld b,a
  385.         OS_GETFILESIZE ;dehl=filesize
  386. ;dehl=offset
  387.          call SAVEREWIND
  388.        
  389.         pop af ;a=1: file exists, add to end
  390.         pop iy
  391.         ret
  392.  
  393. SAVECLOSE
  394.         push iy
  395. savefilehandle=$+1
  396.         ld b,0
  397.         OS_CLOSEHANDLE
  398.         pop iy
  399.         ret
  400.        
  401.        
  402. LBYTE  LD A,L
  403. BYTE
  404.         if 1==0
  405.          ;push af
  406.          push de
  407.         push hl
  408.         ld hl,bytebuf
  409.         ld (hl),a
  410.         ld de,1
  411. ;de=bytes to save
  412. ;hl=addr      
  413.         call SAVEBLOCK
  414.         pop hl
  415.          pop de
  416.          ;pop af
  417.         ret
  418. bytebuf
  419.         db 0
  420.  
  421.         else
  422.        
  423.         EXX
  424. XBYTE   LD (HL),A
  425.  
  426.          ;push hl
  427.          ;ld hl,paksz
  428.          ;inc (hl)
  429.          ;inc hl
  430.          ;jr z,$-2
  431.          ;pop hl ;TODO обновлять только при сохранении блока, в конце и в начале сохранять неполный блок?
  432.  
  433.        LD A,H
  434.         INC L
  435.         EXX
  436.         RET NZ
  437.         EXX
  438.         INC H
  439.        LD A,H
  440. BYTEend=$+1
  441.        CP fout/256+2+(svbfsz/256)
  442.         EXX
  443.         RET C
  444. BYTEsv
  445.         EXX
  446.         PUSH BC
  447.         CALL BYTEsPP
  448.         POP BC
  449.         EXX
  450.        IF 0;ramdisk
  451. BYTEPG=$+1
  452.         LD A,0
  453.         JP OUTME
  454.        ELSE
  455.         RET
  456.        ENDIF
  457.         endif
  458.  
  459. SAVEREWIND
  460.         push af
  461.         ;push de
  462.         ;ld hl,0
  463.         ;ld d,h
  464.         ;ld e,l
  465.         ld a,(savefilehandle)
  466.         ld b,a
  467. ;dehl=offset
  468.         OS_SEEKHANDLE
  469.         ;pop de
  470.         pop af
  471.         ret
  472.  
  473. BYTEsPP_endfile
  474.         if 1==1
  475. ;;если hl<fout+512, то первые 2 сектора ещё не сохранены, надо сохранить сколько есть с адреса fout
  476. ;;иначе сохранить hl-(fout+512) с адреса fout+512 (может быть 0)
  477. ;        ld de,fout+512
  478. ;        ld a,h
  479. ;        cp d;+(fout+512)/256
  480. ;        jr nc,BYTEsPP_endfile_headsaved
  481. ;        ld de,fout
  482. ;BYTEsPP_endfile_headsaved
  483.         ld de,(BYTEsPP_hl)
  484.         or a
  485.         sbc hl,de
  486.         ex de,hl
  487.         ret z
  488. ;de=bytes to save
  489. ;hl=addr
  490.         jp SAVEBLOCK
  491.        
  492.         else
  493.         DEC HL
  494.         INC H
  495.         LD A,H
  496.         jp BYTEsPP
  497.         endif
  498.  
  499. BYTEsPP_startfile
  500. ;сохранить или пропустить первые 2 сектора файла
  501.         if 1==1
  502.         LD HL,fout ;begin of fout after sec2
  503.         ld (BYTEsPP_hl),hl
  504.         else
  505.         LD HL,(SAVE1st)
  506.         INC L,L
  507.         BIT 4,L
  508.         RES 4,L
  509.         JR Z,$+3
  510.         INC H
  511.         LD (BYTEsvTS),HL
  512.         endif
  513.         ret
  514.  
  515. BYTsPPPfout
  516. ;вызывается перед закрытием outfile
  517. ;de не важно
  518. ;если hl<fout+512, то выход (только что сохранили сколько есть < 512, не надо сохранять 512 байт)
  519. ;иначе сохранить 512 байт с адреса fout
  520.         ld a,h
  521.         cp +(fout+512)/256
  522.         ret c
  523.         LD HL,fout
  524.         jr _BYTsPPP
  525.        
  526. BYTEsPP
  527. ;a=H
  528. ;первые 2сек.сохраняются в посл.очередь
  529. ;чтобы успеть изменить paklen,CRC
  530. BYTEsPP_hl=$+1 ;TODO init
  531.         LD HL,fout ;begin of fout (initially) / begin of fount after sec2 (after first save)
  532. _BYTsPPP
  533. ;hl=fout+512 (обычно)/fout (в начале и в конце сохранения)
  534. ;de=(SAVEsz) in sectors
  535.        CP H
  536.         RET C
  537.         RET Z ;первые 2сек.сохраняются в посл.очередь ;в NedoOS их надо сохранять только первый раз!
  538.        SUB h;fout/256 ;H ;в NedoOS не можем пропускать первые 2 сектора, всё равно сохраняем
  539.         LD B,A ;b=sectors to save
  540.         ADD A,E
  541.         LD E,A
  542.         jr NC,$+3
  543.         INC D
  544.        ;PUSH HL
  545.         PUSH DE
  546. ;BYTEsvTS=$+1
  547. ;        LD DE,0
  548.         ;LD C,6
  549. ;tosave=$+1
  550. ;       LD A,0
  551. ;       OR A
  552. ;         jr Z,notosav
  553.        ;CALL NZ,DOD
  554.          ;ld hl,fout ;в NedoOS не можем пропускать первые 2 сектора, всё равно сохраняем
  555.         ld d,b
  556.         ld e,0
  557. ;de=bytes to save
  558. ;hl=addr
  559.         call SAVEBLOCK
  560.         ;call SAVECLOSE
  561.         ;QUIT
  562.        
  563.         LD HL,fout+512 ;begin of fout after sec2
  564.         ld (BYTEsPP_hl),hl
  565.         ;LD HL,(#5CF4)
  566.         ;LD (BYTEsvTS),HL
  567.         ;POP HL
  568.         ;PUSH HL
  569. ;+255*#
  570.        ;LD A,(ARCNAME+8)
  571.       ;CP "r
  572.       ;JZ BYsvN0ar
  573.        ;SUB 47
  574.        ; CP "r"-47
  575.        ; jr NC,BYsvN0ar
  576.        ;LD C,A
  577.        ;ADD A,H
  578.        ;LD H,A
  579.        ;LD A,L
  580.        ;SUB C
  581.        ;LD L,A
  582.        ;jr NC,$+3
  583.        ;DEC H
  584. ;BYsvN0ar
  585.         ;LD DE,#5A41
  586.         ;CALL PR88DEC
  587. ;notosav
  588.         POP DE
  589.        ;POP HL
  590.        ld h,+(fout+512)/256
  591.        LD A,H
  592.         RET
  593.  
  594.        
  595. ;save b bytes from ix
  596. ;TODO через SAVEBLOCK
  597. BLOCK
  598.         LD A,(IX)
  599.         INC IX
  600.         CALL BYTE
  601.         DJNZ BLOCK
  602.         RET
  603. bit0
  604.         OR A
  605. bit
  606.         EXX
  607.         RL C
  608.         EXX
  609.         RET NC
  610.        PUSH AF
  611.         EXX
  612.         LD A,C
  613.         LD C,1
  614.         CALL XBYTE
  615.        POP AF
  616.         RET
  617.  
  618. PKNNpp
  619. ;пишем код Хаффмана (в hl через 256: длина, HSB, LSB) - пишем старшие биты
  620.         LD B,(HL)
  621.         INC H
  622.         LD C,(HL)
  623.         INC H
  624. PKLHPP
  625.         LD L,(HL)
  626.         LD H,C
  627. PKHLPP
  628.         ADD HL,HL
  629.         CALL bit
  630.         DJNZ $-4
  631.         RET
  632. PKBDpp
  633.         RLA
  634.         CALL bit
  635.         DJNZ $-4
  636.         RET  
  637.        
  638. RDBYTE
  639.         INC LY
  640.         LD A,(IY)
  641.         RET NZ
  642. RDBYH
  643.         INC HY
  644.         LD A,HY
  645. ;RDBYHend=$+1
  646.         CP DISKBUF/256+(DISKBUFsz/256)
  647.         LD A,(IY)
  648.          ccf ;CY=0: OK ;TODO переделать на CY=1 длЯ скорости
  649.         RET nz
  650.        PUSH HL
  651.        PUSH DE
  652.         PUSH BC
  653.         push IX
  654.        ;CALL rdCS
  655.        ex af,af'
  656.       PUSH AF
  657.        exx
  658.        push bc
  659.        push de
  660.        push hl
  661.        ld de,DISKBUF
  662.        ld hl,DISKBUFsz
  663.         push de
  664.        call readstream_file
  665.         pop de
  666.         push de ;addr
  667. ;hl=actual size
  668.         ld a,h
  669.         or l
  670.         jp z,readerror
  671. ;move block to end of buf:
  672.        ld b,h
  673.        ld c,l
  674.        dec de ;ld de,DISKBUF-1
  675.        add hl,de ;end of data
  676.        ld de,DISKBUF+DISKBUFsz-1
  677.        sbc hl,de
  678.        add hl,de
  679.        jr z,ZIPRDBYHq
  680.         pop af
  681.        lddr
  682.        inc de ;begin of data
  683.         push de
  684. ZIPRDBYHq
  685.         pop iy ;addr = DISKBUF+
  686.        
  687.        pop hl
  688.        pop de
  689.        pop bc
  690.        exx
  691.       POP AF
  692.       ex af,af'
  693.         POP IX
  694.         pop BC
  695.        POP DE
  696.          pop hl
  697.        ;ld iy,DISKBUF
  698.        LD A,(IY)
  699.        or a ;CY=0: OK ;TODO переделать на CY=1 длЯ скорости
  700.         RET
  701.  
  702. prcrlf
  703.         ld hl,tcrlf
  704. prtext
  705.         ld a,(hl)
  706.         or a
  707.         ret z
  708.         push hl
  709.         push iy
  710.         PRCHAR
  711.         pop iy
  712.         pop hl
  713.         inc hl
  714.         jr prtext
  715.  
  716. PR1234
  717.         ld a,'.'
  718. prchar
  719.         push bc
  720.         push de
  721.         push hl
  722.         exx
  723.         ex af,af'
  724.         push af
  725.         push bc
  726.         push de
  727.         push hl
  728.         push ix
  729.         push iy
  730.         ex af,af'
  731.         PRCHAR
  732.         pop iy
  733.         pop ix
  734.         pop hl
  735.         pop de
  736.         pop bc
  737.         pop af
  738.         exx
  739.         ex af,af'
  740.         pop hl
  741.         pop de
  742.         pop bc
  743.         ret
  744.  
  745. PRCUR
  746. PRFN
  747. PR_B
  748. PRTEXT
  749. PRGFX
  750. PRGFXHL
  751. NXTLIN
  752. PRTHI32
  753. VIEGFX
  754. CAT2GFX
  755. PRHEADP
  756. BEFOPR
  757. CLS
  758.        ret
  759.  
  760. fillmem
  761.        LD D,H
  762.        ld E,L
  763.        INC DE
  764.        LDIR
  765.       INC B
  766.        RET  
  767.  
  768. tadded
  769.         db " added"
  770. tcrlf
  771.        db 13,10,0
  772.  
  773.        include "../_sdk/file.asm"
  774.        include "zxrfile.asm"
  775.        include "rarpack.asm"
  776.        include "rarlz.asm"
  777.        include "rarhuff.asm"
  778.        
  779. defaultfilename
  780.        db "4:/emit.c",0
  781.        ;db "4:/nv.ext",0
  782.  
  783. CURFILE DS namln
  784.  
  785.  
  786. ;;;;;32 bytes rar file header
  787. CRCF    DW 0
  788. TYPEF   DB 0
  789. FLAGF   DW 0
  790. SIZEF   DW 0 ;head size
  791. ;;^^^7 bytes also form archive footer
  792. ADDSZF  DS 4 ;packed size
  793.  
  794. UNPSIZE DS 4
  795. HOSTOS DB 0;NU
  796. FILECRC DS 4
  797. FTIME   DS 4
  798. UNPVER  DB 0
  799. METHOD  DB 0
  800. NAMSIZE DW 0
  801. ATTR    DS 4
  802. ;;;;;;;;;;;;;;;;;;;
  803.  
  804. EXPTYP  DW 0 ;expected type&FLAGH
  805. ;CRCLO   DW 0
  806. ;YEFLAGH DB 0 ;TWICE;1=depk,0=view
  807. ;FREXPT  DB 0 ;TWICE
  808. ;FILEZ   DW 0;usable.FileCount
  809. ERRORS  DW 0;ErrCount
  810. ;unknown DW 0;NU=0.ExtrFile
  811. known   DB 0 ;NOT unknown.MDCode
  812. ;SCANres DW 0 ;TWICE.SCANres=HL.AllArgsUsed
  813. ;CANTCR  DW 0;NU=0!can't create.UserReject
  814. ;PASWFLG DW 0 ;(password?).TmpPassword
  815. ;BEFEXTR DB 0 ;1=до EXTRACT.FirstFile
  816. ;GDEIX   DW 0 ;ArcPtr
  817. VOLFLG  DB 0;ArcType,2=vol
  818. SOLFLG  DB 0;SolidType(1)
  819. TSTARES DB 0;ArcFormat
  820.  
  821. volPKSZ DS 4
  822. volUNSZ DS 4
  823. pieces  DW 0 ;FileCount
  824. ;zagol   DW 0;1=загол уже напеч
  825. uNPremn DS 4;DestUnpSize
  826.  
  827.  IF crc
  828. CRCArea DS 4
  829.  ENDIF
  830. CRCA    DW 0 ;TWICE=BUF32
  831. TYPEA  DB 0;NU
  832. FLAGA   DW 0
  833. SIZEA   DW 0
  834. _62ae  DW 0;NU
  835. _62b0  DW 0;NU
  836. _62b2  DW 0;NU
  837.  
  838.  ;UnpCRC  DS 4 ;UnpFileCRC
  839. ;YCOMM   DB 0;UnpVolume.4times
  840. COMSYM  DB 0
  841.  
  842. pathbuf
  843.         ds MAXPATH_sz
  844.  
  845. ;oldtimer
  846. ;        dw 0
  847.        
  848. cmd_end
  849.  
  850.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  851.  
  852.         savebin "zxrar.com",cmd_begin,cmd_end-cmd_begin
  853.        
  854.         LABELSLIST "../../us/user.l"
  855.