?login_element?

Subversion Repositories NedoOS

Rev

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

  1. compareattrib
  2.         push hl
  3.         push de
  4.         ld bc,FCB_FATTRIB
  5.         ex de,hl
  6.         add hl,bc
  7.         ex de,hl
  8.         add hl,bc
  9.         ld a,(hl)
  10.         and #10
  11.         ld c,a
  12.         ld a,(de)      
  13.         and #10
  14.         cp c
  15. findmin_ccf=$
  16.         ccf
  17.         pop de  
  18.         pop hl
  19.         ret
  20.  
  21. comparedate
  22.         call compareattrib
  23.         ret nz
  24.         ld bc,FCB_FDATE+1
  25.         ex de,hl
  26.         add hl,bc
  27.         ex de,hl
  28.         add hl,bc
  29.         ld a,(de)
  30.         cp (hl)
  31.         ret nz
  32.         dec hl
  33.         dec de
  34.         ld a,(de)
  35.         cp (hl)
  36.         ret nz
  37.  
  38.         ld bc,FCB_FTIME+1-FCB_FDATE
  39.         ex de,hl
  40.         add hl,bc
  41.         ex de,hl
  42.         add hl,bc
  43.         ld a,(de)
  44.         cp (hl)
  45.         ret nz
  46.         dec hl
  47.         dec de
  48.         ld a,(de)
  49.         cp (hl)
  50.         ret nz
  51.  
  52.         ld bc,-FCB_FTIME
  53.         ex de,hl
  54.         add hl,bc
  55.         ex de,hl
  56.         add hl,bc
  57.         jr compareext_go
  58.  
  59. comparesize
  60.         call compareattrib
  61.         ret nz
  62.         ld bc,FCB_FSIZE+3
  63.         ex de,hl
  64.         add hl,bc
  65.         ex de,hl
  66.         add hl,bc
  67.         ld a,(de)
  68.         cp (hl)
  69.         ret nz
  70.         dec hl
  71.         dec de
  72.         ld a,(de)
  73.         cp (hl)
  74.         ret nz
  75.         dec hl
  76.         dec de
  77.         ld a,(de)
  78.         cp (hl)
  79.         ret nz
  80.         dec hl
  81.         dec de
  82.         ld a,(de)
  83.         cp (hl)
  84.         ret nz
  85.         ld bc,-FCB_FSIZE
  86.         ex de,hl
  87.         add hl,bc
  88.         ex de,hl
  89.         add hl,bc
  90.         jr compareext_go
  91.  
  92. compareext
  93.         call compareattrib
  94.         ret nz
  95. compareext_go
  96.         ld bc,8
  97.         ex de,hl
  98.         add hl,bc
  99.         ex de,hl
  100.         add hl,bc
  101.         ld b,3
  102. compareext0
  103.         inc hl
  104.         inc de
  105.         ld a,(de)
  106.         cp (hl)
  107.         ret nz
  108.         djnz compareext0
  109.         ld bc,-11
  110.         ex de,hl
  111.         add hl,bc
  112.         ex de,hl
  113.         add hl,bc
  114.         ;jr $
  115.         ld b,8
  116.         jp comparefilename0
  117.  
  118. comparefilename
  119. ;hl=fcb1
  120. ;de=fcb2       
  121. ;out: NC = *de>=*hl
  122.         call compareattrib
  123.         ret nz 
  124.         ld b,11
  125. comparefilename0
  126.         inc hl
  127.         inc de
  128.         ld a,(de)
  129.         cp (hl)
  130.         ret nz
  131.         djnz comparefilename0
  132.         ret
  133.        
  134. compareempty
  135.         scf
  136.         ret
  137.  
  138. comparer
  139. ;hl = FCB1, de = FCB2
  140. findmin_proc=$+1
  141.         call compareext
  142. ;NC = *de>=*hl
  143. findmin_ccf2=$
  144.         ccf ;/nop
  145.         ret
  146.  
  147. sortfiles
  148. ;ix=panel
  149.         ld l,(ix+PANEL.dirsortproc)
  150.         ld h,(ix+PANEL.dirsortproc+1)
  151.         ld (findmin_proc),hl
  152.        
  153.         ld a,(ix+PANEL.dirsortmode)
  154.         or a
  155.         ld bc,#3f38
  156.         jr z,$+5
  157.         ld bc,#0030
  158.         ;ld a,c
  159.         ;ld (findmin_jrc),a
  160.         ld a,b
  161.         ld (findmin_ccf),a
  162.         ld (findmin_ccf2),a
  163.        
  164.         ;jp (ix)
  165.  
  166. sorter2
  167.         ;jr $
  168.         call    HPSRT_init
  169.        
  170.         ld c,(ix+PANEL.files)
  171.         ld b,(ix+PANEL.files+1)
  172.         ld a,b
  173.         or c
  174.         ret z
  175.         ;ld l,(ix+PANEL.pointers)
  176.         ;ld h,(ix+PANEL.pointers+1)
  177.         ld e,(ix+PANEL.catbuf)
  178.         ld d,(ix+PANEL.catbuf+1)
  179. sorter2_add0
  180.         push bc
  181.         push de
  182.         ;call getfilepointer_de_fromhl
  183.         ;push hl ;hl=next pointer
  184. ;de=fcb (mangled addr)
  185.         ;exd
  186.         ;push hl
  187.         ;ld d,h
  188.         ;ld e,l
  189.         ;res 6,d
  190.         ;ld a,3 ;TODO remove copy
  191.         ;PGW2strpg
  192. ;в c000 PANEL.pg
  193.         ;ld bc,32
  194.         ;ldir
  195.         ;pop hl
  196.         ;ld     de,0
  197. ;hl=addr to add
  198.         ;exd
  199.         call    HPSRT_add
  200.         ;pop hl
  201.         pop de
  202.         ex de,hl
  203.         ld bc,32
  204.         add hl,bc
  205.         ex hl,de
  206.          jr nc,$+3
  207.          inc de ;next page
  208.          set 7,d
  209.          set 6,d
  210.         pop bc
  211.         dec bc
  212.         ld a,b
  213.         or c
  214.         jr nz,sorter2_add0
  215.        
  216.         jp HPSRT_sort
  217.  
  218.         if 1==0
  219. sorter1
  220.        
  221.         ;ld a,(ix+PANEL.pg)
  222.         ;SETPG32KHIGH
  223.        
  224.         ld c,(ix+PANEL.files)
  225.         ld b,(ix+PANEL.files+1)
  226.         ld a,b
  227.         or c
  228.         ret z
  229.         ld l,(ix+PANEL.pointers)
  230.         ld h,(ix+PANEL.pointers+1)
  231. ;при обратной сортировке в режиме "без сортировки" на каждом проходе в конец списка попадёт первый файл, а на следующем он попадёт в очередное начало, т.е. перестановка в обратном порядке не выйдет
  232. sortfiles_pass0
  233.         push bc
  234.         push hl ;hl=start (in pointers)
  235. ;bc=files!=0
  236.         call findmin
  237. ;de=min (pointer)
  238.          ld hl,(findmin_proc)
  239.          ld bc,compareempty
  240.          or a
  241.          sbc hl,bc
  242.         pop hl ;hl=start (in pointers)
  243. ;copy pointer into hl, move to next pointer
  244.         push af
  245.         call swapfilepointers_hl_de ;out: hl=next pointer
  246.         pop af
  247.         pop bc
  248.          jr nz,$+6 ;not compareempty
  249.          dec bc ;если compareempty
  250.          ld a,b
  251.          or c
  252.          ret z
  253.         dec bc
  254.         ld a,b
  255.         or c
  256.         jr nz,sortfiles_pass0
  257.         ret
  258.  
  259. findmin
  260. ;hl=start (in pointers)
  261. ;bc=files!=0
  262. ;out: de=min (pointer)
  263.         ld e,l
  264.         ld d,h ;de=current min (pointer)
  265. findmin0
  266. ;de=current min (pointer)
  267.         dec bc
  268.         ld a,b
  269.         or c
  270.         ret z
  271.         inc hl
  272.         inc hl
  273.        
  274.         push bc
  275.         push de ;de=current min (pointer)
  276.         push hl
  277.        
  278.         push de ;de=current min (pointer)
  279.         call getfilepointer_de_fromhl
  280.          SETPG32KLOW ;а то сейчас по current min включается PG32KHIGH
  281.          res 6,d
  282.         ex de,hl ;hl=FCB
  283.         ex (sp),hl ;hl=current min (pointer)
  284.         call getfilepointer_de_fromhl
  285.  
  286. ;de=current min (FCB)
  287.         pop hl ;hl=FCB
  288.  
  289.         call comparer
  290.        
  291.         pop hl
  292.         pop de ;de=current min (pointer)
  293.         pop bc
  294. ;NC = *de>=*hl
  295. ;findmin_jrc=$
  296.         jr nc,findmin0;findmin_nomin
  297.         ld e,l
  298.         ld d,h ;de=current min (pointer)
  299. findmin_nomin
  300.         jr findmin0
  301.  
  302.         endif