Subversion Repositories Kolibri OS

Rev

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