Command Procedure
본 장에서는 Command Procedure의 구성 요소에 대해서 설명한다.
1. 제어 변수
다음은 Command Procedure에서 사용되는 제어 변수 목록이다.
제어 변수 | 설명 |
---|---|
&LASTCC |
최근의 반환 코드이다. Command Procedure 고유의 반환 코드들과 그 의미는 다음과 같다.
|
&MAXCC |
반환 코드의 최댓값이다. |
&SYS#CC |
ENDJOBNAME 이벤트가 발생한 경우에 설정되며, 완료된 작업의 완료 코드이다. |
&SYS#EVENT |
발생한 사건의 이름이다. 본 제어변수는 다음 값들 중 하나를 갖는다.
|
&SYS#EVTNO |
WAIT 문에서 하나의 오퍼랜드에 복수의 값을 지정한 경우, 사건이 발생했을 때 지정된 값 중 몇 번째 값에 대응하는 사건이 발생했는지가 저장된다. |
&SYS#FMSG |
MESSAGE 이벤트나 MSGID 이벤트가 발생한 경우에 설정되며, 출력된 메시지 전체가 저장된다. |
&SYS#JN |
ENDJOBNAME 이벤트가 발생한 경우에 설정되며, 완료된 작업의 작업명이다. |
&SYS#MSG |
MESSAGE 이벤트나 MSGID 이벤트가 발생한 경우에 설정되며, 출력된 메시지의 본문 부분이 저장된다. |
&SYS#PFX |
MESSAGE 이벤트나 MSGID 이벤트가 발생한 경우에 설정되며, 출력된 메시지의 식별자가 저장된다. |
&SYSASIS |
|
&SYSCONLIST |
|
&SYSDATE |
mm/dd/yy 형식의 현재 날짜이다. |
&SYSDVAL |
사용자가 최근에 터미널에 입력한 문자열이다. |
&SYSENV |
|
&SYSFLUSH |
|
&SYSICMD |
Command Procedure의 이름이다. 암묵적 실행인 경우 즉 사용자가 EXEC 문을 이용해 명시적으로 Command Procedure를 실행하지 않은 경우에만 사용된다. |
&SYSNEST |
|
&SYSPCMD |
최근 실행한 TSO 명령문(파라미터 제외)이다. (기본값: EXEC) |
&SYSPREF |
데이터셋 이름 접두어이다. |
&SYSSCAN |
각 Command Procedure 문을 실행하기 전 스캔(기호 파라미터를 값으로 치환하는 과정)을 최대 몇 회 수행할지 지정한다. |
&SYSSDATE |
yy-mm-dd 형식의 현재 날짜이다. |
&SYSSTIME |
hh:mm 형식의 현재 시각이다. |
&SYSSTOP |
Command Procedure 내에서 실행 가능한 최대 명령 개수이다. |
&SYSSYMLIST |
|
&SYSTIME |
hh:mm:ss 형식의 현재 시각이다. |
&SYSTMID |
현재 연결된 단말기의 이름이다. |
&SYSUID |
TSO 세션의 사용자 ID이다. |
2. 내장 함수
다음은 Command Procedure에서 사용되는 내장 함수 목록이다.
내장 함수 | 설명 |
---|---|
&DATATYPE(expr) |
표현식 expr의 결과가 숫자이면 NUM을 반환하고, 문자열이면 CHAR를 반환한다. |
&EVAL(expr) |
수식 expr의 연산 결과를 반환한다. |
&LENGTH(expr) |
표현식 expr의 연산 결과의 문자 길이를 반환한다. |
&NRSTR(expr) |
표현식 expr의 기호 파라미터는 치환하되, 중첩 치환은 하지 않은 결과를 반환한다. 수식 연산은 수행하지 않는다. |
&STR(expr) |
표현식 expr의 기호 파라미터를 치환하고 내장 함수를 처리한 결과를 반환한다. 수식 연산은 수행하지 않는다. |
&SUBSTR(from:to,str) |
문자열 str의 from 위치에서 to 위치까지 추출한 부분문자열을 반환한다. to를 생략하면 from 위치의 한 글자만 추출한다. |
&SYS#EPRM(eprm) |
가상 파라미터 eprm의 값을 반환한다. 가상 파라미터의 설정은 제1장을 참고한다. |
&SYSDSN(d) |
데이터셋 d의 상태를 체크하여, 사용 가능 상태이면 OK를 반환하고, 아니면 에러 메시지를 반환한다. |
&SYSINDEX(needle,haystack,start) |
문자열 haystack 내에서 문자열 needle의 위치를 반환한다. start가 0이거나 생략되면 haystack 전체에서 needle을 찾는다. start가 양수이면 haystack의 start번째 문자부터 needle을 찾는다. needle을 찾지 못한 경우엔 0을 반환한다. |
&SYSNSUB(level,expr) |
표현식 expr의 기호 파라미터를 치환하되, 최대 level 회 치환한다. |
3. 연산자
IF 문과 같은 몇몇 Command Procedure 문에서는 표현식이 사용될 수 있다. 표현식은 정수, 문자열, 기호 파라미터, 제어 변수나 내장 함수 같은 피연산자를 연산자를 이용해 연결한 형태를 의미한다.
연산자는 산술 연산자, 비교 연산자, 논리 연산자로 분류되며, 각 연산자의 의미는 다음과 같다.
-
산술 연산자
산술 연산자 설명 +
더하기
-
빼기
*
곱하기
/
나누기
**
지수 (우변이 음수이면 연산 결과는 0이다.)
//
나머지
-
비교 연산자
비교 연산자 설명 EQ 또는 =
좌변과 우변이 같다.
NE 또는 ^=
좌변과 우변이 같지 않다.
LT 또는 <
좌변이 우변보다 작다.
GT 또는 >
좌변이 우변보다 크다.
LE 또는 <=
좌변이 우변보다 작거나 같다.
GE 또는 >=
좌변이 우변보다 크거나 같다.
NG 또는 ^>
좌변이 우변보다 크지 않다.
NL 또는 ^<
좌변이 우변보다 작지 않다.
-
논리 연산자
논리 연산자 설명 AND 또는 &&
논리곱
OR 또는 |
논리합
4. Command Procedure 문
Command Procedure 문의 종류와 기능은 다음과 같다.
Command Procedure 문 | 설명 |
---|---|
인터럽트 핸들러를 설정한다. OpenFrame에서는 문법 오류만 검사한다. |
|
데이터셋을 닫는다. |
|
Command Procedure 실행 관련 옵션을 지정한다. |
|
TSO 명령과 화면 출력 데이터 영역을 구분한다. |
|
한 개 이상의 Command Procedure 문을 반복 수행한다. |
|
에러 핸들러를 설정한다. |
|
Command Procedure 실행을 중지하고 상위 Command Procedure에게 제어를 반환한다. |
|
데이터셋으로부터 레코드를 읽는다. |
|
중첩된 Command Procedure 사이에서 공유되는 기호 파라미터를 선언한다. |
|
지정된 위치로 분기한다. |
|
지정된 조건에 따라 서로 다른 동작을 수행한다. |
|
화면 출력 데이터가 저장될 데이터셋을 지정한다. OpenFrame에서는 문법 오류만 검사한다. |
|
데이터셋을 연다. |
|
상위 Command Procedure로부터 전달 받는 기호 파라미터를 정의한다. |
|
데이터셋에 레코드를 기록한다. |
|
사용자로부터 터미널을 통해 입력 받은 데이터를 기호 파라미터에 저장한다. |
|
제어 변수 &SYSDVAL의 내용을 지정된 기호 파라미터에 저장한다. |
|
오류가 발생한 Command Procedure 문 다음의 Command Procedure 문으로 제어를 반환한다. |
|
기호 파라미터나 제어 변수에 값을 저장한다. |
|
사용자 입력을 받을 수 있도록 터미널에 제어를 넘긴다. OpenFrame에서는 문법 오류만 검사한다. |
|
터미널에 문자열을 출력한다. |
4.2. CLOSFILE 문
OPENFILE 문에서 연 데이터셋을 닫는다.
사용법
항목 | 설명 |
---|---|
ddname |
OPENFILE 문에서 연 데이터셋의 DD 이름이다. |
예제
다음은 CLOSFILE 문 사용 예제이다.
CLOSFILE SYSUT1
4.3. CONTROL 문
Command Procedure 실행 관련 옵션을 지정한다.
사용법
항목 | 설명 |
---|---|
end |
DO 그룹의 끝맺음 문자열을 지정한다. |
오퍼랜드
다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.
오퍼랜드 | 설명 |
---|---|
PROMPT |
터미널 프롬프팅을 사용한다. OpenFrame에서는 문법 오류만 검사한다. |
NOPROMPT |
터미널 프롬프팅을 사용하지 않는다. OpenFrame에서는 문법 오류만 검사한다. |
SYMLIST |
기호 파라미터 치환 전 명령을 터미널에 표시한다. |
NOSYMLIST |
기호 파라미터 치환 전 명령을 터미널에 표시하지 않는다. |
LIST |
명령을 표시한다. OpenFrame에서는 문법 오류만 검사한다. |
NOLIST |
명령을 표시하지 않는다. OpenFrame에서는 문법 오류만 검사한다. |
CONLIST |
기호 파라미터 치환 후 명령을 터미널에 표시한다. |
NOCONLIST |
기호 파라미터 치환 후 명령을 터미널에 표시하지 않는다. |
CAPS |
명령 수행 전에 소문자를 대문자로 변환한다. |
NOCAPS |
명령 수행 전에 소문자를 대문자로 변환하지 않는다. |
ASIS |
명령 수행 전에 소문자를 대문자로 변환하지 않는다. |
MSG |
정보 메시지를 표시한다. OpenFrame에서는 문법 오류만 검사한다. |
NOMSG |
정보 메시지를 표시하지 않는다. OpenFrame에서는 문법 오류만 검사한다. |
FLUSH |
Command Procedure 실행 중 오류가 발생하면 이후의 Command Procedure는 실행하지 않는다. |
NOFLUSH |
Command Procedure 실행 중 오류가 발생해도 이후의 Command Procedure를 실행한다. |
MAIN |
Command Procedure가 다른 Command Procedure에 의해 호출되지 않았음을 의미한다. |
END |
DO 그룹의 끝맺음 문자열을 지정한다. |
예제
다음은 CONTROL 문 사용 예제이다.
CONTROL END(FIN)
4.4. DATA-ENDDATA 문
DATA 문과 ENDDATA 문 사이에 나오는 데이터를 별도로 처리한다. 오퍼랜드 미지정 시 DATA 문과 ENDDATA 문 사이에 나오는 데이터를 TSO 명령으로 간주한다. 오퍼랜드 지정 시의 처리 방식에 대해서는 오퍼랜드 설명을 참고한다.
사용법
오퍼랜드
다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.
오퍼랜드 | 설명 |
---|---|
PROMPT |
DATA 문과 ENDDATA 문 사이에 나오는 데이터를 프롬프팅 데이터로 간주한다. 기호 파라미터가 있으면 치환한다. |
TEXT |
DATA 문과 ENDDATA 문 사이에 나오는 데이터를 텍스트로 간주한다. 기호 파라미터가 있어도 치환하지 않는다. |
예제
다음은 DATA-ENDDATA 문 사용 예제이다.
DO DATA PROFILE NOPREFIX ENDDATA END
4.5. DO-END 문
DO 문과 END 또는 DOEND 문 사이의 TSO 명령과 Command Procedure 문(이하 DO 그룹)을 실행한다.
사용법
항목 | 설명 |
---|---|
expression |
DO 그룹 반복 여부 판단 조건을 표현식의 형태로 지정한다. |
오퍼랜드
다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.
오퍼랜드 | 설명 |
---|---|
UNTIL |
UNTIL 다음에 지정된 표현식의 값이 거짓인 동안 DO 그룹을 반복 실행한다. |
WHILE |
WHILE 다음에 지정된 표현식의 값이 참인 동안 DO 그룹을 반복 실행한다. |
예제
다음은 DO-END 문 사용 예제이다.
DO WHILE &LASTCC LE 4 SET A=&A+1 CALL TESTPGM '&A' END
4.6. ERROR 문
Command Procedure 실행 중 하위 TSO 명령이나 Command Procedure 문의 반환 코드가 0이 아닌 경우 수행할 작업(이하 에러 핸들러)을 지정한다. ERROR DO와 END 사이에서 EXIT 문, RETURN 문 또는 GOTO 문을 맞닥뜨리면 해당 위치에서 에러 핸들러를 종료한다. 에러 핸들러 수행 후 &LASTCC는 0으로 리셋된다.
사용법
항목 | 설명 |
---|---|
action |
에러 핸들러를 지정한다. 여러 작업을 기술하려면 DO 문과 END 문 사이에 기술한다. |
오퍼랜드
다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.
오퍼랜드 | 설명 |
---|---|
OFF |
이미 지정되어 있는 에러 핸들러를 지정 취소한다. |
예제
다음은 ERROR 문 사용 예제이다.
ERROR DO WRITE &LASTCC RETURN END
4.7. EXIT 문
Command Procedure 실행을 중지하고 상위 Command Procedure에게 제어를 반환한다.
사용법
항목 | 설명 |
---|---|
code |
반환 코드를 지정한다. |
오퍼랜드
다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.
오퍼랜드 | 설명 |
---|---|
CODE |
반환 코드를 지정한다. CODE 오퍼랜드가 생략된 경우에는 &LASTCC 값이 반환 코드가 된다. |
QUIT |
CONTROL NOFLUSH나 MAIN이 지정된 상위 Command Procedure로 제어를 반환한다. |
예제
다음은 EXIT 문 사용 예제이다.
ERROR DO EXIT CODE(&MAXCC) END
4.8. GETFILE 문
데이터셋으로부터 레코드를 읽는다. 레코드는 지정된 DD 이름과 동일한 이름의 기호 파라미터에 저장된다.
사용법
항목 | 설명 |
---|---|
ddname |
OPENFILE 문에서 연 데이터셋의 DD 이름을 지정한다. |
예제
다음은 GETFILE 문 사용 예제이다.
OPENFILE FILE1 UPDATE GETFILE FILE1 SET FILE1=UPDATED PUTFILE FILE1 CLOSFILE FILE1
4.9. GLOBAL 문
중첩된 Command Procedure 사이에서 공유되는 기호 파라미터를 선언한다.
최상위 Command Procedure에는 하위 Command Procedure들과 공유할 기호 파라미터가 전부 선언되어 있어야 한다. 하위 Command Procedure에서는 최상위 Command Procedure의 GLOBAL 문에 선언된 기호 파라미터들 전체 또는 일부를 GLOBAL 문에 별도의 이름으로 선언한 후 사용할 수 있다.
상위 Command Procedure의 GLOBAL 문의 n번째 기호 파라미터는 하위 Command Procedure의 GLOBAL 문의 n번째 기호 파라미터와 동일한 값을 참조하게 된다.
사용법
항목 | 설명 |
---|---|
variable |
기호 파라미터명을 지정한다. |
예제
다음은 GLOBAL 문 사용 예제이다. COMP1에서 COMP2를 호출하고 COMP2에서 COMP3를 호출한다. GA1과 GB1과 GC1은 같은 값을 참조한다. GA2와 GB2와 GC2는 같은 값을 참조한다. GA3와 GC3는 같은 값을 참조한다. GA4와 GC4는 같은 값을 참조한다.
-
COMP1
PROC 0 AP1,AP2 GLOBAL GA1,GA2,GA3,GA4 SET &GA1=&AP1 SET &GA2=&AP2 SET &GA3=0 SET &GA4=&AP1+2 EXEC COMP2
-
COMP2
GLOBAL GB1,GB2 EXEC COMP3
-
COMP3
GLOBAL GC1,GC2,GC3,GC4
4.10. GOTO 문
지정된 위치로 분기한다.
사용법
항목 | 설명 |
---|---|
dest |
분기할 위치의 레이블이다. |
예제
다음은 GOTO 문 사용 예제이다.
SET &CNT=2 GOTO TAG&CNT TAG1: WRITE CNT IS NOT TWO TAG2: WRITE CNT IS TWO
4.11. IF-THEN-ELSE 문
표현식의 값에 따라 서로 다른 동작을 수행한다.
사용법
항목 | 설명 |
---|---|
expression |
판단의 기준이 되는 표현식이다. 표현식의 값이 참이면 then_action을 수행하고 거짓이면 else_action을 수행한다. |
then_action |
expression의 값이 참인 경우 수행할 TSO 명령이나 Command Procedure 문이다. DO 그룹일 수도 있다. |
else_action |
expression의 값이 거짓인 경우 수행할 TSO 명령이나 Command Procedure 문이다. DO 그룹일 수도 있다. |
예제
다음은 IF-THEN-ELSE 문 사용 예제이다.
IF &LASTCC EQ 0 THEN- WRITE ZERO ELSE- WRITE NONZERO
4.13. OPENFILE 문
데이터셋을 연다.
사용법
항목 | 설명 |
---|---|
ddname |
데이터셋의 DD 이름을 지정한다. |
오퍼랜드
다음은 앞에서 언급한 오퍼랜드에 대한 설명이다.
오퍼랜드 | 설명 |
---|---|
INPUT |
데이터셋을 입력 모드로 연다. 생략 시 입력 모드로 연다. |
OUTPUT |
데이터셋을 출력 모드로 연다. |
UPDATE |
데이터셋을 갱신 모드로 연다. |
예제
다음은 OPENFILE 문 사용 예제이다.
ALLOC DD(INP) DS(MY.DATA) OPENFILE INP
4.14. PROC 문
상위 Command Procedure로부터 전달 받는 기호 파라미터를 정의한다. 키워드 지정 기호 파라미터는 위치 지정 기호 파라미터 뒤에 기술되어야 한다.
사용법
항목 | 설명 |
---|---|
n |
위치 지정 기호 파라미터의 개수를 지정한다. |
name |
파라미터의 이름을 지정한다. |
default_value |
파라미터의 기본값을 지정한다. |
예제
다음은 PROC 문 사용 예제이다.
PROC 3 PP1 PP2 PP3 KP1(DEFVAL1) KP2()
4.15. PUTFILE 문
지정된 DD 이름과 동일한 이름의 기호 파라미터에 담긴 데이터를 데이터셋에 기록한다.
사용법
항목 | 설명 |
---|---|
ddname |
OPENFILE 문에서 연 데이터셋의 DD 이름을 지정한다. |
예제
다음은 PUTFILE 문 사용 예제이다.
OPENFILE FILE1 UPDATE GETFILE FILE1 SET FILE1=UPDATED PUTFILE FILE1 CLOSFILE FILE1
4.16. READ 문
사용자로부터 터미널을 통해 입력 받은 데이터를 기호 파라미터에 저장한다. 오퍼랜드를 생략하는 경우에는 &SYSDVAL에 저장한다.
사용법
항목 | 설명 |
---|---|
param |
사용자로부터 터미널을 통해 입력 받은 데이터가 저장되는 변수명을 지정한다. |
예제
다음은 READ 문 사용 예제이다.
READ ANS1
4.17. READDVAL 문
&SYSDVAL의 내용을 기호 파라미터에 저장한다. 오퍼랜드를 생략하는 경우에는 아무 일도 하지 않는다.
사용법
항목 | 설명 |
---|---|
param |
&SYSDVAL의 내용이 저장되는 변수명을 지정한다. |
예제
다음은 READDVAL 문 사용 예제이다.
SET READDVAL=&STR(SMITH JONES KELLY) READDVAL NAME1,NAME2,NAME3
4.18. RETURN 문
오류가 발생한 Command Procedure 문 다음의 Command Procedure 문으로 제어를 반환한다.
사용법
예제
다음은 RETURN 문 사용 예제이다.
ERROR DO WRITE &LASTCC RETURN END