Subversion Repositories Kolibri OS

Rev

Rev 4979 | Rev 5023 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4979 Rev 4997
Line -... Line 1...
-
 
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
 
1
head dd 0
8
head dd 0
2
node equ ftdi_context
-
 
3
node.next equ ftdi_context.next_context
-
 
4
linkedlist:
9
size dd 0
Line 5... Line 10...
5
 
10
 
6
  .add:
11
linkedlist_add:
7
    push ebx
12
    push ebx
8
	mov	ebx, [head]				
13
	mov	ebx, [head]				
9
	mov	[head], eax
14
	mov	[head], eax
10
	mov	[eax + node.next], ebx	
15
	mov	[eax + node.next], ebx	
11
    pop ebx
16
    pop ebx
Line 12... Line 17...
12
	ret
17
	ret
13
 
18
 
14
  .delete:
19
linkedlist_delete:
15
    push ebx ecx
20
    push ebx ecx
16
	mov ebx, eax	 ; eax - pointer to node for delete
21
	mov ebx, eax	 ; eax - pointer to node for delete
Line 28... Line 33...
28
  .unlink:
33
  .unlink:
29
	mov ecx, [eax+node.next]
34
	mov ecx, [eax+node.next]
30
	mov [ebx+node.next], ecx
35
	mov [ebx+node.next], ecx
31
	jmp @f
36
	jmp @f
Line 32... Line -...
32
 
-
 
33
 
37
    
34
  .unlink_head:
38
  .unlink_head:
35
	mov ebx, [eax+node.next]
39
	mov ebx, [eax+node.next]
36
	mov [head], ebx
40
	mov [head], ebx
37
  @@:
41
  @@:
38
	mov   ecx, eax
42
	mov   ecx, eax
39
	call  Kfree
43
	call  Kfree
40
  .invalid_pointer:
44
  .invalid_pointer:
41
    pop   ecx ebx
45
    pop   ecx ebx
Line -... Line 46...
-
 
46
	ret
-
 
47
    
-
 
48
linkedlist_isvalid:
-
 
49
    push  ebx ecx
42
	ret
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
43
 
65
 
44
  .gethead:
66
linkedlist_gethead:
Line 45... Line 67...
45
  	mov	eax, [head]
67
  	mov	eax, [head]
46
  	ret
68
  	ret
47
 
69