OUTPUT Processing

본 장에서는 OUTPUT의 개념과 처리방식에 대해 기술한다.

1. 개요

OUTPUT Processing은 JOB 수행 도중에 생성된 SYSOUT SPOOL 데이터셋을 JOB이 종료된 후에 프린터를 통해 출력 처리하는 단계이다.

OpenFrame에서 프린터로 출력하는 작업은 엄밀히 말하면 물리적인 프린터를 직접 가동시키는 것은 아니고, 외부 프린터 솔루션에 프린트할 데이터와 프린트에 사용될 리소스 정보(FORMS, FLASH, PSIZE 등)를 전달하는 것이다. 외부 프린터 솔루션에 데이터와 정보를 전달하기 위해 OpenFrame 환경설정에 print 서브젝트, PRINTn 섹션의 COMMAND,DRIVER_PATH 키의 VALUE 항목에 필요한 명령어와 공유 라이브러리의 경로를 설정해야 한다.

2. OUTPUT

OUTPUT은 OUTPUT Processing에서 처리되는 단위로, JOB 수행이 끝나면 생성된 SPOOL 데이터셋은 OUTPUT Processing 단계를 거치게 된다.

OUTPUT은 JCL의 FD문에 선언된 SOUT 및 기타 출력 관련 오퍼랜드들에 의해 결정된다.

3. OUTPUT 처리

JOB 수행이 끝나면 SPOOL 데이터셋은 OUTPUT 단위로 OUTPUTQ에 등록된다. 등록된 OUTPUT은 ofrpmsvr에 의해 스케줄링되어 프린트 처리(외부 프린터 솔루션 호출)된다. ofrpmsvr는 OUTPUTQ에서 OUTPUT STATUS를 확인하여 OUTPUT을 가져와 OpenFrame 환경설정의 print 서브젝트, PRINTn 섹션의 CLASS 키의 VALUE 항목과 OUTPUT CLASS를 비교하여 스케줄링하고, OUTPUT DISPOSITION에 따라 OUTPUT을 처리한다.

3.1. OUTPUT STATUS

OUTPUTQ에 등록된 OUTPUT의 상태 정보를 나타낸다. OUTPUT의 상태는 ofrpmsvr에 의해 처리되는 과정에서 바뀐다.

다음은 OUTPUT STATUS의 종류를 보여준다.

종류 설명

Unable

OUTPUT이 생성될 때의 초기 상태로 스케줄링이 되지 않은 채 OUTPUTQ에 대기하고 있는 상태이다.

Ready

OUTPUTQ에서 꺼내져 스케줄링이 되기 전 상태이다.

Print

스케줄링되어 PRINTERn 또는 인터널 리더로 작업이 이관된 상태이다.

Hold

OUTPUT DISPOSITION이 LEAVE일 경우 OUTPUT 처리 후 OUTPUTQ에 남아 대기하는 상태이다.

Cancel

OUTPUT 처리가 사용자에 의해 취소된 상태이다.

Error

PRINTERn 또는 인터널 리더에 이관된 작업에 오류가 발생한 상태이다.

JOB 수행 중 등록되는 OUTPUT은 초기에 U(Unable) 상태이다. ofrpmsvr는 주기적으로 OUTPUTQ를 스캔하며 등록된 OUTPUT 중 상태가 U(Unable) 또는 R(Ready) 인 것을 꺼내와 상태를 R(Ready)로 갱신하며 작업을 스케줄링한다. 이후 ofrpmsvr는 OUTPUT의 처리를 해당 프린터로 이관하며 상태를 P(Print)로 갱신한다. 만일 OUTPUT DISPOSITION이 'LEAVE’라면 OUTPUT의 정상 처리 후 상태는 H(Hold)로 바뀌어 OUTPUTQ에 남아 대기하게 된다.

