    ifnd EXEC_LISTS_I
EXEC_LISTS_I set 1

    ifnd    EXEC_NODES_I
    include "asm:include/exec/nodes.i"
    endif

LH          set 0
LH_HEAD     set LH
LH_TAIL     set LH_HEAD+4
LH_TAILPRED set LH_TAIL+4
LH_TYPE     set LH_TAILPRED+4
LH_pad      set LH_TYPE+1
LH_SIZE     set LH_pad+1

MLH          set 0
MLH_HEAD     set MLH
MLH_TAIL     set MLH_HEAD+4
MLH_TAILPRED set MLH_TAIL+4
MLH_SIZE     set MLH_TAILPRED+4



NEWLIST macro   \1
        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
        ifnd    \1
        cmp.l   LH_TAIL+LN_PRED(a0),a0
        endif
        ifd     \1
        cmp.l   LH_TAIL+LN_PRED(\1),\1
        endif
        endm

SUCC    macro   \1,\2
        move.l  (\1),\2
        endm

PRED    macro   \1,\2
        move.l  LN_PRED(\1),\2
        endm

IFEMPTY macro  \1,\2
        cmp.l  LH_TAIL+LN_PRED(\1),\1
        beq    \2
        endm

IFNOTEMPTY  macro   \1,\2
            cmp.l   LH_TAIL+LN_PRED(\1),\1
            bne     \2
            endm

TSTNODE     macro   \1,\2
            move.l  (\1),\2
            tst.l   (\2)
            endm

NEXTNODE    macro   \1,\2,\3
            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)
            movea.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
            movea.l (a1),a0
            movea.l LN_PRED(a1),a1
            move.l  a0,(a1)
            move.l  a1,LN_PRED(a0)
            endm

REMHEAD     macro
            movea.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    macro   \1,\2,\3
            move.l  (\1),\2
            move.l  (\2),\3
            move.l  \3,(\1)
            move.l  \1,LN_PRED(\3)
            endm

REMTAIL     macro
            movea.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

