*DECK CLP$GTV 
          PROC CLP$GTV(STRING$,PARAMNM,VALSETNUM,VALNUM,
                    SIDEOFRANG,VALUE$,STATUS$); 
  
#**       CLP$GTV - GET VALUE OF PARAMETER                             #
#                                                                      #
#       CALLING SEQ -                                                  #
#         AS ABOVE                                                     #
#       GIVEN -                                                        #
#         PARAMNM = NAME OF PARAMETER FOR WHICH REQUEST IS MADE        #
#         SIDEOFRANG = LOW OR HIGH SIDE OF RANGE                       #
#         STATUS$ = EXPANDED ERROR STATUS(OUTPUT)                      #
#         STRING$ = ARRAY WHICH CONTAINS STRING AND ITS LENGTH         #
#         VALNUM = VALUES POSITION WITHIN A SET                        #
#         VALSETNUM = VALUE-SETS POSITION WITHIN THE PARAMETER         #
#         VALUE$ = ARRAY WHICH CONTAINS THE PSRAMETER VALUE            #
#       DOES -                                                         #
#         GETS VALUE OF PARAMETER SPECIFIED                            #
#                                                                      #
          BEGIN 
*CALL A 
  
*CALL CLPARAM 
  
*CALL STATUS$ 
  
*CALL STRING$ 
  
*CALL DEBUG 
  
# P #     XREF ITEM DIRFILENUM      U;
  
          ARRAY VALUE$[0:0]S(26); 
              BEGIN 
              ITEM VALUE$LEN  I(0,0,60);  # LENGTH OF VALUE            #
              ITEM VALUE$C    C(1,0,240); # VALUE IN CHARACTERS        #
              END 
  
          XREF
              BEGIN 
              PROC S$ABORT; 
              PROC S$NXTOK; 
#??#          PROC S$PRTCD; 
              END 
  
*CALL E$
  
*CALL CLPTYPE 
  
          XREF
              BEGIN 
*CALL PVT$
              END 
  
*CALL CLPARRA 
          ITEM MES       C(60);  # USED BY S$PRTCD                     #
          ITEM LASTCOL   I; 
          ITEM COMMANUM  I=0;    # NUMBER OF COMMA                     #
          ITEM PARORD    I=0;    # NESTED PARENTHESIS ORDER            #
          ITEM J         I; 
          ITEM SC        I;      # VALUES COUNTED THUS FAR             #
          ITEM VC        I;      # SETS COUNTED THUS FAR               #
  
          DEF PVTLENGTH    #40#; # MAXIMUM NUMBER OF ITEMS IN PVT      #
  
          COMMANUM = 0; 
          PARORD = 0; 
#           FIND THE PARAMNM IN THE PVT$                               #
  
          $BEGIN
          MES = " ";     # BLANK OUT THE LINE # 
#??#      C<0,30>MES = "CLP$GTV-PARAMNM"; 
#??#      C<30,10>MES = PARAMNM;
#??#      S$PRTCD(MES); 
          FLUSH;
          $END
  
  
          FOR J=0 STEP 1 UNTIL PVTLENGTH  DO
              BEGIN 
              IF PVT$KEYWNAM[J] EQ PARAMNM  THEN
#***#             GOTO CONL1; 
#               OTHERWISE CONTINUE LOOP                                #
              END 
  
#           IF PARAMNM WAS NOT FOUND IN THE PVT THEN                   #
          $BEGIN
          S$ABORT("CLP$GTV-1"); 
          $END
  
CONL1:  
  
              $BEGIN
#??#          C<0,30>MES = "CLP$GTV PVT$KEYWNAM= "; 
#??#          C<30,30>MES = PVT$KEYWNAM[J]; 
#??#          S$PRTCD(MES); 
              FLUSH;
              $END
  
          COL = PVT$FINDXVAL[J];
          PREVCOL = COL;
          LASTCOL = PVT$LINDXVAL[J];
          TOKENPRVT = TYP"NONE";
          TOKENTYPE = TYP"NONE";
          SC = 1; 
          VC = 1; 
  
TOPGTV: 
  
  
              $BEGIN
#??#          MES = "TOPGTV"; 
#??#          S$PRTCD(MES); 
              FLUSH;
              $END
  
          IF COL GR LASTCOL  THEN 
              BEGIN 
                          $BEGIN
#??#                      MES = "GTV-5";
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#         GOTO BOTTOMGTV; 
              END 
          S$NXTOK(STRING$,COL$,TOKEN$,STATUS$); 
  
          IF TOKENTYPE EQ TYP"SPACE"  OR  TOKENTYPE EQ TYP"ELLIPSIS"
                THEN
              BEGIN 
                          $BEGIN
#??#                      MES = "GTV-6";
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
              GOTO TOPGTV;
              END 
          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  AND  VC EQ VALNUM   THEN
                  BEGIN 
                          $BEGIN
