Environment Division
본 장에서는 Environment Division에 대해서 설명한다.
1. Configuration section
Configuration section에서는 프로그램의 실행 환경을 기술한다. Configuration section은 반드시 Environment division에 기술되어야 한다.
Configuration section은 다음의 paragraph으로 구성된다.
-
SOURCE-COMPUTER paragraph
-
OBJECT-COMPUTER paragraph
-
SPECIAL-NAMES paragraph
1.1. SOURCE-COMPUTER paragraph
SOURCE-COMPUTER paragraph에서는 해당 소스 프로그램이 컴파일된 컴퓨터 이름을 기술한다.
-
computer-name
-
소스 프로그램이 컴파일되는 시스템 이름을 지정한다.
-
프로그램 작성자가 정보를 남기는 용도로만 사용된다.
-
SOURCE-COMPUTER paragraph는 문법 체크는 이루어지지만 프로그램 실행에 영향을 미치지 않는다. |
1.2. OBJECT-COMPUTER paragraph
OBJECT-COMPUTER paragraph에서는 컴파일러에 의해서 생성된 런타임 모듈이 실행되는 환경에 대해서 기술한다.
-
computer-name
-
컴파일된 모듈이 실행되는 시스템 이름을 지정한다.
-
프로그램 작성자가 정보를 남기는 용도로만 사용된다.
-
-
PROGRAMMING COLLATING SEQUENCE IS
-
프로그램에서 사용되는 collating sequence를 지정한다. 지정된 collating sequence는 해당 프로그램과 해당 프로그램을 포함하고 있는 모든 프로그램에서 사용된다.
-
PROGRAM COLLATING SEQUENCE는 다음과 같은 영숫자를 비교할 때 사용된다.
-
비교 조건에 있어서 명시적으로 지정된 것
-
조건명 조건 중 명시적으로 지정된 것
-
-
PROGRAM COLLATING SEQUENCE clause가 생략되었을 경우에는 ASCII collating sequence가 우선 적용된다.
-
OBJECT-COMPUTER paragraph는 문법 체크는 이루어지지만 PROGRAM COLLATING SEQUENCE clause만이 프로그램 실행에 영향을 미친다. |
1.3. SPECIAL-NAMES paragraph
SPECIAL-NAMES paragraph의 기능은 다음과 같다.
-
alphabet-name을 문자 셋 및 collating sequence와 관련시킨다.
SPECIAL-NAMES paragraph의 clauses는 임의의 순서로 지정할 수 있다.
(1) clause가 지정되어 있지 않을 때 분리 문자 점(.)은 생략가능하다. 단, clause를 지정하는 경우에는 마지막 clause 기술 후에 점이 있어야 한다. |
-
environment-name-1
-
시스템 장치를 나타내는 이름으로 다음 이름을 지정할 수 있다.
environment-name-1 의미 Allowed in SYSIN, SYSIPT
시스템 입력
ACCEPT
SYSOUT, SYSLIST, SYSLST
시스템 출력
DISPLAY
SYSPUNCH, SYSPCH
펀칭 시스템
DISPLAY
CONSOLE
콘솔
ACCEPT, DISPLAY
SYSPUNCH, SYSPCH는 문법 체크는 이루어지지만 실행에는 영향을 주지 않는다.
-
-
environment-name-2
-
1byte의 User programmable status indicator(UPSI) 스위치를 지정한다. (범위: USPI-0 ~ USPI-7)
-
environment-name-2에 지정된 문법은 체크되지만 실행에 영향을 주지 않는다.
-
-
mnemonic-name-1, mnemonic-name-2
-
사용자 정의어 규칙에 따라 정의한다.
-
mnemonic-name-1은 ACCEPT, DISPLAY 및 WRITE statement에서 사용할 수 있다.
-
mnemonic-name-2는 SET statement에서만 참조가 가능하다.
-
-
ON STATUS IS, OFF STATUS IS
-
User programmable status indicator(UPSI) 스위치의 ON/OFF 상태를 정의한다.
-
-
condition-1, condition-2
-
condition-name condition 만 올 수 있다.
-
사용자 정의어 규칙에 따라 정의한다. 적어도 영문자가 한글자라도 포함되어야 한다.
-
SPECIAL-NAMES paragraph에서 지정된 조건명은 해당 프로그램이 포함하는 모든 프로그램에서 참조 가능하다.
-
environment-name과 mnemonic-name은 유일할 필요는 없다. mnemonic-name과 environment-name을 동일하게 설정한 경우 mnemonic-name으로 지정한 이름이 environment-name에 지정한 이름보다 우선순위가 높다. |
1.3.1. ALPHABET clause
ALPHABET clause는 지정한 문자 셋 또는 collating sequence에 alphabet-name을 관련 짓는다.
지정된 alphabet-name은 다음에서 사용될 경우 collating sequence 지정을 의미한다.
-
OBJECT-COMPUTER paragraph의 PROGRAM COLLATING SEQUENCE clausec
-
SORT 또는 MERGE statement의 COLLATING SEQUENCE phrase
지정할 수 있는 alphabet-name은 다음과 같다.
-
STANDARD-1
ASCII 문자 set을 지정한다.
-
NATIVE, EBCDIC
EBCDIC 문자 set을 지정한다.
-
literal-1, literal-2, literal-3
프로그램이 다음 규칙에 의해 영숫자 데이터의 collating sequence를 결정할 때 지정한다.
-
리터럴에 정의된 순서가 collating sequence의 순서이다.
-
명시적으로 지정되어 있지 않는 문자는 지정된 collating sequence에 있어서 지정된 문자들보다 값이 크다고 간주한다. 지정되지 않은 문자들의 순서는 해당 문자가 속한 문자 셋의 순서에 따른다.
-
영숫자 또는 숫자 리터럴이어야 하며 모두 같은 타입의 리터럴이어야 한다. 영숫자 리터럴 안의 각각의 문자는 문자 셋 내의 실제 문자를 나타낸다.
지정하는 숫자 리터럴은 부호 없는 정수이어야 한다. 각 숫자 리터럴의 값은 collating sequence 내에서 유효한 값이어야 한다.
-
ALPHABET clause에서 같은 문자에 대해 2번 이상 지정할 수 없다.
-
THROUGH 또는 ALSO에 지정하는 영숫자 리터럴은 1byte 이상이어야 한다.
THROUGH를 지정하는 경우 literal-1에서 지정한 문자에서 시작해서 literal-2에 지정된 문자로 종료되는 문자 셋 내의 연속하는 문자가 collating sequence가 된다.
예를 들어 "Z" THROUGH "A"라고 지정했을 경우 대문자 영문자에 관한 순서는 다음과 같이 된다.
ZYXWVUTSRQPONMLKJIHGFEDCBA
-
ALSO와 함께 literal-1, literal-3에 지정한 문자는 collating sequence 내에서 같은 위치에 있게 된다.
예를 들어 "D" ALSO "N" ALSO "%"라고 지정했을 경우, 문자 D, N, %는 collating sequence 내에서 같은 위치에 있게된다.
-
Figurative constant를 지정할 수 없다.
-
ALPHABET clause에서 지정된 collating sequence의 가장 높은 값의 문자는 Figurative constant인 HIGH-VALUE의 값에 영향을 준다. ALSO phrase 지정으로 인해 여러 개의 문자가 가장 높은 값을 갖게 될 경우에는 ALSO에서 지정된 가장 마지막 문자가 HIGH-VALUE이다.
마찬가지로 지정된 collating sequence의 가장 낮은 값의 문자가 LOW-VALUE 문자가 된다. ALSO phrase 지정으로 여러 개가 같은 위치에 있을 경우 제일 처음에 지정된 문자가 LOW-VALUE이다.
1.3.2. CLASS clause
CLASS clause는 지정한 문자 셋을 Class-name을 관련 짓는다.
-
CLASS class-name-1 IS
clause에 명시된 character set에 class-name-1을 통해 의미를 부여한다. class-name-1은 class-condition에서만 참조될 수 있다.
-
literal-4, literal-5
-
numeric이나 alphanumeric만 사용된다.
-
Floating-point literal은 사용할 수 없다.
-
THROUGH clause가 사용되면 literal-4, literal-5는 길이가 1인 문자이어야 한다.
-
2. Input-Output section
Input-Output section의 정확한 내용은 File organization과 Access method에 따라 다르다. 자세한 내용은 ORGANIZATION clause와 ACCESS MODE clause의 설명을 참고한다.
Input-Output section은 반드시 Environment division에 기술되어야 하며 2개의 paragraph을 포함한다.
-
FILE-CONTROL
-
FILE-CONTROL 키워드는 FILE-CONTROL paragraph를 지정한다. 이 키워드는 FILE-CONTROL paragraph 의 처음에 한 번만 나타난다.
-
FILE-CONTROL paragraph은 FILE-CONTROL 키워드가 기술되더라도 프로그램 내에 정의된 파일이 없으면 생략할 수 있다.
-
FILE-CONTROL paragraph는 물리적인 파일을 지정한다.
-
-
I-O-CONTROL
-
I-O-CONTROL 키워드는 I-O-CONTROL paragraph를 지정한다.
-
I-O-CONTROL paragraph는 COBOL 프로그램과 외부의 데이터 셋의 효율적인 데이터 전송에 필요한 정보를 기술한다.
-
2.1. FILE-CONTROL paragraph
FILE-CONTROL paragraph는 COBOL 프로그램에서 각각의 파일을 외부 데이터 셋과 연결시키고, File organization, Access method 및 다른 정보들을 기술한다.
다음은 가능한 file organization과 access method에 대한 설명이다.
File organization | Access method |
---|---|
Sequential |
Non-VSAM, VSAM |
Relative |
VSAM |
Indexed |
VSAM |
Line sequential |
Text stream I-O |
FILE-CONTROL paragraph는 점(.)을 가진 FILE CONTROL 키워드로 시작한다.
Paragraph는 Data division 내의 FD와 SD로 기술된 개개의 파일에 대해서 하나씩의 entry를 포함해야 한다. 각 entry 안에서 SELECT clause는 반드시 처음에 나타나야 한다. 다른 clauses들은 어떤 순서로 나타나도 상관없다.
다음은 FILE-CONTROL paragraph에 대한 포맷이다.
-
Sequential file entries
FILE-CONTROL Format 1 -
Indexed file entries
FILE-CONTROL Format 2FILE-CONTROL Format 2 : entry -
Relative file entries
FILE-CONTROL Format 3 -
Line-sequential file entries
FILE-CONTROL Format 4
2.1.1. SELECT clause
SELECT clause은 COBOL 프로그램의 파일 identifier를 정의한다.
항목 | 설명 |
---|---|
SELECT OPTIONAL |
문법만 검사한다. SELECT만 설정한 것과 동일하게 수행한다. |
file-name-1 |
Data division의 FD 또는 SD entry로 식별 가능해야 한다. COBOL의 사용자 정의명 규칙에 부합되어야 한다. 적어도 1개의 알파벳 문자를 포함해야 하고, 현재 프로그램 내에서 중복된 이름을 사용할 수 없다. |
2.1.2. ASSIGN clause
ASSIGN clause은 프로그램 내의 파일 이름을 실제의 외부 데이터 셋과 연결한다.
항목 | 설명 |
---|---|
assignment-name-1 |
외부 데이터 셋 이름을 지정한다. JCL DD 문에 기술된 이름이나 파일 경로를 지정한다. sort/merge 파일이면 주석으로 처리된다. |
2.1.3. ORGANIZATION clause
ORGANIZATION clause은 파일의 논리적인 구조를 지정한다. 논리적인 구조는 파일이 생성되는 시점에서 구성되며 이후에는 변할 수 없다.
-
ORGANIZATION IS SEQUENTIAL (format 1)
-
ORGANIZATION IS INDEXED (format 2)
-
ORGANIZATION IS RELATIVE (format 3)
-
ORGANIZATION IS LINE SEQUENTIAL (format 4)
ORGANIZATION clause을 생략하면 컴파일러는 ORGANIZATION IS SEQUENTIAL으로 설정한다. |
파일이 생성될 때 organization이 구성되어야 한다. 파일이 한 번 생성되면, 확장은 될 수 있지만 organization은 변경될 수 없다.
-
Sequential organization
-
레코드의 물리적인 순서가 레코드의 순서를 결정한다. 파일이 확장되더라도 레코드 간의 선후관계는 변경되지 않는다.
-
레코드는 고정길이 또는 가변길이가 될 수 있다.
-
키는 존재하지 않는다.
-
-
Indexed organization
-
파일의 각 레코드는 한 개 이상의 내부 키(key 데이터 항목)를 가진다. 각 키는 인덱스를 가지고 인덱스는 내부의 key 데이터 항목의 내용에 따라서 레코드를 찾을 수 있는 방법을 제공한다.
-
레코드는 고정길이 또는 가변길이가 될 수 있다.
-
각 레코드는 반드시 prime key 데이터 항목을 포함해야 한다.
레코드가 삽입, 갱신, 삭제될 때 해당 레코드는 prime key의 값으로 찾을 수 있다. 따라서, prime key 데이터 항목의 값은 유일해야 하며, 레코드가 갱신될 때 변경되지 않아야 한다. File-control paragraph의 RECORD KEY clause에 prime key 데이터 항목을 기술함으로써 프로그램에서 사용할 수 있도록 한다.
-
각 레코드는 하나 이상의 alternate key 데이터 항목을 가질 수도 있다.
각 alternate key는 읽어올 레코드를 식별하는 또 다른 방법을 제공한다. FILE-CONTROL paragraph의 ALTERNATE RECORD KEY clause에 alternate key 데이터 항목을 기술함으로써 프로그램에서 사용할 수 있도록 한다.
-
-
Relative organization
-
각각의 레코드는 relative record number에 의해 구분된다. relative record number는 레코드에 포함되어 있지는 않다.
-
Access method는 relative record number를 기반으로 레코드를 저장하고 가져온다.
-
파일에 위치한 레코드의 물리적인 순서는 각 레코드의 relative record number와는 상관이 없다.
-
레코드는 고정길이 또는 가변길이가 될 수 있다.
-
-
Line-sequential organization
-
각 레코드는 레코드의 마지막에 레코드 구분자를 가진다. 이 구분자는 레코드 길이에 계산되지 않는다.
-
레코드가 파일에 기록될 때 뒷 부분의 공백문자는 삭제되고 레코드 구분자가 추가된다.
-
레코드를 읽을 때 레코드 구분자는 삭제되고 레코드의 나머지 부분은 공백문자로 된다. EOF를 만나면 레코드의 나머지는 공백으로 채워진다.
-
New line 문자가 레코드 구분자가 된다.
-
컴파일러는 indexed organization이나 relative organization을 직접 제공하지 않는다. 만약, OpenFrame 파일 시스템과 연동하여 사용되는 경우에는 지원될 수 있다. |
2.1.4. ACCESS MODE clause
ACCESS MODE clause는 파일의 어느 레코드가 접근 가능한지를 정의한다. 생략되면 sequential access로 설정된다.
-
ACCESS MODE IS SEQUENTIAL
모든 포맷에 기술할 수 있다.
포맷 설명 Format 1: sequential
파일의 레코드는 파일이 생성되거나 확장될 때 만들어진 sequence에 의해 접근 가능하다.
Format 1은 오직 sequential access만 지원한다.
Format 2: indexed
파일의 레코드는 ascending record key의 순서에 따라 순차적으로 접근 가능하다.
Format 3: relative
파일의 레코드는 relative record number의 순서에 따라 순차적으로 접근 가능하다.
Format 4: line-sequential
파일의 레코드는 파일이 생성되거나 확장될때 만들어진 sequence에 의해 접근 가능하다.
Format 4는 오직 sequential access만 지원한다.
-
ACCESS MODE IS RANDOM
Format 2, Format 3에 대해 기술할 수 있다.
포맷 설명 Format 2: indexed
RECORD KEY 데이터 항목의 값에 따라 레코드에 접근 가능하다.
Format 3: relative
RELATIVE KEY 데이터 항목의 값에 따라 레코드에 접근 가능하다.
-
ACCESS MODE IS DYNAMIC
Format 2, Format 3에 대해 기술할 수 있다.
포맷 설명 Format 2: indexed
파일의 레코드는 input-output statement의 사용 방법에 따라 sequentially 또는 randomly 접근될 수 있다.
Format 3: relative
파일의 레코드는 input-output statement의 사용 방법에 따라 sequentially 또는 randomly 접근될 수 있다.
2.1.5. RECORD KEY clause
RECORD KEY clause (Format 2)는 indexed file의 prime RECORD KEY를 정의하는 데이터 항목을 기술한다. Prime RECORD KEY 데이터 항목의 값은 유일해야 한다.
-
data-name-2
-
Prime RECORD KEY 데이터 항목이다 .
-
파일의 record description entry에 기술되어 있어야 한다.
다음의 데이터 범주를 가질 수 있다.
-
Alphanumeric
-
Numeric
-
Numeric-edited
-
Alphanumeric-edited
-
Alphabetic
-
External floating-point
-
Internal floating-point
-
DBCS
-
-
data-name-2는 variable-occurrence 데이터 항목을 포함한 그룹 항목을 참조해서는 안된다. data-name-2는 qualified될 수 있다.
-
data-name-2의 data description과 레코드 내에서의 상대적인 위치는 파일이 정의될 때의 키의 위치와 같아야 한다.
-
2.1.6. ALTERNATE RECORD KEY clause
ALTERNATE RECORD KEY clause(Format 2)는 indexed file의 alternative RECORD KEY를 정의하는 데이터 항목을 기술한다.
-
data-name-3
-
ALTERNATE RECORD KEY 데이터 항목이다 .
-
파일의 record description entry에 기술되어 있어야 한다.
다음의 데이터 범주를 가질 수 있다.
-
Alphanumeric
-
Numeric
-
Numeric-edited
-
Alphanumeric-edited
-
Alphabetic
-
External floating-point
-
Internal floating-point
-
DBCS
-
-
data-name-3는 variable-occurrence 데이터 항목을 포함한 그룹 항목을 참조해서는 안된다. data-name-3는 qualified될 수 있다.
-
data-name-3의 data description과 레코드 내에서의 상대적인 위치는 파일이 정의될 때의 키의 위치와 같아야 한다.
-
DUPLICATES phrase가 기술되지 않으면, ALTERNATE RECORD KEY 데이터 항목이 참조하는 내용은 파일 내에서 유일해야 한다. |
2.1.7. RELATIVE KEY clause
RELATIVE KEY clause (Format 3)는 relative file의 relative record number를 지정하는 데이터 항목을 기술한다.
항목 | 설명 |
---|---|
data-name-4 |
Unsigned integer 데이터 항목이어야 하고, PICTURE phrase에 기호 P를 포함해서는 안된다. data-name-4는 파일의 record description entry에 기술되어서는 안된다. 즉, RELATIVE KEY는 레코드의 일부분이 아니다. data-name-4는 qualified될 수 있다. ACCESS IS SEQUENTIAL일 때 START statement를 사용한다면 data-name-4가 필요하다. ACCESS IS RANDOM과 ACCESS IS DYNAMIC인 경우 항상 필요하다. |
2.1.8. FILE STATUS clause
FILE STATUS clause은 입출력 statement의 수행에 대한 결과를 알려준다. FILE STATUS clause가 기술되면 해당 파일에 대한 입출력 동작이 수행된 후 결과 값을 file status key 데이터 항목에 저장한다.
항목 | 설명 |
---|---|
data-name-1 |
File status key 데이터 항목은 working-storage, local-storage 또는 linkage section에 다음 중 하나로 정의될 수 있다.
data-name-1은 PICTURE 기호 'P’를 호함해서는 안된다. data-name-1은 qualified 될 수 있다. data-name-1은 가변적인 위치에 놓여져서는 안된다. 즉, OCCURS DEPENDING ON clause를 포함한 데이터 항목 다음에 와서는 안된다. |
data-name-8 |
문법 검사만 이루어지고 사용되지 않는다. |