OUTPUT 처리 중 tjesmgr를 통한 사용자의 명령에 의해 OUTPUT이 'PURGE' 됐을 경우, 해당 OUTPUT의 상태는 C(Cancel)이 되고 프린터 작업 중 오류가 발생할 경우 상태는 E(Error)로 갱신된다.

3.2. OUTPUT CLASS

OUTPUT에 부여된 1Byte 문자로 A-Z, 0-9가 사용된다. OUTPUT CLASS는 JCL SOUT 구문에서 지정한다.

다음에서는 SYSPRINT FD의 OUTPUT CLASS가 B로 지정된다.

\ FD SYSPRINT=DA,SOUT=B,FORM=AAA

3.3. OUTPUT DISPOSITION

OUTPUT에 부여된 조치사항이다. JOB이 성공적으로 종료되었는지 여부에 따라 정상 처리(Normal Disposition)와 비정상 처리(Abnormal Disposition)로 나뉜다.

다음은 OUTPUT DISPOSTION에 따른 JOB 처리 과정을 나타낸 그림이다.

figure 5 1
OUTPUT DISP에 따른 처리과정

DISP의 종류와 성격은 다음과 같다.

종류 설명

WRITE

OUTPUT이 스케줄링되어 프린트되어야 함을 의미한다. 정상 처리되면 OUTPUT이 삭제된다.

HOLD

사용자가 해제할 때까지 스케줄링되지 않고 OUTPUTQ에 대기한다. 사용자가 해제하면 DISP는 WRITE로 변경된다.

KEEP

WRITE와 마찬가지로 OUTPUT이 스케줄링되어 프린트되어야 함을 의미한다. 정상 처리된 후 DISP는 LEAVE로 변경된다.

LEAVE

사용자가 해제할 때까지 스케줄링받지 않고 OUTPUTQ에 대기한다. 사용자가 해제하면 DISP는 KEEP으로 변경된다.

PURGE

OUTPUTQ에서 삭제한다.

OUTPUT DISPOSITION은 다음과 같은 방법으로 지정한다.

  1. OUTPUT CLASS에 따라 환경설정에 설정된 값으로 지정된다.

    설정 파일은 OpenFrame 환경설정의 tjes 서브젝트, OUTCLASS 섹션에서 OUTPUT DISPOSITION이 클래스에 따라 다음과 같은 예처럼 정의된다.

    OUTPUT CLASS가 A인 OUTPUT은 '(WRITE,WRITE)'로 지정되고, OUTPUT CLASS가 B이면 '(HOLD,PURGE)'로 지정된다. 만약 OUTPUT CLASS에 해당하는 DISP가 OUTCLASS 섹션에 정의되어 있지 않으면 기본값으로 '(PURGE,PURGE)'가 사용된다.

    $ ofconfig list -n NODE1 -s tjes -sec OUTCLASS
    
    ===================================================================================
      SUBJECT   |     SECTION      |         KEY         |            VALUE
    ===================================================================================
        tjes    |     OUTCLASS     |          A          |         WRITE,WRITE
                |                  |          B          |         HOLD,PURGE
    ===================================================================================
  2. 프린트되어야 할 OUTPUT들은 OUTPUT DISPOSITION이 WRITE일 때 OUTPUT class 정보를 OpenFrame 환경설정에 print 서브젝트, PRINTERn 섹션에 등록된 클래스 정보와 비교하여 정보가 맞으면 프린트된다. PRINTERn 섹션에 등록된 CLASS 정보가 SYSOUT의 OUTPUT CLASS를 포함하고 있으면, ofrpmsvr은 PRINTERn 섹션에 설정된 명령어와 공유 라이브러리를 사용하여 외부 프린터 솔루션에 데이터와 프린트 리소스 정보를 전달한다.

PRINTERn 섹션에는 최대 9개까지 프린터를 지정할 수 있으며, 각각 CLASS, COMMAND, DRIVER_PATH를 키로 지정할 수 있다.

