Inserting and removing entities in lists

Several functions are provided for inserting and removing entities in lists. You cannot have an entity in more than one list at a time. You can insert and remove entities into lists using the functions in the table below.

Function Description
csptls Insert the entity into the list at the proper position for the ordering defined on the list.
cspols Put the entity on the list using a one-time ordering, as when putting an entity at the head of the list regardless of the list ordering.
csppls Insert the entity prior to a certain entity already in the list.
cspfls Insert the entity following a certain entity already in the list.
csgtls Remove by an entity’s position in the list.
csgpls Remove by a pointer to the entity.

The following example illustrates the way entities are inserted and removed from a list. This function builds a list of materials which have a quantity on hand below some threshold. It then passes the list to a function named “process” to do some processing of the information in the list. Finally, the function empties and deletes the list.


typedef struct 
{
   MATL *mp;   /* Pointer to a material. */
}UCMATL;

#define UCTHOLD 100.0

void lowqoh()
{
   MATL    *mp;
   CSLIST   *lp;
   UCMATL   *ucp, *nucp;

   lp = CSMXLS("", CSFIFO, NULL);

   for ( mp = (MATL *)csfsls(SSGVAR.sgmatl);
      mp != NULL;
      mp = (MATL *)csnxls(CSENTITY *mp)) 
   {

    if ( mp->mtqoh <= UCTHOLD ) 
    {
        ucp = CSNEW(UCMATL);
        ucp->mp = mp;
        csptls(lp, CSENTITY *ucp);
    }
   }
   process(lp);

   for ( ucp = (UCMATL *)csfsls(lp);
      ucp != NULL;
      ucp = nucp) 
   {
      nucp = (UCMATL *)csnxls(CSENTITY *ucp);
      csgpls(lp,ucp);
      csterm(ucp);
   }
   csdlls(lp);
}