IBM RPG II

IBM RPG II

RPG IIIBM RPG 프로그래밍 언어의 매우 초기적이고 인기 있는 버전이다.

1960년대 후반에 개발되었으며, IBM 1130, IBM System/3, System/32, System/34, System/36과 같은 당대의 가장 작은 IBM 시스템에서 작업하도록 설계되었다.그러나 System/370, The Singer System 10, Sperry Univac 90/25, 90/30, 90/40, System 80, 1100 메인프레임 시리즈[1]Wang VS Series에도 사용할 수 있었다.ICLICL 2903 시스템과 VME/K용 버전을 생산했고, Burroughs CorporationB1700 시리즈 컴퓨터를 위한 데이터베이스 확장 기능을 갖춘 RPG II 컴파일러를 생산했다.디지털 장비 회사VAX/VMS 시스템을 위한 VAX RPG II라는 자체 구현을 가지고 있었다.[2]

1978년에 향상된 버전 RPG III가 등장했다.

그것은 암묵적인 처리 루프, 그리고 특별한 디버깅 템플릿 없이는 프로그램을 읽기 힘들 정도로 고정형 프로그래밍 언어라는 것을 포함한 많은 특이한 특징을 가지고 있다.[3]

특징들

RPG II는 고정형 프로그래밍 언어로, 정확한 결과를 내기 위해서는 정확한 열 위치에 코드를 배치해야 한다는 것을 의미한다.8가지 사양 유형이 있으며, 각각의 사양을 작성하기 위해 별도의 코딩 양식을 사용하며, 프로그램 출력물을 읽기 위한 보조 도구로 사용되는 특수 디버깅 템플릿이[3] 있다.

모든 RPG II 프로그램은 파일의 모든 기록에 프로그램을 연속적으로 적용하는 프로그램 주기인 묵시적 루프 내에서 실행되며, 이는 디버깅 템플릿의 "Logic Flow" 다이어그램을 통해 문서화된다.[3]각 레코드(개별 펀치 카드)는 사용자 정의 목적을 위해 01–99로 번호가 매겨진 논리 변수 집합 또는 레코드, 필드 또는 보고서 처리 기능에 기초한 기타 작은 집합에서 해당 라인에 "인디케이터"가 "켜짐" 또는 "꺼짐"이 있는지 여부에 따라 프로그램에 작용하는 각 라인과 비교될 수 있다.. UDATE, UYE, PAGE 등과 같은 특수 변수는 프로그램이 시작되거나 페이지 오버플로가 발생할 때 채워지며, 이러한 활동에 대한 명시적인 지침이 없음에도 불구하고,총계 계산 및 출력은 고정 논리에 의해 L1/LR이 설정되었을 때의 상세 주기 후 "총 시간"에 이루어진다.

RPG의 프로그램 사이클의 개념은 카드를 읽는 순환 기계와 깔끔하게 결합되어 그 내용을 요약하고 결과를 출력하는 것이 표식 기계와 같다.언어는 다른 입력 및 출력 장치를 다루도록 확장되었으며 빠르고 효율적인 프로그래밍 방법을 제공한다.

워크스테이션(WORKSTN), 키보드(KEYBORD) 또는 콘솔(CONSORD)과 같은 기기는 작업 시작 시 고정 로직 RPG "마지막 레코드" 사이클을 통합하기 위해 SETON 명령으로 LR 표시기를 설정할 수 있다.LR을 설정할 수 없음.

RPG II는 시스템/34에 대한 1977년 구현에서 Advanced/36이 마케팅에서 단종된 2000년 구현으로 크게 발전하지 않았다.1970년대 버전에서 변경된 사항으로는 IFEQ/IFNE/IFGT/IFGE/IFLT/IFLE 및 END 그룹이 있다.또한 외부 서브루틴을 호출할 수 있는 호출/파마.또 다른 변화는 내부 서브루틴의 경우 더 이상 C(계산) 사양 7열과 8열에 SR을 넣을 필요가 없다는 것이다.

