SUBROUTINE EXTRACTS(RETURN, TARGETS, SUB.FIELDS, SUB.VALUES, SUB.SUBVALUES)
LastUpdated... = "Rev: 11:23 07Dec1993 u2443 43 /users/u2443/BP/EXTRACTS"
***
* Abstract
*    This is a multi-valued function that will remove from TARGETS
* items as specified by FIELDS, VALUES and SUBVALUES.
***
* Revision Log
* Who When.... Why.....................................................
* ATM 08Dec93  Initial coding.
*
***
RETURN = ""
FIELDS         = SAVE.FIELDS
VALUES         = SAVE.VALUES
SUBVALUES      = SAVE.SUBVALUES
MORE.FIELDS    = FIELDS NE ""
MORE.VALUES    = VALUES NE ""
MORE.SUBVALUES = SUBVALUES NE ""
BEGIN CASE
   CASE NOT(MORE.FIELDS)
      RETURN
   CASE NOT(MORE.VALUES)
      GOSUB FIELD.EXTRACT
   CASE NOT(MORE.SUBVALUES)
      GOSUB VALUE.EXTRACT
   CASE 1
      GOSUB SUBVALUE.EXTRACT
END CASE
RETURN
 
FIELD.EXTRACT:
LOOP WHILE MORE.FIELDS
   REMOVE FIELD  FROM FIELDS  SETTING MORE.FIELDS
   RETURN<1,-1> = TARGETS<FIELD>
REPEAT
RETURN
 
VALUE.EXTRACT:
LOOP WHILE MORE.FIELDS AND MORE.VALUES
   REMOVE FIELD  FROM FIELDS  SETTING MORE.FIELDS
   REMOVE VALUE  FROM VALUES  SETTING MORE.VALUES
   RETURN<1,-1> = TARGETS<FIELD,VALUE>
REPEAT
RETURN
 
SUBVALUE.EXTRACT:
LOOP WHILE MORE.FIELDS AND MORE.VALUES AND MORE.SUBVALUES
   REMOVE FIELD    FROM FIELDS    SETTING MORE.FIELDS
   REMOVE VALUE    FROM VALUES    SETTING MORE.VALUES
   REMOVE SUBVALUE FROM SUBVALUES SETTING MORE.SUBVALUES
   RETURN<1,-1> = TARGETS<FIELD,VALUE,SUBVALUE>
REPEAT
RETURN
 
END