CLASS 키에는 해당 프린터에서 처리할 수 있는 출력 클래스를 값으로 지정한다. 만약 SOUT에 지정된 출력 클래스와 일치하는 클래스가 기술되어 있지 않다면 출력 처리는 수행되지 않는다.

COMMAND 키에는 외부 프린터 솔루션에 전달할 명령어를 값으로 지정한다.

DRIVER_PATH 키에는 외부 프린터 솔루션과의 인터페이스를 위해 OpenFrame에서 제공하는 공유 라이브러리의 경로를 값으로 지정한다. 현재 OpenFrame에서는 libbspprt.so, liblrsprt.so의 2가지 공유 라이브러리를 지원하고 있다.

libbspprt.so에서는 OUTPUT에 관한 정보를 담고 있는 outputid.cc, outputid.ec라는 2개의 텍스트 파일을 생성한다. 각 파일에 출력되는 정보는 JCL에서 SOUT으로 선언된 FD문에서 오퍼랜드로 지정할 수 있다. 출력 정보는 다음과 같으며 OpenFrame XSP에서 지원하지 않는 항목은 출력되지 않는다. 각 출력 항목의 JCL 지정 방법에 대해서는 XSP 버전의 OpenFrame Batch "JCL 문법 안내서"를 참고한다.

파일 종류 출력 정보

*.ec

STORE:
CLS={출력 클래스}
PATTERN=99
PROGRAMN={프로그램명}
INPUT_COUNT=1
INPUT1:
INPUT={출력 경로}
RID_COUNT=1
INPUT_RID1:
RID={[프로그램명 |작업명][code][overlayname][출력 클래스]}

*.cc

CHANGE:
RI_COUNT=1
RI1:
RID={[프로그램명 |작업명][code][overlayname][출력 클래스]}
JOB="{작업명}"
STEP="{스텝명}"
JOBNO="{작업 아이디}"
LPCI={form lpci} | STD1
OG={출력 그룹명}
OVERLAYNAME={overlayname}
CODE={form code} / 0000
NOTE="{note}"
SHEETSIZE={forms form size}
LANDSCAPE=
PRINTMODE="{PORTRAIT | LANDSCAPE| forms format}"
CLISTN="{clist명}"
CLISTCMD="{BATCH | clist 명령어}"
DDN="{FD명}"
DSNAME="{데이터셋명}"
TERMINAL="{terminal}"
SIDE="{forms side}"
FILE="{데이터셋명}"
RI1_DI1:
DIST=ALL
SSET=01
COPY="{copies}" | 1

liblrsprt.so에서도 libbspprt.so와 동일하게 outputid.cc, outputid.ec라는 2개의 텍스트 파일을 생성한다. 단, 각 파일에 출력되는 정보는 libbspprt.so의 출력 정보와 차이가 있으며, libbspprt.so와 마찬가지로 JCL에서 SOUT으로 선언된 FD문의 오퍼랜드로 지정한다. 출력 정보는 다음과 같으며 OpenFrame XSP에서 지원하지 않는 항목은 출력되지 않는다. 각 출력 항목의 JCL 지정 방법에 대해서는 XSP 버전의 OpenFrame Batch "JCL 문법 안내서"를 참고한다.

파일 종류 출력 정보

*.ec

STORE:
CLS={출력 클래스}
PATTERN={forms}
PROGRAMN=
INPUT_COUNT=1
INPUT1:
INPUT={출력 경로}
RID_COUNT=1
INPUT1_RID1:
RID={라이터명} | 999999999999999999999999
OUTPUT:
CHARS={chars value[,chars value][,chars value][,chars value]}
WRITER={라이터명}
BURST={burst}

*.cc

CHANGE:
RI_COUNT=1
RI1:
RID={라이터명} | 999999999999999999999999
CODE=A | M | F | 0 | 1 | 2
JOB='{작업명}'
STEP='{스텝명}'
DD='{FD명}'
JOBNO='{jobid}'
MAXLL={Record length}
COPIES={copies} | 1