Subversion Repositories Kolibri OS

Rev

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

  1. head dd 0
  2. node equ ftdi_context
  3. node.next equ ftdi_context.next_context
  4. linkedlist:
  5.  
  6.   .add:
  7.     push ebx
  8.         mov     ebx, [head]                            
  9.         mov     [head], eax
  10.         mov     [eax + node.next], ebx 
  11.     pop ebx
  12.         ret
  13.  
  14.   .delete:
  15.     push ebx ecx
  16.         mov ebx, eax     ; eax - pointer to node for delete
  17.         cmp eax, [head]
  18.         jz  .unlink_head
  19.  
  20.   .getnext:
  21.         cmp [ebx+node.next], eax
  22.         jz  .unlink
  23.         cmp [ebx+node.next], 0
  24.         jz  .invalid_pointer
  25.         mov ebx, [ebx+node.next]
  26.         jmp .getnext
  27.  
  28.   .unlink:
  29.         mov ecx, [eax+node.next]
  30.         mov [ebx+node.next], ecx
  31.         jmp @f
  32.  
  33.  
  34.   .unlink_head:
  35.         mov ebx, [eax+node.next]
  36.         mov [head], ebx
  37.   @@:
  38.         mov   ecx, eax
  39.         call  Kfree
  40.   .invalid_pointer:
  41.     pop   ecx ebx
  42.         ret
  43.  
  44.   .gethead:
  45.         mov     eax, [head]
  46.         ret
  47.  
  48. restore node
  49. restore node.next