Subversion Repositories Kolibri OS

Rev

Rev 5037 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4997 gtament 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
 
5037 gtament 8
head    dd 0
4975 gtament 9
 
4997 gtament 10
linkedlist_add:
5037 gtament 11
    push    ebx
5085 gtament 12
    mov     ebx, [head]
13
    mov     [head], eax
14
    mov     [eax + node.next], ebx
5037 gtament 15
    pop     ebx
5085 gtament 16
    ret
4975 gtament 17
 
5085 gtament 18
linkedlist_unlink:
5037 gtament 19
    push    ebx ecx
5085 gtament 20
    test    eax, eax
21
    jz      .invalid_pointer
22
    mov     ebx, eax     ; eax - pointer to node for unlink
23
    cmp     eax, [head]
24
    jz      .unlink_head
4975 gtament 25
  .getnext:
5085 gtament 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
4975 gtament 32
  .unlink:
5085 gtament 33
    mov     ecx, [eax+node.next]
34
    mov     [ebx+node.next], ecx
35
    jmp     @f
4975 gtament 36
  .unlink_head:
5085 gtament 37
    mov     ebx, [eax+node.next]
38
    mov     [head], ebx
4975 gtament 39
  @@:
40
  .invalid_pointer:
5037 gtament 41
    pop     ecx ebx
5085 gtament 42
    ret
4997 gtament 43
 
5023 gtament 44
linkedlist_isvalid:       ;eax - pointer to check; returns zero if valid
5037 gtament 45
    push    ebx ecx
46
    xor     ecx, ecx
47
    test    eax, eax
48
    jz      .invalid_pointer
49
    mov     ebx, [head]
4997 gtament 50
  .next_check:
5037 gtament 51
    cmp     eax, ebx
52
    jz      .valid_pointer
53
    mov     ebx, [ebx + node.next]
54
    test    ebx, ebx
55
    jz      .invalid_pointer
56
    jmp     .next_check
4997 gtament 57
  .invalid_pointer:
5037 gtament 58
    inc     ecx
4997 gtament 59
  .valid_pointer:
5037 gtament 60
    mov     eax, ecx
61
    pop     ecx ebx
4997 gtament 62
    ret
4975 gtament 63
 
4997 gtament 64
linkedlist_gethead:
5085 gtament 65
    mov     eax, [head]
66
    ret
4975 gtament 67
 
68
restore node
4979 gtament 69
restore node.next