home *** CD-ROM | disk | FTP | other *** search
- IFND EXEC_LISTS_I@
- EXEC_LISTS_I@ = 1
- ;*********************************************************************
- ;
- ; Commodore Amiga -- ROM Operating System Executive Include File
- ;
- ;*********************************************************************
- ;
- ; Source Control:
- ;
- ; $Header: lists.i,v 33.1 86/03/07 17:30:54 neil Exp $
- ;
- ; $Locker: $
- ;
- ;*********************************************************************
-
- IFND EXEC_NODES_I@
- INCLUDE "exec/nodes.i"
- ENDIF
-
-
- ;---------------------------------------------------------------------
- ;
- ; List Structures
- ;
- ;---------------------------------------------------------------------
-
- ; normal, full featured list
- STRUCTURE LH,0
- APTR LH_HEAD
- APTR LH_TAIL
- APTR LH_TAILPRED
- UBYTE LH_TYPE
- UBYTE LH_pad
- LABEL LH_SIZE
-
- ; minimal list, no type checking possible
- STRUCTURE MLH,0
- APTR MLH_HEAD
- APTR MLH_TAIL
- APTR MLH_TAILPRED
- LABEL MLH_SIZE
-
-
- NEWLIST MACRO $\1 ; list
- MOVE.L \1,(\1)
- ADDQ.L #LH_TAIL,(\1)
- CLR.L LH_TAIL(\1)
- MOVE.L \1,(LH_TAIL+LN_PRED)(\1)
- ENDM
-
- TSTLIST MACRO $\1 ; [list]
- IFND \1
- CMP.L LH_TAIL+LN_PRED(A0),A0
- ELSE
- CMP.L LH_TAIL+LN_PRED(\1),\1
- ENDIF
- ENDM
-
- SUCC MACRO $\1,$\2 ; node,succ
- MOVE.L (\1),\2
- ENDM
-
- PRED MACRO $\1,$\2 ; node,pred
- MOVE.L LN_PRED(\1),\2
- ENDM
-
- IFEMPTY MACRO $\1,$\2 ; list,label
- CMP.L LH_TAIL+LN_PRED(\1),\1
- BEQ \2
- ENDM
-
- IFNOTEMPTY MACRO $\1,$\2 ; list,label
- CMP.L LH_TAIL+LN_PRED(\1),\1
- BNE \2
- ENDM
-
- TSTNODE MACRO $\1,$\2 ; node,next
- MOVE.L (\1),\2
- TST.L (\2)
- ENDM
-
- NEXTNODE MACRO $\1,$\2,$\3 ; next,current,exit_label (DX,AX,DISP16)
- MOVE.L \1,\2
- MOVE.L (\2),\1
- BEQ \3
- ENDM
-
- ADDHEAD MACRO
- MOVE.L (A0),D0
- MOVE.L A1,(A0)
- MOVEM.L D0/A0,(A1)
- MOVE.L D0,A0
- MOVE.L A1,LN_PRED(A0)
- ENDM
-
- ADDTAIL MACRO
- LEA LH_TAIL(A0),A0
- MOVE.L LN_PRED(A0),D0
- MOVE.L A1,LN_PRED(A0)
- MOVE.L A0,(A1)
- MOVE.L D0,LN_PRED(A1)
- MOVE.L D0,A0
- MOVE.L A1,(A0)
- ENDM
-
- REMOVE MACRO
- MOVE.L (A1),A0
- MOVE.L LN_PRED(A1),A1
- MOVE.L A0,(A1)
- MOVE.L A1,LN_PRED(A0)
- ENDM
-
- REMHEAD MACRO
- MOVE.L (A0),A1
- MOVE.L (A1),D0
- BEQ.S \A
- MOVE.L D0,(A0)
- EXG.L D0,A1
- MOVE.L A0,LN_PRED(A1)
- \A:
- ENDM
-
- ;----------------------------------------------------------------
- ;
- ; REMHEADQ -- remove-head quickly
- ;
- ; Useful when a scratch register is available, and
- ; list is known to contain at least one node.
- ;
- ;----------------------------------------------------------------
-
- REMHEADQ MACRO $\1,$\2,$\3 ; head,node,scratchReg
- MOVE.L (\1),\2
- MOVE.L (\2),\3
- MOVE.L \3,(\1)
- MOVE.L \1,LN_PRED(\3)
- ENDM
-
- REMTAIL MACRO
- MOVE.L LH_TAIL+LN_PRED(A0),A1
- MOVE.L LN_PRED(A1),D0
- BEQ.S \A
- MOVE.L D0,LH_TAIL+LN_PRED(A0)
- EXG.L D0,A1
- MOVE.L A0,(A1)
- ADDQ.L #4,(A1)
- \A:
- ENDM
-
- ENDIF
- END