Subversion Repositories Kolibri OS

Rev

Rev 4997 | Rev 5036 | 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:
5023 gtament 45
  pop   ecx ebx
4979 gtament 46
	ret
4997 gtament 47
 
5023 gtament 48
linkedlist_isvalid:       ;eax - pointer to check; returns zero if valid
49
    inc   ecx
50
    test  eax, eax
51
    jz    .valid_pointer  ;actually, poiner is not valid
4997 gtament 52
    push  ebx ecx
53
    xor   ecx, ecx
54
    mov   ebx, [head]
55
  .next_check:
56
    cmp   eax, ebx
57
    jz    .valid_pointer
58
    mov   ebx, [ebx + node.next]
59
    test  ebx, ebx
60
    jz    .invalid_pointer
61
    jmp   .next_check
62
  .invalid_pointer:
63
    inc   ecx
64
  .valid_pointer:
65
    mov   eax, ecx
66
    pop   ecx ebx
67
    ret
4975 gtament 68
 
4997 gtament 69
linkedlist_gethead:
4979 gtament 70
  	mov	eax, [head]
71
  	ret
4975 gtament 72
 
73
restore node
4979 gtament 74
restore node.next