HP-GL

mime = application/vnd.hp-HPGL **HP-GL**은 **휴렛 팩커드 그래픽스 언어**(Hewlett-Packard Graphics Language)의 약자로, 흔히 **HPGL**로 표기되며 휴렛 팩커드(HP)가 개발한 프린터 제어 언어이다. HP-GL은 HP 플로터에서 사용되는 주요 프린터 제어 언어였다. 1977년 플로터 HP-9872와 함께 도입되었으며, 거의 모든 플로터의 표준이 되었다. 휴렛 팩커드의 프린터 또한 일반적으로 PCL 외에 HP-GL/2를 지원한다.
# 설계
이 언어는 일련의 두 글자 코드(기억술)와 그 뒤에 오는 선택적 매개변수로 구성된다. 예를 들어, 페이지에 호를 그리려면 다음과 같은 문자열을 보낸다: `AA100,100,50;` 이는 절대 호(Arc Absolute)를 의미하며, 매개변수는 페이지의 절대 좌표 100,100에 호의 중심을 배치하고, 시작 각도는 반시계 방향으로 50 도로 측정된다. 네 번째 선택적 매개변수(여기서는 사용되지 않음)는 호가 얼마나 계속되는지 지정하며, 기본값은 5도이다. 처음 도입되었을 때 HP-GL에는 다음 명령이 포함되어 있었다. {| class="wikitable" ! 명령어 ! 의미 |----- ! colspan=2 | 벡터 그룹 |----- | `PA` x,y{,x,y{... || 플롯 절대 [i] |----- | `PR` x,y{,x,y{.... || 플롯 상대 [i] |----- | `PD` || 펜 내리기 |----- | `PU` || 펜 올리기 |----- ! colspan=2 | 문자 그룹 |----- | `CA` n || 대체 문자 집합 n 지정 [i] |----- | `CP` spaces, lines || 문자 플롯 [d] |----- | `CS` m || 표준 집합 m 지정 [i] |----- | `DI` run, rise || 절대 방향 [d] |----- | `DR` run, rise || 상대 방향 [d] |----- | `LB` c, ..., c || 라벨 ASCII 문자열 [c] |----- | `SA` || 대체 문자 집합 선택 |----- | `SI` wide, high || 절대 문자 크기 [d] |----- | `SL` tan θ || 절대 문자 기울기 (수직으로부터) [d] |----- | `SR` wide, high || 상대 문자 크기 [d] |----- | `SS` || 표준 문자 집합 선택 |----- | `UC` x, y, pen{, ...} || 사용자 정의 문자 [i] |----- ! colspan=2 | 선 종류 그룹 |----- | `LT` t{,l} || 선 종류 t 및 길이 l 지정 [d] |----- | `SM` c || 기호 모드 [c] |----- | `SP` n || 펜 선택 [i] |----- | `VA` || 적응 속도 |----- | `VN` || 일반 속도 |----- | `VS` v{,n} || 펜 n의 속도 v 선택 [i] |----- ! colspan=2 | 디지털화 그룹 |----- | `DC` || 디지털화 지우기 |----- | `DP` || 디지털화 지점 |----- | `OC` || 현재 위치 및 펜 상태 출력 |----- | `OD` || 디지털화된 지점 및 펜 상태 출력 |----- ! colspan=2 | 축 |----- | `TL` tp{,tn} || 눈금 길이 [d] |----- | `XT` || X축 눈금 |----- | `YT` || Y축 눈금 |----- ! colspan=2 | 설정 그룹 |----- | `IP` p1x,p1y,p2x,p2y || p1 및 p2 입력 [i] |----- | `IW` xlo,ylo,xhi,yhi || 입력 창 [i] |----- | `OP` || p1 및 p2 출력 [i] |----- ! colspan=2 | 구성 상태 |----- | `AP` || 자동 펜 픽업 [i] |----- | `DF` || 기본값 설정 |----- | `IM` e{,s{,p || e, s 및 p 마스크 입력 [i] |----- | `IN` || 초기화 |----- | `OE` || 오류 출력 [i] |----- | `OS` || 상태 출력 [i] |} {|class = wikitable |+ 추가된 명령 (언제?) | SI w,h || 문자 너비와 높이 설정 |} 형식: * [i]: -32767에서 32768 사이의 정수 형식. 소수점 없음. * [d]: +/- 127.9999 사이의 십진 형식. 선택적 소수점. * [c]: ASCII 문자
# 예시
일반적인 HP-GL 파일은 몇 가지 설정 명령으로 시작하여 긴 그래픽 명령 문자열로 이어진다. 파일은 ASCII(텍스트 파일) 형식이었다. 예를 들면: {| class="wikitable" |+ HP-GL 파일 예시 |----- ! 명령어 ! 의미 |----- | IN; || 초기화, 플로팅 작업 시작 |----- | IP; | 스케일링 지점 (P1과 P2)을 기본 위치로 설정 |----- | SP1; || 펜 1 선택 |----- | PU0,0; | 펜을 올리고 다음 동작의 시작점으로 이동 |----- | PD100,0,100,100,0,100,0,0; | 펜을 내리고 다음 위치로 이동 (페이지 주변에 상자 그리기) |----- | PU50,50; || 펜을 올리고 X,Y 좌표 50,50으로 이동 |----- | CI25; || 반지름 25인 원 그리기 |----- | SS; || 표준 문자 집합 선택 |----- | DT*,1; | 텍스트 구분 기호를 별표로 설정하고 출력하지 않음 (1은 "참"을 의미) |----- | PU20,80; || 펜을 올리고 20,80으로 이동 |----- | LBHello World*; || 라벨 그리기 |} 좌표계는 HP 플로터가 지원할 수 있는 최소 단위를 기반으로 했으며, 25 μm (즉, 밀리미터당 40 단위, 인치당 1016 단위)로 설정되었다. 좌표 공간은 양수 또는 음수 부동소수점 숫자, 특히 ±230이었다.
# HPGL2HP-GL/2
원래의 HP-GL 언어는 선 너비 정의를 지원하지 않았는데, 이 매개변수는 플로터에 장착된 펜에 의해 결정되었기 때문이다. 최초의 잉크젯 플로터가 등장하면서, HP-GL 파일 내에 지정된 "펜"의 선 너비를 프린터에서 설정해야만 어떤 선 너비로 인쇄해야 할지 알 수 있었고, 이는 번거롭고 오류가 발생하기 쉬운 과정이었다. **휴렛 팩커드 그래픽스 언어/2** 즉 **HP-GL/2**가 등장하면서, 선 너비 정의가 언어에 도입되어 이 단계를 없앨 수 있었다. 또한, 다른 개선 사항 중에서도 더 작은 파일과 더 짧은 파일 전송 시간을 허용하는 이진 파일 형식이 정의되었고, 최소 해상도가 감소되었다. {| class="wikitable" |+ HP-GL/2 명령 예시 |- ! 명령어 ! 의미 |- | NPx || 펜 수; x=1..256 |- | PCx,r,g,b || 펜 색상; x=펜, r=빨강, g=녹색, b=파랑, 0..255 |- | PWw,x || 펜 너비; w=소수점 있는 mm 단위 펜 너비, x=펜 |}
# AGL
HP-GL은 베이직 프로그래밍 언어의 확장인 **AGL** (A Graphics Language)과 관련이 있다. AGL은 휴렛 팩커드 미니컴퓨터에 구현되어 플로터 제어를 단순화했다. AGL 명령은 원하는 그래픽 플로팅 기능을 설명하며, 컴퓨터는 이를 여러 HP-GL 명령으로 플로터에 전달한다.
# 더 읽어보기
* archive-date=2017-02-27