2014-05-21 5 views
1

현재 HLASM으로 작성된 메인 프레임 CICS 응용 프로그램을 COBOL로 변환하는 프로젝트를 진행 중입니다. 계속 사용할 수있는 여러 유틸리티 프로그램이 있습니다. 그 중 하나는 CICS LINK를 통해 액세스되는 "파일 액세스"유틸리티입니다. 이 유틸리티는 지정된 파일에서 레코드를 읽는 CICS 파일 요청을 생성하기 위해 (commarea에서 전달 된) 필수 입력 매개 변수를 취해 저장 영역의 주소와 검색된 레코드의 길이를 동일한 commarea로 되 돌립니다. 어셈블러에서는 해당 주소를 레지스터에로드 한 다음 USING 지시문을 사용하여 해당 레지스터를 레코드 맵 (DSECT)과 연결하기가 쉽습니다.CICS COBOL 프로그램에서 전달 된 레코드 주소를 참조하는 방법은 무엇입니까?

그러나 이것이 COBOL에서 어떻게 최고입니까? 나는 commarea에서 다시 전달 된 주소를 사용하고 COBOL 프로그램에서 레코드 필드를 직접 참조 할 수 있도록 COBOL 레코드 레이아웃과 연관시킵니다. 그렇다면 어떻게?

또는 데이터를 로컬 작업 영역으로 이동해야합니까? 그런 다음 COBOL 프로그램에 의해 수행 된 모든 갱신 사항을 반영하기 위해 다시 이동하십시오. 다시 그렇다면, 어떻게?

+0

@ NealB의 대답은 갈 길입니다. 그의 예에서 LINK-REC는 귀하의 DSECT입니다. [USAGE] POINTER가있는 COBOL 데이터 항목은 주소를 포함합니다. 해당 저장소가 Assembler 프로그램에서 데이터의 주소로 매핑되는 한 SET은 데이터를 연결 섹션 데이터 설명 (DSECT에 해당)과 연결합니다. –

답변

3

CICS COMMAREA에서는 버퍼의 주소를 보유하는 POINTER 유형의 변수를 선언하여 유틸리티 프로그램이 리턴합니다. 예를 들면 : 당신의 COBOL 프로그램에서

01 COMM-CICS. 
    02 COMM-SOME-STUFF PIC whatever... 
    02 COMM-REC-BUFF-ADDRESS POINTER. 
    02 COMM-REC-BUFF-LENGTH PIC 9(9) BINARY. 
    02.... 

는 예를 들어, LINKAGE SECTION의 레코드 레이아웃을 선언

LINKAGE SECTION. 
    01 LINK-REC. 
    02 LINK-DATA1 PIC X(10). 
    02 ..... 

이 레이아웃을 생성하지만 어떤 스토리지를 할당하지 않습니다. 당신의 유틸리티 프로그램에서 반환에 레코드 레이아웃에 기록 버퍼의 주소를 할당 에 COBOL SET ADDRESS 동사를 사용, 뭔가 같은 :

SET ADDRESS OF LINK-REC TO COMM-REC-BUFF-ADDRESS 

는 이제 COBOL 프로그램이있는 항목 중 하나를 처리 할 수 ​​있어야한다 예를 들어, 이름이 기록을 파일 :

MOVE LINK-DATA1 TO some-other-variable 

반환 된 데이터 영역에 대한 검사로서, 당신은 COBOL LENGTH OF 동사를 사용하여 COBOL 레코드 레이아웃의 길이에 대한 버퍼의 길이를 확인하실 수 있습니다, 예를 들어 :

IF LENGTH OF LINK-REC NOT = COMM-REC-BUFF-LENGTH 
    raise an error - buffer length does not match record layout 
    END-IF 

경고 ... 같은 주소 공간을 공유하지 않기 때문에 LINK가 원격 컴퓨터 인 경우에는 작동하지 않습니다. 이런 종류의 일에 대해 CICS 채널과 Contaners를 사용하여 조사 할 것을 권장합니다.

+0

우수 - 명확한 설명과 예제 코드! 나는 이것이 그와 같은 것인지 궁금해했지만 정확한 상황에 맞는 예제를 찾을 수 없었습니다. 일단 당신이 그것을 보게되면 의미가 있습니다. :-) – Lyle