Subversion Repositories NedoOS

Rev

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

  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=32;6
  11.        
  12. STACK=0x4000
  13. TCRC=0x6800 ;size 0x400, divisible by 0x400
  14. DISKBUF=0x6c00
  15. DISKBUFsz=0x1000
  16.  
  17. frmcnt=1;0
  18. mmc=1;0
  19. crc=1;0
  20. tcrc=0;1 ;TODO яюўхьє эх ЁрсюЄрхЄ?
  21. kb=0;1kIN
  22. opt=1
  23. border=0
  24. unexp=1;0
  25. masks=1
  26.  
  27. ;v1="0"
  28. ;v2="6"
  29. ;v3="1"
  30.  
  31. COLOR=7
  32. CURSORCOLOR=0x38
  33.  
  34. namln=MAXPATH_sz;100 ;#FA
  35. THEEND=#c000;#8000;#C000
  36. CODETOP=#7D00 ;ъюэёЄрэЄр-ьръёшьєь,шёяюы№чєхЄё  Єюы№ъю т DISPLAY
  37. s8=#7D00;#5B00 ;sys
  38. TAB44=#5B00;#7A3D ;#7F00 эхы№ч  (bufstor)
  39. stBUF=#7E00;#5800 ;TODO
  40. ;sec=stBUF      ;dir
  41. bufstor=THEEND-256
  42.  
  43.         org PROGSTART
  44. cmd_begin
  45.         ld sp,STACK
  46.        
  47.         ld e,6 ;textmode
  48.         OS_SETGFX
  49.        
  50.         ;OS_GETMAINPAGES
  51. ;dehl=эюьхЁр ёЄЁрэшЎ т 0000,4000,8000,c000
  52.         ld hl,PTABL
  53.         ld b,64 ;TODO ьхэ№°х фы  ATM2
  54. getpgs0
  55.         push bc
  56.         push hl
  57.         OS_NEWPAGE
  58.         pop hl
  59.         ld (hl),e
  60.         inc hl
  61.         pop bc
  62.         djnz getpgs0
  63.        
  64.         ld hl,COMMANDLINE
  65.         call skipword
  66.         call skipspaces
  67.         ld a,(hl)
  68.         or a
  69.         jr nz,$+5
  70.          ld hl,defaultfilename
  71.         ld (curfilenameaddr),hl
  72.        
  73. ;curfilenameaddr=$+1
  74. ;        ld de,0
  75. ;        call openstream_file
  76. ;        or a
  77. ;        jp nz,openerror
  78.        
  79.         ;CALL initdepk;Z6629 ;╚═╚╓╚└╦╚╟└╓╚▀ ─┼╧AKEPA
  80.  
  81.        call GO
  82.         ;call depack
  83.         QUIT
  84.        
  85. openerror
  86. error
  87. quit
  88.         QUIT
  89.  
  90. copyname83
  91. ;hl->de
  92. ;фышэр шьхэш эх єтхышўштрхЄё  - ьюцэю яютхЁї?
  93. ;яхЁхъюфшЁєхЄ ёы¤° т яЁ ьющ
  94. copyname83_element
  95.         ld b,8
  96. copyname83_0
  97.         ld a,(hl)
  98.         inc hl
  99.         or a
  100.         jr z,copyname83_q
  101.         cp 0x5c;'\'
  102.         jr z,copyname83_endelement
  103.         cp '/'
  104.         jr z,copyname83_endelement
  105.         cp '.'
  106.         jr z,copyname83_ext
  107.         ld (de),a
  108.         inc de
  109.         djnz copyname83_0
  110. ;8 chars of name copied, wait for dot or slash or terminator
  111. copyname83_skipname0
  112.         ld a,(hl)
  113.         inc hl
  114.         or a
  115.         jr z,copyname83_q
  116.         cp 0x5c;'\'
  117.         jr z,copyname83_endelement
  118.         cp '/'
  119.         jr z,copyname83_endelement
  120.         cp '.'
  121.         jr nz,copyname83_skipname0
  122. copyname83_ext
  123.         ld (de),a ;'.'
  124.         inc de
  125.         ld b,3
  126. copyname83_ext0
  127.         ld a,(hl)
  128.         inc hl
  129.         or a
  130.         jr z,copyname83_q
  131.         cp 0x5c;'\'
  132.         jr z,copyname83_endelement
  133.         cp '/'
  134.         jr z,copyname83_endelement
  135.         cp '.'
  136.         jr z,copyname83_skipext0
  137.         ld (de),a
  138.         inc de
  139.         djnz copyname83_ext0
  140. copyname83_skipext0
  141.         ld a,(hl)
  142.         inc hl
  143.         or a
  144.         jr z,copyname83_q
  145.         cp 0x5c;'\'
  146.         jr z,copyname83_endelement
  147.         cp '/'
  148.         jr nz,copyname83_skipext0
  149. copyname83_endelement
  150.         ld a,'/'
  151.         ld (de),a ;'/'
  152.         inc de
  153.         jr copyname83_element
  154. copyname83_q
  155.         ld (de),a ;0
  156.         ret
  157.  
  158. skipword
  159. ;hl=string
  160. ;out: hl=terminator/space addr
  161. getword0
  162.         ld a,(hl)
  163.         or a
  164.         ret z
  165.         cp ' '
  166.         ret z
  167.         inc hl
  168.         jr getword0
  169.  
  170. skipspaces
  171. ;hl=string
  172. ;out: hl=after last space
  173.         ld a,(hl)
  174.         cp ' '
  175.         ret nz
  176.         inc hl
  177.         jr skipspaces
  178.  
  179. strcopy
  180. ;hl->de
  181. strcopy0
  182.         ld a,(hl)
  183.         ldi
  184.         or a
  185.         jr nz,strcopy0
  186.         ret
  187.  
  188. PTABL
  189.         ds 64 ;page numbers, patched
  190.  
  191. OUTMEcu LD (curPG),A
  192.         LD (curPG2),A
  193. OUTcur  LD A,(curPG)
  194. OUTME
  195.         PUSH BC
  196.        LD b,PTABL/256
  197.        ADD A,PTABL&0xff
  198.         LD c,A
  199.         LD A,(bc)
  200.         SETPG32KHIGH
  201.         POP BC
  202.         RET
  203.  
  204. minhl_bc_tobc
  205.         or a
  206.         sbc hl,bc
  207.         add hl,bc
  208.         ret nc ;bc<=hl
  209.         ld b,h
  210.         ld c,l
  211.         ret
  212.  
  213.        
  214. SAVEBLOCK
  215. ;de=bytes to save
  216. ;hl=addr
  217.         exx
  218.         push de
  219.         exx
  220.         ex af,af'
  221.        push af
  222.        ld a,(savefilehandle)
  223.        ld b,a
  224.        ex de,hl
  225.         push ix
  226.        push iy
  227.        OS_WRITEHANDLE
  228.        pop iy
  229.         pop ix
  230.        pop af
  231.        ex af,af'
  232.         exx
  233.         pop de
  234.         exx
  235.         ret
  236.  
  237. strlen
  238. ;hl=str
  239. ;out: hl=length
  240.         ld bc,0 ;ўЄюс√ Єюўэю эрщЄш ЄхЁьшэрЄюЁ
  241.         xor a
  242.         cpir ;эрщф╕ь юс чрЄхы№эю, хёыш фышэр=0, Єю bc=-1 ш Є.ф.
  243.         ld hl,-1
  244.         or a
  245.         sbc hl,bc
  246.         ret
  247.  
  248. SAVECREATE
  249.         push iy
  250.  
  251. ;ёЇюЁьшЁютрЄ№ filename 8.3 (тю тёхї ¤ыхьхэЄрї):
  252.         ld hl,OUTNAM;Z664A
  253.         ld de,OUTNAM;filename
  254.         ;call strcopy
  255.         call copyname83 ;чрюфэю яхЁхъюфшЁєхЄ ёы¤° т /
  256. ;TODO хёыш эхЄ Єръющ фшЁхъЄюЁшш, Єю create directory (эряЁшьхЁ, "md scr/1" схч ёых°р т ъюэЎх):
  257.  
  258.         ld hl,OUTNAM
  259. SAVECREATE_dir0
  260. ;hl=Єхъє∙шщ ¤ыхьхэЄ яєЄш
  261. ;1.яЁютхЁшЄ№, ўЄю яєЄ№ эх ъюэўшыё  (Є.х. фры№°х хёЄ№ /)
  262.         push hl
  263.         call strlen
  264.         ld b,h
  265.         ld c,l
  266.         pop hl
  267.         ld a,'/'
  268.         cpir
  269.         jr nz,SAVECREATE_dirq
  270.         dec hl
  271. ;hl=at slash
  272. ;2.яЁютхЁшЄ№, ўЄю хёЄ№ i-щ ¤ыхьхэЄ яєЄш (фю ёы¤°р) - ўхЁхч CHDIR?
  273.         ld (hl),0
  274.         push hl
  275.         ld de,pathbuf
  276.         OS_GETPATH
  277.         ld de,OUTNAM
  278.         OS_CHDIR
  279.         push af
  280.         ld de,pathbuf
  281.         OS_CHDIR
  282.         pop af
  283.         or a
  284.         jr z,SAVECREATE_dirnomk ;Єрър  фшЁхъЄюЁш  єцх хёЄ№
  285. ;3.хёыш эхЄ, Єю ёючфрЄ№ 0..i-щ (Єхъє∙шщ яєЄ№ эх ьхэ хь)
  286.         ld de,OUTNAM
  287.         OS_MKDIR
  288. SAVECREATE_dirnomk
  289.         pop hl
  290.         ld (hl),'/'
  291.         inc hl
  292.         jr SAVECREATE_dir0
  293. SAVECREATE_dirq
  294.  
  295.         ld de,OUTNAM;filename
  296.         OS_CREATEHANDLE
  297. ;b=new file handle
  298.         ld a,b
  299.         ld (savefilehandle),a
  300.         pop iy
  301.         ret
  302.  
  303. SAVECLOSE
  304.         push iy
  305. savefilehandle=$+1
  306.         ld b,0
  307.         OS_CLOSEHANDLE
  308.         pop iy
  309.         ret
  310.        
  311. ;;;
  312. SAVbeg
  313. stAD=$+1
  314.         LD HL,0
  315. stPG=$+1
  316.         LD A,0
  317.         ;BIT 7,H
  318.         ;JR NZ,$+3
  319.         ;INC A
  320.        PUSH AF
  321.         CALL OUTME
  322.        POP AF
  323.         EXA
  324.         RET
  325.  
  326. SAVE
  327. ;size = SAVErmn*256 (ўєЄ№ ьхэ№°х, Є.ъ. єўшЄ√трхь (uNPremn) ъръ ьы.срщЄ)
  328. doSAVEk=$+1
  329.         LD A,0
  330.         CP "N"
  331.         JR NZ,NLISTERLAST ;??? TODO
  332. ;LISTERLAST
  333.        LD HL,(DEPADR)
  334.        LD (stAD),HL
  335.        LD A,(curPG)
  336.        LD (stPG),A
  337.         RET
  338. NLISTERLAST
  339.        CALL SAVbeg
  340. savePG0
  341.         LD A,H
  342.         INC A
  343.         JR NZ,nRASLOM
  344.         LD DE,bufstor
  345.         PUSH DE
  346.         LD B,A
  347.         SUB L
  348.         LD C,A
  349.        DEC C
  350.        INC BC
  351.         LDIR
  352.         LD H,#C0
  353.         EXA
  354.         INC A
  355.        PUSH AF
  356.         CALL OUTME
  357.        POP AF
  358.         EXA
  359.         XOR A
  360.         SUB E
  361.         JR Z,$+5
  362.         LD C,A
  363.         LDIR
  364.        DEC H
  365.         LD A,1
  366.         JR yRASLOM
  367. nRASLOM
  368.         PUSH HL
  369.         NEG
  370. yRASLOM LD E,A
  371.         LD BC,(SAVErmn)
  372.         LD A,C
  373.         SUB E
  374.         LD C,A
  375.         JR NC,nKON
  376.         DEC B
  377.         JP P,nKON
  378.         ADD A,E
  379.         LD E,A
  380.         LD BC,0
  381. nKON
  382.         LD (SAVErmn),BC
  383.         LD A,E
  384.         ADD A,H
  385.         LD H,A
  386.        EX (SP),HL
  387.        PUSH BC
  388. ;e=number of sectors to save
  389. ;hl=addr
  390.         if 1==1
  391.         ld d,e
  392.         ld e,0
  393.         ld a,b
  394.         or c
  395.         jr nz,SAVE_notlastblock
  396.         ld a,(uNPremn)
  397.         or a
  398.         jr z,SAVE_notlastblock
  399.         ld e,a
  400.         dec d
  401. SAVE_notlastblock
  402.         call SAVEBLOCK
  403.         else
  404.        
  405.         LD C,6
  406.         LD B,E
  407.         LD DE,(stsec)
  408.         CALL DOD
  409.         LD HL,(#5CF4)
  410.         LD (stsec),HL
  411.         endif
  412.        
  413.        POP BC
  414.        POP HL
  415.         LD A,B
  416.         OR C
  417.        JR NZ,savePG0
  418.        LD HL,(DEPADR)
  419.        LD (stAD),HL
  420.        LD A,(curPG)
  421.        LD (stPG),A
  422.         RET
  423. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  424.        
  425. RDBYTE
  426.         INC LY
  427.         LD A,(IY)
  428.         RET NZ
  429. RDBYH
  430.         INC HY
  431.         LD A,HY
  432. ;RDBYHend=$+1
  433.         CP DISKBUF/256+(DISKBUFsz/256)
  434.         LD A,(IY)
  435.          ccf ;CY=0: OK ;TODO яхЁхфхырЄ№ эр CY=1 фы▀ ёъюЁюёЄш
  436.         RET nz
  437.        PUSH HL
  438.        PUSH DE
  439.         PUSH BC
  440.         push IX
  441.        ;CALL rdCS
  442.        ex af,af'
  443.       PUSH AF
  444.        exx
  445.        push bc
  446.        push de
  447.        push hl
  448.        ld de,DISKBUF
  449.        ld hl,DISKBUFsz
  450.         push de
  451.        call readstream_file
  452.         pop de
  453.         push de ;addr
  454. ;hl=actual size
  455.         ld a,h
  456.         or l
  457.         jp z,readerror
  458. ;move block to end of buf:
  459.        ld b,h
  460.        ld c,l
  461.        dec de ;ld de,DISKBUF-1
  462.        add hl,de ;end of data
  463.        ld de,DISKBUF+DISKBUFsz-1
  464.        sbc hl,de
  465.        add hl,de
  466.        jr z,ZIPRDBYHq
  467.         pop af
  468.        lddr
  469.        inc de ;begin of data
  470.         push de
  471. ZIPRDBYHq
  472.         pop iy ;addr = DISKBUF+
  473.        
  474.        pop hl
  475.        pop de
  476.        pop bc
  477.        exx
  478.       POP AF
  479.       ex af,af'
  480.         POP IX
  481.         pop BC
  482.        POP DE
  483.          pop hl
  484.        ;ld iy,DISKBUF
  485.        LD A,(IY)
  486.        or a ;CY=0: OK ;TODO яхЁхфхырЄ№ эр CY=1 фы▀ ёъюЁюёЄш
  487.         RET
  488.  
  489. prcrlf
  490.         ld hl,tcrlf
  491. prtext
  492.         ld a,(hl)
  493.         or a
  494.         ret z
  495.         push hl
  496.         push iy
  497.         PRCHAR
  498.         pop iy
  499.         pop hl
  500.         inc hl
  501.         jr prtext
  502.        
  503. tcrcerror
  504.         db "CRC error"
  505. tcrlf
  506.         db 13,10,0
  507.  
  508.         include "../_sdk/file.asm"
  509.         include "rarfile.asm"
  510.         include "rardepk.asm"
  511.        
  512. defaultfilename
  513.         db "0:/rar/acnews47.rar",0
  514. ;filename
  515. ;        db "depkfile.fil"
  516. ;        ds filename+256-$ ;фы  фышээ√ї шь╕э
  517.  
  518. CURFILE DS namln
  519. ;DESCRIP DS 16 ;TODO єсЁрЄ№
  520.  
  521. CURPOS  DS 4
  522. NXTPOS  DS 4
  523.  
  524. ;;;;;32 bytes rar file header
  525. CRCF    DW 0
  526. TYPEF   DB 0
  527. FLAGF   DW 0
  528. SIZEF   DW 0 ;head size
  529. ;;^^^7 bytes also form archive footer
  530. ADDSZF  DS 4 ;packed size
  531.  
  532. UNPSIZE DS 4
  533. HOSTOS DB 0;NU
  534. FILECRC DS 4
  535. FTIME   DS 4
  536. UNPVER  DB 0
  537. METHOD  DB 0
  538. NAMSIZE DW 0
  539. ATTR    DS 4
  540. ;;;;;;;;;;;;;;;;;;;
  541.  
  542. EXPTYP  DW 0 ;expected type&FLAGH
  543. ;CRCLO   DW 0
  544. ;YEFLAGH DB 0 ;TWICE;1=depk,0=view
  545. ;FREXPT  DB 0 ;TWICE
  546. ;FILEZ   DW 0;usable.FileCount
  547. ERRORS  DW 0;ErrCount
  548. ;unknown DW 0;NU=0.ExtrFile
  549. known   DB 0 ;NOT unknown.MDCode
  550. ;SCANres DW 0 ;TWICE.SCANres=HL.AllArgsUsed
  551. ;CANTCR  DW 0;NU=0!can't create.UserReject
  552. ;PASWFLG DW 0 ;(password?).TmpPassword
  553. ;BEFEXTR DB 0 ;1=фю EXTRACT.FirstFile
  554. ;GDEIX   DW 0 ;ArcPtr
  555. VOLFLG  DB 0;ArcType,2=vol
  556. SOLFLG  DB 0;SolidType(1)
  557. TSTARES DB 0;ArcFormat
  558.  
  559. volPKSZ DS 4
  560. volUNSZ DS 4
  561. pieces  DW 0 ;FileCount
  562. ;zagol   DW 0;1=чруюы єцх эряхў
  563. uNPremn DS 4;DestUnpSize
  564.  
  565.  IF crc
  566. CRCArea DS 4
  567.  ENDIF
  568. CRCA    DW 0 ;TWICE=BUF32
  569. TYPEA  DB 0;NU
  570. FLAGA   DW 0
  571. SIZEA   DW 0
  572. _62ae  DW 0;NU
  573. _62b0  DW 0;NU
  574. _62b2  DW 0;NU
  575.  
  576.  ;UnpCRC  DS 4 ;UnpFileCRC
  577. ;YCOMM   DB 0;UnpVolume.4times
  578. COMSYM  DB 0
  579.  
  580. ;        align 256
  581. ;       IFN kb
  582. ;SECBUF  DS kb*1024
  583. ;       ELSE
  584. ;SECBUF  DS 256
  585. ;       ENDIF
  586.  
  587.         ds 0x2000-$ ;DS -$&3
  588. bd
  589. ld      DS 298*4 ;фюыцэю с√Є№ т√°х 0x4000! TODO
  590. dd      DS 48*4
  591. rd      DS 28*4
  592.  
  593. OUTNAM  DS namln ;DestFileName
  594. pathbuf
  595.         ds MAXPATH_sz
  596.  
  597. oldtimer
  598.         dw 0
  599.        
  600. cmd_end
  601.  
  602.         display "Size ",/d,cmd_end-cmd_begin," bytes"
  603.  
  604.         savebin "unrar.com",cmd_begin,cmd_end-cmd_begin
  605.        
  606.         ;LABELSLIST "../us/user.l"
  607.