*DECK     CCLBRWE 
          IDENT  CCLBRWE     BEGIN/REVERT, WHILE/ENDW MODULE
*IF       -DEF,SC2
          LCC    OVERLAY(CCLBRWE,0,0) 
          ENTRY  EXIT2,FILEHP,IORDL,IOREW,IOSKP 
          ENTRY  BIV100,BPM050,STRDTC,STRPKS,STRFZB,STRUPS,STRANS 
          ENTRY  CCLNPV,BSM100,CCLRPV,BRWERR5,BSC,BIV150,BVE
          ENTRY  STRTASC,STRPK12
*ENDIF
          SST 
          COMMENT CYBER CONTROL LANGUAGE (L560) BEGIN,REVERT,WHILE,ENDW 
          TITLE  CCL-CYBER CONTROL LANGUAGE - CCLBRWE- BEGIN/REVERT/WHIL
,E/ENDW 
*CALL  COPYRT 
 CPRT     HERE
**        CCL  -  CYBER CONTROL LANGUAGE
* 
*         THE CYBER CONTROL LANGUAGE (CCL) PROVIDES CONTROL STATEMENT 
*         FILE MANIPULATION CAPABILITIES.  VARIOUS VERBS ARE PROVIDED 
*         TO SELECT DIFFERENT FUNCTIONS.  SOME VERBS CAUSE CONTROL
*         STATEMENTS TO BE SKIPPED CONDITIONALLY.  OTHER VERBS SELECT 
*         EXECUTION OF CONTROL STATEMENTS FROM SOURCES OTHER THAN THE 
*         ORIGINAL JOB FILE.
* 
*         THE CCL PROCESSOR IS DIVIDED INTO THREE DISTINCT MODULES. 
*         CCLBRWE - PROCESSES VERBS BEGIN/REVERT AND WHILE/ENDW 
*         CCLIFES - PROCESSES VERBS IFE/ELSE/ENDIF AND SKIP 
*         CCLDS   - PROCESSES VERBS DISPLAY AND SET 
* 
*         CCL EXECUTES IN THE USERS FIELD LENGTH.  EACH CCL VERB IS 
*         DEFINED AS AN ENTRY POINT WITH THE MODULE.  WHENEVER
*         A CCL VERB IS INVOKED THE LOADER WILL FIND THE ENTRY
*         POINT IN THE LIBRARY AND LOAD THE CCL CODE AND THEN 
*         INITIATE EXECUTION AT THE SPECIFIED ENTRY POINT.
* 
*         EACH MODULE OF CCL USES COMMON DECK SUBROUTINES THAT ARE
*         LISTED AT THE BEGINNING OF THE CCLBRWE MODULE.  (SUBROUTINES
*         NOT USED BY CCLBRWE ARE LISTED IN THE MODULE THAT USES IT). 
* 
*         THE INITIALIZATION AND ENTRY SUBROUTINES DEFINE ALL OF THE
*         VERB ENTRY POINTS AND THE BASIC CONTROL LOGIC FOR THE MODULE. 
*         CCLXXX SUBROUTINES AND SUBROUTINES OF THE FORM XXX ARE CALLED 
*         TO PROCESS VERB RELATED TASKS REQUIRED BY THE MODULE. 
*         STRXXX SUBROUTINES PROCESS STRING MANIPULATION TASKS. 
*         IOXXX SUBROUTINES PROCESS INPUT AND OUTPUT FUNCTIONS. 
* 
*         SYMBOL AND STORAGE DEFINITION COMMON DECKS EXIST THAT ENABLE
*         COMMUNICATION AMONG THE PROGRAMS OF CCL.
*         CCL - DEFINES SYSTEM SYMBOLS, INSTALLATION PARAMETERS, SYSTEM 
*               DEPENDENT VALUES, FILE NAMES VIA MICROS AND OTHER VALUE 
*               SYMBOLS USED WITHIN CCL.  ALSO DEFINED IN THE CCL DECK
*               ARE MACROS AND FIELD DEFINITIONS USED WITHIN MODULES. 
*         COMALL - DEFINES SYMBOLIC AND STORAGE AREAS THAT ARE REQUIRED 
*                  BY ALL OF THE MODULES THAT PROCESS CCL VERBS.
*         COMBRWE - DEFINES SYMBOLS REQUIRED BY BEGIN/REVERT, WHILE/ENDW
*         COMFET - DEFINES FILE STORAGE SYMBOLS AND I/O BUFFER AREAS. 
*         MSGXXX - DEFINES MSG SYMBOLS AND MESSAGE TEXT FOR OUTPUT. 
* 
*         NO MATTER WHICH VERB IS EXECUTING THE BASIC PROCESS 
*         OF CCL IS TO CRACK STATEMENTS.  CCL WILL REPEATEDLY 
*         EXECUTE THE SUBROUTINE STRANS TO ASSEMBLE THE NEXT
*         STRING.  STRANS STORES THE ASSEMBLED STRING, LEFT JUSTIFIED 
*         ZERO FILL, AND OTHER INFORMATION ABOUT THE STRING 
*         IN THE ANS DATA WITHIN THE COMMON BLOCK COMALL.  THE
*         INFORMATION STORED IDENTIFIES LEADING AND TRAILING
*         SEPARATORS, INDICATES WHETHER OR NOT THE STRING 
*         IS A LITERAL OR A NUMERIC, AND THE NUMBER OF
*         CHARACTERS IN THE STRING.  THE VERB PROCESSOR THEN INTERPRETS 
*         THE INFORMATION AND REPEATS THE PROCESS TO ADVANCE
*         THROUGH THE STATEMENT.
* 
*         FOR A MORE COMPLETE EXPLANATION OF THE STRING ROUTINES
*         PLEASE READ THE GENERAL COMMENTS AT THE BEGINNING OF THE
*         PROGRAM STRCCL AND THE SPECIFIC COMMENTS WITH EACH
*         SUBROUTINE WITHIN STRCCL.  THE CODE OF CCL IS MUCH EASIER 
*         TO UNDERSTAND ONCE STRCCL IS UNDERSTOOD.
* 
*         SYMBOLIC NAMES
* 
*         VARIOUS SYMBOLIC NAMES (OR KEYWORDS) ARE KNOWN TO CCL.  THESE 
*         NAMES ARE DEFINED IN THE REFERENCE MANUAL AND PROVIDE THE USER
*         AN EASY MEANS OF REFERENCING SOME PARTICULAR DATA.  THERE ARE 
*         THREE TYPES OF SYMBOLIC NAMES.   IF A NEW NAME IS TO BE ADDED 
*         ITS USAGE AND THE TYPE OF DATA IT REPRESENTS WILL DETERMINE 
*         WHICH KIND OF NAME IT SHOULD BECOME.
* 
*         SPECIAL DEFAULTS ARE KEYWORDS WHICH ARE RECOGNIZED WITHIN 
*         THE SPECIFICATIONS OF A PROCEDURE HEADER.(#DATA, #FILE) 
*         TO ADD A NEW KEYWORD THE SUBROUTINE RSN MUST
*         BE MODIFIED TO RECOGNIZE IT.  SUCH KEYWORDS SPECIFY 
*         THAT CCL IS TO DETERMINE THE DEFAULT CHARACTER
*         STRING VIA SOME DEFINED METHOD(LIKE USE A FILE NAME). 
* 
*         SYMBOLIC NAMES WHICH MAY BE USED AS AN ELEMENT OF ANY CCL 
*         EXPRESSION ARE DEFINED IN THE SNVT TABLE OR ARE PROCESSED 
*         AS A FUNCTION.  ANY VALUE REQUIRED FOR SNVT IS DETERMINED 
*         DURING THE PRESET PROCESSING (CCLPRS) AND STORED IN THE 
*         APPROPRIATE ENTRY OF SNVT.  TO ADD A NEW ENTRY SNVT MUST
*         BE EXPANDED AND CCLPRS MUST BE MODIFIED TO STORE THE VALUE
* 
*         A FUNCTION IS EXECUTED (ITS VALUE DETERMINED) ONLY IF A CCL 
*         EXPRESSION CALLS IT.  TO ADD A NEW FUNCTION, A NEW ENTRY MUST 
*         BE ADDED TO THE FUNCTION TABLE AND THE CODE TO PROCESS
*         THE FUNCTION MUST BE SUPPLIED.  THE FUNCTION TABLE
*         (EVXFN) IS LOCATED IN THE EXPRESSION EVALUATION CODE CCLEVX.
          USE    0
          LIST   F,X
*CALL     CCL 
*CALL     COMALL
*CALL     COMBLNK 
*CALL     COMBGIN 
*CALL     COMBRWE 
*CALL     COMFET
*CALL     MSGCSC
*CALL     MSGIF 
*CALL     MSGEXP
*CALL     MSGBRWE 
*CALL     MSGSTR
  
  
*         MORE MESSAGES FOR INTERACTIVE HEADERS 
  
 MSG480   DATA   C$  CCL480- USE NUMERIC MIN..MAX VALUES IN RANGE$
 MSG481   DATA   C$  CCL481- USE CONSECUTIVE PERIODS MIN..MAX IN RANGE$ 
 MSG482   DATA   C$  CCL482- MINIMUM EXCEEDS MAXIMUM IN RANGE$
 MSG483   DATA   C$  CCL483- *F OR *P RANGE MUST BE .GE. 1 AND .LE. 7$
 MSG484   DATA   C$  CCL484- *A RANGE MUST BE .GE. 1 AND .LE. 40$ 
 MSG485   DATA   C$  CCL485- USE *SN(SET) OR *SN/M FOR SET ATTRIBUTE$ 
 MSG486   DATA   C$  CCL486- USE M=A,D,B,AD,AB FOR *SN/M TYPE SET$
 MSG487   DATA   C$  CCL487- RANGE MAXIMUM MUST BE .GT. ZERO$ 
  
*CALL     CCLASV
*CALL     CCLCCF
*CALL     CCLCCN
*CALL     CCLCVT
*CALL     CCLDSB
*CALL     CCLEVX
*CALL     CCLEXP
*CALL     CCLGNO
*CALL     CCLGNP
*CALL     CCLIDC
*CALL     CCLLAB
*CALL     CCLNPV
*CALL     CCLPRS
*CALL     CCLPVO
*CALL     CCLRPV
*CALL     CCLSCS
*CALL     CCLSJC
*CALL     CCLSNV
*CALL     CCLSSN
*CALL     CCLWHT
*CALL     CCLWID
*CALL     CCLWPV
*CALL     CCLXSS
*CALL     CSTRCCL 
*CALL     CIOCCL
*CALL     IOATT 
*CALL     IOCSAE
*CALL     IOEOPR
*CALL     IOFET 
*CALL     IOFIL 
*CALL     IOLIB 
*CALL     IOPOS 
*CALL     IORDL 
*CALL     IOREWN
*CALL     IOSKP 
*CALL     IOSTS 
*CALL     IOWTL 
          TITLE  CCLBRWE - BEGIN/REVERT, WHILE/ENDW MODULE
          USE    0
 OSNOSBE  IFNE   HOST,SC2 
          LDSET  EPT=BEGIN/REVERT/WHILE/ENDW
*CALL     COMLDS
 OSNOSBE  ENDIF 
 VERBS    BSS 
          CON    0LBEGIN+BEG01
          CON    0LREVERT+REV01 
          CON    0LWHILE+WHILE1 
          CON    0LENDW+ENDW1 
  
 VERBSL   EQU    *-VERBS
  
          ENTRY  BEGIN
          ENTRY  REVERT 
          ENTRY  WHILE
          ENTRY  ENDW 
*CALL     COMENT
 BEGIN    BSS 
  
*         THE *NOS* PROGRAM *CHARGE* LOADS *CCLBRWE* AS AN OVERLAY, 
*         AFTER REQUESTING FIELD LENGTH FOR THE LOAD BASED ON THE 
*         SYMBOL *CCFL* IN THE DECK *PPCOM*.  IF *CCLBRWE* FIELD LENGTH 
*         INCREASES DUE TO INSTALLATION PARAMETER SETTINGS OR LOCAL 
*         CODE AND THE SYMBOL *CCFL* IS NOT CHANGED, *CCL* MAY ABORT IN 
*         A FASHION THAT IS NOT EASY TO DIAGNOSE.  THE FOLLOWING CODE 
*         CHECKS FIELD LENGTH TO ASSURE THAT ENOUGH IS ASSIGNED TO RUN, 
*         AND IF NOT ATTEMPTS TO ACQUIRE MORE, OR AT LEAST ABORT WITH A 
*         MEANINGFUL DIAGNOSTIC.
  
 OSNOS    IFEQ   HOST,NOS 
          SB1    1           INITIALIZE B1
          B1=1
          MEMORY CM,BEGINA,R
          SA1    BEGINA 
          SX2    RFL=        MAXIMUM FIELD LENGTH 
          AX1    30 
          IX2    X1-X2
          PL     X2,BEGIN2   IF SUFFICIENT FL ALREADY ASSIGNED
          SX2    COM1ST      BEGINNING OF BLANK COMMON
          IX2    X1-X2
          NG     X2,BEGIN1   IF NOT ENOUGH FL TO CONTINUE 
          MEMORY CM,BEGINA,R,RFL=,NA  REQUEST SUFFICIENT FL 
          SA1    BEGINA 
          SX2    RFL= 
          AX1    30 
          IX2    X1-X2
          PL     X2,BEGIN2   IF SUFFICIENT FL NOW ASSIGNED
 BEGIN1   BSS    0
          RJ     DCI         DISPLAY COMMAND IMAGE
  
          MESSAGE  MSG214,6,R 
          ABORT  ,ND         ABORT *CCLBRWE* WITH NO DUMP 
  
 BEGINA   BSSZ   1           MEMORY STATUS RETURN 
 BEGINB   VFD    30/RFL=,30/COM1ST
  
 BEGIN2   BSS    0
 OSNOS    ENDIF 
          SX7    VERBS       PRESET PROCESSING VECTOR 
          SA7    VRBADR 
 REVERT   BSS 
 WHILE    BSS 
 ENDW     BSS 
  
*CALL     COMSET
*CALL     COMINIT 
*CALL     CIOSET
  
*CALL     BEGIN 
*CALL     REVERT
*CALL     WHILE 
*CALL     ENDW
*CALL     CSP 
*CALL     RSN 
*CALL     SDD 
*CALL     ZFS 
*CALL     BRWERR2 
*CALL     EXITBR
          END    BEGIN
*CALL     SDO 
*WEOR 
