home *** CD-ROM | disk | FTP | other *** search
/ Dave Lowe: AssemPro For Development Amiga Driver / Lowe_AssemProForDevelopmentAmigaDriver.adf / Includes / exec / lists.i < prev    next >
Encoding:
Text File  |  1978-06-06  |  3.6 KB  |  153 lines

  1.     IFND EXEC_LISTS_I@
  2. EXEC_LISTS_I@ = 1
  3. ;*********************************************************************
  4. ;
  5. ;   Commodore Amiga -- ROM Operating System Executive Include File
  6. ;
  7. ;*********************************************************************
  8. ;
  9. ;   Source Control:
  10. ;
  11. ;       $Header: lists.i,v 33.1 86/03/07 17:30:54 neil Exp $
  12. ;
  13. ;       $Locker:  $
  14. ;
  15. ;*********************************************************************
  16.  
  17.     IFND EXEC_NODES_I@
  18.     INCLUDE "exec/nodes.i"
  19.     ENDIF
  20.  
  21.  
  22. ;---------------------------------------------------------------------
  23. ;
  24. ;   List Structures
  25. ;
  26. ;---------------------------------------------------------------------
  27.  
  28. ; normal, full featured list
  29.  STRUCTURE  LH,0
  30.     APTR    LH_HEAD
  31.     APTR    LH_TAIL
  32.     APTR    LH_TAILPRED
  33.     UBYTE   LH_TYPE
  34.     UBYTE   LH_pad
  35.     LABEL   LH_SIZE
  36.  
  37. ; minimal list, no type checking possible
  38.  STRUCTURE  MLH,0
  39.     APTR    MLH_HEAD
  40.     APTR    MLH_TAIL
  41.     APTR    MLH_TAILPRED
  42.     LABEL   MLH_SIZE
  43.  
  44.  
  45. NEWLIST     MACRO   $\1  ; list
  46.             MOVE.L  \1,(\1)
  47.             ADDQ.L  #LH_TAIL,(\1)
  48.             CLR.L   LH_TAIL(\1)
  49.             MOVE.L  \1,(LH_TAIL+LN_PRED)(\1)
  50.             ENDM
  51.  
  52. TSTLIST     MACRO   $\1  ; [list]
  53.             IFND     \1
  54.             CMP.L   LH_TAIL+LN_PRED(A0),A0
  55.             ELSE
  56.             CMP.L   LH_TAIL+LN_PRED(\1),\1
  57.             ENDIF
  58.             ENDM
  59.  
  60. SUCC        MACRO   $\1,$\2  ; node,succ
  61.             MOVE.L  (\1),\2
  62.             ENDM
  63.  
  64. PRED        MACRO   $\1,$\2  ; node,pred
  65.             MOVE.L  LN_PRED(\1),\2
  66.             ENDM
  67.  
  68. IFEMPTY     MACRO   $\1,$\2  ; list,label
  69.             CMP.L   LH_TAIL+LN_PRED(\1),\1
  70.             BEQ     \2
  71.             ENDM
  72.  
  73. IFNOTEMPTY  MACRO   $\1,$\2  ; list,label
  74.             CMP.L   LH_TAIL+LN_PRED(\1),\1
  75.             BNE     \2
  76.             ENDM
  77.  
  78. TSTNODE     MACRO   $\1,$\2  ; node,next
  79.             MOVE.L  (\1),\2
  80.             TST.L   (\2)
  81.             ENDM
  82.  
  83. NEXTNODE    MACRO   $\1,$\2,$\3  ; next,current,exit_label (DX,AX,DISP16)
  84.             MOVE.L  \1,\2
  85.             MOVE.L  (\2),\1
  86.             BEQ     \3
  87.             ENDM
  88.  
  89. ADDHEAD     MACRO
  90.             MOVE.L  (A0),D0
  91.             MOVE.L  A1,(A0)
  92.             MOVEM.L D0/A0,(A1)
  93.             MOVE.L  D0,A0
  94.             MOVE.L  A1,LN_PRED(A0)
  95.             ENDM
  96.  
  97. ADDTAIL     MACRO
  98.             LEA     LH_TAIL(A0),A0
  99.             MOVE.L  LN_PRED(A0),D0
  100.             MOVE.L  A1,LN_PRED(A0)
  101.             MOVE.L  A0,(A1)
  102.             MOVE.L  D0,LN_PRED(A1)
  103.             MOVE.L  D0,A0
  104.             MOVE.L  A1,(A0)
  105.             ENDM
  106.  
  107. REMOVE      MACRO
  108.             MOVE.L  (A1),A0
  109.             MOVE.L  LN_PRED(A1),A1
  110.             MOVE.L  A0,(A1)
  111.             MOVE.L  A1,LN_PRED(A0)
  112.             ENDM
  113.  
  114. REMHEAD     MACRO
  115.             MOVE.L  (A0),A1
  116.             MOVE.L  (A1),D0
  117.             BEQ.S   \A
  118.             MOVE.L  D0,(A0)
  119.             EXG.L   D0,A1
  120.             MOVE.L  A0,LN_PRED(A1)
  121. \A:
  122.             ENDM
  123.  
  124. ;----------------------------------------------------------------
  125. ;
  126. ;  REMHEADQ -- remove-head quickly
  127. ;
  128. ;       Useful when a scratch register is available, and
  129. ;       list is known to contain at least one node.
  130. ;
  131. ;----------------------------------------------------------------
  132.  
  133. REMHEADQ    MACRO   $\1,$\2,$\3  ; head,node,scratchReg
  134.             MOVE.L  (\1),\2
  135.             MOVE.L  (\2),\3
  136.             MOVE.L  \3,(\1)
  137.             MOVE.L  \1,LN_PRED(\3)
  138.             ENDM
  139.  
  140. REMTAIL     MACRO
  141.             MOVE.L  LH_TAIL+LN_PRED(A0),A1
  142.             MOVE.L  LN_PRED(A1),D0
  143.             BEQ.S   \A
  144.             MOVE.L  D0,LH_TAIL+LN_PRED(A0)
  145.             EXG.L   D0,A1
  146.             MOVE.L  A0,(A1)
  147.             ADDQ.L  #4,(A1)
  148. \A:
  149.             ENDM
  150.  
  151.     ENDIF
  152.     END