home *** CD-ROM | disk | FTP | other *** search
- ;-------------------------------------
- ;-- Define Linked-List Node objects --
- ;-------------------------------------
-
- MODEL SMALL
- LOCALS
-
- ;This object is designed to be inherited by any actual data object that is
- ;placed in the Linked-List, on the Queue or the Stack defined in this module.
-
- ;** Define Linked-List Node object **
-
- INCLUDE node.aso
-
- ;** Create instance of Linked-List virtual method table **
-
- DATASEG
-
- TBLINST
-
- ;** Define some macros for use by the methods **
- ;** These are used by the methods for storing and loading double registers **
-
- ;Load two 16-bit registers from an address in specified segment
- loadptr macro r2,r1, addr
- mov r2,word ptr [addr+2]
- mov r1,word ptr [addr]
- endm
-
- ;** Linked-List Node methods **
-
- CODESEG
-
- ;Construct (allocate space for) the Node object
- ;This is the method "node|construct"
- ;This must be a static method
- ;Returns AX:BX pointing to allocated but uinitialized node (null if none).
- node_construct PROC PASCAL FAR
- ARG @@size:word
- USES es
- ;-- Allocate memory for the node --
- mov bx,@@size
- add bx,15
- shr bx,4
- mov ah,48h
- int 21h
- jc @@err
- sub bx,bx
- ret
- @@err: sub ax,ax
- sub bx,bx
- ret
- ENDP
-
- ;Destroy the Node object
- ;This is the method "node|destroy"
- node_destroy PROC PASCAL FAR
- ARG @@node:dword
- USES es
- ;-- deallocate memory for the node --
- mov es,word ptr @@node+2
- mov ah,49h
- int 21h
- ret
- ENDP
-
- ;Initialize the Node object.
- ;This is the method "node|init"
- node_init PROC PASCAL FAR
- ARG @@node:dword
- USES ds,bx
- lds bx,@@node
- ;-- Initialize any virtual method table for the object at ds:bx --
- TBLINIT ds:bx
- ;-- Initialize the object's data --
- sub ax,ax
- mov word ptr ds:[bx.node_next],ax
- mov word ptr ds:[bx.node_next+2],ax
- mov word ptr ds:[bx.node_prev],ax
- mov word ptr ds:[bx.node_prev+2],ax
- ret
- ENDP
-
- ;Deinitialize the Node object.
- ;This is the method "node|deinit"
- node_deinit PROC PASCAL FAR
- ARG @@node:dword
- ;does nothing.
- ret
- ENDP
-
- ;Advance to the next node in the linked-list of node objects.
- ;This is the method "node|next"
- ;Returns DX:AX pointing to next node, null if none.
- node_adv PROC PASCAL NEAR
- ARG @@node:dword
- USES ds,si
- lds si,@@node
- loadptr dx,ax, ds:si.node_next
- ret
- ENDP
-
- ;Backup to the previous node in the linked-list of node objects.
- ;This is the method "node|prev"
- ;Returns DX:AX pointing to previous node, null if none.
- node_back PROC PASCAL NEAR
- ARG @@node:dword
- USES ds,si
- lds si,@@node
- loadptr dx,ax, ds:si.node_prev
- ret
- ENDP
-
- END
-