Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. head dd 0
  9. size dd 0
  10.  
  11. linkedlist_add:
  12.     push ebx
  13.         mov     ebx, [head]                            
  14.         mov     [head], eax
  15.         mov     [eax + node.next], ebx 
  16.     pop ebx
  17.         ret
  18.  
  19. linkedlist_delete:
  20.     push ebx ecx
  21.         mov ebx, eax     ; eax - pointer to node for delete
  22.         cmp eax, [head]
  23.         jz  .unlink_head
  24.  
  25.   .getnext:
  26.         cmp [ebx+node.next], eax
  27.         jz  .unlink
  28.         cmp [ebx+node.next], 0
  29.         jz  .invalid_pointer
  30.         mov ebx, [ebx+node.next]
  31.         jmp .getnext
  32.  
  33.   .unlink:
  34.         mov ecx, [eax+node.next]
  35.         mov [ebx+node.next], ecx
  36.         jmp @f
  37.    
  38.   .unlink_head:
  39.         mov ebx, [eax+node.next]
  40.         mov [head], ebx
  41.   @@:
  42.         mov   ecx, eax
  43.         call  Kfree
  44.   .invalid_pointer:
  45.     pop   ecx ebx
  46.         ret
  47.    
  48. linkedlist_isvalid:
  49.     push  ebx ecx
  50.     xor   ecx, ecx
  51.     mov   ebx, [head]
  52.   .next_check:
  53.     cmp   eax, ebx
  54.     jz    .valid_pointer
  55.     mov   ebx, [ebx + node.next]
  56.     test  ebx, ebx
  57.     jz    .invalid_pointer
  58.     jmp   .next_check      
  59.   .invalid_pointer:  
  60.     inc   ecx
  61.   .valid_pointer:
  62.     mov   eax, ecx
  63.     pop   ecx ebx
  64.     ret
  65.  
  66. linkedlist_gethead:
  67.         mov     eax, [head]
  68.         ret
  69.  
  70. restore node
  71. restore node.next