*COMDECK  CCLLAB
          TITLE  CCLLAB  -  LABEL PROCESSING
**        CCLLAB  -  LABELS 
* 
*         CCLLAB IS CALLED BY CCL CONDITIONAL VERB PROCESSING 
*         TO INTERPRET WHAT IS EXPECTED TO BE A LABEL FROM A
*         CCL STATEMENT.  A LABEL STRING MUST BE PRESENT. 
*         A LABEL STRING MUST BEGIN WITH AN ALPHA CHARACTER 
*         A LABEL STRING MUST BE FOLLOWED BY A STATEMENT TERMINATOR.
* 
*         ENTRY- CCL STATEMENT CRACKED UP TO THE SEPARATOR
*                  PRECEDING THE LABEL. 
*                ANSSEP - SEPARATOR PRECEDING LABEL 
* 
*         EXIT   LABEL= CHARACTER STRING, OR ZERO IF NUMERIC
* 
  
 CCLLAB   SUBR   =
          SA3    ANSSEP 
          SX6    B1          ASSUME OMITTED, HENCE = 1
          SX4    X3-1R. 
          SX0    X3-1R) 
  
*         IF THE SEPARATOR IS IN FACT A TERMINATOR, THEN THE LABEL
*         IS BY DEFINITION OMITTED AND THE STRING IS NOT EXAMINED 
  
          SX2    LABPER 
          ZR     X4,LAB7     IF  .
          SX2    LABPAR 
          ZR     X0,LAB7     IF  )
  
          SA1    PBCOND      1 = PROC BODY CONDITIONAL
          ZR     X1,LAB1     READ (IF IFE) VERB LABEL 
  
*         READ THE LABEL ON .IF AND .IFE STATEMENTS.  USE 
*         THE INTERACTIVE CALL FLAG (IACICF) TO CAUSE ERROR 
*         MESSAGES TO RETURN HERE WITHOUT BEING SENT TO 
*         THE DAYFILE.
  
          SX7    1
          SA7    IACICF      SET FLAG 
  
 LAB1     BSS    0           READ LABEL 
          RJ     CCLGNP      GET LABEL
          SA1    PBCOND      1 = PROC BODY CONDITION (.IF/.ELSE/.ENDIF) 
          ZR     X5,LAB2     NO ERRORS IN READING 
          ZR     X1,EXIT2    ERR MSGS ALREADY SENT FOR VERB IF
  
 LAB2     BSS    0
          ZR     X1,LAB2.5   LABEL IS ON IF STATEMENT 
  
          SA4    SCATBF1     UPDATE SCATBF2 HEADER
          BX6    X4 
          SA6    SCATBF2     SCATBF2 IS USED FOR ERRORS 
          MX7    0           PROCESS .IF LABEL
          SA7    IACICF      CLEAR FLAG 
          SA7    IACERR      CLEAR ERRORS 
 LAB2.5   BSS    0
          SA2    ANSCHR 
          SA4    ANSNUM 
          SX0    ANSSTR 
          SX3    MSG127 
          LX0    18 
          BX3    X0+X3       $LABEL STRING TOO LONG$
          SX0    V.LCS+1
          IX2    X2-X0       LENGTH-(MAX+1) 
          PL     X2,BRWERR4  STRING TOO LONG - ABORT WITH MESSAGE 
          ZR     X4,LAB3     IF ALPHANUMERIC LABEL
  
          SX3    MSG121      $LABEL MUST BEGIN ALPHA$ 
          JP     BRWERR4     ABORT WITH ERROR MESSAGE 
  
 LAB3     BSS 
          SA5    ANSSTR 
          BX6    X5 
          SA6    LABEL
          SA1    PBCOND      1 = PROC BODY CONDITIONAL
          NZ     X1,CCLLAB   RETURN - PROC BODY CONDITIONAL 
  
          SA4    ANSSEP 
          SX0    X4-1R. 
          SX7    X4-1R) 
          ZR     X0,CCLLAB   EXIT IF LABEL FOLLOWED BY TERMINATOR 
          ZR     X7,CCLLAB   EXIT IF LABEL FOLLOWED BY TERMINATOR 
  
          SX3    MSG126      $LABEL MUST BE FOLLOWED BY TERMINATOR$ 
          JP     EXIT1       ISSUE ERR MSG AND ABORT
  
*         THE EXPRESSION AND HENCE THE STATEMENT WAS ENDED
*         WITH A STATEMENT TERMINATOR.   HENCE THE LABEL
*         WAS OMITTED.
  
 LAB7     BSS 
  
          LX2    18 
          SX3    MSG104 
          BX3    X2+X3       COMBINE MSG + TERMINATOR WORD
          RJ     STRMGA      ASSEMBLE AND ISSUE ABORT MESSAGE 
  
          SX3    MSG123      $ALPHANUMERIC LABEL REQUIRED$
          JP     EXIT1       ISSUE ERR MSG AND ABORT
  
 LABPER   DATA   C$PERIOD$
 LABPAR   DATA   C$RIGHT PARENTHESIS$ 