#??#                      MES = "GTV-7";
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
                  IF TOKENTYPE NQ TYP"NUM" AND TOKENTYPE NQ TYP"STRING" 
                          AND TOKENTYPE NQ TYP"NAME"  THEN
                      BEGIN 
                      VALUE$C[0] = TOKENC;
                      VALUE$LEN[0] = COL - PREVCOL; 
                          $BEGIN
#??#                      MES = "GTV-8";
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#                 RETURN; 
                      END 
                  IF TOKENTYPE EQ TYP"NUM" OR TOKENTYPE EQ TYP"STRING"
                          OR TOKENTYPE EQ TYP"NAME"   THEN
                      BEGIN 
                          $BEGIN
#??#                      MES = "GTV-9";
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
                      IF SIDEOFRANG EQ "LOW"  THEN
                          BEGIN 
                          IF TOKEN$PRVT[0] EQ TYP"ELLIPSIS"  THEN 
#***#                         GOTO TOPGTV;
                          ELSE # IF PRVT IS NOT "ELLIPSIS"             #
                              BEGIN 
                              VALUE$C[0] = TOKENC;
                              VALUE$LEN[0] = COL - PREVCOL; 
                          $BEGIN
#??#                      MES = "GTV-10"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#                         RETURN; 
                              END 
                          END 
                      IF SIDEOFRANG EQ "HIGH"  THEN 
                          BEGIN 
                          IF TOKEN$PRVT[0] EQ TYP"ELLIPSIS"  THEN 
                              BEGIN 
                              VALUE$C[0] = TOKENC;
                              VALUE$LEN[0] = COL - PREVCOL; 
                          $BEGIN
#??#                      MES = "GTV-11"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#                         RETURN; 
                              END 
                          ELSE # IF PRVT IS NOT AN ELLIPSIS            #
#***#                          GOTO TOPGTV; 
                          END 
                      END 
                  END 
  
              IF SC LS VALSETNUM  OR  VC LS VALNUM  THEN
#***#             GOTO TOPGTV;
              $BEGIN
              IF SC GR VALSETNUM  OR VC GR VALNUM  THEN 
                  S$ABORT("CLP$GTV-1B");
              $END
  
              END 
  
  
          IF TOKENTYPE EQ TYP"RP"  THEN 
              BEGIN 
              PARORD = PARORD - 1;
              IF PARORD EQ 0  THEN
                  BEGIN 
                          $BEGIN
#??#                      MES = "GTV-12"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#             GOTO BOTTOMGTV; 
                  END 
              ELSE
                  BEGIN 
                          $BEGIN
#??#                      MES = "GTV-13"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#             GOTO TOPGTV;
                  END 
              END 
  
          IF TOKENTYPE EQ TYP"LP"  THEN 
              BEGIN 
              PARORD = PARORD + 1;
                          $BEGIN
#??#                      MES = "GTV-14"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
#***#         GOTO TOPGTV;
              END 
  
          IF TOKENTYPE EQ TYP"COMMA"  THEN
              BEGIN 
              IF PARORD EQ 1  THEN
                  BEGIN 
                  SC = SC + 1;
                          $BEGIN
#??#                      MES = "GTV-15"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
                  IF SC GR VALSETNUM  THEN
#***#                 GOTO BOTTOMGTV; 
                  ELSE
#***#                 GOTO TOPGTV;
                  END 
              IF PARORD EQ 2  AND  SC EQ VALSETNUM  THEN
                  BEGIN 
                  VC = VC + 1;
                          $BEGIN
#??#                      MES = "GTV-16"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
                  IF VC GR VALNUM  AND  SC GQ VALSETNUM  THEN 
#***#                 GOTO BOTTOMGTV; 
                  ELSE
#***#                 GOTO TOPGTV;
                  END 
              IF PARORD EQ 2  AND  SC NQ VALSETNUM  THEN
                  BEGIN 
#***#             GOTO TOPGTV;
                  END 
              $BEGIN
              IF PARORD NQ 1  AND  PARORD NQ 2  THEN
                  S$ABORT("CLP$GTV-3"); 
              $END
              END 
  
          IF TOKENTYPE EQ TYP"EQUALS"  OR  TOKENTYPE EQ TYP"DOT"
                 THEN  # DON'T FLAG ERROR HERE, IT HAS BEEN DONE       #
#***#         GOTO TOPGTV;
  
          $BEGIN
          IF TOKENTYPE EQ TYP"EOS" OR TOKENTYPE EQ TYP"ILLEGAL" 
                    THEN
              S$ABORT("CLP$GTV-4"); 
          $END
  
BOTTOMGTV:  
#***#     RETURN; 
                          $BEGIN
#??#                      MES = "GTV-17"; 
#??#                      S$PRTCD(MES); 
                          FLUSH;
                          $END
          END # OF CLP$GTV #
          TERM
  
