home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Misc / SHMOD10.LHA / ShowModule / Modules / Pmodules / Plist / p_EnleveNode.e < prev    next >
Encoding:
Text File  |  1994-05-27  |  1.9 KB  |  56 lines

  1. PROC p_EnleveNode(ptr_list:PTR TO lh,num_node,doit,dat:PTR TO LONG) /*"p_EnleveNode(ptr_list:PTR TO lh,num_node,doit,dat:PTR TO LONG)"*/
  2. /*===============================================================================
  3.  = Para         : Address of a list,number of a node,if doit<>0 free data,tha data.
  4.  = Return       : The number of the new selected node in the list.
  5.  = Description  : Remove a node.
  6.  ==============================================================================*/
  7.     DEF e_node:PTR TO ln
  8.     DEF new_e_node:PTR TO ln
  9.     DEF count=0,retour=NIL
  10.     DEF p=0,pivadr
  11.     DEF rdat:PTR TO LONG
  12.     e_node:=ptr_list.head
  13.     rdat:=dat
  14.     WHILE e_node
  15.         p:=0
  16.         rdat:=dat
  17.         IF count=num_node
  18.             IF doit<>0
  19.                 REPEAT
  20.                     p:=rdat[]++
  21.                     IF p<>DISE
  22.                         IF ((p<>DISE) AND (p<>DISP) AND (p<>DISL))
  23.                             pivadr:=Long(e_node+p)
  24.                         ENDIF
  25.                         IF (p=DISP)
  26.                             IF pivadr THEN Dispose(pivadr)
  27.                         ENDIF
  28.                         IF (p=DISL)
  29.                             IF pivadr THEN DisposeLink(pivadr)
  30.                         ENDIF
  31.                     ENDIF
  32.                 UNTIL (p=DISE)
  33.                 IF e_node THEN Dispose(e_node)
  34.             ENDIF
  35.             IF e_node.succ=0
  36.                 RemTail(ptr_list)
  37.                 retour:=num_node-1
  38.             ELSEIF e_node.pred=0
  39.                 RemHead(ptr_list)
  40.                 retour:=num_node
  41.                 new_e_node:=p_GetAdrNode(ptr_list,num_node)
  42.                 ptr_list.head:=new_e_node
  43.                 new_e_node.pred:=0
  44.             ELSEIF (e_node.succ<>0) AND (e_node.pred<>0)
  45.                 Remove(e_node)
  46.                 retour:=num_node-1
  47.             ENDIF
  48.             IF e_node.name THEN DisposeLink(e_node.name)
  49.         ENDIF
  50.         INC count
  51.         e_node:=e_node.succ
  52.     ENDWHILE
  53.     RETURN retour
  54. ENDPROC
  55.  
  56.