제3자 제공자들은 RPG II 제한을 초과하기 위해 시스템/36 및 Advanced/36 프로그래머가 사용할 수 있는 200개 이상의 서로 다른 조립자 서브루틴을 판매했다.Advanced/36을 포함한 시스템/3, 32, 34 및 36에 대한 RPG II의 제한사항 중 일부는 64K 제한사항과 프로그램에서 가질 수 있는 파일 수였습니다.그래서 프로그래밍 라인이 많거나 배열이 크면 개체 코드의 64,000바이트를 넘기가 쉬웠다.그러나 AS/400에서 실행 중인 RPG II와 그 후속인 iseries 및 IBM i(S/36E(실행 환경)에서 OS/400 또는 i5/OS를 실행하는 사용자)는 이러한 제한(64K 바이트 및 파일 수)을 크게 확장하거나 제거했다.

RPGII 규격

RPG II의 인기 있는 시스템/36 구현에는 다음과 같은 8가지 사양 유형이 있다.

U - 자동 보고서 사양은 자동 보고서 프로그램에만 필요함.
H - 헤더 사양은 프로그램 상단에 있으며, 최대 컴파일 크기, 프로그램이 MRT(Multiple Requestor Terminal) 프로그램인지 여부, 프로그램을 컴파일할 때 생성되는 목록 유형 등의 컴파일러 옵션을 설명한다.생성된 프로그램의 개체 이름은 75-80열에 위치하며, 소스에 H 규격이 없는 경우 RPGOBJ라는 이름이 사용된다.
F - 파일 사양은 다음으로, 프로그램에 사용된 파일을 설명한다.파일은 디스크 파일(DISK)이거나 프린터(PRINTER), 워크스테이션(WORKSTN), 키보드(KEYBORD), 비정형 디스플레이(CRT 또는 Display) 또는 사용자 정의(SPECIAL)와 같은 장치일 수 있다.기록 크기, 블록 크기, 오버플로 표시기, 외부 표시기가 설명된다.RPG 프로그램은 F 사양을 사용하지 않을 가능성이 있다.
E - 확장명 규격이 그 다음이고, 디스크 파일(입력 테이블)에서 프리페치될 수 있는 배열과 표, **와 /* 기호 사이에 소스 끝에 배치된 상수에서 추출하거나 계산에서 빌드할 수 있는 배열과 표를 설명한다.
L - 라인 카운터 사양이 다음에 있으며, 있을 경우 인쇄할 양식을 설명하십시오.한 페이지에 있는 줄의 수와 인쇄가 시작되고 끝나는 위치를 규정한다.
I - 다음은 입력 사양이며, 파일 내의 데이터 영역에 대해 설명하십시오.RPG II는 FLDA라는 필드가 각각 1문자의 8개 요소를 포함하는 배열 AR과 동일한 영역을 차지할 수 있도록 데이터 영역의 재정의를 허용한다.데이터 구조와 같은 비기록 영역을 설명할 수 있다.입력 기록의 값에 따라 지시자가 조절될 수 있다.
C - 계산 사양은 다음이다.총 필드를 설명하고 누적할 수 있다.복잡한 계산과 끈 조작이 가능하다.지표를 조절할 수 있다.
O - 출력 사양 - 필드 및 출력 위치 측면에서 출력 레코드를 설명한다.

9번째는 1977년 후반에 추가되었다.[4]

T - 통신

운용 코드는 RPG-II 계산 명세서의 28~32열에 표시된다.

작업코드 이름
추가 추가하다
후보선수 빼다
멀티 곱하기
DIV 나누다
Z-ADD 0 및 추가
Z-SUB 0과 빼기
MVR 나머지 이동
이동 이동하다
모벨 왼쪽으로 이동
MHLZO 로우 존으로 하이 이동
MLHZO 하이 존으로 로우 이동
MLLZO 로우 존으로 이동
음허조 하이 존으로 하이 존 이동
비트온 비트온
비토프 비트 오프
테스트B 테스트 비트
에 가다 에 가다
태그 태그(GOTO 대상)
EXSR 서브루틴 실행
베그스르 서브루틴 시작
엔드르 서브루틴 끝
세톤 설정
세토프 설정 해제
엑셉트 예외
종료 퇴장
라블 레이블 다시 정의
울라블 사용자 레이블
호출1 부르다
PARM1 매개변수
체인 체인
읽다 읽다
리이드 읽기 이퀄
READP 이전 읽기
레드페 이전 동일 읽기
SETLL 하한 설정
세트 세트
시간 시간(0000-235959)
DSPLY 디스플레이
SOCRETA 배열 정렬
엑스풋 크로스풋
무바 배열 이동
로업 조회(배열에서 찾기)
  1. CALL/PARM은 릴리즈 6.0(VASP라고도 함)으로 RPG II에 추가되었다.

CONEIN은 인자 2에 명명된 인덱싱된 파일에서 인자 1의 값으로 지정한 정확한 키와 일치하는 레코드를 검색한다.

SETLL은 인자 2에 명명된 파일의 인덱스 포인터가 인자 1의 값으로 지정된 위치에 놓이게 한다.

SORTA는 명명된 배열을 제자리에 정렬하게 한다. 즉, 요소가 순서대로 나타난다.

Z-SUB는 반대 기호로 인자 2를 계산하고 결과 필드로 이동했다.

XFOOT는 배열을 합산하고 결과를 결과 필드로 이동시킨다.

MVR은 DIV 작업을 따라야 한다.DIV 연산의 정수 나머지가 결과 필드에 배치된다."56 나누기 3"에 대한 DIB 연산 후 MVR은 값 2를 결과 필드에 배치한다.

지표

지표는 'set' 또는 'not' 중 하나이므로, 사실상 일련의 "flags" 또는 부울 데이터 형식에 내장되어 있다.

  • 표준:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
  • 정지 표시기:
H1 H2 H3 H4 H5 H6 H7 H8 H9
  • 일치 표시기:
M1 M2 M3 M4 M5 M6 M7 M8 M9 MR
  • 제어 수준 표시기:
L0 L1 L2 L3 L4 L5 L6 L7 L8 L9
  • 명령 키 표시기:
KAKB KC KD KE KF KKKK KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK KVKKKKKKKKKKKKKKKKKKKKKKK
이 표시기는 명령 키 1~24를 순서대로 가리킨다.KO 표시기가 없다는 점에 유의하십시오.
  • 첫 번째 주기 표시기(1페이지, 주로 프린터 파일에 사용됨):
1P
  • 마지막 레코드 표시기:
LR
  • 오버플로 표시기:
OG OV의 OA OB OC OD OE
  • 외부 지표:
U1 U2 U3 U4 U5 U6 U7 U8
시스템/36 SEU 템플릿
3 H
5 F/파일
6 F/확장
7 E
8 L
10 I/header
11 I/필드
12 C
13 O/header
14 O/필드

샘플코드

F************************************************* 이 프로그램은 F* 로컬 데이터 영역에 설정된 날짜에 대해 처리된 송장을 인쇄한다.F* 각 스토어의 레벨 휴식 및 총합이 있다.F************************************************FINVHDR IP F 62 디스크 FPRINER O 132*****FINVHDR NS 01NC I 1 3 스토어 L1 I4 13 INVNO I 14 20 CustNO I 21 45 STNAM I 46 53 INV I 54 622 TOTINV I UDS I 1 8 RPTDAT C 01 INVDAT COMP RPTDAT 11 C 01 11 추가 TOTINV L1TOT 92 C 01 11 추가 TOTINV LRTOT 92 OPRINter H 101 1P O 또는 O 페이지 Z 106 O 102 '페이지' O 59 '매우 큼'O 72 '스토어, 주식회사' O UDATE Y 17 O 8 '실행 날짜' O H 1 1 P O 또는 O 73 '스토어별 일일 판매' O H 2 1 P O O O O O ORPTDAT 83 O 63 '날짜:' O H 1 1P O 또는 O 6 '스토어' O 18 '인보이스' O 28 '고객' O 58 '고객'O 78 'INVOICE' O H 2 1P O 또는 O 6 'NUMBER' O 18 'NUMBER' O 28 'NUMBER' O 58 'NAME' O78 '총' O D 0 L1 O 스토어 6 O D 1 01 11 O INVNO 18 O 커스터노 28 O STNAM 58 O TOTINV1B 78 O T 1 L1 O45 '총 저장...' O L1TOT 1B 78 O T 1 LR O 45 '총 저장...' O LRTOT 1 78

참조

  1. ^ "Sperry Univac 1100/60 System" (PDF). Retrieved 18 January 2021.
  2. ^ "VAX/VMS Software Language and Tools Handbook" (PDF). bitsavers.org. 1985. Retrieved 2020-12-31.
  3. ^ a b c 컴퓨터 히스토리 박물관 "IBM RPG 디버깅 템플릿"
  4. ^ IBM 프로그램 제품 사양서, 1977년 11월, 페이지 3 "IBM System/3 Model 8, Model 10, Model 12 및 Model 15 RPG II Compilers"

외부 링크