*DECK CLP$GVC 
          PROC CLP$GVC(STRING$,PARAMNM,VALSETNUM,VALCOUNT,STATUS$); 
  
#**       CLP$GVC - GET VALUE-COUNT OF A GIVEN SET OF A PARAMETER      #
#                                                                      #
#       CALLING SEQ -                                                  #
#         AS ABOVE                                                     #
#       GIVEN -                                                        #
#         PARAMNM = NAME OF PARAMETER OF WHICH REQUEST IS MADE         #
#         STATUS$ = EXPANDED ERROR STATUS(OUTPUT)                      #
#         VALCOUNT = NUM. OF VALUES(WITHIN SET)WITHIN PAR. VAL.(OUTPUT)#
#         VALSETNUM = VALUE-SETS POSITION WITHIN THE PARAMETER         #
#       DOES -                                                         #
#         GETS THE NUMBER OF VALUES WITHIN A SET OF A PARAMETER        #
#         AND STORES THIS NUMBER IN VALCOUNT                           #
#                                                                      #
          BEGIN 
*CALL A 
  
*CALL CLPARAM 
  
*CALL STATUS$ 
  
*CALL STRING$ 
  
  
          XREF
              BEGIN 
              PROC S$ABORT; 
              PROC S$NXTOK; 
              END 
  
*CALL E$
  
*CALL CLPTYPE 
  
          XREF
              BEGIN 
*CALL PVT$
              END 
  
*CALL CLPARRA 
  
          ITEM LASTCOL   I; 
          ITEM COMMANUM  I=0;    # NUMBER OF COMMA                     #
          ITEM PARORD    I=0;    # NESTED PARENTHESIS ORDER            #
          ITEM J         I; 
          ITEM SC           I;       # SETS COUNTED THUS FAR           #
          ITEM VC           I;       # VALUES COUNTED THUS FAR         #
          ITEM VCTAKEN   B = FALSE; 
  
DEF PVTLENGTH   #26#;  #  MAXIMUM NUMBER OF ALLOWABLE ITEMS IN PVT     #
  
  
          VCTAKEN = FALSE;
          PARORD = 0; 
          COMMANUM = 0; 
          SC = 1; 
          VC = 0; 
#           FIND THE PARAMNM IN THE PVT$                               #
  
          FOR J=0 STEP 1 UNTIL PVTLENGTH  DO
              BEGIN 
              IF PVT$KEYWNAM[J] EQ PARAMNM  THEN
#***#             GOTO LAB1;
#               OTHERWISE CONTINUE LOOP                                #
              END 
  
#           IF PARAMNM WAS NOT FOUND IN THE PVT THEN                   #
          $BEGIN
          S$ABORT("CLP$GVC-1"); 
          $END
  
LAB1: 
  
          PREVCOL = PVT$FINDXVAL[J];
          COL = PVT$FINDXVAL[J];
          LASTCOL = PVT$LINDXVAL[J];
          TOKENPRVT = TYP"NONE";       #  RESET THESE VARIABLES AT     #
          TOKENTYPE = TYP"NONE";       #  BEGINNING OF THE SEARCH      #
  
TOPGVC: 
  
          IF COL GR LASTCOL  THEN 
#***#         GOTO BOTTOMGVC; 
          S$NXTOK(STRING$,COL$,TOKEN$,STATUS$); 
  
          IF TOKENTYPE EQ  TYP"NAME"  OR  TOKENTYPE EQ TYP"$NAM"  OR
                TOKENTYPE EQ  TYP"NUM"  OR TOKENTYPE EQ  TYP"STRING"
                    THEN
              BEGIN 
              IF SC EQ VALSETNUM  THEN
                  BEGIN 
                  IF TOKENPRVT NQ TYP"ELLIPSIS"  THEN 
                      VC = VC + 1;
#                   ELSE DONT ADVANCE VC                               #
                  VCTAKEN = TRUE; 
#***#             GOTO TOPGVC;
                  END 
              ELSE
#***#             GOTO TOPGVC;
              END 
  
          IF TOKENTYPE EQ  TYP"RP"  THEN
              BEGIN 
              PARORD = PARORD - 1;
              IF PARORD EQ 0  THEN
#***#             GOTO BOTTOMGVC; 
              IF PARORD GR 0  THEN
                  BEGIN 
                  IF VCTAKEN  THEN
#***#                 GOTO BOTTOMGVC; 
                  IF NOT VCTAKEN  THEN
                      GOTO TOPGVC;
                  END 
              END 
  
          IF TOKENTYPE EQ TYP"LP"  THEN 
              BEGIN 
              PARORD = PARORD + 1;
              IF PARORD EQ 1  THEN
                  SC = 1; 
#***#         GOTO TOPGVC;
              END 
  
          IF TOKENTYPE EQ TYP"COMMA"  THEN
              BEGIN 
              IF PARORD EQ 0  THEN
#***#             GOTO BOTTOMGVC; 
              IF PARORD EQ 1  THEN
                  BEGIN 
                  SC = SC + 1;
                  IF VCTAKEN  THEN
#***#                 GOTO BOTTOMGVC; 
                  IF NOT VCTAKEN  THEN
#***#                 GOTO TOPGVC;
                  END 
              IF PARORD EQ 2 THEN 
#***#             GOTO TOPGVC;
              END 
  
          IF TOKENTYPE EQ TYP"SPACE"  OR  TOKENTYPE EQ TYP"ELLIPSIS"
                    THEN
#***#         GOTO TOPGVC;
  
          IF TOKENTYPE EQ TYP"EQUALS"  OR  TOKENTYPE EQ TYP"DOT"
                 THEN  # DON'T FLAG ERROR HERE, IT HAS BEEN DONE       #
#***#         GOTO TOPGVC;
  
          $BEGIN
          IF TOKENTYPE EQ TYP"EOS" OR TOKENTYPE EQ TYP"ILLEGAL" 
                    THEN
              S$ABORT("CLP$GVC-4"); 
          $END
  
BOTTOMGVC:  
  
          VALCOUNT = VC;
#***#     RETURN; 
          END # OF CLP$GVC #
          TERM
  
