Subversion Repositories Kolibri OS

Rev

Rev 4979 | Rev 5023 | 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
 
4979 gtament 8
head dd 0
4997 gtament 9
size dd 0
4975 gtament 10
 
4997 gtament 11
linkedlist_add:
4979 gtament 12
    push ebx
13
	mov	ebx, [head]
14
	mov	[head], eax
15
	mov	[eax + node.next], ebx
16
    pop ebx
17
	ret
4975 gtament 18
 
4997 gtament 19
linkedlist_delete:
4979 gtament 20
    push ebx ecx
21
	mov ebx, eax	 ; eax - pointer to node for delete
22
	cmp eax, [head]
23
	jz  .unlink_head
4975 gtament 24
 
25
  .getnext:
4979 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
 
33
  .unlink:
4979 gtament 34
	mov ecx, [eax+node.next]
35
	mov [ebx+node.next], ecx
36
	jmp @f
4997 gtament 37
 
4975 gtament 38
  .unlink_head:
4979 gtament 39
	mov ebx, [eax+node.next]
40
	mov [head], ebx
4975 gtament 41
  @@:
4979 gtament 42
	mov   ecx, eax
43
	call  Kfree
4975 gtament 44
  .invalid_pointer:
4979 gtament 45
    pop   ecx ebx
46
	ret
4997 gtament 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
4975 gtament 65
 
4997 gtament 66
linkedlist_gethead:
4979 gtament 67
  	mov	eax, [head]
68
  	ret
4975 gtament 69
 
70
restore node
4979 gtament 71
restore node.next