언어번역 프로그램과 시스템 유틸리티는 각각 어떤 것들로 이루어지는지를 설명하시오

도1에 도시한 바와 같이, 컴퓨터 네트워크는 네트워크 링크(16)를 통해 제1서버 컴퓨터(14)에 연결된 복수의 사용자 컴퓨터들(12)을 구비한다. 제1서버(14)는 하나 이상의 사용자 컴퓨터(12)용으로 적합한 응용 프로그램을 비휘발성 메모리(20)(도2)내에 저장한다. 여기에서 사용된 "응용 프로그램"이라는 용어는 운영 시스템이 아닌 컴퓨터 실행 코드 콜렉션과 기기의 기본 기능을 제어하는 기저 프로그래밍을 가리킨다.

도1에서와 같이, 네트워크는 사용자 컴퓨터(12)로부터의 요청에 대응하여 제1서버(14)를 지원하는 복수의 제2서버들(22)을 포함한다. 특히, 제2도에 도시한 바와 같이, 제1컴퓨터(14)는 제1서버(14)가 실행해야하는 일련의 업무를 계속 모니터링하는 과부하 검출기(24)를 포함한다. 과부하 검출기(24)는 업무의 수와 량이 소정의 임계치를 초과하는지 판단한다. 임계치에 도달하면, 과부하 검출기(24)는 가장 한가한 제2서버(22)를 식별하기 위해 메모리(20)의 영역(28)에 접근하는 제2 서버 선택기(26)에 신호를 전송한다. 이렇게 하여, 메모리 영역(28)은 각각의 서버에 대해 측정된 응답시간뿐 아니라 제2서버(22)에 대한 목록까지 포함하게 된다.

메모리 영역(28)의 제2서버내의 응답 시간들은 제2서버(22) 각각에 에코 패킷을 전송하고 제1서버(14)로부터 각 에코 패킷의 전송과 제2서버(22) 각각으로부터의 응답 수신간의 지연을 측정함으로써 주기적으로 측정된다. 이러한 측정을 위해, 제1서버(14)와 제1서버의 처리부(30)는 에코 패킷 디스패처(32)와 응답시간 모니터(34)를 구비한다. 제1서버(14)에서 네트워크 통신 인터페이스(36)를 통해 제2서버(22)로 에코 패킷을 전송하면, 디스패처(32)는 패킷 전송과 수신측인 제2서버(22)에 대한 정보를 응답시간 모니터(34)에 통보한다. 모니터(34)는 네트워크 링크(16)와 통신 인터페이스(36)을 통한 에코 패킷의 전송과 제2서버(22) 각각으로부터의 응답시간 도착사이의 시간을 카운트한다. 응답 시간 업데이트부(38)는 응답시간 모니터(34)와 메모리 영역(28)에 연결되어 메모리 영역(28)에 저장된 제2서버 목록에 업데이트된 응답 시간을 기입한다.

메모리(20)내의 응용 프로그램 스토어(store) (18)는 복수의 개별적, 독립적 기계 실행 코드 모듈들을 가진다. 따라서, 응용 프로그램을 작동하는 사용자 컴퓨터(12)는 작동을 시작하기 위해 전체 프로그램을 로드하지 않아도 된다. 사용자의 응용 프로그램 실행을 위해 사용자 컴퓨터 메모리내에 존재하지 않는 코드 모듈이 요구되는 경우, 네트워크 링크(16)를 통해 사용자 컴퓨터(23)로부터 제1서버(14)로 요청이 전송된다. 제1서버(14)가 과부하되지 않는 경우, 제1서버(14)는 프로그램 스토어(18)로부터 코드 모듈을 검색, 요청하고 이를 통신 인터페이스(36)와 네트워크 링크(16)를 통하여 요청이 발생한 사용자 컴퓨터에 전송한다.

제1서버(14)의 처리부(30)는 응용 프로그램 또는 메모리 영역(18)에 저장된 프로그램들의 코드 모듈에 대한 요청을 처리하는 코드 모듈 교환기(40)를 포함한다. 교환부(40)는 응용 프로그램을 점검하는 버전 검출기(42)와 협력하여 특정 코드 모듈의 요청 버전이 스토어(18)의 최근 버전인지를 판단한다. 최근 버전이 아닌 경우, 버전 검출기(42)와 코드 모듈 교환기(40)는 원하는 코드 모듈의 최근 버전이 요청자에 의해 사용가능한지에 대한 조회를 유휴 컴퓨터에 전송한다. 원하는 코드 모듈의 새로운 버전이 구 버전을 대신하여 사용가능한 경우, 새로운 버전은 통신 인터페이스(36)와 네트워크 링크(16)를 통하여 전송된다.

데이터 파일과 같은 기타 자원뿐 아니라 코드 모듈도 보안상의 이유로 암호화되어 전송된다. 암호화는 모듈, 파일, 문서 또는 기타 전송가능한 자원을 암호화 패킷의 데이터 영역에 위치시킴으로써 이루어진다. 암호화된 패킷이 통신 인터페이스(36)를 통해 처리부(30)에 의해 수신되면, 패킷은 포괄처리회로(50)을 통해 암호해독을 위해 암호화/해독부(44)로 전송된다. 암호화/해독부(44)는 복수의 암호키들을 저장한 메모리 영역(46)을 점검하여 사용자 요청을 포함한 암호화 패킷의 헤더 정보에 의해 식별된 암호키를 선택한다. 입력 암호화 패킷을 해독하면, 해독된 사용자 요청 또는 코드 모듈 교환 패킷은 처리를 위해 코드 모듈 교환기(40)에 전송된다. 암호화/해독 과정은 암호화/해독부(44)와 메모리 영역(46)의 기능을 실행하는 플러그인 코드 모듈에 의해 처리된다. 일시에 데이터와 코드 전송 시스템에 존재하는 플러그인 암호화 코드 모듈의 수는 제한이 없다. 암호화 패킷의 헤더에는 해독을 위해 사용되는 플러그인 암호화 코드 모듈이 지정되어있다.

실행 코드 모듈의 교환을 위한 프로토콜을 가진 컴퓨터 네트워크의 보안성을 개선하기 위해, 제1서버(14)는 메모리 영역(48)에 사용자 인증 코드 목록을 저장한다. 예를 들면 다른 컴퓨터로부터의 기계 실행 코드 모듈에 대한 요청에 대응하여, 처리부(30)의 비교기(52)는 입력 요청내의 사용자 인증 코드를 메모리영역(48) 내의 사용자 인증 코드 목록과 비교한다. 코드 모듈 교환기(40)는 요청내의 사용자 인증 코드와 저장된 목록내의 인증 코드가 일치하는 경우에만 선택된 기계 실행 코드 모듈의 검색, 전송을 계속한다. 기계 실행 코드 모듈에 대한 요청이 암호화 패킷내에 저장된 경우, 암호화/해독부(44)는 상기와 같은 비교기(52)의 인증 코드 비교가 실행되기 전에 암호화 패킷을 해독한다. 선택기(26)에 의해 선택된 제2서버(220에 사용자 요청이 전송되면, 제2서버는 암호화 패킷을 암호화 및 해독하기 위해 암호화/해독부와 인증 코드 비교부를 통합하며, 이런 경우 사용자 인증 코드를 점검은 제2서버(들)에 의해 실행된다. 이러한 보안 대책을 위해 요구되는 모든 프로그래밍 또는 데이터는 제1서버(14)로부터 선택된 제2서버(22)에 전송될 수 있다.

도3에서 도시된 바와 같이, 사용자 컴퓨터(12)의 처리부(54)는, 사용자에 의한 응용 프로그램의 실행중에 코드 모듈이 요구되므로, 응용 프로그램의 원하는 코드 모듈에 대한 요구를 생성하는 코드 모듈 교환기(56)를 가진다. 코드 모듈 요청은 사용자 컴퓨터(12)의 네트워크 통신 인터페이스(58), 네트워크 링크(16)(도1), 제1서버(14)의 통신 인터페이스(36)를 통하여 제1서버(14)의 코드 모듈 교환기(40)에 전송된다.

보안성이 개선된 시스템에서, 사용자 컴퓨터(12)의 처리부(54)는 기타 정보 전송 패킷과 코드 모듈 요청 패킷을 사용자 컴퓨터(12)의 비휘발성 메모리(64)의 영역(62)에 저장된 복수의 키로부터 선택된 암호키를 가진 암호화 패킷 각각에 삽입하는 암호화/해독부(60)를 포함한다. 즉, 사용자 컴퓨터(12)에서의 암호화/해독 과정은 암호화/해독부(60) 및 메모리 영역(62)의 기능을 실행하는 플러그인 코드 모듈에 의해 처리된다. 암호화/해독부(60)에 의해 생성된 암호화 패킷의 헤더에는 해독을 위해 사용될 제1서버(14)의 플러그인 암호 코드 모듈이 지정되어 있다.

컴퓨터 바이러스와 기타 불량 프로그래밍으로부터 도1의 컴퓨팅 시스템과 특히 사용자 컴퓨터(12)를 보호하기 위한 보안성을 개선하기 위해, 처리부(54)는 메모리(64)의 저자 인증 목록(68)을 접근할 수 있는 저자 ID 비교기(66)를 포함한다. 저자 ID 목록(68)은 저자 ID 비교기(66)과 포괄 처리 회로(70)의 기타 기능 전환된 블록에 의해 제1서버(14)로부터의 입력 명령에 대응하여 주기적으로 업데이트된다. 저자 ID 목록(68)은 허용된 저자의 목록을 포함하며, 보다 효율적으로, 네트워크상에 바이러스 또는 기타 불량 프로그래밍을 배포한 이유로 블랙목록에 오른 저자들의 목록을 포함한다. 입력 기기 실행 코드 모듈을 사용하기 전에, 특정 코드 모듈의 저자가 블랙목록에 있는지를 판단하기 위해 패킷 헤더내의 저자 ID는 비교기(66)에 의해 점검된다. 저자가 사용자 컴퓨터(12)를 위해 실행 코드 모듈을 생성하도록 허용되면, 입력 코드 모듈의 처리는 정상적으로 진행된다. 반대로, 입력 코드 모듈의 저자가 블랙목록에 포함되어 있는 경우, 코드 모듈은 실행되지 않으며 메모리(64)의 응용 프로그램 스토어(73)에 저장되기 전에 폐기된다.

상기 도1, 도2와 연관된 설명에서와 같이, 제1서버와 제2서버들의 로드 상황에 따라서 제1서버(14)는 입력 사용자 요청을 제2서버(22)에 전송하기도 한다. 일반적으로, 사용자 요청에 대응하기 위한 이러한 전송은 공정하게 이루어져야 한다. 즉, 사용자 요청의 처리는 사용자에게 공지하지 않고 사용자에 의한 간섭없이 실행되어야 한다. 사용자 컴퓨터(12)가 제1컴퓨터(14)로부터 제2컴퓨터(22)를 선택하도록 할 수 있다. 이렇게 하여, 사용자 컴퓨터(12)의 처리부(54)는 메모리(64)내의 제2서버의 목록(76)을 접근하는 제2서버 선택기(74)를 가진다. 일반적으로 선택기(74)는 각각의 사용자 컴퓨터(12)에 비해 가장 짧은 응답 시간을 가진 제2서버(22)를 선택한다. 이렇게 하여, 처리부(54)는 에코 패킷 디스패처(78), 응답 시간 모니터(80), 응답 시간 업데이트부(82)를 추가로 포함한다. 디스패처(78)는 통신 인터페이스(58)와 네트워크 목록(16)(도1)을 통하여 제2서버(22)에 에코 패킷을 전송하며, 모니터(80)는 다양한 제2서버들로부터의 응답 지연을 판단한다. 업데이트부(82)는 디스패처(78)와 모니터(80)에 의해 실행된 측정 결과에 따라 목록(76)내의 응답 시간을 정정한다. 목록(76)내의 제2서버 응답 시간의 업데이트는 사용자 컴퓨터(12)가 사용자 모듈 또는 기타 자원을 제1서버(14)로부터 요구하며 이 서버가 이미 사용중이어서 사용자 요청을 처리할 수 없을 경우에만 실행된다.

사용자 컴퓨터(12)의 처리부(54)는 네트워크의 기타 사용자 컴퓨터와 거대한 업무의 처리를 처리부(54)가 공유하도록 하는 분산 처리 회로(84)를 가진다. 이렇게 함으로써, 사용자 컴퓨터가 그 용량을 완전히 사용하지 않는 경우 (처리부(54)는 50%이상의 유휴를 가지며 네트워크 트래픽도 없음), 분산 처리 회로(84)는 프로세서 집약적인 업무를 실행중이며 로드의 일부를 각 사용자 컴퓨터(12)의 처리부(54)에 전송할 수 있는 다른 사용자 컴퓨터(12)를 검색한다. 필요한 경우, 이러한 업무를 처리할 코드 모듈은 유휴 사용자 컴퓨터(12)에 전송된다. 이러한 클라이언트측 분산 처리는 프로세서 집약적인 업무를 상당히 개선시킨다.

사용자 컴퓨터(12)의 처리부(54)는 콘텐트에로의 접근을 제어하는 미터 전송및 청구(billing) 회로(86)를 포함한다. 회로(86)에 의한 접근이 가능한 메모리(64)의 크레디트 레지스터 (credit register 88)는 특정 사용자가 각 계좌에 대해 가지는 크레디트를 저장한다. 제1서버(14)에 의해 유지되고 모니터된 계좌의 크레디트가 낮은 경우, 회로(86)는 제1서버(14)로부터 특정 사용자로 보다 많은 크레디트를 전송할 준비를 한다. 미터 전송 및 청구회로(86)는 크레디트를 청산할 청구 방법을 포함한다. 일반적으로, 이에 대한 크레디트 요청 및 응답은 암호화되어야 한다.

사용자 컴퓨터(12)의 처리부(54)는 데이터 파일(92)들은 제1서버(14) 또는 선택된 제2서버(22)로 업로딩하기 위해 메모리(64)의 데이터 파일(92)을 접근하는 일방향 데이터 전송 및 수집 회로(90)를 포함한다. 데이터 전송 및 수집 회로(90)는 사용자 컴퓨터가 서버로부터 데이터를 다시 판독할 필요가 없는 경우 작동한다. 이 회로는 온라인 주문, 형식 전송, 데이터 수집(통계 데이터 포함)등에 특히 유용하다.

일반적으로, 기입될 데이터를 포함한 패킷은 제1서버(14)에 직접 전송되어야 하며 션트될 수 없다. 이것은 이미 기입된 자원의 상이한 버전간 충돌을 방지한다. 서버에 재기입된 데이터는 사용자 인증을 요구한다. 저자의 제어를 받는 프로그램에 의해서만 재기입이 실행된 경우라 하더라도 사용자 인증은 요구된다. 이러한 경우, 사용자 인증 코드 및 암호는 프로그램에 내장된다. 이것은 동일한 데이터에 재기입되어 그 데이터를 오염시킬 가능성이 높은 프로그램을 다른 저자가 기입하지 않도록 하기 위함이다.

메모리 영역(도2의 18)과 모듈 저장부(도3의 72)에 저장된 응용 프로그램 코드 모듈은 TenCORE로 작성된다. TenCORE는 원래 데스크탑 컴퓨터의 디스크 드라이브와 중앙처리장치간 프로그램 전송을 위한 소규모의 효율적 코드 모듈을 위해 설계된 모듈식 프로그래밍 언어이다. 예를 들면, TenCORE는 네트워크 링크를 작동할 코드 전송 기능을 채택하도록 수정이 용이하다. 사용자 컴퓨터(12), 제1서버(14), 제2서버(22)에서의 사용을 위해 수정된 프로그램은 "TenCORE Net"이라고 한다.

TenCORE Net은 각각의 기능을 실행하기 위해 소규모의 개별 코드 모듈을 사용하며, 각각의 코드 모듈이 제1서버(14) 또는 선택된 제2서버(22)로부터 단일 대화형 프로그램을 효율적으로 다운로딩할 수 있도록 한다. TenCORE Net에서의 프로그래밍은 양단 개방형이므로, 메모리(64)의 프로그램 스토어(74)에 응용 프로그램이 부분적으로 저장된 경우에만 응용 프로그램의 명령을 사용자 컴퓨터(12)가 실행할 수 있도록 한다.

메모리 저장부(72)의 코드 모듈은 기계에서 직접 사용되기 위해서는 번역되어야하는 사용자 위주의 의사코드 언어이다. 이를 위해, 처리부(54)는 기본적으로 요구되는 모든 기능들을 효율적으로 실행하는 프로그램 또는 프로그래밍된 번역 회로(94)를 포함한다. 이러한 번역기 자체에는 콘텐트를 가지고 있지 않다. 콘텐트는 메모리 저장부(72)에 로딩되며 번역 회로(94)에 명령을 효과적으로 발행하는 수많은 소규모의 의사코드 모듈로부터 유도된다. 프로그램 작성에 있어. 프로그래머 또는 저자는 단지 명령의 발행만 하는 등 그 개입이 감소하며 실행의 모든 어려움들은 번역기가 담당한다.

TenCORE는 네트워크 사용을 위해 두 가지 방법으로 수정될 수 있다. 첫 번째로, 실행될 코드가 응용 프로그램 메모리 영역(72)내에 존재하는 지를 점검하기 위해 컴퓨터 코드의 각 호출(call) 라인 앞에 서브루틴 또는 명령 세트가 삽입된다. 그렇지 않은 경우, 코드 모듈 교환기(56)는 제1서버(14)로부터 요청된 코드 모듈을 획득한다. 요청된 코드 모듈이 메모리 영역(72)에 다운로드되면, 처리 회로(70)에 의해 실행되기 전에 호출되어 번역 회로(94)에 의해 번역된다.

모듈식 응용 프로그램 및 코드 모듈 교환기(40, 56)를 사용함으로써, 네트워크상의 컴퓨터들(12, 14, 22)간 컴퓨터 프로그램 저장 및 전송에 대한 제어를 최적화할 수 있으며, 상호대화형 프로그램의 사용을 개선할 수 있다. 제1서버(14)의 비휘발성 메모리 영역(18)에 저장된 응용 프로그램은 모듈식의 다양한 사용자 컴퓨터(12)에 전송된다. 사용자 컴퓨터(12) 또는 선택된 제2서버(22)로부터 네트워크 링크(16)을 통해 전송된 요청에 대응하여, 제1서버(14)는 선택된 기계 실행 코드 모듈과 그 선택된 코드 모듈만을 메모리 영역(18)으로부터 검색하고, 네트워크 링크(16)을 통해 사용자 컴퓨터 또는 제2서버로 선택된 코드 모듈을 전송한다.

예를 들면, 응용 프로그램이 도안 또는 그리기 프로그램인 경우, 사용자 컴퓨터(12)는 각뿔대와 같은 3차원의 기하학적인 형태를 그리도록 명령받을 수 있다. 프로그램 저장부(72)의 응용 프로그램이 업무처리를 위해 요구되는 코드 모듈을 구비하지 않은 것을 처리 회로(70)가 발견하면, 코드 모듈 교환기(56)는 제1서버(14)로부터 요청 모듈이 전송되도록 요청한다. 이러한 요청에 대응하여, 버전 검출기(42)는 원하는 모듈의 후(later) 버전이 존재함을 검출하고 이러한 후 버전이 사용자 컴퓨터 각각에 의해 사용가능한지를 코드 모듈 교환기(56)에 조회한다.

이렇게 함으로써, 사용자 컴퓨터(12)는 응용 프로그램의 코드 모듈들을 모두 가지는 것은 아니며 이러한 모듈들이 요구되는 경우에만 새로운 코드 모듈들을 획득한다. 응용 프로그램의 실행 코드들이 개별 실행 모듈들로 분류되므로, 프로그램 사용자 실행에 의해 개별 모듈들이 요구되는 경우 프로그램은 모듈별로 하나씩 다운로딩될 수 있다. 따라서, 사용자는 프로그램 사용 전에 전체 프로그램을 다운로드받기 위해 기다릴 필요가 없다.

마찬가지로, 선택된 제2서버(22)는 응용 프로그램 전체 및 제1서버(14)에 의한 프로그램의 배포 처리에 연관된 기타 자원없이 응용 프로그램 전송 또는 션트된 사용자 요청을 처리하고 클라이언트/사용자에게 직접 응답할 수 있다. 선택된 제2서버가 코드 모듈, 데이터 파일, 또는 사용자 요청을 처리할 기타 자원을 가지고 있지 않은 경우, 요청된 코드 모듈, 데이터 파일, 또는 기타 자원은 제1서버로부터 제2서버에 전송된다. 이렇게 함으로써, 제2서버(22)는 교환기(40, 56)와 유사한 코드 모듈 교환기를 가지게 된다.

물론, 제1서버(14)는 서버 용량이 한도에 이르기 전에 로드를 해결하여, 션트된 사용자 요구 또는 업무를 처리하기 위해 필요한 자원에 대한 제2서버로부터의 요구를 처리하기 위한 충분한 가용 시스템 자원 (프로세서, 메모리등)을 확보하여야 한다.

보안성에 민감한 네트워크에서, 제2서버(22)는 인증 비교기(52)뿐 아니라, 암호화/해독부(44)와 같은 구성 부분을 가진다. 기계 실행 코드 모듈에 대한 요구가 암호화 패킷에 포함된 경우, 제2서버는 요구내의 사용자 인증 코드를 메모리내의 사용자 인증 코드 목록과 비교하기 전에 암호화 패킷을 해독한다. 이러한 보안 대책을 위한 프로그래밍 또는 데이터는 종류에 관계없이 제1서버(14)로부터 전송된다.

제2서버가 클라이언트 기계를 접촉할 수 없는 경우, 다른 제2서버가 클라이언트 기계에 직접 접촉할 경우도 있으므로 제2서버는 사용자 요청의 처리를 위해 다른 제2서버로 그 요청을 전송한다.

처리부(54)의 코드 모듈 교환기(56)는 네트워크상의 대화형 처리를 가능하게 한다. 사용자 컴퓨터(12) 각각은 다른 컴퓨터의 코드 모듈 실행에 대응하여 하나 이상의 선택된 코드 모듈을 실행한다. 이렇게 함으로써, 두 개의 컴퓨터는 모두 응용 프로그램의 기계 실행 코드 모듈의 최소한 일부를 저장한다. 경우에 따라서, 컴퓨터는 현재의 메모리에 가지고 있지 않은 코드 모듈을 요청할 수 있다. 이런 경우, 이 컴퓨터는 요청한 코드 모듈을 다른 컴퓨터로부터 획득할 수 있다. 요청한 컴퓨터를 다른 컴퓨터가 가지고 있지 않은 경우, 요청은 전체적으로 응용 프로그램이 존재하는 서버에 전송된다.

이렇게 하여, 네트워크상의 클라이언트 또는 사용자는 서로 코드 모듈을 교환할 수 있다. 제1사용자와 제2사용자가 대화형 화이트보드 세션에 연결되어 있으며, 제2사용자의 화이트보드 프로그램에 없는 도구를 이용하여 제1사용자가 그림을 그리기 시작했다면, 코드 모듈 또는 그 도구를 위한 모듈들은 제1사용자의 컴퓨터로부터 제2사용자의 컴퓨터로 자동 전송될 수 있다.

코드 모듈 교환기(56)는 사용될 코드 모듈의 사용자 컴퓨터의 유휴 기간 동안의 전송을 개시하도록 명령된다는 점에 유의한다. 사용자 컴퓨터(12)로부터의 요청은 사용자 컴퓨터의 유휴 기간동안 제1서버(14) 또는 기계 실행 코드 모듈을 위한 기타 컴퓨터에 전송된다. 유휴기간 다운로딩을 위해 생성된 자원 요청은, 로드 균형과 배분을 위해 표준 요청과는 다른 우선순위를 코드 모듈 교환기(56)가 지정할 수 있도록 표지 가진다. 사용자가 응용 프로그램의 연관된 부분을 접근하고자 하는 경우, 자원 요청의 상태는 유휴 기간으로부터 실시간으로 업데이트된다.

처리부(30, 54)의 여러 가지 전용 기능 블록들은 일반적으로 또한 바람직하게 소프트웨어-수정 포괄적 디지털 프로세싱 회로로 구현된다. 따라서, 코드 모듈 교환기(40, 56)는 서버(14)와 사용자 컴퓨터(12)간의 코드 모듈의 교환을 위한 프로토콜로서의 특징을 가진다. 이러한 코드 모듈 교환기 프로토콜은 로드 분배, 사용자 인증, 암호화를 처리하는 모듈화된 코드 마스터 프로토콜(MCMP)의 하위 프로토콜로 취급된다. 로드 분배는 프로세서 과부하 검출기(24)와 제2서버 선택기(26)에 의해 제1서버(14)에서 특히 처리되며, 사용자 인증 및 암호화는 제1서버와 제2서버들(22)에서 비교기(52)와 암호화/해독부(44)에 의해 처리된다.

MCMP는 4개의 하위 프로토콜을 가지는데, 이들은 코드 모듈 교환 프로토콜(CMXP), 일방향 데이터 전송 및 수집 프로토콜 (UDSCP), 미터 전송 및 청구 프로토콜 (MDBP), 분산 처리 프로토콜 (DPP)이다. 코드 모듈 교환 프로토콜은 제1서버(14)와 제2서버(22)의 처리부(30)의 코드 모듈 교환기(40), 사용자 컴퓨터(12)의 처리부(54)의 코드 모듈 교환기(56)에 의해 구현된다. 일방향 데이터 전송 및 수집 프로토콜은 사용자 컴퓨터(12)의 회로(90)와 이에 대응하는 제1서버(14)의 프로그램-수정 처리 회로(미도시)에 의해 구현된다. 미터 전송 및 청구 프로토콜은 사용자 컴퓨터(12)의 회로(86)와 이에 대응하는 제1서버(14)의 프로그램-수정 처리 회로(미도시)에 의해 구현된다. 분산 처리 프로토콜은 사용자 컴퓨터(12)의 처리부(54)에서 회로(84)로 구현된다.

도4는 제2서버(22)의 가용성에 대한 업데이트 목록(28)을 유지하기 위해 제1서버(14)의 처리부(30)의 기타 처리 회로뿐 아니라 에코 디스패처(32), 응답시간 모니터(34), 업데이트부(38)의 작동을 도시한다. 동일한 단계들이 제2서버(22)의 응답시간에 대한 업데이트 목록을 획득하기 위해 사용자 컴퓨터(12)의 처리부(54)의 기타 처리 회로뿐 아니라 에코 디스패처(78), 응답시간 모니터(80), 업데이트부(82)에 의해 실행된다. 조회기(100)에서, 에코 디스패처(32, 78) 또는 포괄 처리 회로(50 또는 70)는 최종 에코 테스팅 이후의 시간이 소정의 최대 기간 TMR보다 더 긴지 조회한다. 최대 기간을 초과한 경우, 에코 패킷 디스패처(32 또는 78)는 접촉 시점이 가장 오래된 것으로 테스트된 제2서버(22)로 에코 패킷을 전송한다. 응답시간 모니터(34 또는 80)는 목표 제2서버(22)로부터 응답이 수신되었는지를 조회(104)에서 판단한다. 판단 단계(106)에서 응답이 수신되지 않고 미리 정해진 측정 시도 횟수를 초과하지 않은 것으로 판단된 경우, 다른 에코 패킷이 단계 102에서 전송된다. 목표 제2서버(22)로부터 응답이 수신된 경우, 업데이트부(38 또는 82)는 목록(28 또는 76)에 디스패처(32 또는 78)에 의한 최초 패킷 전송과 모니터(34 또는 80)에 의한 에코 패킷의 수신간의 시간을 기록한다. 이러한 기록은 단계 108에서 실행된다. 제2서버 응답 시간 측정 시도 횟수가 사전에 정해진 수를 초과한 것으로 판단 접접(106)에서 판단된 경우, 서버는 목록(28 또는 76)에서 사용불가로 표시된다 (단계 110). 또한, 메시지 또는 경고 신호가 서버 관리자로부터 생성될 수 있다. 조회기(100)에서 최종 에코 테스팅 이후의 시간이 소정의 최대 기간 TMR보다 작다고 판단된 경우, 처리부(30 또는 54)는 단계 112에서 MCMP 입력 패킷큐(queue)에 패킷이 있는지를 조사한다. 그렇지 않은 경우, 도4의 유지 루프가 다시 시작된다. 이 경우, 패킷 프로세싱 작용(114)이 실행된다. MCMP 입력 패킷 큐는 네트워크로부터 수신된 패킷과 MCMP 프로토콜에 의해 큐에 위치한 패킷 모두를 포함한다.

도6A와 6B는 제1서버(14) 또는 오버플로 처리를 위해 선택된 제2서버(22)의 처리부(30)에 의해 MCMP 프로토콜하에서 실행된 작동(114)을 도시한다. 최초 조회(124)에서, 과부하 검출기(24)는 처리부(30)가 입력 패킷(예를 들어 코드 모듈에 대한 사용자 요청)을 처리할 수 있는 여유가 있는 지를 판단한다. 여유가 있는 것으로 판단되면, 처리회로(50)는 단계(126)에서 MCMP 패킷 헤더를 조사하여 패킷이 제2서버(22)로 션트될 수 있는지를 판단한다. 션트가능한 것으로 판단되면, 입력 패킷이 이미 션트되었는지를 판단하기 위해 추가 조사(128)가 실행된다. 패킷이 원래 컴퓨터(즉, 션트되지 않은)에 의해 서버에 직접 전송된 경우, 제2서버 선택기(26)는 단계 130에서 목록(28)을 접근하여 가장 로드가 적은 제2서버(22)를 검색한다. 이후 조회(132)에서, 처리부(30)와 특히 서버 선택기(26)는 선택된 제2서버가 입력 패킷의 전송(hand-off)에 적합한지를 판단한다. 선택된 제2서버가 적합하다면, 패킷은 서비스 이전의 결과로서 표시되며 선택된 제2서버로 전송된다 (단계 134).

조회(132)에서 단계 130에서 선택된 제2서버가 전송에 적합하지 않다고 판단되고, 제2서버로부터의 응답시간이 소정의 최대 시간보다 길다고 판단되면, 입력 패킷이 서비스 전송의 결과인지에 대한 조회(136)가 실행된다. 또한, 이러한 조회(136)는 판단 단계(126)에서 패킷이 션트되지 않은 것으로 판단되면 실행된다.

입력 MCMP 패킷이 서비스 전송의 결과로 조회(136)에서 판단된 경우, 처리 회로(50)는 요청된 자원이 가용한 것인지에 대한 조사(138)를 실행한다. 자원이 가용한 경우, 처리 회로(50)는 단계 140에서 자원이 사전에 지정된 만기일을 초과하였는지를 조회한다. 초과하였다면, 자원의 새로운 버전이 가용한지를 판단하기 위해 단계 142에서 자원의 소스에 신호가 전송된다. 새로운 버전이 가용한 것으로 판단 단계(144)에서 판단되면, 자원의 새로운 버전에 대한 요청이 단계 146에서 소스에 전송된다. 이러한 요청은 션트불가로 표시되며 우선순위 요청으로 추가 표시된다.

입력 패킷 (예를 들면, 코드 모듈에 대한 사용자 요청) 처리 이전에, 처리부(30)는 패킷이 사용자 인증 정보를 포함하는지의 여부를 판단하기 위해 조회(150)에서 입력 패킷의 헤더 정보를 점검한다. 사용자 인증 정보가 검색되면, 패킷의 이전 암호화 상태는 단계 152에서 판단된다. 패킷이 암호화되지 않은 경우, 단계 154에서 사용자 인증 실패를 보고하기 위한 메시지가 생성된다. 입력 패킷이 암호화된 경우, 소스 서버가 명시되었는지를 판단하기 위해 MCMP 헤더 정보를 단계 156에서 점검한다. 소스 서버가 명시되어 있지 않은 경우, 사용자 인증 실패가 단계 154에서 보고된다. 판단 단계(158)에서 판단 결과 MCMP 헤더 정보에 소스 서버가 명시된 경우, 그리고 소스 서버가 호스트 서버가 아닌 경우, 메모리 영역(48)이 아직 유효하며 상주하는 사용자 인증 데이터를 가지고 있는지를 판단하기 위해 조사(160)이 실행된다 (인증 코드 비교기(52)에 의해). 유효한 상주 데이터가 메모리 영역(48)에 없는 경우, 비교기(52)는 소스 서버로부터 사용자 인증 데이터를 획득하고 그 데이터를 메모리 영역(48)에 저장하도록 처리 회로(50)를 유도한다 (단계 162). 평가 단계(164)에서 비교기(52)에 의해 MCMP 패킷 헤더 정보에 포함된 사용자 암호가 상주 암호화 일치하지 않는다고 판단된 경우, 또는 점검 단계(166)에서 처리 회로(50)에 의해 사용자가 소스 서버 목록에서 발견되지 않는 경우, 사용자 인증 실패가 단계 168에서 보고된다. 사용자 인증 실패에 대한 보고(단계 154)는 소스 서버가 호스트 서버인 경우 (판단 단계 158), 그리고 패킷 헤더내의 사용자 인증 데이터가 메모리 영역(48)내의 사용자 인증 데이터에 대응하지 않는 것을 비교기(52)가 발견한 경우에도 실행된다.

조사 단계(170) 또는 평가 단계(164)에서 비교기(52)에 의해 입력 패킷에서의 인증 코드와 메모리 영역(48)에서의 사용자 인증 코드가 일치함이 발견되거나, 입력 패킷이 사용자 인증 코드를 포함하지 않은 경우, 평가 단계(171)에서 패킷이 MCMP 프로토콜 또는 다른 프로토콜에 의해 직접 처리되는 지를 판단한다. 단계(171)에서, 패킷이 MCMP 프로토콜에 의해 직접 처리되어야 한다고 판단되면, 패킷은 도5에서와 같이 단계 173에서 처리된다. 평가 단계 (171)에서 패킷이 특정 프로토콜에 의해 처리되어야 한다고 판단되면, 처리 회로(50)는 단계 172에서 패킷의 콘텐트를 처리하기에 적절한 프로토콜 (예. CMXD, UDSCP, MDBP, DPP)을 판단한다. 선택된 프로토콜 또는 MCMP 프로토콜하에서 처리부(30)에 의해 응답이 생성되었다고 조회(174)에서 판단되면, 그 응답은 원래 요청을 생성하였던 클라이언트에게 단계 176에서 전송된다. 서비스 전송이 있는 경우, 즉, 패킷이 호스트 서버로 션트된 경우, 응답은 호스트가 패킷을 수신한 컴퓨터가 아닌 다른 컴퓨터로 전송된다. 단계 178에서, 처리부(30)는 큐내의 후속 패킷에 대한 처리를 시작하거나 새로운 패킷이 전송할 때까지 대기한다.

도5에서와 같이, 처리 동작(173)은 패킷의 유형에 대한 최초 조회(116)를 포함한다. 암호화 패킷인 경우, 암호화/해독부(38 또는 60)는 단계 118에서 활성화되어 적절한 해독 모듈 또는 키를 사용하여 패킷을 해독한다. 후속 단계 120에서, 암호화 패킷의 영역에 포함된 패킷은 션트불가로 표시되며 MCMP 입력 패킷 큐로 귀환된다. 조회 단계 116에서 패킷이 암호화 패킷이 아닌 것으로 판단된 경우, 미지의 패킷 유형이라고 표시된 MCMP 상태 보고가 단계 122에서 발행되며 이 패킷은 폐기된다. MCMP 프로토콜의 기능을 개선하기 위해 도5에 도시된 절차를 추가 패킷 유형들을 포함하도록 개선한다.

코드 모듈 교환 프로토콜(CMXP)은 실행 코드의 동적 다운로딩, 프로그램 버전 제어, 클라이언트-투-클라이언트 모듈 교환, 바이러스 및 불량 프로그램 보호, 데이터 업로딩, 유휴 기간 다운로딩, 코드 모듈 캐싱(caching)등을 처리한다. 이러한 기능들은 여러 가지 비지정 포괄적 처리 회로(50, 70)에 의해서 뿐만 아니라, 서버(14, 22)에서 코드 모듈 교환기(40)와 버전 검출기(42)에 의해, 사용자 컴퓨터(12)에서 코드 모듈 교환기(56), 저자 인증 비교기(66), 일방향 데이터 전송 및 수집 회로(86)에 의해 실행된다. 코드 모듈 교환기(40)에 의해 부분적으로 구현된 CMXP 프로토콜의 서버측 부분은 그래픽 이미지와 폰트등의 지원 자원과 코드 모듈 전송을 처리한다. CMXP 서버와 코드 모듈 교환기(40)에 전송한 요청은 파일, 파일의 일부 (코드 모듈), 또는 코드 모듈의 일부 또는 기타 지원 모듈을 참조로 한다. 프로그램들은 별도의 코드 모듈로 분류되므로, 이러한 코드 모듈들은 필요시마다 전송되며, 프로그램의 실행 전에 전체 프로그램을 다운 로드 받지 않아도 된다.

프로그램이 모듈 단위로 전송되는 업그레이드를 수용하는 몇가지 방법이 있다. 구 버전과 신 버전이 모두 호환 가능한 경우 (예를 들면, 대화상자에서 타이핑 에러를 정정하기 위해 신 버전이 생성된다), 새로운 모듈이 구 모듈들과 병합된다. 버전 정보는 코드 모듈단위뿐만 아니라 파일 단위로 저장된다. 이것은 버전 업그레이드에서 변경되지 않은 코드 모듈은 다시 다운로드되지 않아도 됨을 의미한다. 구, 신버전이 호환성이 없어서 병합되지 않는 경우, 또한 전체 프로그램이 지역적으로 상주하거나 서버로부터 가용한 경우, 프로그램의 구 버전은 프로그램이 재시작하는 시간까지 계속 실행된다. 구, 신버전이 호환성이 없어서 병합되지 않으며, 프로그램의 구 버전이 전체적으로 더 이상 가용하지 않은 경우, 프로그램은 즉시 종료되며 새로운 버전 코드 모듈을 이용하여 재시작한다. 프로그램의 저자는 프로그램의 새로운 버전에 커스텀(custom) 업데이트 모듈을 포함시킴으로써 이러한 업데이트 절차를 오버라이드(override)할 수 있다. 이러한 코드 모듈은 (필요한 경우) 다운로드되며, 버전 충돌이 발생할 때마다 실행된다. 그런 다음, 상기 절차들중 어느 하나 또는 프로그램의 메모리 영역의 콘텐트를 새로운 버전에 의해 사용가능하도록 리매핑(remapping)하는 것과 같은 커스텀(custom) 절차를 실행하기 위한 선택이 이루어진다.

코드 모듈 및 연관된 자원들은 사용자 컴퓨터(12)와 제2서버(22)에 의해 캐시(상주)된다. 캐싱 법칙은 CMXP 프로토콜 그리고/또는 응용 프로그램 자체에 포함된다. 이것은 커스텀 캐싱(custom caching) 법칙을 응용 프로그램내에 내장되도록 하여, 특별한 캐싱 구조와 하이브리드 응용을 제공한다. 코드 모듈 다운로드가 진행 중일 때, 완성된 바이트수는 실제 데이터 다운로드와 함께 캐시에 저장된다. 다운로드가 중단되면, 나중에 중단된 시점부터 다시 시작할 수 있다.

도7은 CMXP 프로토콜에 따라 기능적으로 수정된 처리부(30)의 디지털 처리 회로의 작동을 도시한다. 이 작동에는 저자 ID에 대한 점검도 포함된다. 일반적으로, 사용자 컴퓨터(12)의 메모리 영역(68)의 저자 블랙목록은 목록의 업데이트 유지를 위한 작동을 담당하는 서버로부터 사용자 컴퓨터로 전송된다 (도8).

도7에서와 같이, 처리 회로(50)는 단계 180에서 자원에 대한 요청은 입력 패킷을 포함하는지를 조회한다. 포함한다면 추가 조회 단계 182에서는 요청된 자원이 익명의 접근에 가용한 지를 조회한다. 자원이 제한된 경우, 판단단계 184에서는 요청 사용자가 요청된 자원에 대한 접근 권한을 가지고 있는지를 판단한다. 그러한 권한을 사용자가 가지고 있지 않은 경우, "접근 거절" 메시지가 단계 186에서 요청자에게 귀환된다. 요청된 자원이 요청측에 가용한 경우, 처리 회로(50)는 판단 단계(188)에서 요청된 자원이 실행가능한 코드를 포함하였는지를 판단한다. 포함하였다면, 조회 190에서 저자 지문의 유효기간에 대한 조회가 이루어진다. 지문 또는 저자 ID가 유효하다면, 단계 192에서 당사자를 위한 메시지가 생성된다. 자원의 로컬 사본(local copy)은 후속 단계 194에서 삭제되고 "자원 배포 금지"라는 메시지가 단계 196에서 요청측으로 전송된다.

조회 단계 190에서의 조회 결과 요청된 자원의 저자의 지문이 유효하다면, 블랙목록된 저자인지를 단계 198에서 점검한다. 블랙목록되었다면, 자원의 로컬 사본을 단계 194에서 삭제하며 "자원 배포 금지" 메시지를 단계 196에서 발행한다. 블랙목록되지 않았다면, 또는 단계 188에서 요청된 자원이 실행가능 코드를 포함하지 않았다고 판단되면, 처리부(30)는 단계 200에서 클라이언트가 자원의 최근 사본을 가지고 있는지를 조회한다. 클라이언트 또는 사용자가 자원의 최근 버전을 가지고 있는 경우, 그에 대한 메시지가 단계 202에서 전송된다. 클라이언트 또는 사용자가 가지고 있는 자원이 구 버전인 경우, 요청된 자원은 단계 204에서 클라이언트에게 전송된다.

단계 180에서의 조회 결과 자원에 대한 요청은 입력 패킷을 포함하지 않은 경우, 자원 수정 요청을 자원이 포함하고 있는지를 단계 206에서 조회한다. 포함하고 있다면, 그리고 판단 단계 208에서 자원이 익명의 수정을 허용하지 않는다고 판단된 경우, 처리부(30)는 단계 210에서 사용자가 자원을 수정할 권리를 가지고 있는지를 조회한다. 사용자가 그러한 권한을 가지고 있지 않다면, "접근 금지" 메시지가 단계 212에서 요청자에게 귀환된다. 누구든지 자원을 수정할 수 있거나(판단 단계 208), 특정 사용자가 자원을 수정할 수 있는 경우 (조회 단계 210), 처리부(30)는 단계 214에서 자원을 요청된 대로 수정하고, 단계 216에서 자원의 변경을 핵심 제2서버들에게 통보한다.

단계 180에서의 조회 결과 입력 패킷이 자원에 대한 요청을 포함하지 않은 경우, 그리고 단계 206에서 자원 수정 요청이 아니라고 판단된 경우, 처리부(30)는 단계 218에서 패킷이 금지 목록(예를 들면, 금지된 사용자 또는 블랙목록된 저자)에 대한 업데이트인지를 점검한다. 단계 220에서 패킷이 업데이트이며 암호화되었다고 판단된 경우, 처리부(30)는 조회 단계 222에서 패킷이 시스템 사용자 어카운트로 전송되었는지를 판단한다. 전송되었다면, 금지 목록의 캐시사본(cached copy)이 단계 224에서 업데이트되고, 모든 제2서버들은 단계 226에서 업데이트를 통보받는다. 입력 업데이트 요청이 암호화되지 않거나 (판단 단계 22), 시스템 사용자 어카운트하에서 전송되지 않는 경우 (조회 222), 경고 메시지가 단계 228에서 해당 부분으로 발행된다. 단계 230에서, 미지의 패킷 유형이 수신된 경우 특별 상태 보고가 발행된다.

블랙목록된 저자들을 업데이트하기 위한 도8의 CMXP 유지 루프에서, 처리부(30)는 목록의 최종 업데이트 이후의 시간이 소정의 시간 이상인지를 단계 232에서 조회한다. 그러한 시간이 경과한 후, 조회를 실행하는 서버의 후속 서버 업스트림에 대한 접촉을 단계 234에서 시도한다. 스캔 (236)에서 서버에 대한 접촉이 실패한 것으로 판단되면, 다른 가용한 서버가 있는지를 점검(단계 238)한다. 다른 서버가 가용하면, 그 서버에 대한 접촉을 시도한다 (단계 240). 접촉할 서버가 없으면, 단계 242에서 시간을 다시 점검한다. 최종 업데이트 이후 소정의 시간이 경과하였으면, 단계 244에서 해당측에 경고를 전송한다.

스캔(236)에서 서버가 접촉가능하다면, 금지 목록의 최종 수정 날짜가 단계 246에서 그 서버로부터 획득된다. 비교 단계 248에서, 처리부(30)는 목록이 처리부에 의해 캐시된 이후 금지 목록이 수정되었는지를 판단한다. 수정되었다면, 금지 목록 사본을 단계 250에서 획득한다. 획득된 목록의 암호화 상태는 단계 252에서 점검된다. 미암호화된 금지 목록 사본이라면 단계 254에서 경고 상태로 진행되며, 암호화된 패킷이라면 단계 256에서 점검되어 시스템 사용자 어카운트로 패킷이 전송되었는지를 판단한다. 패킷이 적절하게 전송되었다면, 단계 258에서 캐시된 금지 목록을 업데이트하고 단계 260에서 모든 서버들에게 업데이트를 통보한다.

일방향 데이터 전송 및 수집 프로토콜 (UDSCP)를 통하여 데이터를 전송 또는 수집하는 방법은 두 가지가 있다. 첫 번째 방법은, 제1서버 (14) 또는 제2서버(22)에 전송하는 것이다. 그런 다음, 어플리케이션이 명시된 서버측 모듈에 의해 전송이 처리되는 중앙 서버에 모든 전송들이 수집된다. 이러한 방법은 전송들을 LAN-기초 우편 시스템으로 합병하는 하나의 서버상에 모든 형태의 전송을 수집하는데 있어 특히 유용하다. 두 번째 방법에서도, 제1서버(14) 또는 제2서버(22)에 전송한다. 이러한 전송들은 최초 전송되었던 서버들상에 수집된다. (또는 표준 부하 수집 원칙에 의해 션트된다). 그런 다음, 전송들은 어플리케이션이 명시된 서버측 모듈에 의해 처리된다. 이 모듈은 예를 들면 모든 전송들을 인터넷 E메일 주소로 전자우편 전송할 수 있다.

도9는 UDSCP 프로토콜에 따라 기능적으로 수정된 처리부(30)의 디지털 처리 회로에 의해 실행되는 단계들을 도시한다. 이 회로는 사용자 컴퓨터(12)로부터, 특히 처리부(54)의 일방향 데이터 전송 및 수집 회로(90)와 기타 서버들로부터 전송된 데이터 전송을 처리한다. 제1조회 단계 262에서, 처리부(30)는 입력 패킷이 데이터 전송인지를 조회한다. 데이터 전송이면, 데이터가 즉시 수집되어야 하는지를 단계 264에서 조회한다. 즉각적인 수집이 요청되면, 처리부(30)에 의해 데이터가 소스 서버에 수집되어야 하는지에 대한 후속 조회(266)가 실행된다. 수집되지 않아도 된다면, 단계 268에서 패킷은 최종 데이터 수집을 처리하는 모듈에 전송된다. 이 모듈은 전자우편 전송, 데이터베이스 저장, 파일 쓰기, 또는 기타 필요한 서버측 업무등을 처리한다. 단계 270에서, 요청이 데이터 수집 모듈에 의해 처리되었는지를 점검한다. 처리되었다면, 단계 272에서 패킷은 패킷을 획득한 곳으로 간주되는 UDSCP 전송 프로토콜 큐로부터 삭제된다. 그런 다음, 단계 274에서 데이터 패킷 전송 성공을 알리는 상황 보고가 발행된다. 단계 270에서 요청이 데이터 수집 모듈에 의해 처리되지 않은 것으로 판단되면, 처리부(30)는 단계 276에서 처리 실패가 일시적인 조건에 의한 것인지를 조회한다. 이러한 조회에 대한 응답이 부정적이면, 에러 상황을 나타낸 상태 보고(278)가 발행된다. 단계 276에 대한 응답이 긍정적이면, 상황과 데이터 처리에서의 지연 가능성을 나타내는 상황 보고(280)가 발행된다. 그런 다음, 패킷이 단계 282에서 UDSCP 프로세싱 큐에 추가된다.

단계 262와 264에서 조회 결과, 입력 데이터 패킷이 즉각 수집되지 않아도 될 데이터 전송인 경우, 성공을 알리는 상황 보고(184)가 발행되며, 패킷은 단계 286에서 UDSCP 프로세싱 큐에 추가된다. 단계 262와 264에서 조회 결과, 또한 단계 266 실행결과, 입력 데이터 패킷이 즉각 수집되어야 하는 데이터 전송인 경우, 단계 288에서 호스트 서버가 소스 서버인지를 점검한다. 소스 서버이면, 단계 268에서 패킷은 최종 데이터 수집을 처리하는 모듈로 전송된다. 소스 서버가 아니면, 처리부(30)는 소스 서버를 접촉할 수 있는 지에 대한 조사를 실행한다. 접촉이 불가능하면, 데이터 처리의 지연을 알리는 상황 보고(292)를 발행하며, 패킷은 단계 286에서 UDSCP 프로세싱 큐에 추가된다. 소스 서버 접촉이 가능하면, 단계 294에서 데이터는 그 서버에 전송된다. 처리부(30)의 UDSCP 기능-수정된 포괄적 처리 회로가 데이터 전송이 아닌 패킷을 가진 경우, 단계 296에서 미지의 유형의 패킷임을 알리는 보고가 생성된다.

도10은 UDSCP 프로토콜에 따라 기능적으로 수정된 처리부(30)의 포괄적 디지털 처리 회로에 의한 유지 루프의 단계들을 도시한다. 우선, UDSCP 전송 프로세싱 큐에 엔트리가 있는지에 대한 조회를 단계 298에서 실행한다. 있다면, 단계 300에서 제1 엔트리가 판독된다. 그런 다음, 처리부(30)는 엔트리상의 날짜 및 시간 이후에 X초 이상이 경과하였는지를 단계(302)에서 판단한다. 경과하지 않았으면, 단계 304에서 추가 엔트리가 큐내에 있는지를 확인하기 위해 UDSCP 전송 프로세싱 큐를 점검한다. 경과하였으면, 단계 306에서 후속 엔트리가 판독되며, 처리부(30)는 엔트리상의 날짜 및 시간 이후에 X초 이상이 경과하였는지를 단계(302)에서 판단한다. 경과된 시간이 소정의 한계 이상인 경우, 단계 308에서 서버가 데이터 전송을 처리할 여유가 있는지를 판단한다. 서버가 사용중이면, 처리부(30)는 단계 310에서 데이터가 즉시 수집되어야 하는지를 조회한다. 즉시 수집되지 않아도 된다면, 처리부(30)는 단계 312에서 엔트리상의 날짜 및 시간이 특정 시간보다 선행 시간 인지를 판단한다. 날짜 및 시간이 최근이면, 처리부(30)는 단계 304로 되돌아 가서 UDSCP 전송 큐내에 데이터 전송이 남아있는지를 점검한다.

서버가 데이터 전송을 처리할 여유가 있다면 (단계 308), 또는 데이터가 즉시 수집되어야 한다면 (단계 310), 또는 엔트리상의 날짜 및 시간이 데이터 전송에 대한 특정 시기를 가리키는 경우 (단계 312), 처리부(30)는 단계 314에서 데이터가 소스 서버에 의해 수집되어야 하는지를 판단한다. 수집되지 않아도 된다면, 단계 316에서 패킷은 최종 데이터 수집을 처리하는 모듈로 전송된다. 이 모듈은 전자우편 전송, 데이터베이스 저장, 파일 쓰기, 또는 기타 필요한 서버측 업무등을 처리한다. 단계 318에서 처리부(30)는 데이터 전송이 데이터 수집 모듈에 의해 처리되었는지를 점검한다. 처리되었다면, 단계 320에서 패킷은 UDSCP 전송 프로세싱 큐로부터 제거되며, 처리부(30)는 큐내에 추가 엔트리가 있는지를 확인하기 위해 단계 304로 귀환한다. 데이터 전송 패킷이 처리되지 않은 것으로 단계 318에서 발견되면, 요청 처리 실패가 일시적인 조건에 기인한 것인지를 단계 322에서 조회한다. 일시적인 조건 때문이 아니면, 해당측에 실패에 대한 경고를 통보한다(324). 일시적인 조건 때문이면, 데이터 전송상의 날짜와 시간은 단계 326에서 업데이트된다.

데이터가 소스 서버에 의해 수집되어야 한다고 처리부(30)가 판단 단계(314)에서 판단하면, 나아가 후속 판단 단계 328에서 호스트 자체가 소스 서버라고 판단하면, 패킷은 처리된다 (단계 316). 또는, 단계 328에서 소스 서버가 데이터 수집을 실행해야 하며 데이터 서버가 상이한 컴퓨터라고 판단된 경우, 소스 서버 접촉을 시도하는 단계 330이 실행된다. 소스 서버 접촉이 불가능한 경우, 데이터 전송상의 날짜 및 시간은 단계 326에서 업데이트된다. 소스 서버가 가용한 경우, 단계 332에서 데이터 전송이 소스 서버로 전송되며, 단계 334에서 패킷은 UDSCP 프로세싱 큐에서 삭제된다.

상기한 바와 같이, MCMP 프로토콜은 부하 배분, 사용자 인증, 암호화를 처리한다. 다른 모든 기능들은 하위 프로토콜에 의해 처리된다. MCMP 프로토콜은 4개의 하위 프로토콜을 가진다. 이들은 코드 모듈 교환 프로토콜(CMXP), 일방향 데이터 전송 및 수집 프로토콜 (UDSCP), 미터 전송 및 청구 프로토콜 (MDBP), 분산 처리 프로토콜 (DPP)이다. 이러한 프로토콜들은 MCMP 프로토콜의 기능을 추가하기 위하여 미래에 확장될 것이다.

MCMP 패킷 기본 구조

모든 MCMP 패킷들은 MCMP 헤더와 그에 옵션으로 후속되는 하나 이상의 자원 식별자, 그리고 패킷 몸체라고 하는 데이터 영역으로 구성된다 (도1). MCMP 패킷의 전체 크기는 128+RsrcIDLen+PacketSize로 산출된다. 여기에서 RsrcIDLen 과 PacketSize는 MCMP 헤더의 요소이다 (아래 참조).

MCMP 헤더는 패킷의 유형뿐만 아니라 패킷이 속한 하위 프로토콜을 식별할 수 있게 한다. 또한, MCMP 헤더는 부하 배분, 사용자 인증, 암호화 정보들을 포함한다. 자원 식별자는 모든 자원 또는 패킷에서 언급된 자원들을 식별한다 (ResourceReq 표지 설정). MCMP 패킷 몸체는 패킷 유형 명시 정보를 포함하며 항상 하위프로토콜 핸들에 의해 번역된다. 패킷 몸체는 옵션으로 선택가능하며 MCMP 헤더의 PacketSize 요소를 0으로 설정함으로써 생략할 수 있다.

MCMP 헤더 구조는 아래와 같이 정의된다.

MCMPHeader,128 $$MCMP 헤더 구조

. MPVersion,4 $$마스터 프로토콜 버전

. ProtoVendor,8 $$프로토콜 벤더

. ProtoID,8 $$프로토콜 ID

. ProtoVer,4 $$프로토콜 버전

. TransID,2 $$클라이언트 지정 트랜잭션-ID

. PacketType,2 $$프로토콜-지정 패킷 유형

. PacketVersion,4 $$패킷 버전 번호

. PacketSize,4 $$바이트로 표시된 패킷 몸체의 크기

. OrigIP,4 $$최초 호스트 IP 주소

. OrigPort,2 $$최초 호스트 포트 번호

. UserID,10 $$클라이언트 인증을 위한 사용자 ID

. Password,10- $$클라이언트 인증을 위한 암호

. RsrcIDLen,2 $$자원 식별자 길이

. RsrcID,2 $$자원 식별자수

. RsrcSrcIP,4 $$자원 소스 IP

. Flags,2 $$표지: 아래의 기능 참조

. ,64 $$예비(Reserved)

* 표지

Shunted = bit (Flags,1) $$패킷이 션트됨

Shuntable = bit (Flags,2) $$패킷 션트 가능함

Encrypted = bit (Flags,3) $$패킷이 암호화 패킷에 포함됨

ResourceReq = bit (Flags,4) $$패킷은 자원에 대한 요청을 가짐

이러한 구조의 요소들은 아래에 보다 상세히 설명된다.

MPVersion: 이것은 마스터 프로토콜에 대한 4-문자 버전 식별자이다. MCMP 헤더의 구조 또는 마스터 프로토콜 구조의 기타 주요 구성요소가 변경된 경우, 이 버전 번호는 증가한다.

ProtoVendor: 이것은 패킷이 속한 하위 프로토콜에 대한 하위 프로토콜 명세사항을 유지하는 소프트웨어 벤더의 이니셜을 나타내는 8-바이트의 텍스트 문자이다.

ProtoID: 이것은 ProtoVendor 요소에 명시된 소프트웨어 벤더에 의해 지정된 8-바이트의 텍스트 문자이다. 이것은 패킷이 속한 하위프로토콜을 식별한다. ProtoVendor 와 ProtoID를 같이 사용하면 하위 프로토콜 각각을 고유하게 구별할 수 있다.

ProtoVer: 이것은 ProtoVendor 와 ProtoID 요소에 명시된 하위 프로토콜의 버전을 지정하는 4-바이트 텍스트 열(string)이다. 처음 두 개의 문자는 메이저 버전이며, 다음 두 개의 문자는 마이너 버전이다. 모든 문자들이 사용되어야 한다. 즉, 메이저 버전이 1문자라면, 1이 아니라 01이라고 기입되어야 한다. 이 값은 소수점을 포함하지 않는다. 예를 들면, 버전 2.4는 0 2 4 0이 되어야 한다.

패킷-유형 식별자 (PacketType): 특정 하위 프로토콜내에서 패킷 유형을 식별하는 벤더에 의해 지정된 2-바이트 정수이다.

PacketVersion: 이것은 패킷 버전에 대한 4-문자 식별자이다. 패킷의 구조가 변경되면, 버전 번호가 증가한다. 이것은 패킷 구조가 변경되어야 하는 경우, MCMP 서버상에서 실행되는 하위 프로토콜 핸들러가 구, 신 패킷구조 모두를 처리할 수 있도록 한다. 스트링 포맷은 MCMP 헤더의 ProtoVer 요소의 포맷과 동일하다.

션트된 표지 (Shunted): 서비스 전송의 결과로서 패킷이 션트되었는지의 여부를 나타내는 표지.

션트가능 표지 (Shuntable): 패킷이 션트가능한지를 나타내는 표지. 이 표지와 Shunted flag은 상호 배타적이다.

암호화된 표지 (Encrypted): 패킷이 암호화되었는지를 나타내는 표지. 이 표지는 패킷이 암호화 시스템에 의해 MCMP 서버 입력 패킷 큐내에 위치하지 않은 경우 (이런 경우 표지가 설정된다), 그 큐내에 패킷이 위치할 때 클리어된다.

요청-자원 표지 (ResourceReq): 패킷이 자원에 대한 요청을 포함하는지를 나타낸다.

자원 식별자수 (RsrcIDs): MCMP 헤더 구조에 후속되는 자원 식별자의 수를 명시한다.

자원 식별자 길이 (RsrcIdLen): MCMP 헤더 구조에 후속되는 모든 자원 식별자의 연합 길이를 명시한다.

최초 호스트 주소 (OrigIP, OrigPort): 이것은 요청이 유래한 호스트의 IP 주소이다. 패킷이 션트된 경우, 이것은 요청을 전송한 서버의 주소가 아니라 최초로 요청을 전송한 호스트의 IP 주소이다.

자원 소스 IP (RsrcSourceIP): 이것은 요청-자원 표지가 참인 경우, 요청된 자원의 원본이 머무르는 호스트의 IP 주소이다.

캐시된 사본 날짜/시간 스탬프 (CacheDate, CacheTime): 이것은 캐시된 사본이 존재하지 않는 경우, 자원의 캐시 사본의 날짜, 시간 스탬프이다. 이 스탬프와 자원의 날짜와 시간 스탬프가 일치하는 경우, 자원 콘텐트는 귀환되지 않는다.

패킷 몸체 크기 (PacketSize): MCMP 헤더와 자원 식별자에 후속되는 패킷 몸체의 크기 (바이트로 표시됨).

클라이언트 인증을 위한 사용자 ID 와 암호 (UserID, Password): 클라이언트 인증에 사용되는 사용자 ID와 암호. 사용자 ID와 암호에 대한 권한은 자원 소스 IP 서버가 가진다. 암호-보호된 자원에 대한 요청이 제2서버에 수신되면, 제2서버는 암호 인증을 위해 제1 (또는 소스) 서버를 점검해야 한다. 이 정보는 세션중에 캐시된다.

트랜잭션 ID (TransID): 트랜잭션을 시작한 호스트에 의해 지정된 고유의 ID. 이것은 하나 이상의 서비스 전송을 통해 트랜잭션을 추적하기 위해 사용된다. 암호화된 패킷에 있어, 이것은 0으로 설정되어야 한다 (내장된 패킷에서 0이 아닌 값으로 설정될 수 있다).

MCMP 자원 식별자

패킷이 하나 이상의 자원을 언급하는 경우 (ResourceReq 표지 설정), 자원 식별자는 패킷이 언급하는 자원을 식별한다. 자원 식별자는 널(null)로 종료하는 텍스트열이다. 자원 식별자에 대한 기본 포맷은 아래와 같다.

-type:[locator/s;]length[;date[,time]]

여기에서,

type 유형을 식별한다. 이 독립변수에 대한 가능 값은 하위 프로 토콜을 명시한다.

locator/s 자원 위치배정에 사용되는 하나 이상의 값 (콤마(,)를 포함 한 경우 이중 따옴표로 표시됨; 값내에 사용된 경우 이중 따 옴표를 배가함)

length 판독할 자원의 량 (하위 프로토콜에 명시된 단위로 표시), 이것은 자원 식별자에서 항상 최종 항목이다. 자원의 초기에 서 n개의 단위를 명시하기 위해 "n" 포맷으로 표시된다. 단 위 범위(포괄적)를 명시하기 위해 "n/n" 포맷으로 표시되며, 시작 단위와 단위수를 명시하기 위해 "n/n" 포맷으로 표시 되며, 전체 자원을 명시하기 위해 "*"을 사용한다.

date 자원의 캐시 사본이 최종 수정된 mm/dd/yyyy 포맷의 날짜. 이 필드는 월, 일에 대한 단일 또는 이중 디지털수로 표시 되며, 연도는 4-문자열로 표시되어야 한다. "/"를 분리기로 서 사용된다.

Time 자원의 캐시 사본이 최종 수정된 hh:mm:ss 24시간 포맷으로 표시된 시간. hh는 단일 또는 이중 디지털수로 표시되며, mm과 ss는 이중 디지털수로 표시되어야 한다 (필요한 경우 0을 앞에 붙여서 사용한다).

자원 ID는 옵션으로 선택되며, ResourceReq 표지가 설정되지 않는 한 MCMP 패킷에 포함되지 않아도 된다.

Resource ID의 몇가지 예는 아래와 같다.

MCMP 패킷 유형

아래의 하위 프로토콜은 MCMP 프로토콜을 정의한다.

MCMP_Encrypt = h0002 $$암호화

MCMP_Status = h0003 $$상태 보고

MCMP_PerfStatReq = h0006 $$실행 통계 요청

MCMP_PerfStatResp = h0007 $$실행 통계 응답

MCMP_UserIReq = h0008 $$사용자 정보 요청

MCMP_UserIResp = h0009 $$사용자 정보 응답

MCMP_EchoReq = h000a $$에코 요청

MCMP_EchoResp = h000b $$에코 응답

이러한 패킷 유형은 아래에 상세히 설명된다.

ENCRYPTION (MCMP_Encrypt): 이 암호화 패킷은 데이터가 암호화되어야 하는 경우에 사용된다. 암호화될 패킷은 MCMP 시스템 암호화 패킷의 데이터 영역에 포함된다. 암호화 패킷을 위한 MCMP 헤더는 아래와 같다.

PacketType: MCMP_Encrypt (h0002)

PacketSize: 암호화 형태의 포함된 패킷의 크기 + 32 바이트

ResourceID's: None

Shuntable: 포함된 패킷으로부터 전송

ResourceReq: False

암호화된 패킷의 패킷 몸체는 아래와 같다.

Bytes 0-31 암호화 헤더

Bytes 32-end 암호화된 패킷

암호화 패킷에 대한 헤더는 아래와 같다.

PT_Encrypt_Header,32

. DecryptLess,8 $$해독을 처리하는 코드 모듈

. DecryptUnit,8

. EncodingMethod,2 $$부호화 방법

. ,14 $$예비

STATUS REPORT (MCMP_Status): 상태 보고 패킷은 작동 상태를 귀환하기 위해 사용한다. 이 패킷은 항상 이전에 전송된 요청의 응답으로서 사용된다. 상태 패킷은 에러 코드를 번역하지 못하는 경우 어플리케이션에 의해 디스플레이되는 에러 또는 상황값을 영어로 설명한 상세한 에러 정보를 포함한다.

상황 보고 패킷 몸체는 가변 길이를 가지는 하나 이상의 정보 필드로 구성된다. 제1 정보 필드는 항상 상황 보고 헤더이다. 각 정보 필드는 정보 필드의 길이와 유형을 표시하는 8-비트의 헤더와 그에 후속되는 필드자체로 구성된다.

상황 보고 패킷을 위한 MCMP 헤더는 아래와 같다.

PacketType: MCMP_Status(h002)

PacketSize: Variable

ResourceID's: None

Shuntable: No

ResourceReq: No

상황 보고 패킷에 대한 정보 필드는 아래와 같다.

MCMP_StRprt IFldHdr,8

. IfldSize,2 $$정보 필드 크기

. IfldClass,1 $$필드 클래스 (1=표준, 2=프로토콜 지정)

. IfldType,2 $$필드 유형

. ,3 $$예비

표준 정보 필드 유형은 아래와 같다. (IfldClass=1인 경우)

MSR_Header =1 $$헤더

MSR_ShortDesc- =2 $$짧은 설명

MSR_LongDesc- =3 $$긴 설명

MSR_DetailDesc =4 $$상세한 설명 (기술적으로)

MSR_XErr70 =102 $$LAS 7.0 실행 에러 데이터

MSR_XErr70do =103 $$LAS 7.0 실행 에러-do-stack

이러한 정보 필드 유형들에 대한 상세한 설명은 아래와 같다.

포괄적 상황 보고 헤더 (MSR_Header)는 항상 상황 보고 패킷내에 존재하며, 패킷에서 항상 제1 정보 필드이며, 아래의 구조를 가진다.

MSR Header_Struc,32

. ProtoVendor,8 $$에러를 보고하는 프로토콜의 벤더

. ProtoID,8 $$에러를 보고하는 프로토콜의 ID

. ProtoVer,4 $$에러를 보고하는 프로토콜의 버전

. Severity,1 $$에러의 정도:

. * -1 = 성공 통보

. * 0 = 경고(작동은 진행되나 문제발생)

. * 1 = 에러(작동이 진행되지 못함)

. * 2 = 예상하지 못한 에러

. ProtoSpecific,1 $$프로토콜 지정 에러 표지

. ErrorType,2 $$하위 프로토콜 지정 에러 유형

. ErrorCode,2 $$하위 프로토콜 지정 에러 코드

. ,6 $$예비

ProtoSpecific 표지가 설정된 경우, ErrorType 과 ErrorCode는 프로토콜을 지정한다. 그렇지 않은 경우, ErrorType은 아래의 유형중 하나이다.

ERRT_Zreturn = 1 $$

*zreturn*error

ERRT_XErr = 2 $$TenCORE 실행 에러

ERRT_CErr =3 $$TenCORE콘덴스(Condense)에러 ERRT_Dosdata = 4 $$Catharon 도스데이터-스타일에러

프로토콜을 지정한 MCMP_Status 패킷내의 모든 것에 대하여, 상황 보고 헤더로부터의 ProtoVendor와 ProtoID는 프로토콜을 명시하기 위하여 사용된다.

짧은 설명 정보 필드 유형 (MSR_ShortDesc)는 에러에 대한 짧은 설명이며, 40문자 내외이며, 목록에서 또는 간단하고 친숙한 에러 설명이 필요한 경우에 사용된다. 이 패킷은 40바이트의 길이를 가지며, 아래의 구조를 가진다.

MSR_ShortDesc strtlc,40

ShortErrDesc,40 $$에러의 짧은 설명

긴 설명 정보 필드 유형 (MSR_LongDesc)는 에러에 대한 긴 설명이며, 2048 문자까지 길이를 가변시킬 수 있다. 이 설명은 복수의 라인들로 구성되며, 각 라인은 캐리지 리턴(carriage return, h0d)으로 종료된다. 이 설명의 길이는 정보 필드의 길이에 의해 결정되며, 정보 필드의 전체 내용은 텍스트와 같은 설명을 포함한 긴 버퍼 변수이다. 라인의 최대 길이에 대한 제한은 없으며, 라인들은 이 설명이 디스플레이될 때 어느 위치에서든지 워드랩(word-wrapped)된다.

상세 설명 정보 필드 유형 (MSR_DetailDesc)은 에러의 상세한 기술적 설명이며 에러에 대한 진단 정보를 포함한다. 예를 들면, 이것은 표준 TenCORE 실행 에러로서 catharon.err 로그 파일에 Catharon 에러 핸들러에 의해 기입된다. 이것은 4096문자까지의 가변 길이를 가진다. 설명은 복수의 라인들로 구성되며, 각 라인은 캐리지 리턴으로 종료된다. 라인들은 80문자이상의 길이를 가질 수 없다. 80문자 이상의 라인들은 디스플레이시에 생략(truncated)된다. 이 설명은 워드랩되지 않으며, 고정된 피치 폰트로 항상 디스플레이되며, 별도 라인상의 항목들이 정렬되고 공간을 사용하여 포맷팅되도록 한다. (테이블은 이 방법으로 생성된다) 이 설명의 길이는 정보 필드 길이에 의해 결정되며, 정보 필드의 전체 내용은 설명을 텍스트로서 포함하는 긴 버퍼 변수이다.

TenCORE 7.0 실행 에러 데이터 (MSR_XErr70)는 TenCORE 실행 에러에 의해 생성되고 실행 에러 메모리 블록의 TenCORE에 의해 귀환된 데이터의 정확한 스냅셧(snapshot)이며, 256바이트의 길이를 가진다. 이 정보 필드 유형은 보고된 에러가 TenCORE 실행 에러인 경우에만 포함된다.

TenCORE 7.0 실행 에러-스택 (MSR_XErr70do)은 TenCORE 실행 에러-두(do)-스택의 정확한 스냅셧이다. 데이터 크기는 에러시 TenCORE-두(do)-스택의 크기에 따라 달라진다.

실행 통계 요청 (MCMP_PerfStatReq): 실행 통계 요청 패킷은 서버의 현재 실행과 로드 통계를 요청한다.

실행 통계 요청의 MCMP 헤더는 아래와 같다.

PacketType: MCMP_PerfStatReq (h0005)

PacketSize: 0

ResourceID's: None

Shuntable: No (요청이 전송된 서버에 대한 통계를 요청 하는 것이므로 패킷을 션트하는 것은 의미가 없다)

이 패킷에 대한 응답은 MCMP_PerfStatResp 또는 MCMP_Status 패킷이다.

실행 통계 보고 (MCMP_PerfStatResp): 이 패킷은 MCMP_PerfStatReq 패킷에 대한 응답이며, 요청이 전송된 서버에 대한 실행 통계 보고를 포함한다.

실행 통계는 MCMP 헤더는 아래와 같다.

PacketType: MCMP_PerfStatReq (h0006)

PacketSize: 32

ResourceID's: None

Shuntable; No

ResourceReq: No

실행 통계 보고의 패킷 몸체는 아래와 같다.

PerfStats,32

. Pusage,1 $$프로세서 사용(퍼센트)

. CurReqs,2 $$현재 처리되는 요청수

. TotalRegs,2 $$처리가능한 요청의 총(total)수

. ShuntRegs,2 $$션팅이 시작되는 요청에서의 임계

. PmemTotal,4 $$시스템상의 총 물리적 메모리

. PmemUsed,4 $$시스템상의 사용된 메모리

. VmemTotal,4 $$시스템상의 총 가상(virtual) 메모리

. VmemUsed,4 $$시스템상의 사용된 가상 메모리

. AreqPMethod,1 $$추가 요청을 처리하는 현재의 방법

. ,8 $$예비

패킷 몸체 구조의 요소들은 아래와 같다.

PUsage: 현재 프로세서 사용 퍼센트(0% - 100%). 프로세서 사용 퍼센트 사용이 불가능하면 -1로 설정한다.

CurReqs: 현재 처리중인 요청의 대략적인 수

TotalReqs: 일시에 처리될 수 있는 총 요청의 수

ShuntReqs: 션팅 발생전의 요청 최대수. 이것은 일반적으로 션팅 요청의 목적을 이루도록 일부 여분 시스템 자원을 허용하기 위하여 TotalReqs보다 작다.

PmemTotal: 서버상의 물리적 메모리의 비트수이며, 량을 알 수 없는 경우에는 -1이다.

PmemUsed: 사용되어온 물리적 메모리의 비트수이며, 량을 알 수 없는 경우에는 -1이다.

VmemTotal: 서버상에 가용한 가상 메모리의 바이트수이며, 량을 알 수 없는 경우에는 -1이다.

VmemUsed: 사용중인 가상 메모리의 바이트수이며, 량을 알 수 없는 경우에는 -1이다.

AreqPMethod: 패킷내의 기타 통계를 근거로, 새로운 입력 요청을 처리하는 서버에 의해 사용되는 방법이다. 이것은 값 1, 2 또는 3을 가질 수 있다. 1은 새로운 요청이 정상적으로 처리될 것임을 표시하며, 2는 새로운 요청이 션트될 것임을 표시하며, 3은 새로운 요청이 거절될 것임을 표시한다.

사용자 인증 정보 요청(MCMP_UserIReq): 이 패킷은 특정 사용자의 사용자 인증 정보를 요청한다. 이패킷은 암호화되어야 하며, 제2서버로부터 제1서버로만 전송된다. 수신 서버는 이 요청에 대응하기 전에 전송 서버가 제2서버로서 목록화되어 있는지를 점검해야 한다.

예상된 응답은 MCMP_Status 패킷 또는 MCMP_UserIResp 패킷이다.

이 패킷은 아래와 같이 정의된 특별한 유형의 자원 식별자를 사용한다.

type:user[,uadbitem];length[;date,time]

여기에서,

type 자원 유형을 식별하면 항상 "useradb"이다.

user 사용자의 명칭이다.

uadbitem 검색할 사용자 인증 데이터베이스 항목의 경로(path)이며, 이것이 생략되면, 특정 사용자에 대한 전체 사용자 인증 데이터 트리를 트리-파일이 포함한 것으로 간주한다. 이렇게 간주된 트리-파일의 루트(root)는 사용자 데이터베이스 파일의 \LocalUsers\username과 동일하다.

예:

useradb:JohnS.\Catharon\RAdmin\Rights:*:03/13/1995,12:20:48

useradb:HugoC;*

useradb:JDouglas,\XYZWidSt\WDBP\

GroupMembership;256;S/12/1996,01:30:30

사용자 인증 데이터베이스(UADB)는 트리-파일에 저장된다. 사용자 정보는 \LocalUsers에 저장된다. \LocalUsers 폴더내에는 사용자의 ID에 근거한 각 사용자를 위한 폴더들이 있다. 각 사용자의 폴더내에는 각 벤더들(Catharon, CTC등)을 위한 폴더들이 있으며, 벤더 폴더내에는 그 벤더에 의해 정의된 각 프로토콜을 위한 폴더가 있다. 프로토콜 폴더의 콘텐트는 프로토콜을 지정한다. 자원 ID에 명시된 경로는 \LocalUsers\username의 루트를 가진다.

기본적인 사용자 인증 정보는 \Catharon\MCMP\BaseAuthData에 저장되며 아래의 구조를 가진다.

UserAuthData,32

. UserID,10 $$ 사용자이름/ID

. UserPass,10 $$ 사용자 암호

. ExpTime,3 $$ 데이터 만료전의 초단위의 시간(10내지 864000)

. BinUID,4 $$ 바이너리 사용자 ID

. ,5 $$ 예비

제2서버가 아래의 형태를 가진 요청을 전송하면,

useradb:usez,2ame;*[;date,time]

사용자 인증 트리 전체가 특정 사용자를 위해 검색된다. 사용자 인증 트리로부터 특정 항목을 판독하는 기능이 향후 사용 및 확장을 위해 제공된다.

사용자 인증 데이터를 검색한 후, UserAuthData 구조의 ExpTime 요소에 명시된 시간동안 데이터가 캐시된다. 사용자 인증 데이터는 명시된 시간 이상으로 캐시될 수는 없다.

사용자 인증 정보 요청의 MCMP 헤더는 아래와 같다.

PacketType: MCMP_UserIReq (h0008)

PacketSize: 0

ResourceID's: 1; 검색할 정보에 대한 정보를 사용자가 검색하도록 명시

Shuntable: No (제1서버는 사용자 정보의 유일한 정식 소스이므로 제1서버에 의해 처리되어야 함)

ResourceReq: Yes

사용자 인증 정보 응답 (MCMP_UserIResp): MCMP_UserIReq 패킷에 대한 응답으로서, 이 패킷은 데이터 영역내에 요청된 정보를 포함한다. 이 데이터는 사용자 데이터베이스의 요청된 데이터 블록으로부터 판독된 원시(raw) 데이터, 또는 (uadbitem이 생략된 경우) UADB에서 \LocalUsers\username과 동일한 파일 루트를 가진 특정 사용자에 대한 전체 사용자 정보 트리를 포함한 트리 파일이다.

사용자 인증 정보 응답의 MCMP 헤더는 아래와 같다.

Packet Type; MCMP_UserIResp (h0009)

Packet Size: 가변적

ResourceID's: None

Shuntable: No

ResourceReq: No

에코 요청 (MCMP_EchoReq ): 이 패킷은 특정 MCMP 호스트에의 연결 시간을 측정하기 위해 사용한다. 이 패킷이 MCMP 호스트에 의해 수신되는 경우, MCMP_EchoResp 패킷은 즉시 반송된다. 이 데이터 영역은 최대 2048바이트까지 모든 데이터를 포함한다. 귀환 패킷 데이터 영역은 동일한 데이터를 포함한다.

에코 요청의 MCMP 헤더는 아래와 같다.

PacketType: MCMP_EchoReq (h000a)

PacketSize: Any

ResourceID's: None

Shuntable: No

ResourceReq: No

에코 응답 (MCMP_EchoResp): 이 패킷은 MCMP_EachoReq 패킷에 대한 응답으로서 전송된다.

에코 응답의 MCMP 헤더는 아래와 같다.

PacketType: MCMP_EchoResp (h000b)

PacketSize: 원래의 MCMP_EchoReq 패킷과 동일

ResourceID's: None

Shuntable: No

ResourceReq; No

디렉토리내의 일부 파일들은 추가 접근 허용 정보를 지원한다. 예를 들면, 트리 파일은 트리 파일내의 개별 단위에 대한 접근 허용에 대한 정보를 포함한다.

CMXP 자원 식별자

CMXP 패킷에 대한 자원 식별자는 아래와 같이 정의된다.

type:patht,file[,unit]];length[;date,time]

여기에서,

type 자원 유형을 식별한다. 이것은 특정 자원으로부터 데이터를 판독하 도록 "Data", 또는 포함된 자원의 디렉토리를 판독하도록 "Dir"이다.

path 디렉토리로의 경로로서 최소한 역슬래쉬 "\"이다. 파일 및 단위가 명시되지 않으면, 디렉토리는 판독될 소스로서 간주된다; 그렇지 않은 경우, 언급된 파일 또는 단위는 특정 디렉토리내에 위치한 것으로 간주된다. 파일 및 단위가 지정되지 않으면, 유형은 "Dir"이다.

file 파일명. 단위가 지정되지 않으면, 파일은 자원으로 간주된다; 그렇지 않은 경우, 단위는 명시된 파일내에 위치하는 것으로 간주된다. 파일 자원은 "Dir" 과 "Data" 자원 유형으로 접근할 수 있다. "Dir"는 포함된 단위 목록을 가리키며, "Data"는 파일내에 포함된 실제 데이터를 가리킨다.

unit 단위명. 단위가 지정되면, 자원으로 간주된다. 이것은 "Dir" 과 "Data" 자원 유형으로 접근할 수 있다; "Dir"은 하위-단위 목록을 가리키며 "Data"는 단위내에 포함된 데이터를 접근한다.

length 자원의 판독할부분. type이 "Data"이면, 이 값은 바이트로 표시된다. type이 "Dir"이면, 이 값은 디렉토리 엔트리에 있다.

date/time 요청된 패킷에서만 명시될 수 있다. date/time이 명시된 후 자원이 수정되지 않으면 수신 과정에서 요청을 무시하도록 한다. 이것은 자원이 클라이언트상에 캐시된 후 변경된 경우에만 자원이 전송될 것을 요청하도록 CMXP_ReadReq 패킷과 함께 사용된다.

CMXP 패킷 유형

아래는 CMXP 프로토콜에 의해 사용된 패킷 유형 목록이다. CMXP 프로토콜의 기능은 이 패킷 유형 목록에 추가됨으로써 확장될 수 있다.

CMXP_ReadRsrcReq = h0002

CMXP_ReadRsrcResp = h0003

CMXP_WriteRsrc = h0004

CMXP_CreateRsrc = h0005

CMXP_DestroyRsrc = h0006

CMXP_RenameRsrc = h0007

CMXP_CopyRsrc = h0008

CMXP_MoveRsrc = h0009

CMXP_AltSListReq = h000a

CMXP_AltSListResp = h000b

이러한 패킷의 유형은 아래에 상세히 설명된다.

판독 자원 요청 (CmxP_ReadRsrcReq): 이 패킷은 하나 이상의 자원을 판독하는 요청이다. 이것은 자원을 다운로드하기 위해 클라이언트로부터 서버로 전송되거나, 플러그인 모듈에 대한 코드 모듈을 요청하기 위해 클라이언트로부터 클라이언트로 전송되거나, 클라이언트 요청을 처리하기에 적절한 자원의 전송을 요청하기 위해 서버로부터 서버로 전송된다. CMXP_ReadRsrcReq 패킷은 자원 콘텐트 또는 자원 정보, 또는 양쪽 모두를 요청할 수 있다. 자원의 정의에서 파일 디렉토리와 코드 모듈 디렉토리를 포함하므로, 이 패킷은 디렉토리내의 파일 목록 또는 파일내의 코드 모듈을 요청하기 위해 사용된다.

이 패킷은 일련의 패킷(요청 자원 각각에 하나씩)으로 응답된다 이러한 패킷들은 CMXP_ReadRsrcResp (자원이 성공적으로 판독되는 경우) 또는 MCMP_Status (자원 판독 에러가 있는 경우)이다.

판독된 자원 요청 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_ReadRsrcReq (honey)

PacketSize: 32

ResourceID's: 판독할 하나 이상의 자원 식별

Shuntable; Yes

ResourceReq: Yes

판독된 자원 요청 패킷의 패킷 몸체는 아래와 같다.

ReadRsrcReqHeader,32

. RHFlags,2 $$표지

. ,30 $$예비

* 표지:

IncludeInfo = bit(RHFlags,1) $$ 자원 정보 포함

IncludeData = bit(RHFlags,2) $$ 자원 콘텐트 포함

IdlePreCache = bit(RHFlags,3) $$ 요청은 유휴기간 사전-캐 시 작동의 결과이다.

패킷 몸체의 요소는 아래와 같이 상세히 설명될 수 있다.

IncludeInfo: 이 표지가 설정되면 자원에 대한 정보가 귀환된다.

IncludeData: 이 표지가 설정되면 자원 콘텐트가 귀환된다.

IdlePreCache: 이 표지가 설정되면 요청이 사용자의 개입없이 클라이언트에 의해 시작된 유휴기간 사전-캐시 작동의 결과라는 것을 나타낸다. CMXP 서버는 이 표지가 설정된 패킷이 처리되기 전에 이 표지를 가진 패킷을 클리어한다. CMXP 서버상의 부하가 과도해져서 모든 요청을 처리할 수 없는 경우, 또한 요청을 션트할 수 없는 경우, 이 표지가 설정된 요청은 이 표지를 가진 요청이 클리어되기 전에 삭제된다.

IncludeInfor 와 includeData는 모두 동일한 요청내에 설정된다. 이런 경우, 응답은 자원 콘텐트가 후속되는 자원 정보이다. 이것은 가장 흔한 요청 유형이다. 이러한 표지들의 최소한 하나는 각 요청 패킷내에 설정되어야 한다.

판독 자원 응답 (CMXP_ReadRsrcResp): CMXP_ReadRsrcReq 패킷에 대한 응답으로서 전송되며, 이 패킷은 요청된 정보를 포함한다. 이 패킷은 에러 조건이 존재하는 경우 CMXP_ReadRsrcReq에 대응하여 전송된 것이 아니며, 이런 경우 MCMP_Status 패킷이 전송된다.

CMXP_ReadRsrcReq 패킷의 IncludeInfo 와 IncludeData 표지의 상태에 따라, 패킷 몸체는 자원 정보 그리고/또는 자원 콘텐트를 포함한다. 자원 정보가 존재하는 경우, 자원 정보는 패킷 몸체에서 가장 앞에 나타나며, 자원 콘텐트(만약 존재한다면)가 후속된다. 자원 정보의 크기는 프로그램 버전의 ResourceInforSize 요소를 판독하여 결정되며 프로그램의 구버전의 코드 모듈과 성공적으로 병합된다.

RsMaxSubs: 자원이 포함하는 최대 부속 항목수

RsSizeAInfo: 자원에 대한 연관된 정보(RsAInfo)의 크기 (1에서 8까지의 바이트로 표시됨)

RsSizeSubName: 자원의 부속 항목을 문자로 표시한 최대 길이

RsHeight, RsWidth: 디폴트 측정된 자원의 경계 사각형의 높이와 넓이. 이것은 객체에 기초한 도면, 이미지등을 위해 사용된다.

RsPTime: 디폴트로 설정된 속도로 자원이 재생(play)된 시간을 초로 나타낸다. 비디오 클립, 웨이브 파일, 미디 파일, 애니메이션 등.

쓰기 자원 (CMXP_WriterSrc): 이 패킷은 특정 자원상에 데이터를 기입한다. 이것은 션트될 수 없는 제1서버로의 패킷 전송을 요구하므로, 서버 로드(load)를 증가시킨다. 형식 전송 및 기타 일방향 전송에 있어서, CMXP 프로토콜의 쓰기 기능보다 UDSCP 프로토콜이 추천된다.

CMXP_WriteRsrc 요청은 사용자가 특정 자원을 기입하도록 허용하지 않음으로써 실패할 수 있다. 이 상황은 사용자ID와 정해진 암호를 가진 요청을 반복함으로써 교정될 수 있다 (이런 경우 요청은 MCMP_Encrypt 패킷에 포함되어야 한다).

사용자 인증이 실패하여 접근이 금지된 경우 귀환된 상황 코드는 두 가지가 있다. 하나는 사용자 이름과 암호를 클라이언트가 입력하도록 하는 것이다. 이것은 클라이언트에게 사용자 이름과 암호를 통하여 자원에 접근할 수 있다는 힌트를 줄 수 있다. 이것은 결정적이지는 않다. 즉, 접근 금지(Access Denied) 코드상의 변화들이 누구에게나 접근이 실제로 가능함을 나타내는 것은 아니며, 단지 클라이언트가 질문을 할 것인지의 여부만을 나타낼 뿐이다. 예를 들면, 사용자 제어가 아니라 프로그램 제어하에 접근이 가능한 자원이 있다면, 이 제어는 "자동화 사용자 (automation user)"의 사용자 인증을 요구하는 것이며, 잔여 기간중에는 사용자ID/ 암호를 요구하지 않고도 접근을 거절하는 것이다.

패킷 몸체는 자원에 기입될 데이터를 포함한다.

쓰기 자원 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_WriteRsrc (h0004)

PacketSize: 가변적

ResourceID's: 1; 기입할 자원의 ID

Shuntable; No

ResourceReq: Yes

생성 자원 (CMXP_CreateRsrc): 이 패킷은 명시된 자원에서 부속 항목을 생성한다. 이것은 파일, 디렉토리, 단위들을 포함한다. 사용자 인증에 관하여 CMXP_WriteRsrc 패킷에 적용된 동일한 규칙이 이 패킷에도 적용된다.

생성 자원 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_CreateRsrc (h0005)

PacketSize: 가변적

ResourceID's: 1; 새로운 부속항목을 생성할 자원의 ID

Shuntable; No

ResourceReq: Yes

생성 자원 패킷의 패킷 몸체는 아래와 같다.

NewRsrc,300

. RsSize,4 $$ 바이트로 표시된 자원의 크기

. RsAInfo,8 $$ 연관된 정보 (적용 가능한 경우)

. RsMaxSubs,2 $$ 부속항목의 최대수

. RsSizeAInfo,1 $$ 바이트로 표시된 연관 정보의 크기

. RsSizeSubName,2 $$ 부속항목의 최대 길이

. RsName,256 $$ 자원 명칭

. RsName2,8 $$ 제2 자원 명칭

. RsType,8 $$ 자원 유형

. ,11 $$ 예비

패킷 몸체의 요소를 상세히 설명하면 아래와 같다.

Resize: 바이트로 표시된 새로운 자원의 크기. TenCORE 네임세트(nameset) 또는 데이터 세트를 생성하는 경우, 이것은 256바이트의 배수가 되어야 하며, -createn- 명령어에 256을 곱한 (기록을 바이트로 변환하기 위해) records 독립변수와 등가이다. 새로운 디렉토리를 생성할 때, 이것은 무시된다.

R-Ainfo: 적용가능한 경우, 자원에 대한 연관 정보 (상기 CMXP_CreateRsrc 참조)

RsMaxSubs: 적용가능한 경우, 자원에 허용된 부속 항목수. 이것은 TenCORE 네임세트를 위해 요구되며, -createn- 명령어의 names 독립변수와 등가이다. TenCORE 네임세트를 처리하지 않는 대부분의 경우에 이것은 무시된다.

R-SizeAInfo: 자원의 연관된 정보 크기. 네임 세트에 있어서, 이것은 -createn- 명령어의 infolength 독립변수와 등가이다.

RsSizeSubName: 부속 항목명의 최대 길이. TenCORE 네임세트에 있어, 이것은 -createn- 명령어의 namelength 독립변수와 등가이다. TenCORE 네임세트를 처리하지 않는 대부분의 경우에 이것은 무시된다.

RsName: 생성할 자원의 명칭. 이 명칭의 길이와 허용된 문자에 대한 규칙은 생성되는 자원의 유형에 따라 달라진다.

RsName2: 자원의 제2 명칭. 이것은 현재에는 사용되지 않으나, 향후 목적을 위해 제공된다. 예를 들면, 윈도우즈 95/NT에서 긴 파일명과 함께 쓰이는 짧은 파일명(별명)을 지정하기 위해 사용된다.

RsType: 생성되는 자원의 유형을 명시한다. 자원 유형들은 생성되는 모든 자원들에 대해 반드시 유효할 필요는 없다. 특정 포함 자원에 대해 하나의 자원 유형만이 가능한 경우, '디폴트"값이 사용된다 (예를 들면, TenCORE 네임세트내에 생성될 수 있는 유일한 자원 유형은 블록이다) 이 값은 8-바이트 텍스트 문자이다.

CMXP 프로토콜에 대해 현재 정의된 자원 유형들은 아래와 같다.

course 코스 파일 (.CRS 확장자를 가진 TenCORE 네임 세트)

group 그룹 파일 (.GRP 확장자를 가진 TenCORE 네임 세트)

nameset 범용 네임세트 파일 (.NAM 확장자를 가진 TenCORE 네 임세트)

roster 로스터 파일 (.RTR 확장자를 가진 TenCORE 네임세트)

source 소스 파일 (.SRC 확장자를 가진 TenCORE 네임세트)

studata 학생데이터 파일(.SDF 확장자를 가진 TenCORE 네임세트)

tpr 프로듀서 파일 (.TPR 확장자를 가진 TenCORE 네임세트)

binary 바이너리 파일 (.BIN 확장자를 가진 TenCORE 네임세트)

file 운영 시스템 파일

dir 운영 시스템 폴더 또는 디렉토리

dataset TenCORE 데이터세트

tree Catharon 트리-파일

default 포함자(container)에 대한 디폴트 유형

block 데이터 블록 (네임세트 또는 트리-파일에 있는)

folder 폴더 (타임-파일에 있는)

파괴 자원 (CMXP_DestroyRsrc): 이 패킷은 특정 자원을 파괴한다. 사용자 인증에 관하여 CMXP_WriteRsrc 패킷에 적용된 동일한 규칙이 이 패킷에도 적용된다. 이 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_DestroyRsrc (h0006)

PacketSize: 0

ResourceID's: 1: 파괴할 자원의 ID

Shuntable: No

ResourceReq: Yes

개명(RENAME) 자원 (CMXP_RenameRsrc): 이 패킷은 지정된 자원을 개명한다. 사용자 인증에 관하여 CMXP_WriteRsrc 패킷에 적용된 동일한 규칙이 이 패킷에도 적용된다. 패킷 몸체는 자원에 대한 새로운 명칭을 포함한다. 이 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_RenameRsrc (h0007)

PacketSize: 272

ResourceID's: 1: 개명할 자원의 ID

Shuntable: No

ResourceReq: Yes

개명 자원 패킷의 패킷 몸체는 아래와 같다.

RenameRsrc,272

. ResourceName,256 $$ 자원에 대한 새로운 명칭

. ResourceSecondaryName,8 $$ 자원에 대한 제2 명칭(적용 가능하다면)

. ,9 $$ 예비

복사 자원 (CMXP_CopyRsrc): 이 패킷은 지정된 자원을 복사한다. 사용자 인증에 관하여 CMXP_WriteRsrc 패킷에 적용된 동일한 규칙이 이 패킷에도 적용된다. 이 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_CopyRsrc (h0008)

PacketSize: 0

ResourceID's: 2: 첫 번째는 복사할 자원의 위치이며, 두 번째는 자 원의 새로운 사본을 생성할 위치이다.

Shuntable: No

ResourceReq: Yes

이동 자원 (CMXP_MoveRsrc): 이 패킷은 지정된 자원을 이동한다. 사용자 인증에 관하여 CMXP_WriteRsrc 패킷에 적용된 동일한 규칙이 이 패킷에도 적용된다. 이 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_MoveRsrc (h0009)

PacketSize: 0

ResourceID's: 2: 첫 번째는 자원의 구 위치이며, 두 번째는 자 원의 새로운 위치이다.

Shuntable: No

ResourceReq: Yes

교류(ALTERNATE) 서버 목록 요청 (CMXP_AltSListReq): 이 패킷은 지정된 자원에 사용가능한 제2서버들의 목록을 요청한다. 이 서버는 MCMP_Status 패킷이 귀환되는 에러 발생의 경우를 제외하고는 CMXP_AltSListResp 패킷과 대응하여야 한다. 이 패킷의 MCMP 헤더는 아래와 같다.

PacketType: CMXP_AltSUstReq (h000a)

PacketSize: 0

ResourceID's: 1: 제2서버 목록화가 요구되는 자원

Shuntable: Yes

ResourceReq: Yes

교류 서버 목록 응답 (CMXP_AltSListResp): 이 패킷은 CMXP_AltSListReq 패킷에 대응하여 전송되며 교류 서버 목록을 포함한다. MCMP 헤더는 아래와 같다.

PacketType: CMXP_AltSUstResp (h000b)

PacketSize: 가변적

ResourceID's: None

Shuntable: No

ResourceReq: No

CMXP_AltSListResp 패킷의 패킷 몸체는 아래와 같다.

AltSList(nn),16

. IP,4 $$ 서버의 IP 주소

. Port,2 $$ 접근할 서버상의 포트

. Load,1 $$ 서버상의 최종 통보된 로드(load)

. Ping,4 $$ 서버에 최종 통보된 신호음(ping)-시간

. ,4 $$ 예비

UDSCP 패킷 유형 (UDSCP Packet Types)

아래의 목록은 UDSCP 프로토콜에 의해 사용되는 패킷 유형들이다. UDSCP 프로토콜의 기능은 아래의 패킷 유형 목록에 추가됨으로 향후 확장된다.

UDSCP_Submission =h0002

UDSCP_QueueStatusReq =h0003

UDSCP_QueueStatusResp =h0004

이러한 패킷 유형들은 아래에 상세히 설명된다.

데이터 전송 (UDSCP_Submission): 이것은 UDSCP 프로토콜에 대한 제1 패킷 유형이다. 이것은 클라이언트에 의해 생성되며, 수집점에 도착할 때까지 서버에서 서버로 전송된다. 이 패킷 몸체는 UDSCOP 헤더와 그에 후속되는 전송 내용으로 구성된다.

데이터 전송 패킷의 MCMP 헤더는 아래와 같다.

PacketType: UDSCP_Submission (h0002)

PacketSize: 32 + 전송되는 데이터 크기

ResourceID's: None

Shuntable: Yes

ResourceReq: No

UDSCP 헤더는 아래와 같다.

UDSCPSubmitHeader,32

. HeaderSize,2 $$UDSCPSubmitHeader의 크기

. DataSize,4 $$전송되는 데이터 크기

. Cmethod,1 $$수집 방법 (1=중앙, 2=제2방법)

. CpointIP,4 $$수집점 IP 주소

. Priority,1 $$우선순위 (0=하위, 1=중간, 2=상위)

. Lesson,8 $$전송을 처리할 TenCORE 과(lesson)/단위

. Unit,8

. Flags,2 $$표지

. ,2

* 표지

Forwarded = bit(Flags,1) $$ 서버에 의해 전송됨

UDSCP 헤더 요소는 아래에 상세히 설명된다.

HeaderSize: UDSCPSubmitHeader 바이트로 표시한 구조의 크기. 이 값은 전체 구조의 크기를 결정하기 위해 판독되며, 향후 기존 코드에 영향을 주지 않고 전체 구조를 확장되도록 한다.

DataSize: 바이트로 표시한 UDSCP 헤더와 그에 후속되는 전송 내용의 크기.

Cmethod:사용될 수집 방법으로서 정수값이다. 1로 설정하면, 중앙 서버에서 데이터가 수집되고 처리되며, 2로 설정하면 제2서버에서 데이터가 처리된다.

CpointIP: 수집점(중앙서버)의 IP 주소. 이것은 CMethod=2이면 무시된다. 우선순위; 전송의 우선순위로서 정수값이다. 하위는 0으로, 중간은 1로, 상위는 2로 표시된다. UDSCP 서버는 상위 우선순위 전송을 즉시 처리하고, 중간과 하위 우선순위 전송은 UDSCP 전송큐에 보류되어 서버가 한가할 때 처리된다. 중간 또는 하위 우선순위는 사용자 배열 시간 제한을 초과하여 UDSCP 큐내에 잔류하는 경우, 서버는 로드에 상관없이 즉시 처리를 시도하며, 실패하는 경우 관련자에게 통지한다. 하위 및 중간 우선순위를 가진 전송에 대한 시간 제한은 별도로 배열할 수 있으며, 하위 우선순위를 가진 전송은 좀더 긴 시간 제한을 갖도록 배열된다.

Lesson,Unit: 전송을 처리할 TenCore 과 및 단위의 명칭

Forwarded: 이 표지는 UDSCP서버에 의해 전송이 실행된 경우 설정되거나, 전송을 처리하는 제1 UDSCP 서버인 경우 (즉, 전송이 클라이언트로부터 수신된 경우) 클리어된다.

큐 상태 요청 (UDSCP_QueueStatusReq): 이 패킷은 UDSCP 큐 상태를 요청한다. 예상되는 응답은 MCMP_Status 패킷 또는 UDSCP QueueStatusResp 패킷이다.

큐 상태 요청 패킷의 MCMP 헤더는 아래와 같다.

PacketType: UDSCP_Queue Status Req (h0003)

PacketSize: 0

ResourceID's: None

Shuntable: No

ResourceReq: No

큐 상태 응답 (UDSCP:QueueStatusResp): 이 패킷은 UDSCP_QueueStatusReq 패킷에 대한 응답이다. 이것은 UDSCP 서버의 현태 UDSCP 큐상태에 대한 정보를 포함한다. MCMP 헤더는 아래와 같다.

PacketType: UDSCP_Queue Status Resp (h0004)

PacketSize: 0

ResourceID's: None

Shuntable: No

ResourceReq: No

상태 응답 패킷의 패킷 몸체는 아래와 같다.

QueueStatus,64

. Entries,4 $$큐내의 총 엔트리수

. LowEntAge,4 $$초단위로 표시된 큐내의 최신 엔트리의 경 과시간

. HighEntAge,4 $$큐내의 가장 오래된 엔트리의 경과시간

. AvgEntAge,4 $$ 평균 큐 엔트리의 경과시간

. HighPriEnt,4 $$ 큐내의 상위 우선순위 엔트리의 수

. LowPriEnt,4 $$ 큐내의 하위 우선순위 엔트리의 수

. FwdEnt,4 $$ 전송된 엔트리의 수

. ToFwdEnt,4 $$ 전송되어야 할 엔트리의 수

. ,32 $$ 예비

미터 전송 및 청구 프로토콜 (MDBP)은 지불에 대한 크레디트 전송과 구매후의 로얄티(royalty) 정보 수집을 포함한 지불 내용에 대한 접근을 제어한다.

MDBP 패킷 유형

MDBP 프로토콜은 CMXP 프로토콜과 밀접히 연관되어 작동한다. CMXP 프로토콜은 암호화된 형식으로 내용을 전송하기 위해 사용된다. 그런 다음, 내용은 클라이언트 기기상의 MDBP 라이브러리에 의해 잠금 해제되면 암호 해독된다. 내용은 로컬 기기상의 크레디트를 지불할 때에 잠금해제된다. 크레디트는 MDBP 프로토콜을 통해 보충된다.

로컬 기기상에서 크레디트가 보충될 때, 로얄티 정보는 크레디트 서버에 보고되며, 크레디트 서버는 이익을 적절히 배분한다.

표준 크레디트-구입 트랜잭션에서, 3개의 패킷들이 교환된다.

. MDBP_CreditReq는 클라이언트로부터 서버로 전송된다.

. 서버는 MDBP_CreditTransfer로 응답한다.

. 클라이언트는 서버에 MDBP_PurchaseReport를 전송한다.

사용자에 의해 크레디트가 구매되기 전에, 사용자는 크레디트 서버에 등록되어야 한다.

이때 MDMP 프로토콜에 의해 사용되는 패킷 유형의 목록은 아래와 같다.

MDBP 프로토콜의 기능은 아래의 목록에 추가됨으로써 향후에 그 기능을 확장할 수 있다.

MDBP_CreditReq =2 $$추가 크레디트 요청

MDBP_CreditTransfer =3 $$MDBP_CreditReq에 대한 응답

MDBP_RegisterUser =4 $$사용자 등록

MDBP_RegisterUserResp =5 $$MDBP_RegisterUser에 대한 응답

MDBP_WriteUserData =6 $$사용자 데이터 쓰기

MDBP_ReadUserData =7 $$사용자 데이터 읽기

MDBP_ReadUserDataResp =8 $$MDBP_ReadUserData에 대한 응답

MDBP_PurchaseReport =9 $$구매/로얄티 보고

MDBP 패킷 유형들에 대한 상세한 설명은 아래와 같다.

추가 크레디트에 대한 요청 (MDBP_CreditReq): 이 패킷은 서버로부터의 추가 크레디트를 요청한다. 이 패킷 몸체는 구매할 크레디트량뿐만 아니라 사용자 데이터베이스내의 사용자 데이터를 접근하기 위해 사용되는 사용자 ID 코드를 포함한다. 사용자 데이터는 크레디트 지불을 위해 사용되는 청구 방법을 포함한다. 이 패킷은 암호화되어야 한다. 예상되는 응답은 MCBP_CreditResp 또는 MCMP_Status 패킷이다.

크레디트 요청 패킷의 MCMP 헤더는 아래와 같다.

PacketType: MDBP_CreditReq (h0002)

PacketSize: 22

ResourceID's: None

Shuntable: No

ResourceReq: No

크레디트 요청 패킷의 패킷 몸체는 아래와 같다.

UserID,8 $$사용자 ID: B-바이트로 표시된 정수값

Password,10 $$사용자 암호

Credit,4,r $$구매할 크레디트 (달러로 표시)

크레디트 전송 (MDBP_CreditTransfer): 이 패킷은 MDBP_CreditReq에 대한 응답이며, 서버로부터 클라이언트로 크레디트의 전송을 실제로 실행한다. 패킷 몸체는 크레디트 전송에 대한 정보를 포함한다. 이 패킷은 암호화되어야 한다.

크레디트 전송 패킷의 MCMP 헤더는 아래와 같다.

PacketType: MDBP_CrediTransfer (h0003)

PacketSize: 20

ResourceID's: None

Shuntable: No

ResourceReq: No

크레디트 전송 패킷의 패킷 몸체는 아래와 같다.

UserID,8 $$크레디트를 수신할 사용자 ID

Credit,4,r $$구매할 크레디트 (달러로 표시)

Tserial,8 $$트랜잭션을 추적하기 위해 사용되는 일련 번호

사용자 등록 (MDBP_RegisterUser): 이 패킷은 크레디트 서버를 가진 사용자의 최초 등록을 위해 사용되며, 사용자 등록 데이터베이스에서 새로운 엔트리가 생성되도록 한다. 패킷 몸체는 사용자의 새로운 기록의 표준 파일에 기입될 사용자에 대한 정보를 포함한다. 정보는 이후에 MDBP_WriteUserData 와 MDBP_ReadUserData 패킷을 이용하여 판독되고 수정된다. 이 패킷은 암호화되어야 한다. 이 패킷에 대한 예상된 응답은 MDBO_RegisterUserResp 또는 MCMP_Status 패킷이다.

사용자 등록 패킷의 MCMP 헤더는 아래와 같다.

PacketType: MDBP_RegisterUser (h0004)

PacketSize:

ResourceID's: None

Shuntable: No

ResourceReq: No

사용자 등록 패킷의 패킷 몸체는 아래와 같다.

. Name,54 $$정식 명칭

. Company,54 $$회사 명칭

. Addressl,45 $$주소의 첫 번째 라인

. Address2,45 $$주소의 두 번째 라인

. City,20 $$도시명

. State,2 $$2문자의 국가명(약자)

. Pcode,16 $$우편번호

. Country,30 $$국가명

. Telephone,16 $$전화번호

. AX,16 $$팩스번호

. Email,100 $$E-mail 주소

. CardNo,20 $$신용카드번호 ('nnnn nnnn nnnn nnnn')

. CardExpDate,5 $$신용카드만기일('mm/yy 또는 'mm-yy'

. Password,10 $$암호

. ,79 $$예비

사용자 등록 응답 (MDBP_RegisterUserResp): 이 패킷은 MDBP_RegisterUser 패킷에 대한 응답이며, 사용자가 등록되었음을 통보하고 사용자의 지정된 ID 코드를 귀환한다. 이 패킷의 MCMP 헤더는 아래와 같다.

PacketType: MDBP_RegisterUserResp (h0005)

PacketSize: 8

ResourceID's: None

Shuntable: No

ResourceReq: No

패킷 몸체는 아래와 같다

userID,8 $$사용자 ID: 8-바이트의 정수

사용자 데이터 쓰기 (MDBP_WriteuserData): 이 패킷은 사용자 데이터베이스에 데이터를 기입한다. 이것은 기입할 사용자 등록 데이터베이스내의 요소를 식별하기 위해 자원 식별자를 이용한다. 패킷 몸체는 기입될 데이터이다. 이 패킷은 아래와 같은 특별한 유형의 자원 식별자를 사용한다.

type userid[,dbitem];length[;date,time]

여기에서

type 자원 유형을 식별하며 항상 "mdbpuser" 이다.

userid 사용자 ID (16진법으로)

dbitem 검색할 사용자 데이터베이스 항목에 대한 경로. 생략시, 트리-파일은 지정된 사용자에 대한 전체 사용자 데이터 트리를 포함하는 것으로 간주된다.

length 귀환될 항목 부분

예:

mdbpuser:00000000000003e4,\Catharon\RAdmin\Rights;

*;03/13/1995,12:20:48

mdbpuser:0000000000000014;*

mdbpuser:0000000000002aff\XYZWidgt\WDBP\

GroupMembership;256;5/12/1996,01:00:30

사용자 데이터베이스는 시스템 폴더와 발행자 (publishers) 폴더를 가진다. 시스템 폴더에는 최초 사용자 등록 패킷에 명시된 데이터가 포함되며, 추가 데이터를 포함하도록 확장될 수 있다. 발행자 폴더는 각 발행자에 대한 하위폴더를 가지며, 발행자의 명칭을 기초로 명명된다. 또한, 발행자 폴더는 발행을 기초로 명명된 발행물 폴더들을 가진다. 발행물 폴더내의 데이터 구조는 각 발행물의 특징을 나타낸다.

사용자 데이터 쓰기 패킷의 MCMP헤더는 아래와 같다.

PacketType: MDBP_WriteUserData (h0006)

PacketSize: 가변적

ResourceID's: 1 (기입할 자원)

Shuntable: No

ResourceReq: Yes

사용자 데이터 읽기 (MDBP_ReadUserData): 이 패킷은 사용자 데이터베이스로부터 데이터를 판독하며, 판독할 사용자 등록 데이터베이스의 요소를 식별하기 위해 자원 식별자를 사용한다. 자원 식별자의 포맷은 MDBP_WriteUserData 패킷에서 사용된 자원 식별자와 동일하다.

복수의 자원 식별자를 지정할 수 있으며, 사용자 등록 데이터베이스의 지정된 요소들 각각을 귀환되도록 한다.

이 패킷은 일련의 패킷들(요청 자원 각각에 대해 하나씩)로 응답한다. 이러한 패킷들은 MDBP_ReadUserDataResp (자원이 성공적으로 판독된 경우) 또는 MCMP_Status (자원 판독에 에러가 있는 경우)이다.

사용자 데이터 읽기 패킷의 MCMP헤더는 아래와 같다.

PacketType: MDBP_ReadUserData (h0007)

PacketSize: 0

ResourceID's: 1이상

Shuntable: No

ResourceReq: Yes

사용자 데이터 읽기 응답 (MDBP_ReadUserDataResp): 이 패킷은 MDBP_ReadUserData 패킷에 대한 응답이며, 사용자 등록 데이터베이스의 요청된 요소들의 내용을 포함한다. 패킷 몸체는 판독된 데이터이다. MCMP 헤더는 아래와 같다.

PacketType: MDBP_ReadUserDataResp (h0008)

PacketSize: 가변적

ResourceID's: None

Shuntable: No

ResourceReq: No

구매/로얄티 보고 (MDBP_PurchaseReport): MDBP_CreditReq 패킷에 대한 응답을 클라이언트가 수신한 후, 하나 이상의 패킷이 클라이언트로부터 서버로 전송된다.

데이터 영역은 포괄적 로얄티 보고 헤더와 그에 후속되는 발행물-지정 로얄티 보고 데이터 영역을 가진다. 경우에 따라서, 로얄티 보고 헤더는 필요한 로얄티 정보를 보고하기에 충분하므로, 데이터 영역은 옵션으로 선택되며 반드시 포함되지 않아도 된다. 로얄티 보고 헤더에 후속되는 데이터는 발행물-지정 데이터로 간주된다.

로얄티 보고 패킷의 MCMP 헤더는 아래와 같다.

PacketType: MDBP_PurchaseReport (h0009)

PacketSize: 가변적

ResourceID's: None

Shuntable: No

ResourceReq: No

로얄티 보고 헤더는 아래와 같다

RoyaltyReport,128

. HeaderSize,2 $$바이트로 표시된 로얄티 보고 헤더의 크기

. Publisher,45 $$발행자의 명칭

. Publication,45 $$발행물의 명칭

. VolIssue,20 $$발행물의 권(Vol) 그리고/또는 발행 번호

. Version,4 $$발행물의 버전

. UserID,8 $$발행물을 구독하는 사용자의 ID

. CreditSpent,4,r$$발행물 구입에 사용한 크레디트 금액(달러)

DPP 패킷 유형

분산 처리 프로토콜(DPP)은 특정 업무에 의해 발생하는 처리 부하(load)를 다수의 컴퓨터에 분산함으로써 부하를 감소시키기 위해 사용된다. 이 프로토콜은 유휴 시스템을 검색, 위치시키며, 업무를 지원하도록 (CMXP 프로토콜과 연계하여) 이러한 시스템들에 적절한 코드 모듈들을 전송하기 위해 사용된다. 업무가 완료되면, 이 프로토콜은 모든 지원 기기들로부터 결과들을 수집하여, 업무를 최초로 개시한 기기상에서 그 결과들을 컴파일하기 위해 사용된다.

이러한 프로토콜에 의해 제공된 기능은 주 MCMP 프로토콜에 의해 제공되는 부하 분산 기능과 혼동되지 않아야 한다. MCMP 프로토콜의 부하 분산 기능은 클라이언트 요청을 다양한 위치의 다양한 기기들에 분산한다. DPP 프로토콜은 몇가지 기기들을 함께 사용하여 단일 업무를 실행하며, LAN과 3D 이미지와 같은 프로세서 집약적 업무에 보다 적합하다.

분산 처리에 연관된 시스템은 업무를 지원할 시스템들의 목록뿐만 아니라 분산 처리를 지원할 시스템의 목록을 포함하여야 한다. 이러한 목록은 전체 네트워크를 지정하기 위해, 192.168.123. C-레벨 네트워크 전체에 대한 192.168.123.*와 같은 와일드카드를 가진 엔트리를 포함한다.

시스템을 상기와 같이 구성함으로써, 시스템의 프로세서를 사용할 대상을 제어할 수 있다. 예를 들면, 보안상의 이유로 회사 내부 네트워크내의 시스템에 공용 처리를 제한할 수도 있다.

컴퓨터 프로세서에 대한 접근 우선순위를 시스템에 지정할 수도 있다. 예를 들면, 어떤 회사는 사내의 모든 컴퓨터가 네트워크상에서 기타 요청에 우선하여 다른 컴퓨터로부터의 분산 처리 요청을 허용하도록 한다. 그러나, 그 회사가 다른 회사와 연합되어 있는 경우, 그 회사의 컴퓨터들중 처리 지원을 요청하는 컴퓨터가 없다는 전제하에, 분산 처리를 목적으로 그 회사의 컴퓨터를 다른 회사가 접근하기를 원할 수도 있다.

이때 DPP 프로토콜에 의해 사용되는 패킷 유형의 목록은 아래와 같다. DPP 프로토콜의 기능은 이 목록에 추가됨으로써 향후에 확장될 수 있다.

DPP_AssistReq = 2 $$처리지원 요청

DPP_AssistResp = 3 $$DPP_AssistReq에 대한 응답

DPP_EndTaskReq = 4 $$처리지원 종료 요청

DPP_EndTaskNotify = 5 $$지원 종료 통보

DPP_UpdateReq = 6 $$업무 상태 업데이트 요청

DPP_UpdateResp = 7 $$UpdateReq에 대한 응답

이러한 패킷 유형들은 아래에 상세히 설명된다.

처리 지원 요청 (DPP_AssistReq): 이 패킷은 시스템으로부터의 처리 지원을 요청하기 위해 다른 시스템에 처리 지원을 요청하는 시스템에 의해 전송된다. 이 패킷은 코드 모듈이 CMXP를 통하여 인출(fetch)되도록, 분산 처리를 담당할 최초 코드 모듈을 위한 자원 식별자를 포함한 분산 처리를 개시하는데 필요한 모든 정보를 포함한다. 이러한 패킷에 대한 응답은 DPP_AssistResp 패킷 (수신 시스템이 지원할 수 있는 경우) 또는 MCMP Status 패킷이다 (수신 시스템이 지원할 수 없는 경우).

MCMP_Status 패킷은 아래의 내용들을 포함한다.

. 접근 금지 (Access Denied)

패킷이 전송된 시스템은 요청을 지원할 수 없다. 이것은 수신 시스템상의 적절한 구성 파일에 목록화되어 있지 않은 요청을 생성하는 시스템의 결과이다.

. 불충분한 가용 시스템 자원 (Insufficient Free System Resources)

분산 처리 지원을 위해 시스템에 대한 요청을 수신하는 시스템상에 충분한 가용 시스템 자원이 존재하지 않는다. 일부 경우에, 시스템은 이 상황값을 귀환할 수 없을 정도로 업무처리량이 많다.

. 요청 양도 (Request Superceded)

이것은 시스템이 충분한 가용 프로세서 시간을 가지고 있으나, 요청을 전송한 시스템에 우선하여 다른 시스템을 지원하기로 하였다는 표시이다. 요청이 양도되는 이유는, 요청 양도가 단지 특정 시간에 업무를 지원할 수 없으므로 에러를 생성하지 않을 것임을 나타내는 반면, "접근 금지"로부터의 별도의 상황 코드는 "접근 금지"가 지원할 (사용자에게 구성 실패를 통보하도록) 시스템을 검색하는 프로그램을 만나는 경우에 에러를 생성한다는 코드이기 때문이다.

. 업무 지정 에러(Task-Specific Error)

이것은 업무를 처리할 코드 모듈에 의해 표시된다. MCMP_Status 패킷은 발생된 특정 에러를 나타내는 추가 업무-지정 에러 코드를 포함한다. 업무 지정 에러는 하드웨어 제한으로 인해 시스템이 업무를 지원할 수 없음을 나타내는 에러를 포함한다.

지원 요청 패킷의 패킷 몸체는 32-바이트 헤더와 그에 후속되는 업무-지정 데이터 영역으로 구성된다. 이 영역은 업무 처리를 지원하기 위해 자원 ID에 언급된 코드 모듈이 요구하는 모든 정보를 포함한다. 이것은, 예를 들면, 이미지 (이미지가 처리되어야 하는 경우) 또는 렌더링(rendering)되어야 하는 3D 환경에 대한 설명을 포함한다.

또한, 업무-지정 데이터 영역은 지원 시스템이 개시 시스템을 처리된 데이터로 업데이트할 빈도뿐만 아니라 업무의 어느 부분에 시스템이 작용할 것인지(예를 들면, 이미지에서 처음과 마지막 라인)를 나타내는 정보를 포함한다.

지원 요청 패킷의 MCMP 헤더는 아래와 같다.

PacketType: DPP_AssistReq (h0002)

PacketSize: 32 + 업무-지정 데이터 크기

ResourceID's: 1 (분산 처리를 실행할 코드 모듈의 ID)

Shuntable: No

ResourceReq: No

DPP_AssistReq 헤더는 아래와 같다.

DPP_AssistReq Hdr,32

. ProcessID,2 $$프로세스 식별자

. ,30 $$예비

DPP_AssistReq 헤더의 요소는 아래에 상세히 설명된다.

프로세스-ID: 이것은 프로세스를 식별하는 2-바이트 정수값으로서, 프로세스를 시작하는 시스템에 의해 지정되며, 그 시스템의 IP 주소와 병합되면 고유의 식별자가 된다.

DPP_AssistResp: 이 패킷은 시스템이 업무 지원을 시작했다는 것을 통보하기 위해 DPP_AssistReq에 대한 응답으로서 전송된다. 이것은 단지 통보 메시지이므로 Resource ID 및 패킷 몸체는 없다. MCMP 헤더는 아래와 같다.

PacketType: DPP_AssistResp (h0003)

PacketSize: 0

ResourceID's: None

Shuntable: No

ResourceReq: No

DPP_EndTaskReq: 이 패킷은 시스템의 업무 지원을 조기에 (업무가 완료되기 전에) 중지할 것을 지시하기 위해 지원 시스템에 전송된다. 이것은, 예를 들면, 개시 시스템상의 사용자가 "취소(cancel)" 버튼을 클릭하고 업무를 중지하고자 하는 경우에 사용된다. MCMP 헤더는 아래와 같다.

PacketType: DPP_EndTaskReq (h0004)

PacketSize: 16

ResourceID's: 1 (분산 처리를 실행할 코드 모듈의 ID)

Shuntable: No

ResourceReq: No

업무 종료 요청 헤더의 패킷 몸체는 아래와 같다.

DPP_EndTaskReq,16

. ProcessID,2 $$종료할 프로세스의 ID

. ,14 $$예비

DPP_EndTaskNotify: 이 패킷은 지원 시스템에 의해 업무지원이 더 이상 없을 것임을 개시 시스템에 통보하기 위해 전송된다. 이것은 그 자체로 사용될 수도 있고, DPP_EndTaskReq 패킷에 대한 통보로 사용될 수도 있다. 이것은, 예를 들면, 지원 시스템이 업무 지원을 계속할 수 없을 만큼 업무처리량이 많거나, 지원 시스템이 업무를 중지할 것을 개시 시스템으로부터 지시받을 경우에 전송된다. 이 패킷은 업무 완료를 개시 시스템에 통보하기 위해서 사용되기도 한다. MCMP 헤더는 아래와 같다.

PacketType: DPP_EndTaskNotify (h0005)

PacketSize: 16

ResourceID's: 1 (분산 처리를 실행할 코드 모듈의 ID)

Shuntable: No

ResourceReq: No

업무 종료 통보 패킷의 패킷 몸체는 아래와 같다.

DPP_EndTaskNotify,16

. ProcessID,2 $$종료할 프로세스의 ID

. Tstatus,1 $$업무 상황: 1=완료, 0=미완료(중지)

. ,13 $$예비

DPP_UpDateReq: 이 패킷은 처리된 데이터(DDP_UpdateResp 패킷)를 전송할 것을 지원 시스템에 지시하기 위하여 개시 시스템에 의해 전송된다. 예를 들어, 이미지 처리중에, 이 패킷은 지금까지 처리된 이미지의 일부를 구성하는 데이터를 이용하여 지원 시스템이 응답할 수 있도록 한다. 이러한 패킷 유형의 이용은 업무에 따라 달라진다. 일부 업무는 이러한 패킷을 전혀 사용하지 않는 대신에 다양한 간격으로 DPP_UpdateResp 패킷을 자동 생성한다. MCMP 헤더는 아래와 같다.

PacketType: DPP_UpdateReq (h0006)

PacketSize: 6

ResourceID's: 1 (분산 처리를 실행할 코드 모듈의 ID)

Shuntable: No

ResourceReq: No

업데이트 요청 패킷의 패킷 몸체는 아래와 같다.

DPP_UpdateReq,16

ProcessID,2 $$처리된 데이터가 귀환될 프로세스의 ID

. ,14 $$예비

DPP_UpDateResp: 이 패킷은 지원 시스템으로부터 개시시스템에 전송되며, 지금까지 처리되어온 데이터를 업무의 일부로서 포함한다. 예를 들면, 이미지가 처리중에, 이 패킷은 이미 처리된 이미지중의 일부를 포함한다. 이러한 패킷들에 전송된 데이터들은 누적되지 않음에 유의한다. 즉, 두 개의 패킷이 연속으로 전송되면, 두 번째 패킷은 첫 번째 패킷에 포함되지 않은 데이터만을 포함한다.

이러한 패킷들은, 업무중에 또는 업무 완료시에, 업무 지원을 처리하는 프로그램에 의해 자동 전송될 수 있으나, 주로 DPP_UpdateReq 패킷에 대한 응답으로 전송된다.

패킷 몸체는 헤더와 그에 후속되는 업무-지정 데이터로 구성된다. 헤더의 일부가 아닌 모든 데이터는 업무-지정 데이터로 간주된다.

업데이트 응답 패킷의 MCMP 헤더는 아래와 같다.

PacketType: DPP_UpdateResp (h0007)

PacketSize: 16 + 업무-지정 데이터 크기

ResourceID's: 1 (분산 처리를 실행할 코드 모듈의 ID)

Shuntable: No

ResourceReq: No

DPP_UpdateResp 헤더는 아래와 같다.

DPP_UpdateResp,16

. HeaderSize,2 $$바이트로 표시된 DPP_UpdateResp 헤더의 크기

. ProcessID,2 $$ 처리된 데이터가 귀환될 프로세스의 ID

. ,12 $$예비

여기에서 "코드 모듈"은 응용 프로그램의 지정된 작동을 실행하기 위한 응용 프로그램의 자립 부분(self-standing)을 나타내기 위하여 사용된다. 예를 들면, 그리기 프로그램에서, 하나의 코드 모듈은 선 그리기를 제어하며, 다른 하나의 코드 모듈은 색상의 적용을 위하여, 또 다른 하나의 코드 모듈은 원과 같은 기하학적 형상을 생성하기 위하여 사용된다. 이러한 코드 모듈들은 그들중 최소한 일부가 특정 작동의 실행에 있어 요구되지 않는다는 점에서 독립적이다. 경우에 따라서, 특정 결과를 생성하기 위하여 2개 이상의 모듈들이 요구된다. 그러나, 모든 모듈들이 요구되는 경우는 없다.

여기에 사용된 "기계-실행"라는 용어는 컴퓨터 작동을 제어하고 범용 디지털 컴퓨터의 산술적 논리 회로의 상태를 변경할 수 있어서, 범용 디지털 컴퓨터의 기능을 변경할 수 있는 프로그램 모듈인 코드 모듈을 지칭한다. 그러므로, "기계-실행 코드 모듈"은 데이터 파일 및 기타 수동적인 전자 부호화 정보는 포함하지 않는다.

여기에 사용된 "응용 프로그램"은 운영 시스템이 아닌 실행가능한 컴퓨터 코드의 콜렉션과 기초 기계 기능을 제어하기 위한 기타 기저 프로그래밍을 가리킨다. 그러므로, 하위 프로토콜을 포함한 모듈화 코드 마스터 프로토콜은 자체가 모듈화되었으며 네트워크를 통하여 코드 모듈로 전송가능한 응용 프로그램이다. 예를 들면, 최소한 일부 하위 프로토콜은 일부 제2서버상에 존재하지 않는다. 그러한 하위 프로토콜이 업무 완료 또는 사용자 요구를 처리하기 위하여 제2서버에 요구된다면, 그러한 요구된 하위 프로토콜은 네트워크상에서 제1서버에서 제2서버로 전송될 수 있다.

하위 프로토콜은 MCMP 패킷 각각에 부착된 MCMP 헤더의 하위 프로토콜 식별자를 포함하여 처리된다. MCMP 서버상에, 하위 프로토콜을 처리하는 회로는 CMXP 프로토콜에 의해 실시간으로 처리되는 플러그인 모듈이다. 입력 패킷이 수신되면, 적절한 하위 프로토콜 핸들러가 호출된다. 하위 프로토콜 핸들러는 요구되는 모든 방법으로 패킷을 처리한다. 프로토콜 핸들러는, MCMP 서버가 자원의 포맷, 서버간 자원을 전송하는 방법 또는 캐시 규칙등을 인지할 수 없으므로 로드 분산 처리에 연관된다. 하위프로토콜 핸들러는 프로토콜-지정 자원의 접근, 전송, 캐싱을 처리해야 한다. 하위프로토콜 핸들러는 MCMP 서버의 주 처리 루프의 실행동안 이러한 루프가 다양한 유지 업무를 실행할 수 있도록 하면서 주기적으로 호출된다. 하위프로토콜 핸들러는 별도의 스레드(thread)에서 실행되는 루프로부터 호출될 수도 있다.

특정 하위프로토콜을 위한 핸들러는 MCMP 서버가 소켓(socket)을 특허 대화 모드(Proprietary Dialog Mode: PDM)에 존재하는 것으로 표시할 것을 요구한다. PDM 소켓상에, 모든 입력 데이터는 MCMP 서버에 의해 처리되지 않고 하위 프로토콜 핸들러에 직접 전송된다. 소켓이 PDM 작동으로부터 정상 작동으로 귀환되면, 하위 프로토콜 핸들러는 하나이상의 MCMP 패킷의 일부를 판독하여 "여분의" 처리되지 않은 모든 데이터를 MCMP 서버에 전송해야 한다.

여기에 사용된 "제1서버" 또는 "소스 서버"는 특정 어플리케이션에 연관된 자원에 대한 정식 소스를 나타내기 위해 사용되었다. 예를 들면, TenCORE Net Demo를 위한 제1서버는 데모(demo)의 최근 버전이 항상 전송되는 서버이다.

여기에 사용된 "제2서버"는 제1서버로부터 서비스 전송을 수신하는 서버를 가리킨다. 제2서버는 일반적으로 제1서버의 내용을 반영한다. 예를 들면, TenCORE Net Demo를 위한 제2서버는 제1서버의 사용량이 너무 많은 경우에 서비스의 대상이 되는 클라이언트를 인계받는 서버가 된다. 제2서버는 제1서버로부터 자원들을 요청할 수 있는 경우에는 이러한 자원들을 반드시 반영하지 않아도 된다.

하나의 기계는 제1서버와 제2서버 모두로서 사용될 수 있다. 예를 들면, 하나의 기계는 TenCORE Net Demo를 위한 제1서버, 그리고 옷장 카타로그(Country Closet Clothing Catalog)를 위한 제2서버일 수 있다.

하나의 기계는 다수의 어플리케이션을 위한 제1서버로서의 기능을 가질 수 있으며, 다수의 어플리케이션을 위한 제2서버로서의 기능을 가질 수 있다.

여기에 사용된 "자원"이라는 용어는 서버 또는 클라이언트에 의해 사용될 수 있는 데이터 블록을 가리킨다. 자원은 파일, 코드 모듈, 파일의 일부, 코드 모듈의 일부, 파일 디렉토리, 코드 모듈 디렉토리, 또는 CMXP 금지 목록을 포함한 연관된 정보일 수 있다. 또한 "자원"은 프로세서 시간 및 메모리와 같은 하드웨어 및 시스템 자원을 지칭한다.

"트리-파일"이라는 용어는 Catharon 트리-구조 네임세트 파일을 가리킨다. 트리-파일은 트리와 유사한 구조로 그룹화되어 분류된 일련의 기록(records) 세트를 포함한다 (운영 시스템의 파일 시스템과 유사). 트리 파일에서, 퍼센트 기호인 %로 시작하는 파일명은 내부 사용을 위하여 예약되어 있다. 이 명칭을 제외한 모든 다른 명칭들이 트리-파일을 유지하는 어플리케이션에 상관없이 사용가능하다. 현재, 하나의 %기호 명칭만이 지정되어있다. 이것은 "\% 시스템"이며, 파일을 생성한 어플리케이션 명칭, 파일이 최종 편집된 네트워크 어카운트의 사용자, 파일이 최종 편집된 날짜와 시간, 파일내의 다양한 자원의 위치, 디폴트 폴더의 위치, 파일의 연관된 정보를 포함한 파일에 대한 일반적인 정보를 포함한다.

상기에 언급한 바와 같이, TenCORE는 의사코드를 사용하는 번역된 언어이다. 상기 본문의 설명에 따라 TenCORE 프로그래밍 언어와 함께 사용되도록 수정된 번역기 프로그램은 오늘날 흔히 사용된다.

TenCORE 프로그래밍 언어는 아래에 설명된다. 언어의 기본적 특징이 우선 설명되며, 변수의 처리등이 설명된다. 마지막으로, 언어에서 사용된 주요 명령들이 설명된다. 앞에서 설명한 내용과 이후의 정보로부터, 통상의 기술을 가진 자는 본 발명에서 사용된 모듈식 프로그래밍 언어를 생성할 수 있을 것이다.

TenCORE 언어 기초

TenCORE 언어 저작 시스템(TenCORE Language Authoring System)은 컴퓨터에 기초한 훈련 실행을 위해 특별히 개선된 완전한 프로그래밍 환경이다. 이것의 편집기는 소스 코드, 이미지, 폰트, 스크린 디스플레이 생성 및 데이터 처리를 지원한다. 이 언어는 구조화 프로그래밍 환경내의 디스플레이 생성, 응답 입력 및 분석, 데이터 처리를 위한 완전한 기능을 가지고 있다.

명령어 구문 (Command Syntax)

언어의 주요 제작 블록은 명령어(command)이다. TenCORE는 실행 기능에 대해 명명된 약 175개의 명령어를 가진다. 대부분의 명령어는 키워드를 가진 태그(tag)가 후속되며 원하는 특정 기능을 명시한다. 명령어와 태그는 함께 문장(statement)이라고 명명된다. 모든 언어에서와 같이, 태그의 구문을 결정하고 특정 업무를 실행하기 위하여 문장이 대응하는 방법에 관한 법칙이 있다.

TenCORE 언어는 고정 필드 언어이다. 이 언어의 가장 간단한 형태에서 구문은 아래의 형태를 가진다.

command tag

command 필드는 8-문자 길이까지의 명령어 명칭을 포함한다. tag 필드는 9번째 문자 위치에서 시작하며 (소스 편집기에서 탭(tab) 멈춤이 있다), 라인의 잔여분에서 119 문자까지의 길이를 가질 수 있다. 다수의 명령어에서, 태그는 후속되는 라인상에서 명령어 필드를 탭 오버(tabbing over빈칸 남기기) 함으로써 몇 라인동안 계속될 수 있다. 전형적인 코드 라인들은 아래와 같다.

at 5:10

color yellow

write Welcome to Basic Sign Language

Today's lesson consists of ...

각 문장은 명령어로 시작하며 태그가 후속된다. 첫 번째 라인에서, at이라는 명령어는 커서가 디스플레이의 5번째 라인의 10번째 문자에 위치하도록 한다. 두 번째 명령어 color는 후속되는 그래픽과 텍스트에서 황색이 사용되도록 한다. 최종 명령어인 write는 텍스트를 디스플레이상에서 이전에 명시된 위치와 색상으로 위치하도록 한다. write 문장의 태그는 후속 명령어 필드를 탭 오버함으로써 몇 라인동안 계속된다.

선택형 (Selective Form)

많은 명령어는 아래의 선택형을 가진다.

command SELECTOR;negTAG;zeroTAG;oneTAG;...nTAG

SELLECTOR는 목록으로부터 특정 태그를 선택하도록 평가되고 사용된 변수, 상수 또는 연산으로 구성된 수식이다. 태그들은 다른 구분자들이 가용한 경우에도 일반적으로 세미콜론(;)으로 구별된다. nTAG의 경우는 SELECTOR가 n이상의 값을 구할 때 선택된다. 목록의 빈칸 엔트리 ( ;; )는 특정 경우의 명령어 실행을 생략할 때 사용된다. day가 주중의 특정일을 나타내기 위하여 프로그래밍된 가변 정수라고 정의되면, 아래의 문장은 스크린상에 그 특정일을 디스플레이할 것이다.

at 5:10

write Today is

writec day;;; Monday; Tuesday; Wednesday; Thursday;

Friday; Saturday; Sunday

TenCORE는 논리적 참을 -1으로 정의하고 거짓을 0으로 정의하므로, 두 개의 태그중 하나는 참 또는 거짓으로 작용한다.

command SELECTOR; trueTAG; falseTAG

조건 형식 (Conditional Form)

일부 명령어 (특히 판단 명령어)는 명령어가 실행되는지의 여부를 판단하기 위하여 태그로서의 CONDITION만을 가진다. 조건은 논리적으로 참(-1) 또는 거짓(0)를 구하는 모든 수식이다.

command CONDITION

예를 들면, 응답 맞추기에서 학생의 3번째 시도후에 틀린 철자를 수용하기를 원하는 경우, 이전의 판단 시도 횟수를 나타내는 시스템 변수 ztries에 기초한 조건 수식을 사용할 수 있다.

okspell ztries > 3

answer Mississippi

내장 (Embedding)

다수의 텍스트 처리 명령어는 텍스트 몸체내에 추가 명령어를 내장하고 있다.

command TEXT <<command,tag>> TEXT

<<, >> 기호는 [ALT][,] 그리고 [ALT][.] 키에 의해 접근되는 내장 기호들이다. 내장된 명령어 명칭은 공간을 줄이기 위해 1, 2문자의 약자로 사용될 수 있다. 예를 들면, 내장된 show 명령어의 약자는 s이다. 내장은 주로 변수를 디스플레이하고 텍스트내의 구성 속성을 제어하기 위하여 사용되어 전체 디스플레이에 대한 효율적인 코딩을 가능하게 한다.

write <<color,red>>Your score <<color, white>> is <<show,score>>%.

The <<c,green>>class average <<c,white>> is <<s,average>>%.

코멘트, 간격조정, 지속 명령어(Comments, Spacing and Continued Commands)

라인의 시작에 있는 *는 전체 라인을 컴파일러에 의해 삭제되며 실행에 아무런 영향을 끼치지 않는 코멘트로 표시하는 것이다. 코멘트는 $$표시후에 배치하여 모든 라인에 둘 수 있다. 컴파일러는 코멘트를 삭제하며, 이것은 코드 실행에 영향을 주지 않는다.

calc temp <= temp*9/5 + 32 $$ 섭씨를 화씨로 변환

일반적으로, 태그상의 추적 공간(trailing space)은 컴파일러에 의해 삭제되며 실행에 영향을 주지 않는다. 이것은 또한 $$ 코멘트 기호가 사용된 경우에도 마찬가지이다. 컴파일러는 실제 태그로 귀환하여 코멘트와 공간을 삭제한다. 일부 텍스트 명령어를 위하여, 추적 공간을 실제로 원할 수 있으며 $$$ 기호를 가진 온-라인 코멘트를 이용하여 컴파일러가 추적 공간을 유지하도록 할 수 있다. 아래의 예를 이용하여 Welcome Bob과 같은 것들을 디스플레이 할 수 있다.

write Welcome $$$ 단일 추적 공간 유지

showa name

비선택 태그를 가진 대부분의 명령어는 코멘트 필드에 재타이핑할 필요없이 반복된다. "Space"는 코딩의 판독을 용이하게 하기 위해 코드의 첫 번째와 마지막 라인사이에 추가된다.

* This section of code initializes parameters/

calc frame <= 2045 $$ 시작 프레임 번호

file <= 'bangs' $$ 전개(explosion) 라이브러리 사용

block <= 'mega' $$ 거대한 전개 사용

type <= 'nameset' $$ 네임세트 파일

attach file;type $$ 파일 첨부

단위 (Units)

TenCORE 문장의 시퀀스는 다른 언어로 절차 또는 하위 루틴과 유사한 단위(unit) 이라고 명명되는 기능적 엔티티를 구성한다.

명령어는 문장을 이루는 모든 방법으로 단위로 그룹화된다. "페이지 전환"과(lesson)는 다수의 프레임으로 구성되며, 각 프레임을 단위가 된다. 과내의 몇 부분에서 사용되는 복합 그래픽은 필요한 부분에 언급된 단일 단위에 위치한다. 시뮬레이션은 자체의 단위에 각 기능부를 가진다.

각 단위는 문자로 시작하는 8문자 길이까지로 구성되는 고유의 명칭을 가진다. 구두점, 특수 기호, 두 개의 시스템 역전 명칭 x, q는 허용되지 않는다.

단위 언급 (Referencing Units)

동일한 과내에서 단위를 언급하고자 하는 경우, 단위의 명칭을 서술한다.

do clock $$ 타이밍을 시작하기 위해 단위 호출

현재 실행되는 과와는 다른 과의 단위를 접근하고자 하는 경우, 과명과 단위명 모두를 제시해야 한다.

do maps,illinois$$ 일리노이주식회사의 지도를 보여줌

마지막으로, 단위 또는 과명칭을 명확히 서술하지 않고 변수로 산출된 명칭으로 언급하고자 하는 경우가 있다. 이것은 명확한 명칭이 정상적으로 나타나는 변수를 내장함으로써 이루어진다. 내장은 변수를 << 와 >>으로 둘러싸서 표현한다. 예를 들면, 프로젝트내의 모든 과와 단위 명칭들이 8-바이트 배열(array)의 lesson과 unit으로 나타낸 경우, 인덱스를 원하는 단위를 지정하도록 설정함으로써 모든 단위들을 접근할 수 있다.

do <<lessons(i)>>,<<units(j)>>

포괄적 단위 명칭 (Generic Unit Names)

시스템 키워드 명칭은 현재의 과에서 또는 시스템으로 귀환하여 주(main) 단위에 포괄적 분기 종착지(generic branch destination)를 제공한다. 예를 들면, =next 와 =back은 현재 과에서 후속 또는 이전 주 단위로 점프할 때의 단위 명칭을 위하여 사용된다. =exit는 현재의 과를 종료하고 DOS, 편집기, 또는 시스템 활동 관리자(System Activity Manager)로 귀환하기 위해 사용된다. 9개의 포괄적 단위 명칭의 목록이 사용예와 함께 jump를 작성함으로써 검색된다.

단위 용어 (Unit Terminology)

단위는 사용에 따라 실행 중에 여러 역할을 담당하게 된다. 단위는 사용자가 경험하는 주요 디스플레이와 상호작용, 즉, 과(lesson)의 "페이지들"에 대응한다. 한편, 단위는 하위 업무를 실행하기 위해 주요 단위들중 하나에 의해 호출되는 하위 루틴일 수 있다. 아래의 용어들은 다양한 기능적 단위들을 설명하기 위해 사용된다.

주 단위 (main unit)

주 단위는 jump 유형의 분기(branch)에 의해 과와 기타 단위들에서 실행되는 첫 번째 단위이다. 일반적으로 과내의 하나의 "페이지" 또는 사용자 상황에 대응하며, 모든 사용자 상호작용의 시작점이다. 실행중 주 단위의 종료점에 이르면, 시스템은 사용자를 다른 주 단위로 분기하기 위해 키 입력 또는 기타 상호작용이 발생할 때까지 대기한다. 새로운 주 단위로의 분기는 일반적으로 아래와 같다.

· 스크린 삭제

· 구성에 관련되는 모든 파라미터들을 재초기화

· 분기들을 각각의 과(lesson) 디폴트로 재설정

· 모든 포인터 영역들을 클리어함

· 과내에 새로운 주 기준점을 설정함

현재 단위 (current unit)

현재 실행되는 단위이다. do 또는 flow 명령어에 의해 주 단위로부터 요청되는 주 단위 또는 하위루틴단위이다.

실행완료 단위 (done unit)

done 또는 호출된 단위는 하위루틴으로서 실행되는 단위를 설명하기 위해 사용된다. 실행완료(done) 단위의 종료에 이르면, 호출 단위에서 호출 명령에 후속되는 명령어 또는 플로어 분기가 트리거된 대기상태로 귀환한다.

기본 단위 (base unit)

이 단위는 기본 키워드로 수정된 분기가 발생한 시점의 주 단위이며, 호출한 주 단위에 상관없이 자동 귀환하는 공용 도움말(help) 시퀀스를 설정하기 위해 사용된다. 기본 단위로의 귀환은 =base 포괄 명칭을 사용하여 분기동안 발생한다.

시작 단위 (startup unit)

이 단위는 DOS 또는 시스템 활동 관리자(System Activity Manager)와 같은 루터(router)로부터 과(lesson)에서 실행되는 제1 단위(unit)이다. 이 단위는 일반적으로 과 파일의 제1 물리적 단위이며 단위가 DOS로부터 직접 입력되는 경우 시작(startup) 명령어를 포함해야 한다.

재시작 단위 (restart unit)

이 단위는 학습 세션동안의 중단(interruption)으로부터 귀환이 발생하는 과 플로우(lesson flow)에 위치한다. 일반적으로 restart 명령어를 포함하며 중단후에 학생들을 다시 안내하는 디스플레이를 가진다. 학생의 싸인온으로 "최종 과 계속" 옵션이 선택되면 시스템 활동 관리자는 사용자를 이러한 단위들중 어느 하나로 분기한다.

제어 블록 (Control Blocks)

제어 블록은 과의 시작 또는 종결, 또는 하나의 주 단위로부터 다른 단위로의 이동과 같은 주요 이벤트에 대한 제어를 확장하는 수단을 제공한다. 과 제어 블록에서의 코딩은 지정된 시작, 종결 또는 주 단위에 상관없이 이러한 주요 이벤트에서 자동으로 실행된다. 이렇게 함으로써 필요한 초기화 또는 정리(cleanup)등을 확실히 실행할 수 있다. 제어 블록은 블록 디렉토리 페이지상의 편집기에서 생성된다. 아래의 몇가지 제어 블록외의 추가 제어 블록은 Updates 장에서 설명될 것이다.

+initial

+initial 제어 블록의 코드는 외부 jump 유형의 분기가 과에 실행될 때마다, 예를 들면, DOS로부터 과를 시작하거나, 편집기로부터 과를 실행하거나, 다른 과 또는 활동 관리자로부터 과로 점프할 때마다, 실행된다. 이것은 과에 대한 엔트리의 발생장소에 상관없이 폰트를 로딩하고, 구성 조건을 설정하고, 데이터 유지를 개시하는 등에 사용된다.

+main

+main 제어 블록은 새로운 주 단위가 입력될 때마다 실행되며, 과의 모든 주 단위의 시작에 공통되는 작동을 실행하기 위하여 사용된다. 예를 들면, 과 전역에 걸친 배경 이미지와 플로우 바(bar) 디스플레이, 재시작 정보 저장, 또는 현재 주 단위 명칭과 같은 과 편집동안의 디버깅 정보를 디스플레이하기 위하여 사용된다.

+exit

+exit 제어 블록은 다른 과로 jump 동안, 또는 DOS 또는 현재의 과 실행을 시작한 호출 프로그램으로의 이동을 위하여 종료시 현재의 과에 대한 제어를 중단할 때마다 실행된다. 예를 들면, 과 종료 정보를 수집하거나 과를 위해 작동되었던 기기들을 작동 중지하기 위해 사용된다.

+editor

+editor 제어 블록은 파일을 편집할 때마다 실행된다. 예를 들면 텍스트 편집을 위해 폰트를 로eld하기 위해 사용된다.

스크린 해상도(Screen Resolution)

원래의 CGA, EGA 어댑터로부터 MCGA, VGA, 개선된 VGA 애덥터는 광범위한 PC 디스플레이 하드웨어를 지원한다. 이들 각각은 향상된 그래픽 및 텍스트 스크린 해상도와 색상 기능들을 가진다. TenCORE 코스웨어(courseware)는 일반적으로 특정 스크린 해상도와 코스웨어를 위한 실행-시간 기기의 목표 집단상에서 지원되는 색상 범위를 이용하여 생성된다. 일반적으로 최소 공분모가 사용된다. screen 명령어는 이러한 파라미터들을 선택하며 과의 +initial 제어 블록에 일반적으로 위치한다.

그래픽 좌표 (Graphic Coordinates)

특정 스크린 화소(pixel)는 x, y 그래픽 좌표 (0,0)에 의해 나타내며, 스크린의 좌측 하단 구석에 명시된다.

dot 100, 200 $$x=100, y=200에 화소 쓰기

at 320, 240 $$vga 스크린 중앙

circle, 75, fill $$반경 75의 입체 원 그리기

대부분의 디스플레이 명령어는 작동의 일부로서 시스템 변수 zx, xy를 업데이트하여 현재의 스크린 위치를 정의한다.

문자 좌표 (Character Coordinates)

텍스트는 그래픽 좌표와 구분하기 위해 콜론(:)에 의해 분리된 라인 번호와 문자 위치를 명시하는 문자 좌표를 이용하여 보다 편리하게 나타낼 수 있다.

at 5:15 $$ 라인 5 문자 15

write Text on line 5....

디폴트(Defaults)

그래픽 및 텍스트 명령어는 전경 및 배경 색상, 구성 모드, 텍스트 크기, 그림자 처리(drop shadowing)등 다수의 속성들에 대한 현재의 세팅들을 이용하여 디스플레이한다. 이러한 속성들은 사용직전에 설정될 수 있다.

color yellow $$ 아래는 황색으로

mode write $$ 구조 모드 겹쳐쓰기

text shadow; on $$ 텍스트상에 그림자 설정

text size; 2 $$ 두 폰트의 크기 설정

at 5:10 $$ 라인 5, 문자 1

write A cross section of the sun ...

속성들은 과 시작에서 initial 또는 screen 명령어를 실행할 때 시스템에 의해 설정된 최초 디폴트값들을 가진다. 예를 들면, 시스템 디폴트 전경 색상은 흰색이며 텍스트 크기는 1이다. 속성들은 각각의 주 단위의 시작에서 디폴트값으로 자동으로 귀환하거나 status restore; default 문장을 사용하여 언제든 그들의 디폴트값으로 그룹화되어 강제 할당된다. 상기 예제 코드를 실행한 후 새로운 주 단위로 점프하면, 크기1인 텍스트와 흰색인 전경 색상이 다시 실행된다. 디스플레이 속성과 그들의 표준 디폴트값의 목록에 대한 initial 명령어를 참조한다.

과에 공동의 "feel"을 부여하기 위하여, 과의 모든 단위들을 시작할 때 속성값을 디폴트 값에 설정하는 것이 편리하다. 예를 들어, 과 전체에 사용된 고딕체를 나중에 변경하고자 하는 경우, 폰트 디폴트값을 다른 값으로 변경하고 전체 과에 적용하기만 하면 된다. status save; default 문장은 속성 디폴트를 현재값으로 재설정하기 위해 사용된다.

color yellow

text spacing; variable

text shadow, on

text margin; wordwrap

status save; default $$상기 사항은 과 디폴트이다

일반적으로 과 디폴트는 과의 +initial 제어 블록에서 설정된다.

변수 (Variables)

저자-정의 변수 (Author-Defined Variables)

TenCORE는 지역 변수 및 전역 변수 모두를 지원한다.

지역 변수는 특정 단위에서 정의되며 그 단위에만 가용하다. 단위의 종료점에 도착하거나 새로운 주 단위로 분기되어 단위가 종료되면, 지역 변수값은 효력이 없다.

전역 변수는 정의된 과 전체에 걸쳐 사용 가능하며 전체 프로그램에 대하여 값을 유지한다. TenCORE 활동 관리자 또는 유사 프로그램의 지원으로 전역 변수는 TenCORE 세션 전체에 걸쳐 값을 유지하기도 한다.

지역 변수 (Local Variables)

지역 변수는 define local 문장과 define end 문장사이의 소스 단위내에서 정의됨으로써 생성된다.

define local

height,2 $$ 2-바이트 정수 변수 높이 정의

length,4,r $$ 4-바이트 실제 변수 길이 정의

define end

이러한 방법으로 정의된 변수는 정의가 발생한 단위내에서만 인지되며, 이러한 값들에 지정된 값들은 새로운 주 단위로 이동하는 명령어에 의해 단위가 종료되면 효력을 상실한다.

지역 변수는 일반적으로 루프 인덱스와 같이 현재의 단위 외부에서는 필요없는 일시적인 정보를 위해 사용된다.

전역 변수 (Global Variables)

defines 블록이라고 하는 특정 블록은 전역 변수 정의를 위해 일반적으로 사용된다. defines 블록내에서, 변수들은 아래의 형태와 같은 라인들을 삽입함으로서 정의된다.

name,size[,type]

as in:

defines

height,2 $$ 2-바이트 정수 변수 높이 정의

length,4,r $$ 4-바이트 실제 변수 길이 정의

defines 블록내에서 정의된 변수들은 전역 변수들이며, 파일내의 모든 단위에서 사용가능하며, 사용자 이름 또는 프로그램 상태등과 같이 일부에서 요구되는 정보를 저장하기 위하여 사용된다.

모든 과들에 대한 전역 변수들은 전역 변수 스토리지를 위한 단일 메모리 영역의 시작에서부터 저장된다. 이것은 프로그램이 두 개 이상의 소스 파일들에 걸쳐 나타나는 경우, 모든 소스 파일들이 동일한 정의를 사용하며 그리고/또는 이 영역의 공동 사용을 조정한다. 이에 대해서는 변수의 물리적 할당(Physical Allocation of Variables)장에서 보다 심도있게 다룰 것이다.

전역 변수의 지역적 정의 (Local Definition of Global Variables)

지역 변수와 마찬가지로, 전역 변수는 define global과 define end 문장사이에서 정의된다.

define global

height,2

length,4,r

define end

define global과 define end사이에 정의된 변수는 지역 변수 저장 영역을 사용하지만, 정의가 발생된 단위내에서만 인지된다.

define global 명령어는 분리된 테스트 단위와 일부 특수 목적 유틸리티에 대해서만 사용되어야 한다. 전역 변수에 대해 어느 정도의 공간이 할당되었는지를 모르고 define global 명령어를 사용하면 변수간 충돌이 발생하며 예상하지 못한 프로그램 실행이 일어난다. 좀 더 상세한 정보가 필요하다면, 변수의 물리적 할당 장을 참조한다.

변수 명칭의 우위 (Precedence of Variable Names)

지역 변수는 기존의 전역 변수와 동일한 명칭을 가질 수도 있으며, 이런 경우 지역 변수가 전역 변수에 우선한다.

global (defines block)

user,20

screen,5

define local

user,4,r

define end

여기에서, "user"는 전역 및 지역 변수 모두로 정의되어있다. screen5 단위내에서, 전역 변수 "user"를 접근할 수 없다. screen5내에서 나타나는 모든 "user"는 지역 변수이다.

변수 명칭 (Variable Names)

변수의 명칭은 1에서 8까지의 문자길이로 구성된다. 아래의 항목중 어느 하나가 변수의 명칭에서 사용된다.

· 문자 (확장 문자 세트의 문자들도 포함)

· 숫자

· 구두점(.), 밑줄(_), 캐럿(^), 틸드(~)

· 확장 ASCII 문자

변수 명칭의 첫 번째 문자는 숫자 또는 구두점이 아니어야 한다. 유효한 변수 명칭의 몇가지 예는 아래와 같다.

username

Lesson

xLOCAT

x.loc

last_x

list

root

유효하지 않은 변수 명칭의 예는 아래와 같다.

2student 숫자로 시작하지 않아야 한다

useraddress 8문자 이상의 명칭이어야 한다.

unit'n 구두점은 허용되지 않는다.

대소문자도 중요하다. 즉, "a"는 "A"와 다르며, 변수 "alpha"는 변수 "Alpha"와 "ALPHA"와는 다르다.

변수 정의의 요소 주변의 간격 조정을 중요하지 않다. 대부분의 저자들은 두가지의 다른 변수 정의 스타일중 하나를 적용한다.

define local

width,2

height,2

area,2

length,2

mass,4,r

define end

상기의 스타일에서, 각 변수의 길이와 유형은 변수 명칭 바로 뒤에 기입된다. 다른 일반적인 스타일은 아래와 같다.

define local

width ,2

height ,2

area ,2

length ,2

mass ,4,r

define end

이러한 스타일에서, 모든 정의의 길이는 테이블 형식으로 지정된다.

이러한 스타일들은 기능적으로 동일하다.

변수 유형 (Variable Types)

3가지의 유형들중 어느 하나를 지역 또는 전역 변수로 정의한다. TenCORE내의 변수는 확고하게 유형화된 것은 아니다. 즉, 하나의 유형으로 정의된 변수는 다른 유형의 변수를 위한 작동에서 사용될 수도 있다.

정수 변수 (Integer Variables)

정수 변수는 양수와 음수 전체를 가진다. 정수 변수는 아래와 같이 정의된다.

a,1

x,2

line,3

temp,4

total,8

여기에서 정상적인 형태는 name,size이다. 정수 변수의 크기는 1, 2, 3, 4, 또는 8바이트이다. 이 크기는 변수가 저장할 수 있는 값의 범위를 결정한다.

정수 변수는 범위내의 모든 값에 대해 중요한 의미를 가진다. 즉, 정수값의

가산, 감산, 정수 승산에서 우수리 처리 (rounding) 에러 발생은 없다. 실수값이 정수 변수에 지정되고 정수 나누기가 실행될 때 우수리 처리를 실행한다.

정수-유형의 변수는 i로 약칭되는 유형 수정자 integer를 옵션으로 취한다.

x,2,i

line,3,integer

TenCORE는 자연스러운 순서로 (높은 바이트에서 낮은 바이트로) 정수 변수를 저장한다. (다수의 MS-DOS 프로그램은 낮은 바이트에서 높은 바이트 순서로 정수값을 저장한다)

실수형 변수 (Real Variables)

정수가 아닌 수치를 저장하기 위해, TenCORE는 아래와 같이 정의되는 실수형 변수를 제공한다.

force,8,real

area,4,r

여기에서 정상적인 형태는 name,size,real이다. 실수형 변수는 4 또는 8바이트의 길이를 가지며 변수가 정의될 때 태그 real 또는 약자 r은 크기에 후속되어 표기된다.

실수형 변수의 크기는 변수가 저장할 수 있는 값의 범위를 결정하며, 변수가 값을 저장할 때 사용하는 유효 디지털 수로 측정된 정밀도를 결정한다.

8-바이트의 실수형 변수는 저장 공간의 수요가 많지 않은 경우는 언제든지 사용된다. 4-바이트의 실수형 변수가 사용되어야 하는 경우, 이 변수는 다른 4-바이트의 실수형 변수와 비교된다. if length = 1.1 형태를 비교하면 4-바이트의 실수형 변수의 정밀성의 제한으로 인해 예상하지 못한 결과가 도출될 수 있다.

실수형 변수는 IEEE 포맷으로 저장된다. 정수 변수의 경우에서처럼, 바이트는 기타 프로그램에서 사용되는 역 순서가 아닌 자연스러운 순서로 (높은 바이트에서 낮은 바이트로) 저장된다.

크기와 유형에 대한 선언 없는 변수는 4-바이트의 실수형 변수로 생성된다.

숫자가 아닌 버퍼 변수 (Non-Numeric Buffer Variables)

텍스트 또는 기타 정보를 나타내기 위해, 숫자가 아닌 변수는 아래와 같이 1에서 32767 바이트까지의 모든 크기로 정의될 수 있다 (변수 공간이 충분하다는 전제하에).

username,20

unitname,8

italics, 2052

일반적인 포맷은 name,size이다. 숫자가 아닌 변수는 텍스트 저장시에 가장 많이 사용되나, 버퍼를 요구하는 기타 정보를 저장할 때에도 사용될 수 있다.

1, 2, 3, 4, 또는 8바이트 길이의 숫자가 아닌 변수의 정의와 동일한 크기의 정수 변수의 정의사이에는 차이가 없다. 변수가 사용된 문맥으로 변수가 정수를 나타내는지 또는 숫자가 아닌 데이터를 나타내는지를 알 수 있다.

TenCORE 명령어 구문에서, 숫자가 아닌 변수는 "버퍼"라고 칭한다.

배열 (Arrays)

지금까지 설명한 변수 유형은 모두 스칼라(scalar)이다. 즉, 각 변수는 단하나의 값을 가진다. 또한, TenCORE는 배열 변수를 지원한다. 동일한 크기와 유형을 가진 일련의 변수들의 배열은 개별 요소를 명시하는 인덱스를 사용하여 모두 동일한 명칭으로 언급된다. 배열 인덱스는 배열의 명칭 바로 후에 나타나는 괄호로 표시한 숫자이다.

average(100),4,real $$104-바이트 실수의 배열

count(5),2,i $$5개의 2-바이트 정수 배열

bignum(20),8 $$20개의 8-바이트 정수 배열

table(10),256 $$10개의 256-바이트의 숫자가 아닌 변수의 배열

변수 명칭 다음에, 배열이 나타내는 요소의 수(값)를 명시하는 번호(괄호로 나타냄)가 후속된다는 점만 제외하고, 배열 변수의 정의는 스칼라 변수의 정의와 유사하다. 배열을 정의하는 일반적인 형태는 아래와 같다.

name(elements),size,type

배열은 TenCORE 코드에서 아래와 같이 언급될 수 있다.

calc count(3) <= 10

detain 1,table(index),1

브래킷[ ] 은 괄호와 유사하며 아래와 같은 대체 표기를 허용한다.

calc count[3] <= 10

detain 1,table[index],1

TenCORE는 일차원 배열만을 허용한다. 2차원 이상의 배열은 함수를 사용하여 시뮬레이션할 수 있다.

시스템 정의 변수 (System-Defined Variables)

TenCORE는 프로그램의 현재 상태에 대한 정보를 저장하는 다수의 시스템 정의 변수를 제공한다. 이러한 시스템 정의 변수들(일반적으로 시스템 변수라고 약칭됨)은 TenCORE가 대표 숫자 또는 기타 변수 정보라고 인식하는 명칭에 불과하다.

시스템 변수는 빈번하게 요구되거나 저자-정의 변수에서 저자가 유지하기 불가능한 정보를 제공한다.

예를 들면, 시스템 변수 ztries는 사용자가 현재의 액티브 상태 화살표 구조에 대한 응답을 입력한 횟수를 언급하기 위하여 사용된다.

if ztries > 3

. write The correct answer is: green

endif

이 예는 사용자가 3회 이상 응답을 시도한 경우 질문에 대한 정확한 답을 디스플레이한다.

시스템 변수는 모두 "z"로 시작하여 인식을 용이하게 한다. 그러므로 우수한 프로그래밍 스타일을 위해, 저자-정의 변수에서는 "z"로 시작하는 명칭을 사용하지 않는다. 시스템 변수로서 동일한 명칭을 가진 저자-정의 변수를 생성하는 것은 불가능하다. 이 경우, 저자-정의 변수가 우선되며 시스템-정의 변수값은 사용할 수 없다.

아래의 예들은 기타 시스템 변수에 관한 것이다.

·zreturn은 명령어의 성공 또는 실패를 나타내기 위하여 다수의 명령어에 의해 설정된다. zreturn의 음(-)값은 성공을 나타내며 음값이 아닌 다양한 값들은 명령어의 실패에 대한 다양한 이유를 나타낸다. zreturn은 명령어 상태를 반영하는 1-비트의 정수이다.

· zcolor는 현재의 전경 구조 색상 값으로 설정되며, 디스플레이 제어와 연관되는 2-바이트의 정수이다.

· zmainu는 현재 주 단위의 명칭을 포함하며, 분기와 연관되는 8-바이트의 변수이다.

시스템 변수 값을 직접 지정할 수는 없다. 그러나, 일부 시스템 변수들은 연관된 명령어로부터 영향을 받는다. 예를 들면, zcolor는 현재 선택된 전경 색상을 나타내므로 color 명령어에 의해 영향을 받는다. color white+를 실행하면 zcolor를 밝은 흰색에 대응하는 값인 15로 설정한다.

아래는 카테고리에 따라 구성된 시스템 변수들의 일반 목록이다. 또한, 다수의 명령어 설명은 명령어에 의해 영향을 받는 시스템 변수들을 참조하라는 의미이다.

시스템 변수

zareacnt 2(int) 현재 정의된 영역의 수

zareahl 2(int) 현재 하이라이트된 영역의 영역 ID (하이라이트된 영역이 없으면 0이다)

zarg 1(int) -receive- 또는 -do의 귀환 독립변수 목록에 의해 실제 수신된 널(null)이 아닌 독립변수의 수

zargsin 1(int) -do-, jump-, 또는 -jumpop에 의해 전송된 독립변수의 수

zarsout 1(int) 시작 단위가 귀환을 예측하는 독립변수의 수

zaspectx 2(int) x-종횡비 정정 인수

zaspecty 2(int) y-종횡비 정정 인수

zauthsys 1(int) TenCORE 실행자 유형

-1 = LAS 저자 실행자 (TCAUTHOR.EXE)

0 = 학생 실행자 (TCRUN.EXE)

1 = 생성기 실행자 (TPR.EXE)

zbinary 1(int) "zlesson"이 로딩되는 출처가 되는 파일의 유형

-1 = 바이너리; 0 = LAS 소스; 1 = 생성기 소스

zcharb 2(int) 표준 크기 1 폰트 베이스라인의 오프셋

zcharh 2(int) 표준 폰트 또는 charset(문자 세트)의 점으로 나타낸 높이

zcharw 2(int) 표준 폰트 또는 charset의 점으로 나타낸 넓이

주의: 모든 텍스트 위치선정은 현재의 폰트가 아닌 표준 폰트 (zcharw, zchah, zcharb)에 기초한다.

zclipx1 2(int) 클립핑 영역의 좌측 하단의 X-좌표

zclipx2 2(int) 클립핑 영역의 우측 상단의 X-좌표

zclipy1 2(int) 클립핑 영역의 좌측 하단의 Y-좌표

zclipy2 2(int) 클립핑 영역의 우측 상단의 Y-좌표

zclock 4(int) 시스템 클럭값 (정확하게는 ~55ms)

zcolor 2(int) -color로 설정된 전경 색상

zcolore 2(int) -colore로 설정된 삭제 색상

zcolorg 2(int) -colorg로 설정된 배경 색상

zddisk 1(int) DOS 디폴트 드라이브: 1=A:, 2=B:, 3=C:

zdisk 1(int) 데이터 파일 검색 방법: "zedisk"와 동일값

zdisks 4(bits) TenCORE가 접근할 수 있는 드라이브의 비트맵, SET CDISKS=에 의해 DOS에서 설정.

zdisplay 1(int) 현재의 액티브 디스플레이 번호 (이중 스크린 드라이버만)

zdispx 2(int) 현재 창의 X-크기

zdispy 2(int) 현재 창의 Y-크기

zdolevel 2(int) do-형 명령어 스택의 현재 레벨 (do, library, flow do, flow library)

zdomcnt 2(int) 기존 도메인 수

zdomname 8(alpha) 현재 도메인 명칭

zdompar 8(alpha) 부모 도메인 명칭

zdoserr 1(int) DOS 디스크 에러 코드. "zreturn" = 0인 경우에만 설정되며 디스크 에러를 나타낸다.

0 디스크에 쓰기-방지되어있음

2 드라이브가 준비안됨 (문이 열렸거나 불량 드라이브)

4 CRC 에러 (데이터 에러 검출)

6 검색 에러 (불량 드라이브 또는 디스켓)

7 미지의 미디어 유형 (미지의 디스켓)

8 섹터 발견되지 않음 (불량 드라이브 또는 디스켓)

12 일반적 실패 (불량 드라이브 또는 디스켓)

zdosver 4(alpha) "X.XX" 포맷의 DOS 버전 번호

zedisk 1(int) 소스/바이너리 파일 검색 방법:

-1 = 모든 드라이브 검색; 0 = "zddisk"만 검색

-2 = 시스템 의사-드라이브만 검색

1,2,3,... = A:, B:, C:드라이브만 검색

zedoserr 8(int) DOS 확장 에러 코드로서 "zreturn" = 0인 경우 설정됨. DOS 3.0 또는 그이상에서 실행되는 경우에만 유효. 포맷은 아래와 같다.

2 바이트 에러 코드

1 바이트 에러 클래스

1 바이트 액션

1 바이트 로커스

잔여 3바이트는 예비로 저장됨.

zenable 4(bits) -enable- 표지

이 변수는 1에서 32까지의 번호가 매겨진 비트 세트이며, -enable- 명령어에 대한 비트 대응은 아래와 같다.

1 enable absolute 9 (reserved)

2 enable pointer 10 (reserved)

3 enable mode 11 (reserved)

4 enable cursor 12 enable break

5 enable ptrup 13 enable arrow

6 enable font 14 (reserved)

7 enable area 15 enable fillbreak

8 (reserved) (bits 14-32 reserved)

"zenable"을 테스트하기 위해 bit()를 사용한다. 예를 들면, 포인터가 인에이블되면 bit(zenable,2) 는 -1이고 인에이블되지 않으면 0이다.

zenvlen 4(int) 바이트로 나타낸 DOS 환경 버퍼의 길이

zenvloc 4(int) DOS 환경 버퍼의 절대 메모리 위치

zerrcode 2(int) "zedoserr"로부터의 "error code" 값

zerrlevl 2(int) 최종 실행 파일로부터의 귀환으로서 DOS 변수 "errorlevel";-command

zerrorl 8(alpha) 실행 에러가 발생시 실행할 단위의 과 명칭, -error에 의해 설정

zerroru 8(alpha) 실행 에러상에서 실행될 단위의 명칭

zexitbin 1(int) =exit 분기 로딩의 출처가 되는 파일의 유형:

-1 = 바이너리; 0 = 소스; 1 = tpr

zexitl 8(alpha) -jump=exit상에서 분기할 과의 명칭

zexitu 8(alpha) -jump=exit상에서 분기할 단위의 명칭

zfcrecs 4(int) 첨부된 네임세트 유형 파일내의 연속 자유 기록의 수

zfdisk 1(int) 부착된 파일이 상주하는 디스크:

1 = 드라이브 A:, 2 = 드라이브 B:, 등

-2 = 시스템 경로

zflowcnt 2(int) 현재 정의된 플로우 분기의 수

zfname 8(alpha) 부착된 파일의 명칭; 부착된 파일이 없는 경우는 0

zfnames 2(int) 부착된 파일의 총 명칭의 수; 데이터세트 파일에 대해서는 의미가 없음

zfontb 2(int) 현재 폰트 베이스라인의 오프셋

zfontf 4(bits) 폰트 그룹에 있어, 적당한 속성을 명시하고 합성된 속성을 명시한다. 비트는 아래와 같이 정의된다.

6 = 요청에 볼드체 속성이 부합됨

7 = 요청에 이탤릭체 속성이 부합됨

8 = 요청에 크기 속성이 부합됨

16 = 요청에 화살표 속성이 부합됨

22 = 볼드체 합성

23 = 이탤릭체 합성

24 = 크기 합성

합성가능한 비트에 있어서, 속성은 요청에 부합하지 않으나 합성되지 않음; 예를 들면, 폰트 그룹이 볼드체 항목만을 가진 경우, 현재의 속성은 비볼드체로 명시되며, 비트 6과 22 모두 오프됨

zfonth 2(int) 점으로 표시된 현재 액티브 폰트의 높이

zfontret 1(int) 선택된 폰트가 요청된 파라미터에 어느 정도로 적절한지에 대한 정보. 폰트 그룹에 대한 모든 가용값. 폰트에 대하여, 값 -1, 2, 3이 가능하다. -font-, -text-, status restore-에 의해 설정.

-2 = 부분적 부합, 일부 합성 요구됨

-1 = 정확한 부합

= 일부 부합, 일부 비 부합 속성이 부합되지 않음

1 = 적절한 부합이 발견되지 않음; 기본 폰트 유효

2 = 기본 폰트 사용 불가; 표준 폰트 유효

3 = 표준 폰트 사용 불가; 문자세트(charsets) 유효

zfontw 2(int) 점으로 표시된 현재 액티브 폰트의 넓이

zforce 2(bits) force-표지

이 변수는 1에서 16까지 번호가 매겨진 비트 세트이며, -force- 명령어에 대한 비트 대응은 아래와 같다.

1 force cursor lock-zinfo 8(int) 부착된 파일에서 선택된 명칭에 연관된 정보 바이트; 데이터세트 파일에 대해서는 의미가 없다.

2 force number lock-

3 force extended-

4 force charset-

(비트 5-16은 사용되지 않음)

"zforce"를 테스트하기 위하여 bit()를 사용한다. 예를 들면, -force cursor lock-이 유효하면 bit(zforce,1)은 -이며, 유효하지 않으면 0이다.

zfrecs 4(int) 부착된 파일내의 총 데이터 기록수

zfrombin 1(int) "zfroml"이 로딩되는 출처가 되는 파일의 유형

-1 = 바이너리; 0 = 소스; 1 = tpr

zfromd 1(int) "zfroml"이 로딩되는 출처가 되는 드라이브. zldisk와 동일값

zfrom 8(alpha) -do-, -library-, 또는 main-unit 분기를 통하여 현재의 단위를 호출한 단위의 명칭

zfromlin 2(int) 현재의 단위를 호출한 "zfromu"에서의 명령어 라인 번호

zfromu 8(alpha) 현재의 단위를 호출한 단위의 명칭

zfrecs 4(int) 첨부된 파일에서 총 데이터 기록수

zftype 8(alpha) 첨부된 파일의 유형; 첨부된 파일이 없으면 0; 파일 유형: 소스, tpr, 데이터세트, 네임세트, 바이너리, 로스터(roster), 코스 (course), studata, 그룹

zfunames 2(int) 첨부된 파일에서 사용된 명칭의 수

zfurecs 4(int) 첨부된 파일에서 사용된 기록의 수; 데이터세트 파일에 대해서는 의미가 없다.

zfver 4(alpha) 첨부된 네임세트를 "X.XX"라고 생성한 TenCORE 버전

zhcolor 2(int) -color로 설정된 하드웨어 색상

zhcolore 2(int) -colore로 설정된 하드웨어 삭제 색상

zhcolorg 2(int) -colorg로 설정된 하드웨어 배경 색상

zhdispx 2(int) 현재 스크린 유형의 물리적 x-크기

zinfo 8(int) 첨부된 파일에서 선택된 명칭에 연관된 정보 바이트; 데이터세트 파일에 대해서는 의미가 없다.

zinput 2(int) 최종 처리된 키의 키누름값

0 입력 없음

1- 255 표준 또는 확장 문자

>255 문자가 아닌 키누름

"zinput"는 2-바이트 키누름값을 가진다. "zinput"이 특정값을 가지는 지 판단하기 위해, 아래의 형태들중 하나가 요구된다:

zinput=%"character" zinput=%alt"character"

zinput=%ctl"character" zinput=%altctl"character"

zinput=%keyname

%alt, %ctl, %altctl 수정자는 단일 표준 ASCII 문자(h20-h7f)에서 실행된다. %수정자는 이중 따옴표로 표기된 표준 및 확장 문자(h20-h0ff)와 명명된 키들에서 실행된다.

zinputa 2(int) 현재 zinput값을 유발한 영역의 영역ID (zinput이 영역에 의해 생성되지 않은 경우는 0이다); zinput이 업데이트 될 때 설정됨

zinputainfo 8(int) 이 분기를 유발한 영역을 위한 정보 태그값

zinputf 4(bits) 최종 입력에서 키보드와 포인터 상태

이 변수는 1-32까지 번호가 매겨진 비트 세트이며, 키보드와 포인터에 대한 비트 대응은 아래와 같다.

1 Insert 턴온

2 CapsLock 턴온

3 NumLock 턴온

4 ScrollLock 턴온

5 Alt 키중 하나 다운

6 Ctrl 키중 하나 다운

7 좌측 Shift 키 다운

8 우측 Shift 키 다운

9 SysReq 키 다운

10 CapsLock 키 다운

11 NumLock 키 다운

12 ScrollLock 키 다운

13 우측 Alt 키 다운

14 우측 Ctrl 키 다운

15 좌측 Alt 키 다운

16 좌측 Ctrl 키 다운

17 개선 키보드 "여분"키

18 Alt+숫자로부터의 키

19 포인터 액션으로부터의 키

20 포인터업 액션으로부터의 키

21 터치 기기로부터의 키

(비트 22-29는 예비로 저장됨)

30 마우스 중간 버튼 누름 (일부 마우스는 중간 버튼 누름의 30대신에 비트 31과 32를 생성함)

31 우측 마우스 버튼 누름

32 좌측 마우스 버튼 누름

"zinputf"를 테스트하기 위하여 bit()을 사용한다. 예를 들면, "zinput"에서 입력동안 CapsLock이 턴온되면 bit(zinputf,2)는 1이며, 턴온되지 않으면 0이다.

zinputx 2(int) "zinput" 이 최종 업데이트되면 포인터의 그래픽 x 위치

zinputy 2(int) "zinput"이 최종 업데이트되면 포인터의 그래픽 y 위치

zintincr 2(int) -palette에서 I값에 대한 최소 유효 증분

zintnum 1(int) TenCORE 기기 드라이버에 의해 사용된 인터럽트 번호

zkeyset 2(int) 최종 키처리의 쉬프트 표지 바이트 및 스캔 코드

높은 바이트 = 쉬프트 표지

낮은 바이트 = 스캔 코드

높은 바이트는 1-8까지 번호가 매겨진 비트세트이며, 처음 8비트를 "zinputf"에서 복제한다.

낮은 비트는 물리적 키를 나타내는 "스캔 코드"이다.

zldisk 1(int) 현재 실행중인 과가 로딩된 출처가 된 드라이브. 1,2,3...=A:,B:,C:...;=A:,B:,C:...;-2=시스템 드라이브

zlength 2(int) -put 다음의 판단 버퍼의 길이

zlesson 8(alpha) 현재 단위의 파일명

zlident 8(alpha) 현재 바이너리 파일에 저장된 ID

zline 2(int) 현재 문자 라인

zlinfo 2(int) 첨부된 파일에 연관된 정보의 바이트 수; 데이터세트 파일에 대해서는 의미가 없다.

zlname 2(int) 첨부된 파일에 대한 문자 명칭의 최대 길이; 데이터세트 파일에 대해서는 의미가 없다.

zmainl 8(alpha) 주 단위의 파일명

zmainu 8(alpha) 주 단위의 단위명

zmargin 2(int) 좌측 텍스트 마진의 x-좌표

zmaxarea 2(int) 최대 영역수; 디폴트=100

zmaxcol 2(int) 현재 디스플레이에서 사용가능한 최대 색상수

zmaxdoml 2(int) 허용된 최대 도메인수

zmaxflow 2(int) 정의된 최대 플로우 분기수

zmaxpage 2(int) 사용가능한 하드웨어 디스플레이 페이지수

zmlength 4(int) 바이트로 표시된 최종 언급된 메모리 블록의 크기

윈도즈 메모리 관리와 디스크 스왑파일로 인해, 일반적으로 유효 메모리 풀(pool) 크기는 윈도즈 시스템상에서의 대부분의 TenCORE 요구를 충족시킬 만큼 충분하다. 그러나, 메모리 관련 명령어가 실패할 수도 있으므로 특히 낮은 메모리를 가진 윈도우즈 시스템에서는 zreturn을 항상 점검해야 한다. 호환성의 이유로, 시스템 변수 zmem, zrmem, zfmem은 512K (524,288)보다 큰 값을 귀환하지 않는다. 그러나, 메모리가 충분하다면, 1,048,560 바이트 (hex FFFF0)만큼의 메모리 블록이 생성될 수도 있다. 또한, 호환성 의 이유로, zxmem은 항상 0값을 귀환한다.

zmem 4(int) 바이트로 표시된 메모리풀의 현재 크기

zfmem 4(int) 메모리풀에 할당될 수 있는 최대 블록

zrmem 4(int) 메모리풀에 할당될 수 있는 최대 블록

zxmem 4(int) 0으로 설정

zmode 2(int) 현재의 스크린 디스플레이 모드

0 = inverse 3 = write 6 = add

1 = rewrite 4 = noplot 7 = sub

2 = erase 5 = xor

zmouse 1(int) 마우스 기기 드라이버가 로딩되었는지를 나타낸다:

-1 = 마우스 드라이버 로딩됨;

0 = 로딩되지 않음

zmstart 4(int) 최종 언급된 메모리 블록의 절대 주소

memloc(a,zmstart)에서 사용가능한 표준 absloc 주소를 확인하기 위해 상위 2바이트는 세그먼트이고 하위 2바이트는 0이다.

zmxnames 4(int) 첨부된 네임세트 유형 파일에서 허용된 최대 명칭수

zname 8(alpha) 첨부된 파일에서 선택된 명칭의 처음 8문자; 데이터세트 파일에 대해서는 의미가 없다.

zndisks 1(int) DOS내에서 정의된 드라이브수로서 LASTDRIVE = inCONFIG.SYS에 의해 설정됨

znindex 2(int) 첨부된 네임세트 유형 파일내의 선택된 명칭의 위치

znumber 2(int) -put으로 생성된 대체수

zoriginx 2(int) -origin으로 설정된 최초의 상대적 x-좌표

zoriginy 2(int) -origin으로 설정된 최초의 상대적 y-좌표

zpalincr 2(int) -palette에서의 R, G, B를 위한 최소 유효 증분

zpcolo 2(int) 최종 포인터 입력 위치의 점의 색상; 텍스트 모드, 문자의 전경 색상

zplotxh 2(int) 상위 x 텍스트 범위 (텍스트 측정 참조)

zplotxl 2(int) 하위 x 텍스트 범위 (텍스트 측정 참조)

zplotyh 2(int) 상위 y 텍스트 범위 (텍스트 측정 참조)

zplotyl 2(int) 하위 y 텍스트 범위 (텍스트 측정 참조)

zrec 4(int) 첨부된 파일에서 선택된 명칭에 연관된 기록수; 데이터세트에서는 "zfrecs"와 동일하다.

zreturn 1(int) 이 시스템 변수를 설정한 명령어의 성공 또는 실패를 나타낸다. "zreturn"은 일반적으로 디스크 또는 TenCORE 메모리 풀을 접근하는 명령어에 의해 설정된다. "zreturn" 에 대하여 가능한 값은 아래와 같다:

2 리던던트(redundant) 작동

(액션이 취해지지 않았음)

-1 작동 성공

0 디스크 에러; "zdoserr" 참조

1 첨부 파일 없음

2 범위 블록 지우기(block out)

3 범위외의 메모리 또는 값

4 존재하지 않음

5 무효 기기 선택됨

6 사본 명칭

7 디렉토리 초과(full)

8 불충분한 디스크 기록

9 유효한 명칭이 없음

10 발견되지 않는 명칭 또는 블록. 무효 유형

12 무효 명칭 길이

13 무효 정보 길이

14 네임세트에 명칭/기록이 너무 많음

15 네임세트 디렉토리 오염됨

16 무효 명칭

17 무효 이미지 또는 데이터

18 메모리 풀 요청을 충족시킬 수 없음

19 상황상으로 무효한 작동

20 잠금된 데이터상에 보류(detain-)

21 다른 사용자 로크(lock)와 충돌

22 하나의 명칭에 로크가 너무 많음

23 범위외 스크린 좌표

24 요청된 명칭/기록 로크는 발견되지 않음

zrmarging 2(int) 우측 텍스트 마진의 x-좌표

zrotate 2(int) 회전 각도

zrotatex 2(int) 원래 회전의 x-좌표

zrotatey 2(int) 원래 회전의 y-좌표

zrpage 1(int) -page에 의해 설정된 디스플레이 판독 페이지

zrstartl 8(alpha) -restart에 의해 설정된 재시작 단위의 과 명칭

zrstartu 8(alpha) -restart에 의해 설정된 재시작 단위의 명칭

zscaleox 2(int) 원래 스케일링의 x-좌표

zscaleoy 2(int) 원래 스케일링의 y-좌표

zscalex 8(real) x-스케일링 인수

zscaley 8(real) y-스케일링 인수

zscreen 1(int) 현재 하드웨어 (BIOS) 스크린:

0, 1 40 x 25 텍스트 cga, 텍스트, 중간

4, 5 320 x 200 그래프 4 색상 cga, 그래픽, 중간

6 640 x 200 그래프 2 색상 cga, 그래픽, 높음

7 80 x 25 단색 텍스트 mda

13 320 x 200 그래프 16 색상 ega, 그래픽, 낮음

14 640 x 200 그래프 16 색상 ega, 그래픽, 중간

16 640 x 350 그래프 16 색상 ega, 그래픽, 높음

17 640 x 480 그래프 2 색상 mcga, 그래픽, 높음

18 640 x 480 그래프 16 색상 vga, 그래픽, 중간

19 320 x 200 그래프 256 색상 mcga, 그래픽, 중간

zscreenc 1(int) -screen- 명령어로 선택한 현재 스크린 색상 유형: 0 = 색상; 1 = 단색

zscreenh 1(int) 스크린 하드웨어 드라이버 (*.DIS 파일); 실제 검출된 디스플레이 하드웨어를 위해 조정됨:

0 cga 10vga

2 hercules 11mcga

3 ega 4evga

9 att

zscreenm 1(int) -screen- 명령어로 선택된 현재 스크린 모드: 0 = 그래픽, 1 = 텍스트

zscreenr 1(int) -screen- 명령어로 선택된 현재 스크린 해상도:

0 낮음 2 높음

1 중간 3 alt1

4 alt2 5 alt3

zscreent 1(int) -screen- 명령어로 선택된 현재 스크린 유형:

0 cga 5 ncr 10 vga

1 tecmar 6(reserved) 11 mcga

2 hercules 7(reserved) 12 online

3 ega 8 nokia 13 (reserved)

4 (reserved) 9 att 14 evga

zsdisks 4(bits) 자동 검색에 포함된 드라이브의 비트맵, SETTCSEARCH= 에 의해 DOS에 설정

zserial 8(alpha)TenCORE 실행자의 8-문자 일련 번호

zsetret 1(int) -setname-이 실행될 때 발견되는 부합의 일종; 가능한 값은:

N 고유의 부분적 부합 (N-1 chars)

-1 정확한 부합; 명칭이 선택됨

0 부합 없음; 선택이 클리어되고 아무런 명칭도 선택하지 않음

+N 고유하지 않은 부분적 부합 (N chars); 최초 부분적으로 부합된 명칭이 선택됨

zspace 2(int) 현재의 문자 칼럼

zsysver 4(alpha) "X.XX"형태의 TenCORE 버전

ztelmain 4(int) 이전 주 단위에서 경과한 시간

ztmmain 4(int) 주 단위의 시작에서의 시스템 클럭

ztmunit 4(int) 현 단위의 시작에서의 시스템 클럭

zuncover 2(int) uncover 명령어에 의해 설정된 현재 언커버 키

zunit 8(alpha) 현재 단위의 명칭

zvarsl 4(int) 바이트로 표시된 전역 변수의 총 크기

zwidth 1(int) -width-로 설정된 그래픽 라인의 넓이; 그리기, 원, 타원, 다각형, 점에 영향을 준다.

zwindows 2(int) 열린 창의 수 (최초 창 제외)

zwindowx 2(int) 창의 좌측 하단의 절대 x-좌표

zwindowy 2(int) 창의 좌측 하단의 절대 y-좌표

zwpage 1(int) -page에 의해 설정된 디스플레이 쓰기 페이지

zx 2(int) 현재 그래픽 수평 위치

zxmax 2(int) 현재 창에서의 최대 x-좌표

zxycolor 2(int) 현재 스크린 위치에서의 점 색상

텍스트 모드, 문자의 전경 색상

zy 2(int) 현재 그래픽 수직 위치

zymax 2(int) 현재 창에서의 최대 y-좌표

변수 내용 디스플레이

수치 변수 디스플레이

수치 정보를 포함한 변수는 show 명령어를 사용하여 디스플레이된다.

at 17:21

show ztriea

varname이 디스플레이할 변수의 명칭인 경우에 정상적인 형태는 show varname이다.

정수에 있어서, show는 현재의 스크린 위치에서 0이 아닌 숫자를 처음에 디스플레이하고 20 숫자까지 디스플레이한다. 실수에 있어서는 현재 스크린 위치에서 시작하여 소수점과 3 소수 자리를 포함하여 24 자리까지 디스플레이한다. 이것은 아래와 같이 field 와 right 태그를 추가함으로써 변경할 수 있다:

show real8,2,6

총 12자리까지(소수점 포함) 디스플레이한다: 트레일링 0을 포함한 6 숫자는 소수점 우측에 디스플레이된다. 이런 경우, "real8" 값이 1.2345면 아래와 같이 디스플레이된다:

1.234500

(starting screen location)

테이블식 디스플레이

수치 정보를 디스플레이하는 두 번째 형태인 showt는 변수를 디스플레이하는 경우 우측을 정의하고 공간을 채운다. 이것은 숫자의 컬럼을 지정하는데 유용하다. 예를 들면:

define local

var1 ,8,r

var2 ,8,r

var3 ,8,r

var4 ,8,r

define end

set var1 <= 1.1, 20.02, 300.003, 4000.0004

at 5:5

showt var1,12,4

at 6:5

showt var2,12,4

at 7:5

showt var3,12,4

at 8:5

showt var4,12,4

상기 코드는 아래와 유사한 출력을 생성한다:

16진법 디스플레이

showh 명령어는 변수의 각 바이트에 대한 두 개의 16진법에 기초한 16 수를 사용하여 변수의 내용을 디스플레이한다. 예를 들면:

calc int4 <= 32766

showh int4

는 아래와 같이 디스플레이된다.

00007ffe

옵션으로 선택되는 길이 태그가 명시되지 않으면, showh는 전체 변수를 나타내기 위하여 필요한 모든 숫자를 디스플레이한다 (1-바이트 변수에 대한 2; 2-바이트 변수에 대한 4; 등).

영숫자(Alphanumeric) 디스플레이

일반적으로 텍스트 정보는 showa ("show alphanumeric") 명령어를 사용하여 디스플레이된다.

packz textbuf;;Good morning!

at 5:5

showa textbuf $$ "Good morning" 디스플레이

showa 명령어는 변수의 길이만큼 또는 옵션으로 명시된 길이만큼 문자를 디스플레이한다.

showa textbuf,6 $$ "Good m" 디스플레이

내장된 Show (Embedded show)

일반적으로 show 명령어와 그 변수는 아래와 같이 write 명령어에 내장된다.

at 5:5

write <<show,real1>> <<s,real>> $$'s'는 (s) how

<<showt,real1>> <<t,real1>> $$ 't'는 show (t)

<<showh,real1>> <<h,real1>> $$ 'h'는 show (h)

<<showa,text>> <<a,text>> $$ 'a'는 show (a)

또한, 약어 s, t, h, a도 사용될 수 있다.

문자 <<와 >>는 내장 기호라고 칭한다. 좌측 내장 기호는 [ALT][<]를 누름으로써 생성되며, 우측 내장 기호는 [ALT][>]를 누름으로써 생성된다.

쓰기에서 show 명령어를 내장하기 위한 일반적인 형태는 아래와 같다:

<<command,expression>>

명령어는 show 명령어들중 하나 또는 그것의 약어이며 아래와 같이 숫자, 변수, 또는 그에 연관된 산출로 구성된다.

write The Fahrenheit temperature is <<s,9*celsius/5+32>>.

변수에 값 지정하기

변수에 값을 지정하는 것은 변수의 유형과 변수에 저장될 정보의 유형에 따라 다양한 방법으로 실행된다.

수치(Numeric Values)

수치 변수는 calc 명령어를 사용하여 값을 지정할 수 있다:

define local

ratop,4,real

define end

calc ratio <= 1/3

calc의 일반적인 형태는 아래와 같다:

calc 변수 <= 수식

변수 저장-정의 수치

<= 지정 화살표 ([ALT][A]를 누름으로써 생성)는 변수에 값을 지정하는 연산자이다.

유효 산술적 그리고/또는 지역적 수식

상기 예에서, TenCORE는 3으로 나눈 1값을 산출하여 변수 "비(ratio)"에 저장한다.

아래와 같이 calc 명령어는 하나의 라인으로부터 후속 라인까지 계속될 수도 있다.

calc a <= 1

b <= 2

c <=b / 3

d <= c + b

상기 calc 명령어는 각 라인에서 명령어를 반복하지 않고 서로 다른 4개의 변수들에 값을 지정한다.

실수치가 정수로 지정되면, 그 값은 가장 가까운 정수로 반올림된다.

calc 명령어는 유효 수치 변수 (즉, 1, -2-, 3-, 4-, 8-바이트 정수, 4-와 8-바이트 실수)에만 작동한다. 5-, 6-, 7-바이트 변수 또는 8-바이트보다 큰 변수에는 작동하지 않는다.

수치를 나타내는 다른 방법뿐 아니라, calc와 함께 사용될 수 있는 산술적, 논리적 연산자의 전체 범위는 이 장 후반부의 리터럴 데이터 표시 방법(Ways of Representing Literal Data)에서 다루어진다.

선택형 (Selective Forms)

calc 명령어는 calcc와 calcs의 두가지 선택형을 가진다. 보다 상세한 정보가 필요하다면 각각의 명령어 설명을 참조한다.

텍스트값 (Text Values)

calc 명령어는 수치 변수, 즉, 1, 2, 3, 4, 또는 8 바이트의 지정된 길이를 가진 변수와 함께 사용되어야만 작동하므로, 텍스트를 변수에 지정하는 것은 적절하지 않다.

packz 명령어를 사용하여 텍스트를 변수에 지정할 수 있다. 일반적인 형태는 아래와 같다:

packz buffer; [ length ]; text

buffer 텍스트를 수신할 버퍼

length 변수에 지정된 문자의 수를 수신할 변수의 옵션 태그 (packz 명령어는 저자가 아닌 길이를 설정한다)

text 변수에 지정할 텍스트 정보

packz에서 z는 텍스트를 저장하는데 사용되지 않은 버퍼의 바이트가 0으로 채워졌음을 나타낸다. 0으로 나타내지 않으면, "geranium"을 가진 버퍼에 "rose"를 포함시키면 "rosenium"이 된다. 0으로 나타내는 것을 원하지 않는 경우, pack 명령어를 사용한다.

define local

sublen,2

subject,40

define end

*

packz subject,sublen;Geography 101

*

at 5:5

write The heading <<a,subject>> is <<s,sublen>> bytes long.

길이 태그는 생략될 수 있으며, 이런 경우 변수와 지정될 텍스트 사이에 두 개의 인접한 세미콜론을 둔다:

packz subject;;Geography 101

*

at 5:5

write The heading is <<a,subject>>.

write 명령어와 마찬가지로, packz는 몇 라인에 걸쳐 계속될 수 있다:

packz text2;;This is line one.

This is line two.

This is line three.

show 명령어는 write 명령어에 내장됨과 마찬가지로 packz 명령어의 텍스트 태그에 내장될 수 있다:

packz text;textlen;atomic weight of <<a,element>> is <<s,weight>>.

at 5:5

show text

showa가 packz 명령어에 내장되면, 내장된 변수의 널 문자 (0의 값을 가진 바이트)는 복사되지 않고 생략된다. 특정 어플리케이션에서 널 문자까지도 복사될 것을 요구하는 경우, showa 대신에 showv 명령어가 사용될 수 있다. showv 명령어는 showa 와 동일하게 작동하나 중요한 차이점은 널 문자까지도 packz 명령어에서 복사되거나 write 명령어에서 디스플레이된다는 것이다.

showv 명령어는 내장 형태 (약어<<v,>>)와 비내장 형태 모두를 가지나, 주로 packz 명령어에 내장된다.

선택형 (Selective Form)

packz 명령어는 packz라고 하는 선택형을 가진다. 보다 상세한 정보는 각각의 명령어 설명을 참조한다.

비수치 데이터 복사 (Copying Non-numeric data)

하나의 변수로부터 다른 변수로 비수치 데이터를 복사하는 가장 쉬운 방법은 move 명령어를 사용하는 것이며, 아래와 같은 일반적인 형태를 가진다:

move source, destination, length

source 정의된 변수 또는 문자

destination 정의된 변수

length 이동할 바이트수를 명시

아래의 예에서, 40-바이트 변수 "newname"을 변수의 콘텐트를 "oldname"으로 복사한다.

move newname,oldname,40

텍스트->숫자 변환 (Converting Text to Numbers)

compute 명령어는 숫자 문자 열(string)을 수치로 변환한다.

pack text; text1;-12345

compute text, text1, result

at 1:1

show result

일반적인 형태는 아래와 같다.

compute buffer,length,result

buffer 문자 열

length 변환할 문자수

result 결과를 저장할 변수

변환될 열은 아래의 항목들을 포함한다:

˙0에서 9까지의 숫자

˙단일 +와 - 문자 (양 또는 음부호)

˙소수점 한자리(점)

열내에 상기외 다른 문자들이 존재하는 경우 compute가 실패하며, -1보다 큰 zreturn 값에 의해 표시된다. 실패하면, compute는 "result"에 저장된 값에 아무런 변화를 주지 않는다.

arrow에서 입력으로부터 수치 정보를 추출하기 위해서는, store와 storen 명령어 설명을 참조한다.

변수 초기화 (Initialization of Variables)

일반적으로 저자-정의 전역 변수는 사용전에 초기화된다. 이것은 zero 명령어를 사용하여 프로그램의 시작 단위에서 주로 실행된다.

zero

zero세트의 가장 간단한 형태는 정의된 길이에 상관없이 zero에 단일 변수를 설정하는 것이다:

zero usename

다른 형태의 zero는 명명된 변수에서 시작하는 지정된 바이트수를 클리어한다.

zero scores,22

여기에서, "scores"에서의 시작에서 22바이트를 제로화한다. 바이트수를 클리어하기 위한 일반적인 형태는 아래와 같다:

zero variable,length

variable 개시점이 될 변수의 명칭

length 제로화할 바이트수

시작 단위는 변수에 값을 지정하기 전에 모든 전역 공간을 클리어한다. 이렇게 함으로써 과는 작업할 깨끗한 공간을 가지게 된다.

전역 변수 영역을 클리어함에 있어서, 시스템 변수 zvarsl은 전역 변수를 위해 저장된 총 바이트수를 제시한다 (정의되지 않은 공간 포함). "firstvar"이 처음 정의된 전역 변수인 경우, 아래의 명령어는 모든 전역 변수들을 제로화한다:

zero firstvar, zvarsl

"firstvar"이 처음 정의된 전역 변수가 아닌 경우, zvarsl 영역의 길이(바이트)는 전역 변수 공간의 말단을 초과하여 확장된다. 이런 경우, 상기 zero 명령어는 실행 에러의 결과는 가져온다.

지역 변수는 0에 명확하게 설정될 필요는 없다. 단위의 모든 지역 변수들은 단위의 실행이 시작되면 자동으로 제로화된다.

set

변수를 초기화하는 다른 방법은 set 명령어를 사용하는 것이다. 변수를 제로화하지 않는 대신에 set는 연속 변수에 일련의 값을 지정한다:

define local

jan ,1

feb ,1

. $$ 12개월

.

nov ,1

dec ,1

define end

set jan <= 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31

상기 예는 "jan"에 31을 지정하고, "feb"에 28을 지정하는 방법으로 계속된다. 12개의 calc 명령어와 동일한 효과를 가진다.

정상적인 형태의 태그는 아래와 같다:

set variable <= 값 목록

variable 제1값을 지정할 변수

value list 변수에 후속되는 위치에 지정된 후속값

set 명령어는 경계 점검을 실행하지 않는다: 후속 변수들이 정의되는 방법에 상관없이 값 지정은 태그에서 명명된 변수의 지정된 길이를 근거로 이루어진다. 상기 예에서, "jan" 은 1-바이트의 정수로 정의되어, set의 태그값이 "jan"으로 시작하는 12바이트에 지정될 수 있도록 한다. "jan" 바로 다음에 정의된 11개의 변수가 모두 1바이트가 아닌 경우, 예상된 값을 포함할 수 없다.

set 명령어는 선택형으로서 setc를 가진다. 보다 상세한 정보는 각각의 명령어 설명을 참조한다.

비교 및 검색 (Comparison and Searching)

compare 명령어를 사용하여 두 개의 변수들을 비교할 수 있다. 이 명령어는 두 개의 비교 열에서 부합되는 선두 문자의 수를 귀환시킨다.

define local

string1,26

string2,26

result,1

define end

pack string1;;abcdefghijklmnopqrstuvwxyz

pack string2;;abcDEFGHIJKLMNOPQRSTUVWXYZ

compare string1,string2,26,result

상기 예에서, "string1"은 "string2"와 비교되며 "result"는 부합되는 선두문자의 수에, 이 경우에는 'abc'를 위한 '3'에, 설정된다.

compare 명령의 일반적인 형태는 아래와 같다:

compare var1,var2,length,result

var1 비교할 변수들중 하나

var2 비교할 변수들중 다른 하나

length 비교할 바이트수

result 최종 부합 바이트의 위치에 설정. var1과 var2가 동일하면 -1에 설정되며, 부합되지 않으면 0에 설정된다.

find

find 명령어를 사용하여 특정 내용에 대한 변수를 검색할 수 있다.

define local

alphabet, 26

alphalen, 2

location, 2

packz alphabet;alphalen;abcdefghijklmnopqrstuvwxyz

find 'ef' ,2,alphabet,alphalen,1,location

상기 예는 'ef'열에서 변수 'alphabet'을 검색하여, 검색 영역에서 'ef'가 다섯 번째 바이트에서 시작하므로 변수 "location"을 "5"에 설정한다.

find 명령어의 일반적인 형태는 아래와 같다:

find object,object-length,start-var,list-len,incr,location

object 검색할 값으로서 문자, 변수 또는 버퍼일 수 있다.

object-length 바이트로 표시된 검색할 object의 길이

list-len 검색할 엔트리수. incr에 의해 명시되었듯이 엔트리는 1바이트 이상이다.

incr 각 엔트리의 길이

location object가 발견된 엔트리 번호. object가 발견되지 않으면, location은 -1에 설정된다.

예제 (Examples)

아래의 예제들은 아래의 변수들의 정의를 나타낸다:

define local

name ,15 $$ 검색할 명칭

found ,2 $$ "name"이 발견된 목록에서의 위치

list(5) , 15 $$ 명칭 목록

define end

변수"list"는 5개의 명칭을 가지며, 각각은 15문자를 점유한다. "list"의 콘텐트는 아래와 같다:

john millr...mark ho......sarah johnston,james heflin lisa berger

116314661

널(null) 문자는 가시도(visibility)를 개선하기 위해 제시되었으며, 숫자들은 바이트 계수를 지원하기 위해 추가되었다.

문자 오브젝트 (Literal Object)

아래의 find 문장은 mark ho라는 명칭을 검색한다:

find 'mark ho',7,list(1),5,15,found $$2가 검색될 것이다.

명칭은 9문자 이하이므로, 텍스트 문자 'mark ho'로서 제공될 수 있다. 검색할 오브젝트의 길이, 7문자가 후속된다. 목록의 시작은 list(1)와 각 15바이트인 5 엔트리의 길이로 지정된다.

검색 후에, mark ho가 목록에서 두 번째 위치(두번째 바이트가 아님)에서 발견되므로 변수 "found"는 값2를 가진다.

변수 오브젝트 (Variable Object)

8바이트 이상의 명칭은 텍스트 문자로 발생할 수 없으므로, 변수에 포함되어야 한다. 아래의 예들은 james heflin을 위치시킨다.

packz name;;james heflin

find name,15,list(1),5,15,found

변수 "found"는 james heflin이 4번째 위치에서 발견되므로 값4를 수신한다.

Byte-by-byte

최종 명칭을 검색하기 위해, 아래와 같은 find 명령어가 실행된다:

packz name;;miller

find name,6,list(1),75,1,found

상기 예가 실행되면, "found"는 값6을 수신한다.

명칭의 길이는 엔트리 전체가 아닌 엔트리의 부분을 위치시키므로 6으로 주어진다.

마찬가지로, 목록은 5개의 15-바이트 엔트리가 아닌 75개의 1-바이트 엔트리로 명시된다. 이렇게 하면, find 명령어를 이용하여 각 15-바이트의 명칭 필드의 시작이 아닌 모든 문자에서 시작하는 miller를 검색할 수 있다. 이것은 검색의 오브젝트가 검색을 위해 제공된 명목상의 엔트리 길이보다 길다는 것을 나타낸다.

엔트리에 의한 역행 (Backwards by Entry)

역행을 검색하기 위해, 증분에 음수값을 준다. 아래의 예제는 각 15-바이트 엔트리의 시작만을 검색하여 john에 대한 목록의 말단에서부터 역행을 검색한다.

find 'john',4,list(1),5,-15,found

여기에서, "found"는 값1을 수신한다. 검색이 목록의 말단으로부터 역행으로 진행되어도, 위치는 항상 목록의 시작으로부터 카운트된다.

바이트에 의한 역행 (Backwards by Byte)

역행 검색의 또 다른 예는 아래와 같다:

find 'john',4,list(1),75,-1,found

이 경우, -1의 증분이 사용되며, find 명령어는 목록의 말단에서 시작하는 모든 문자들을 검색한다.

이 경우, sarah johnston에서 역행 바이트 단위(byte-by-byte) 검색이 실행되면 최초 john이 발견되므로 "found"는 값 37을 수신한다. 검색이 정방향으로 실행되면, john miller 는 제일 먼저 발견되며, "found"는 값1을 수신한다.

리터럴 데이터 표시 방법 (Ways of Representing Literal Data)

calc 명령어와 기타 수치 맥락에서 사용되는 데이터는 몇가지 리터럴 형태로 표현된다.

literal 이라는 용어는 변수 또는 수식으로서 표현되지 않고 직접 표현되는 1-,2-,3-,4- 또는 8-바이트값을 위해 사용된다. 5, 6, 7바이트값은 리터럴 데이터로서 사용되지만 내부적으로는 8-바이트값으로서 표현된다.

정수 리터럴 (Integer Literals)

소수점 없이 숫자의 연속으로 작성된 유효 번호는 정수 리터럴이다. 정수 리터럴은 서두에 플러스 또는 마이너스 기호를 가진다.

실수 리터럴 (Real Literals)

실수 리터럴은 소수점에 의해 정수 리터럴과 구별된다. 소수점에 후속되는 숫자가 없는 경우에도, 소수점은 값이 실수값으로 표현되도록 한다.

텍스트 리터럴 (Text Literals)

텍스트 리터럴은 단일 따옴표내에 표시된 1에서 8까지의 문자열이다. 다수의 명령어들은 정식 명칭, 단위 명칭 또는 기타 블록명을 텍스트 리터럴로 작성되도록 한다.

image plot;'pictures','bird'

상기 image 명령어는 파일 화상내에 저장된 스크린 이미지인 bird 블록을 디스플레이한다. 텍스트 리터럴들은 내부적으로 항상 8바이트로 저장되며; 텍스트의 우측 말단의 미사용 바이트는 제로화된다. 다시 말하면, 텍스트 리터럴은 8바이트로 좌측 정렬 (left-justified) 저장된다.

텍스트 리터럴은 8바이트 길이를 가지므로, calc 명령어는 텍스트 리터럴을 8-바이트 변수로 지정하기 위하여 사용된다.

calc filename <= 'pictures'

변수는 8바이트 길이로 정의된다. 그보다 짧은 변수가 사용되면, 문자들은 텍스트 리터럴의 시작으로부터 상실된다.

문자 리터럴(Character Literals)

문자 리터럴은 일반적으로 이중 따옴표내의 단일 문자로 구성된다:

if name (2) = "a"

이러한 문자 리터럴은 내부적으로 단일 바이트로서 저장된다.

문자 리터럴은 calc:를 사용하여 정수-호환 변수로 직접 지정될 수 있다.

calc name(2) <= "z"

흔한 경우는 아니지만, 2내지 8문자열을 이중 따옴표로 묶어서 복수-바이트를 생성할 수 있다:

calc chars <= "abc"

이러한 리터럴은 항상 가능한 가장 작은 1, 2, 3, 4, 또는 8바이트로 저장된다. 리터럴이 5, 6 또는 7 문자를 가진 경우, 길이를 8바이트까지 반올림하기 위해 0값을 가진 바이트가 리터럴의 좌측 말단에 부가된다. 다시 말하면, 문자 리터럴은 가능한 가장 작은 1, 2, 3, 4 또는 8바이트로 우측 정렬(right-justified) 저장된다.

복수-바이트 문자 리터럴 (이중 따옴표로 표시됨)은 텍스트 리터럴 (단일 따옴표로 표시됨)을 대체할 수 없다. 정확한 사용법은 파일명과 단위명등의 모든 텍스트 리터럴에 단일 따옴표를 사용하며, 단일 문자는 이중 따옴표를 사용하는 것이다.

키누름 리터럴 (Keypress Literals)

최종 처리된 키를 보고하는 시스템-정의된 변수 zinput을 검토할 때, 키누름 리터럴을 주로 사용한다.

키누름 리터럴은 일반적으로 %"a"와 같이 %기호를 접두어로 가진 1-바이트 문자 리터럴이다. %기호는 1-바이트의 문자 리터럴을 zinput과 일치하도록 2-바이트의 내부 표기로 변경한다.

물론 다수의 기타 접두어들도 존재한다: %alt, %ctl, %altctl, %ctlalt (최종 두 개는 동일하다). 그러므로, 최종 키누름이 [CTRL][A]인지를 판단하기위해, 아래와 같이 쓸 수 있다.

if zinput = %ctl"a"

모든 키누름 리터럴은 내부적으로 2-바이트의 양수값으로 나타낸다. 상세한 포맷은 zinput의 설명에서 다루어진다.

16진법 리터럴 (Hexadecimal Literals)

16진법 리터럴에 대한 설명은 옵션으로 선택되는 고급 내용으로 간주되어야 한다. 이전에 16진법 숫자들을 사용한 적이 없다면, 이 정보는 필요없으며 상수 (Constants) 부분으로 바로 이동하기 바란다.

16진법 리터럴은 문자 h, 그에 후속되는 0-9까지의 숫자, 그에 후속되는 0또는 그이상의 숫자 0-9와 a-f의 16진법 숫자로 작성된다. (16진법 표기에서, 값 10-15는 문자 a에서 f로 표시된다)

아래는 유효한 16진법 리터럴이다:

h4 (equals decimal 4)

h20 (equals decimal 16)

h0f (equals decimal 15)

h2ec4 (equals decimal 7876)

hffff (equals decimal -1)

h다음의 첫 숫자는 0-9의 범위내에 있어야 하므로, hf는 유효 16진법 리터럴이 아니다. 16진법 값의 첫 숫자가 a에서 f중 어느 하나인 경우, 여분의 0이 h다음에 나타나야 한다:h0f.

16진법 리터럴이 우측에서 좌측으로 "역행" 평가되었다고 생각하면 유용하다. 리터럴의 숫자는 우측에서 시작하여 한쌍으로 판독되며, 각 숫자쌍은 값의 내부적 표기에서 하나의 바이트에 대응한다. 새로운 숫자쌍으로 인해 리터럴의 내부적 표기에 새로운 바이트가 추가된다. 또한, 리터럴의 좌측 말단에 남아있는 짝을 이루지 못한 숫자가 0이 아닌 경우에는 그로 인해 바이트가 추가된다. 리터럴의 좌측 말단에 남아있는 짝을 이루지 못한 숫자는 항상 폐기된다. 결과로 나타나는 내부 표기가 5, 6, 7바이트 길이인 경우, 8바이트로 확장하기 위해 값의 좌측에 0값의 바이트를 추가한다.

정수값으로서의 16진법 리터럴 (Hexadecimal Literals as Integer Values)

산출에 있어, 16진법 리터럴은 항상 정수값으로 간주된다. 16진법 리터럴을 변수에 지정할 때, 변수의 길이와 리터럴의 길이를 구분하는 것이 중요하다. 아래의 예를 보자.

define local

temp,4

define end

*

calc temp <= h91

여기에서, 1-바이트 리터럴의 값은 4-바이트 정수 변수로 지정된다. 리터럴의 이러한 정수 변수는 변수의 길이를 고려하기 전에 산출된다. 리터럴이 1바이트의 길이를 가지므로, 값은 바이너리값 10010001에 대응하는 h91이다. 가장 좌측의 비트가 '1'이므로, 값은 네가티브 숫자로 번역된다: 111. 이것은 변수 "temp"에 지정된 값이다. 2-바이트 리터럴 h0091 또는 4-바이트 리터럴 h00000091는 상이한 결과, 즉, 포지티브 숫자 145를 가져온다. 그러므로 16진법 리터럴의 길이에 유의해야 하는 것이다.

비트 패턴으로서의 16진법 리터럴 (Hexadecimal Literals as Bit Patterns)

경우에 따라서 비트의 특정 패턴을 실수 변수에 지정하기 위해 16진법 리터럴을 사용하는 것이 바람직하다. 이것은 산출과정에서 16진법 리터럴을 정수로 취급하여 정수값을 TenCORE에서 실수를 저장하기 위해 사용되는 IEEE 포맷으로 변환하므로 calc를 사용하여 실행될 수 없다. 수치는 유지되나 비트 패턴은 유지되지 않는다.

move 명령어는 16진법 리터럴을 수치 변환없이 비트 패턴으로 변수에 복사하기 위하여 사용된다:

define local

height,4, real

define end

*

move h7f800000,height,4

상기 예는 부정수 1/0에 대한 4-바이트 비트 패턴을 4-바이트의 실수 변수 "높이(height)"로 복사한다. 산출과정이 없으므로, 비트 패턴의 변환은 발생하지 않는다.

상수 (Constants)

상수는 문자 데이터의 명명된 항목이다. 상수는 = 기호를 사용하여 전역적 또는 지역적으로 정의될 수 있다:

a=1

greet='Hello'

정수 정의를 위한 일반적 구문은 name = literal이다. 상수에는 변수에 대해 유효한 모든 명칭을 부여할 수 있다. 상수 정의는 변수 정의가 발생하는 모든 지점에서 발생할 수 있다. 상수는 일단 정의되면, 그것이 나타내는 문자 데이터가 사용될 수 있는 모든 곳에서 사용될 수 있다.

define local

Picfile='pictures'

Picblock='fish'

Px=140

Py=100

define end

*

image plot;block,Picfile,Picblock;Px,Py

상기 image 명령어는 아래와 동일하다:

image plot;block,'pictures','fish';140,100

상수는 기타 변수들의 정의를 위해 정의된다:

MAXNAMES=20

name(MAXNAMES),20

age(MAXNAMES),2

address(MAXNAMES),40

상기 예는 길이 20의 3개의 배열을 정의한다. 모든 배열의 길이는 MAXNAMES의 정의를 변경함으로써 변경된다.

다수의 프로그래머들은 변수의 명칭과의 혼동을 피하기 위해 상수의 명칭에 있어 대문자를 사용한다.

동일한 규칙이 상수 정의에 사용된 리터럴에 적용된다. 상수는 값, 유형 (정수 또는 실수), 길이 (내부 표기에서 바이트수)를 가진다. 기타 문자 데이터처럼,산출에 있어서 상수를 사용할 때 모든 3개의 문자들이 고려되어야 한다.

연산자 (Opeators)

TenCORE는 리터럴, 상수, 변수를 수식으로 병합하기 위해 사용된 다양한 연산자를 지원한다. 또한, TenCORE는 여러 가지 산술 함수를 지원하며 저자들이 기타 함수를 정의하도록 메카니즘을 제공한다.

산술적 연산자 (Arithmetic Operators)

+ 더하기

<= 지정 (예: a<=b는 b값을 a에 지정하는 것을 의미함) [CTRL][C][A] 또는 [ALT][A]

- 빼기

* 또는 x 곱하기, 실수 산출 [CTRL][C][+]

$imul$ 곱하기, 정수 산출

/ 또는 ÷ 나누기, 실수 산출 [CTRL][C][/]

$idiv$ 나누기, 정수 산출

** 지수 (예., a**b는 a의 b승을 의미한다)

선행값을 도에서 라디안으로 변환 [CTRL][C][°]

논리 연산자 (Logical Operators)

논리 연산자는 수식들을 비교하고 참 또는 거짓에 대응하는 값을 귀환한다. 예를 들면, 아래와 같은 명령어 시퀀스는:

if 2 < 3

. write True

endif

2가 3보다 작으므로 참을 구성한다. 이것은 아래와 같은 질문을 배치하는 것과 동일하다:

참 또는 거짓: 2는 3보다 작다.

논리 연산자는 수식에서의 피연산자들을 비교하고 수식이 참이면 -1을 귀환하고 거짓이면 0을 귀환한다. 아래는 비표준 문자들을 입력하기 위해 사용되는 키 시퀀스이다.

= 같다 (피연산자가 동일하면 참이다)

≠ 같지 않다 (피연산자가 동일하지 않으면 참이다)

< 보다 작다 (좌측 피연산자가 우측 피연산자보다 작으면 참이다)

> 보다 크다 (좌측 피연산자가 우측 피연산자보다 크면 참이다)

보다 작거나 같다 (좌측 피연산자가 우측 피연산자보다 작거나 같으면 참이다)

크거나 같다 (좌측 피연산자가 우측 피연산자보다 크거나 같으면 참 이다)

$and$ 논리"and" (양쪽의 피연산자가 참이면 참이다)

$or$ 논리 "or" (한쪽의 피연산자가 참이면 참이다)

상기 연산자에 추가하여, not()는 괄호안의 연산자가 거짓이며 그 역도 성립할 때 참을 귀환한다.

논리 연산자의 피연산자는 수치가 아니어도 된다; 예를 들면, ASCII 문자도 서로 비교될 수 있다.

TenCORE에서, 참은 -1값으로 나타내고 거짓은 0값으로 나타낸다. 예를 들면, 일부 수식과 그들의 수치를 아래와 같이 나타낼 수 있다:

2 < 3 $$ -1을 귀환, 참

2 = 3 $$ 0을 귀환, 거짓

2 > 3 $$ 0을 귀환, 거짓

not (2 > 3) $$ -을 귀환, 참 (참은 거짓이 아님과 동일하다)

일반적으로, TenCORE는 음수값을 참으로 비음수값을 거짓으로 취급한다.

참과 거짓이 연관된 수치를 가지고 있으므로, 논리식은 명령어의 선택형에서 선택자로 사용된다:

writec 2<3;True;False

상기 예는 2가 3보다 작으므로 참을 도출하며, 수식의 결과는 그러므로 -1이다; 수식이 거짓이었다면, 수치는 0이 되었을 것이며 상기 예는 거짓을 도출하였을 것이다.

논리 연산자는 일반적으로 서로 병합되어 사용되나, 아래와 같이 산술 연산자와 함께 사용되기도 한다:

calc score <= score - (answer=correct)

* increments "score" by 1 if answer=correct

이것은 "answer"과 "correct"의 값이 서로 다르면 "score"를 변경하지 않는 효과를 가진다. 이것은 answer=correct값이 거짓(0)이 되고, "score"에 지정된 값이 score-(0)이기 때문이다. 그러나, "answer"과 "correct"값이 동등하다면, answer=correct는 참(-1)값을 가지며, "score"에 지정된 값은 score +1과 동일한 score-(-1)이다.

비트식 연산자 (Bitwise Operator)

비트식 연산자는 피연산자 각각을 수치가 아닌 비트 패턴으로 취급한다.

비트식 연산자와 그들이 실행하는 연산은 아래와 같다:

$mask$ Logical"AND". 결과의 각 비트는 대응하는 비트가 양쪽 피연산자에 설정된 경우에 설정된다.

union$ Logical"OR". 결과의 각 비트는 대응하는 비트가 한쪽 피연산자에 설정된 경우에 설정된다.

$diff$ Logical"Exclusive OR" 결과의 각 비트는 대응하는 비트가 피연산자들중 하나에 설정되고 다른 하나에는 설정되지 않은 경우에 설정된다.

$ars$ Arithmetic Right Shift. 제1 비연산자의 이 비트 패턴은 제2 피연산자에 의해 주어진 자리수만큼 우측으로 쉬프트된다. 가장 좌측의 (기호) 비트는 우측으로 이동하며, 우측 말단에 해당하는 비트는 폐기된다.

$cls1$ 1바이트의 Circular Left Shift. 제1 피연산자의 비트 패턴은 제2 연산자에 의해 주어지 자리수만큼 좌측으로 원형 쉬프트된다. 바이트 좌측 말단에서 쉬프트된 비트는 우측 말단에 나타난다.

$cls2$ 2바이트의 Circular Left Shift.

$cls3$ 3바이트의 Circular Left Shift.

$cls4$ 4바이트의 Circular Left Shift.

$cls8$ 8바이트의 Circular Left Shift.

예를 들면, $mask$, $union$, $diff$는 아래의 결과를 생성한다:

$mask$ $union$ $diff$

45 00101101 00101101 00101101

84 01010100 01010100 01010100

--------- --------- --------

121 00000100 01111101 01111001

그러므로, 45$mask$ 84는 4와 동일하며; 45 $union$ 84는 125와 동일하며; 45 $diff$ 84는 121과 동일하다.

비트식 연산자는 정수값와 유효 정수 크기 (1, 2, 3, 4 또는 8바이트)를 가진 비수치값에서만 연산되며, 실수값에는 적절하지 않다.

시스템-정의 함수 (System-Defined Functions)

TenCORE는 괄호에서 인수를 취하는 다수의 시스템-정의 함수를 지원하며, 삼각 함수, 대수 함수, 논리 함수, 산술 함수, 어드레스 함수등을 포함한다.

대수 함수 (Logarithmic)

alog(x) x의 진수 기수 10 (10의 xth거듭제곱)

exp(x) 상수 C의 xth거듭제곱)

In(x) x의 자연 대수

log(x) x의 대수 기수 10

logx(n,x) x의 대수 기수

부정 (Negation)

comp(x) 비트식 여집합 만들기. 피연산자 x내의 모든 비트들은 역전된다. ('1'을 포함한 비트들은 '0'으로 재설정되고 역으로도 재설정된다)

삼각함수 (Trigonometric)

acos(x) 호(Arc) 코싸인 (라디안 x)

asin(x) 호(Arc) 싸인 (라디안 x)

atan(x) 호(Arc) 탄젠트 (라디안 x)

cos(x) 코싸인 (라디안 x)

sin(x) 싸인 (라디안 x)

tan(x) 탄젠트 (라디안 x)

어드레스(Address)

absloc(v) 변수 v의 메모리내의 4-바이트 절대 어드레스

sysloc(global) 전역 변수 공간의 세그먼트 어드레스

sysloc(local) 현재 단위에 대한 지역 변수 공간의 세그먼트 어드레스

varloc(v) 변수에 대한 지역 또는 전역 변수 공간의 시작에서부터 오프셋

산술(Arithmetic)

abs(x) x의 절대값

bit(v,x) 변수v에서의 비트x의 논리값 (비트가 1이면 -1이다)

bitcnt(v,n) n비트의 범위에서 변수 또는 버퍼 V에 설정된 비트수

frac(x) x의 분수(우수리) 부분

imod(x,y) x를 법(法)으로한 y

int(x) 변수 x의 정수 부분

mod(x,y) x를 법으로 한 y

randi(x) 1에서 x까지 임의의 정수

randi(x,y) x에서 y까지 임의의 정수

randr(x) 0.0에서 x까지 임의의 실수값

randr(x,y) x에서 y까지 임의의 실수값

round(x) 가장 근접한 짝수 정수로 반올림한 x

sign(x) x가 음수이면 -1

x가 양수이면 0

sqrt(x) x의 제곱근

파이(3.14159265358979312)[CTRL][C][P]

수식의 값 구하기 (Evaluation of Expressions)

이 섹션에서는 TenCORE가 수식의 값을 구하는 방법에 대하여 상세히 설명할 것이다. 첫 번째 부분은 연산자의 우위(Precedence of Operators)로서 모든 저자들에게 유익한 내용이 될 것이다. 나머지 부분들은 실행의 최대 효과를 위하여 산출을 최적화하고자 하는 저자들을 위하여 옵션으로 제공된 정보들이다.

연산자와 함수의 우위 (Precedence of Operators and Functions)

TenCORE는 수식의 값을 구하는 데 있어서 연산자의 우위의 법칙을 준수한다. 수식 5+4*3은 연산자 *가 더하기 연산자 +에 대하여 우위를 가지므로 먼저 실행되어 27이 아니고 17이다. 즉, 이 수식은 9*3이 아니라 5+12이다.

괄호는 정상적인 순서보다 우선된다; 괄호안의 연산은 먼저 실행된다 (정상적인 순서에서). 결과로 산출되는 값은 수식에서 연관된 산출에 사용된다. 아래의 표는 TenCORE 연산자와 함수를 실행되는 순서대로 보여준다. 클래스 1은 클래스 2전에, 2는 3전에, 이런 방법으로 계속 실행된다.

1 지수(**)와 함수

2 단일 마이너스와 단일 플러스

3 곱하기와 나누기 (*,/,÷,$imul$,$idiv$)

4 더하기와 빼기 (+, -)

5 비트식 연산자 ($union$, $mask$, $diff$, $ars$, $cls1$, $cls2$, $cls3$, $cls4$, $cls8$)

6 비교 연산자 (=, ≠, <, >,,)

7 논리 연산자 ($and$, $or$)

8 각도->라디안 변환 (45° 에서와 같이 °)

9 지정 (<=)

우수리 처리 (Rounding)

정확히 .5인 우수리 부분을 가진 값을 우수리 처리하는 것은 항상 짝수 정수를 산출하는 결과를 가져온다. 다시 말하면 우수리 부분이 .5인 경우:

. 정수 부분이 홀수이면 올림

. 정수 부분이 짝수이면 내림

예제 (Example)

calc intvar <= 7.5 $$"intvar"은 값8을 할당한다

intvar <= 8.5 $$"intvar"은 값8을 할당한다

하위 수식의 압축 (Compression of Sub-Expressions)

하위 수식의 일부는 단위가 실행될 때가 아니라 바이너리 형태로 변환될 때 값을 구하고 압축된다:

calc ratio <= (4 + 5) / limit

하위 수식 (4+5)는 정수만을 가지므로 그 값은 프로그램이 실행되기 전에 이미 알수 있다. 그러므로, 명령어는 내부적으로 아래와 같이 나타낼 수 있다:

calc ratio <= 9 / limit

변환시에 값구하기와 압축을 위하여, 하위-수식은 아래의 사항들을 포함해야 한다:

. 4-바이트 또는 그 이하의 정수 리터럴

. 4-바이트 또는 그 이하의 정수 상수

. 연산자 + - $imuls$ $idiv$

다른 요소들을 포함한 하위-수식은 압축될 수 없다.

연산자 유형(Operator Types)

연산자 및 함수는 특별한 유형의 값, 즉, 실수 또는 정수에 대하여 배타적으로 작용한다. 비확인 값들은 작업이 실행되기 이전에 연산자 또는 함수에 의하여 예상되는 유형으로 내부적으로 변환된다.

실수값로 작용하는 연산자는:

* 실수 곱셈

/ 실수 나눗셈

** 누승법

° 각도->라디안 변환 (degree-to-radian conversion)

또한, 삼각법 함수, 지수 및 대수 함수, 및 int(), frac() 및 round()는 항상 실수값으로 작업한다.

이들 연산자 및 함수가 정수 피연산자로 사용될 때, 상기 피연산자는 우선 실수값으로 변환된다. 그 결과가 가변정수에 지정되거나 또는 정수값이 예상되는 명령에 사용되면, 그 결과는 다시 정수로 된다.

정수값 만으로 작업하는 연산자는:

$imul$ 정수 곱셈

$idiv$ 정수 나눗셈

또한, 논리 및 비트방식(bitwise) 연산자, 함수 imod(), not() 및 com()는 항상 정수값으로 작업한다.

이들 연산자 및 함수가 실수 피연산자를 사용할 때, 상기 피연산자는 우선 정수값으로 변환된다. 만일 그 결과가 가변 실수에 지정되면, 이는 지정 이전에 실수로 변환된다.

기타 연산자 및 함수는 실수 또는 양수값에 대하여 작업이 가능하며 내부 변환은 수행하지 않는다.

연산자 유형은 통상 프로그램의 실행 속도에만 영향을 미친다. 그러나, 실수값에 인가된 어떤 정수 연산자는 명시적인 변환을 염두에 두지 않으면 예상하지 못한 결과를 초래하기도 한다. 비트 방식 연산자는, 특히 comp()함수와 함께 실수값에 인가될 때, 중요한 결과를 유발하지는 않는다.

중간값 및 속도 최적화(Intermediate Values and Speed Optimizaton)

내부적인 표현방식은 그 결과의 정확도에 영향을 미치지 않으므로, TenCORE 저자(author)는 일반적으로 식의 값을 구하는 과정에서 사용되는 중간값이 내부적으로 어떻게 표현되는지를 알 필요가 없다. 그러나, 이 정보는 속도에 대한 산출을 최적화하는데 유용하다.

중간값은 향상 4-바이트 정수 또는 확장-정밀도-10-바이트 실수로 표현되며, 4-바이트 정수는 다음의 3가지 조건이 만족될 경우에 사용된다:

- 피연산자는 모두 실수가 아니다

- 피연산자는 모두 실수값을 요구하지 않는다

- 피연산자는 모두 4바이트보다 짧다

상기 조건 중 어느 하나라도 만족되지 않는 경우에는, 10-바이트 실수가 사용된다. 10-바이트 실수 계산은 4-바이트 정수 계산 만큼 오래 동안 수회에 걸쳐서 이루어지므로, 다른 (4-바이트) 정수 표현에서의 단일의 실수 피연산자는 그 연산 속도가 심각하게 떨어질 수 있다. 사실상, 이는 특히 수학 코프로세서(math coprocessor)가 존재하지 않는 다면, 특히 속도가 중요한 어플리케이션에서만 중요한 문제가 된다.

저자-정의 함수 (Author-Defined Functions)

저자-정의 함수란 이름이 명명되는 표현이다. 상수처럼, 함수는 =표시를 이용하여 정의된다.

pressure=weight/area

함수 정의에 대한 가장 간단한 구문은 name=expression 이다. 함수는 변수에 대하여 유효한 모든 명칭을 가질 수 있다. 함수 정의는 변수 정의가 발생되는 시점에서 발생될 수 있다. 일단 정의되면, 함수는 그것이 표현하는 것이 사용될 수 있는 모든 곳에서 사용가능하다.

독립변수(arguments)

함수는 독립변수로 정의될 수 있다:

fahr(xx) = 9 * xx/ 5 + 32

inrange (aa,bb,cc) = aa ≤bb $and$ bb ≤cc

상기에서 정의된 함수 "fahr()"는 섭씨온도(Celsius temperature)와 등가인 화씨온도(Fahrenheit temperature)를 제공한다. 이는 다음과 같이 사용될 수 있다:

write 15°celsius is <<s,fahr(15)>> Fahrenheit

함수 "inrange()"는 하나의 값이 2개의 다른 것들 사이에 있는지, 참 또는 거짓으로 귀환되는지를 결정한다. 이는 다음과 같이 사용될 수 있다:

if inrange(100, zinputx, 200) $and$ inrange(140,zinputy, 180)

. write Good! You pointed inside the box.

endif

이 예는 최종 포인터 입력(시스템 가변값 zinputx, zinputy에 의하여 부여됨)이 100,140 및 200,180에서 대향모서리가 있는 직사각형 영역내에 있었는지를 확인한다.

독립변수로 함수를 정의하기 위한 일반적인 구문은

name(arg1,arg2,..., argn)=expression 이다.

독립함수는 변수에 유효한 임의의 명칭을 가지나, 이미 정의된 변수의 명칭과 중복되지 않아야 한다. 많은 저자들은 변수 또는 상수 명칭과 충돌하는 독립함수 명칭의 유사한 사용을 최소화하기 위하여 aa, bb, 등과 같은 2글자를 사용한다.

저자-정의된 함수의 목적은 출처 코드를 읽기 쉽게 하고 변화를 단순화하기 위해서이다. 프로그램이 바이너리 형태로 번역되면, 함수에 대한 각 참조는 정의의 전체 길이에까지 확장된다. 이렇게 함수를 사용하는 것은 프로그램의 최종 크기 또는 유용성에 아무런 영향을 미치지 않는다.

상수로의 축소(reduction to Constants)

전체적으로 산출하여 압축 시간에서 압축가능한 임의의 정수값 함수는 상수로 축소된다 (이 장에서 전반부의 서브-표현 부 압축(Compression of Sub-Expressions Section) 참조). 그러므로 다음의 2가지 정의는 같다:

length = 4 + 256 + 128

length = 388

상수에 대한 함수의 간단한 축소는 특히 변수를 정의할 때에 유용하며, 이는 다음과 같은 구조로 만드는 것이 가능하기 때문이다:

define local

HEADER = 4

ENTRIES = 20

LENGTH = HEADER + ENTRIES

list(LENGTH), 1

define end

유형 및 길이(Type and Length)

문자, 상수 및 변수와 같이, 함수는 관련된 유형 및 길이가 있다. 이들은 상기 평가 표현을 위한 규칙에 따라 정해진다. 그러므로, 하나의 함수 값은 항상 4-바이트 정수 또는 8-바이트 실수이다. TenCORE는 자동적으로 필요한 유형의 변환을 수행하므로 사실상, 이것은 거의 중요하지 않다.

변수 공간의 물리적 할당 (Physical Allocation of Variable Space)

4장에서 언급된 전역 및 지역(global and local) 변수 사이의 특성 및 용도의 차이를 유지하도록, 이들은 컴퓨터(8) 메모리의 상이한 물리적 세그먼트내에 저장된다

전역 변수 저장 (Global Variable storage)

전역 변수는 TenCORE가 시작될 때에는 예약되고 TenCORE가 종료(exit)될 때에는 저장되는 메모리 세그먼트를 점유한다. 전역 저장에 사용되는 것은 단 하나의 메모리 세그먼트뿐이다. 각각은 블록을 정의하고 각각의 define global 문장은 이러한 단일 세그먼트가 시작되는 곳에서 시작되는 변수를 위한 저장을 할당한다.

상기 시스템-정의된 변수 zvarsl 은 전역 변수에 대하여 할당되는 메모리 세그먼트의 길이를 제공한다.

지역 변수 저장 (Local Variable Storage)

지역 변수는 이들이 정의되는 단위에 대한 특정 메모리 세그먼트를 점유한다. 각각의 단위는 그 자신의 개별적인 지역 저장 세그먼트를 가지며 이 세그먼트는 상기 단위가 액티브 상태 동안만 존재한다. 이 세그먼트는 단위의 실행이 개시될 때 예약되어 제로화된다. 상기 단위가 새로운 메인 단위에 분기되고, 상기 단위의 말단에 이르거나, 또는 return 또는 goto q를 통하여 종료되면, 상기 단위의 지역 변수에 대한 공간이 해제된다.

공간의 할당 (Allocation of Space)

한 세트의 전역 또는 지역 정의 내에, 연속적인 저장 바이트가 전역 또는 지역 세그먼트의 시작으로부터 순차적으로 개시되어 할당된다. 예를 들면,

2개의 시스템 정의된 기능은 메모리내에 변수의 위치를 복귀시킨다:

varloc()는 변수 공간(지역 또는 전역)내로 오프셋을 복귀시킨다.

absloc()는 컴퓨터 메모리내로 절대위치(absolute location)를 복귀시킨다.

at 5:5

write var1 byte <<s, varloc(var1)>>에서 시작

var2 byte <<s, varloc(var2)>>에서 시작

realvar byte <<s, varloc(realvar)>>에서 시작

username byte <<s, varloc(buffer)>>에서 시작

다음과 같은 상태에서, 저장 바이트는 스킵가능하다:

var1,2

,4

var2,2

여기에서, 4는 불사용된 4 바이트를 할당한다.

절대정의 (Absolute Definition)

변수는 다음의 포맷을 사용함으로써 절대 오프셋 (지역 또는 전역 공간의 시작으로부터, 적절히)에서 정의될 수 있다:

@오프셋, 명칭, 길이, 유형

여기에서 @표시는 변수가 구체적인 위치에서 시작됨을 나타낸다. 예를 들면:

@0,first,1 $$ first byte of variable space

@1000,name, 8, I $$ 8-byte integer at offset 1000

상기 변수 "first"는 다음과 같이 zero에서 zero 모든 전역 변수와 함께 사용될 수 있다.

zero first,zvrs1

절대 위치에서 "first"를 정의함으로써 (정의 블록에서 이를 제 1 위치에 단순히 위치시킴보다), 정의 블록에서 다른 변수 정의가 "first" 이전에 우연히 삽입되더라도 저자@는 zero 명령이 항상 전역 저장의 제 1 바이트로 시작됨을 보장하게 된다.

절대 정의 변수에 대한 오프셋은 확정된 상수로서 주어질 수 있다:

loc = 2000 $$ defined constant

@loc,xyz,r $$"xyz" starts at offset 2000

절대 정의의 사용은 절대 변수 정의를 사용하지 않는 최종 변수에 이어지는 후속 변수-할당의 할당에 영향을 미치지 않는다.

재정의(Redefinition)

재정의는 절대 정의와 매우 유사한 기술로서, 변수는 이전에 정의된 변수와 동일한 위치에 시작되도록 정의된다. 재정의는 다음의 포맷을 취한다:

@구명칭, 신명칭, 바이트, 유형

여기에서, @표시는 신명칭이 구명칭과 동일한 위치에서 시작됨을 나타낸다. 예를 들면:

username,40 $$ full user name

@username,userchar,1 $$ first character redefined/1-byte integer

이 예에서, 변수 "usercha"는 제 1 문자(및 아마도 전체 명칭)가 무효인지를 시험하기 위하여 if와 함께 사용가능하다:

if userchar = 0

. do getname

endif

절대 정의의 경우와 같이, 재정의는 후속 변수의 할당에 영향을 미치지 않는다: 할당은 재정의를 사용하지 않는 최종 변수에 이어서 연속으로 계속된다.

세그먼트 기법(Segmentation)

변수는 명칭으로 조회가 가능한 작은 조각 또는 세그먼트로 쪼개질 수 있다.

define local

systime ,4

. hours ,1

. minutes ,1

. seconds ,1

. hundr ,1

define end

clock systime

at 3:3

write time: <<s,hours>> hrs, <<s,minutes>> min, <<s.aeconds>> sec

상기와 같이 세그먼트된 "systime"으로써, 바이트는 집합적으로(clock 명령에서와 마찬가지로) 또는 개별적으로(write 명령에서와 마찬가지로) 조회가능하다.

세그먼트의 정의는 그가 속하는 변수의 정의에 후속되어야 한다. 제 1 위치에는 마침표(period)를 표시하며, 그 후에는 7개의 스페이스 문자(하나의 탭), 그리고는 세그먼트 명칭 및 크기를 표시한다.

세그먼트 기법은 디스크 작업을 위한 버퍼를 정의하는 데에 종종 이용되며, 여기에서는 항상 256-바이트 길이의 데이터를 사용한다.

record,256

. name,40

. response(64),1

. score,4

time,4

여기에서, "record"는 상기 세그먼트가 40 + 64 + 4, 또는 108 바이트만을 요구하더라도 전체 256 바이트를 예약한다. 이는 "time" 또는 다른 주변 변수에 영향을 미치지 않고 256-바이트 기록을 판독할 수 있도록 보장하기 위함이다.

이들 예에서 나타낸 바와 같이, 세그먼트는 세그먼트된 변수의 전체 크기까지 더해질 필요는 없으나, 이를 초과해서는 않된다.

세그먼트된 변수를 정의할 때에는 한 단계의 들여쓰기(indentation)만이 허용된다. 세그먼트가 서브-세그먼트로 더욱 분할될 필요가 있는 경우, 이는 세그먼트 기법 및 재정의로써 수행가능하다:

userid,20

. u.id1,10

. u.div,1

. u.id2,21

*

@u.id1,,10 $$ redefinition of u.id1

. u.id1.a,1

. u.id1.b,9

재정의된 변수에는 명칭이 부여되지 않았다. "xuid1"과 같이 독특한 명칭이 부여될 수도 있었으나, (서브-)세그먼트 "u.id1"에만 목적이 있었으므로 상기 명칭은 생략하는 것이 더욱 간편하다.

변수 명칭에 있어서 마침표(.)의 사용은 TenCORE에서는 특별한 의미가 없는데, 여기에서는 마침표를 기타 유효한 문자와 같이 취급하나 논리 구조에서 가시적으로 강조하는 바는 없다.

배열 세그먼트 기법 (Array Segmentation)

배열 세그먼트 기법은 개별적인(scalar) 변수의 세그먼트 기법과 유사하다. 그러나, 배열이 세그먼트 될 때, 배열에 크기가 부여되지 않더라도 각 세그먼트는 그 자체가 배열이다.

define local

systime(3)

. hours ,1

. minutes ,1

. seconds ,1

. hundr ,1

define end

*

clock systime(1)

clock systime(2)

clock systime(3)

*

write The three times are:

<<s,hours(1)>> hrs, <<s,minutes(1)>> min, <<s,seconds(1)>> seconds

<<s,hours(2)>> hrs, <<s,minutes(2)>> min, <<s,seconds(2)>> seconds

<<s,hours(3)>> hrs, <<s,minutes(3)>> min, <<s,seconds(3)>> seconds

변수 "systime(3)"은 3 요소를 갖는 배열로서 정의되었는데, 각각의 세그먼트 "hours", "minutes", "seconds" 및 "hundr"는 괄호안의 인덱스로 표시될 배열로서 취급된다.

특별 세그먼트 기법(Special Segmentation)

일부 경우, 특히 배열이 있는 경우, 변수의 정의된 길이를 초과하여 세그먼트하는 것이 바람직하다. 통상적으로, 이는 실행 이전에 프로그램이 컴파일되는 에러를 유발한다. 그러나, 키워드 special(약자 s)를 세그먼트 정의 뒤에 추가함으로써 원래의 변수 길이를 지나쳐서 세그먼트하는 것에 대한 확인이 생략된다. 변수 정의의 디폴트(default)는 이 키워드와 함께 사용될 수 없다: 유형 뒤에 추가되는 키워드 special 로써 길이 및 유형을 명시하여야 한다.

변수의 말단을 지나쳐서 이어지는 세그먼트 기법은 변수에 바이트가 추가 할당되지 않도록 한다. 특별 세그먼트가 정의된 후, 다음의 변수는 정상적으로 정의된 최종 변수의 다음 위치에서 시작된다.

혼합된 데이터 유형을 포함하는 데이터 영역을 어떻게 정의하는지 나타낸다: 2-바이트 정수 및 8-바이트 정수. 각 데이터편에는 다음과 같이 데이터 유형을 나타내는 단일 바이트가 접두어가 붙는다.

data,8192

@data,buf1(8192),1

. type1,1,i,s $$ prefix byte

. data1,2,i,s $$ access 2-byte words at any byte

@data,buf2 (8192),1

. type2,1,i,s $$ prefix byte

. data2,8,i,s $$ access 8-byte words at any byte

newvar,1 $$ starts 8192 bytes after "data"

$$ newar is overwritten by special segments

개별적인 엔트리(entry)의 시작 바이트를 앎으로써, 유형이 결정될 수 있고, 적절한 포맷에 데이터를 액세스하기 위하여 적절한 변수 명칭("data1" 또는 "data2")이 사용되었다. 다음 엔트리는 현재 엔트리의 길이(3 또는 9)만큼 배열에 인덱스를 증가시킴으로써 발견된다.

블록(Blocks)

세그먼트 기법과 유사하며 대용량에 적용가능한 기술이 변수 블록이다.

변수 블록 정의는 변수 공간의 구간을 예약한다. 스칼라 및 배열 변수는 변수 블록내에서 정의 및 세그먼트화 가능하다.

변수 블록을 정의하기 위한 정상적인 포맷은:

명칭, 크기, 블록이다.

여기에서, 명칭은 변수에 유효한 임의의 명칭이며; 크기는 블록을 예약하기 위한 바이트의 수이고; 블록은 변수 블록임을 나타낸다 (약자는 b).

다음의 예는 "diskio"라는 명칭의 256-바이트 블록을 정의한다:

diskio,256,block $$ 256-byte data area for disk input/output

,10 $$ 10 bytes unused

name,20 $$ user's name

date,6 $$ date of last use

time,4 $$ time of last use

. hours ,1

. minutes ,1

. seconds ,1

. hund ,1

score, 2 $$ most recent test score

status, 256,block $$ next block begins here

변수 블록이 일단 정의되면, 다음 변수 블록의 정의때까지 모든 후속 변수 정의는 상기 정의된 블록의 일부로 작용한다. 변수 블록내의 정의가 상기 블록에 대하여 예약된 것보다 많은 공간을 사용하게 되면 컴파일 에러가 발생한다.

변수 블록의 길이가 알려지지 않았을 때, 크기 독립변수(argument)는 공란으로 남겨둘 수 있다. 이 경우, 상기 변수 블록은 다음의 블록 정의때까지 후속으로 정의되는 모든 변수를 유지하는 데에 필요한 크기만큼 부여된다.

소스 파일 중 공유 정의(Sharing Definitions Among Source Files)

프로그램이 여러 소스 파일에 걸쳐서 퍼져있을 경우에는 전역 변수 정의가 각각의 파일에 부합되도록 주의를 기울여야 한다. 이는 통상적으로 하나의 파일내에 모든 전역 정의를 위치시키고, use명령으로 나머지 파일에는 상기 정의의 사본을 포함시키는 것으로써 이루어진다:

tax 1,globals(defines block)

lastname,15

firstnam,10

mi,1

stunum,9

p(64),1

score,4

tax 1a,globals(defines block)

use tax1,globals

tax 1b, globals(defines block)

use tax1,globals

상기 예에서, 파일 tax1, tax1a, 및 tax1b에 대한 모든 변수는 tax1에서 정의된다. tax1a 및 tax1b 내의 상기 use 명령은 tax1에서 이미 이루어진 정의의 사본을 포함할 뿐이다.

일부 정의 공유(Sharing Some Definitions But Not Others)

때로는, 사용되는 일부 변수를 소스 파일의 전체 세트로써 정의하고 기타 변수는 각각의 개별적인 소스 파일에 연결하는 것이 바람직하다. 모든 전역 변수에 대해서는 단 하나의 메모리 영역이 있으므로, 개별적인 소스 파일에 대한 변수들의 정의는 당연히 정의간 충돌을 피하여 이루어져야 한다. 이는 변수 블록 및 재정의의 조합을 사용함으로써 성취될 수 있다.

다음의 예는 tax1a 및 tax1b에서 정의된 변수를 추가함으로써 파일 tax1, tax1a 및 tax1b에 이러한 기술을 적용하는 것이다:

상기 예에서, 모든 3개 파일에 의하여 사용된 정의는 2048-바이트 변수 블록 "tax1a" 및 "tax1b"을 포함한다. 이들 변수 블록은 동일한 명칭의 소스 파일에 대하여 예약된 데이터 영역이다. 소스 파일 tax1a 및 tax1b은 명칭"ownvars"을 사용하는 자체 블록을 재정의한다. "ownvars"를 만듦으로써, 블록 변수는 tax1a 및 tax1b 내의 변수 정의가 그들에 대하여 예약된 영역을 벗어나서 확장되지 않도록한다.

기타 재정의된 변수와는 달리, 재정의된 블록 변수는 영구적으로 변수 할당에 영향을 미친다. tax1a가 "ownvars" 이후의 다른 블록을 정의하면, 이 블록은 tax1b에 정의된 변수와 충돌한다.

기타 메모리 세그먼트 액세스 (Accessing Other Memory Segments)

때로는, 지역 및 전역 변수 공간보다 메모리의 영역내에 저장된 데이터를 액세스하는 것이 바람직하다. 이는 transfr 및 exchang 명령을 사용하여 성취할 수 있다.

transfr

명령 transfr은 하나의 장소에서 다른 장소로 데이터를 이동하는 것으로, 다음과 같은 일반적인 형태를 갖는다:

transfr from-base-asddress,offset,;to-base-address,offset;length

from-base 및 to-base는 모두 다음의 키워드들중 하나이다:

- routvars,r

라우터 변수. 이는 transfr 및 exchang만을 통하여 액세스가능하며 특별한 구성을 가지지 않은 256-바이트 버퍼이다. 라우터 버퍼는 통상 과(lessons)로 사용되지 않는 데이터용 영역을 제공한다. 이러한 버퍼에 대한 하나의 공통적인 용도는 활동 관리자에 대하여 사용자 실행 데이터를 유지하기 위한 것이다.

- display,d

CGA 화면 디스플레이 메모리. 기타 디스플레이 유형 EGA(VGA, 등)에 대한 디스플레이 메모리는 transfr로써 액세스할 수 없다.

- global,g

전역 변수

- local,l

지역 변수

- sysvars,s

시스템 데이터 영역. 주의: 데이터 저장에 이 영역을 사용하지 말 것.

- sysprog,p

시스템 프로그램 영역. 주의: 데이터 저장에 이 영역을 사용하지 말 것.

- absolute,a

절대 메모리 위치

다음의 예는 라우터 변수를 지역 변수로 이전하여 학생의 싸인온 성명을 표시하는 것이다:

define local

localr,256

. info,8

. name,20

definea end

transfr routvars,o; local, varloc(localr);256

at 10:5

write The student name is <<a,name>>

exchang

명령 exchang는 명령 transfr과 유사하나, 2개의 메모리 영역을 스와핑한다.

다음의 코드는 2-바이트 변수 한쌍을 교체하기 위하여 명령 exchang를 사용한다:

if x1 < x0

. exchang g,varloc(x0);g,varloc(x1);2

endif

이는 다음과 등가이나 보다 단순하다:

if x1 < x0

. calc tempx0

x0x1

. x1temp

endif

절대 메모리 액세스(Accessing Absolute Memory)

상기 transfr 및 exchang명령은 또한 컴퓨터의 절대 메모리 어드레스에 액세스하는데에 사용가능하다. 이는 어드레스에 기초한 키워드 absolute를 사용함으로써 가능하다. 상기 오프셋은 4-바이트 정수 위치이다.

절대 메모리 위치로 또는 상기 위치로부터의 이전시 유용한 기능은 absloc()이며, 이는 변수 메모리 내의 절대 위치를 복귀시킨다. 이는 다음과 같이 라이브러리 루틴에 데이터의 위치를 전송하는 데에 종종 사용된다:

pack name;namelen;Wendell Oliver Holmes

library mclib,answer(absloc(name),namelen)

absloc()을 여기에 사용하는 것의 장점은 단위 mclib,answer가 지역 또는 전역 세그먼트내에 데이터가 있는 지를 알 필요가 없다는 것이며 - 이는 절대 메모리 위치로부터 직접 데이터를 복사할 수 있다.

절대 어드레스상의 기술적 노트(Technical Notes on Absolute Address)

상기 absloc() 기능은 연속적인 정수 범위에 걸쳐서 4-바이트 값을 복귀시키는 것이다. absloc() 값을 세그먼트로 변환하기 위하여: DOS 기능에 데이터를 통과시키는 데에 요구되는 오프셋 형태, 다음의 계산이 사용가능하다:

define local

temp ,4

segment ,2

offset ,2

define end

calc tempabsloc(myvar)

segmenttemp $ars$ 4

offsettemp $mask$ h00f $$ extra 0 required

이러한 계산은 최고 및 최저의 가능한 세그먼트 어드레스를 가져온다.

기존의 세그먼트로부터 이어지는 계산: 절대 정수 어드레스에 대한 오프셋 어드레스는 다음과 같다:

calc segmentsysloc(global) $$ or local, as appropriate

offsetvarloc(variable)

temp((segment $mask$ h0000ffff) $cls4$ 4)+

(offset$mask$hooooffff)

메모리 풀 액세스 (Accessing the Memory Pool)

데이터는 변수로부터 TenCORE 메모리 풀로 이전가능하다:

memory write, mempool, moffset, bigbuf, bufsize

write는 이전의 방향을 명기하는 키워드인 경우; "mempool"은 메모리 풀 블록의 명칭이며; "moffset"은 메모리 풀 블록으로의 오프셋이며; "bigbuf"는 이전이 개시되는 변수이며; 그리고, "bufsize"는 이전될 바이트의 수이다.

키워드 write는 변수 공간으로부터 메모리 풀로의 이전을 명기한다; read는 메모리 풀로부터 변수 공간으로의 이전이며; 그리고, exchange는 2개의 내용을 스와핑하는 것이다.

이러한 주제 또는 제 1 및 제 2 메모리 풀에 대한 기타 정보는 명령 memory을 참조한다.

명령 목록

영역(area)

포인터 입력 영역을 관리

-----------------------------------------------------------------------------

영역 키워드;...

define 포인터 영역을 정의함

highlight 하이라이트 유형 및 색채를 명기함

disable 현재 포인터 영역을 일시적으로 작동불능화함

enable 불능화된 포인터 영역을 재가능화함

clear 현재 포인터 영역을 삭제함

select 하나의 포인터 영역을 하이라이트함

save 명명된 메모리 블록에 현재 포인터 영역을 저장함

restore 명명된 메모리 블록으로부터 포인터 영역을 검색함

delete 명명된 포인터 영역 메모리 블록을 삭제함

reset 모든 명명된 포인터 영역 메모리 블록을 삭제함

toggle 토글 포인터 영역을 하이라이트하거나 하지 않음

inarea 하나의 위치가 포인터 영역내에 있는지를 결정함

dir 활동중인 포인터 영역 식별자 목록을 복귀시킴

key 명기된 키의 영역 식별자를 복귀시킴

info 포인터 영역에 관련된 속성을 보고함

repos 윈도우상에서 모든 포인터 영역을 재위치시킴

-----------------------------------------------------------------------------

설명 (Description)

화면의 정의된 영역 내에 포인터 입력을 용이하게 한다. 일단 하나의 포인터 영역이 정의되면, 상기 영역 내에서의 Click 또는 기타 포인터 활동은 키보드의 키가 눌러진 것처럼 구체적인 입력 값을 발생한다. 적절한 코딩은 하나의 flow 분기를 트리거하는 이러한 입력을 다른 단위에도 유발할 수 있고, pause를 중단시키며, 화살표 또는 기타 바람직한 활동에서 타이핑을 발생한다.

활동 중인 포인터 영역은 50개까지 존재할 수 있으며; 이 숫자는 /sa=명령 라인 선택으로 증가될 수 있다. 현재 정의된 포인터 영역의 수는 시스템 변수 zareacnt에 저장된다. zmaxarea는 허용된 최대 영역 수를 보유한다.

정의 area는 새로운 메인 단위로 jump 분기됨에 따라 삭제된다. 새로운 메인 단위에 대한 초기화 부분으로서, areas의 디폴트 세트가 구동된다. 정의 area는 윈도우가 열릴 때 저장되고 윈도우가 폐쇄될 때 종전의 상태로 복구된다, 그렇지 않으면 noarea가 window close 상에 사용된다.

포인터 영역은 상기 영역의 내외로 포인터가 이동됨에 따라 자동적으로 하이라이트되거나 하이라이트되지 않을 수 있다. 현재의 포인터 영역은 그들의 문자들과 함께 명명된 메모리 블록내에 저장가능하다; 이들은 상기 명명된 명칭을 사용함으로써 비구동 또는 재구동가능하다. 포인터 영역은 일시적으로 작동불능 및 작동가능으로 될 수 있다.

area define;[LOCATION];[LOCATION];[action=KEY, action=KEY...]

이는 직사각형의 영역을 정의하는데, 그의 대향 코너들은 2개의 위치에 의하여 명시되고, 이 내부에서 상기 리스팅된 임의의 포인터 활동은 입력키를 발생한다. 정의된 여러 활동 및 키 값을 갖는 포인터 영역은 이어지는 다음의 행으로 계속될 수 있다.

다음의 포인터 활동은 입력 값을 발생할 수 있다. 각각의 포인터 활동은 그의 키워드를 갖는다:

click= 임의의 포인터 버튼이 눌려짐

left=,right= 좌측 또는 우측 포인터 버튼이 눌려짐

clickup= 임의의 포인터 버튼이 해제됨

leftup=, rightup= 좌측 또는 우측의 포인터 버튼이 해제됨

add=, sub= 제 2 버튼이 눌려지거나 해제됨

enter=, exit= 포인터가 하나의 영역내에 도입되거나 상기 영역을 벗어남

만일 키워드 left 또는 right가 사용되면, click은 사용될 수 없다. 만일 leftup 또는 rightup이 사용되면, clickup은 사용될 수 없다. 만일 click=가 유일하게 명시된 활동이라면, 상기 키워드 click=는 생략가능하다.

KEY는 a,b,c,%fl, 등과 같은 임의의 정상적인 키 값 또는 의사-키(pseudo-keys)%input1-999 중의 하나로 될 수 있다.

실시예1

10:20; 11:30으로 정의된 영역 내에 버튼이 클릭될 때 값 %enter를 입력한다. 이 경우, 키워드 click=는 선택적이다 (click=%enter). 다음의 명령 flow 과 결합되어, 입력 area은 단위 nextunit에 jump된다.

area define; 1:20; 11:30; %enter

flow jump; %enter; nextunit

실시예2

좌측 버튼이 눌려지면 값 %"L"을 입력하고, 우측 버튼이 눌려지면 값 %"R"을 입력한다.

area define; 100,200; 300,250; left=L, right=R

실시예 3

포인터가 5:3; 6:10으로 정의된 영역 내에 들어올 때에는 의사-키 %input999를 입력한다. 상기 영역 내에서 좌측 버튼이 해제되면, %f10가 발생한다.

area define; 5:3; 6:10; leftup=%f10, enter=%input999

실시예4

포인터 영역으로서 전체 화면을 정의한다. 우측 버튼을 클릭하면 의사-키 %other가 입력된다.

area define; ; ; right=%other

실시예 5

2행에 걸친 10:10, 30 문자로부터의 직사각형 영역을 정의한다. 포인터 버튼 클릭은 상기 %f1 key를 입력한다.

at 10:10

area define; 30,2; ; click=%f1

실시예 6

고정된 또는 가변 공간을 허용하는 텍스트 "Topic 1:Introduction" 주변에 직사각형 영역을 정의한다. 이 영역 내에서의 클릭은 %"1"을 입력한다.

at 15:10

write Topic 1: Introduction

area define; 15:10; zx, zy+zfonth; click=%"1"

실시예 7

2개의 행에 걸쳐 계속된다

area define; 200,150; 400,170; left=a, right=%home,leftup=b,

rightup=<<h01>> , enter=%input1, exit=%input255

area

define;[LOCATION];[LOCATION];[action=KEY,action=KEY...][;modifier;

modifier...]

수정자(Modifier)

다음의 수정자는 area define 문장으로써 선택적으로 사용할 수 있다. 임의의 수의 수정자가 사용가능하며 이들은 임의의 순서로 리스팅가능하다. setid 및 getid는 상호 배타적이다.

디폴트(default) 모든 후속의 메인 단위에 대하여 활동중인 포인터 영역을 보존함 (통상적으로, 화면을 지우는 새로운 메인 단위에 대한 분기는 모든 포인터 영역을 삭제함). Default Area Highlighting 참조.

우선순위(priority) 중복되는 영역에 대하여 우선권을 설정하기 위하여 1 내지 15의 우선순위를 지정함. 레벨 15가 최고 우선순위임. 만일 우선순위가 설정되지 않으면, 상기 영역은 레벨 0으로 지정됨. 포인터 활동인 2 이상의 중복 포인터 영역 내에서 발생되는 경우, 최고 우선순위 영역은 우선권을 가짐. 중복되는 포인터 영역이 동일 레벨인 경우, 최종적으로 정의된 영역이 우선권을 가짐.

getid 포인터 영역이 정의될 때 시스템에 의하여 자동적으로 발생되는 독특한 2-바이트 포인터 영역 식별자를 보유하는 변수를 명기함. 시스템 발생된 식별자는 항상 -32,768과 -1 사이의 음수임. 상기 식별자(ID)는 영역 명령의 형태로 구체적인 영역을 명시하며, 시스템 변수 zinputa에 복귀됨.

setid 포인터 영역의 독특한 식별자가 되는 수를 명기함. 저자-명기된 식별자는 시스템-발생된 식별자간에 발생가능한 마찰을 피하기 위하여 1 및 32,767 사이로 되어야 함. 그의 식별자가 기존 포인터 영역의 식별자와 동일한 포인터 영역의 정의는 기존 포인터 영역을 재정의하는 결과를 초래함. 상기 ID는 영역 명령의 형태로 구체적인 영역을 명시하는 데에 사용되며 시스템 변수 zinputa내에 복귀됨.

실시예 1

포인터 영역 정의는 새로운 메인 단위를 도입함에 따라 하나의 디폴트 영역이 된다. 상기 영역은 변수 areaID내에 수신된 ID를 사용하여 이후에 조회가능하다.

area define; 5:10; 10:25; left=b,right=B; default;getid,areaID

실시예 2

직사각형 영역 내에서 버튼이 눌려질 때에는 의사-키 %입력1을 입력한다. 상기 영역은 구체적인 ID값 1로써 조회가능하다.

area define; 100:100; 200:110; %input1; setid,1

실시예 3

포인터가 직사각형 영역 내에 들어올 때에는 16진 값 7000을 입력한다. 보다 낮은 우선순위 레벨을 갖는 임의의 다른 포인터 영역이 이 영역 상에 중첩되면, 최대 우선 순위 레벨이므로 이 레벨이 우선권을 취한다.

area define; 140:150; 450:200; enter= <<h7000>>; priority,15

area highlight:COLORoff[;xor][tracktoggle]

모든 후속 포인터 영역에 대하여 하이라이트된 색상을 제어한다. 영역 하이라이팅은 디폴트로 해제된다. 단일의 area highlight 문장은 종전에 정의된 포인터 영역을 제외한 모든 후속 area define 문장에 영향을 미친다. 하이라이팅은 initial 문장에 의하여 off 되도록 재설정된다.

시스템 변수 zareahl은 현재의 하이라이트된 영역 (또는 하이라이트 된 영역이 없는 경우에는 0)의 영역id를 보유한다.

소정 색의 하이라이팅은 화면 영역에 걸쳐 배타적-or(XOR) 모드에서 박스를 플로팅(plotting) 및 채색함으로써 생성된다. 화면 영역의 상부-좌측의 픽셀은 바람직한 하이라이트 색으로 화면을 XOR 할 박스 색을 결정하는 데에 사용된다.

수정자(Modifiers)

다음의 수정자는 색상이 구체화된 경우에만 area highlight 문장으로써 선택적으로 사용가능하다. track 및 toggle는 상호 배타적이다.

xor 명기된 색으로 화면을 직접 XORing함으로써 포인터 영역이 하이라이트됨을 명기함.

track 하이라이팅을 작동가능하게 하는 다른 영역 내에 포인터가 도입될 때에만 영역을 하이라이팅함.

toggle 자동 영역 하이라이팅을 작동불능으로 하고 저자-제어된 하이라이팅을 허용함(area toggle 참조)

디폴트 영역 하이라이팅(Default Area Highlighting)

디폴트 영역이 활성중이고 메인 단위가 jump-유형의 분기를 통하여 도입될 때, 영역 하이라이팅은 다음 중 하나의 상황이 발생되기까지는 발생되지 않는다:

- 분기 명령이 수행됨(loop,jump,jumpop,branc,doto,goto)

- 시스템으로부터 입력이 요구됨 (pause,arrow,nextkey,delay)

- 단위의 마지막에 도착함

- 오랜 실행 시간이 걸리는 명령이 수행됨(image,fill)

- 키워드 area,pointer 및 break를 수반하는 enable 명령

이들은 포인터 위치가 하이라이트 된 영역에 막 도입되거나 상기 영역으로부터 막 종료되었는 지를 알아보기 위하여 확인되는 바와 동일한 지점에 있다.

이러한 딜레이는 저자 시간으로 하여금 하이라이팅이 바람직한 화면상에 디스플레이를 할 수 있도록 한다. 분기가 요구되거나 또는 새로운 화면을 구성하기 전에 입력이 요구되는 경우, 저자는 하이라이팅을 작동불능화하기 위하여 disable area 문장을 우선 발생해야 한다. 화면을 구성한 후에는 enable area가 켜져서 임의의 하이라이팅이 가능하다.

실시예1

red+하이라이팅 영역을 생성한다. XOR 색상 조회를 위하여 상기 영역의 우측 상부 모서리를 이용한다. 따라서, 250,320 (상기 영역의 좌측 상부)에서 픽셀의 색상은 red+를 생성하기 위하여 상기 영역을 XOR할 색상을 결정하는 데에 사용된다.

area highlight; red+

area define; 250,300; 400320; click=%f10

실시예 2

모든 후속의 정의된 포인터 영역에 대하여 하이라이팅을 턴-오프한다.

area highlight; off

실시예 3

후속의 정의된 포인터 영역을 청색으로 XOR한다. 이 영역은 포인터가 영역내에 도입될 때 하이라이트되나, 다른 영역에 도입될 때까지는 하이라이트 되지 않는다.

area highlight; blue; xor; track

실시예 4

자동 영역 하이라이팅을 작동불능화한다. area toggle는 이러한 영역들을 하이라이팅하는 데에 사용가능하다.

area highlight; white; toggle

area diable[; areaID/s][;noplot]

명기된 식별자를 갖는 포인터 영역을 일시적으로 작동불능화한다. 키워드 disable은 단독으로 모든 정의된 영역을 일시적으로 작동불능화한다. 작동불능된 포인터 영역은 더 이상 포인터 입력 또는 하이라이트를 생성하지 않는다. 작동불능시 포인터 영역이 하이라이트되는 경우, noplot 수정자가 없으면 하이라이팅은 턴-오프된다.

실시예 1

변수 idvar내에 식별자가 포함되어 있는 포인터 영역을 작동불능화한다. 포인터 영역이 현재 하이라이트되어 있는 경우, 이것은 그대로 둔다.

area disable; idvar; noplot

실시예 2

식별자가 1 및 2인 포인터 영역을 작동불능화한다.

area disable; 1,2

실시예 3

모든 포인터 영역을 일시적으로 작동불능화한다.

area disable

area enable[; areaID/s]

area disable로 종전에 작동불능화된 포인터 영역을 작동가능화한다.

실시예 1

배열 요소 영역ID(1), 영역ID(2) 및 영역(3)내에 식별자가 포함되어 있는 포인터 영역을 작동가능화한다.

area enable; area ID(1), areaID(2), areaID(3)

실시예 2

모든 포인터 영역을 작동가능화한다.

area enable

area clear[;[areaID/s][; noplot][; default]

영역 식별자와 함께 사용된 경우, clear는 명기된 포인터를 제거한다. 영역 식별자와 없이 사용되는 경우, clear는 모든 영역을 제거한다. 영역들은 작동불능여부와 무관하게 클리어된다.

클리어될 때 포인터 영역이 하이라이트되는 경우, noplot가 사용되지 않으면 이러한 하이라이팅은 턴-오프 된다.

default 수정자로 설정된 임의의 영역 정의를 삭제하기 위해서는 수정자 default가 사용된다.

실시예 1

변수 ID1 및 ID2에 식별자가 포함되어 있는 포인터 영역을 삭제한다.

area clear; ID1, ID2

실시예 2

모든 포인터 영역을 삭제한다. 이어지는 jump 분기는 임의의 단위 default 포인터 영역을 복구한다.

area clear

실시예 3

전체 화면으로부터 모든 포인터 영역을 삭제하며, 하이라이트는 on 상태로 둔다. 윈도우가 폐쇄되면 임의의 종전 영역을 복구한다.

window open; 100,100; 300,300

area clear; ; noplot

...

window close

area select; areaIDpointeroff

식별자로써 명기되거나 또는 현재 포인터 하에 있는 영역을 하이라이트한다. off가 명기된 경우, 임의의 하이라이트된 영역이 턴-오프된다. select는 toggle 하이라이트 영역으로써 작업하지 않는다.

한번에 단 하나의 영역만을 하이라이트한다; 종전에 하이라이트된 임의의 영역은 턴-오프된다.

실시예 1

변수 aID에 식별자가 포함되어 있는 영역을 하이라이트한다.

area select; aID

실시예 2

임의의 하이라이트된 영역을 턴-오프한다.

area select; off

실시예 3

윈도우 개방이전에, 모든 영역을 작동불능화한다. 이는 계속되던 임의의 하이라이트를 턴-오프하게 된다. 윈도우 폐쇄이후, 상기 영역들은 다시 작동가능화되고 포인터 하의 임의의 영역이 하이라이트된다.

area disable $$ turn off areas and highlight

window open, 100,.100;300,300

...

window close

area enable $$ turn areas on again

area select;pointer $$ highlight if pointer on area

area save;'NAME'local

area save;default

메모리 풀 블록 또는 default 버퍼 내에 현재 영역 정의 세트를 저장한다. 명칭은 텍스트 문자 또는 변수에 포함된 것으로 할 수 있다. 명명된 블록은 후에 임의의 단위에 복원가능하다.

local 키워드는 현재의 단위에 특유한 메모리 풀 블록 내에 영역 설정을 저장한다. 지역 블록은 이를 저장한 단위 내에서만 복구가능하다; 이는 상기 단위 실행의 종료시 자동적으로 삭제된다.

default 버퍼에 현재의 영역 설정을 저장하는 것은 이들로 하여금 모든 새로운 단위에 대한 디폴트 area 설정을 하게 한다. 이들은 다른 단위로의 jump상에 자동적으로 재설정된다.

메모리 풀은 다음의 명령으로 사용된다; memory,image,window, status.area, flow, font 및 perm. 메모리 블록은 작성(creation)시 특유의 명령 타입에 속하는 바대로의 태그가 붙으며 상기 메모리 풀을 사용하는 다른 명령에 의하여 액세스가능하다; 상이한 명령들이 충돌없이 메모리 블록에 동일한 명칭을 사용할 수 있다.

실시예 1

명명된 메모리 블록 level1에 현재의 포인터 영역을 저장한다.

area save; 'level1'

실시예 2

변수 areavar에 포함된 명칭을 사용하는 현재의 포인터 영역을 저장한다.

area save; areavar

실시예 3

실행중인 단위 특유의 메모리 풀 블록 내 서브루틴에 대하여 액티브 플로우(flow) 세팅을 저장 및 복구한다. 상기 블록은 상기 단위가 종료될 때 자동적으로 삭제된다.

area save; local

do routines,graph

area restore; local

실시예 4

현재의 영역 설정으로 하여금 jump 분기에 의하여 도입된 모든 후속 단위에 대하여 디폴트를 설정하도록 한다.

area save; default

area restore:'NAME'local[;delete][;noplot]

area restore;default[;noplot]

종전에 저장된 세트로 현재 영역 세팅을 대체한다. 선택적으로, 명명된 또는 지역 블록은 delete 수정자를 사용함으로써 메모리 풀로부터 삭제가능하다.

noplot 수정자를 사용하지 않으면 저장시 하이라이트되는 영역은 복구시에도 하이라이트된다.

실시예 1

라이브러리 콜에 걸쳐서 현재 영역 설정을 저장 및 복구한다. 복귀에 따라 라이브러리 루틴은 호출 프로그램에 영향을 미치지 않고 바람직하게 활동중인 영역 설정을 변경한다.

area save; 'areas'

library routines, graph

area restore; 'areas'

실시예 2

실행 단위 특유의 메모리 풀 블록에 서브루틴 호출에 걸쳐서 액티브 플로우 설정을 저장 및 복구한다. 상기 단위가 종료할 때 상기 블록은 자동적으로 삭제된다. 하이라이트 상태는 복구되지 않는다.

area save; local

do routines,graph

area restore; local; noplot

실시예 3

포인터 영역의 단위 디폴트 세트를 복구한다.

area restore; default

area delete; 'NAME'local

현재의 포인터 영역 정의에 영향을 미치지 않고 상기 메모리 풀로부터 저장된 포인터 영역 세트를 삭제한다.

실시예

명칭 menu하에서 저장된 영역을 메모리로부터 삭제한다.

area delete; 'menu'

area toggle; areaID

식별자가 명기된 포인터 영역을 하이라이트하거나 또는 하이라이트하지 않는다. 이러한 키워드 옵션은 toggle 포인터 영역에 대해서만 작동한다(area highlight에 의하여 설정된 바와 같이). 이는 포인터 영역의 하이라이팅에 대하여 전반적인 제어를 원하는 저자에 의하여 의도된다. area select와는 달리, 1 이상의 포인터 영역이 하이라이트가능하다.

실시예

식별자가 변수 cID에 포함된 포인터 영역을 하이라이트한다.

area toggle; cID

area inarea: LOCATION; areaID

명기된 위치가 포인터 영역 내에 있는지를 결정한다. 포인터 영역 내에 있는 경우, 상기 영역의 식별자는 변수 areaID에 들어간다. 만일 상기 위치가 다중 영역 내에 있는 경우, 최고 우선순위 영역 또는, 레벨이 동일한 경우에는, 최종적으로 정의된 영역이 우선권을 갖는다.

상기 위치가 아무 영역에도 포함되지 않은 경우에는 변수가 0으로 설정된다.

실시예

whichID를 1로 설정하고, 상기 식별자는 우선순위 15인 포인터 영역에 속한다.

area define; 90,100; 120,160; click=%space;

priority, 15; setid, 1

area define; 90,100; 120,160; click=%home;

priority, 6; setid, 2

...

area inarea; 100,155; whichID

area dir;idBuffer [;length]

모든 활성 포인터 영역의 식별자를 복귀시킨다. 포인터 영역의 최대수를 보고하기 위하여, 상기 영역 식별자 버퍼는 길이 zmaxarea*2 바이트로 되어야 한다.

실시예

배열 버퍼id내에 모든 현재 액티브 포인터 영역의 영역 식별자를 복귀시킨다.

define local

id(50),2 $$ use system default for array length

define end

...

area dir; id(1); 2*zareacnt

area key; KEY; areaID

포인터 활동 리스트 내에 명기된 키를 포함하는 포인터 영역 식별자를 복귀시킨다. 2개 영역이 상기 명기된 키를 리스팅하면, 최고 우선순위 영역의 식별자가 복귀된다. 상기 영역이 동일한 우선 순위를 가지면, 최종적으로 정의된 포인터 영역의 식별자가 복귀된다.

area info; areaID; infoBuffer48

작동가능화된 포인터 영역의 속성을 명기된 버퍼내에 복귀시킨다. 상기 포인터 영역은 그의 식별자를 제공함으로써 선택된다. 48-바이트 버퍼의 구조는 다음과 같다:

실시예

식별자가 변수 ID2내에 영역으로부터의 정보를 판독하여, areadata라 명명된 버퍼에 보낸다.

define info; ID2; areadata

이 문장이 실행될 때 윈도우가 액티브하면, 명기된 좌표는 현재의 윈도우에 비례한다.

area repos; xOffset,yOffset

모든 포인터 영역을 명기된 절대 화면 치수로 조정한다. 하나 이상의 윈도우가 개방되어 있는 경우, 현재의 윈도우가 개방된 동안에 작성된 영역에 대해서만 작동한다.

실시예

모든 포인터 영역을 좌측 20 픽셀 및 100픽셀까지 이동한다.

area repos; -20,100

시스템 변수 (System Variables)

zreturn

메모리 풀에 사용되는 area 명령의 save, restore, reset 및 delete 형태들은 zreturn내에 성공 또는 실패에 대하여 보고한다. 또한, select 및 toggle 형태는 zreturn을 통하여 에러 조건을 보고한다. 기타 모든 형태들은 zreturn을 ok(-1)로 설정한다. 주요 zreturn 값은 다음과 같다:

-2 반복 작업; 영역은 이미 설정된다

-1 성공적인 작업

10 확인되지 않는 명칭

11 무효한 하이라이트 유형의 선택 또는 토글

18 메모리 풀 요구를 충족시킬 수 없음

기타(Miscellaneous)

zareacnt 현재 정의된 포인터 영역의 수

zareahl 현재 하이라이트된 영역의 area id (기타 0)

zinputa 현재 zinput 값을 유발하는 영역의 area id (기타 0),

zinput가 업데이트될 때 설정됨.

zmaxarea 정의가능한 영역의 최대 수

asmcall

변수에 로드된 어셈블리 언어 루틴을 호출함.

-----------------------------------------------------------------------------

mcall buffer [,variable]

buffer 루틴이 로드되는 변수를 시작함

buffer 명기된 변수의 오프셋을 레지스터 BX에 보냄

-----------------------------------------------------------------------------

지역 또는 전역 변수에 로드된 어셈블리 언어 루틴을 호출함. 세그먼트 레지스터 DS는 변수의 시작을 가리킨다. 선택적인 variable이 사용되는 경우, 레지스터 BX는 variable의 오프셋을 설정한다. 그 결과: DS[BX]는 제 2 태그에서와 같이 목록의 변수를 가리킨다. 원거리 return은 TenCORE에 컨트롤을 복귀하기 위하여 상기 루틴의 말단에서 수행되어야 한다. AL 레지스터의 값은 TenCORE 시스템 변수 zreturn에 복귀된다.

어셈블리 언어 루틴은 임의의 마이크로프로세서 레지스터를 변경할 수 있으나, 변경되면, SS 및 SP는 TenCORE에 복귀되기 이전에 원래 값으로 복구되어야 한다.

어드레스(Addresses)

다음의 시스템-정의된 기능 참조는 asmcall로써 종종 유용한다:

sysloc(global) 전역 변수의 세그먼트 어드레스

sysloc(local) 현재 단위의 지역 변수의 세그먼트 어드레스

varloc(variable) variable의 오프셋 어드레스

absloc(variable) 메모리 내의 variable의 절대 위치, 세그먼트 없이 4-바이트 오프셋으로서 표현됨. 이는 다음과 같은 세그먼트:오프셋 어드레스에 해당함: segment=absolc() $ars$4 offset=absloc() $mask$ hOf

세그먼트 및 오프셋을 가지고 있으며 절대 위치로 변화하고자 할 rudd, 다음의 계산을 이용한다:

absloc=((segment $mask$ h0000ffff)$cls4$)+(offset $mask$ h0000ffff)

실시예

바이트내에 비트를 예약한다.

*

define global

asmbuff(12),1 $$ 어셈블리 언어 프로그램용 버퍼

asmdata ,1 $$ 예약할 정수 바이트

define end

*

* 방향 실행에 의하여 짧은 어셈블리 언어 루틴을 로드

*

* DS:BX 포인팅으로 TenCORE에 루틴 시작

* 변수 "asmdata". 프로그램 로드 및 예약

* 바이트를 asmcall 이후 레지스터 AL에 남겨둠

* zreturn은 AL에서 좌측값에 설정됨

*

* 여기에서 사용되는 설정 명령은 프로그래머로 하여금 ...하도록 허용함.

* 어셈블러에 대하여 사용될 수 있는 구조를 모방함

* 프로그래밍

*

set asmbuff(1) $$ mirror proc far

h8a, h27 $$ mov 모, [bx] ; fetch byte

h0b9, h08, h00 $$ mov cx, 008 ; shift 8 bits

*

* $$ mirrori:

h0d0, h0ec $$ sh rah,01 ; LSB을 CF로 이동

h0d0, hd0 $$ rcl al,01 ; CF를 AL로 이동

h0e2, h0fa $$ loop mirror1

*

h0cb $$ retf ; far return

* $$ endp

*

calc asmdata h55 $$ 비트 역전 데모용 시험값

asmcall asmbuff(1), asmdata $$ 데이터를 지적하는 호출 루틴

at 4:4

write 원점값 = <<h,asmdata>> hex

역전값 = <<h,zreturn>> hex

시스템 변수(System Variable)

zreturn 복귀시 AL 레제스터의 값을 보유함.

at/atf

화면 위치 및 텍스트 마진을 설정한다.

-----------------------------------------------------------------------------

at [LOCATION][;LOCATION]

-----------------------------------------------------------------------------

설명

태그에 제 1 LOCATION에 현재 화면의 X-Y 위치 및 좌측 텍스트 마진을 설정한다. 시스템 변수 zx, zy 및 zmargin은 이러한 새 위치로 업데이트된다. 문자 좌표가 at 위치를 명기하는 데에 사용되는 경우, 상기 zx 및 zy 시스템 변수는 상기 문자 셀의 좌측 하위 그래프 좌표를 포함한다.

우측 텍스트(text) 마진 (우측 화면 또는 윈도우 경계에 초기에 설정된)은 제 2 LOCATION을 명기함으로써 설정가능하다. 우측 마진은 시스템 변수 zrmargin에서 발견된다. 우측 마진에 닿는 텍스트는 자동적으로 좌측 마진쪽으로 보내진다. 가용한 텍스트 포장 옵션에 대해서는 text margin을 참조한다. 우측 마진은 진부한 charset 문자 플로팅에 의하여 무시된다.

블랭크-태그 형태는 좌측 마진을 현재 화면 위치에 설정한다. 이러한 형태는 다음의 문장에 해당한다:

at zx,zy

상기 명령의 atf형태는 제 1의 후속 실제 플로팅 문자의 높이에 기초하여 zy 위치를 자동적으로 조정하도록 허용한다. 이러한 제 1 후속 실제 문자의 최고 픽셀은 표준 폰트 문자의 상부와 동일한 y-위치에 놓인다. 이러한 atf의 작용은 상기 텍스트에 알지 못하는 크기 및 폰트와 같은 텍스트 속성이 포함되어 있더라도 텍스트에 대하여 명백하게 설정된 상부 마진을 제공한다. zy에 대한 조정은 상기 제 1 실제 문자가 화면상에 플로팅될 때 후속의 write 또는 show 문장에서 발생된다.

실시예

실시예 1

x = 10, y = 150에서 시작되는 텍스트를 기록한다.

at 10,150

write 이것은 본인 텍스트의 1행이다.

이것은 동일한 좌측 마진에서의 2행이다.

실시예 2

7행, 문자 3에서 시작되는 텍스트를 기록한다.

at 7:3

write The line: 그래픽 x,y 포맷보다 텍스트에 대하여 자주 사용된다.

실시예 3

wordwrap이 있는 text margin 문장은 후속의 2개 위치 at내에 진술된 우측 텍스트 마진에서 자동적인 단어 포장을 실행하도록 플로팅을 설정한다. 상기 at상의 제 2 위치는 화면상의 30번째 문자 위치(또는 현재 윈도우)에서 우측 마진을 설정한다. 제 2 위치의 라인 번호 부분은 이러한 시스템 플로터에 의하여 사용된다.

text margin;wordwrap

at 5:10; 20:30

write 이 텍스트는 소스코드에서 그 라인이 얼마나 오래동안 보이는 지와 무관하게 단 20자 폭의 문장으로 화면상에 나타난다.

실시예 4

atf명령을 사용함으로써, 2개의 write 문장으로부터 텍스트의 상부가 화면상의 공통적인 상부 마진을 갖도록 나타난다. 초기에 내장된 크기 2 코드를 갖는 제 2 write 문장은 "S"의 상부가 표준 크기 폰트와 동일한 위치에서 나타나도록 "S"를 플로팅함에 따라 시스템 변수zy를 조정한다.

atf 10:10

write 크기 1 텍스트

atf 10:30

write 크기 2 텍스트

* $$ 텍스트 시작에서 내장된 크기 2

시스템 변수

다음의 시스템 변수들은 상기 at문장의 작용을 반영한다.

zx 화면 위치의 X-좌표

zy 화면 위치의 Y-좌표

zline 라인 수

zspace 문자 수

zxycolorq 화면 위치에서 픽셀의 색상

zmargin 좌측 텍스트 마진

zrmargin 와측 텍스트 마진

경고음(beep)

스피커로 하여금 제어된 경고음을 발생하게 한다.

-----------------------------------------------------------------------------

beep duration[,hertz]

기간 경고음의 길이, 초

헤르츠 초당 사이클의 주파수

-----------------------------------------------------------------------------

설명

태그에 명기된 주파수 및 길이로 톤을 발생한다. 주파수가 명기되지 않은 경우에는 1000Hz가 디폴트이다.

실시예

실시예 1

작지만 인식가능한 음악적 선율을 발생한다.

beep .15,261.3 $$C

beep .2,349.66 $$F

beep .2,440.88 $$A

beep .4,523.25 $$C

beep .2,440.88 $$A

beep .4,523.25 $$C

실시예 2

beep 명령의 사용자 제어를 데모한다.

define local

length ,4,r $$ 경고음의 길이

define end

*

at 5:5

write 스피커가 경고음을 얼마나 오래 지속하기를 원하는가?

arrow 6:5

store length

. at 8:7

. write 2,3 또는 5와 같은 숫자를 입력하시오

ok

. beep length

endarrow

주파수(Frequencies)

중간-C로부터 1-옥타브 스케일은 다음의 주파수를 갖는다. 다른 옥타브에 대해서는 2를 곱셈 또는 나눗셈한다.

C 261.63

C# 277.18

D 293.66

D# 311.13

E 329.63

F 349.23

F# 369.99

G 392.00

G# 415.30

A 440.00

A# 466.16

B 493.88

C 523.25

보다 정확히 주파수를 계산하기 위해서는, 표준 "A"와 같이 110의 배수를 사용하고 각각의 반음 증가(half-tone increment)의 12번째 기음(root)으로 곱셈한다.

block

=============================================================================

block [LOCATION];[LOCATION];[LOCATION][;[from page],[to page]]

-----------------------------------------------------------------------------

설명

직사각형 화면 영역을 하나의 위치로부터 교차 디스플레이 페이지를 포함하는 다른 위치로 복사한다. 16- 및 256- 색상의 화면상에서만 작업가능하다. 블록 명령은 절대 플로팅 좌표로 단독으로 작업한다; 이는 원점(origin), 회전(rotate), 또는 스케일의 영향을 받지 않는다.

2개의 제 1 위치는 복사될 소스 영역의 모서리를 명기한다; 명기하지 않으면 그들은 전체 화면에 디폴트된다. 제 3 위치는 종착(destination)의 상부 좌측 모서리이다; 이는 소스 영역과 동일한 위치로 디폴트된다.

제 4 독립변수(페이지로부터: frompage)는 소스 페이지 수이다; 이는 현재 판독 페이지(zrpate)에 디폴트된다.

최종 독립변수(페이지에로: topage)는 종착 페이지 수이다; 이는 현재 기록 페이지(zwpage)에 디폴트된다.

block x1,y1; x2,y2; x3,y3 $$ 화면의 한 영역을 다른 영역으로 복사

block x1,y1; x2,y2;; 2,1 $$ 페이지 2에서 페이지 1로 복사

block x1,y1; x2,y2;; 2 $$ 페이지 2에서 현재 페이지로 복사

at 10:10

block 6,5;;5:10 $$ 10:10으로부터 5:10까지 6문자, 5라인을 복사

box

화면상에 박스(box) 또는 프레임을 그린다.

-----------------------------------------------------------------------------

box [LOCATION];[LOCATION];[Xframe[,Yframe]]]

-----------------------------------------------------------------------------

설명

전경(foreground) 색으로 화면상에 박스(box) 또는 프레임(frame)을 그린다. LOCATION의 설명에 대해서는 명령 구문 규칙 (Command Syntax Conventions)을 참조한다. 명령 erase은 그리기에서 배경 색상을 이용한다는 것을 제외하고는 box에서와 같다.

프레임 폭 독립변수의 존재는 박스보다는 프레임이 그려져야 함을 알린다. 상기 제 2 프레임 독립변수가 상부 및 하부 폭을 명기하는 반면, 좌우측 폭은 상기 제 1 독립변수에 의하여 픽셀 내에 명기된다. 제 2 프레임 독립변수가 없는 경우에는, 화면상의 외관에서 측부 폭과 가장 잘 매치되는 상하부 프레임 폭으로 설정된다.

실시예

실시예 1

전체 화면(또는 윈도우)은 5 픽셀 너비의 백색 프레임로 된 청색으로 이루어진다.

color blue

box

color white+

box ;;5

실시예 2

폭 200 픽셀, 높이 100 픽셀인 입체 직사각형(solid rectangle)이 전경 색상으로 화면상에 놓인다. 그래픽 좌표는 하나의 위치에 대한 각각의 x,y 좌표를 명기하는 데에 사용된다.

box 101,101; 300,200

실시예 3

상기 write 문장에서 텍스트는 적색 프레임 2 픽셀 너비를 갖는다. 명령 text measure은 화면상에 후속의 텍스트 문단이 기입되는 화면 영역을 결정하는 데에 사용된다. 이러한 정보는 좌측 하단 모서리에 대해서는 시스템 변수 zplotxl, zplotyl로, 우측 상단 모서리에 대해서는 시스템 변수 zplotxh, zplotyh로 복귀된다.

text measure $$ 텍스트 측정을 초기화한다

*

at 100,150

write 이는 양호하게 ...프레임형성될 임의의 길이의 텍스트 문단이다

*

color red+

box zplotxl-2,zplotyl-2;zplotxh+2,zplotyh+2; 2

$$ frame the text

실시예 4

문자 20의 너비 및 10행 길이의 청색 박스는 10번째 행에서 개시되는 화면상에 놓인다. 상기 box 명령은 at 명령에 의하여 설정된 바의 시스템 변수 zx 및 zy를 변경하지 않으므로, 텍스트 또한 10행 시작에서 시작된다.

at 10:1

color blue

box 20,10

color white+

write This text appears in the box...

branch

동일한 단위에서 라벨된 지점으로 실행을 이전한다

-----------------------------------------------------------------------------

branch label │q

branch SELECTOR; label │ q; │ q;...

label 임의의 유효한 라벨이 현재의 단위에 존재한다. 라벨은 라인(line)의 명령 필드에 있어서 선택적으로 1 내지 7의 문자 또는 숫자로 이어질 수 있는 번호이다.

q 현재 단위의 말단으로의 분기

-----------------------------------------------------------------------------

설명

명기된 라벨에 이어지는 라인으로 또는 키워드 q가 명기된 경우에는 상기 단위의 말단으로 실행을 이전함으로써 단위 내의 실행 플로우를 변경한다. 선택적인 목록에서 블랭크 입력은 후속 명령으로 돌아가는 데에 사용된다.

실시예

name이 이미 설정되면, branch 명령은 화살표 구조를 스킵한다.

branch name=0;;1skip

at 10:10

write Enter your name

long 8

arrow 11:10

storea name

ok

endarrow

*

1skip

at 15:10

write Welcome, <<showa,name>>.

calc

변수에 값 또는 계산을 지정한다.

-----------------------------------------------------------------------------

calc variableexpression

-----------------------------------------------------------------------------

설명

할당 화살표의 우측에 대한 표현은 상수, 문자, 변수, 연산자 및 함수의 조합으로 될 수 있으므로 이는 단일의 수치로 평가된다.

calc는 크기가 8바이트 보다 큰 변수로 작업할 수 없다.

명령 명칭은 계산의 추가적인 라인에 대하여 반복될 필요가 없다.

계산, 할당, 및 변수에 대한 보다 구체적인 정보는 본 명세서의 변수, 계산 및 데이터 이전(Variables, Calculations and Data Transfer) 을 참조한다.

실시예

카운터를 증가하고, 백분율을 계산하여 복잡한 표현을 평가한다.

calc countcount + 1

scorecorrect / total

dist(1/2) * g * (t**2)

calcc

전체 계산 및 할당을 선택적으로 수행한다.

-----------------------------------------------------------------------------

calcc SELECTOR; var1exp1; var2exp2;;...

-----------------------------------------------------------------------------

설명

calcc는 선택기의 값에 기초하여, 계산의 목록 중 하나를 실행하는 calc의 선택적인 형태이다. 목록 중 각각의 계산은 상이한 변수에 상이한 값을 할당한다. 선택기의 특정 값에 대하여 아무런 계산이 수행되지 않는 경우, 무효 태그(;;)가 사용된다.

상기 calcc 문장은 후속 라인의 태그 필드에 계속될 수 있다.

실시예

실시예 1

선택기 right가 1이면 review가 설정된다; right가 2 이상이면 score가 할당된다. right가 제로 또는 음수값이면 아무것도 하지 않는다.

calcc right;;; review-1; score(right/5)*100

실시예 2

선택기 complete가 참이면 값 4는 section에 할당된다; 만일 거짓이면, 아무것도 할당되지 않는다.

calcc complete; section4;;

실시예 3

select가 1이면 column가 지정되고, select가 2이면 apples가 지정되며, 2 select가 3이면 total이 50으로 지정된다. select가 음수, 제로 또는 3보다 크면 아무것도 하지 않는다.

calcc select,,,

column22 + pointer;

applesbushels*47

total50;;

calcs

변수에 선택적으로 값을 지정한다.

-----------------------------------------------------------------------------

calcs SELECTOR; variableexp1; exp2;;...

-----------------------------------------------------------------------------

설명

calcs는 표현의 목록 중 하나를 평가하는 calc의 선택적인 형태이며, 주어진 변수에 이를 지정한다. 선택기의 값에 기초하여, 할당 화살표의 우측 목록으로부터 표현이 선택되고 평가되어 명기된 변수에 지정된다. 선택기의 특정 값에 대하여 아무런 지정이 수행되지 않는 경우, 무효 태그(;;)가 사용되며; 상기 변수는 불변의 상태로 남는다.

상기 calcs 문장은 후속 라인의 태그 필드에 계속될 수 있다.

실시예

실시예 1

선택기 month는 변수 days를 그의 적정 값으로 설정하는 데에 사용된다. 선택적인 할당은 2개 라인에 걸쳐서 계속된다.

calcs month; days;;31;28;31;30;31;30;

31;31;30;31;30;31

실시예 2

complete가 참이면, section은 값 4가 지정된다; 그렇지 않으면, 표현 last*2의 평가에 대하여 설정된다.

calcc complete; section4; last*2

circle

원을 그린다.

-----------------------------------------------------------------------------

circle radius[,fill │angle, angle2]

-----------------------------------------------------------------------------

설명

현재의 전경 색상으로 현재의 화면 위치에서 중앙에 특정 반경의 원을 그린다.

작동중인 키워드fill는 현재의 전경 색상으로 채워진 입체(solid) 원을 생성한다.

현재 화면 위치는 1-태그(one-tag) circle 이후 변경되지 않으므로, 화면 위치를 재설정함 없이도 동심원을 그릴 수 있다.

3-태그 형태는 호(arc)를 그릴 수 있다. 호는 항상 angle1에서 angle2까지 반시계 방향으로 그려진다. 결과적으로, 상이한 호들이 제 1 차로 명기된 각도에 따라 그려진다. 예를 들면, circle 100,0,90은 원의 1/4을 0도에서 90도까지 그린다. circle 100,90.0이라는 문장은 원의 3/4를 90도에서 약 360(0)도까지 그린다.

호에 대해서는, 현재 화면 위치가 끝무렵(최종) 호 위치로 업데이트된다.

실시예

화면 중심에 원을 그리며; 중심은 동일하나 반경이 상이한 2개의 호를 그리고; 그리하여 속이 채워진 원(filled circle)을 그린다.

screen vga,graphics,medium,color

at 320,240 $$ 원의 중심을 설정한다

circle 80 $$ 반경 80으로 원을 그린다

circle 60,0,90 $$ 원의 1/4을 그린다

at 320,240 $$ 원의 중심을 재설정한다

circle 70,90,0 $$ 원의 3/4를 그린다

at 320,240 $$ 원의 중심을 재설정한다

circle 40,fill $$ 속이 채워진 원을 중앙에 그린다

clearu

단위 캐시(cache)로부터 단위를 제거한다.

-----------------------------------------------------------------------------

clearu [UNIT]

clearu SELECTOR; UNIT; UNIT;...

-----------------------------------------------------------------------------

설명

단위는 그의 필요에 따라 가상의 메모리 중앙 단위 캐시에 자동적으로 로드되며, 새로운 단위에 대한 여유를 마련할 필요에 따라 삭제된다. clearu는 상기 단위 캐시로부터 수동으로 구체적인 단위를 클리어(clear)하기 위하여 사용가능하다.

상기 블랭크-태그 형태는 단위 캐시로부터의 현재 단위를 제외하고는 모두 remove 삭제된다.

clearu는 현재의 작업 모드에 해당하는 유형의 파일로부터 로드된 단위만을 클리어한다. 작업 모드에 대해서는 operate를 참조한다.

clearu는 edisk 명령의 영향을 받는다. 단일 파일의 여러 복사가 상이한 드라이브상에 존재가능하므로, 단위 캐시내의 단일 단위의 여러 복사가 존재할 수 있다. 만일 zedisk=-1이면, 단위들은 모든 드라이브를 검색함으로써 인출된다. clearu의 태그내에서 과/단위 명세와 매치되며, 현재 작업 모드(소스 및 바이너리)와 매치를 이루는 모든 단위는 단위 캐시로부터 클리어된다. 만일 zedisk ≠-1이면, 현재 실행 디스크로부터의 단위만이 상기 단위 캐시로부터 클리어된다.

상기 단위 기준 및 작동 명세의 모드와 매치되는 단위가 없어서 단위 캐시로부터 클리어되는 단위가 없을 경우, zreturn은 -2로 설정된다. 현재 실행중인 단위를 클리어하기 위한 명백한 시도가 이루어지면, zreturn은 19로 설정된다.

clearu는 단위의 버전을 메모리에 제어하거나 또는 다른 것을 위한 공간를 만들기 위하여 단위가 삭제되는 것을 제어하기 위하여 유틸리티 프로그램에 의하여 우선적으로 사용된다.

시스템 변수(System Variables)

zreturn

-2 반복 작업; 아무런 작용도 취하지 않음

-1 성공적인 작업

19 현재의 단위를 클리어하기 위하여 시도되는 무효한 작업

clock

시스템 클록을 판독 또는 기록한다.

-----------------------------------------------------------------------------

clock time4[,set]

-----------------------------------------------------------------------------

설명

명기된 4-바이트 버퍼에 시스템 클록으로부터의 정보를 복사한다. 키워드 set는 시스템 클록을 상기 버퍼내의 시간으로 설정한다.

시스템 클록은 4 바이트로 저장된다; 각각의 1바이트는 시간, 분, 초 및 초의 백분의 1에 해당한다.

실시예

시스템 클록을 판독하고 시간 및 분으로 현재의 시간을 디스플레이한다.

define local

sysclock, 4 $$ 시간보유 변수

. hours,1

. minutes,1

. seconds,1

. hundrths,1

define end

*

clock sysclock $$ 현재시간 판독

at 5:5

write 현재시간: <<t, hours,2>>:<<t, minutes,2>>)

color

전경 색상을 설정한다.

-----------------------------------------------------------------------------

color COLOR

color SELECTOR; COLOR; COLOR,...

write <<color | c, COLOR>> |

-----------------------------------------------------------------------------

설명

후속의 텍스트 및 그래픽에 대한 전경 색상을 선택한다.

키워드 말단의 +는 색상의 밝기 버전을 나타낸다. 키워드 backgnd는 배경색을 부여한다 (명령 colore으로 최종 명기된). 하드웨어 색상 번호에 대한 숫자 표현이 키워드를 대신하여 사용가능하다.

키워드는 제 1 차 16 색상을 설정한다 ("Command Syntax Description for keyword Colors" 참조). 색상 번호는 15보다 큰 수로 코드화된 색상에 대하여 사용되어야 한다.

디폴트 전경 색상은 white이다. 디폴트는 status save;default로 이어지는 color를 사용하여 변경가능하다.

텍스트의 색상 또한 명령 write의 태그에 텍스트 속성을 내장함으로써 변경이 가능하다.

CGA 제한 (CGA restriction)

임의의 CGA 그래픽을 사용할 때, 복잡한 색상의 모니터에 디스플레이하며, 보다 실제에 가까운 색상을 생성하도록 진하기 옵션을 조절한다 (thick on).

screen cga, graphics, medium, color

screen cga, graphics, medium, mono

screen cga, graphics, medium을 사용할 때, 4개의 개별적인 색상그룹이 가용하다:

디스플레이상의 모든 색상은 하나의 색상그룹으로부터 선택되어야 한다.

다른 그룹으로부터의 색상들이 디스플레이상에 존재하는 동안 하나의 그룹으로부터의 한가지 색상이 선택되는 경우, 화면상의 모든 색상은 새로이 선택된 그룹 중 해당 색상으로 변경된다.

실시예

청색 박스에 황색 텍스트를 디스프레이한다.

screen vga

color blue

box 5:10;10:50

color yellow

at 6:15;10:50

write A paragraph of yellow text...

시스템 변수

zcolor 색상 키워드 명칭으로 설정된 경우의 색상 번호; 색상번호로 설정된 경우 -1

zhcolor 하드웨어 색상번호

colore

소거 색상을 설정한다.

-----------------------------------------------------------------------------

colore COLOR

colore SELECTOR; COLOR; COLOR,...

write <<colore | ce, COLOR>> |

-----------------------------------------------------------------------------

설명

모드 소거 플로팅, 전체 화면 소거, 명령 erase, 및 mode rewrite에서 문자 배경 플로팅:을 포함한 소거에 대하여 사용되도록 소거 색상를 설정한다. 소거 색상으로 화면 또는 윈도우를 가득 채우기 위하여, colore의 실행 이후 전체-화면 소거가 수행되어야 한다.

색상 키워드는 제 1차 16색상을 설정한다 ("Command Syntax Conventions" 참조).

색상 번호는 15보다 큰 수로 코드화된 색상에 대하여 사용되어야 한다.

CGA 그래픽 디스플레이에 있어서, colore는 color과 동일한 색상 제한을 받는다. 자세한 사항은 color 명령 설명을 참조한다. CGA 텍스트 디스플레이에 있어서, 밝은 색상(8-15)은 colore에 대하여 가용하지 않다.

디폴트 소거 색상은 black이다. 이러한 디폴트는 status save; default로 이어지는 colore를 사용함으로써 변경이 가능하다.

실시예

[ENTER]를 누른 후 화면을 청색으로 소거한다.

screen vga

color white+

at 5:5

write 배경색 변경을 참조하기 위하여 Enter를 누른다.

color blue

pause pass= %enter

at 5:5

write 배경색 변경을 위하여 화면이 소거된다.

시스템 변수

zcolore 색상 키워드 명칭으로 설정된 경우의 색상 번호; 색상번호로 설정된 경우 -1

zhcolore 하드웨어 소거 색상번호

compare

2개의 텍스트 문자열을 비교한다.

-----------------------------------------------------------------------------

compare string1, string2, length, result |

-----------------------------------------------------------------------------

string1 기준 문자열, 대체로 8-바이트 좌측-가장자리 맞춤된 문자

string2 비교 문자열, 변수 내에 존재해야 함

length 비교하기 위한 바이트 수

result-1 = identical;0=no match;>0=last matching character

-----------------------------------------------------------------------------

설명

2개의 문자열을 바이트-대-바이트 비교한다. 변수 경계는 교차가능하다. result에 복귀된 값은 compare의 성공을 나타낸다. 문자열이 부분적으로 매치될 경우, result는 최종으로 매치된 문자의 위치로 설정된다.

또한, result에 더하여, 문자열이 매치되는 경우 compare는 zreturn을 -1로 설정한다. 문자열이 매치되지 않으면, zreturn은 어느 문자열이 "알파벳순(alphabetically)"으로 나머지 보다 작은지를 나타내도록: 상기 1번째가 작으면 0, 2번째가 작으면 1로 설정된다. 서로 매치되는 않는 상기 1번째 문자에 대한 ASCII코드는 어느 문자열이 "수적으로(numerically)" 더 작은지를 결정하기 위하여 비교된다. 예를 들면, "aaa" 및 "aab"가 비교되는 경우, 제 1 문자열의 "a"가 제 2 문자열의 3번째 문자 "b"보다 작기 때문에 zreturn은 0으로 설정된다.

시스템 변수는 어느 문자열에 대해서는 사용불가능하다.

실시예

사용자가 계속하도록 하기 전에 "password"를 체크한다.

define local

input ,8 $$ the user's entry

password='saturday' $$ today's password

return ,2 $$ value returned by compare

define end

*

at 3:2

write Enter the password of the day...

long 8

arrow 4:2

zero input

storea input

compare password, input,8,return

ok return

. write Good. Let's continue

no

. write Sorry, wrong password. Erase and try again.

endarrow

시스템 변수

zreturn

-1 제 1 문자열 = 제 2 문자열

0 제 1 문자열 < 제 2 문자열

1 제 2 문자열 > 제 1 문자열

compute

문자의 문자열에 대한 수치값을 계산한다.

-----------------------------------------------------------------------------

compute string, length, result |

-----------------------------------------------------------------------------

string 수치적으로 평가할 문자를 포함하는 텍스트 변수

length 평가할 문자의 수

result 계산의 결과를 보유하기 위한 수치 변수

-----------------------------------------------------------------------------

설명

문자열을 수치 값으로 변환한다. 문자열은 선행 또는 후미 블랭크를 포함할 수 있고, 여기에서 선행 블랭크는 + 또는 - 표시 및 소수점이다. 문자열은 기타의 연산자는 포함할 수 없다. 변환이 성공적이면, 값은 result에 저장된다. compute가 실패하면 (zreturn=0), result는 불변의 상태로 남는다.

실시예

문자열을 수치 값으로 변환하고, 그 값에 대한 연산을 실행하여 이를 문자열로 다시 변환한다:

define local

string, 10 $$ holds the string to convert

length ,2 $$ length of the string

number ,4,r $$ real number for result

define end

*

pack string; length ;23.65

compute string, length, number $$ convert to nubmeric

calc numbernumber * 4.83

packz string;;<<show, number>> $$ convert to string

at 5:5

write The new string is:<<showa, string >>

시스템 변수

zreturn

-1 성공적인 작업

0 문자열에서 유효한 번호가 발견되지 않았음.

1 결과 변수에서 변환된 번호를 저장하려고 하는 에러를 오버플로우함.

결과 변수는 더 커야함.

date

현재의 날짜를 판독 또는 설정한다.

-----------------------------------------------------------------------------

date date4[,set]

-----------------------------------------------------------------------------

설명

시스템 클록으로부터의 날짜를 판독하여 변수에 넣는다. 키워드 set가 사용되는 경우, 시스템 날짜는 변수에 저장된 날짜로 설정된다.

시스템 날짜는 4 바이트로서: 년도에 2바이트, 월에 1바이트, 일에 1바이트로 저장된다.

실시예

현재의 날짜를 디스플레이한다.

define local

today,4

. year, 2, integer

. month, 1, integer

. day, 1, interger

define end

*

date today

at 10:10

write Today is $$$

writec mont;;;January ;February ;March ;April ;May; June ;

July ;August ;September ;October ;November ;December ;

write <<show,day>, <<show,year>>.

debug

단계적(step-by-step) 프로그램 실행을 온/오프한다.

-----------------------------------------------------------------------------

debug on |off

debug SELECTOR; on |off;on |off;...

-----------------------------------------------------------------------------

설명

debug on은 현재 단위의 실행을 멈추고 에러검출기(debugger)에로 들어간다. 상기 에러검출기로부터, 시간 (스텝 모드)에서의 하나의 시간에서 또는 명기된 명령까지 또는 단위가 도달할 때까지 (브레이크포인트 모드) 하나의 명려을 계속할 수 있다. 계속적으로 실행이 이루어질 수 있다. debug off는 정상적인 실행으로 복귀한다.

에러검출기 도구는 다음과 같다:

debug off 실행

System Tools 윈도우를 통하여 종료

편집기에 복귀함 (통상적으로 [SHIFT][F2]를 통하여)

실행 에러

debug는 소스 모드 실행동안에만 정상적으로 기능한다. 바이너리로 만들 때의 옵션을 선택함으로써 바이너리 모드로 기능하도록 할 수 있다. debug는 학생의 관리자로 기능하지는 않는다.

에러검출기는 또한 하나의 단위를 실행하는 동안 [SHIFT][F2]를 누른 후 System key options 메뉴로부터 Debug를 선택함으로써 입력가능하다.

device

TenCORE 장치 드라이버를 제어한다.

-----------------------------------------------------------------------------

device device,function[,variable[,length]]

device 0 내지 255의 범위에서 호출하려는 장치 번호

function 0 내지 255의 범위에서 호출하려는 장치-명기

함수번호

variable 명기된 함수에 요구되는 데이터 변수

length 정의된 길이가 아닌 경우, variable의 길이

-----------------------------------------------------------------------------

설명

device는 저자로 하여금 TenCORE 언어에 의하여 직접 지원되지는 않으나 TenCORE 장치 지원 파일을 통하여 실행되는 하드웨어 장치를 제어하도록 한다. 이들은 특별한 마우스, 터치-패널, 및 TenCORE 명령에 구성되는 표준 지원을 벗어나는 대화형 비디오 특성을 포함한다. 상기 variable 태그는 함수가 데이터 변수를 요구하는 경우에만 사용된다.

장치 지원 파일

device를 사용하기 위해서는 TenCORE 장치 지원 파일이 요구된다. 장치 지원 파일은 TenCORE 실행자를 개시하기 이전에 실행(로드)되며, 메모리 내에 상주한다. device의 용도는 어드레스되는 장치 지원 파일에 따라 좌우된다.

시스템 변수

zreturn

복귀이전에 프로세서 레지스터 AL에 설정한다. 일부 장치 지원 파일은 상태 정보를 복귀하기 위하여 이러한 특징을 사용한다.

disable

시스템 특징을 작동불능화 함 (작동가능화(enable)의 반대)

-----------------------------------------------------------------------------

disable 키워드(keyword/s)

pointer 포인터 디스프레이 및 모든 포인터 입력을 불능화함

prtup 포인터-업 입력을 불능화함

cursor 텍스트 모드 디스플레이에서 점멸되는 커서를

불능화함

arrow arrow 프롬프트의 플로팅을 불능화함

absolute 절대 화면 플로팅을 불능화함

break 인터럽트 처리로부터 분기되는 break 수정된 flow를 불능화함

area area 입력을 불능화함

font 폰트 대신 charsets로부터의 문자를 폴로팅함

mode 텍스트에 내장된 모드 변화를 불능화함

여러 특징들은 단일의 불능화 문장에 의하여 불능화 가능함. 이러한 시스템 특징의 초기 상태에 대해서는 Defaults 부분을 참조한다.

-----------------------------------------------------------------------------

설명

disable pointer

포인터 디스플레이 및 모든 포인팅 장치로부터의 입력을 턴-오프한다

disable prtup

포인팅 장치로부터의 버튼-업 입력을 턴-오프한다.

disable cursor

텍스트 모드 화면에 대하여 점멸되는 커서를 불능화한다.

diable arrow

arrow 프롬프트 문자 및 후미 공간의 플로팅을 불능화한다. 정확히 명령arrow에 부여된 위치에서 사용자입력이 발생한다.

disable absolute

enable absolute 플로팅 모드를 턴-오프하여, 후속의 화면 그래픽이 명령 scale, rotate, window 및 origin에 의하여 수정되도록 한다.

disable break

인터럽트 프로그램 실행으로부터 분기되는 수정된 flow를 break 불능화함. flow 분기는 여전히 표준 입력 처리 위치에서 발생함(설명에 대해서는 명령flow 참조). break는 그의 엔트리 내에서 종료되어야 하는 임계 코딩의 블록에 대하여 종종 불능화된다 (예를 들면, 파일 조작 및 그의 zreturn 점검). 종료의 다른 수단으로 프로그래밍 루프 내에 있는 동안에는 break 불능화를 회피해야 한다. [SHIFT][1] 및 [SHIFT][2]와 같은 시스템 루팅 키가 disable break에 의하여 턴-오프되므로, 시스템 장애가 발생할 수 있다.

disable area

area 입력을 불능화한다. area 입력이 불능화되는 반면 새로운 areas를 정의할 수 있으나, 그들로부터의 입력은 area 입력이 가능화되기까지는 발생하지 않는다.

disable font

폰트 대신 charsets로부터의 문자를 플로팅한다. Charsets는 문자 정의의 진부한 형태이다.

disable mode

텍스트에 내장된 모드 변화를 턴-오프한다.

디폴트(Defaults)

명령 특징 enable 및 disable에 대한 시스템 디폴트는 다음 사항에 대한 initial 명령에 의하여 설정된다:

ON area, arrow, break, font, mode

OFF absolute, cursor, pointer, ptrup

명령 disable에 의하여 영향을 받은 시스템 특징의 현재 ON/OFF 상태는 4-바이트 시스템 변수 zenable의 비트맵에서 발견된다.

zenable BIT FEATURE

1 absolute

2 pointer

3 mode

4 cursor

5 ptrup

6 font

7 area

12 break

13 arrow

zenable을 심사하기 위해서는 bit 기능을 사용한다. 비트 세트는 ON을 나타내며 언세트는 OFF를 나타낸다. 예를 들면:

bit(zenable,2) = -1 은 pointer ON을 의미한다.

bit(zenable,2) = 0은 pointer OFF를 의미한다.

실시예

모든 flow 분기는 파일 첨부 및 성공 확인 동안 턴-오프된다.

flow do; %f10; glossary; break $$ a flow break branch

...

disable break $$ prevent interruptions

attach 'afile; nameset $$ attempt to open file

jump zreturn;;erroru $$ check success

enable break $$ re-enable flow breaks

do

서브루틴으로서의 단위를 실행한다.

-----------------------------------------------------------------------------

do UNIT[(argument/16s][;return/16s])]

do SELECTOR; UNIT[([ARGUMENT/16S][;RETURN/16S])];...

-----------------------------------------------------------------------------

설명

서브루틴으로서 명기된 단위를 실행한다. 서브루틴의 종료에 따라, 실행은 do에 뒤따르는 명령으로 다시 시작한다. 서브루틴은 20 레벨까지 중첩가능하다.

명령 do를 포함하는 단위는 calling 단위로 같이 종종 언급된다; 상기 서브루틴은 called 단위이다.

새로운 메인 단위로의 점프 분기가 서브루틴 동안 발생하면, do에 뒤이은 명령에로의 복귀는 실행되지 않고 do스택은 클리어된다.

do는 서브루틴에 16독립변수까지 전달가능하며 서브루틴으로부터 16독립변수까지 수신가능하다. 세미콜론은 수신 독립변수 목록으로부터의 전달 독립변수 목록을 분리하며, 콤마는 목록내의 독립변수들을 분리한다.

called 단위는 명령 receive로 전달된 독립변수를 수리해야 하거나 (그렇지 않으면, 명령 nocheck receive가 유효함) 또는 실행 에러가 발생한다. called 단위는 명령 return을 사용하여 복귀 요구되는 임의의 독립변수를 복귀시켜야 하며 (그렇지 않으면 nocheck return 이 유효함) 또는 실행 에러가 발생한다. receive, return 및 no check 참조.

모든 독립변수는 값으로 전달 및 복귀된다. 그러나, 변수의 어드레스는 varloc() 함수를 사용하여 값으로서 전달된다.

실시예

실시예 1

코스웨어(courseware)를 기록할 때, 필요시에는 서브루틴으로서 호칭가능한 하나의 장소에 여러 장소에서 사용될 루틴 및 디스플레이를 넣는 것이 바람직하다. 단위 header는 과의 이러한 세그먼트에 대한 모든 페이지 상에 나타나는 제목 바(title bar)에 대한 코딩을 포함할 수 있다. 과 tool에서 navigate에 대한 do 호출은 이러한 일련의 과에서 모든 과를 통하여 가용한 학생의 단위 조종 옵션의 표준 디스플레이를 나타내는 데에 사용된다.

do header $$ in current lesson

do diagram1 $$ in current lesson

at 20:10

write This diagram shos the system we will be studying next at the

start of its combustion cycle.

do tools,navigate $$ in lesson tools

실시예 2

do 문장은 수치로 명기된 월의 명칭 및 일의 숫자에로 복귀를 요구하기 위하여 서브루틴 month에 값 3을 전달한다. 상기 do 명령의 독립변수 목록은 세미콜론으로 구분된 2개 부분으로 나뉘어 진다: 제 1 부분은 전달 독립변수에 대한 것이며, 제 2 부분은 수신 독립변수에 대한 것이다.

define local

name,8

days,1

define end

do month(3; name,days) $$ 3번째 월에서 명칭 및 일을 취한다

*

write <<a,name>> has <<s,days>> days.

*

unit month

define local

1number,1

1name,8

1days,1

define end

receive 1number $$ 월 번호 독립변수를 얻는다

packzc 1number; 1name ; ; ; ; January;february;March;April...

calcs 1number; 1days;; 31; 28; 31; 30...

return 1name,1days $$ 명칭 및 일 복귀

실시예 3

표현 score < 75 는 학생의 상태를 슬픈 영상 또는 웃는 얼굴의 영상 그래픽으로 나타내는 단위 sad 또는 smile을 선택하기 위하여 참/거짓 선택기로서 사용된다.

do score < 75;sad; smile

dot

화면상에 단일의 픽셀을 플로팅한다.

-----------------------------------------------------------------------------

dot [LOCATION]

-----------------------------------------------------------------------------

설명

명기된 위치에서, 현재의 플로팅 모드 및 색상으로 화면상에 단일의 픽셀을 플로팅한다. 위치가 명기되지 않은 경우에는, 현재 위치(zx,zy)가 사용된다.

명령 dot는 thick에 의한 영향을 받는다. thick on으로써, 모든 도트들은 2개의 픽셀 두께로 플로트된다; thick off로는 하나의 픽셀 두께로 도트들이 플로팅된다.

실시예

실시예 1

중지(pause)가 중단될 때 마우스 포인터의 위치(zinputx,zinputy)에서 도트를 표시한다.

enable pointer

pause pass= %pointer

dot zinputx,zinputy

실시예 2

dot를 사용하여 사인곡선(sign wave)을 그린다.

define local

x .8,r $$ x-좌표에 대한 실제 변수

define end

*

loop x0, 2* π, 0.1

. dot 50*x, 100+50 sin(x)

endloop

시스템 변수

zx 현재의 수평 그래픽 화면 위치

zy 현재의 수직 그래픽 화면 위치

draw

화면상에 단일의 픽셀을 플로팅한다.

-----------------------------------------------------------------------------

dot [LOCATION];[LOCATION];[LOCATION];...

-----------------------------------------------------------------------------

설명

현재의 플로팅 모드 및 색상으로 화면상에 라인을 플로팅한다. 라인은 세미콜론으로 구분된 각각의 위치들 사이에 그린다. 이중의 세미콜론(;;)에 이를 때, draw는 다음의 위치에로 스킵한다.

단일의 draw 명령은 하나 이상의 라인에 대하여 계속될 수 있다. 태그가 세미콜론으로 시작되면, 상기 라인은 현재의 화면 위치에서 시작된다.

thick on으로써, 모든 도트는 2개의 픽셀 두께로 플로팅되고; thick off로써 도트들은 하나의 픽셀 두께로 된다.

실시예

실시예 1

하나의 draw 명령으로써 상자 및 삼각형을 화면상에 그린다. 이중의 세미콜론은 2개의 모양을 분리하고 상기 그림은 여러 라인에 걸쳐서 계속된다. draw 10,10; 80,10; 80,100; 10,100; 10,10;; 10,130;

100,130; 10,190; 10,130

실시예 2

화면(또는 윈도우)상의 임의의 위치에서 연결된 라인 세그먼트를 그린다. 시작 세미콜론은 종전 그림의 끝점인 현재 화면 위치에서 각각의 그림을 시작하는 데에 사용된다.

loop

. color randi(1,15) $$ 임의의 색상을 선택한다

. draw ;randi(0, zdispx), randi (0, zdispy)

. delay .01

endloop

ellipse

타원을 그린다.

-----------------------------------------------------------------------------

ellipse Xradius, Yradius[,fill | angle1,angle2]

-----------------------------------------------------------------------------

설명

현재 화면 위치에서 중앙에 타원 (또는 타원부분)을 그린다. 키워드 fill이 명기되면, 현재의 전경 색상이 타원에 채워진다. 현재의 화면 위치는 전체 타원이 그려진 후에 변경되지 않는다: 여러 타원이 화면위치를 재설정하지 않고도 동일한 중심에 그려질 수 있다.

2-태그 형식은 전체 타원을 그린다. 4-태그 형식은 시작 각도와 끝 각도에 의하여 명기되는 타원의 원호만을 그린다. 원호는 항상 제 1 각도로부터 제 2 각도까지 반시계 방향으로 그려진다. 예를 들면, ellipse 100,60,0,90은 타원의 1/4을 그린다. 명령 ellipse 100,60,90,0은 타원의 3/4를 그린다. 현재 화면 위치는 하나의 원호(4-태그 ellipse)가 그려진 후에 업데이트 된다.

실시예

화면상의 중심에 하나의 타원 및 2개의 원호를 그린다.

at zxmax/2, zymax/2 $$ 타원의 중심을 설정한다

ellipse 95, 50 $$ 전체 타원을 그린다

ellipse 90, 40, 0, 90 $$ 타원의 1/4을 그린다

at zxmax/2, zymzx/2 $$ 타원의 중심을 재설정한다

ellipse 70, 30, 90, 0 $$타원의 3/4

else

if/else 프로그래밍 구조에 대한 대체 경우

-----------------------------------------------------------------------------

else

-----------------------------------------------------------------------------

설명

종전의 명령 if 및 elseif의 조건이 거짓인 경우, else 및 endif 사이에 들여쓰기 명령이 실행된다. 명령 else는 if 구조를 요하지 않는다. if 구조에 대한 보다 상세한 정보는 명령 if의 설명을 참조한다.

실시예

if score > 90

. write Very Good!

elseif score > 75

. write OK, but you could do better.

else

. write You need more proctice.

endif

elseif

if/else 프로그래밍 구조에 대한 조건부 경우

-----------------------------------------------------------------------------

elseif CONDITION

-----------------------------------------------------------------------------

설명

명령 if 및 모든 종전 명령 elseif의 태그가 거짓으로 평가되고 현재의 명령 elseif 상의 태그가 참으로 평가되면, 이어지는 들여쓰기된 명령이 실행된다. 그 후에는 상기 endif 에 이어지는 명령으로 제어(Control)가 전달된다. if 구조에 대한 보다 상세한 정보는 명령 if에 대한 설명을 참조한다.

실시예

if score > 90

. write Very Good!

elseif score > 75

. write OK, but you could do better.

else

. write You need more practice.

endif

elseif

시스템 특징을 가능화한다 (불능화의 반대)

-----------------------------------------------------------------------------

enable keyword/s

enable <<vadable4>>

pointer 포인터 디스플레이 및 포인터 입력을 턴-온한다

ptrup 포인터-업 입력을 가능화한다

cursor 텍스트 모드 디스플레이상에 점멸 커서를 턴-온한다

arrow 화살 프롬프트의 플로팅을 재가능화한다

absolute 절대 화면 플로팅을 턴-온한다

break 인터럽트처리로 분기되는 수정된 flow의 break를 재가능화한다

area area 입력을 재가능화한다

font font 플로팅을 재가능화한다

mode 텍스트에 내장된 모드 변화를 재가능화한다.

다중 특징이 단일의 enable 문장에 의하여 가능화될 수 있다. 이러한 시스템 특징의 초기 상태에 대해서는 Defaults 부분을 참조한다.

-----------------------------------------------------------------------------

설명

enable pointer

포인터 디스플레이 및 포인팅 장치로부터의 포인터 입력을 턴-온한다.

enable ptrup

버튼-업 입력을 가능화한다. ptrup가 가능화되지 않으면, 포인팅 장치는 버튼이 눌렸을 때에만 입력을 발생한다.

enable cursor

텍스트 모드 화면상에 점멸 커서를 턴-온한다. 이 명령은 그래픽 화면에서는 아무런 효과가 없다.

enable arrow

arrow 프롬프트 문자 의 플로팅을 재가능화하여 공간을 끌어당긴다 (trailing space).

enable absolute

절대 화면 플로팅 모드를 턴-온한다. 후속의 화면 그래픽은 명령 scale, rotate, window 및 origin 에 의하여 수정된다. window가 relative off 및 clip off에 의하여 수정되는 동안 명령 scale, rotate, 및 origin는 효과적으로 턴-오프된다.

enable break

인터럽트처리로 분기되는 수정된 flow의 break를 재가능화한다.

enable area

area 입력을 재가능화한다. area 입력이 불능화된 동안 정의된 것들을 포함하는 종전에 정의된 임의의 현재 areas는 활성이다.

enable font

문자 플로팅에 대하여 charsets 대신 폰트를 사용하도록 복귀된다. Charsets는문자 정의의 진부한 형태이다.

enable mode

텍스트에 내장된 모드 변화를 재가능화한다.

enable<<variable4>>

명령 enable은 다양한 형태로 4-바이트 변수에 비트 설정된 바에 따라 모든 특징을 가능화/불가능화하는 데에 사용된다. 변수는 보통 종전 상태로 모든 특징이 복귀되도록 나중에 재설정하는 데에 사용되는 시스템 변수 zenable의 저장된 복사본이다. 특징 비트맵은 다음의 가능화 특징의 상태(Status of Enable Features) 부분에서 논의된다.

디폴트

명령 enable 및 disable 의 특징에 대한 시스템 디폴트는 다음에 대한 명령 initial 에 의하여 설정된다.

ON area, arrow, break, font, mode

OFF absolute, cursor, pointer, ptrup

가능화 특징의 상태(status of Enable Feature)

명령 enable 의 영향을 받는 시스템 특징의 현재 온/오프(ON/OFF) 상태는 4-바이트 시스템 변수 zenable의 비트맵에서 발견된다.

zenable 비트 특징

1 absolute

2 pointer

3 mode

4 cursor

5 ptrup

6 font

7 area

12 break

13 arrow

zenable을 검사하기 위해서는 bit 함수를 사용한다. 하나의 비트 세트는 ON에 해당하고 비설정(unset)은 OFF에 해당한다. 예를 들면:

bit(zenable,2) = -1은 pointer ON을 의미한다.

bit(zenable,2) = 0은 pointer OFF를 의미한다.

실시예

포인터의 절대 화면 좌표가 포인터 위치에 디스플레이된다. 상기 좌표 및 디스플레이는 물리적 화면에 대한 것이고 여하한 명령 window, origin, rotate 또는 scale 의 영향도 받지 않는다.

enable pointer,absolute $$ 포인터 및 절대 루프를 턴-온한다

. pause $$ 마우스를 이동하여 버튼을 누른다

. at $$ 포인터 위치에서

. write <s,zinputx>> - <s,zinputy>> $$ 좌표 endloop를 나타낸다.

endif

if/else 프로그래밍 구조를 종결한다.

-----------------------------------------------------------------------------

endif

-----------------------------------------------------------------------------

설명

if 구조의 종결을 표시한다. 모든 if는 동일한 들여쓰기 레벨에서 매치되는 endif를 가져야 한다. if 구조에 대한 더욱 상세한 정보는 명령 if의 설명을 참조한다.

실시예

if score > 90

. write Very Good!

elseif score > 75

. write OK, but you could do better.

else

. write You need more practice.

endif

endloop

루프 프로그래밍 구조를 종결한다.

-----------------------------------------------------------------------------

endloop

=============================================================================

설명

루프 구조의 종결을 표시한다. 모든 loop는 동일한 들여쓰기 레벨에서 매치되는 endloop를 가져야 한다. loop 구조에 대한 더욱 상세한 정보는 명령 loop의 설명을 참조한다.

실시예

화면상에 50개의 X가 기재된다.

loop index1,50

. write x

endloop

erase

화면상의 박스, 프레임 또는 문자를 소거한다.

-----------------------------------------------------------------------------

erase [LOCATION][;[LOCATION][;Xframe[,Yframe]]]

-----------------------------------------------------------------------------

설명

화면상의 박스 또는 프레임을 배경색상으로 소거한다. LOCATION의 설명에 대해서는 명령 구문 규칙 (Command Syntax Conventions)을 참조한다. 명령 erase은 그리기에서 전경 색상을 사용한다는 것을 제외하고는 box에서와 같다. 프레임 폭 독립변수의 존재는 입체 박스(solid box)보다는 프레임이 소거되어야 함을 나타낸다. 상기 제 2 프레임 독립변수가 상부 및 하부 폭을 명기하는 반면, 좌우측 폭은 상기 제 1 독립변수에 의하여 픽셀 내에 명기된다. 제 2 프레임 독립변수가 없는 경우에는, 화면상의 외관에서 측부 폭과 가장 잘 매치되는 상기 상하부 프레임 폭으로 설정된다.

실시예

실시예 1

전체 화면(또는 윈도우)은 청색으로 소거된다.

colore blue

erase

실시예 2

폭 200 픽셀, 높이 100 픽셀인 직사각형은 배경 색상으로 소거된다. 그래픽 좌표는 하나의 위치에 대한 각각의 x,y 좌표를 명기하는 데에 사용된다.

erase 101,101; 300,200

실시예 3

write 문장에서 텍스트는 중지(pause) 이후에 나중에 소거된다. 명령 text measure은 화면상에 후속의 텍스트 문단이 플로팅되는 화면 영역을 결정하는 데에 사용된다. 이러한 정보는 좌측 하단 모서리에 대해서는 시스템 변수 zplotxl, zplotyl로, 우측 상단 모서리에 대해서는 시스템 변수 zplotxh, zplotyh로 복귀된다.

text measure $$ 텍스트 측정을 초기화한다

*

at 100,150

write 이는 소거될 임의의 길이로 된 텍스트 문단이다

*

pause

erase zplotxl, zplotyl; zpolotxh, zplotyh

실시예 4

10 문자가 소거된다.

at 10:1

erase 10

error

실행 에러 단위를 명기한다.

-----------------------------------------------------------------------------

error [UNIT]

error SELECTOR; UNIT; UNIT;...

-----------------------------------------------------------------------------

설명

실행 에러 과 및 단위를 설정한다. 실해 에러가 발생할 때마다, 시스템은 error로 명기된 단위로 점프된다. 아무런 단위도 명기되지 않은 경우에는 TenCORE 시스템 에러 메시지가 디스플레이된다.

블랭크-태그 형태는 상기 에러 과 및 단위를 클리어한다. 에러 단위의 설정은 다른 error 명령을 마주칠 때까지 유효하다.

상기 "error unit"는 시스템이 개시될 때의 라우터 과(router lesson)에 의하여 통상 설정된다. 에러가 에러 단위로 분기되면, 저장된 작업 모드는 바이너리 파일 또는 소스 파일로부터의 에러 단위를 인출할지 여부를 결정하는 데에 사용된다.

시스템 변수

zerrorl 에러 과(error lesson)의 명칭

aerroru 에러 단위의 명칭

exchang

2개의 메모리 영역 내용을 교환한다.

-----------------------------------------------------------------------------

chang keyword, offset; keyword, offset; length

keyword routvars | r 라우터 변수

display | d CGA 화면 디스플레이 메모리

global | g 전역 변수

local | l 지역 변수

sysvars | s 시스템 데이터 영역

sysprog | p 시스템 프로그램 영역

absolute | a 절대 메모리 위치

offset 메모리 기준으로부터의 오프셋

length 교환할 바이트의 수

-----------------------------------------------------------------------------

설명

2개의 메모리 영역 사이의 바이트를 교환한다. 65,535 (64K-1) 바이트까지 교환가능하다. 0의 오프셋은 메모리 영역의 시작을 명기한다.

상대적인 어드레싱에 대하여, TenCORE는 컴퓨터 메모리를 영역으로 각각 자신의 키워드를 사용하여 분할한다. 하나의 위치는 키워드를 제공함으로써 명기되고, 0의 오프셋은 그 영역의 제 1 바이트를 명기한다.

각각의 키워드에 대한 추가 정보는 다음과 같다:

routvars

이는 transfr 및 exchang만을 통하여 액세스 가능한 메모리의 256-바이트 영역이다. 이는 사용자가 활동 중인 동안에 데이터를 저장하기 위한 학생 라우터(Student Router)에 의하여 사용된다. 이 라우터를 사용하는 경우, 이 영역의 처음 128 바이트는 수정하지 않아야 한다.

display

CGA 화면 디스플레이 메모리. 기타 디스플레이 유형 (EGA, VGA, 등)에 대한 디스플레이 메모리는 exchang로써 액세스할 수 없다.

sysvars

데이터 저장에 이 영역을 사용하지 않는다.

sysprog

데이터 저장에 이 영역을 사용하지 않는다.

absolute

절대 메모리 위치가 다중 환경에서는 작동 불가능한 프로그램

exchang는 컴퓨터에서 임의의 메모리 영역을 액세스 가능하므로, 주의하여 사용해야 한다.

변수에서의 오프셋을 명기할 때, varloc() 함수는 특정 변수의 오프셋을 명기하는 데에 사용가능하다.

마찬가지로, 절대 메모리 위치는 absloc() 함수를 사용함으로써 명기 가능하다. 그러나, absloc()는 윈도우 또는 OS/2와 같은 다중-타스크 작업 시스템에 대하여 적절하게 작동 불가능하다.

지역적으로 정의된 명칭은 varloc()를 사용할 때 전역적으로 정의되는 명칭에 대하여 우선권을 갖는다.

실시예

실시예1

표현 varloc(scorvar)은 사용자 점수를 포함하는 전역 변수의 시작을 명기한다.

exchang global, varloc(scorvar); routvars,128; 128

* Uses 2nd of routvars

실시예 2

X0에서의 2-바이트 값이 X1에서의 2-바이트 값보다 작거나 같게 한다.

if x0>x1

. exchang globa, varloc (X0) ; global,varloc (X1);2

endif

exec

DOS 프로그램 또는 명령을 실행한다.

-----------------------------------------------------------------------------

exec keyword

command 프로그램 또는 명령을 DOS 명령 프로세서를 통하여

실행하거나 또는 DOS 프롬프트에 액세스를 제공한다

file 프로그램을 직접 실행한다

-----------------------------------------------------------------------------

설명

exec command [,all |memorySize]

DOS 명령 라인 프롬프트에 엑세스를 제공한다. TenCORE에 복귀되도록, DOS 프롬프트에서 exit를 타이프친다.

TenCORE에 의하여 현재 사용되지 않는 DOS 메모리는 DOS프롬프트에서 입력된 프로그램 또는 명령에 의하여 사용하기 위하여 가용하다. all 옵션이 명기되면, 가능한 한 많은 DOS 메모리가 일시적으로 제거가능한 대부분의 TenCORE에 의하여 가용하게 된다. 메모리 크기가 명기되면, 시스템은 명기된 수의 메모리 킬로바이트를 자유롭게 하고자 시도한다. DOS 명령 프로세서는 이러한 메모리의 일부을 사용한다.

exec command [,all |memorySize]; buffer [,Iength]

DOS 명령 프로세서가 로드되고, 그의 내용이 DOS 프롬프트에서 타이프된 경우에서와 같이 실행하도록 버퍼를 전달된다. 경로 검색 및 배치파일 실행과 같은 DOS 프롬프트의 특징은 가용하다. 길이가 명기되지 않은 경우에는, 버퍼의 정의된 길이가 사용된다; 버퍼의 말단에 미사용된 바이트는 제로로 채워져야 한다(zero-filled).

TenCORE에 의하여 현재 사용되지 않은 DOS 메모리는 전달된 프로그램 또는 명령에 의하여 사용가능하다. all 옵션이 명기되면, 가능한 한 많은 DOS 메모리가 일시적으로 제거가능한 대부분의 TenCORE에 의하여 가용하게 된다. 메모리 크기가 명기되면, 시스템은 명기된 수의 메모리 킬로바이트를 자유롭게 하고자 시도한다. DOS 명령 프로세서는 이러한 메모리의 일부을 사용한다.

exec file [,all |memorySize]; buffer [,Iength]

(단지) .EXE 및 .COM 파일을 실행한다. 완전한 파일명 (.EXE 또는.COM 확장자 포함) 뿐만 아니라 드라이브 및 경로가 명시되어야 한다. 경로 검색 및 배치파일 실행과 같은 DOS 프롬프트의 특징은 가용하지 않다. 첫 번째의 스페이스 또는 슬래시(/)로 시작되는 문자는 실행된 파일에 독립변수로서 전달된다. 길이가 명기되지 않은 경우에는, 버퍼의 정의된 길이가 사용된다; 버퍼의 말단에 미사용된 바이트는 제로로 채워져야 한다.

TenCORE에 의하여 현재 사용되지 않은 DOS 메모리는 실행된 파일에 의하여 사용가능하다. all 옵션이 명기되면, 가능한 한 많은 DOS 메모리가 일시적으로 제거가능한 대부분의 TenCORE에 의하여 가용하게 된다. 메모리 크기가 명기되면, 시스템은 명기된 수의 메모리 킬로바이트를 자유롭게 하고자 시도한다.

exec의 file 형식은 DOS 명령 프로세서가 로드되지 않은 command 형식보다 더욱 효과적이다. 이러한 형식은 또한 실행된 프로그램에 대한 에러 보고를 위하여 엑세스를 허용한다 (command 형식은 DOS 명령 프로세서에 대한 에러 보고를 제공한다).

실시예

다음의 정의는 다음의 모든 예에 대하여 사용된다.

define local

buf, 100

define end

실시예 1

임의의 DOS 지령 또는 화살표에서 타이프된 프로그램 명칭이 실행되도록 exec의 command 형식을 사용한다.

write 실행할 DOS 명령을 입력한다:

long 100

arrow

storea buf $$ 입력을 변수로 저장한다

ok

endarrow

exec command,all;buf

writec zreturn;;Error: zreturn = <<showt,zreturn>>

실시예 2

현재 디렉토리에서의 모든 TenCORE 데이터세트를 드라이브 a:로 복사하기 위하여 exec의 command 형식을 사용한다. 가능한 한 많은 메모리가 가용하다.

packz buf;;xcopy *.dat a:

exec command,all;펼

writec zreturn;;Error: zreturn = <<showt,zreturn>>

실시예 3

오토데스크 애니메이터(Autode나Animator) 애니메이션 프로그램 QUICKFLI.EXE을 디렉토리 d; PROGS에 불러오기하여 디렉토리 C: ANIMS에서 애니메이션 BACKHOE.FLI를 사용하기 위하여 exec의 file 형식을 사용한다. 250킬로바이트의 메모리가 필요하다.

screen mcga,medium

packz buf;;d: progs quickfli.exe c: anims backhoe.fli

exec file,250;buf

writec zreturn;;Error: zreturn = <<showt,zreturn>>

시스템 변수

exec명령은 다음의 시스템 변수를 설정한다.

command 형식

zreturn 작업의 성공여부를 보고한다

-1 DOS 명령 프로세서가 성공적으로 실행되었다

0 DOS 명령 프로세서를 로드하기에 불충분한 메모리 또는

요구되는 메모리 양을 제공불가능

1 DOS 명령 프로세서 (COMMAND.COM)이 발견되지 않음

file 형식:

zreturn 작업의 성공 여부를 보고한다

-1 DOS 명령 프로세서가 성공적으로 실행되었다

0 DOS 명령 프로세서를 로드하기에 불충분한 메모리 또는

요구되는 메모리 양을 제공불가능

1 프로그램이 발견되지 않음

zerrlevl 실행된 program에 의하여 복귀된 DOS ERRORLEVEL 값

상기 두가지 형식은 확장된 DOS 에러 정보를 제공하는 시스템 변수 zedpserr 및 zerrcode를 설정한다.

exitsys

DOS 또는 소위 TenCORE 프로그램에로 종료한다.

-----------------------------------------------------------------------------

exitsys [error[,noerase]]

error DOS 변수 ERRORLEVEL에 전달된 1-바이트 정수 값

noerase 화면 모드는 변경되지 않으며 화면은 소거되지 않는다

-----------------------------------------------------------------------------

설명

소위 TenCORE 실행자인 프로그램으로 제어가 복귀도니다. 통상적으로, 사용자는 DOS 프롬프트로 복귀된다. TenCORE가 DOS 배치파일을 통하여 시작되면, 상기 배치 파일 내의 다음 명령이 실행된다. error가 명기된 경우, 값은 DOS 변수 ERRORLEVEL에 전달되고, 여기에서 DOS 명령을 사용하여 테스트가능하다. 키워드 noerase 가 존재하는 경우, 화면 모드는 변경되지 않고 화면은 소거되지 않는다. 이 키워드는 복귀값 error를 사용할 때 명기만이 가능하다.

ERRORLEVEL 값

TenCORE는 다양한 에러 조건을 나타내기 위하여 ERRORLEVEL 값을 사용한다. 저자는 exitsys로써 0 내지 31의 값을 사용함에 대하여 통지된다.

0 Normal exit via exitsys (no tag)

1 보호 위반 복사

2 TenCORE 명령 라인 옵션의 에러

3 TenCORE를 실행에 불충분한 메모리

4 디스플레이 드라이버가 발견되지 않음

5 디스플레이 드라이버에서의 에러 (예를 들면, 무효한 교정 번호)

6 TenCORE 환경 문자열의 구문상 에러

7-15 추후 사용에 대한 예약

16 초기 단위가 발견되지 않음

17 실행된 제 1 단위에서 시작(startup)이 발견되지 않음

18 실행자와 호환불가능한 초기 단위 버전

19 TCDISKS 또는 TCSEARCH에 의하여 배재된 모든 드라이브

20-30 이후 사용에 대한 예약

31 일반적인 실행 에러(Execution Error) 디스플레이로부터 [SHIFT][7]가

눌려짐

extin

외부 I/O 포트로부터 데이터를 판독한다.

-----------------------------------------------------------------------------

extin port, buffer, length

port 판독할 I/O 포트의 어드레스

buffer 상기 포트로부터 데이터를 수신하기 위한 버퍼

length 수신할 바이트의 수

-----------------------------------------------------------------------------

설명

명기된 외부 I/O 포트로부터 명기된 수의 바이트를 판독한다. 이 명령은 직렬 또는 병렬 포트를 통하여 외부 장치를 제어하는 데에 사용된다. 직렬 및 병렬 포트의 어드레싱 및 제어에 대한 상세한 정보는 IBM Technical Reference Manual을 참조한다. extout는 extin에 반대되는 개념이다.

실시예

실시예 1

COM1로부터 데이터 1바이트를 판독한다.

define local

rstatus ,1 $$ 판독할 변수(the variable to read into)

define end

*

extin 1016,rstatus,1

* 어드레스 1016 (h3F8)으로부터 rstatus에로 1바이트를 판독

실시예 2

xon/oxoff 프로토콜을 사용하여 COM1 포트에로 1 바이트를 보내도록 extin 및 extout를 사용한다.

define local

status ,1 $$status flags for com1:

dr ,1 $$ data ready, bit 0 of the status bits

* 이 비트가 설정되면, 판독될 준비가 된 데이터가 있음

rstatus ,1 $$ 송신기 상태. 0이면, 포트는

* 전송할 다른 문자를 수용할 준비가 된

xonoff ,1 $$ xon/xoff flag. 1이면 xoff이고 나머지는 xon임.

char ,1 $$ 상기 포트 밖으로 보낼 문자

1sr = 1026 $$ 라인 상태 레지스터 어드레스

rxvar = 1016 $$ 변수 레지스터 어드레스 수신

txvar = 1016 $$ 변수 레지스터 어드레스 송신기

define end

*

loop

. loop

. . extin 1sr,status,1

* . 상태의 제 1 비트를 확인함,

* . xon/xoff가 보내졌는 지를 알아봄

. . calc drstatus $mask$ 1

. outloop dr = 0 $$ xon/xoff가 없으면, 진행함

* xon/xoff가 있으면, 이를 판독하고 플래그를 설정한다

. . extin rxvar,rstatus,1

. . calcs rstatus=17; xonoff0,1

. endloop

reloop xonoff = 1 $$ xoff이면, 다시 loop함

* 전달해도 되는지 알아보기 위하여 상태의 비트 5를 확인함

* 다른 문자

. calc txstatus $mask$ 32

outloop tx=32 $$ 괜챦으면, 이를 보내고, 아니면 다시 loop함

endloop

extout txvar,char,1 $$ 문자를 보냄

extout

외부 I/O 포트에 데이터를 기록한다.

-----------------------------------------------------------------------------

extout port, buffer, length

port 기록할 I/O 포트의 어드레스

buffer 상기 포트에 보낼 데이터를 포함하는 버퍼

length 보낼 바이트의 수

-----------------------------------------------------------------------------

설명

명기된 외부 I/O 포트에 명기된 수의 바이트를 기록한다. 이 명령은 직렬 또는 병렬 포트를 통하여 외부 장치를 제어하는 데에 사용된다. 직렬 및 병렬 포트의 어드레싱 및 제어에 대한 상세한 정보는 IBM Technical Reference Manual을 참조한다. extin는 extout에 반대되는 개념이다.

실시예

실시예 1

COM1에 rstatus의 내용을 기록한다.

define local

rstatus ,1

define end

*

extout 1016,rstatus,1 $$ rstatus를 COM1 (h3F8)에 기록한다.

실시예 2

추가 실시예에 대해서는 extin 명령의 설명에서 실시예 2를 참조한다.

fill

화면상의 경계 영역을 채운다.

-----------------------------------------------------------------------------

fill [color[,boundary]]

color 채색할 색상

boundary 채색할 영역의 경계를 구획하는 색상

-----------------------------------------------------------------------------

설명

현재 커서 위치에서 시작되어 둘러싸인 영역을 명기된 색상으로 채색한다. 아무런 색상도 명기되지 않은 경우, 상기 영역은 현재의 전경 색상으로 채색된다. 색상이 명기되지 않은 경우에는, 시작점의 원래 색상과 상이한 임의의 색상boundary 에서 채색을 중단한다.

채색할 영역이 폐쇄되지 않은 경우에는 전체 화면이 채색된다.

명령 fill은 통상 at에 뒤따르며, 이는 채색을 시작할 지점을 설정한다.

채색은 현재의 플로팅 모드를 사용하지 않는다: 명기된 색상은 모드에 무관하게 항상 나타난다.

실시예

밝은 백색의 삼각형 윤곽으로 기입된 적색 원을 생성한다. 제 1 딜레이 이후, 삼각형의 상부 세그먼트는 남색으로 채색된다. 제 2 딜레이 이후, 상부 세그먼트는 자홍색이 된다. 최종 딜레이 이후, 전체 삼각형은 백색 윤곽으로써 청색 일색으로 된다.

screen vga

color 적색

at 320,216

circle 65, fill

color white+

draw 320,335; 200,150; 440,150; 320,335

delay 1

color 남색

at 320,334

fill

delay 1

fill 자홍색

delay 1

fill 청색, white+

find

목록 내에서 데이터 대상물의 위치를 찾는다.

-----------------------------------------------------------------------------

find object, length, buffer, entries, incr, return

object 검색할 데이타

length 대상물의 바이트 길이

buffer 검색시작되는 변수

entries 목록 내의 엔트리 수

incr 버퍼 내 각 엔트리의 바이트 길이

return 제 1 부합(match)의 엔트리 번호

-----------------------------------------------------------------------------

설명

바람직한 대상물 문자열에 대한 문자 또는 숫자 엔트리의 목록을 검색한다. find는 상기 대상물을 매 incr 바이트마다, 정의된 크기 또는 변수의 경계에 무관하게 buffer의 시작으로부터 검색하게 된다. 그 특징들이 entries 및 incr에 의하여 전적으로 정의되는 목록의 제 1 바이트로 buffer를 간주한다.

incur가 음수이면, 검색은 목록 말단으로부터 시작까지 뒤쪽으로 진행한다.

return은 object가 발견된 목록의 위치를 나타내며, 그 처음 엔트리는 1이다. 만일 대상물이 발견되지 않으면, -1이 복귀된다. 검색이 뒤쪽으로 이루어지더라도 return에서의 값은 항상 목록의 시작에 관계한다.

실시예

실시예는 모두 다음의 정의를 취한다.

define local

name,15 $$ 검색할 명칭

found,2 $$ position in list where "name" found

list(5),15 $$ 명칭의 목록

define end

각각의 실시예에서, list는 5개의 명칭을 포함하며, 그 각각은 15문자를 점유한다. 그 내용은 아래와 같다:

무효한 성명은 그들의 가시성을 개선하기 위하여 도트로서 도시되며, 수는 바이트 카운팅을 돕기 위하여 추가되었다.

실시예 1... 문자 대상물

성명 'mark ho'를 검색한다.

find 'mark ho',7,list(1),5,15,found $$ found will be 2

상기 성명은 8이하의 문자이므로, 텍스트 문자 'mark ho'로서 제공 가능하다. 다음으로는 길이는 7문자이다. 목록의 시작은 list(1)이고, 그의 길이는 각각 15바이트의 5 엔트리이다.

목록에서 'mark ho'는 제 2 위치에서 발견되므로(제 2 바이트가 아님) search found는 값 2를 포함한다.

실시예 2... 변수 대상물

8 바이트 이상의 대상물은 텍스트 문자로서 부여될 수 없으며 변수로서 발생해야 한다. 'james heflin'을 위치시키기 위하여:

packz name;;james heflin

find name,15,list(1),5,15,found

'james heflin'는 제 4 위치에서 발견되므로 변수 found는 값 4를 수신한다.

실시예 3... 바이트-대-바이트

최종 성명을 찾기 위하여.

packz name;;miller

find name,6,list(1),75,1,found

이 실시예가 실행되면, found는 값 6을 수신한다.

이는 엔트리의 전체가 아닌 일부를 위치시키므로 성명의 길이는 6으로서 주어진다.

마찬가지로, 목록은 5개의 15-바이트 엔트리 대신 75개의 1-바이트 엔트리으로 명기된다. 이는 find로 하여금, 각각의 15-바이트 엔트리의 시작을 제외한 모든 바이트마다 'miller'로 시작되는 것을 찾도록 한다.

실시예 4... 후방 검색

뒤쪽으로 검색하기 위하여, 엔트리길이에 음수가 부여된다. 이는 'john'에 대한 목록의 끝으로부터 뒤쪽으로 각각의 15-바이트 엔트리의 시작에서만 검색한다.

find 'john',4,list(1),5,-15,found

여기에서, found는 값 1이다. 비록 검색이 목록의 끝으로부터 뒤쪽으로 진행되었으나, 위치는 항상 목록의 시작으로부터 카운팅된다.

실시예 5... 후방 바이트-대-바이트

다음은 후방 검색의 다른 실시예이다.

find 'john',4,list(1),75,-1,found

이 경우, -1의 엔트리 길이가 사용되며, find로 하여금 목록의 끝으로부터 시작하여 모든 문자마다 찾게 한다.

'sarah johnston'에서 후방 바이트-대-바이트 검색이 발생할 때 제 1 의 'john'이 발견되므로, found는 값 37을 수신한다. 만일 검색이 전방 방향으로 이루어졌다면, 'john miller'가 제 1 차로 발견되었을 것이며, found는 값 1을 수신하였을 것이다.

flow

사건-중심 단위 분기(event-driven unit branching)에 의하여 진행되는 과를 관리한다.

-----------------------------------------------------------------------------

flow keyword...

jump 화면 소거로써 사건중심 단위 분기를 정의한다

jumpop 화면 소거를 제외하고는 jump와 같다

do 사건 중심 서브루틴 호출을 정의한다

library 바이너리 서브루틴 호출을 강제하는 것을 제외하고는 do와

같다

clear 활성인 플로우 사건 설정을 클리어한다

save 플로우 사건의 활성 세트를 저장한다

restore 저장된 플로우 사건 세트를 활성 상태로 복구한다

delete 저장된 플로우 사건 세트를 삭제한다

reset 모든 저장된 플로우 사건 세트를 삭제한다

dir 활성 플로우 사건의 목록을 복귀한다

info 활성인 플로우 사건에 대한 플로우 분기 데이터를 제공한다

-----------------------------------------------------------------------------

설명

사건 중심 분기를 관리한다. 사건은 키입력, 포인터 입력, 타임-업(time-ups) 등이 될 수 있다. 구체적인 사건은 새로운 메인 단위 또는 서브루틴 호출로 점프를 트리거할 수 있다.

50가지의 상이한 사건까지 소정 시간에 프로그램가능하다(active). 한 세트의 플로우 사건 및 관련 분기는 과(lesson)를 통하여 모든 새로운 메인 단위를 위한 디폴트 환경으로서 정의될 수 있다. 발전된 옵션은 과의 플로우 설정을 조작가능하므로 라우터 또는 라이브러리 루틴에 대하여 깨끗한 접속을 제공할 수 있다.

플로우 사건은 통상적으로 과내에서 대기상태에 발생한다:

플로우 키 입력을 허용하는 pause에서

사용자의 키입력을 처리하는 arrow에서

단위의 실행 종료시("end-of-unit")

코딩 서열은 기타 임의의 장소에서 플로우 사건에 의하여 인터럽트되지 않을 것이고, 그렇지 않으면 플로우 정의가 프로그램 인터럽션을 허용하도록 break로써 수정되었다.

flow jumpjumpopdolibrary; KEY/s; UNIT[modifier;modifier;...]

키입력(또는 기타 입력 사건) 및 단위로의 분기 사이의 연결을 정의한다. 제 1 독립변수는 분기의 유형을 명기하는 키워드이다. KEY는 구문 규칙 (Syntax Conventions) 부분에 상세하게 설명된다. 콤마로 구분된 다중 키가 허용되며 눌렸을 때에 UNIT로의 분기가 유발된다. 총 50개의 상이한 사건은 다중 flow 명령에 의하여 생성된 바와 같이 프로그램 가능하다(active). 주어진 사건은 동시에 하나의 분기와 관련된다. 동일한 사건이 2개의 상이한 플로우 명령에 정의되면, 가장 최근 정의가 우선권을 갖는다. 수정자는 명령의 표준 작업을 변경한다. 독립변수 전달(argument passing)은 지원되지 않는다.

jump

현재 단위를 끝내고 새로운 메인 단위에 분기한다. 다음의 초기화설정(initialization)이 실행된다:

화면은 디폴트 배경 색상으로 소거된다

모든 flow 사건 및 area 정의는 클리어되며 그들의 메인 단위 디폴트로 재설정된다

모든 디스플레이 파라미터는 그들의 메인 단위 디폴트에 재설정된다(status save; default에 의하여 설정된 바와 같음)

단위는 처리 및 플로우 단위에 대한 새로운 메인 단위가 된다

jumpop

현재 단위를 종료하고 화면 소거없이 ("on Page"에 대한 "op" 표준) 새로운 메인 단위에 분기한다. 다음의 초기화설정(initialization)이 실행된다:

모든 flow 사건은 클리어되며 그들의 새로운 메인 단위 디폴트로 재설정된다

상기 단위는 그 처리 및 flow 사건을 위하여 새로운 메인 단위가 된다

do

서브루틴으로서 하나의 단위를 호출한다. 초기화가 실행되지 않는다. 상기 서브루틴 단위로부터 복귀하여 flow do 사건이 발생한 위치에서 실행을 계속한다. flow do는 호출 과의 모드에 따라 소스 또는 바이너리 모드로 실행된다.

library

바이너리 서브루틴으로서 하나의 단위를 호출한다. 초기화가 실행되지 않는다. 상기 서브루틴 단위로부터 복귀하여 flow do 사건이 발생한 위치에서 실행을 계속한다. 20 레벨의 중첩된 서브루틴 호출이 허용된다. flow library는 상기 코딩이 바이너리 형식으로 존재하는 경우에만 제 3 소프트웨어를 호출하기 위하여 종종 사용된다.

실시예 1

[ENTER]를 누르면, 현재 과에서 제어를 quiz1로 분기 및 전달한다. 화면은 소거되고 모든 디스플레이 설정, 플로우 분기 및 포인터 영역은 그들의 메인 단위 디폴트에 재설정된다. [F8]을 누르면, moreinfo가 서브루틴으로서 호출되어 나머지를 호출 단위로써 제어한다. 단위 moreinfo는 이미 화면상에 있는 것에 새로운 정보를 추가하기 위한 코딩을 포함한다.

write 퀴즈를 시작하기 위하여 엔터를 누른다

추가 정보를 위하여 F8을 누른다

flow jump; %enter; quiz1

flow do; %f8; moreinfo

실시예 2

[F1] 또는 [ESC]를 누를 때, 과 aero1의 단위 index로 제어가 분기 및 전달된다. [PG↑]를 누르면, 바이너리 서브루틴 scroll이 실행된다. 제어는 scroll로부터의 복귀에 따라 호출 단위에 남는다.

flow jump; %f1,%esc; aero1,index

flow library; %pgup; scroll

실시예 3

임의의 키 a,b,c 또는 변수 xkey에 포함된 값이 입력될 때 변수 unitVar로 명명되는 단위에 분기된다.

flow jump; a,b,c, <<xkey>> ; <<unitvar>>

실시예 4

[F1]을 누르거나 또는 Click가 관련 영역에 발생될 때 화면 소거로 help에 분기된다. [F2]입력 또는 관련화면상의 Click은 화면 소거 없이 more에 분기된다. 어느 경우에든, 제어는 새로운 단위로 전달된다.

area define; 100,0; 150,20; click=%f1

area define; 200,0; 250,20; click=%f2

flow jump; %f1; help

flow jumppop; %f2; more

일반적인 단위 명칭(Generic Unit Names)

공통의 jump 종착(destination)에 대하여 일반적인 분기 명칭이 새로운 메인 단위로 제공된다;

=next 과 중 현재 메인 단위의 물리적 다음 단위. 없는 경우, 분기는 무시된다.

=back 과 중 현재 메인 단위의 물리적 이전 단위. 없는 경우, 분기는 무시된다.

=first 현재 과 중 제 1 차로 실행가능한 단위

=last 현재 과 중 최종적으로 실행가능한 단위

=main 시스템 변수 zmainl,zmainu에 보유되는 현재 메인 과 및 단위.

=base 최종적으로 base 수정된 flow 분기가 발생되는 또는 base 명령에 의하여 설정된 바의 메인 과 및 단위. 없는 경우, 분기는 무시된다. 현재 기본 과 및 단위의 명칭들은 시스템 변수 zbasel,zbaseu에 보유된다. 대표적으로 help와 같은 보충 과 서열로부터 연구의 메인 라인으로의 복귀를 위하여 사용된다. 페이지 $$$상의 수정자 base 참조.

=editor 저자 시스템에 의하여 실행되는 경우 소스 편집자 (편집되는 소스 블록으로 현재의 실행 단위); 학생 실행자에 의하여 무시됨

=exit 명령 exitles에 의하여 설정된 바 및 시스템 변수 zexitl,zexitu에 포함된 과 종료. 아무것도 존재하지 않는 경우, 학생 사용자는 주로 TenCORE 활동 관리자(Activity Manager) 또는 DOS와 같은 라우팅 시스템에로 다시 분기된다. 과를 테스팅하는 저자는 파일 디렉토리(File Directory)에 복귀된다.

=system 계산기, 화상 변화(capture), 커서, 등으로써 시스템 옵션을 개방한다. [F2]는 통상적으로 권한부여(authorizing) 동안 TenCORE 시스템 디폴트와 같은 분기로써 로드된다; 학생 실행자에 의하여 무시된다.

실시예 1

[ESC] 또는 [F6]를 누를 때, 과 중 현재의 메인 단위에 전후되는 단위로 분기된다. 과의 제 1 또는 최종 단위에서, 분기는 무시된다. 이는 선형 페이지-턴닝 과에 대하여 필수적인 플로우를 프로그래밍하기 위한 용이한 방식이다.

flow jump; %enter; =next

flow jump; %f6; =back

실시예 2

[ESC]를 누를 때, 라우터에서 명령 exitles로 명기된 종료 단위 또는 명기된 바가 없는 경우에는 DOS로 분기된다.

flow jump; %escape; =exit

미참여 입력(Unparticipated Input)

플로우 사건은 의사키 %other를 사용함으로써 자연적인 대기 상태 중 하나에서 모든 미참여 입력에 대하여 정의가능하다. 이러한 "other" 사건은 기타 가능한 flow 분기 또는 입력 상황에 상기 입력이 인가될 수 없는 경우에만 발생한다.

실시예 1

시스템에 의하여 폐기될 임의의 키 입력을 이후에 학습될 미참여 입력을 기록하는 단위 record에로 분기한다.

flow do; %other; record; default; break

실시예 2

pause에서 키 a,b, 및 c 은 단위의 실행을 계속한다. [ENTER] 및 [F6]과 같은 활성 flow 사건에 명기된 임의의 입력은 정의된 바대로 작업한다. 기타 입력은 단위 continue로 분기된다.

flow jump; %enter; =next

flow jump; %f6; =back

...

flow jump; %other; continue

...

pause flow=all; pass=a,b,c

실시예 3

arrow에서 a,b, 및 c와 같은 표준 아스키(ASCII) 입력은 예상되는 화면상에 타이핑이 나타나도록 한다. 소거, 복사, 엔터키로 판단(judge-with-the Enter key) 등과 같은 기타 arrow 관련 기능 또한 예상대로 수행된다. 단위 aha로의 분기와 같은 기타 정의된 flow 사건은 활성이다; 미정의된 [F12]와 같은 미참여 키는 단위 help로 분기된다.

flow do; %other; help

flow jump; %f3; aha

...

arrow 10:20

수정자

flow 문장 상의 수정자는 명령의 디폴트 활동을 변경한다. 세미콜론에 의하여 분리된 다중 수정자는 상호 배타적인 경우에조차도 어느 순서로든 사용가능하다.

default 모든 후속의 새로운 메인 단위에 대한 디폴트 설정으로서 flow 분기를 설정한다. default 수정된 플로우 설정은 default 또는 router 수정자가 있는 flow clear 문장 또는 initial 문장에 의하여 클리어된다. 전체 과에 대한 default 설정은 과의 +initial 제어 블록에 종종 위치하므로 과에 대한 임의의 엔트리으로써도 설정된다.

complete 단위내의 모든 처리가 임의의 pause 또는 arrow 문장을 포함하여 종료되기까지 flow 명령을 유효한 것으로 딜레이한다. flow는 단위 말단(end-of-unit)에서만 작업한다. 예를 들면, 사용자는 다음 단위로의 분기 이전에 하나의 단위 내에서 모든 arrows를 종료하도록 요구될 수 있다. 수정자 complete 및 break는 결합 불가능하다.

router 모든 이어지는 단위에 대하여 영구적으로 플로우 설정을 한다. initial 문장에 의하여 클리어되지 않는다. 수정자 router는 응용에서 라우팅 사용을 위한 키를 영구적으로 설정하도록 소프트웨어 (TenCORE Activity Manager와 같은)의 관리를 허용한다. router 플로우 설정은 수정자 router가 있는 flow clear를 사용함으로써만 클리어 가능하다. 예를 들면, [SHIFT][1]를 사용하여 router 수정된 종료 분기는 TenCORE 시스템에 의하여 학생 실행자의 시동(start-up)에서 설정되어 사용자로 하여금 DOS로 복귀하도록 한다. 활동 관리자(Activity Manager)가 사용되면, 응용에 착수하기 전에 활동 관리자의 복귀 단위로 사용자가 다시 종료하도록 flow 분기를 재설정한다. 사용자가 응용에 빠져들게 됨에 따라 상기 적용 과에서의 router 플로우 설정을 클리어하는 것에 각별한 주의를 기울여야 한다. 수정자 router 및 break가 함께 가장 잘 사용되며, 그렇지 않으면 과는 모든 상황에서 라우터 종료(exit) 키를 수리하게 됨을 확신할 수 있다.

break 처리에 있어서 프로그래밍 또는 pause를 인터럽트하면서 임의의 지점에서 flow 분기의 발생을 허용한다. break 수정된 flow 분기는 항상 작업하며 그렇지 않으면 disable break에 의하여 일시적으로 턴-오프된다. break 에 대한 주요 사용은 키에 대하여 점검하지 않는 프로그래밍 루프를 인터럽트하기 위한 것이다. 수정자 break는 종료 분기가 적용 과에서 항상 작동되게 보장하기 위하여 라우터에 의하여 수정자 router로써 종종 사용된다. break 는 complete 와 결합 불가능하다. break 수정된 flow do 또는 flow library 사건이 처리될 명령을 인터럽트할 때(프로그래밍 루프에서와 같이), 현재의 프로그램 문장은 종료되며 서브루틴이 실행되고 그 후 다음 문장이 계속하여 처리된다. 시간이 정해진 pause 또는 delay 명령에서 break가 발생할 때, 상기 서브루틴으로부터의 복귀 시까지 타이밍이 중지된다. 서브루틴 호출 동안, flow 사건은 반복(recursion)을 피하기 위하여 일시적으로 불능화되고, 상기 서브루틴으로부터의 종료에 따라 재-가능화된다. 또한, 이어지는 시스템 변수는 저장되고 서브루틴 호출에 대하여 복구된다: zinput,zinputf,zinputx,zinputy,zinputa,zreturn. break를 do 또는 library 형식의 flow와 함께 사용할 때에는 신뢰성 없는 결과를 피하기 위하여 각별한 주의를 기울여야 한다. break 인터럽트는 어느 곳에서든 발생 가능하므로, 변수 (특히 시스템 변수)는 호출로부터의 복귀에 따라 변수를 무효화하는 인터럽트 do 또는 library 호출 레벨에서 우발적으로 변경될 수 있다. 다음의 실시예 4 참조.

clearkeys 분기됨에 따라, 입력 버퍼로부터의 모든 계류중인 입력을 삭제한다. clearkeys는 길이 전체-페이지 디스플레이(lengthy full-page display)와 같은 마지막까지 어떤 사건을 기다리며 "스택"("stacked-up)"될 수 있는 키를 삭제한다.

base flow 분기상의 수정자 base는 분기가 시작되는 메인 과 및 단위로 하여금 기준 과 및 단위가 되도록 하고 시스템 변수 zbasel 및 zbaseu에 저장되도록 한다.

windowclose flow 분기를 실행하기 전에 현재의 윈도우를 폐쇄한다.

windowreset flow 분기를 실행하기 전에 모든 개방된 윈도우를 폐쇄한다.

operate 분기 이전에, 플로우 문장과 마주친 때에는 실행모드를 유효한 것으로 복구한다. (작업 명령 참조)

binary 분기 이전에, 바이너리 실행 모드로 변경한다.

source 분기 이전에, 소스 실행 모드로 변경한다.

tpr 분기 이전에, tpr(Producer) 실행 모드로 변경한다.

실시예 1

[ENTER]키를 누를 때 과에서 다음의 선형 단위로의 즉각적인 분기를 유발한다. 모든 후속의 메인 단위는 이러한 플로우 설정에 디폴트이다. 이러한 문장이 전체 과에 적용되면, +initial 제어 블록에 위치된다.

flow jump; %enter; =next; default; break

실시예 2

라우터 종료 키로서 [ESC]를 설정한다. 이는 +initial 명령에 대하여 영구적으로 유지되며 임의의 프로그래밍 상황 (break 가 불능화되지 않았다면)을 break 하고, 모든 윈도우를 폐쇄하며, route, return으로 점프한다.

flow jump; %escape; route,return; router; break; windowreset

실시예 3

단위 말단에서 [ENTER]를 누르면, 단위 ques6으로 분기된다. pause 또는 arrow는 제 1 차로 종료되어야 한다. 기타 입력 "스택"(stack-up)은 제거된다.

flow jump; %enter; ques6; complete; clearkeys

실시예 4

라이브러리 단위(과 routines에서 clock)는 [F10]을 누를 때나 또는 %timeup 입력이 발생할 때마다 사용자에게 그 시간을 알리도록 설치된다. 라이브러리 루틴 자체내에서, time 1 문장은 종료 이전에 실행되어 %timeup 키의 발생을 유지하고 사용자가 상기 메인 단위내에 남아 있는 동안 매초 클록을 "재생(reflesh)"한다. 예상하지 못한 인터럽트에 의하여 영향을 받을 수도 있는 과내의 임계 코딩은 상기 코딩에 대하여 break 속성을 불능화함으로써 보호되며, 상기 코딩 이후에 다시 가능화된다.

flow library; %f10,%timeup; routine,clock; break; default

...

disable break $$ 임계 코딩을 보호한다

attach 'file;nameset $$ 아마도 단위 클록이 또한 첨부된다

do zreturn;;erroru

setname 'block' $$ and setname

...

enable break $$ re-enable break

flow clear [;KEYS/s][;default |router]]

활성 목록로부터 그리고 선택적으로는 새로운 메인 단위 default 및 router 목록로부터 플로우 설정을 삭제한다. 수정자 default는 수정자 default로써 설정된 임의의 flow 정의를 삭제하는 데에 사용된다. 수정자 router는 router 및 default 수정된 플로우 설정을 삭제하는 데에 사용된다.

실시예 1

router로 수정된 것을 제외한 모든 활성 플로우 설정을 삭제한다. 수정자 default로 된 임의의 설정은 jump에 따라서 새로운 메인 단위로 재활성화된다 (re-activated).

flow clear

실시예 2

수정자 router로써 정의되지 않은 경우 [ENTER] 및 [F6]에 대한 임의의 활성 플로우 설정을 삭제한다. 이들 키 중 어느 것이든 수정자 default로 정의되면, jump에 따라서 새로운 메인 단위로 재활성화된다.

flow clear; %enter,%f6

실시예 3

router 속성을 갖지 않는 경우 활성 및 default 플로우 설정으로부터 [ENTER]를 삭제한다.

flow clear; %enter; default

실시예 4

활성 및 디폴트 설정 모두로부터 router로 수정된 것을 제외한 모든 플로우 설정을 삭제한다. initial 문장 또한 이 타스크에서 수행된다.

flow clear;; default

실시예 5

어떻게 설정되었는 지에 무관하게 플로우 설정으로서 [ENTER]를 완전히 삭제한다.

flow clear; %enter; router

실시예 6

어떻게 정의되었는지에 무관하게 모든 플로우 설정을 삭제한다. [SHIFT][F1]과 같은 시스템 flow 설정에 대하여 각별히 주의를 요하는 사용이 제거되며, 그렇지 않으면 제공될 수도 있는 임의의 종료를 방지한다.

flow clear;; router

flow save;'NAME' |local

flow save; default

메모리 풀 블록 또는 default 버퍼에 활성 플로우 정의 세트를 저장한다. 명칭은 텍스트 문자 또는 변수에 포함된 것 중 어느 것으로든 할 수 있다. 명명된 블록은 임의의 단위에서 이후에 복구 가능하다.

키워드 local은 저장할 단위에서만 복구가 가능한 현재 단위 A 지역 블록 특유의 메모리 풀 블록 내에 플로우 설정을 저장한다; 이는 단위의 실행이 종료될 때 자동적으로 삭제된다.

default 버퍼에 대한 활성 flow 설정의 저장은 그들로 하여금 모든 새로운 메인 단위에 대하여 디폴트 flow를 설정하게 한다. 이들은 다른 단위에 대하여 jump 또는 jumpop상에 자동적으로 재설정된다.

메모리 풀은 명령: memory, image, window, status, area, flow, font 및 perm에 의하여 사용된다. 메모리 블록은 생성시 명기된 명령 유형에 속하는 바대로 태그되며, 메모리 풀을 사용하는 기타 명령에 의해서는 액세스 불가능하다; 메모리 블록의 동일 명칭에 마찰없이 상이한 명령을 사용할 수 있다.

실시예 1

메모리 풀 내의 명칭 flows 하에 활성 플로우 설정을 저장한다.

flow save; 'flows'

실시예 2

단위 특유의 블록 내 서브루틴 호출에 대하여 활성 플로우 설정을 저장 및 복구한다.

flow save; local

do routines,graph

flow restore; local

실시예 3

활성 플로우 설정으로 하여금 jump 또는 jumpop 분기에 의하여 입력되는 모든 후속 단위에 대한 디폴트가 되도록 한다.

flow save; default

flow restore;'NAME' |local [;delete]

flow restore; default

종전에 저장된 세트로써 상기 활성 플로우 설정을 대체한다. 선택적으로, 명명된 또는 local 블록은 수정자 delete를 사용함으로써 메모리 풀로부터 삭제가능하다.

실시예 1

라이브러리 호출에 대하여 활성 플로우 설정을 저장 및 복구한다. 라이브러리 루틴은 복귀에 따라 호출 프로그램에 영향을 미치지 않고도 원하는 활성 플로우 설정을 변경할 수 있다. 양자택일적으로, flow save 및 restore는 더욱 용이하게 사용되는 도구를 제공하기 위하여 라이브러리 루틴에 구성 가능하다.

flow save; 'flows'

library routines,graph

flow restore; 'flows'

실시예 2

변수 setUp에 명칭이 포함되어 있는 플로우 설정을 재활성화한다. 메모리 블록은 삭제된다.

flow restore; setUp; delete

flow delete; 'NAME | local

메모리 풀로부터 저장된 플로우 설정 세트를 삭제한다.

실시예 1

메모리 풀로부터 저장된 flow 사건의 quiz 세트를 삭제한다.

flow delete; 'quiz'

flow reset

메모리 풀로부터 모든 명명된 플로우 설정 세트를 삭제한다. 플로우 설정의 default 세트는 영향을 받지 않는다.

flow dir; keyBuffer[,length]

모든 활성 flow 사건에 대한 키를 목록한다. 키 입력은 2-바이트 값(가능하면 0으로 끝나는)의 서열로 keyBuffer에 복귀한다. 이들 값은 flow 사건에 대한 전체 정보를 얻기 위하여 flow info에 대한 입력으로서 사용가능하다. 시스템 변수 zflowcnt는 여러 활성 flow 사건을 보유한다.

실시예

모든 활성 플로우 설정에 대한 키 입력값을 구한다. 입력은 value로 불리우는 50-요소(최대)의 배열에서 2-바이트 값으로 복귀된다.

define local

value(50),2

define end

flow dir; value(1), zflowcnt*2 $$ 활성 플로우 키 판독

flow info; KEY; infoBuffer[,length]

명기된 키 입력값에 대한 플로우 설정 파라미터를 주어진 버퍼로 복귀한다. 복귀된 정보의 최대 길이는 22바이트이다. 선택적인 length 독립변수는 복귀된 바이트의 수를 제한할 수 있다. flow info를 사용하는 확장된 코딩 예는 과 TCSAMPLE 단위 i/flow에 나타낸다.

시스템 디폴트 프로우 설정(System Default Flow Settings)

과를 진행하는 동안, [SHIFT][F1],[F2] 및 [SHIFT][F2]는 저자(authoring) 시스템에 의하여 다음과 같이 사전 정의(pre-define)된다:

flow jump; %F1; =exit; break; router

flow jump; %F2; =editor; break; router

flow jump; %f2; =system; break; router

단지 [SHIFT][F1]만이 학생 시스템에 의하여 다음과 같이 사전 정의된다:

flow jump; %F1; =exit; break; router

이들 플로우 설정은 수정자 router로써 flow clear를 사용함으로써 재정의 또는 삭제가능하다. 그러나, 과를 벗어나기 위한 대체 수단이 제공되어야 한다; 그렇지 않으면 사용자는 DOS에도 종료하지 못한 채 붙들여 있게 된다.

library 호출에 대한 또는 library 호출내의 활성 또는 디폴트 플로우 설정 모두를 일시적으로 저장, 클리어 및 복구하기 위해서는 다음을 실행한다:

flow save; 'currents' $$ 활성 플로우 설정을 저장한다

flow restore; default $$ 디폴트를 활성으로 복구한다

flow save; 'defsave' $$ 디폴트 플로우 설정을 저장한다

flow clear;;default $$ 라우터 설정을 제외하고 모두 삭제한다

...

라이브러리 루틴,stuff $$ 라우터를 제외한 모든 설정이 변경가능하다

...

flow restore;'defsave' $$ 저장된 디폴트 설정을 다시 판독한다

flow save;default $$ 그들을 디폴트로서 다시 설정한다

flow restore;'currents' $$ 저장된 활성 설정을 복구한다

시스템 변수

zreturn

메모리 풀을 사용하는 명령 flow의 save,restore,reset 및 delete 형식은 zreturn에 성공 또는 실패를 보고한다. 기타 모든 형식은 zreturn은 ok(-1)로 설정된다. 주요 zreturn 값은 아래와 같다:

-1 성공적인 작업

10 발견되지 않는 명칭

18 메모리 풀 요구를 충족시킬 수 없음

기타(Miscellaneous)

zflowcnt 프로그램된 플로우 설정의 수

zmaxflow 허여된 플로우 설정의 최대 수

font

텍스트 디스플레이용 폰트를 선택한다.

-----------------------------------------------------------------------------

font ['LESSON']'FONT'[;fontNumber | standard[;noload]]

font ['LESSON']'FONTGROUP'[;fontNumber | standard[;noload]]

font ;fontNumber

font standard[;standard]

font info; infoBuffer[,length]

-----------------------------------------------------------------------------

설명

폰트는 과 내의 명명된 블록이다. ASCII 문자 코드 0 내지 255의 일부 또는 전체에 해당하는 문자 디자인을 갖는다. 폰트 그룹 또한 과 내의 명명된 블록이다. 이는 상이한 텍스트 속성을 갖는 관련 폰트의 목록을 포함한다.

size, bold, italic 및 narrow 의 text 명령 속성은 폰트 및 폰트 그룹들과 상호작용을 한다. 폰트에 있어서, 속성의 외양은 합성된다 (narrow에 대한 것 제외). 하나의 폰트 그룹이 활성일 때, 시스템은 자동적으로 소정 시간 내에 가능화되는 텍스트 속성에 대하여 가장 적절한 멤버 폰트를 선택한다.

하나의 폰트 또는 폰트 그룹은 항상 standard로서 지정된다. 표준 폰트는 텍스트 디스플레이에 대하여 다른 폰트가 현재 선택된 경우에 조차도 문자 화면 좌표에 대한 기본이 된다. 예를 들면, at 5:10은 상부로부터 아래쪽으로 5 표준 문자 높이 및 좌측으로부터 9문자 폭의 화면위치를 나타낸다. 현재 화면 해상도에 대한 적절한 폰트 그룹은 initial 또는 screen 명령이 실행될 때 자동적으로 표준으로 지정된다. 그러나, 이러한 표준은 상이한 폰트 또는 폰트 그룹으로 번복될 수 있고 따라서 문자 그리드가 변경될 수 있다.

폰트 또는 폰트 그룹은 선택적으로 기준 번호와 관련될 수 있다. 이 번호는 나중에 단독으로 폰트의 선택을 해제하는 데에 사용될 수 있다.

명령 status는 모든 font 및 text 파라미터를 저장 및 복구할 수 있다: 선택된 폰트 또는 폰트 그룹, 또는 standard 폰트, 폰트 번호 표, 및 텍스트 속성. 문장 status save;default는 단위에 대한 jump 분기에 대하여 이러한 파라미터들을 저장하도록 요구된다.

폰트 및 폰트 그룹은 메모리 풀에 보관된다. 메모리로부터의 폰트를 반드시 삭제할 필요는 없다; 다른 메모리 풀 대상물을 위한 공간이 필요할 때, 이들은 자동적으로 삭제되며 필요한 경우에는 디스크로부터 다시 로드된다.

시스폰트 그룹은 과 TCSTDFNT 내에 존재한다. 장식적인 폰트 그룹 추가 세트는 과 TCFONTS에 마련된다. 폰트 편집기(Font Editor)는 이러한 과내의 임의의 폰트를 수정하고, 다른 소스로부터 폰트를 도입하거나 또는 스크래치(scratch)로부터 주문(custom) 폰트를 생성하는 데에 사용 가능하다.

font ['LESSON',]'FONT'

현재의 과로부터 또는 명명된 과로부터 선택적으로 특정 폰트를 선택한다. 폰트는 디스크로부터 메모리 풀에 가져오기 되며, 다른 명령 font 또는 디폴트 폰트ㄹ에 재성되는 단위로의 분기로 대체될 때까지 활성으로 남게된다.

실시예 1

명령 initial은 현재 화면의 해상도를 위하여 standard 폰트를 포함하는 표준 디폴트로 모든 플로팅 파라미터를 설정하도록 한다. 현재 과에서 폰트 gothic이 로드되어 다음 write 텍스트에 대하여 사용된다. 다음, 폰트 텍스트 속성은 최종 write 문장이 폰트 gothic으로부터 합성된 형태로 나타나도록 변경된다. zreturn 체크는 디스크로부터 폰트를 로딩함에 있어서의 시스템 오류를 나타낸다. zreturn 체크는 font 명령이후 권장되나, 다음의 예들 이후에는 공간을 절약을 위하여 생략된다.

initial

write 이 텍스트는 시스템 표준 폰트를 사용한다.

font 'gothic'

if zreturn > -1

. write Error <<s,zreturn>> loading Gothic

endif

write 이 쓰기(writing)는 고딕 폰트에서의 문자 디자인을 사용한다.

text 크기; 2

text bold; on

write 이 쓰기는 고딕 폰트로부터 합성된 볼드체 및 2배 크기의 폰트를 사용한다.

실시에 2

과 TCFONTS에서 장식적인 폰트 라이브러리로부터 폰트 bur48을 선택한다. font 'tcfonts', 'bur48'

write 이 텍스트는 벌레스크(Burlesk) 문자 정의를 사용한다.

실시예 3

변수 fontLib에 명명된 과로부터 변수 fontVar에 명명된 폰트를 선택한다.

font fontLib, fontVar

font ['LESSON',]'FONTGROUP'

font group을 활성화하고 현재의 text 속성에 기초한 그룹으로부터의 폰트를 선택한다. 특정 폰트는 텍스트 속성 size (1 내지 9), italic, bold, 및 narrow의 모든 72가지 조합에 대한 폰트 그룹내에 존재 가능하다. 명령 text는 (내장 및 노출된 코드 형태로) 이들 속성을 설정하므로, 상기 그룹으로부터 선택되는 폰트를 결정한다. 요구되는 속성의 폰트가 상기 그룹내에서 발견되지 않는 경우에는 가장 유사한 것이 사용되며, 매치되지 않는 속성은 가능한 한 합성된다. 합성가능한 속성은 (단지, 2 내지 4), italic 및 bold 이다. 시스템 변수 zfontret 및 zfontf (후술되는 시스템 변수 참조)는 상기 그룹으로부터의 현재 폰트 선택이 현재 유효한 텍스트 속성과 얼마나 잘 매치되는지를 나타낸다.

font 문장을 살펴봄으로써 하나의 폰트 또는 폰트 그룹이 참조되는지를 나타낼 수는 없으나, 블록의 유형은 블록 디렉토리 페이지상에 디스플레이된다.

실시에 1

폰트 그룹 mine는 폰트 4를 가지며 볼드체를 제외한 보통 및 이택릭체에서는 특히 크기 1 및 2로 특히 고안된다. 텍스트 속성은 이택릭체 및 볼드체 용으로 쓰기 문장 선택에서 코드들을 노출한다. 볼드체는 합성되는 반면, 이탤릭체는 상기 그룹에 고안된 폰트 중 하나로부터 온다.

font 'mine'

text size; 1

write 보통체 및 이탤릭체 텍스트는 특별히 고안된 폰트로부터 직접 나오나, 볼드체는 합성된다.

text 크기; 2

write 이 크기 2 보통 및 이탤릭 텍스트는 고안된 폰트로부터 직접 오며, 한 편 볼드체는 크기 2의 보통체 및 이탤릭체 폰트로부터 시작되어 합성된다.

실시에 2

크기 속성은 장식적인 폰트 그룹의 각각으로부터 크기 2의 폰트가 선택되도록 한다.

text 크기; 2

font 'tcfonts','burlesk'

write 이 쓰기는 폰트 그룹 벌레스크(burlesk)를 사용한다.

font 'tcfonts','opera'

write 이 쓰기는 폰트그룹 오페라(opera)를 사용한다.

font standard

표준 font 또는 font group을 선택한다. 이는 과 TCSTDFNT에서 발견되는 시스템 표준 폰트 중의 하나이며, 그렇지 않으면 표준 폰트는 다음 부분에서 설명되는 바대로 번복된다.

실시예

font 'gothic'

write 이 텍스트는 고딕체로 된다

font 표준

write 한편 이는 표준체로 된다

font ['LESSON',]'FONT'; standard

font ['LESSON',]'FONTGROUP'; standard

폰트 선택에 있어서 선택적인 키워드 standard는 명명된 폰트 또는폰트 그룹으로 하여금 새로운 표준이 되도록 하며, 시스템 폰트 그룹을 번복한다. 임의의 후속 font standard는 jump 분기까지 이 새로운 표준 폰트 또는 폰트 그룹을 선택한다.

전체 과에 대하여 이 새로운 standard 폰트 선택을 영구적으로 만들려면, jump 분기에 따라 복구되는 디폴트 디스플레이 파라미터의 선택 부분을 만들기 위해서 status save;default를 사용한다. 그러면, 후속의 initial, screen, status restore;standard, 또는 font standard;standard 문장만이 과 TCSTDFNT 내의 시스템 standard 폰트 그룹을 복구한다.

시스템 변수 zcharw 및 zcharch 는 크기 1에서 표준 폰트의 폭 및 높이를 보고한다. 이들 값은 문자 화면 좌표에 대한 표준이다.

실시예

변수 typeface는 활성화할 폰트의 명칭을 포함한다; 이것이 standard 폰트가 된다. 상기 폰트가 높이 32 픽셀, 폭 32 픽셀이면, 시스템 변수 zcharw 및 zcharch 는 32가 된다. screen vga, medium (높이 480 픽셀, 폭 640 픽셀)에 대하여, 문좌 좌표 그리드는 15 (480/32) 라인 및 20 (640/32) 컬럼을 갖는다. write 문장에 대한 텍스트는 그래픽 좌표 x=128((5-1)*32) 및 y=416(480(2*32))에서 나타난다. 이러한 문다 그리드는 standard 폰트가 대체될 때까지 유지된다.

screen vga, medium

font typeface; standard

at 2:5

write 라인 2상의 문자 위치 5

font standard ; standard

과 TCSTDFNT로부터 시스템 표준 폰트 그룹을 복구한다. 이는 상기 표준 폰트가 더 일찍 번복된 경우에 바람직하다.

과 TCSTDFNT는 시스템 standard 폰트 그룹들 및 폰트들을 포함하며, 각 수직 화면 해상도에 대하여 하나씩 명명된다; 그 명칭은 화면의 수직 해상도로 이어지는 문자 std로 시작한다. 예를 들면, std350은 ega,medium 화면에 대한 것이고, std480은 vga,medium 화면에 대한 것이며, std600은 vga,high 화면에 대한 것이다. 이는 폰트그룹이므로, 상기 그룹으로부터 선택된 폰트는 현재의 텍스트 속성에 따라 좌우된다.

시스템 표준 폰트는 과 TCSTDFNT 내의 폰트들 및 폰트 그룹들을 편짐하고 TCSTDFNT.BIN를 대체하여 새로운 바이너리를 만들어냄으로써 변경가능하다.

font ['LESSON',]'FONT'fontNumber[;noload]

font ['LESSON',]'FONTGROUP';fontNumber[;noload]

폰트 또는 폰트 그룹을 선택하고 이에 1 내지 35 중 고유의 번호를 지정한다. 번호가 지정된 폰트들은 텍스트에 내장된 노출된 코드 서열에 따라 액세스가능하다. 이는 예를 들면 단일의 write 명령내에서 폰트들 간의 교체를 허용한다.

소스 편집기(Source Editor)에서, 서열[CTRL][A,[F],[1]-[9]은 번호 매김된 처음의 폰트 9개에 대하여 노출된 코드를 도입하는 한 편, 서열 [CTRL][A],[F],[A]-[Z]는 번호 10 내지 35의 폰트에 대한 코드를 도입한다. 학생 모의 arrow에서는, 폰트 교체에는 유사한 코드 서열을 사용할 수 있으나 디폴트 노출 코드 서열은 상이하다: [CTRL][U,[M],[F],[A]-[Z].

번호매김된 font 문장은 과의 +editor 제어 블록에 포함될 수 있으므로 폰트 선택 서열이 내장된 텍스트는 편집 동안 정확한 폰트로 나타난다.

폰트 번호 지정은 저장되며 명령 status에 의하여 복구된다.

단일의 폰트 또는 폰트 그룹은 다중의 font 명령을 사용함으로써 하나의 번호 이상을 지정할 수 있다. 이것이 실행되면, 폰트에 지정되는 임의의 번호는 그의 선택에 사용할 수 있다. 그러나, 부여된 번호는 동시에 단 하나의 폰트 또는 하나의 폰트 그룹에만 관련될 수 있다. 가장 최근에 부여된 폰트 번호는 그 이전의 임의의 지정을 번복한다.

선택 키워드 noload는 메모리에 폰트를 실제로 로딩하지 않고도 하나의 폰트 또는 폰트 그룹으로 하여금 관련되는 폰트 번호를 갖도록 허용하는 데에 사용된다. 이러한 옵션(option)은 다중의 폰트들이 폰트 번호에 관련되는 루틴의 시작에서 디스크 판독 시간을 단축 가능하게 한다. 이 후에, 상기 폰트는 write 문장 내에 내장된 그의 번호에 의하여 참조 시 필요한 바대로 자동적으로 로드될 수 있다.

실시예 1

2개의 번호매김된 폰트가 로드된다. 노출 코드 서열은 write 문장의 텍스트 내에서 폰트들 간의 교체에 사용된다. (노출 코드 서열은 디스플레이가 소스 편집기에서 턴-온될 때 가시화된다.)

font 'gothic'; 2

font 'geneva'; 3

write This text is Geneva, ■f3 switches to Gothic, then ■f2 back to Geneva.

실시예 2

+inital 제어 블록에서, 3개의 번호매김된 폰트가 디폴트 디스플레이 status 버퍼에 부여된다. 하나의 단위에 대한 임의의 jump 분기는 상기 3개의 번호 매김된 폰트들에 재설정되므로 그들은 write, pack 등의 문장의 텍스트에서 노출 코드 (이 예에서 문장 write와 같은)를 통하여 사용 가능하다. 선택 키워드 noload는 임의의 가능한 개시 지연 (startup delays)을 피하기 위하여 사용된다.

* +inital 제어 블록에서

font 'tcfonts','geneva';1 ; noload

font 'tcfonts','poster';2 ; noload

font 'mine','firework';3 ; noload

status save' default

* 과 전반에 걸친 단위에서

write ■f1 Geneva, ■f2 Poster, ■f3 Fireworks

font ;fontNumber

이전에 번호가 지정된 폰트 또는 폰트 그룹을 선택한다.

실시예

2개의 번호매김된 폰트가 로드된다. 여러 write 문장은 그들의 번호만을 참조함으로써 2개의 폰트 사용 간의 교체를 행한다.

font 'gothic'; 2

font 'geneva'; 3

write This text is Geneva then

font ;2

write switches to Gothic then

font ;3

write back to Geneva

font info; infoBuffer [,length]

선택된 폰트 또는 폰트 그룹에 대한 정보를 소정 길이의 바이트에 대하여 버퍼로 판독한다. 길이가 명기되지 않으면, 버퍼의 정의된 길이가 사용된다.

정보는 다음의 256 바이트가 가용하다:

실시예

standard 폰트의 저작권 내용이 디스플레이된다.

define local

infobuf,256

. ,176 $$ 기타 필드를 스킵한다

. copyrt,80 $$ 저작권 필드

define end

...

font 표준

font info;infobuf

at 10:1

showa copyrt,80

시스템 변수

zreturn

명령 font 이후, zreturn은 폰트 로딩의 성공을 나타낸다:

-1 작동 성공

0 디스크 에러 (zdoserr,zedoserr 참조)

2 그룹 내에 폰트 없음

4 파일이 발견되지 않음

10 폰트 명칭이 발견되지 않음

15 파일 디렉토리 에러 - 복구불가능

18 메모리 풀 요구를 만족할 수 없음

zfontret

시스템 변수 zfontret는 현재 유효한 텍스트 속성에 현재의 폰트가 얼마나 잘 매치되는지를 나타낸다.

하나의 font에 대한 zfontret:

-1 성공적으로 로드된 폰트

2 폰트 로드 불가능; standard 폰트가 사용됨

3 standard 폰트 로드 불가능; charsets가 사용됨

하나의 font group에 대한 zfontret (텍스트 속성이 변경될 때 업데이트됨):

-2 속성의 정확한 매치; 일부 합성이 사용됨

-1 속성의 정확한 매치

0 속성의 부분적인 매치

1 적당한 매치가 없음; 기본 폰트가 사용됨

2 기본 폰트의 로드가 불가능함; standard 폰트가 사용됨

3 standard font의 로드가 불가능함; charsets가 사용됨

zfontf

font group에 대하여서만, zfontf는 하나의 폰트가 로드되거나 그룹 내에 다른 폰트의 선택을 유발하면서 텍스트 속성이 변경될 때마다 속성이 어떻게 생성되는지에 대하여 보고하는 비트 필드를 포함한다.

zfonff bit 의미

6 폰트 그룹내에서 볼드체가 매치됨

7 폰트 그룹내에서 이탤릭체가 매치됨

8 폰트 그룹내에서 크기가 매치됨

16 폰트 그룹내에서 소폭(Narrow)가 매치됨

22 합성된 볼드체

23 합성된 이탤릭체

24 합성된 크기

속성은 요구사항과 매치되지 않을 수도 있으며 또한 합성되지 않을 수도 있다; 예를 들면, 폰트 그룹이 볼드체 항목만을 가지고, 현재의 속성은 비-볼드체를 명기하고 있을 경우, 이 때에는 6 및 22가 모두 꺼진다.

기타 (Miscellaneous)

다음의 시스템 변수는 하나의 폰트를 로딩한 후 설정되며 텍스트 속성이 변경될 때 적당한 경우 업데이트된다:

zfonth 문자 높이 및 선택된 폰트의 폭

zfontw

zcharh standard 크기 1 폰트의 문자 높이 및 폭

zcharw (문자 좌표 시스템에 대한 기준)

zfontb 선택된 폰트의 베이스라인 오프셋

zcharb standard 크기 1 폰트의 베이스라인 오프셋

goto

기타 단위 또는 단위의 끝단으로 실행을 이전한다

-----------------------------------------------------------------------------

goto UNIT | q

goto SELECTOR; UNIT | q; UNIT | q;...

-----------------------------------------------------------------------------

설명

현재 단위에서 다른 단위로의 논리연속을 허용한다. goto는 특정 단위로의 실행을 스위치하나, 화면삭제, do 리턴마커의 소거, 메인 단위의 변경 또는 헬프시퀀스의 변경은 행하지 않는다.

q 키워드는 단위의 말단으로 실행을 전이한다.

goto 명령은 구조화된 프로그래밍으로써 대체된 구식의 진부한 프로그래밍이다.

if

if 구조를 시작한다.

-----------------------------------------------------------------------------

if condition

-----------------------------------------------------------------------------

설명

if 구조의 시작을 마크한다. 만일 조건이 참이라면 하기의 들여쓰기된 코드가 실행된다. 만일 조건이 거짓이라면, 실행은 다음의 들여쓰기 않된 elseif, else, 또는 endif 로 계속된다.

if 구조는 TenCORE 언어에서의 주요 조건 구조이다. if 구조를 구성하는 명령은 다음과 같다:

if

elsief (선택적인, 임의의 숫자)

else (선택적인)

endif

if 구조는 if 로 시작하고 endif로 종결한다. 특정 조건이 참일 때 실행될 명령은 if, elseif 또는 else 바로 다음에 들여쓰기된다. TenCORE에서 들여쓰기는 7개의 스페이스가 뒤따르는 명령 필드의 첫 번째 문자의 종지부로 구성된다. (소스 필드 편집기에서 하나의 탭 스톱). 그 후 상기 명령 및 들여쓰기된 명령의 태그는 통상적으로 타이핑된다.

임의의 if 구조에서는 단지 한 세트의 들여쓰기 명령만이 실행된다. 조건은 각각 if 및 elseif에 연속적으로 체크된다. 참인 첫번째 if 또는 elseif 아래의 들여쓰기된 명령이 실행된 후 제어는 endif 뒤의 명령에로 보내진다. 만일 if 및 elseif에 대한 어느 조건도 참이 아닌 경우, 임의의 else에 이어지는 들여쓰기 명령이 실행된다.

실시예

실시예1

변수 score의 값이 75를 넘을 때, 들여쓰기 명령들이 실행된다.

if score > 75

. do goodfb

. jump endless

endif

실시예 2

elseif 및 else 명령은 if 구조에서 사용된다.

if right = 0 $$ 사용자는 모든 질문을 맞추지 못함

. do 매우 나쁨

. jump helppg

elsief right < 5 $$ 사용자는 1 내지 4 권리를 얻음

. do 좋지 않음

. jump 퀴즈

elsief right < 10 $$ 사용자는 5 내지 9 권리를 얻음

. do 양호

. jump review

else $$ 사용자는 9 이상의 권리를 얻음

. do 우수

. jump 끝이 없음

endif

실시예 3

if 구조가 네스티드된다.

if wrong > 5 %% 사용자는 5 이상을 맞추지 못함

. write 실수를 너무 많이 하고 있습니다!

. pause

. if wrong > 10 $$ 사용자는 10 이상을 맞추지 못함

. . 멈춤으로 건너뜀

. endif

endif

영상 (image)

화면 영상을 디스플레이, 변환(capture) 및 관리한다.

-----------------------------------------------------------------------------

image 키워드

plot 특정 영상을 디스플레이한다

save 화면의 일부 또는 전부를 특정 지점으로 변환한다

move 저장 영역간에 영상을 이전한다

info 영상에 관한 정보를 복귀시킨다

delete 메모리 풀로부터 특정 영상을 삭제한다

reset 메모리 풀로부터 모든 영상을 삭제한다

compress 영상 데이터의 압축을 턴온 및 턴오프한다

palette 영상으로부터의 파레트(palette) 정보를 해독한다

-----------------------------------------------------------------------------

설명

명령 image은 완전한 화상(picture)을 디스플레이상에 플로팅하고, 디스플레이상에서 화상을 변환하거나 또는 변수, 메모리 풀 블록 및 디스크 저장 위치 (명칭세트, 데이터세트 및 과)들 사이에서 화상을 이동하는데 사용된다. 화상은 "페인트브러쉬(paintbrush)" 프로그램에 의하여 생성되는 기존의 비트-맵 영상으로부터 영상 블록으로 도입된 영상 편집기(Image Editor)에 의하여 영상 블록 내에 또는 image save 명령을 실행한 후의 화상 선택(Image Option)에 의하여 또는 시스템 키[F2]를 누름으로써 직접 변환되고 저장되는 화면의 일부분 내에 생성되는: 화면 영상이다.

image plot ; from [; [LOCATION][;palette]]

위치가 명기되어 있는 한, 저장되었던 것과 동일한 위치에 명기된 영상을 플로팅한다. 어느 경우이든, 현재의 화면의 위치는 변하지 않는다. mode 명령에 의하여 설정된 바의 디스플레이 모드는 영상을 플로팅하는 데에 사용된다. (추가정보에 대해서는 mode를 참조한다) 만일 키워드 palette이 특정되면, 영상과 함께 저장된 파레트가 사용된다. palette이 특정되지 않으면 파레트는 변하지 않는다. 영상은 영상의 상부 좌측 모서리에 대응하는 특정 위치로부터 아래쪽으로 플로팅된다.

키워드 from 및 구문:

block |b,'NAME'

특정 과로부터의 영상 블록을 플로팅한다. 영상 명칭만이 명기된 경우, 현재의 과가 추정된다.

file |f[,record]

개시 record 번호가 명기되지 않은 한, 레코드 1에서 시작하여 첨부된 데이터 세트 또는 명칭세트로부터 플로팅한다. 명칭 세트의 경우, 유효한 명칭은 setname 명령으로 미리 선택되어야 한다.

memory |m, 'NAME'

메모리 풀 블록으로부터 플로팅한다. 명칭은 단일의 인용구 내의 문자이거나 또는 변수내에서 발생할 수 있다.

vars |v, variable[, length]

변수로부터 플로팅한다. length가 특정되지 않는 한 변수의 정의된 길이가 사용된다.

실시예

image plot;block, 'horse';20,100

* block "horse" at location 20,100

image plot;block, 'library','horse'

* block "horse" in file "library"

image plot;file

* 현재 첨부된 파일

image plot;memory,myimage

* 메모리 풀로부터 변수 myimage에 포함된 명칭

image plot; vars, picsave

* 변수 "picsave" 내의 영상

image plot;memory,'show';15:01;palette

* 영상으로 저장된 파레트를 사용하여 플로팅한다

image save; destination[;[LOCATION];[LOCATION][;palette[,variable]]]

직사각형 영역에 의하여 특정된 화면 영역을 destination에 저장한다. 만일 아무런 디스플레이도 특정되지 않으면, 전체 화면이 저장된다. 만일 키워드 pallette가 사용되면, 현재의 파레트는 또한 화상과 함께 저장된다. 만일, variable 가 주어지면, variable에서 특정된 색상들만 영상과 함께 저장된다. variable의 포맷에 대해서는 palette read를 참조하라. 영상은 가능한 한 적은 저장으로 사용되기 위하여 특정 압축 포맷으로 저장된다.

키워드 destination 및 구문:

file |f[,record]

시작 record 번호가 특정되지 않는 한 레코드1에서 시작하여 첨부된 데이터세트 또는 명칭세트에 저장한다. 명칭세트의 경우에 있어서, 유효한 이름은 setname명령으로 미리 선택되어야 한다. 영상을 저장하는데 필요한 레코드의 수는 (bytes + 255)$idiv$256으로 계산 가능하다.

memory |m,'NAME

메모리 풀에 블록을 저장한다. 명칭은 단일 인용구의 문자일 수 있거나, 또는 변수로 될 수 있다. 만일 영상이 이미 특정한 이름으로 이미 저장되면 그것은 대체된다. image에 의하여 생성된 메모리 풀 내의 명칭은 다른 명령에 의하여 생성된 어떠한 이름과도 독립적이다. 예컨대, 명령 memory 및 명령 image 은 모두 마찰을 유발하지 않고 cat 라는 명칭의 메모리 풀에 하나의 명칭을 창조할 수 있다. 명령 initial은 메모리 풀로부터 모든 영상을 삭제한다.

vars |v, variable,[,length]

변수에 저장한다. length가 명기되지 않는 한 변수의 정의된 길이가 사용된다. variable의 정의된 길이가 불충분하면 영상은 끝이 잘릴 수 있다.

실시예

define local

palblock(16),6

. palslot,2

define end

image save;file;50,20;150,80

* 첨부 파일에 저장

image save;memory,'pic';0,0;99,99

*save in "pic", memory pool

image save;memory,'save';0,0;zxmax,zymax;palette,palblock(1),10

* 파레트의 처음 10 엔트리를 저장

image move;from;destination

화면에 아무 것도 나타나지 않을 때 from 및 destination 사이에 영상을 복사한다.

실시예

image move;block,'abc';memory,'def'

* 현재 파일의 "abc'로부터 메모리 풀의 "def"블록으로

작동중인 과의 소스파일을 수정하기 때문에 block은 destination 용으로 사용할 수 없다. 또한, destination이 file 이면, from은 memory 또는 vars 일 수 있다.

image info;buffer;from |last[;palette]

image info;buffer;display |d,LOCATION[;[LOCATION][;palette]]

from에 의하여 특정된 영상에 관한 정보를 복귀한다. 정보는 하기의 일정한 포맷으로 특정 버퍼에 24바이트로서 리턴된다.

1 byte: 영상 타입

0 = 바이트-오리엔티드(CGA, EVGA, 기타)

1 = 평면-오리엔티드 (EGA, VGA, 기타)

2 = 텍스트 화상

1 byte: 픽셀 당 바이트 (바이트-오리엔티드) 또는 평면의 수

2 bytes : 화면의 좌측으로부터 바이어스

2 bytes : 화면의 상부로부터의 바이어스

2 bytes : 영상 폭

2 bytes : 영상 높이

4 bytes : 영상블록에 의하여 사용된 바이트의 수

10 bytes : 보존

바이트- 및 평면-오리엔티드 영상용 픽셀 및 텍스트 영상용 문자위치에 바이어스, 폭 및 높이가 부여된다.

키워드 pallete의 추가는 팔렛 정보가 복귀된 영상 길이에 포함되도록 한다.

부가적인 키워드 from 및 구문은 image info를 위하여 존재한다:

display |d, LOCATION [;[LOCATION][ ;palette]]

영상은 화면으로부터 직접적으로 취해진다. 이 형식는 영상을 유지하는 파일을 생성하기 전에, 화면 상에 특정의 영상을 유지하는 데에 얼마 만큼의 스페이스가 필요한가를 결정하는데 사용될 수 있다.

last [;palette]

마지막 영상은 image 명령에 의하여 처리된다.

실시예

define local

infovar,24

. type,1

. bits,1

. xstart,2

. ystart,2

. xsize,2

. ysize,2

. length,4

. ,10

define end

*

image info;infavor;display,50,50;100,100

at 2:1

write 영상은 저장용으로 <<s,length>> 바이트를 필요로 한다

pause pass=all

created 'image1',(length+255) %div% 256

do zreturn;;error('created') $$항상 zreturn을 체크한다

image save;file;50,50;100,100

image delete; 'NAME'

메모리 풀로부터 특정 영상을 삭제한다.

image reset

메모리 풀로부터 모든 영상을 삭제한다.

image compress;[on |off]

영상압축을 토글한다(toggle). 압축된 영상은 메모리 또는 디스크 스페이스를 덜 점유한다; 비압축된 영상은 메모리에서 더 빨리 플로팅된다. 디폴트는 on이다.

image palette;from;beffer;entries

버퍼로의 영상 파레트 엔트리를 판독한다. 버퍼는 하기 형태로 하나 또는 그 이상의 6-바이트 파레트를 포함하여야 한다:

slot (2바이트)

red (1바이트)

green (1바이트)

blue (1바이트)

intensity (1바이트)

slot 값은 image palette을 실행하기 전에 각 파레트 엔트리에 대하여 미리 설정되어야 한다. 각 슬롯의 값은 어떤 파레트 슬롯의 정보가 그 엔트리로 판독되는지를 결정한다. 예컨대, 만일 각 엔트리에 대한 slot의 값이 8이면, 파레트 슬롯 8의 정보가 그 엔트리로 해독된다. 만일 slot 값이 세팅되지 않으면, 슬롯 0은 모든 엔트리로 판독된다. 파레트 엔트리의 여하한 서브세트도 적당한 슬롯 값을 세팅함으로서 판독 또는 기록가능하다.

entries는 얼마나 많은 엔트리가 판독될 것인지를 결정한다.

실시예

메모리 블록 test에서 영상으로부터 기준 16 파레트 엔트리용 파레트 정보를 판독한다:

define local

pvar(16), 6

. slot,2

. pred,1

. pgreen,1

. pblue,1

. intensty,1

count ,2

define end

*

loop count1, 16

*슬롯 번호를 초기화해야 한다

. calc slot(count)count-1

endloop

*

image palette; memory, 'test';pvar(1),16

화면 호환성(Screen Compatibility)

하나의 화면에서 다른 하나의 화면으로 영상을 디스플레이하는 것이 가능하기 위해서는 그들은 반드시 동일한 유형이어야 한다. 영상에는 3가지 유형이 있다:

- CGA, 허큘리스(Hercules), MCGA 및 EVGA 등 그래픽 바이트-오리엔티드

- EGA 및 VGA 등 그래픽 평면-오리엔티드

- 텍스트

그래픽 화면을 위하여, 픽셀(바이트-오리엔티드) 당 비트의 수 또는 평면(평면-오리엔티드)의 수는 또한 반드시 동일하여야 한다. 텍스트 영상은 모든 텍스트 화면 유형간에 호환성이 있어야 한다.

주어진 영상의 특징은 image info 명령을 이용하여 결정된다. 하기의 표는 TenCORE에 의하여 현재 지지되는 그래픽 화면의 특징을 열거한 것이다:

예컨대, 바이트-오리엔티드 군에서, cga 상급, 허큘리스 및 mcga 상급 영상은 서로서로 호환가능하다. 평면-오리엔티드 군에서 열거된 모든 화면은 서로 호환가능하다. 주의: 하나의 화면으로부터의 하나의 영상이 다른 화면과 호환가능하다고 할 지라도 종횡비의 변화에 의하여 이들은 상기 다른 화면에서는 상이하게 보일 수 있다. 예컨대, vga 중급 화면상에 플로팅된 ega 고급영상은 동일한 폭일 수 있으나, 본래의 높이의 단지 약 73%에 불과하다.

시스템 변수

zreturn

-1 성공적인 작업

0 디스크에러(zdoserr, zedoserr을 참조)

1 첨부파일 없음

2 범위의 블록화(block out of range)

3 범위의 메모리화(memory out of range)

4 파일 발견않됨

5 영상 화면 유형이 실행 화면 유형과 매치되지 않음

8 불충분한 디스크 레코드

9 유효한 명칭이 없음

11 무효 유형

16 무효 명칭

17 무효 영상

18 메모리 풀의 요구를 충족할 수 없음

initial

표준 상태로 시스템을 초기화한다

-----------------------------------------------------------------------------

initial [nodetach]

-----------------------------------------------------------------------------

설명

시스템을 표준상태로 설정한다. +initial 제어블록에서와 같이, 과를 시작할 때 모든 시스템 매개변수를 공지의 상태로 설정하기 위하여 통상적으로 사용된다.

키워드 nodetach 는 현재 첨부된 파일이 분리되는 것을 방지하고 공유 파일에 대하여 유효한 여하한 로크를 보지한다.

initial 명령은 하기의 명령 초기화를 수행한다:

intcall

소프트웨어 인터럽트를 호출한다.

-----------------------------------------------------------------------------

tcall number, pass, receive[;extended]

number 호출용 인터럽트 루틴

pass 인터럽트 루틴에 전달된 데이터 (8 또는 20 바이트)

receive 인터럽트 루틴으로부터 복귀된 데이터 (8 또는 20 바이트)

extended 확장된 레지스터의 사용을 강제

-----------------------------------------------------------------------------

설명

number에 의하여 명기된 인터럽터를 호출한다. 비확장된 형태에서, 레지스터 AX, BX, CX, 및 DX는 pass로부터 4개의 2-바이트 값을 포함하도록 설정된다. 레지스터 DS 및 ES는 변수 pass에 대하여 적절한 전역 또는 지역 변수 세그먼트를 지적하도록 설정된다; SI 및 DI는 상기 세그먼트내에서 오프셋에 설정된다. 루틴으로부터의 종료에서, receive는 레지스터 AX, BX, CX, 및 DX 내의 상기 4개의 2-바이트 값을 포함한다. zreturn은 레지스터 FLAGS의 낮은 바이트를 포함한다.

키워드 extended는 다음의 순서로 20 바이트의 변수 pass 및 receive에 지정된 확장된 레지스터의 세트를 사용하도록 강제한다:

AX,BX,CX,DX,SI,DI,BP,SD,ES,FLAGS

어드레스

다음의 시스템-정의된 기능 참조는 intcall로 사용되는 설정 또는 인터럽트 레지스터에 간혹 유용하다:

sysloc(global) 전역 변수의 세그먼트 어드레스

sysloc(local) 현재 단위의 지역 변수의 세그먼트 어드레스

varloc(var) 변수 var의 오프셋 어드레스

absloc(var) 세그먼트 없이 4-바이트 오프셋으로 표현되는

메모리내의 var의 절대 위치.

다음과 같은 세그먼트: 오프셋 어드레스에 해당함:

segment = absloc() $ars$ 4

offset = absloc() $mask$ h0f

absloc = ((segment $mask$ h0000ffff) $cls$4) +

(offset $mask$ h0000ffff)

실시예

메모리 크기를 복구하는 인터럽트 h22를 실행한다. 상기 인터럽트는 입력 데이터를 필요로 하지 않으므로, 입력 및 출력에 대하여 동일한 변수가 사용된다.

define local

regstrs,8

. zx, 2 $$ AX data

. bx, 2 $$ BX data

. cx, 2 $$ CX data

. dx, 2 $$ DX data

define end

* call bios interrupt h22, "memory size determine" no input

* parameters, so the same variables can be used for

* input and output

*

intcall h22, regstrs, regstrs

at 5:5

write <<s, ax $imul$ 10245>> 메모리 바이트를 갖게 된다.

시스템 변수

zreturn은 컴퓨터의 내부 플래그 레지스터의 하위 바이트를 포함한다. 기능 참조 bit(zreturn,8)은 에러 조건을 나타내기 위하여 소프트웨어 인터럽트에 의하여 종종 설정되는, 캐리(CY) 비트를 테스트하는 데에 사용된다. FLAGS 레지스터 정의에 대해서는 intcall 온라인 문서를 참조한다.

jump

새로운 메인 단위로 분기한다.

-----------------------------------------------------------------------------

mp UNIT[(argument/16s)]

jump SELECTOR; UNIT[(argument 16s)];UNIT[(argument 116s)];...

jumpop UNIT[(argument/16s)]

jumpop SELECTOR; UNIT[(argument/16s)];UNIT[(argument/16s)];...

-----------------------------------------------------------------------------

설명

명령 jump 및 jumpop 은 특정 단위를 새로운 메인 단위로 만들면서 이에 분기된다. 선택적으로, 16 독립변수까지는 상기 새로운 메인 단위에 전달될 수 있다. 모든 flow 분기 설정은 클리어되고(router 설정을 제외함) 그들의 디폴트에 복구된다.

jump 분기는 그들의 디폴트 값 (status 참조)에 모든 플로팅 파라미터를 복구하고 화면(또는 윈도우)를 colore 색상으로 소거한다. 모든 포인터 영역은 클리어되고 그들의 디폴트로 복구된다.

jumpop(jump-on-page) 분기는 플로팅 파라미터, area 설정을 변경하지 않으며, 또는 화면 소거를 실행한다.

키워드 jump가 있는 명령 flow는 유사한 기능을 갖는다. 그러나, 명령이 실행될 때 즉각적으로 jump가 발생하는 한편 flow는 지연된 사건-중심 분기이다. jump는 또한 독립변수를 허용하나 flow는 허용하지 않는다.

SELECTOR 형태는 "구문 규정(Syntax Conventions)"에 설명된다. jump는, 선택시, 현재 단위의 실행을 더욱 종료하는 추가의 q (quit) 목록 엔트리를 갖는다. 실시예 4 참조.

콤마로 구분되는 16 독립변수까지는 분기로써 전달가능하다. 이들은 jump의 실행으로 평가되며 그들의 값은 다음 단위에 전달된다. 다음 단위의 명령 receive는 상기 독립변수를 수리하는데에 사용한다. 독립변수 전달에 대한 추가 정보에 대해서는 명령 receive를 참조하고 독립변수 전달 시 설정되는 시스템 변수 zargs 및 zargsin을 참조한다.

실시예

실시예 1

jump two

현재 과에서 단위 two로 즉각 분기한다. 화면은 소거되고 모든 디폴트는 재설정된다.

실시예 2

jump rivers,<<name>>

현재 과 rivers 에서 변수 name로 특정된 단위로 분기한다.

실시예 3

jumpop build (98.6,men+women, size)

...

receive temp, total, size $$ in unit build

독립변수로서 전달되는 현재 과에서 단위 build로 분기한다 (화면 소거 없이): 상수 98.6, 표현 men+women의 평가, 및 변수 size의 값. 단위 build에서, 문장 receive는 전달된 독립변수를 변수로서 인정한다. 화면은 jumpop로 소거되지 않으므로, 단위 build는 기존의 화면 디스플레이에 더욱 추가될 수 있다.

실시예 4

jump x-2; one; two; three; q

이러한 선택적인 jump 형태는 만일 x-2가 음수이면 단위 one에, 0이면 two에, 1이면 three로 분기되고, 임의의 기타 명령은 1보다 큰 값에 대한 현재 단위 내에서 실행을 멈춘다.

일반적인 단위 명칭 (Generic Unit Names)

일반적인 분기 명칭은 공통의 jump 종착에 대하여 새로운 메인 단위에 마련된다:

=next 과 내에서 현재의 메인 단위에 물리적으로 이어지는 단위. 없는 경우 분기는 무시된다.

=back 과 내에서 현재의 메인 단위에 물리적으로 선행되는 단위. 없는 경우 분기는 무시된다.

=first 현재 과 내에서 제 1 차로 실행가능한 단위.

=last 현재 과 내에서 최종적으로 실행가능한 단위.

=main 시스템 변수 zmainl,zmainu에서 보유되는 현재의 메인 과 및 단위

=base 발생하거나 명령 base에 의하여 설정된 바대로의 최종 base 수정된 flow 분기로부터의 메인 과 및 단위. 없는 경우, 분기는 무시된다. 현재의 기본 과 및 단위의 명칭은 시스템 변수 zbasel,zbaseu에 보유된다. 대표적으로, 연구의 메인 라인에 대한 도움말(help)과 같이 보충 과 서열로부터 복귀하는 데에 사용됨.

=editor 저자 시스템에 의하여 실행되는 경우 소스 편집기(현재 실행 단위로 로드됨); 학생의 실행자에 의하여 무시됨.

=exit 과는 명령 exitles에 의하여 설정된 바대로 종료하고 시스템 변수 zexitl, zexitu에 포함된다. 학생 사용자는 아무것도 존재하지 않는 경우 TenCORE 활동 관리자 또는 DOS와 같은 라우팅 시스템으로 분기된다. 과 테스팅 저자는 파일 디렉토리로 복귀된다.

=system 시스템 옵션 윈도우를 계산자(calculator), 영상 변환(capture), 커서 등으로 개방한다. [F2]는 저자(authoring) 동안 TenCORE 시스템 디폴트와 같이 이 분기로 통상 로드된다; 학생 실행자에 의하여 무시된다.

실시예

학습자는 질문이 제 1 차 시도에서 정확히 대답되면 다음의 메인 유ㄴ으로 진행한다. 2 또는 3회 시도가 요구되면, 현재의 메인 단위가 재실행된다. 임의의 횟수의 시도 동안, 기준 단위 포인터가 설정되고 학생은 trouble라는 명칭의 도움 단위에 분기된다. 단위 trouble에서, jump 내지 =base는 학습자로 하여금 질문에 대한 다른 시도를 위하여 기준 단위로 복귀하도록 한다. 이러한 코드는 메인 단위의 일부로서 또는 과 중 모든 질문에 의하여 호출되는 서브루틴으로서 동일하게 작업한다.

if tries = 1

. jump =next $$ 다음 질문으로 간다

elseif tries < 4

. jump =main $$ 이번 단위 재-실행

else

. base <<zmainu>> $$ 현재 메인 단위에 기준(base)을 설정

. jump trouble $$ 학습자에게 확장된 도움을 제공

endif

library

바이너리 단위로 서브루틴 호출을 행한다.

=============================================================================

library UNIT[([argument/16s][;return/16s])]

library SELECTOR; UNIT[([argument/16s][;return/16s])];...

-----------------------------------------------------------------------------

설명

특정 형태의 명령어 do는 호출하는 단위가 윈시 또는 바이너리 모드에서 실행중인가에 관계없이 외부 바이너리 라이브러리에 서브루틴 호출을 한다. 이 포맷은 독립인수를 호출된 단위로부터 또는 단위에 전달하는 것을 포함하여 do와 동일하다. 이 명령은 종료된 루틴 또는 바이너리 형식으로만 존재하는 제 3 자의 TenCORE 소프트웨어를 호출하는 데에 사용된다. 이진가 과형태로 이루어질 때, library 및 do는 동일하게 작업한다.

단위 calling가 소스 모드에서 (소스 코드 편집기로부터 직접 소스 코드를 작업함으로써) 실행 중이면, library는 서브루틴 호출에 대한 바이너리 실행 모드로 교체된다. called 단위에서 calling 단위로 다시 복귀할 때, 소스 모드 실행은 재시작된다. 호출된 라이브러리 루틴 jumps가 새로운 메인 단위로 jump되면, 실행은 바이너리 모드로 계속되면 "return to editing" 키 [F2]는 더 이상 작동하지 않는다.

소스 및 바이너리 실행 모드, 및 그들이 정확히 어떻게 제어되는 지에 대해서는 명령어 operate를 참조한다.

loadlib

바이너리 단위를 단위 버퍼로 로드한다.

-----------------------------------------------------------------------------

oadlib UNIT

loadlib SELECTOR; UNIT; UNIT;

-----------------------------------------------------------------------------

설명

후속의 명령 library 에 의한 실행을 위하여 바이너리 단위는 단위 버퍼에 로드된다. 상기 단위는 불러오기되는 단위의 유형 (소스 또는 바이너리) 또는 operate에 의하여 설정된 상태에 관계없이 바이너리 파일로부터 인출된다.

loadlib는 그를 실행하기 전에 단위의 존재에 대한 점검을 위하여 또는 단위를 메모리에 강제하기 위하여 사용가능하다. 이는 코드의 다음 섹션에 속도를올리기 위해, 또는 디스켓상에 제거될 단위가 남아있도록 허용하는 데에 사용가능하다.

loadlib는 주의를 하여 사용해야 한다: 임의의 비-실행중인 단위는 단위가 실행에 스페이스가 필요할 때 메모리로부터 제거할 수 있다.

실시예

단위 copyfile은 과 libfile의 바이너리 복사로부터 미리-로드된다. 단위 copyfile은 하나의 디스켓에서 다른 것에로 파일을 복사한다. 한번 로드되면, 과 libfile을 포함하는 디스켓은 제거 가능하다.

loadlib libfile, copyfile

* 바이너리 단위 파일복사를(copyfile) 메모리에 강제한다.

jump zreturn;;erroru $$ 항상 zreturn을 점검한다

at 5:5

write FROM을 복사하기 위하여 드라이브 A에 디스켓을 넣고 상기 디스켓을 드라이브 B에로 복사한다.

복사를 시작하기 위하여 Enter을 누른다.

pause pass = %enter

library libfile, copyfile $$ 메모리에 존재함이 보장됨

시스템 변수

zreturn

-1 성공적인 작업

0 디스켓 에러 (zdoserr, zedoserr 참조)

4 과 발견않됨

10 단위 발견않됨

11 무효 유형

16 무효 명칭

21 다른 사용자의 로크와 갈등

loadu

하나의 단위를 단위 버퍼로 로드한다.

-----------------------------------------------------------------------------

oadu UNIT

loadu SELECTOR; UNIT; UNIT;...

-----------------------------------------------------------------------------

설명

명기된 단위를 실행하지 않고 디스크로부터 단위 버퍼 캐시에 로드한다. loadu 는 나중의 디스크 엑세스 지연을 피하기 위하여, 단위가 존재하는지를 점검하기 위하여 또는 제거될 디스켓으로부터 단위를 로드하기 위하여 미리 하나 이상의 단위를 로드하는 데에 사용가능하다.

실시예

단위 copyfile은 미리-로드된다. 단위 copyfile은 하나의 디스켓에서 다른 것에로 파일을 복사한다. 한번 로드되면, 루틴을 포함하는 디스켓은 제거 가능하다.

loadu copyfile $$ 단위 파일복사(copyfile)을 메모리에 강제한다.

jump zreturn;; erroru $$ zreturn을 점검한다.

at 5:5

write FROM을 복사하기 위하여 드라이브 A에 디스크를 넣고 드라이브 B로 상기 디스크를 복사한다.

복사를 시작하기 위하여 Enter을 누른다.

pause pass = %enter

jump copyfile $$ 메모리에 존재함을 보장

시스템 변수

zreturn

-1 성공적인 작업

0 디스켓 에러 (zdoserr, zedoserr 참조)

4 과 발견않됨

10 단위 발견않됨

11 무효 유형

16 무효 명칭

21 다른 사용자의 로크와 갈등

loop

루프 구조를 시작한다.

-----------------------------------------------------------------------------

loop [CONDITION]

loop counterstart,end[,increment]

counter 인덱스 카운터로서 역할하는 변수

start counter에 대한 개시값

end counter에 대한 종료값

increment 인덱스 카운터에 대한 증가(감소)

-----------------------------------------------------------------------------

설명

명기된 횟수만큼 또는 조건이 참인 동안 일련의 명령이 반복하기 위하여 사용된 endloop에 의하여 종료된 loop 구조를 시작한다. 하나의 loop 구조는 동일한 들여쓰기 레벨로 reloop 및 outloop 명령을 포함할 수 있다. 모든 기타 명령은 들여쓰기 된다. 루프는 서로 포개질 수 있으나, 안쪽 루프의 범위는 전체적으로 바깥쪽 루프의 범위내에 들어야 한다.

지정 화살표 ()는 ITERATIVE 루프와 WHILE루프를 구분한다.

loop [CONDITION]

CONDITION이 참인 한 WHILE 루프 구조 내의 코드는 실행된다. 태그가 없는 경우, outloop, jump 등을 통하여 종료가 제공되지 않는 한 반복은 계속된다.

조건이 존재하면, 실행이 loop 명령에로 복귀될 때마다 매번 그의 값이 테스트된다. 조건이 참이면, 새로운 반복(iteration)이 시작되며; 거짓이면, 루프는 종료된다.

실시예

WHILE 루프를 사용하여 화면상의 X 선을 플로팅한다.

at 5:1

loop zspace < 80 $$ zspace 가 80 미만인 동안

. write X

endloop

loop counterstart,end[,increment]

ITERATIVE 루프는 독립변수를 제어함으로써 나타나는 횟수만큼 반복한다. counter는 start 값을 지정한다. 실행은 매번 루프의 시작으로 복귀되며 increment는 counter에 추가된다. increment가 생략되면, 디폴트 값은 1이다. increment가 음수이면, counter 값은 감소한다. counter가 둥 값을 지나치면 (루프가 카운팅되는 어느 방향으로든), 루프는 종료된다.

실시예 1

loop index1,10 $$ 1에서 10까지 루프

. at index:4

. write 인덱스는 <<s,index>>이다

endloop

실시예 2

WHILE 루프는 화면상의 수평 플로팅을 제한하는 데에 사용된다. ITERATIVE 루프는 WHILE 루프의 각 반복으로 임의의 X의 수를 플로팅한다.

at 10;1

loop zspace < 80 $$ zspace가 80 미만인 동안

. calc randomrandi(10)

. loop index1, random

. . write X

. endloop

. pause .5

endloop

memory

메모리 풀 데이터 저장을 관리한다.

-----------------------------------------------------------------------------

memory 키워드;...

creat 새로운 메모리 블록을 할당한다

read 메모리 블록으로부터 변수로 데이터를 이전한다

write 변수로부터 메모리 블록으로 데이터를 이전한다

exchange 메모리 블록과 변수 사이에 데이터를 교환한다

move 메모리 블록들 사이에 데이터를 이전한다

delete 특정 메모리 블록을 삭제한다

reset 모든 메모리 블록을 삭제한다

rename 메모리 블록의 명칭을 변경한다

resize 메모리 블록의 크기를 변경한다

info 시스템 변수에 블록 정보를 복귀한다

total 메모리 풀의 전체 크기를 변경한다

-----------------------------------------------------------------------------

설명

메모리 풀에 엑세스를 제공한다. 풀 내의 메모리는 명명된 블록에 의하여 할당된다. 변수(버퍼) 내의 데이터는 기록가능하며 이들 명명된 메모리 풀 블록으로부터 판독가능하다. 시스템은 블록이 생성, 삭제 및 크기 변경됨에 따라 자동적으로 메모리 풀을 관리한다. 메인 메모리 풀은 640 킬로바이트 이하의 전체 미사용 DOS 메모리로 구성된다. 확장된(EMS), 확장된(XMS) 및 디스크 메모리와 같은 제 2 메모리(가상의)는 메인 메모리 풀을 확장하는 데에 사용된다.

대부분의 memory 명령 호출은 성공적인 실행을 보장하기 위하여 zreturn 점검으로 이어져야 한다.

명령 initial 은모든 메모리 블록을 삭제한다. 실행 에러 또한 모든 블록을 삭제하며, 시작에서 메모리 풀의 크기를 상기 크기로 복구한다.

메모리 풀은 다음 명령: memory, image, window, status, area, flow, font 및 perm에 의하여 사용된다. 메모리 블록은 생성시 특정 명령 유형에 속하는 바대로 태그되며 메모리 풀을 사용하는 기타 명령에 의하여 엑세스 불가능하다. 상이한 명령들이 아무 마찰없이 하나의 메모리 블록에 대하여 동일한 명칭을 사용할 수 있다.

memory creat;'NAME',size[;fixed |router |temporary]

메모리 풀 내에 소정의 크기로 명명된 제로-필드(zero-filled) 블록을 생성한다. 블록이 메모리 풀내에 할당될 때, 그 크기는 16 바이트의 멀티플까지 반올림처리된 . 반올림된 길이에 더하여, 각 메모리 블록은 상기 풀 내의 추가 16 바이트를 사용한다.

선택적인 수정자 fixed는 시스템 변수 zmstart에서 발견되는 어드레스의 메모리 내의 고정된 위치로 상기 블록을 고정한다. 고정된 블록은 메모리 풀의 작동을 열화시키므로 완전히 요구되는 곳을 제외하고는 피해야 한다. 고정된 블록의 사용 예는 외부 프로그램을 갖춘 통신 버퍼와 같다.

통상적으로, 메모리 블록은 선택적인 키워드 router가 존재하지 않는 한 initial 또는 memory reset에 의하여 삭제된다. 라우터 수정된 메모리 블록은 명백한 memory delete로만 삭제 가능한다; 'NAME' or memory reset; router 문장. router 수정된 메모리 블록은 임의의 도메인으로부터 엑세스 가능하나 그들이 생성되는 도메인의 삭제에 의하여 삭제되지 않는다.

temporary 수정된 메모리 블록은 시스템이 추가 메모리 풀 스페이스를 요구할 때 자동적으로 삭제된다: 필요시 발생가능한 데이터를 보유하는 데에 유용하다.

수정자는 상호 배타적이다: memory create 문장에서 하나만 발생 가능하다.

실시예 1

메모리 풀에 temp라 명명된 1000-바이트 메모리 블록을 생성한다. 불충분한 메모리와 같은 에러가 발생되면 단위 에러로 점프한다.

memory create; 'temp',1000

jump zreturn;;error

실시예 2

8-바이트 변수 name에 포함된 명칭을 사용하여 200-바이트 fixed 메모리 블록을 생성한다.

memory create; name,200; fixed

jump zreturn;;error

memory write;'NAME',offset; buffer; length

소정 길이의 바이트에 대하여 변수 버퍼로부터 주어진 오프셋에서 시작하는 명명된 메모리 블록에 데이터를 이전한다. 메모리 블록의 모든 오프셋은 메모리 블록의 시작을 인용하기 위해서 0:에서 시작하며, 0의 오프셋을 이용한다.

실시예

블록 results의 시작(0)을 지난 32 바이트에서 시작하여, 변수 score에서 메모리 블록 results로 8-바이트를 이전한다. 이상이 있을 경우에는 에러 루틴으로 점프한다.

memory write; 'results',32; score; 8

jump zreturn;;error

memory read;'NAME',offset; buffer; length

소정 길이의 바이트에 대하여, 주어진 오프셋에서 시작하는 명명된 메모리 블록에 데이터로부터 변수 버퍼로 이전한다.

실시예 1

메모리 블록 info의 시작 (오프셋 0)으로부터 버퍼 infobuf로 데이터 256바이트를 이전한다. 이상이 있을 경우에는 에러 루틴으로 점프한다.

memory read; 'info',0; infobuf; 256

jump zreturn;;error

실시예 2

모든 전역 변수는 저장되고 호출에 대하여 라이브러리 서브루틴에 복구된다. 우선, saveVars로 명명된 메모리 블록이 생성된다. 전역 변수는 이 메모리 풀 블록에 이전된다. 라이브러리 루틴은 호출되어 원하는 전역 변수를 변경할 수 있다. 마지막으로, 전역 변수는 복구된다.

define global

globals=29696$$ 디폴트 전역 스페이스를 취한다 (29킬로바이트)

varBlock,globals,block

define end

*

memory creat; 'savevars',globals $$전역 블록을 생성한다.

jump zreturn;; error

memory write; 'savevars',O; varBlock; globals $$ save globals

jump zreturn;;error

...

zero varBlock,globals $$ perhaps zero all globals

library routines,graph $$ can use all globals

...

memory read; 'savevars', 0; varBlock; globals $$ restore globals

jump zreturn;;error

memory exchange 'NAME',offset; buffer; length

주어진 오프셋에서 시작하는 명명된 메모리 블록과 소정 길이의 바이트에 대한 변수 버퍼 사이에 데이터를 교환한다.

실시예

memory exchange; block,0; buf(i); 12

block에 명명된 메모리 블록의 시작과 buf(i)에서 시작하는 배열(array) 버퍼와의 사이에 12 바이트 데이터를 교환한다.

memory move; 'FROMNAME',offset; 'TONAME',offset; length

메모리 블록들간에 바로 데이터를 이동한다.

실시예

memory move; 'databuf',0; 'backup',3; 256

메모리 블록 databuf의 시작으로부터 오프셋 3에서 시작하는 메모리 블록 backup으로 256 바이트 데이터를 이전한다.

memory delete; 'NAME'

메모리 블록으로부터 명명된 블록을 삭제한다.

memory reset[;router]

memory reset는 수정자 router로서 생성되는 것을 제외하고는 모든 메모리 블록을 삭제한다. 선택적인 수정자 router를 사용하는 것은 수정자 router로 생성되는 것을 포함하여 모든 메모리 블록이 삭제되도록 한다.

memory rename;'NAME','NEWNAME'

메모리 블록을 다시 명명한다.

memory resize;'NAME',size

명명된 메모리 블록의 크기를 변경한다. 메모리 블록은 fixed 블록이 될 수 없다. 새로운 크기가 더 크면, 제로화된 바이트가 말단에 추가된다. 새로운 크기가 더 작으면, 말단으로부터 바이트가 제거된다. 어느 경우에든, 나머지 데이터는 불변이다.

memory info;'NAME'

시스템 변수 zmlength를 바이트내 명명된 블록의 크기로 설정한다 (또는 블록이 존재하지 않는 경우 0). 블록은 fixed 유형이면, 시스템 변수 zmstart를 메모리 블록의 블록 절대 어드레스에 설정한다. 이 명령은 어떤 명칭의 메모리 풀이 존재하는 지를 점검하는 데에 사용가능하다.

실시예

zreturn 점검은 8-바이트 변수 test에 명칭이 포함되어 있는 메모리 블록의 존재를 검증하는 데에 사용된다. 메모리 풀에 있는 경우, 그의 길이 및 어드레스(fixed 유형이 아닌 경우, 0)가 디스플레이된다.

memory info; test

if zreturn $$ test for success (-1)

. write length= <<s,zmlength>> address= <<s,zmstart>>

elseif zreturn=10

. write Name does not exist

else

. write Other Error

endif

memory total;size

메모리 풀의 크기를 변경한다. 크기가 증가되면, 추가 메모리가 DOS로부터 요구된다; 감소되면, 미사용의 메모리가 DOS로 복귀된다. 디폴트로, 모든 미사용 DOS 메모리 (640K 이하)는 메모리 풀에 할당된다; 그러므로 TenCORE를 시작할 때 명령 라인 옵션에 의하여 구체적으로 제한되지 않은 경우 메모리 풀의 크기를 증가시키는 것은 불가능하다. 메모리-상주의 프로그램이 TenCORE 이후에 로드된 경우, 메모리 풀 크기는 증가될 수 없다.

Secondary Memory Pool

스페이스가 메모리 풀 내에서 실행될 때, 풀 내에 존재하는 블록은 새로운 블록에 대한 공간을 만들기 위하여 제 2 메모리 풀에 자동적으로 이전된다. 상기 제 2 메모리 풀은 다음 중 임의의 것 또는 전체로 될 수 있다: 확장된 (EMS) 메모리, 확장된 (XMS) 메모리, 또는 디스크. 하나 이상의 메모리 유형이 가용할 때, 제 1 확장된 (EMS) 메모리, 그 후 확장된 (XMS) 메모리 및 궁극적으로 디스크가 사용된다.

TenCORE를 시작할 때, 가용한 EMS, XMS 및 디스크 공간의 디폴트 양은 상기 제 2 메모리 풀에 자동적으로 할당된다. 필요시, 각각의 양은 시스템 시작에 따라 설정가능하다.

제 2 메모리 풀이 가용할 때, 블록의 최대 크기는 메인 메모리 풀의 크기에 의하여 제한된다; 그러나, 기존의 블록이 상기 제 2 메모리 블록에 이동될 수 있으므로 더 많은 메모리 풀 블록이 생성될 수 있다.

fixed 메모리 풀 블록을 생성하는 것은 이들이 제 2 메모리에 이전 불가능한 것이므로 메모리 풀 블록의 최대 크기를 더욱 제한한다. 일반적으로, fixed 메모리 블록의 사용은 권장할 만하지 못하다.

시스템 변수

zreturn

명령 memory은 다음과 같이 zreturn을 설정한다:

1 성공적인 작업

3 범위(range)로부터 변수 인용

6 중복되는 명칭

10 없는 명칭

11 무효 유형(고정 블록의 크기 변경)

16 무효 명칭

18 풀내의 불충분한 메모리 (키워드의 생성 및 크기 변경) 또는

풀에 추가하기에 불충분한 DOS 메모리 (총 키워드)

기타 (Miscellaneous)

다음의 시스템 변수는 메모리 블록 명칭을 인용하는 임의의 memory 명령 뒤에(delete 제외) 설정된다.

zmlength 최종 인용 메모리 블록의 바이트 크기

zmstart 고정된 경우 최종 인용 메모리 블록의 절대 어드레스; 아니면, 1

다음의 시스템 변수는 TenCORE 메모리 풀에 대한 정보를 제공한다:

zrmem fixed 되지 않은 새로운 메모리 블록에 대한 최대 가능 크기

zfmem 새로운 fixed 메모리 블록에 대한 최대 가능 크기

zmem 메모리 풀의 크기

zxmem 메모리 풀에 추가가능한 여분의 DOS 메모리 양 (memory total)

mode

그래픽, 텍스트 및 영상이 화면상에 어떻게 플로팅되는지 제어한다.

=============================================================================

mode mode

mode SELECTOR; mode; mode;...

write <<mode | m,mode>>

플로팅 키워드 mode는 다음과 같다:

write 전경 색상을 사용한다

erase 배경색 (소거)을 사용한다

rewrite 전경 색상을 사용하고 문자 배경색을 소거한다

inverse 배경색(소거)을 사용하고, 문자 배경을 플로팅한다

noplot 디스플레이에 영향을 미치지 않고 플로팅을 시뮬레이션한다

xor 기존 디스플레이에 EXCLUSIVE OR로 전경 색상을 사용한다

add 기존의 디스플레이에 OR로 포러그라운드 색상을 사용한다

sub 기존의 디스플레이에 AND로 반전된 전경 색상을 사용한다

-----------------------------------------------------------------------------

설명

그래픽, 문자 및 영상이 디스플레이 화면상에 어떻게 놓이는 지 제어한다. 이러한 3가지 유형의 대상물 각각은 고유의 구조를 가지며 모드 및 색상 명령과의 상호작용을 갖는다. draw 및 circle와 같은 그래픽 대상물은 대상물을 구획하는 도트로 이루어진다; 화면상에 플로팅할 때 그들은 전경 색상을 사용한다. 문자는 문자를 구획하는 전경 도트와 그 문자 셀 외의 나머지 배경 도트로 이루어진다: 전경 및 배경 도트는 전경 및 소거 색상을 사용하여 다양한 모드에서 상이한 태스크를 수행한다. 영상은 이미 색상이 입혀진 직사각형 영역으로 이루어지며 전경 및 배경 색상은 이용하지 않는다. 그러나, 하나의 영상에서 흑색 (파레트 슬롯 0)의 도트는 임의의 기존 디스플레이에 전달되는 데에 사용가능하다.

텍스트-단독(text-only) 디스플레이 화면에서, 개별적인 도트들은 어드레스 불가능하다: 전체 문자 위치만이 변경이 가능하고, 이는 여러 모드의 기능을 제한한다. 텍스트-단독 모드 작동은 마지막에 따로 논의될 것이다.

모드는 단위에 대한 jump 분기에 따라 디폴트 모드로 설정된다. 모드의 초기 디폴트 설정은 write이다. 이는 상태 save 문장의 사용을 통하여 변경 가능하다.

write 문장에 내장된 mode 명령을 통한 모드의 변경은 write을 지나서 확장되지 않는다: write의 종료에 따라, 모드는 write의 시작에서와 같은 값으로 복구된다.

기입 모드 (mode write)

전경 색상으로 그래픽 및 문자 도트를 플로팅한다. 영상은 그들의 고안된 색상으로 플로팅된다. 문자 배경 및 영상의 슬롯 0 색상은 임의의 기존 디스플레이에 전달된다.

소거 모드 (mode erase)

그래픽 및 문자 도트를 배경(소거) 색상으로 소거한다. 영상은 모드 서브에서와 같이 소거된다.

재기입 모드 (mode rewrite)

전경 색상으로 그랙픽 및 문자 도트를 플로팅한다. 문자 배경은 배경(소거) 색상으로 소거된다. 영상은 슬롯 0 색상을 포함하여 전적으로 그들의 고안된 색상으로 플로팅된다.

실시예

"카운트 다운(count-down)"은 "뱅(BANG!)"에 이어 10에서 0으로 실행된다.

mode rewrite

loop count10,0,-1

. at 10:25

. showt count,2

. pause 1

endloop

at 10:25

write BANG!

반전 모드 (mode inverse)

그래픽 및 문자 도트를 배경 (소거) 색상으로 플로팅한다. 문자 배경은 전경 색상으로 플로팅된다. 영상은 우선 그들의 비트 보충(bit-wise complements)으로 모든 색상을 반전되게 하고 다음으로 색상 슬롯 0을 포함하여 모두 플로팅한다.

비플로팅 모드 (mode noplot)

화면을 변경하지 않고 플로팅을 시뮬레이션한다. 화면 위치 및 모든 플로팅 속성은 실제 플로팅이 발생된 바와 같이 mode를 제외하고는 업데이트된다.

실시예

우선 텍스트 1행의 길이는 mode noplot를 사용함으로써 결정되며 변수 length에 부여된다. 이는 at에서 화면 x 위치를 0으로 설정하고, mode noplot에서 텍스트를 플로팅하고 다음으로 시스템 변수 zx에서 발견되는 종료 위치를 얻음으로써 이루어진다. 이 텍스트는 화면 또는 디스플레이 윈도우상에 집중되어 실제로 플로팅된다. 이는 디스플레이 폭을 반감시키고(zxmax/2), 다음으로 텍스트 폭을 반감시킴으로써(length/2) 다시 이동하여 최종의 at 문장에서 실행된다.

mode noplot$$ 화면에 영향을 미치지 않음

at 0,100 $$ x=0 에서 시작

write handling Snakes $$ 텍스트의 플로팅을 시뮬레이션함

calc lengthzx $$ 시스템 변수 zx 부여

* $$ 텍스트 문서

mode write $$ 표준 플로팅 모드로 설정

at zxmax/2 - length/2,100 $$ 텍스트의 시작을 설정

* $$ for centering

write Handling Snakes

xor 모드 (mode xor)

그래픽, 문자 도트 및 영상은 임의의 기존 디스플레이와 논리적으로 EXCLUSIVE OR 조합된다. 이 모드에서 동일한 위치에서 화면상에 동일한 대상을 2회 플로팅하는 것은 그의 원래 위치로 디스플레이를 복귀한다.

실시예

"ORBIT"라는 단어는 화면의 중앙부위에서 애니매이션되어 회전하도록 만들어진다. "ORBIT"가 일부 배경 그래픽을 통하여 작동중인 경우, 이는 상기 배경을 변경하지 않으면서 작동한다. rad는 실제 변수로서 정의되며 sin/cos 계산에 대한 라디안(radian)을 보유한다.

screen vga

calc rad0

mode xor $$ EXCLUSIVE OR 플로팅으로 전환된다

loop

. at sin(rad)*100 + 320, cos(rad)*100 + 240

. write ORBIT

. pause .01

. at sin(rad)*100 + 320, cos(rad)*100 + 240

. write ORBIT

. calc radrad + .05

endloop

추가 모드 (mode add)

그래픽, 문자 도트 및 영상은 임의의 기존 디스플레이와 논리적으로 OR 조합된다.

서브 모드 (mode sub)

그래픽, 문자 도트 및 영상은 색상 반전되고 임의의 기존 디스플레이와 논리적으로 AND 조합된다.

텍스트 단독 하드웨어 화면 (Text-Only Hardware Screens)

모드 write, erase, rewrite 및 inverse 는 문자 전경 및 배경 색상을 적절히 변경하리라고 기대되는 바대로 작업한다. 논리 모드 xor, add 및 sub 는 이미 설명한 바와 같은 전경 문다 색상을 변경한다. 그러나, xor은 화면상에 블랭크(bland) 문자 (스페이스)가 이미 존재할 경우에만 문자를 플로팅하며 그렇지 않으면 화면으로부터 문자를 소거한다.

시스템 변수

zmode 현재 플로팅 모드를 유지

0 반전

1 재기록

2 소거

3 기록

4 플로팅않함

5 xor

6 추가

7 서브 (sub)

move

문자 또는 변수로부터의 데이터 바이트를 변수로 이동한다.

-----------------------------------------------------------------------------

move from, to, length

-----------------------------------------------------------------------------

설명

하나의 위치로부터 다른 위치로 명기된 수의 바이트를 이동한다. from 및 to가 모두 변수이면, 그들은 중첩될 수 있으며, 이동된 데이터의 길이는 어느 한 변수의 정의된 길이를 초과할 수 있다. 명령어 move는 매우 빠르다.

실시예

rec(5)를 통하여 rec(2)를 1개 레코드 아래로 이동한다.

define local

reclen = 256 $$ TenCORE 데이터 레코드는 항상 256 바이트이다

rec(6),reclen $$ array of six records

define end

*

move rec(2), rec(3), 4*reclen $$ 레코드를 아래로 이동한다

nextkey

시스템 키 입력 버퍼 및 변수를 전진시킨다.

-----------------------------------------------------------------------------

nextkey [keyword]

blank 키 버퍼를 전진시키고 zinput 업데이트한다

test 키 버퍼 클리어를 전진시키지 않고 zinput를 업데이트한다

clears키 입력 버퍼

flags zinputf 및 zkeyset를 업데이트한다

pointer zinputx, zinputy 및 zinputf를 업데이트하고 zinput을

%ptrinfo로 설정한다

=============================================================================

설명

nextkeys는 시스템 키 입력 버퍼로부터 계류중인 키를 판독한다. 입력은 통상적으로 메인 단위의 말단까지 버퍼되며, pause, arrow 또는 no 판정과 마주친다. nextkey는 이러한 대기상태 중 하나를 대기하지 않고 입력 퍼버를 즉시 점검검한다. 블랭크 태그 형태는 버퍼로부터의 다음 가용 키를 zinput에 복사하고 상기 버퍼로부터 상기 키를 제거한다.

상기 키 버퍼가 비면, 시스템 변수 zinput은 제로로 설정된다.

nextkey를 마주치는 것은 현재의 flow 설정을 액티브하게 하지 않는다.

nextkey

버퍼로부터 계류중인 키를 제거하면서, zinput, zinputf, 및 zkeyset 를 입력버퍼에서 다음의 가용 키로써 업데이트 한다. 포인터가 가능화되면, zinputx 및 zinputy 또한 업데이트된다.

nextkey test

블랭크-태그 형태와 같은 zinput, zinputf; 및 zkeyset 를 업데이트 하나, 키 버퍼로부터의 계류중인 키를 제거하지는 않는다.

nextkey clear

모든 계류중인 키의 입력 버퍼를 클리어한다. zinput 는 클리어하지 않는다.

nextkey flag

zinputf 및 zkeyset의 극좌측 바이트를 업데이트하고, zkeyset의 극우측 바이트를 제로화한다. zinputx 및 zinputy에는 변화가 없다.

nextkey pointer

zinutx, zinputy 및 zinputf를 업데이트한다. zinput를 %ptrinfo로 설정한다.

실시예

질문 "what goes meow?"은 디스플레이의 상부에서 애니매이션된 빌보드로 나타난다. 사용자가 키보드상의 문자를 누를 때, 애니매이션은 멈추고 문자는 다음 화살표에 나타난다. 변수 x는 2-바이트 정수로 정의된다.

margin wrap $$ wrap around screen

mode rewrite $$ 밑줄쳐진 임의의 텍스트를 대체한다

calc xzxmax /2 $$ 화면 중간에서 시작

nextkey clear $$ 임의의 계류중인 키를 클리어한다

nextkey $$ 또한 zinput을 클리어한다

*

loop zinput = 0 $$ 입력키가 없을 동안 루프한다

. at x,zymax-20 $$ 화면의 상부 근처

. write What goes meow? $$$ 텍스트는 루프에서 좌측으로 이동한다

. calc xx -1 $$ x에서 시작하여 좌측 1 픽셀로 이동

. calcs x < 0;xzmax;; $$ check for screen wrap

. nextkey test $$ zinput 업데이트

endloo

*

arrow 10,zymax-40

answer cat

endarrow

시스템 변수

zinput 0 입력 없음

최종 키입력의 1-255 문자 값

>255 비-문자 키입력

zinputf zinput에서의 입력에 대하여 플래그한다

zkeyset zinput에서의 입력에 대한 코드를 플래그 및 스캔한다

zinputx zinput에서의 입력에 대한 포인터 장치의 X-좌표

zinputy zinput에서의 입력에 대한 포인터 장치의 Y-좌표

nocheck

서브루틴 호출 독립변수 카운트 점검을 생략한다.

-----------------------------------------------------------------------------

nocheck return | receive

nocheck return, receive

return return 명령에 대한 독립변수 카운팅 점검을 턴-오프한다

receive receive 명령에 대한 독립변수 카운팅 점검을 턴-오프한다

-----------------------------------------------------------------------------

설명

정확한 수의 독립변수가 전달됨을 보장하기 위하여 명령 return 및/또는 receive에 대하여 실행되는 자동 점검을 불능화한다.

nocheck는 명령 calling (do, library, 또는 jump)에 의하여 명기된 독립 변수의 수에 관계없이, 임의의 수의 태그가 return 또는 receive에 나타나도록 허용한다.

nocheck는 영향을 받게 되는 명령 return 및 receive와 같은 단위 (called 단위) 내에 존재해야 한다.

operate

상이한 실행 모드들간에 스위치한다.

=============================================================================

-----------------------------------------------------------------------------

operate mode

operate SELECTOR; mode; mode;...

mode 키는 다음과 같다

source .SRC 파일로부터 후속 단위를 실행한다

binary .BIN 파일로부터 후속 단위를 실행한다

tpr .TPR 파일로부터 후속 단위를 실행한다

-----------------------------------------------------------------------------

설명

시스템 파일 실행을 위하여 source, binary 또는 tpr 작업 모드를 설정한다. 시스템이 하나의 단위를 액세스할 것이 요구되는 명령을 실행할 때, 작업 모드는 그것이 source (.SRC), binary (.BIN) 또는 producer (.TPR) 파일내의 단위를 찾는지를 결정한다. 디폴트는 현재의 단위가 로드되는 파일과 동일한 유형을 엑세스하는 것이다.

명령 operate 는 다른 operate 명령, library 명령, error 분기 또는 operate 태그를 갖춘 flow의 실행에 의하여 변경될 때까지 유효하게 남는다.

flow do 에 의하여 모드가 변경되면, 이는 do 서열의 종료에 따라 복구된다. 모드가 flow jump에 의하여 변경되면, 복구되지 않는다.

학생 실행자에서 operate source를 실행하는 것은 실행 에러 11, "무효 독립변수 값" 을 발생한다.

error는 명령이 실행될 때의 작업 모드를 저장한다 (분기가 로드되는 시점). error 분기가 이루어지면, 작업의 모드는 포인터가 로드된 시점에서 유효했던 모드로 재설정된다.

명령 library와의 상호작용 (Interaction with library Command)

library의 실행은 일시적으로 작업모드를 바이너리로 설정한다. 실행이 통상적으로 바이너리 단위로부터 복귀되면, 작업의 원래 모드가 복구된다.

그러나, 원래의 작업모드 복구를 방지할 2가지 방법이 있다:

라이브러리 단위로부터 하나의 새로운 메인 단위를 들여옴, 이 경우 library 로부터의 복귀는 발생하지 않으며 바이너리 작업은 계속된다.

라이브러리 단위인 동안 operate을 실행함, 이 경우 작업 모드의 복구는 호출 단위로의 복귀에 따라 실행된다. 호출 단위는 library에 의하여 호출되는 것으로서, 작업의 모드는 이 호출 단위에 복귀되어 복구된다.

origin

디스플레이 좌표 시스템에 대한 원점을 설정한다.

-----------------------------------------------------------------------------

origin [LOCATION]

=============================================================================

설명

좌표 시스템에 대한 원점을 디폴트 위치(0,0)으로부터 명기된 위치로 이동한다. 모든 후속 디스플레이 명령은 명기된 원점에 대하여 위치된다.

원점은 각각의 새로운 메인 단위의 시작에서 (0,0)으로 설정된다. 이는 status save; default로 이어지는 origin을 사용하여 변경할 수 있다.

블랭크-태그는 원점을 0,0으로 설정한다.

실시예

화면의 3개의 상이한 영역 위에 x가 새겨진 박스(box)를 디스플레이한다.

origin

origin 120,70 $$ 제 1 박스에 대한 원점 및 x를 설정한다

do xbox $$ plot it relocated

origin 160,100 $$ 제 2 박스

do xbox

origin 200,130 $$ 제 3 박스

do xbox

xbox

* 이 단위는 내부에 "x"를 갖는 4-픽셀의 진한 박스(box)를 그린다

* 이는 보통 .. 의 하부 좌측 모서리내에 플로팅된다

* display

box 0,0;20,20;4 $$ 박스를 그린다

draw 0,0;20,20;;0,20;20,0 $$ x로 이어진다

시스템 변수

zoriginx 현재 원점에 대한 절대 X-좌표

zoriginy 현재 원점에 대한 절대 Y-좌표

outloop

구조내에서 임의의 포인트로부터 루프 구조를 종료한다

-----------------------------------------------------------------------------

outloop [CONDITION]

-----------------------------------------------------------------------------

설명

루프 구조내의 임의의 포인트로부터 종료를 제공한다. 태그가 블랭크이거나 또는 조건이 참이면, outloop는 관련 endloop 다음의 명령에로 진행한다. 조건이 거짓이면, 아무런 조치도 취해지지 않으며 실행은 루프 구조내의 다음 명령으로 계속된다.

outloop는 outloop를 둘러싸는 기타 들여쓰기된 구조에 관계없이 항상 종료될 루프 구조와 동일한 들여쓰기 레벨에서 나타나다.

실시예

define local

counter, 2 $$ 카운터

define end

local

*

at 5:3

write 카운터를 증가시키기 위하여 Enter를 누른다, 또는

루프를 종료하기 위하여 Esc를 누른다

calc 카운터1

loop

. at 8:3

. erase 50

. write 카운터 값은 <<show, counter>>이다.

. pause pass = %escape, %enter

outloop zinput = %escape $$ Esc를 누르면 종료한다

. calc countercounter +1

endloop

*

at 10:3

write loop를 종료하시오!

pack,packz

packc,packzc

문자열을 버퍼에 위치시킨다.

-----------------------------------------------------------------------------

pack buffer;[length];TEXT

packz buffer;[length];TEXT

packc SELECTOR; buffer;[length];TEXT; TEXT;...

packzc SELECTOR; buffer;[length];TEXT; TEXT;...

buffer 텍스트 문자열이 위치될 변수

length 버퍼에 위치될 문자의 수가 지정되는 선택 변수

TEXT 버퍼에 위치될 텍스트 문자열

SELECTOR TEXT 경우 중 하나를 선택하기 위하여 사용되는 표현

-----------------------------------------------------------------------------

설 명

설정된 버퍼에 텍스트 문자열(string)을 배열하고, 길이 변수(length variable)가 지정되었다면, 실제 저장된 다수의 문자들을 귀환시킨다. 만약 상기 정의된 버퍼가 상기 텍스트 문자열 보다 길다면, 상기 packz 양식은 여분의 바이트들을 제로화하는 반면 pack 양식은 여분의 바이트들을 변경하지 않는다. 상기 명령 상의 접미사 c(conditional) 는 SELECTOR 양식을 나타낸다.

상기 텍스트 문자열은 show, showt 및 showa 와 같이 내장 show-형 명령들을 포함한다. 만약 상기 텍스트가 온 라인 범위를 넘어 연장된다면, 개행 귀환(carriage return)(코드 13)은 각각의 부가 라인전에 버퍼에 팩킹(pack)시킨다. 만약 텍스트 문자열이 블랭크 라인을 통해 연속된다면, 다중 개행 귀환이 포함되어 진다. 만약 텍스트 문자열의 길이가 불필요하다면, 길이용 널 독립변수를 사용한다.

상기 pack 명령은 경계(bound) 점검을 실행하지 않는다 : 팩킹된 문자는 버퍼에 오버런(overrun)할 수 있고, 그들이 정의된 범위를 넘어서 연장될 경우 후속 변수를 오버라이트(overwrite)하거나 혹은 실행 에러를 발생시킨다. 상기 텍스트 문자열의 최대 가능 길이를 허용해야 한다.

SELECTOR 구분자(Delimiters)

길이 인수에 후속되는 구분자는 각 케이스를 위한 텍스트 문자열을 구분시키기 위하여 packc 와 packzc 에 의해 사용된다.

콤마 ,

세미콜론 ;

콜론 :

라인 종료(end-of-line) ┚

범용(universal) 구분자 ┃

두 개의 일련 구분자는 널 태그(tag)를 나타내며; SELECTOR에 대응하는 값으로서 버퍼내에 팩킹되지는 않는다. 만약 라인 종료이외에 구분자가 사용된다면, 단일 문자열은 한 라인이상으로 연장될 수 있고, 이 경우 개행 귀환은 대향하는 각각의 라인의 말단에 팩킹된다.

널 코드(Null Codes)

내장 showa 명령의 모든 널 문자(코드 0)는 스킵(skip)되며; 상기 널 문자는 결과로 나타나는 열( string)내에 나타나지 않는다. 널 문자는 널 문자들이 포함된 변수와 함께 내장 showv 명령을 사용함으로써 팩킹된 문자열을 이루게 한다.

실시예들

실시예 1

버퍼 lines 내에 3개의 라인을 둔다. 이들은 버퍼내에서 귀환 개행 코드에 의해 분리된다. count는 팩킹된 문자열의 길이로 세트된다. 상기 showa 명령문(statement)은 3개의 라인 텍스트 문자열로 표시된다.

pack lines;count;The first line of text.

The second line of text.

`The last line of text.

showa lines, count

실시예 2

내장 명령은 introbuf 버퍼내에 팩킹된 텍스트 문자열내에 변수 age의 정수 와 name 버퍼의 이름을 포함하여 사용된다. 상기 introbuf 내의 임의의 임시 공간은 0으로 채워진다. 길이 독립변수는 사용되지 않는다. 상기 showa 명령문은 "My name is Alex. I am 23 years old." 와 같은 메시지를 표시한다. 상기 introbuf 내의 임의의 후속 제로(zero) 코드들은 시스템 플로팅(plotting) 루틴에 의해 스킵된다.

packz introbuf;;My name is 《a, name》. I am 《s, age》 years old.

showa introbuf

실시예 3

변수 number를 기준으로 하여, 네가티브, 제로 혹은 포지티브(negative, zero, or positive) 텍스트는 textBuf setting count에서 전송된 문자의 수에 조건적으로 위치된다. 라인말단은 SELECTOR 구분자로서 사용된다. textBuf의 미사용 공간은 0으로 채워진다.

packzc number;textBuf;count

negative

zero

positive

실시예 4

버퍼 textDate 는 오늘의 날짜(예컨대, "January 1, 1993")로서 문자열로 설정된다. 변수 temp는 날짜와 연도와 함께 textDate 내에 팩킹될 때까지 월(month)을 유지하기 위해 사용된다. packzc 명령상의 3개의 널 독립변수에 유의한다: 처음 널 독립변수는 길이 정보가 필요하지 않음을 나타내고; 나머지 두 개는 월 정보에 사용될 수 없는 SELECTOR 네가티브와 제로 경우의 두가지를 처리한다.

define local

today, 4

. year, 2

. month, 1

. day, 1

temp, 9

textDate, 20

define end

*

date today $$ 시스템 데이터 정보 획득

*

packzc month;temp;;;;January;February;March;April;May;Jun;July;August;

September;October;November;December

*

packz textDate;; 《a, temp》《s, day》《s, year》

*

at 5: 10

showa textDate $$ 오늘의 날짜 디스플레이

페이지 (page)

플롯팅과 디스플레이에 사용하기 위하여 하드웨어 스크린 페이지를 선택한다

-----------------------------------------------------------------------

page showpage [, writepage]

showpage 표시할 페이지 수

writepage 플로팅할 페이지

=======================================================================

설 명

일부 디스플레이 하드웨어는 pages 라는 개별적이고 완전한 디스플레이들을 가진다. 상기 page 명령은 그것들을 제어한다.

page의 제1 독립변수 형식은 활성(active) 표시 페이지를 지정된 페이지로 변경한다. 해당 페이지의 콘텐츠(contents)는 즉시 표시되고 모든 추가의 플로팅은 그 페이지상에 발생된다.

제2 독립변수 형식은 제2 페이지가 모든 추가의 플로팅 동작(activity)으로 사용되는 반면에 제1 페이지는 디스플레이되도록 한다. 이 명령은 사용자가 디스플레이된 페이지를 주시하는 동안 새로운, 메모리내에 숨겨진 페이지를 구성하게 한다.

새로운 메인 단위를 입력하면 플로팅을 위해 선택된 페이지만이 삭제된다.

이용 가능한 페이지들의 수는 사용중인 디스플레이 하드웨어와, 이용가능한 표시 메모리 및 선택된 화면 해상도(resolution)에 따라 달라진다. 상기 시스템 변수 zmaxpage 는 현재의 화면이 지원하는 페이지들의 수를 포함한다.

실시예

mode xor. 로 fish라 불리는 이미지를 애니메이트한다. mode xor. 로 물체를 재표시할 경우 물체는 디스플레이에서 제거되므로, 모드 xor 은 애니메이트된 물체를 손상시키지 않고 전송시켜야 하는 경우 사용된다. page 없이, mode xor 애니메이션은 일반적으로 사용하기에는 너무 많은 플리커(flicker)를 발생시킨다.

페이지 1은 홀수 x-위치 201, 203, 205, 등에서의 이미지를 나타내기 위해 사용된다.

페이지 2는 짝수 x-위치 202, 204, 206, 등에서의 이미지를 나타내기 위해 사용된다. 페이지들을 교번함으로써, 상기 이미지는 201, 202, 203, 204, 205, 206 등에서 나타난다.

screen ega, graphics, medium, color

define local

x, 2

define end

* set mode and load image into memory

mode xor

image move; block, `fish` ; memory, `fish'

* display the first image on page 1

image plot; memory, `fish`; 201, 100

* while displaying page 1,

* erase page 2 and put the next image on it

page 1, 2

erase

image plot; memory, `fish` ; 202, 100

loop x201, 400

. * show page 2 while changing the display on page 1

. * ...re-display (thus removing) the old fish on page 1

. *...and display a new fish 2 pixels to the right on page 1

. * then increment x-location counter by 1

. page 2, 1

. image plot; memory, `fish`; x, 100

. image plot; memory, `fish`; x+2, 100

. calc xx +1

. * keep page 1 showing while changing the display on page 2

. page 1, 2

. image plot; memory, `fish`; x, 100

. image plot; memory, `fish`; x+2, 100

endloop

시스템 변수 (System Variables)

zrpage 현재 디스플레이된 페이지

zwpage 텍스트와 그래픽이 작성된 페이지

zmaxpage 유효 화면 유형에 사용 가능한 최대 페이지수

파레트(palette)

파레트의 변경

-----------------------------------------------------------------------------

palette 키워드

init 파레트를 디폴트상태로 초기화 함

set 개별 파레트 엔트리를 위한 색상 값을 세트

read 하드웨어->변수로 파레트 엔트리 판독

write 변수->하드웨어로부터 파레트 엔트리 작성

color 색상 키워드를 파레트 엔트리에 연결시킴

-----------------------------------------------------------------------------

설 명

파레트-기초한 디스플레이 하드웨어 즉,EGA, MCGA, VGA, EVGA 및 호환 가능한 그래픽 어댑터 등에 이용 가능한 색상의 세트를 변경함. 상기 palette 은 여러 가지 상이한 기능을 지원함:

⊙ 현 파레트의 일부 혹은 전부를 변경함

⊙ 현 파레트의 일부 혹은 전부를 변수로 판독

⊙ 상이한 파레트 엔트리에 일치되도록 색상 키워드를 변경함

" 파레트(palette)"는 상기 하드웨어 색상 슬롯으로 할당된 색상의 세트이다. VGA 화면은 16 색상 슬롯이고, MCGA와 EVGA 화면은 256 색상 슬롯을 갖는다. "표준 파레트"는 상기 슬롯을 위한 디폴트 값의 세트이다.

각 색상은 3개의 색상값 즉, 적색(red), 녹색(green) 및 청색(blue)의 결합이며 모두 합하여 RGB라고도 한다. 일부 모드들은 또한 각 색상에 대한 상대적 명암을 나타내는 인텐시티 바이트(intensity byte)를 사용한다. 10 색상(tenCORE)일 경우, 표준 파레트는 다음과 같은 색상 할당을 사용한다:

0 흑(black) 4 적(red) 8 흑+(black+) 12 흑+(red+)

1 청(blue) 5 자홍(magenta) 9 청+(blue+) 13 자홍(magenta+)

2 녹(green) 6 브라운(brown) 10 녹(green+14) 브라운+(brown+)

3 청녹(cyan) 7 흰(white) 11 청녹(cyan+) 15 흰+(white+)

슬롯 수와 그 본래 함유하고 있는 RGB 값 사이에는 특정한 관련이 없다. 이 명령은 동일한 화면상에서 하나 이상의 화상이 표시될 경우에 적절하다. 만약 상기 화상들이 상이한 파레트를 사용한다면, 가장 최근에 표시된 화상의 파레트만이 액티브한 상태가 된다. 상기 동일한 슬롯이 다른 화상에 의해 사용될 경우, 상이한 파레트가 액티브될 때 그 색상들은 변경되어야 한다. 화면상의 다중 화상들을 위한 일반 파레트의 설계는 주의하여 처리하여야 한다.

상기 디폴트 파레트는 새로운 메인 단위가 연결될 때마다 복원되게 된다. 상기 디폴트 파레트는 파레트를 변경한 후에 palette 수정기로서 status save를 실행함에 의해 변경시킬 수 있다. 상기 palette 은 status restore; standard; palette을 실행함으로써 표준 디폴트로서 재설정된다.

palette init [;number]

상기 파레트를 그의 표준 디폴트 상태로 초기화한다. 다중 디폴트를 지원하는 카드상에서, 숫자(number)는 바람직한 디폴트 파레트를 지정한다.

palette set;COLOR, red, green, blue,[,intensity]

적, 청, 녹색의 값을 세트하고, COLOR에 의해 언급된 상기 파레트 슬롯에 대한 선택적인 인텐시티를 설정한다. 파레트 슬롯은 숫자나 색상 키워드에 의해 지정될 수 있다.

color는 적,청,녹색의 용도의 하드웨어에 유효한 임의의 하드웨어 색상 수(number)이고, 인텐시티 범위가 0에서 255이다. 넓은 범위를 지원하지 않은 하드웨어를 위하여, 상기 값은 255=최대 인텐시티, 128= 중간 인텐시티 등으로 자동적으로 조정된다. 상기 시스템 변수 zpalincr 은 상기 색상 값의 최소 유효 증분을 보고하고; zintincr은 인텐시티를 위한 최소 유효 증분을 주게된다.

인텐시티(intensity)는 2개의 화면 유형, 즉 ega, graphics, low 와 ega, graphics, medium에만 중요하다. 다른 화면 유형에 있어서, zintincr 은 0 이고, 상기 인텐시티의 값은 무시된다. 이것은 파레트가 다른 화면 유형으로 사용되는 2개의 화면 유형중 어느 하나에서 처음 생성될 때에 문제을 야기시킬 수 있는데: 이것은 상기 새로운 화면 유형상의 파레트의 "흐려짐(dimming)"을 야기한다. 이 명령은 이제 인텐시티 때문에 이용할 수 없고, 파레트의 RGG 값을 조절함에 의해 정정되어야 한다.

palette read; buffer, number

변수 buffer로 파레트 엔트리의 요구된 수를 판독한다. 상기 버퍼의 구조는 아래에 설명된다.

palette write; buffer, number

변수 buffer로부터 파레트 엔트리의 요구된 수를 기입한다. 상기 버퍼의 구조는 아래에 설명된다.

palette color; COLOR, slot

파레트 슬롯에 TenCORE 색상 키워드를 연결시킨다. 상기 TenCORE 색상명칭은 제1의 16 파레트 슬롯에 디폴트로 대응된다. 상기 COLOR 옵션을 이용하여 저자는 주어진 색상명칭에 대응하는 파레트 슬롯을 변경할 수 있다.

파레트 변수(Palette Variables)

키워드 read와 write를 이용하여 버퍼로/로부터 파레트 슬롯 엔트리를 판독/기입한다. 상기 파레트 버퍼는 아래와 같은 형태의 하나 이상의 6-바이트 파레트 엔트리를 포함한다:

슬롯(slot) (2바이트)

적색 (1바이트)

녹색 (1바이트)

청색 (1바이트)

인텐시티 (1바이트)

상기 슬롯(slot)의 값은 read 혹은 write를 실행하기 전에 각 파레트 엔트리를 위해 설정되어야 한다. 파레트 엔트리의 서브셋(subset)은 적절한 slot 값을 설정하여 판독, 기입되어야 한다.

실시예

상기 디폴트 16 TenCORE 색상 슬롯을 위한 파레트 정보를 읽기 위해서:

define local

palette(16) , 6

. slot, 2

. red, 1

. green, 1

. blue, 1

. intensity, 1

count , 2

define end

*

loop count1, 16

* must remember to initialize slot numbers

. calc slot(count)count -1

endloop

*

palette read; palette(1), 16

시스템 변수 (System Variables)

zpalincr 현재 화면 유형을 위한 색상 값의 최소 유효 증분

zintincr 현재 화면 유형을 위한 인텐시티 값의 최소 유효 증분

중지 (pause)

사건이 발생될 때까지 실행을 중지함

=============================================================================

pause[time;][flow=all ┃ KEY/s;] [pass =all┃KEY/s]

pause[time;]testkeys=all ┃ KEY/S

time 연속실행전의 지연 시간(초로 표시)

flow= flow 분기를 위한 키 목록

pass= 연속 실행을 위한 키 목록

testkeys= pass= 와 유사하나 입력 버퍼로부터 제거되지 않은 키

-----------------------------------------------------------------------------

설 명

키 누름과 같이 수용된 이벤트가 발생될 때까지 명령의 실행을 중지한다. 상기 키 누름은 중지(pause) 명령을 전달할 수 있고, 키 분기(branching)에 의해 정의된 flow을 연속하거나 실행시킨다. 키 누름이 pause 에 의해 처리될 경우 그것은 일반적으로 입력 버퍼로부터 제거되고, zinput 과 같은 시스템 입력 변수는 새로운 이벤트를 반영하기 위하여 갱신된다.

break 수정된 flow 분기는 항상 작동된다: 그것은 자신의 업무를 실행시키기 위해 임의의 pause을 인터럽트한다. 다른 flow 분기들은 그의 키가 flow= 키목록에서 지정될 때에만 pause에서 활성된다. 어느 경우에 있어서든, 만약 상기 flow가 do 또는 library 분기일 경우 서브루틴이 종료되면 상기 pause로 귀환되도록 제어한다.

만약 시간이 지정되었을 경우, 그 지정된 시간이 만료되면 디폴트 %timeup 키를 발행(isseue)하는 클록 실행을 설정한다. 이 %timeup 키는 상기 pass=keylist내에 자동적으로 포함되며; 만일 일부 다른 수용된 사건이 먼저 발생하지 않으면, 상기 %timeup 은 연속적으로 실행을 허가한다. 만약 flow do 혹은 flow library 분기가 시간이 지정된 pause 동안에 발생될 경우 타이밍은 서브루틴이 상기 pause로 귀환 제어될 때까지 중지된 다음 다시 시작한다.

상기 pause 명령은 만약 모든 옵션이 목록에 필요할 경우 몇 개의 라인 이상으로 연장시킬 수 있으며; 블랭크(blank) 명령 필드는 연속을 표시한다. pause

태그(tag)가 없는 pause 명령은 임의의 사건이 시간 명령 실행을 연속적으로 실행할 때까지 대기한다. 그것은 임시 프로그램 홀트(halt)를 위해서 제공되며; 사용자가 임의의 키를 누르면 상기 프로그램은 계속 실행된다. break 수정 flow 분기일 경우에만 다음 명령을 실행하는 필요를 변경하게 된다.

실시예

white press Any Key to continue

pause

write Good, now let` s open the valve and see what happens...

pause time

단지 타이밍을 갖는 pause 명령만이 지정된 시간동안 지연된다. break 수정 flow 분기일 경우에만 시간 지연을 인터럽트시킬 수 있다. 임의의 다른 사건(event)은 무시되고 키 입력 버퍼로부터 제거된다. 이러한 지연 동안에 발생된 사건으로 인하여 입력 버퍼가 비워지지 않는 강제된 지연을 위해, 상기 delay 명령을 사용한다.

하나의 디폴트 타이머 키만이, 즉, %timeup이 상기 pause 명령과 time 명령의 모두를 위해 사용되게 된다. 상기 pause의 타이밍은 이전 time 명령에 의해 세트된 임의의 디폴트 타임을 폐기하게 된다.

실시예 1

at 5:10

write some text...

pause 5

at 7:10

write some more text...

5 초 지연후에, 추가 텍스트가 표시장치에 부가된다.

실시예 2

flow do; %f5; data; break

...

time 30

...

pause 5

상기 프로그램은 5초동안 중지되며; 이전 타이밍(time 30)은 취소된다. 만약 [F5]가 눌러진다면, 상기 타이밍은 상기 break 수정 flow 분기가 데이터 단위로 실행되는 동안 중지된다. 귀환시, 상기 pause 는 잔존 시간동안 대기한다.

pause[time;]flow=all┃KEY/s

flow=keylist를 갖는 pause는 작업을 위해서 지정된 혹은 all 플로우 분기일 경우에만 허가된다. 만약 do 혹은 library 분기가 발생될 경우, 상기 서브루틴의 종료시 pause 명령으로 귀환되도록 제어한다. 선택적으로, 상기 타이밍은 설정된 다수의 초(second)가 경과한 후에 상기 pause 명령을 종료하기 위해 사용될 수 있다. 상기 break 수정 flow 분기는 그것이 목록되든지 그렇치 않튼간에 항상 선행된다.

실시예 1

pause flow=all

상기 프로그램은 임의의 플로우 분기가 발생될 때까지 중지된다. 상기 pause 에 따라 코딩되는 것은 결코 실행되지 않는다.

실시예 2

flow jump; %f1; out

flow do; %f2; info

flow do; %f3; data

pause 10; flow= %f1, %f2

상기 프로그램은 단위 out으로 jump 하기위해 [F1]이 눌려질 때까지 10초 동안 중지한다. 만약 [F2]가 눌려질 경우, 타이밍은 서브루틴으로서 단위 info 가 실행되는 동안 일시 중지된다. 단위 info 로부터 귀환됨에 따라, 상기 pause 는 잔존 시간동안 대기한다. 상기 단위 데이터는 그 분기 키가 상기 flow=keylist내에 존재하지 않기 때문에 이 pause로부터 엑세스가능하지 않다.

pause[time;] pass=all┃KEY/s

pass=keylist를 갖는 pause는 다음의 명령들을 연속적으로 실행하기 위하여 상기 pause를 전달시키기 위한 지정된 혹은 all 키들을 허가된다. 선택적으로, 상기 타이밍은 설정된 다수의 초(second)가 경과한 후에 상기 pause 명령을 종료하기 위해 사용될 수 있다. %timeup 키의 결과는 상기 pass=keylist 내의 자동적인 엔트리이다. 상기 break 수정 flow 분기는 이곳에서 작업되고 상기 pass=keylist 내의 임의의 키 이상으로 선행된다.

실시예 1

선택된 페이지는 연구를 위한 주제를 선택하도록 사용자에게 허가한다. 상기 pause 명령의 선택들중에서 선택된 어느 하나에 따라, 상기 프로그램은 작업(lesson)의 적절한 부분(section)으로 (인수로서) 분기시키위해 계속된다. 상기 인덱스(index) 단위로 구성된 break 수정 분기는 단지 상기 pause에서 발생될 수 있는 flow 분기일 경우에만 해당된다.

flow jump; %f1; index; break

flow jump; %f2; notes

...

write choose an option:

a. anthracite coal

b. bituminous coal

c. peat

pause pass= a, b, c $$ a, b, c만 수용

if zinput = "a"

. jump unita(3, 5, 1)

elseif zinput = "b" $$ 기타 등등

...

실시예 2

pause 10, pass=a,b,c,d,e,f,g,h,i,j,k,l,m,

n,o,p,q,r,s,t,u,v,w,x,y,z,

0,1,2,3,4,5,6,7,8,9

pause 명령의 태그는 여러 라인들 이상으로 연장될 수 있다. 이 pause는 상기 목록된 키중의 하나가 눌려질때까지 혹은 10초 동안 대기한다.

실시예 3

write Lots and lots of text

over many,

many lines.

nextkey clear

pause pass=a,b,c

만약 대형 표시기와 같은 시간 소비적인 코딩이 존재한다면, 키는 pause 명령이 실행되기 전에 입력 버퍼내에 스택(stack)되게 된다. 상기 pause 는 그 전달되는 하나가 이를 때까지 키가 대기하도록 진행한다. 이 명령은 때때로 전단부(ahead)가 타이프(type)되도록 사용자를 허락하기 때문에, 양호하게 될 수 있다. 만약 전면부가 타이프되는 것이 양호하지 않을 경우, 상기 pause 전에 nextkey clear 명령문을 사용하라. 그것은 모든 펜딩(pending) 키의 버퍼를 비우게 한다.

pause[time;] flow=all ┃KEY/s ; pass=all ┃KEY/s

상기 flow= 와 pass=keylist 양쪽 모두는 flow= keys 이상으로 선행되게 pass = keys를 갖는 동일한 명령문내에 발생될 수 있다. 선택적으로, 상기 타이밍은 설정된 다수의 초(second)가 경과한 후에 상기 pause 명령을 종료하기 위해 사용될 수 있다. 상기 break 수정 flow 분기는 모든 경우에 작동한다.

상기 의사 키 값 %other 는 개별적으로 할당되지 않는 모든 키를 구비하도록 어느 하나의 keylist내에 위치될 수 있다. 만약 flow =keylist(또는 all 키워드의 사용에 의하여)가 설정되면, 상기 %other 가상 키를 갖는 임의의 flow 명령문을 활성화시킨다.

실시예 1

pause flow=all; pass=%other

모든 flow 키는 활성화된다. 모든 다른 키는 상기 단위의 실행이 계속되도록 상기 pause를 전달한다.

실시예 2

flow jump; %timpup; timeout

...

time 10

pause flow=all; pass=a,b,c

여기서 타이밍은 미리 설정되며 pause 명령문에 의해 무효화되지 않는다. 상기 시스템이 %timeup 키가 생성할 때, 단위 timeout 로의 flow 분기가 발생된다.

실시예 3

flow jump; %f1; =exit

flow jump; %f2; index

flow do; %f5; data

flow jump; %timeup; timeout

...

pause 10; flow=all; pass=a,b,c,%pointer

[A],[B], 또는 [C] 또는 임의의 포인터 클릭을 누르면 다음 명령으로 pause가 전송된다. 임의의 지정된 flow 키(%timeup)는 정의된 flow 함수를 실행한다. 만약 다른 수용된 사건이 10초 동안 발생되지 않는다면, 실행은 pause에 따른 명령으로서 연속 실행한다. 제어(control)는 상기 pause 명령의 타이밍이 상기 pass = keylist 내에 %timeup를 자동적으로 포함하기 때문에, 타임아웃 단위로 전달되지 않으며, flow 할당 이상으로 선행된다.

실시예 4

flow jump; %f1; =exit

flow jump; %f2; index

flow do; %pgup; %pgdn; nextunit

flow jump; %other; badKeys

...

pause flow=all; pass=a,b,c,%space,%f2

[A],[B], 또는 [C] 또는 [F2]를 누르면 다음의 명령으로 pause가 진행된다. 상기 %f2 flow 분기는 상기 키가 선행되는 pass =keylist 내에 존재하므로 진행하지 않는다. 상기 %f1 flow 분기와 임의의 다른 분기는 flow=all 때문에 작동하게 된다. pass =keylist내에 구비되지 않거나 다른 flow 명령문내에 정의되지 않은 임의의 키는 예기치 않은 키를 취급하는 베드키(badkeys)를 단위로 하는 flow do를 실행한다.

pause[time;] testkeys=all┃KEY/s

상기 testkeys= 양식은 입력 버퍼로부터 제거되지 않은 전달된 키인 pass=except 과 유사하다. 그것은 zinput와 같은 시스템 입력 변수가 갱신되기 때문에, 펜딩된 입력을 테스트하는대 사용된다. 상기 패스 키는 다음의 처리 포인트(pause, arrow, nextkey, end-of-unit)가 입력될 때까지 입력버퍼내에 잔존한다. testkeys= 는 nextkey test 의 pause 형태이다.

testkeys=상기 keylist 형태가 아닌 다른 형태로 발생되지 않는다.

실시예

pause testkeys=0,1,2,3,4,5,6,7,8,9

long 1, judge

arrow 10:10

answer 3

. write Great!

wrong 2

. write No, that`s Mars

wrong 1

. write No, that`s Mercury

...

endarrow

번호 키일 경우에만 상기 pause가 종료된다. 상기 전달된 키가 상기 testkeys=양식에 의해 입력 버퍼로부터 제거되지 않기 때문에, 그것은 다음의 arrow을 위한 입력으로서 잔존하게 된다. 상기 arrow 명령으로 화면상에 표시된 후에, 상기 키는 상기 long 1, judge에 따라 발생되도록 즉시 판단한다.

폐용된 양식(Obsolete Form)

시스템의 이전 버전의 모호한 keys= 양식은 명확한 pass= 와 flow= keylist 양식으로서 대체된다. 이 명령은 목록된 키가 flow 분기를 실행하거나 혹은 다음 명령으로 pause을 하는지의 여부를 예상하는 keys=keylist에서만 찾는 것은 가능하지 않다. 상기 key= 양식이 향상된 호환성을 이유로 여전히 작업될 경우에, 사용자는 새로운 언앰비규어스(unambiguous) 양식으로 스위치되도록 통지한다.

시스템 변수(System Variables)

상기 입력 관련 시스템 변수는 pause 가 키를 처리할 때마다 갱신되게 된다.

zinput 가장 최근의 키프레스, 포인터 입력, 또는 가상-키

zinputa 현재 zinput 값을 발생한 지역 ID

zinputf 사건(event)중의 시간에서 키보드 조건의 비트맵

zinputx 사건중의 시간에서 포인터 x-좌표

zinputy 사건중의 시간에서 포인터 y-좌표

zkeyset 키보드 스캔 코드

zpcolor 사건중의 시간에서 포인터 아래의 화면 색상

perm

순열 목록 관리(Manges permutation lists)

-----------------------------------------------------------------------------

perm 키워드...

create 메모리내 순열 목록을 생성

next 순열 목록로부터 다음 번호를 획득

remove 순열 목록로부터 지정된 번호 제거

replace 순열 목록로 지정된 번호 기입

copy 순열 목록의 복사

delete 메모리로부터 순열 목록 삭제

reset 메모리로부터 모든 순열 목록 삭제

read 변수로 순열 목록을 읽음

write 변수내의 목록을 순열 목록에 기록

-----------------------------------------------------------------------------

설명

상기 perm 명령을 통해 이용가능한 순열 관리 옵션은 번호 목록로부터 번호를 임의로 선택, 제거 및 대체하는 것을 허여한다. 다중 순열 목록은 동시에 엑세스 가능할 수 있다. 목록 복사는 순열을 사용할시 임의의 가능 전략(possible strategy)을 참작하는 세션(sessions)사이의 디스크 혹은 메모리내의 임의의 시간에 저장하고 복원될 수 있다.

순열 목록은 하나의 시스템 default 버퍼내에서 혹은 명명된 버퍼의 임의의 번호내에서 생성될 수 있다. 만약 가능하다면, 상기 default 버퍼의 사용은 네임(name) 인수가 제거될 수 있기 때문에, 순열을 사용하여 간략화한다. 상기 perm 명령을 위한 default 버퍼는 모든 단위에 의해서 공유된다.

순열 목록 버퍼는 메모리 풀(pool)내의 메모리 블록으로서 유지된다. 상기 메모리 풀은 명령들 즉, memory, image, window, status, area, flow, font 및 perm 등에 의해서 사용된다. 메모리 블록은 작성(creation)시 지정된 명령 유형에 속하는 것으로서 태그되고 메모리 풀을 사용하는 다른 명령에 의해서는 엑세스될 수 없는대; 다른 명령들은 충돌(conflict)없이 메모리 블록을 위해 동일한 네임을 사용할 수 있다.

perm create; length [; `NAME`┃default]

1부터 지정된 길이(최대 32, 767)까지의 랜덤한 순차 정수인, 비반복 순열 목록을 생성함. 상기 목록은 default 로서 저장되거나 또는 메모리 풀내에 사용자 명명 버퍼로서 저장된다. 새로운 default 목록을 생성하는 것은 상기 default 버퍼의 임의의 이전 사용을 자동적으로 대체한다. 명명된 목록을 생성하는 것은 만약 명명된 목록이 이미 존재할 경우 에러를 발생시킬 수 있는대; 만약 사용자가 동일한 네임을 다시 사용하기를 원할 경우 먼저 상기 delete 옵션을 사용해야 한다.

실시예 1

1 에서 10까지의 정수로 디폴트 순열 목록을 생성함

perm create; 10

실시예 2

1에서 25까지의 정수로 순열을 생성하는대; 상기 목록은 puiz 1로 명명된 메모리 블록내에 저장된다.

perm create; 25; `quiz1`

perm next; variable [; `NAME`┃default]

순열 번호를 무작위로 선택하고 변수로 그것을 저장함. 상기 선택된 번호는 만약 상기 순열 목록이 비었거나 혹은 에러가 발생되었을 경우 순열 목록으로부터 제거되게 되고, 0으로 귀환한다.

실시예 1

상기 디폴트 순열 목록로부터 다음 번호를 읽고(get) 그것을 변수 question으로 설정함.

perm next; question

실시예 2

실시예 1과 같이 실행하고 상기 번호는 명명된 목록 quiz 1로부터 설정함.

perm next; question; `quiz1`

실시예 3

5 가지의 아이템의 순열은 상기 디폴트 버퍼내에서 생성된다. 루프내에서, 단위 Q1에서 Q5내의 5가지 질문(question)은 랜덤 순차로 나타나게 된다. 상기 목록이 소모되었을 경우, 상기 변수 question 내의 0 값은 루프 구조의 출구(exit)로서 사용된다.

perm create; 5 $$ 디폴트 순열 목록 생성

jump zreturn; ; error

loop

. perm next; question $$ 후속 순열 번호 획득

. do question;;;Q1;Q2;Q3;Q4;Q5 $$ 질문 호출

outloop question = 0 $$ 완료되면 루프 종료

endloop

perm remove; itemNumber[; `NAME`┃default]

순열 목록으로부터 지정된 아이템을 제거함. 상기 정수는 perm next 명령문의 선택에 더 이상 사용되지 않는다.

실시예

상기 디폴트 순열 목록으로부터 problem의 값을 제거함.

perm remove; problem

perm replace; itemNumber[; `NAME`┃default]

상기 지정된 아이템을 순열 목록 내로 기입함. 상기 정수는 perm next 명령문에 의해서 설정에서 이용가능하다.

실시예

problem의 값을 디폴트 순열 목록에 둔다.

perm replace; problem

perm copy; [`FROM`┃default];[ `TO`┃default]

순열 목록의 복사를 실행함. 만약 복사된 목록이 이미 존재한다면, 그것을 덮어쓴다. 상기 default 목록은 상기 명령문내에서 단지 한번만 발생할 수 있다.

실시예 1

순열 제1 목록(list first)를 제2(second)로 명명된 목록으로 복사함.

perm copy; `first` ; `second`

실시예 2

상기 디폴트 순열 목록을 변수 newList로 명명된 목록에 복사함.

perm copy; default; newList

perm delete [; `NAME`┃default]

메모리로부터 순열 목록을 삭제함.

perm reset

메모리로부터 순열 목록을 삭제함.

perm read; permBuffer [,length][; `NAME`┃default]

순열 목록을 바이트 내에 설정된 길이용 지정 버퍼로 판독한다. 만약 길이가 지정되지 않았다면, 상기 버퍼의 정의된 길이가 사용된다.

상기 perm 명령의 read 와 write 양식은 학습자 세션간의 디스크 상에서 순열 목록을 저장하고 복원하는 데 사용된다.

상기 버퍼의 구조는 다음과 같다.

상기 아이템 비트맵은 각 비트가 순열 목록내의 번호와 일치되도록 포맷된다: 만약 상기 비트가 "1"이라면, 이 아이템은 여전히 이용가능하고; 만약 이 비트가 "O"라면 그것은 제거된다. 예컨대, 만약 비트 3이 1로 세트된다면, 3번은 아직 순열 목

록으로부터 제거되지 않는다. 상기 아이템 비트맵의 길이는 상기 목록의 길이에 의해 결정된다. 각 바이트가 8개의 아이템 상태를 유지할 수 있기 때문에, N 은 8로 나눈 목록의 길이로 요약된다. 그것은 int((길이+7)/8) 또는 ((길이+7)÷8)로 계산될 수 있다.

perm write; permBuffer [,length][; `NAME`┃default]

상기 버퍼로부터 바이트들의 설정된 길이를 순열 목록에 기록함. 만약 상기 길이가 지정되지 않았다면, 버퍼의 정의된 길이를 사용한다.

시스템 변수(System Variable)

zreturn

-2 리던던트(redundant) 동작: 목록내에서 이미 사용된 번호를 대체 하거나 혹은 이미 제거된 번호로 사용된 번호는 제거함

-1 연산 성공

3 범위(range)를 벗어남: 32,767 이상으로 목록을 생성하기 위해 시도하거나 또는 목록 사이즈 이상으로 대체 혹은 제거함

6 작성(create)를 사용하여 네임을 복사

10 네임을 발견하지 못함

17 무효 순열 목록 데이터를 기록하도록 시도

18 메모리 풀의 불충분한 공간

polygon

다각형 그리기

-----------------------------------------------------------------------------

polygon[LOCATION];[LOCATION];[LOCATION]...[;fill]

-----------------------------------------------------------------------------

설 명

정점(vertics)으로서 상기 지정된 LOCATION을 사용하여 전경(foreground) 색상 내에 다각형을 그림. 상기 선택적인 수정자(modifier) 필(fill)은 다각형이 채색되도록 지정된다. 볼록(convex) 다각형일 경우에만 채색되게(fill) 되며; 이때 오목 다각형은 다수의 블록 다각형으로 분리해야만 한다(하기 참조). 최대 3점 이상이 지정되어야 한다. 최대 50점이 지정될 수 있다. 만약 마지막 점이 제1 점과 매치되지 않는다면, 그것은 연결된다.

다각형은 눈금(scale), 회전(rotate) 및 너비(width) 등에 의해 영향을 받는다. 다각형 함수는 단지 임의의 수평 라인이 다각형 상의 2점과 정확히 교차될 경우에만 채색된다.

다수의 블록 다각형으로 오목 다각형을 분리하는 것은 양호한 형상을 산출한다.

polygon 0,100; 200,0; 200,100 $$ draws a triangle

polygon 10:10; 10:20; 20:20; 20:10 $$ draws a rectangle

polygon 0,100; 200,0; 200,100; fill $$ draws filled polygon

press

입력값을 생성

-----------------------------------------------------------------------------

press KEY┃expression[;first]

press KEY┃expression[,inputF[,inputX,inputY[,inputA]]][;first]

-----------------------------------------------------------------------------

설명

상기 Press 명령은 설령 키보드가 눌려졌을 지라도 입력 버퍼로 지정된 키를 설정함. 다음의 입력 처리점(pause, arrow, nextkey, 혹은 end-of-unit)에서, 상기 키는 진행하고, 유사한 리얼 키누름이 작용하는 것이 시스템 변수 zinput 의 갱신을 구비하는 것은 무엇이든지 실행한다.

선택적인 수정자 first 는 상기 키를 임의의 다른 키가 입력 버퍼내에서 대기하기 전에 기입되도록 하며; 먼저 처리되어 진다.

선택적으로, 시스템 변수 zinputf, zinputx, zinputy 및 zinputa을 위한 값은 상기 키가 진행될 때 zinput을 따라 세트시키기 위하여 지정될 수 있다. 만약 값이 지정되어 있지 않다면, 일치되는 시스템 변수는 0 으로 세트된다.

상기 press을 위한 KEY 값은 한정되며; 내장된 그리고 단일 a,b,c 양식은 이용 가능하지 않다. 그러나, 상기 키는 상수, 변수 또는 계산의 결과(calculation)와 같이 표현할 수 있다.

실시예들

실시예 1

%space를 설령 키보드상에서 눌려졌을 지라도 입력 버퍼에 넣는다.

press %space

실시예 2

%F1을 임의의 다른 키가 진행되도록 대기하기 전에 입력 버퍼에 위치시키는 대; 그것은 먼저 처리되어 진다.

press %F1

실시예 3

입력 버퍼내에 위치와 지역 id 정보를 따라 상기 키 값 %pointer를 위치시킴에 의해 포인터 클릭을 시뮬레이트함. 다음 입력-처리 포인트, zinput=%pointer, zinputx=320, zinputy=240 및 zinputa=5 이다. zinputf을 위해 값이 지정되어 있지 않기 때문에, 그것은 0 으로 세트된다.

press %pointer,,320,240,5

실시예4

질문(question)의 시도가 실패한 후에, 학생은 arrow에 의한 입력으로 타이프한 상기 정정된 답변의 첫 번째 작은 글자들을 설정한다.

write who is buried in Grant`s tomb?

arrow

answer ≪U, Ulysses,s≫ Grant

no

. write press any key for a hint.

. pause

. press %enter $$ erases the mistake

. press %"G"

. press %"r"

endarrow

시스템 변수(System Variable)

zreturn

-1 성공적으로 동작

0 키 버퍼 오버플로우

print

프린터로 출력을 전송하거나, 프린트 파라메터를 변경

-----------------------------------------------------------------------------

print 변수, 길이

print initial; prn┃lpt1┃lpt2┃lpt3┃com1┃com2

print initial; file, `FILENAME`[,length]

print end

buffer 프린터로 출력하기 위한 변수 버퍼

length 프린터로 전송하기 위한 바이트 수

initial 프린터 장치를 변경

end 네트워트 스플링을 종료하고 프린터를 lpt1으로 재설정

-----------------------------------------------------------------------------

설 명

지정된 바이트 수를 print initial 에 의해 표준 프린터 장치 lpt1 또는 다른 장치 혹은 지정된 파일로 전송함.

print 용 기준(regal) 장치는

prn,lpt1,lpt2,lpt3,com1 및 com2

상기 initial 키워드는 프린터용으로 사용된 장치를 변경한다. 상기 file 양식에 의하면, 파일 네임은 지정된다. 상기 ASCII 파일 네임 문자열은 드라이브와 패스(path)를 포함하며, 널 바이트로서 종료되어야 한다. 만약 상기 길이가 지정되지 않았다면, 상기 변수의 정의된 길이를 사용한다.

만약 지정된 파일이 이미 존재한다면, 프린트를 위한 준비시 길이를 0로 초기화한다.

상기 end 키워드는 print initial로서 설정된 임의의 프린터 연결을 클리어(clear)한다. 또한, 네트워크 시스템상에서, 프린터 출력 스플링을 종료하고 프린트 동작을 초기화한다.

만일 print initial에 의해 달리 지정되어 있지 않다면, 출력은 lpt1으로 전송된다.

오직 print 명령만이 지정된 문자를 프린터로 전송한다. 프린터 제어 문자는 출력에 부가되지 않는다. 프린터 제어 코드를 위한 제조자의 매뉴얼을 참조함.

대부분의 프린터는 프린트 헤드와 다음 라인을 위한 종이에 위치되도록 각 라인의 끝에서 ASCII 귀환 개행 코드(h0d) 또는 귀환 개행/라인 피드 시퀀스(hodoa)를 요구한다.

기술적 노트(note): 프린터가 효과적으로 연결되지 않았을 경우 만일 방향이 새로 설정되지 않았다면, 프린터 출력은 통상 lpt1인 장치 0 즉, BIOS INT 17H 프린터 드라이버로 전송된다. 프린터 연결이 활성화 되었을 경우, 프린터 출력은 표준 DOS "write" 요구을 통해 장치로 전송된다.

실시예들

실시예 1

리포트를 위한 타이틀 라인을 프린트함. 사용자 네임은 유저네임(username)내에 저장한다. 귀환 개행/라인 피드 시퀀스가 포함되는 것을 노트함.

define local

username, 20 $$ name of user

text, 100 $$ text to print

texten, 2 $$ length of text to print

CRLF= h0d0a $$ carriage return and line feed

define end

*

packz text;textlen;Text results for ≪showa, username≫

≪showa, CRLF≫

*

print text, textlen $$ print the line

실시예 2

lpt2로 차후 방향을 새로 정함.

print initial; lpt2 $$ initialize lpt2

실시예 3

파일 C:\TENPRINT.PRN 로 차후 방향을 새로 정함.

define local

filename 40

define end

packz filename;;c:\tenprit.prn $$ put filename in variable

print initial; file, filename $$ redirect output to file

시스템 변수(System Variable)

zreturn

-1 성공적인 동작

0 디스크 에러(zdoserr과 zedoserr를 참조)

put

다른 것을 위하여 하나의 문자 문자열(one string)을 대체함.

-----------------------------------------------------------------------------

put fromTEXT; to TEXT[,buffer[,length]]

fromTEXT 발견하고 교체하기 위한 텍스트 문자열

toTEXT (널 될 수 있는) 교체 텍스트 문자열

buffer 교체를 실행시키기 위한 사용자 변수 버퍼

length 버퍼용 최대 길이

-----------------------------------------------------------------------------

설명

어로우(arrow)로 학생(student) 응답 버퍼내에서 혹은 선택적으로 임의의 지정된 버퍼내에서 fromTEXT 의 모든 오큐어런스(occurrence)를 toTEXT로 대체함. 상기 TEXT는 인용 부호없이 발생되고 내장 쇼우(show) 명령를 포함할 수 있다.

실시예들

실시예1

put이 답변 판단중에 약어를 그의 전체 단어 상당어구(equivalence)로 변경되도록 어떻게 사용되는 지를 보여줌.

write what is the biggest US city

arrow 10:10

put NY, New York

answer New Yo가

. write Great

endarrow

실시예 2

상기 버퍼 마이문자열(mystring)내에 "elephant"를 갖는 "dog"의 모든 오큐어런스(occurance)를 대체함.

put dog,elephant,mystring

실시예 3

내장 텍스트는 from 과 to 문자열 모두를 위해 사용될 수 있다.

put ≪a,oldchars,oldlen≫,≪a,newchars,newlen≫,textvar,length

실시예 4

이 명령은 24시간 유형 클록 디스플레이를 발생한다. 만약 상기 시간 혹은 분이 10 이하일 경우, 10 디지트는 상기 pack의 showt`s 로부터의 공간에 포함될 수 있다. 상기 put은 디지트 0을 갖는 var내에 임의의 공간을 대체한다.

pack var, length,≪showt, hrs, 2≫:≪showt, mins, 2≫

put ,o, var, length $$ from string is just a space

* replace spaces with 0

showa var, length

시스템 변수(System Variables)

zreturn

-1 성공적인 동작, 모든 가능한 교체 실행

0 대체를 위한 불충분한 공간(room)

기타 명령(Miscellaneous)

zlength 교체후의 텍스트 문자열의 길이

znumber 교체되는 번호를 만듬(Number of replacement made)

zcount 만약 사용한다면, 응답 버퍼의 길이

receive

서브루틴으로 전달되는 인수값을 수신함

-----------------------------------------------------------------------------

receive argument/16s

-----------------------------------------------------------------------------

설명

서브 단위로 전달되는 인수를 수신하고, 지정된 변수내의 값을 채워넣음.

널 인수는 상기 인수 목록의 블랭크 인수들(,,)에 의해 지정된다.

인수는 do, library, jump 및 jumpop 명령에 의해 전달된다. 다음은 receive에 적용된다.

⊙ 인수내의 임의의 요소는 널(null)일 수 있다. 상기 인수내의 널 요소 목록은 일치되는 전달 값이 무시되도록 한다.

⊙ receive 인수로서 사용된 문자는 압축 에러의 원인이 된다.

⊙ 뉴메릭(numeric) 정수와 실 변수만이 상기 인수 목록내에서 유효하다. 8개의 문자 혹은 그 이하의 텍스트 변수는 본 환경(context)내에서 뉴메릭을 압축한다.

⊙ receive 명령의 임의의 번호가 실행될 수 있고, 임의의 receive는 여러번의 임의 번호가 실행될 수 있다. receive가 매번 실행될 경우, 상기 처음으로 전달된 인수가 사용된다.

⊙ (그 자신의 인수를 수신하거나 혹은 귀환될 수 있는 다른 단위로 호출하는 것을 방해하는 것은 통상의 단위내에 수신된 값을 무효화시키게 된다(전달된 값은 개별 단위로 로컬됨).

⊙ 만약 널 인수가 전송될 경우, 상기 receive 목록내의 상응하는 요소는 변경되지 않는다.

⊙ 통상적으로, 수신된 인수의 번호는 전달된 번호에 매치되어야만 하는대, 다를 경우 실행 에러가 발생된다. 이것은 nocheck receive 사용함에 의하여 무효화된다.

실시예

단위 원(one)은 서브루틴 서클(circles)에 전달됨.

one

.

.

.

do circles(160, 100, 5)

.

.

.

circles

define local

x, 2 $$ center of circles

y, 2

n, 2 $$ number of circles

r, 2 $$ radius of circle

define end

*

receive x, y, n

at x, y

loop r10, n ★ 10, 10

. circle r

endloop

시스템 변수

zargsin 서브루틴으로 전달된 (널을 포함하는) 인수의 숫자

zargsout 예상되는 귀환 인수의 숫자

zargs 실제로 수신된 비 널 인수의 숫자

reloop

loop 구조의 시작으로 귀환함

-----------------------------------------------------------------------------

reloop[CONDITION]

-----------------------------------------------------------------------------

설명

loop 구조를 다시 시작하기 위해 사용됨. 만약 상기 태그가 블랭크이거나 혹은 조건이 참(true)이면, reloop는 설령 endloop가 실행된다 할지라도 루프 구조의 시작으로 귀환한다. 만약 상기 조건이 거짓(false)라면, 실행은 다음 명령으로서 계속 된다. reloop는 임의의 다른 오목(indent) 구조가 상기 reloop를 둘러싸도록 하는 것에 관계없이 귀환되는 loop 명령으로서 동일한 인덴테이션(indentation) 레벨로 항상 출현한다.

루프 구조의 추가 정보는 loop 명령을 참조할 것.

실시예

상기 카운터(counter)가 13일 경우, 상기 케이스를 스킵하는 ITERATIVE 루프.

define local

index, 2 $$ loop counter

define end

*

loop index1,20

reloop index = 13

. at index:5

. write This is line ≪show, index≫

endloop

return

선택적으로 인수를 귀환시키는 서브루틴 실행을 종료함.

-----------------------------------------------------------------------------

return [argument/16s]

-----------------------------------------------------------------------------

설 명

만약 do 혹은 library 에 의해 호출된다면, 커렌트(current) 단위로부터 즉시 확장된다.(exit). 만약 상기 단위가 do 혹은 library 에의해 호출되지 않는 다면, 실행 에러를 발생한다.

상기 브랭크-태그 양식은 인수가 호출 단위로 다시 전달되지 않도록 단위로부터 탈출된다.

만약 귀환된 인수의 목록이 지정된다면, 상기 값은 호출 단위로 귀환된다. 귀환 목록내의 널 엔트리는 수신된 인수내의 상응하는 값이 변경되지 않은채로 남도록 한다.

인수 전달에 관한 추가 정보는 receive와 nocheck 명령 설명을 참조할 것.

실시예

단위 테스트(test)는 서브루틴 스퀘어(square)를 호출하고, 그것을 하나의 인수로 전달하는대; 서브루틴 스퀘어는 인수를 수신하고, 계산기능에 사용하며, 단위 테스트내에 다시 변수 넘스퀘어(numsquar)로 결과 값을 귀환시킨다.

test

.

.

do square(12;numsquar)

show numsquar

.

.

square

define local

number

number2

define end

*

receive number

calc number2number ★ number

return number2

시스템 변수들

기타 명령(Miscellaneous)

zargsin 서브루틴으로 전달된 (널을 포함하는) 인수의 숫자

zargsout do 혹은 library 호출의 귀환이 예상되는 인수의 숫자

zargs receive에 의해 실제로 수신된 비 널 인수의 숫자

회전(rotate)

연속되는 그래픽 대상물을 회전시킴

-----------------------------------------------------------------------------

rotate [degrees[;LOCATION]]

-----------------------------------------------------------------------------

설 명

연속적으로 플로트된 모든 그래픽 대상물이 디그리(degrees)의 지정된 숫자에 의해 회전되도록 한다. 회전은 만일 선택적인 위치가 지정되어 있지 않다면, origin 명령에 의해 지정된 것으로서, 플로팅 시점에 대해 시계반대 방향으로 이루어진다. 회전 시점이 지정되는 것은 연속적으로 회전되는 대상물에만 영향을 미치게 된다.

상기 시스템 디폴트는 rotate 0(회전이 아님)이고, 각각의 메인 단위에서 그리고 initial 과 status restore에 의해 세트된다. 상기 블랭크-태그 양식은 또한 회전없이 표준 디폴트로 세트된다. 상기 디폴트는 status save; default에 의해 수반되는 rotate을 사용하여 변경될 수 있다.

rotate를 포함하여, 그래픽 정보 명령의 효과는 enable absolude 로서 일시 중지되고 disable absolute로서 복원된다.

상기 표시 제어 명령은 다음의 명령내에 적용된다.

scale

rotate

종횡비 정정

origin

원도우 관련 좌표

원도우 클리핑(clipping)

다음의 대상물은 회전되지 않는다.

텍스트

이미지

윈도우

문자와 라인(즉, box 10,3)를 사용하여 지정된 박스(box)와 삭제(erases)

텍스트를 회전시키 위하여, text rotate 명령을 참조할 것.

실시예

박스는 화면의 중심에서 연속적으로 회전된다.

define local

degree , 2

define end

*

origin zdispx/2, zdispy/2 $$ middle of the screen

mode xor

loop

. rotate degree

box -50, -50; 50,50;1 $$ plot box

delay 01

. box -50,-50; 50,50;1 $$ erase box

. c 및 degreedegree +1

endloop

시스템 변수

zrotate 회전 도수(Number of degree)

zrotatex 회전 시점의 X 좌표

zrotatey 회전 시점의 Y 좌표

스케일(SCALE)

그래픽 대상물의 비율을 정함(scales)

-----------------------------------------------------------------------------

scale [factor┃Xfactor, Yfactor[LOCATION]]

-----------------------------------------------------------------------------

설 명

연속적으로 플로트된 모든 그래픽 대상물은 설정된 인자에 의해 비율이 정해지거나 또는 분리된 x(수평)와 y(수직) 인자로서 지정될 수 있다. 예를들어, scale.5 는 모든 그래픽 대상물을 1/2 사이즈로 만들게 되는대, scale 2,3 은 x 방향으로 2배의 그래픽을 형성하는 반면, y방향으로는 3배의 그래픽을 형성한다. 스케일링은 만일 선택적인 스케일링 시점 위치가 지정되지 않았다면, origin 명령에 의해 지정되는 것으로서, 상기 플로팅 시점과 관련하여 생성된다.

스케일링 시점을 지정하는 것은 연속적으로 스케일되는 대상물일 경우에만 유효하다.

표준 디폴트는 scale 1(호출 없음)이고, initial 과 status restore; default 에 의해 각각의 메인 단위에서 세트된다. 상기 블랭킹-태그 양식은 또한 호출이 없는 상기 표준 디폴트를 세트한다. 이 디폴트는 status save; default로서 변경될 수 있다.

scale를 포함하는, 그래픽 변환 명령의 효과는 enable absolute 로서 일시 중지될 수 있고 disable absolute 로서 복원된다.

상기 표시 그래픽 변환은 다음의 명령내에 적용된다.

scale

rotate

종횡비 정정

origin

원도우 관련 좌표

원도우 클리핑(clipping)

다음의 대상물은 스케일되지 않는다.

텍스트

이미지

윈도우

문자와 라인(즉, box 10,3)를 사용하여 지정된 박스(box)와 삭제(erases)

실시예

일련의 동심(concentric) 박스를 생성함.

define local

degree , 2

define end

*

origin zdispx/2, zdispy/2

*

loop

. factor1,10

scale factor

. box -10,-10; 10,10;1

endloop

시스템 변수

zscalex 수평 스케일 인자(8-바이트 실수)

zscaley 수직 스케일 인자(8-바이트 실수)

zscaleox 스케일 시점의 X 좌표

zscaleoy 스케일 시점의 Y 좌표

화면(screen)

화면 해상도 유형을 세트 혹은 테스트함.

-----------------------------------------------------------------------------

screen [test,]type[,mode][,chrome]

screen [test,]variable, type, mode, resolution, chrome

screen native ┃ edit

type 키워드와 값:

cga 0

cga 3

vga 10

mcga 11

evga 1

mode 키워드와 값

graphics 0

text 1

resolution 키워드와 값

low 0

medium 1

high 2

alt1 3

alt2 4

alt3 5

chrome 키워드와 값:

color 0

mono 1

test: 지정된 설정이 실행되고 zreturn 의 결과로서 귀환될 경우에

만 체킹되고 실제적으로 세팅을 변경하지 않음.

ative: 설정된 표시장치 드라이버을 위해 (vga에 이르도록) 최고

성능으로 화면을 세트

edit 편집자의 설정으로 설정을 설정

variable 유형(type), 모드, 해상도 및 크로마(chrome)을 위한 키워드

대신에 숫자(numeric) 값을 사용

-----------------------------------------------------------------------------

설 명

지정된 유형, 모드, 해상도 및 크로마로 화면 하드웨어를 세트함. 화면 설정의 선택은 표시장치 드라이버, 표시장치 콘트롤러, 및 사용되는 모니터에 의해 한정된다. DOS 소프트웨어 환경을 사용하여 직접 IBM PC들의 다양한 환경상에 실행되도록 코스웨어(couseware)를 생성할 경우, 그것은 저급한 일반 표시장치 하드웨어와 호환가능한 화면 설정의 선택을 필요로함.

일반적으로, 상기 screen 명령은 +initial 제어 블록으로서 작업(lesson)의 시작시 한번 발생한다.

screen 명령이 화면 설정을 변경할 경우, 상기 화면은 삭제되고, 표시 페이지는 1로 재설정되고, 모든 플로팅 변수는 설령 다음 명령문이 실행된다 할지라도 standard로 재설정된다.

status restore; standard

status save; default

속기 표시법(Shorthand Notation)

잘알려진 대부분의 화면 설정은 모든 인수들을 입력하지 않은 상태로 선택될 수 있다. 그래픽스와 색상은 디폴트 설정이다. 상기 해상도는 표시장치 콘트롤러 유형용 표준 값에 대해 통상적으로 디폴트된다.

실시예들

실시예 1

상기 640 ×480 ×16 색상(vga,medium,graphics,color) 화면을 선택함. 만약 상기 화면이 가능하지 않다면, 분기가 사용자를 호출 시스템으로 다시 확장(exit)시키기 전에 메시지를 주게된다.

screen vga

if not(zreturn) $$ see if can`t set screen

. write warning

VGA screen Type not available

pause

. jump =exit $$ exit to router or DOS

endif

실시예 2

상기 1280 × 1024 ×256 색상 화면이 이용가능한지를 테스트함. 만약 가능하다면, 화학적 작업(chemistry lesson)의 고해상도 버전을 사용한다. 그러나, 만약 그렇치 않을 경우, 상기 작업의 저해상도 버전을 사용한다.

screen text, evga, alt2

if zreturn $$ see if ture(-1)

. jump chemhigh,start $$ use high resolution version

else

. jump chemlow,start $$ use lower resolution version

endif

화면 유형과 표시장치 드라이버

* VGA.DIS 또는 EVGA.DIS를 사용할 때, 가능한 색상의 수는 262,144이다.

** 각각의 화면을 지원하는 표시장치 드라이버는 다음의 글자로 기술된다.

C CGA.DIS

E EGA.DIS

V VGA.DIS

S EVGA.DIS

*** 대부분의 슈퍼 VGA 카드는 베사(VESA) 표준을 통해 혹은 직접 지원된다.

시스템 변수

zreturn

상기 screen 명령은 다음의 값으로 zreturn을 세트한다.

-2 ok, 화면이 변경되지 않음; 요구된 화면이 이미 유효함

-1 ok, 화면이 변경됨(screen test 양식으로 변경되지 않음)

0 표시장치 드라이버 파일을 위해 screen 이 무효함

1 표시장치 어댁터는 요구된 화면을 지원하지 않음

screen 명령이 성공적으로 실행될 경우, 시스템 변수의 수반되는 세트는 재설정시킨다. 그것들은 상기 screen test 양식을 위해 변경되지 않는다.

zscreent 선택된 화면 유형

0 cga

2 hercules

3 ega

9 att

10 vga

11 mcga

14 evga

zscreenm 화면 어드레싱 모드

0 graphics

1 text

zscreenr 화면 해상도

0 low

1 medium

2 high

3 alt1

4 alt2

S alt3

zscreenc 화면 크로마

0 color

1 mono

zscreen BIOS에 의해 보고되는 것으로서의 화면 유형

zscreenh (표시장치 하드웨어를 실제적으로 검출위해 조절되는; 즉, 만

약 EVGA.DIS 가 VGA 하드웨어를 검출하였다면, zscreenh은

10임)용도의 표시장치 드라이버 파일(.DIS 파일)

0 cga

2 Hercules

3 eag

9 att

10 vga

11 mcga

14 evga

zinaxcol 현 화면 유형을 위해 이용가능한 색상의 최대 수

zpalincr RGB 값의 최대 변경은 표시된 색상에 영향을 미치도록 요구

함(zintincr 참조)

zintincr 인텐시티 값의 최대 변경은 표시된 색상에 영향을 미치도록

요구함(zpalincr 참조)

zmaxpage 이용 가능한 페이지의 최대 수

시드(seed)

랜덤 수(number) 시드를 세트하거나 혹은 획득함.

-----------------------------------------------------------------------------

seed variable4[;set]

-----------------------------------------------------------------------------

설 명

랜덤된 수의 계산으로 사용함. 매 시간 새로운 랜덤 수를 생성하고, 시스템은 새로운 값으로 상기 시드를 세트함. 상기 랜덤 수 시드는 상기 perm 명령과 randi 와 randf 함수에 의해 사용된다.

상기 현재 시드는 상기 seed 명령에 대한 단일 인수로서 4 바이트 정수 변수를 사용함에 의해 획득된다. 상기 시드는 4 바이트 정수 값(0에서 4,924,967,295)을 지정하고 set 키워드를 사용함에 따라 세트된다. 상기 시스템은 시작시 zclock의 임의의 값으로 상기 시드를 초기화한다.

상기 seed 명령은 반복 가능한 랜덤 수 시퀀스을 위해 통상적으로 사용되는대: 동일한 랜덤 수 시퀀스는 인니셜(initial) 시드를 저장하고 그것을 후에 복원함에 따라 다시 생성될 수 있다. 예를들어, 만약 두 개의 순열 목록이 상기 동일한 시드 값으로부터 시작되도록 생성된다면, 상기 목록은 동일하게 될 것이다.

실시예

100 랜덤 도트(dots)의 스캐터 그래프(scatter-graph)는 첫 번째로 배치한 다음 퍼즈(pause)후에 삭제된다. 상기 시드는 상기 첫 번째 랜덤 도트의 생성전에 저장된 다음 동일한 도트의 두 번째 "erase"생성전에 복원된다.

define local

save,4,integer

index,2

define end

...

seed save $$ save the seed

loop index1,100

. dot index, randi(100)

endloop

pause

mode erase

seed save; set $$ restore the saved seed

loop index1, 100

세트(set)

일련 변수로 일련의 값을 할당함.

-----------------------------------------------------------------------------

set variablevalue 1, value2,...

variable starting variable for assignments

-----------------------------------------------------------------------------

설 명

일련 메모리 위치에 목록 값을 할당하고 지정된 위치에서 시작한다. 할당 어로우의 오른쪽으로 첫 번째 값을 변수(variable)로 할당한다. 그후, 동일한 사이즈의 일련 메모리 위치와 변수로서 타이프(type)를 수반되는 변수들이 어떻게 정의될 것인지에 관계없이 태그내의 잔존하는 값을 할당한다. set내에서 설정된 변수들은 종종 어레이의 제1 요소이나, 그것들은 calc로서 무효한 임의의 변수일 수도 있다. set의 상기 태그는 일련 라인들의 태그 필드내에서 연속될 수 있다.

널 "값"은 할당을 스킵하도록 사용될 수 있다.

실시예

어레이로 일련의 값을 할당함. 어레이(3)는 할당되지 않고 그의 최초 값을 그대로 유지하는 것을 노트(note)함.

define local

array(4), 2

define end

set array(1)15, 96, , score*100

or

set array(1)15, $$ continued across multiple lines

96, ,

score*100

상기한 set 명령은 다음 calc 명령에 대해 등가이다.

calc array(1)15

calc array(2)96

calc array(4)score*100

셋비트(setbit)

변수로 비트를 세트함.

-----------------------------------------------------------------------------

setbit variable,bit,value

variable variable containing the bit to set

bit bit number to set

value value for bit(0 or 1)

-----------------------------------------------------------------------------

설 명

변수로 단일 비트를 세트함. 이 명령에 따라, 단일 변수는 다수의 1-비트 플래그가 사용될 수 있고, 변수 공간을 추가로 효과적인 용도로 제공한다.

비트 1은 최좌측 비트(최상위)이다. 비트 수는 변수 경계을 교차하도록 지정될 수 있다. 만약 상기 값이 0 혹은 1 이외의 비트로 세트될 경우, 상기 값의 최우측 비트가 사용된다.

상기 산술 함수 bit(value, bit)는 bitcnt(value, bits)이 변수로 세트된 비트의 계수가 실행되는 동안에, "read" 세트 비트로서 사용된다.

실시예

4 바이트 변수 correct내의 1 비트 플래그는 학생들에게 주어진 25가지의 질문을 위한 판별(judgement)의 트랙을 유지하도록 사용된다. index는 현재 질문수를 포함한다. 상기 질문은 상기 어레이 prob()내에 위치하고, 답변은 상기 어레이 answ()내에 위치한다. 상기 시험이 종료된 후에, 상기 bitcnt 함수는 정정된 답변의 수를 보여주기 위해 사용된다.

* loop through all 25 questions, show the question, get the

* answer, and set the flag appropriately

loop index1, 25

. at 5:3

. showa prob(index) $$ display the question

. arrow 20:3

. answer ≪showa, ㅁ(index)≫

. setbit correct, index, 1 $$ ok

. no

. . setbit correct, index, 0 $$ wrong

. . judge quit $$ exit the arrow

. endarrow

. erase $$ clear screen for next question

endloop

*

at 25:3

white The number correct is ≪s, bitcnt(correct,25)≫ .

setc

목록의 값으로 변수들을 선택적으로 세트함.

-----------------------------------------------------------------------------

setc SELECTOR; variablevalue/s; value/s;...

variable starting variable to assign list of value

-----------------------------------------------------------------------------

설 명

set의 선택적인 양식. 상기 셀렉터의 값을 근거로 하여, setc는 태그내의 목록의 값들중 어느 하나를 선택하고, 일련의 변수에 대한 값으로 그 값들을 할당한다.

각 목록의 값들은 세미호출론(;)으로 분리되어야만 한다. 목록내의 값들은 콤마(,)로서 분리되어야만 한다. 널 값은 할당을 스킵하기 위해 사용된다. setc의 태그는 수반되는 라인의 태그 필드내에서 연속될 수 있다.

스타팅 변수는 어레이를 필요로 하지 않는대; 변수 스페이스의 일련의 다음 바이트들은 길이와 최초 변수의 유형을 기초로 할당된다.

실시예

flag를 기초로하는 어레이로 일련의 값들을 선택적으로 할당함.

define local

array(10), 4

flag, 1

define end

*

setc flag, array(1)1,2,3,4;

4,3,2,1;;1,2,,8

상기 setc 명령은 다음의 명령과 등가이다.

if flag < 0

. calc array(1)

. calc array(2) 2

. calc array(3) 3

. calc array(4) 4

elseif flag = 0

. calc array(1) 4

. calc array(2)3

. calc array(3)2

. calc array(4)1

elseif flag = 1 $$ skipped selection

elsief flag ≥ 2

. calc array(1)1

. calc array(2)2

. calc array(4)8

endif

어레이(3)가 스킵되고, 최종 목록 할당이 통지됨.

show

변수 혹은 숫자(numeric) 식(expression)을 표시함.

-----------------------------------------------------------------------------

show expression [ , field[ ,right]]

write ≪show | s, expression[ ,field[ ,right]]≫

field 임의의 십진 포인트를 구비하여, 표시하기 위한 최대 디지트수

right 십진 포인트의 우측으로 표시하기 위한 디지트 수

-----------------------------------------------------------------------------

설 명

숫자적인 변수 혹은 식의 값을 표시함. 옵션으로 선택하는 (optional) 태그는 숫자적인 표시의 포맷을 제어한다. 상기 값은 필드내 좌측 정판(justified)으로 표시되고, 상기 화면 위치는 (유도되는(leading) 블랭크 혹은 긴(trailing) 0 없이) 표시된 최종 문자의 다음의 문자 위치로 갱신된다.

상기 십진 포인트의 좌측에 대한 디지트 수는 right-1의 값을 마이너스(minus)한 field의 값이다.

show는 다음의 에러 조건을 지시하기 위해 특정한 심볼을 표시한다.

****** 표시하려는 숫자가 지정된 필드내에 적절치 않음

?????? 숫자가 유효하지 않음. 이것은 통상적으로 비합법적인 플로팅 포인트

동작의 결과이다.

만약 옵션으로 선택하는 태그가 생략된다면, 다음의 디폴트값이 사용된다.

실시예들

실시예 1

10 퀴즈(quiz) 스코어를 표시함.

at 3:5

write Here are your last 10 quiz scores:

loop index1, 10

. at index+5 : 10

. show quizscor(index)

endloop

실시예 2

write 명령문내의 내장 show 명령을 통하여, 페이지 면수(pagination) 타이틀은 표시장치의 상부에 놓는다.

1

*

at 1:65

write page ≪show, page≫ of 50.

showa

변수로 저장된 텍스트를 표시함.

-----------------------------------------------------------------------------

showa buffer[,length]

write ≪showa | a, buffer[length]≫

-----------------------------------------------------------------------------

설 명

length 문자를 위한 문자 숫자식 문자로서 변수 버퍼의 콘텐츠를 표시함. 만약 length 가 생략되었다면, 버퍼의 정의된 길이가 사용된다. 비 숫자적인 정보가 포함되었을 지라도 임의의 숫자 변수의 콘텐츠를 보여줄 수 있다.

showa 후에, 현 화면 위치는 표시된 최종 문자 다음의 문자 위치로 갱신된다. 표시된 텍스트내의 이스케이프(escape) 코드 시퀀스의 결과로부터 생성된 변수를 플로팅하기위한 임의의 변경은 상기 showa후에도 유효하도록 된다.

실시예들

실시예 1

사용자 네임은 stuname내에 저장하고 showa를 사용하여 표시한다.

define local

stuname, 20 $$ user name

define end

*

at 3:3

write Please enter your name.

long 20

arrow 4:3

storea stuname, zcount

ok

endarrow

at 8:3

write thank you, $$$ keep the trailing space

showa stuname, zcount

write . $$ put the period on the end

실시예 2

현재의 작업(lesson)과 좌측 상부 콤머내의 단위의 이름을 표시함.

at 1:1

write ≪ a, zlesson ≫:≪ a, zunit ≫

showh

16진법으로 데이터를 표시함.

길이(length) 디지트를 위한 16진수 양식으로 데이터를 표시함. 만약 길이가 생략된다면, 디지트는 변수의 전체 정의된 길이를 표시하기 위해 충분할 만큼 사용된다. 변수의 각 바이트는 2개의 16진수 디지트로서 보여주게 된다. 임의의 길이 변수는 표시될 수 있다.

showh 후에, 현 화면 위치는 표시된 최종 문자 다음의 문자 위치로 갱신된다.

실시예

실수 변수의 정확한 16진수 콘텐츠를 표시함.

define local

float, 8, real $$ a real variable

define end

*

calc floatπ $$ the value of pi

at 5:3

write πlooks like this in "hex"

at 6:3

showh float

showt

도표 포맷으로 숫자 변수 혹은 식을 표시함.

-----------------------------------------------------------------------------

showt 변수[, field[ ,right]]

write 《showt |t, 변수[,field[,right]]》

field 판독 스페이스, 디지트 및 임의의 십진 포인트를 구비하는 표시필

드의 전체 사이즈

right 십진 포인트의 우측에 위치한 디지트의 수

-----------------------------------------------------------------------------

설 명

원하는 필드를 채우기 위해 필요한 것으로서 리딩 스페이스와 0 열들을 삽입함에 의해 도표 우측 정렬 포맷(tabular right-justified format)내의 숫자 변수나 식의 값을 표시함.

상기 showt 후에, 현 화면 위치는 표시된 최종 문자 다음의 문자 위치로 갱신된다.

Default Values

만약 옵션으로 선택하는 태그가 생략되었다면, 다음의 디폴트 값을 사용함.

showt는 다음의 에러 조건을 지시하는 특정한 심볼을 표시함.

****** 표시하려는 숫자가 지정된 필드 내에 적절치 않음

?????? 숫자가 유효하지 않음. 이것은 통상적으로 비합법적인 플로팅 포인트

동작의 결과이다.

실시예

테이블내의 일부 엔트리를 표시함.

define local

rate(4), 8, real $$ pay rates end

define end

*

calc rate(1)4.05

rate(2)12.76

rate(3)8.63

rate(4)5.25

at 5:3

write your payroll situation now looks like this:

at 7:3

write EMPLOYEE HOURLY RATE YEARLY SALARY

at

8:30

write Anderson

Carmen

Engdahl

Lillith

at 8:18

write 《t, rate(1),5,2》

《t, rate(2),5,2》

《t, rate(3),5,2》

《t, rate(4),5,2》

at 8:31

write &《t, rate(1),*2080,8,2》

&《t, rate(2),*2080,8,2》

&《t, rate(3),*2080,8,2》

&《t, rate(4),*2080,8,2》

showv

널 코드를 구비한 텍스트 버퍼를 표시함.

-----------------------------------------------------------------------

showv buffer[,length]

write 《showv |v, buffer[,length]》

-----------------------------------------------------------------------

설 명

만약 버퍼의 내용이 화면 상에 실제로 플로팅되면, 스페이스 코드로 변환된 임의의 널 코드(16진수 값 h00)를 포함하여 버퍼의 내용을 문자 숫자식으로 표시한다. showv 와는 달리, 상기 showa 명령은 널 문자를 무시한다.

showv 는 pack 과 put 의 태그내에 내장된 형식으로 우선적으로 사용된다. showv 는 널 문자가 임의의 다른 문자처럼 취급되도록 하며, 그것을 무시하거나 스페이스로 변환하지는 않는다.

showv 후에, 현 화면 위치는 표시된 최종 문자 다음의 문자 위치로 갱신된다.

실시예

상기 showa 는 상기 showv 가 "AB C"를 플로팅하는 동안 "ABC"를 플로팅한다.

define local

var,4

define end

*

calc varh41 42 00 43 $$ A B null c

at 10:10

showa var $$ ABC

at 11:10

showv var $$ ABC

status

표시 상태 정보를 저장 및 복원함.

-----------------------------------------------------------------------------

status 키워드

save 메모리 블록내의 현 표시 설정을 저장함

restore 메모리 블록으로부터 표시 설정을 복원함

delete 명명된 상태 메모리 블록을 삭제함

reset 모든 상태 메모리 블록을 삭제함

-----------------------------------------------------------------------------

설 명

메모리 풀 블록 혹은 디폴트 버퍼 내에서(전경(foreground) 및 소거 색상, 모드, 폰트와 같은) 현 플로팅 파라미터의 상태를 저장함. 저장된 상태는 모든 플로팅 파라미터가 후에 그의 이전 상태로 귀환되도록 복원시킬 수 있다. status 는 서브루틴 호출을 통하여 플로팅 파라미터를 유지하거나 혹은 디폴트를 재설정함에 의해 작업의 모든 메인 단위의 통상적인 감시를 실행시킬 수 있다. 복원 옵션은 시스템 standard 설정의 복원 혹은 단위 내의 이전 arrow에서의 설정을 허가한다.

status는 다음 아이템을 저장 및 복원함:

⊙ 현 화면 위치

⊙ (좌, 우 양측) 마진(margins)

⊙ 현재 및 표준 폰트를 구비한 모든 부하 폰트

⊙ (만약 요구한다면) 파레트

다음 명령의 설정은 또한 status에 의해 저장 및 복원된다. 이것은 [standard 옵션(혹은 initial 명령을 갖도록)];상기 status restore 를 갖는 블록으로서 세트될 수 있는 그의 시스템 standard 설정을 보여준다.

⊙ blink off

⊙ color white

⊙ colore black

⊙ colorg black

⊙ disable cursor

⊙ enable font

⊙ font standard; standard

⊙ mode write

⊙ origin 0,0

⊙ rotate 0

⊙ scale 1,1

⊙ text align; baseline

bold; off

delay; 0

direction; right

increment; 0,0

italic, off

margin; wrap

narrow; off

reveal: off

rotate; 0

shadow; off,white

size; 1

spacing; fixed

underline; off, foregnd

⊙ thick off

status save; `NAME` |local[;palette]

status save; default[; palette]

메모리 풀 블록 혹은 디폴트 버퍼내의 현 플로팅 상태를 저장함. 상기 이름은 텍스트 글자이거나 혹은 변수 내에 포함된 것 중의 하나가 될 수 있다. 명명된 블록들은 후에 임의의 단위 내에서 복원될 수 있다. 상기 palette 수정자는 현 파레트 설정을 다시 저장되도록 한다.

상기 local 키워드는 지정된 메모리 풀 블록내의 상태를 현 단위에 저장한다. 로컬 블록은 그것이 저장된 단위일 경우에만 저장하고; 단위의 실행이 종료될 때 자동적으로 삭제한다. 상기 상태를 default 버퍼로 저장하는 것은 모든 새로운 메인 단위를 위한 디폴트를 jump 분기에 의해 입력되게 한다.

메모리 풀은 다음의 명령들 즉, memory, image, window, status, area, flow, font 와 perm 에 의해 사용된다. 메모리 블록은 작성(creation)에서 지정된 명령에 속하는 것으로서 태그되고, 메모리 풀을 사용하여 다른 명령에 의해 엑세스될 수 없는데; 다른 명령들은 충돌 없이도 메모리 블록을 위한 동일한 이름으로 사용할 수 있다.

실시예 1

플로팅 파라미터는 +initial 제어 블록 내에서 초기화된 다음 디폴트 상태 버퍼 내에서 저장된다. 이들 설정은 jump 분기에 의해 도달된 모든 수반되는 메인 단위를 위한 디폴트가 된다. 상기 erase 명령은 본 작업내의 제1 분기를 위한 것초차 화면을 청색 배경이 되도록 사용한다.

* in control block +initial

initial

color yellow

colore blue

size 2

font geneva

status save; default

erase

실시예 2

status 1 이름으로 메모리 풀 내에 현 플로팅 파라미터와 파레트를 저장함.

status save; `status`; palette

status restore; `NAME` |local[; delete]

status restore; default | arrow

status restore; standard

이전에 저장된 세트로서 현재 플로팅 상태를 교체함. 만약 상기 파레트가 최초로 저장되었다면, 그것은 복원된다. 선택적으로, 명명된 혹은 local 블록은 상기 delete 수정자를 사용함에 따라 메모리 풀로부터 삭제될 수 있다.

상기 arrow 옵션은 최종 arrow 명령이 조우될 때 유효한 상태를 복원한다. 상기 파레트는 복원되지 않는다.

상기 standard 옵션은 시스템 표준 플로팅 상태를 복원하고 파레트를 구비한다. 표준 파레트를 복원하기 위하여 palette init을 사용함.

실시예 1

(status save; default statement에 의해 최종 저장된) 상기 디폴트 플로팅 파라미터를 복원함.

status restore; default

실시예 2

라이브러리 호출을 통해 플로팅 과 파레트 설정을 저장 및 복원함. 상기 라이브러리 루틴은 상기 호출 프로그램의 귀환에 영향을 미침이 없이 원하는 바와 같이 표시 설정을 변경할 수 있다. 다른 방법으로, 상기 status save 와 restore 는 더 용이하게 사용된 툴(tool)을 제공하기 위하여 라이브러리 루틴에 내장될 수 있다.

status save; local; palette

library routines,graph

status restore; local

실시예 3

이름이 변수 mystat내에 포함되는 설정을 복원함. 메모리 블록은 그 후 삭제된다.

status restore; mystat; delete

status delete; `NAME` |local

메모리 풀로부터 저장된 블록을 삭제함.

실시예

status delete; `pape1`

status reset

메모리 풀로부터 모든 명명된 상태 블록을 삭제함. 상기 default, local, arrow 와 standard 버퍼는 영향을 미치지 않는다.

시스템 변수

zreturn

-1 성공적인 동작

6 사본 이름

10 이름이 존재하지 않음(이전 상태가 저장되지 않음)

16 무효한 이름

18 메모리 풀 내의 불충분한 메모리

text

텍스트 속성을 제어함.

-----------------------------------------------------------------------------

text 키워드

size 크기에 따라 분류된 폰트를 선택함 2

bold 윤곽이 두드러지는 폰트를 선택함 3

italic 이태리체 폰트를 선택함 4

narrow 네로우(narrow) 폰트를 선택함 4

spacing 문자 공간을 제어함 4

shadow 드롭(drop) 음영을 제어함 5

underline 밑줄침을 제어함 6

delay 문자 사이의 지연시간을 세트함 7

increment 문자간 임시 공백을 가산함 7

rotate 텍스트 베이스라인을 회전시킴 7

direction 베이스라인과 관련된 플로팅 방향을 제어함 8

margin 마진으로 텍스트 순환을 제어함 9

align 폰트간의 정렬을 제어함 10

reveal 12

measure 텍스트 범위 측정을 초기화함 12

info 텍스트 순환 정보로 귀환 13

-----------------------------------------------------------------------------

설 명

화면 상에 텍스트를 표시하는 방법을 변경함. 텍스트 속성은 initial, screen 혹은 status restore 즉, standard 명령에 의해 시스템 디폴트로 초기화한다. 특정한 작업을 위해 텍스트 속성을 선택한 후에, 상기 수정된 설정은 저장되고 후에 상기 status 명령에 의해 복원된다. 만약 수정된 설정이 (말하자면, 상기 +initial 제어 블록의 프로그래밍에 의해) default 상태 버퍼 내에 저장된다면, 그것들은 jump에 의해 분기되는 임의의 단위를 위한 스타팅 속성이 될 것이다.

원시 편집기 내의 텍스트 라인 상에 기록하는 동안, 텍스트 속성의 대부분은 노출된 확장 코드 혹은 내장된 명령 구문(syntax)을 사용하므로 텍스트 문자열 내에서 직접 조작할 수 있다. 다음은 확장 코드들이다;

COLORS Escape Code

black/black+(gray) a/A

blue/ blue+ u/U

green/ green+ g/G

cyan/ cyan+ c/C

red/ red+ r/R

magenta/magenta+ m/M

brown/brown+(yellow) b/B

white/ white+ w/W

PLOTTING MODES Escape Code

erase -

inverse !

noplot _

rewrite =

write +

xor *

FONTS Escape Code

font number 1-9 f1 - 9

font number 10-35 fa - z

font standard/ text start f@/ &

FONT CONTROL Escape Code

bold on/off Fb/ B

italics on/off Fi/ I

shadow on/off Fs/ S

shadow color F/ color

underline on/off Fu/U

underline color F_color

FUNCTIONS Escape Code

size 1-9 1 - 9

spacing variable/ fixed v/V

narrow on/off n/N

status default/ text start @/&

erase color d color

magin wrap/ release >/<

magin advance/ set left CR/1

CHARACTER FUNCTIONS Escape Code

non-breaking space #

non-breaking hyphen h

new line \

continued write │

상기 size, bold, italic 과 narrow 속성들은 개별 폰트내에서 그 유효한 시작이 종합적으로 처리되거나 혹은 폰트 그룹으로부터 최적의 폰트가 매치되도록 선택되어 진다. 폰트가 속성 셋팅을 최적으로 매치시키도록 폰트 그룹으로부터 어떻게 선택되어지는 지의 추가 정보를 위해 폰트 명령과 시스템 변수 zfontf 와 zfontret를 참조한다.

text size; size

사이즈 속성을 제어할 경우 상기 디폴트는 size 1 이다.

폰트에 있어서, 기본 사이즈 문자가 4배로 확대되려면 수평 및 수직 크기 양측 모두가 조정되어야 한다. 폰트 그룹중에서, 상기 시스템은 최대 크기가 9에 이르도록 그룹내에서 적절한 크기의 폰트를 선택하기 위해 시도한다. 만약 상기 사이즈가 그룹내에서 폰트로서 존재하지 않을 경우, 확대되는 사이즈가 1로 디폴트되는 동안, 4에 이르는 사이즈로 조정되게 된다.

실시예 1

만약 폰트가 사용된다면, 기본 폰트로부터 2배가 된 문자는 조정되게 된다. 만약 폰트 그룹으로서 사용된다면, 그룹내에서 적절한 사이즈 2 폰트가 사용되게 된다. 만약 어느 것도 존재하지 않는다면, 그것은 기본 사이즈 1 폰트로부터 조정되게 된다.

text size; 2

실시예 2

사이즈는 ≪and≫ 내장된 심볼의 사용으로 텍스트의 라인내에 내장시킬 수 있는 텍스트 속성중의 하나이다. 상기 내장시키는 방법은 텍스트가 소스 에디터내에서 감시하기 위해 변경할 필요가 없고 코딩의 최적 인쇄출력을 실행시킬 수 있다는 점에서 확장 코드를 통한 장점을 가지고 있다.

write ≪size,1≫start out small, ≪size,2≫end up big.

text size;sizeX,sizeY

최대 사이즈 값이 4에 이르도록 독립적으로 수평 및 수직으로 문자의 크기를 확대함. 동일하지 않은 X 와 Y 값에 있어서, 상기 문자는 항상 조정되게 된다. 동일한 X 와 Y 값에 있어서, 문자는 액티브 폰트 그룹의 매치되는 폰트로부터 선택되어 지거나 혹은 조정되게 된다.

실시예

X의 4-by-4 매트릭스는 2개의 인수 양식의 size를 위해 조정될 수 있으므로 문자 사이즈가 16으로 확대되는 것을 보여주도록 표현한다. 글자는 폰트로 되고 그룹 폰트로 되지 않는대, 다른 방법으로는 4배의 size X = size Y 엔트리가 다른 조정된 사이즈의 스타일로 매치되지 않는 그룹 폰트를 매치 및 사용하도록 하게 한다.

font `letters`

loop sizeX1,4

. loop sizeY1,4

. . at 4*sizeX+1; 4*sizeY+1

. . text size; sizeX,sizeY

. . write X

. endloop

endloop

text bold; on |off |CONDITION

볼드체 속성을 제어함; 디폴트는 off

실시예 1

폰트 빅(big)은 수평으로 복사된 각각의 픽셀(pixel)을 가짐에 의해 볼드체로 된다.

font big` $$ a font block

text bold; on

write This text is synthesized bold

실시예 2

상기 +initial 제어 블록에 있어서, 상기 initial 명령은 시스템 표준에 대한 폰트를 포함하는 모든 플로팅 파라미터를 세트한다. 여러 텍스트 속성은 후에 변경되고 default 스테이터스 버퍼내에 저장된다. 임의의 jump 브랜치는 이들 텍스트 속성 셋팅으로 즉시 리세트된다. 상기 시스템 표준 폰트가 폰트 그룹이기 때문에, 상기 bold 속성은 이러한 그룹으로부터 볼드체 폰트를 선택한다.

* in +initial block

initial

text bold; on

text spacing; variable

...

status save; default

text italic; on |off |CONDITION

이태리체 속성을 제어함; 디폴트는 off 이다.

실시예

단속적으로 이탤릭체를 사용하기 위한 확장 코드는 단어 amorous 주변에 삽입되어 진다. 소스 에디터에 있어서, 이들은 [CTRL][A][|]과 [CTRL][A][SHIFT][|]를 누름에 따라 입력시킬 수 있다. 상기 이탤리체는 현재의 폰트로부터 조정되거나 혹은 폰트 그룹이 액티브되어 있을 경우 그룹내에서 직접 적절한 이탤리체를 조정할 수 있다.

write The word amorous is derived from Latin.

text narrow; on |off |CONDITION

폰트 그룹으로부터 네로우(narrow) 폰트 사용을 제어함; 상기 디폴트는 off임. 상기 narrow 속성은 스크린상에서 최대량의 텍스트를 표현하기 위하여 CGA와 같은 저해상도 스크린을 위한 용도로 사용된다. 네로우 폰트는 TenCORE의 이전 버전과 호환가능하도록 하기 위하여 시스템 표준 폰트 그룹내에서 지원된다. narrow는 조절될 수 없다.

text spacing;fixed |variable |spacing

문자 공간(spacing)을 제어함; 디폴트는 fixed 이다.

fixed 공간에 있어서, 각 문자는 폰트용 최대 문자 폭으로서 정의된 동일한 수평 공간을 점유하게된다. 이렇게 하는 것은 종종 테이블 수를 정렬시키는 대 사용되거나 혹은 강조시키는 대 사용될 수 있다.

variable 공간에 있어서, 각 문자는 필요한 수평 공간만을 점유하게 된다. 예를들어, 소문자 인쇄(lower case) i 는 대문자 인쇄 M 보다 수평 공간을 더 적게 점유하게 된다. 다량의 라인당 문자가 fixed 보다는 variable 공간처리에 의해 플로팅될 수 있다. 이러한 작업은 variable 공간처리가 처리 속도(leading speed)를 향상시키게 된다는 점을 보여주는 것이다.

변수 태그 양식은 -1=variable, 0=fixed 의 값으로 사용된다.

실시예 1

표준 폰트를 사용할 경우, 변수 공간처리에 의한 텍스트의 제2 라인은 고정 공간처리에 의한 제2 라인에서보다 스크린상에서 공간이 더 적게 차지한다.

at 10:1

text spacing; fixed

write This text runs to hear.

at 11:1

text spacing; variable.

write This text runs to here plus.

실시예 2

변수 공간처리는 레이블(rabel)을 실행시킬 수 있지만, 고정 공간처리는 번호들을 라인 상부에 위치시키는 문제를 해결한다.

at 6:10

text spacing; variable

write pork

Beef

chicken

at 6:20

text spacing; fixed

write 365

4

1512

text shadow; on |off |CONDITION[,COLOR]

문자 드롭 섀도우잉(drop shadowing)을 제어함; 디폴트는 off 임. 상기 섀도우 칼라는 white 로 디폴트된다.

상기 섀도우 효과는 각 문자를 두 번 표시함에 의해 실행되는 대: 제1 플로팅은 제2 플로팅이 포어그라운드내에 위치하는 동안 섀도우 칼라내에서 오프셋된다. 상기 폰트를 위한 드롭 섀도우 오프셋은 폰트 에티터내에서 세트된다. 만약 섀도우 칼라가 지정되어 있지 않다며너, 최종 지정된 칼라가 사용된다. 디폴트 섀도우 칼라는 initial 명령후에 white로 된다.

실시예

colore blue

erase

color white+

text shadow; on,red+

text size; 2

at 10:10

write An American statement

text underline;on |off |CONDITION[,COLOR |foreground]

문자 언더라인닝(underlining)을 제어함; 디폴트는 off임. 언더라인되는 칼라는 문자를 플로팅하기 위해 사용된 것으로서 현재 포어그라운드(키워드 foregnd)로 디폴트된다.

상기 언더라인의 로우케이션과 디센더(decender) 갭의 크기를 폰트 에디터내에서 폰트를 위해 지정된다. 만약 언더라인 칼라가 지정되어 있지 않다면, 최종 지정된 언더라인 칼라가 사용된다. 상기 디폴트 언더라인 칼라는 initial 명령후에 foregnd로 된다.

실시예

포어그라운드 칼라로서 제1 문장을 언더라인하고 제2문장을 청색(blue)으로 언더라인 시킨다. 텍스트내의 확장 코드를 사용하여 언더라인된 부분에 써넣기위한 또다른 방법이다.

text underline; on,foregnd

write This text is underlined in the same color as the text

text underline; on, blue

write This text is underlined in blue

text delay; seconds[;break]

각 문자를 플로팅시킨 후에 바로 지정된 시간을 지연시키는대; 디폴트는 0이다. 옵션널 break 수정자의 출현은 길게 지연된 텍스트 명령문이 실행중일 때 임의의 브레이크 수정자 플로우 사건이 신속히 점유하게 하는대; 이러한 지연은 플로우 브랜치가 점유할 수 있도록 명령을 신속히 종료시키게 하여 출력의 나머지 부분을 일시 중지시킨다.

실시예

메시지가 스크상에 천천히(각 문자간 1/4 초 지연) 표시됨.

text delay; 0.25

text size;2

color red+

write WARNING!

text increment; x,y

문자를 플로팅시킨후에 추가적으로 공간처리 오프셋을 부가하게 되는대; 디폴트는 0,0이다.

문자를 플로팅시킨 후에, x 오프셋이 수평 로우케이션에 부가되고, y 오프셋이 수직 로우케이션에 부가된다. 부정(negative) 오프셋 값이 사용될 수 있다.

실시예

각각의 연속되는 문자가 우측으로 2 픽셀 플로팅되게 하고 그것의 기본 위치보다 3 픽셀 낮게 플로팅시킨다.

text increment; 2, -3

write Descending text!

text rotate; degrees

문자 플로팅 기본 라인을 단어 TEMPERATURE 가 그래프의 수직축에 레이블될 수 있도록 시계 반대 방향으로 90도 회전시킴.

at 250,200

text rotate; 90

write TEMPERATURE

실시예 2

알파벳의 4 카피(copies)는 스크린의 중심 둘레로 회전되게 표현된다.

loop angle0, 270, 90

. at zxmax/2, zymax/2

. text rotate; angle

. write ABCDEFGHIJKLMNOPQRSTUVWXYZ

endloop

text direction; right |left |up |down |direction

텍스트가 문자 플로팅 기준라인에 비례하여 표시되도록 방향을 제어함; 디폴트는 right 임.

문자 그리드는 만일 이전 text rotate 명령문에 의해 실행되지 않는다면 회전되지 않는다. 문자가 표시될 방향은 키워드(혹은 변수값)에 의해서 지정된다.

right (0) 좌측에서 우측으로

left (180) 우측에서 좌측으로

up (90) 하부에서 상부로

down (270) 상부에서 하부로

left로 세트된 방향에 따라, 아라빅(arabic)과 헤브류(hebrew)와 같은 다양한 좌측으로 기운 플로팅 언어들은 적합한 폰트를 사용할 시 표시시킬 수 있다.

실시예

text direction; left

text delay; .1

write drawtfel gniog

going leftward 구가 그의 우측 끝에서 시작되는 스크린상에 천천히 표시되게 한다.

text margin; advance |release | wrap |wordwrap |margin

우측 마진 혹은 스크린의 모서리 혹은 원도우의 범위를 넘는 텍스트의 진행 동작을 제어함; 상기 디폴트는 다음 라인으로 플로팅되는 advance 문자이다.

상기 advance 옵션은 텍스트 라인을 표시하기 위한 디폴트이다. 이렇게 하는 것은 임의의 문자부분이 우측 마진 혹은 윈도우나 스크린의 모서리의 범위를 넘어 플롯되는 지를 미리 체킹하고, 만약 그렇다면, 문자를 다음 라인상에 좌측 마진으로 진행시킨다.

상기 wordwrap 옵션은 임의의 단어부분이 우측 마진 혹은 스크린이나 원도우의 모서리를 넘어 플롯되는 지를 미리 체크하고, 만약 그렇다면, "wordwraps"의 전체 단어가 다음 라인의 좌측 마진으로 진행된다. 이러한 모드는 통상 워드 프로세싱을 위해서 사용되고, 표시장치 에디터에서 write 개체(object)가 편집되는 동안 접근할 수 있다. 고정 공간(hard-space)과 고정 하이픈(hard hyphen)과 같은 여러 특정 문자들은 워드랩 모드의 용도로 존재한다.

상기 wrap 옵션은 문자와 그의 부분이 스크린의 반대편의 둘레로 겹춰(wrap)지도록 윈도우 혹은 스크린의 모서리를 넘어 연장되고 연속적으로 플로팅되는대; at 에 의해 세트된 임의의 마진은 무시된다. 상기 랩은 문자의 일부분이 스크린 혹은 원도우 양측상에 나타날 수 있도록 문자를 처리한다. 빌보드 효과는 스크린 주변에 겹치는 텍스트가 활성되도록 할 수 있다.

상기 release 옵션은 문자가 윈도우 혹은 스크린의 외측에서 시작 혹은 연속되도록 플로팅시키게 되는대; at에 의해 세트된 임의의 마진은 무시된다. 진행은 실행되지 않는다. 만약 표준 클리핑이 유효하다면, 윈도우내에서 존재하는 문자와 그 일부분만 출현되게 된다.

변수 태그 양식은 -1=advance, 0=wrap, 1=release, 2=wordwrap의 값을 사용한다.

실시예 1

텍스트의 본 단락은 다음의 코드에 의해 wordwrap 모드내에서 플로팅될 경우 처럼 실행된다.

screen vga

text margin; wordwrap

at 0,464;204, 0

write This paragraph of text looks just like this when plotted in wordwrap mode by the following code.

실시예 2

하기 코드는 설령 빌보드상일지라도 좌측에서 우측으로 스크린의 주변에 순환되도록 텍스트 Welcome to Aviation Basics 를 실행시킨다. 상기 cales 명령문은 우측 모서리를 테스트하고, 1 을 변수 x를 설정하거나 혹은 0로 리세트시킨다. 다음의 at 명령문은 후에 loop의 각 반복동작으로 스크린 주변에서 테스트의 시작점을 진행시키게 한다.

상기 write 명령문내의 테스트는 rewrite 모드가 이전 반복루프로부터 언더라인된 "W"의 시작부분을 제거하는 공간을 갖도록 시작된다. 만약 실시예가 좌측으로 이동하도록 변경된다면, 테스트는 종료위치에서 긴열(trailing)의 공간을 갖게된다.

zero x

text margin;wrap $$ turn on screen wrap-around

text size; 2

mode rewrite $$ replace screen underneath

flow jump; %other; start; break $$ provide exit on any key

loop

. calcs x = zxmax; x0; x+1

. at x, zymax/2 $$ half-way up screen

. write welcome to AVIATION BASICS $$ note first space

endloop

text align; baseline | bottom | align

상기 align 옵션은 문자가 서로에 대해 상이한 크기나 폰트로 어떻게 플롯되는지를 제어한다. 이렇게 하는 것은 기본라인 혹은 문자 셀의 하부중 어느 하나에서 라이닝(lining)함에 따라 실행된다. 상기 기본 라인은 디센더 없이 통상 글자의 하부 점을 말하며, 각 폰트를 위한 폰트 에디터내에 세트된다.

baseline 얼라인먼트가 유효할 경우, 문자들은 그 기본라인을 따라 정렬된다. 폰의 상이한 크기와 스타일은 동일한 라인상에 표현될 수 있다.

bottom 얼라인먼트가 유효할 경우, 문자들은 그 문자 셀의 하부를 따라 정렬된다. 문자들의 다양한 크기와 스타일은 그들의 하부를 따라 상향되어 라이닝되는대, 그것들은 문자의 크기로서 조정되는 디센더 파트의 필요 때문에 공통라인상에 표현되지 않는다.

baseline 정렬이 유효할 경우, standard 폰트내의 기본라인은 스크린상의 모든 다른 폰트로부터 문자의 배치를 결정하기 위해 사용된다. standard 크기가 1인 폰트에 있어서, 상기 기본라인은 문자 셀의 하부 위로 zcharb를 위치시킨다. 현재 선택된 폰트와 사이즈를 확대하기 위하여, 상기 기본 라인은 상기 셀의 하부 위로 zfontb를 위치시킨다. 기본라인이 위측으로 라인닝되었기 때문에, 현재 폰트는 상기 standard 폰트 사이즈가 1인 하부가 플롯되는 장소인 zy로 세트된 위치로부터 그 셀이 위치된 zcharb-zfontb 수직 도트의 하부로 플로팅된다.

변수 태그는 -1 = baseline, 0 = bottom의 값으로 사용된다.

text reveal; off |all |allcr |editor |reveal

히든(hidden) 텍스트 코드의 표시를 제어함; 디폴트는 off이다.

노출된 확장코드, 어께 글자(superscripts), 첨자 및 귀환 개행(CR)과 같이 텍스트내에서 발생되는 히든 코드의 기능까지도 표시함. 히든 코드 표시장치는 단일 심볼로 표시되거나 혹은 히든 기능을 지정하는 하나 또는 세개의 부가적인 문자에 따라 적합하게 시작된다. 상기 변수 태그 양식은 다음의 키워드 값을 사용한다.

all (2) CR 제외 히든 코드 표시함; CR 기능

allcr (3) CR과 히든 코드를 표시함; CR 기능

editor (4) CR과 히든 코드를 표시함; CR은 기능을 하지 않음

off (0) 히든 코드들이 기능을 하도록 귀환

text measure

텍스트의 단락의 사각 영역을 결정하기 위해 사용될 수 있는 텍스트 측정 시스템 변수를 초기화함:

(zplotxl, zplotyl);(zplotxh, zplotyh)

실시예

임의의 폭과 높이를 갖는 단락이 구성된다. 복수의 write 와 show 명령은

실시예가 단일 write를 사용하는 장소를 나타내게 한다.

text measure

write This is a paragraph

of text...

box zplotx1, zploty1; zplotxh, zplotyh; 2

text info; infoBuffer[,length]

text 옵션의 현 셋팅상의 정보를 설정된 길이를 위한 버퍼로 읽음. 만약 상기 길이가 지정되지 않았다면, 상기 버퍼의 정의된 길이가 사용된다. 상기 버퍼의 포맷은 :

* 절대 (absolete) reveal on 명령을 위함.

실시예

현재의 텍스트 속성 셋팅을 읽고 그것을 표시함.

define local

settings,54

. sizex,2

. sizey,2

. bold,1

...

define end

*

text info; settings

write The current x-size = ≪s, sizey≫

and bold is

writec bold; on; off

폭(width)

설 명

그래픽을 위한 폭을 지정함; 디폴트는 one 픽셀이다. 시스템 변수 zwidth는 현재 폭의 값을 유지한다. 폭은 크게 증대되는 도트를 제외한채 기본 그래픽 요소의 양측에 대칭적으로 부가된다.

다음의 명령은 영향을 미치게 된다:

dot

draw

polygon (non-filled only)

circle (non-filled only)

ellipse (non-filled only)

박스(box)와 삭제(erase)는 폭 명령에 의해 직접 영향을 미치지 않는다. 그러나, 이들은 그 폭 인수를 위한 시스템 변수 zwidth을 사용할 수 있고 그에따라 연결되게 된다. 이 그래픽들은 이전에 설정되었던 폭 인수 정의 때문에 내측에만 "넓어지게 됨"을 알게된다.

현재의 폭 셋팅은 스테이터스 버퍼의 일부이다.

width expression

width 5 $$ following line graphics 5 pixels thick

width var $$ width depends on variable

window

표시장치 윈도우를 관리함

-----------------------------------------------------------------------------

window 키워드

open 관련 좌표를 사용하여 표시장치 윈도우를 오픈함

openabs 절대 좌표의 사용을 제외하고 상기 open의 내용과 동일함

close 현재의 윈도우를 폐쇄하고, 이전 표시장치 스테이터스를 복원함

reset 모든 윈도우를 폐쇄하고, 이전 표시장치 스테이터스를 복원함

frame 관련 좌표를 사용하여 윈도우 경계를 변경함

frameabs 절대 좌표의 사용을 제외하고 상기 frame의 내용과 동일함

relative 윈도우 관련 좌표의 사용을 제어함

clip 윈도우 범위를 넘어 연장되는 그래픽의 클리핑을 제어함

compress 저장된 언더라인 표시의 압축을 제어함

-----------------------------------------------------------------------------

설 명

상기 window 명령은 원도우 표시를 오픈 및 폐쇄 그리고 변경시킬 수 있다.

원도우가 오픈될 경우, 상기 윈도우의 현 표시 스테이터스와 스크린 표시를 메모리 풀에 저장한다. 그에 더하여, 표시동작은 만일 절대 좌표 특성이 선택되지 않았다면 윈도우와 관련하여 그리고 윈도우하에서만 실행된다. 상기 윈도우가 폐쇄되었다면, 윈도우하의 이전 표시 스테이터스와 스크린 표시는 복원된다.

시스템으로 엔트리가 입력될 경우, initial 윈도우는 물리적인 전체 스크린에 상응하도록 오픈된다. 이러한 아웃터-레벨(outer-level) 윈도우의 특성은 상기 window 명령으로 변경시킬 수는 있지만 폐쇄시킬 수는 없다.

window open[;LOCATION[;LOCATION]]

지정된 사각 영역을 초과하는 윈도우 표시를 오픈하고, 사각형 하부상의 스크린 표시, 표시 스테이터스(status 참조), 현 영역 셋팅(area 참조) 및 관련 좌표(window relative)을 위한 현재의 셋팅을 저장하며, (window clip)과 압축(window compress)를 클리핑한다. 윈도우를 폐쇄시킴에 따라, 상기 저장된 데이터는 그의 이전 스테이터스로 스크린을 복원하기 위해 사용된다.

스크린 좌표는 새로 오픈된 표시 윈도우와 관련된 것인대: 상기 그래픽 좌표는 0,0 는 윈도우의 좌하부 코너의 위치이고, 문자 좌표 1:1은 윈도우의 상부 라인상에 위치하는 제1 문자이다. 표시된 목적물은 만약 윈도우 화면을 넘어 연장된다면 클리핑된다(window clip 참조).

상기 window 의 사각 좌표는 이전에 오픈된 임의의 윈도우와 origin 명령에 의해 영향을 미치게 되는대; 이들은 scale, rotate 혹은 window clip에 의해서는 영향을 받지 않는다. 이전에 오픈된 임의의 윈도우와 관련됨이 없이 물리적인 스크린과 관련된 윈도우를 위치시키기 위해 window openabs 혹은 enable absolute 를 사용한다. 윈도우는 만약 물리적인 스크린이 연장되지 않을 경우 오픈되지 않는다. (zreturn=23).

사각 LOCATION 양측이 블랭크라면, 전체 스크린 혹은 이전 window가 포함된다. 하나의 사각 LOCATION 만(제1)이 존재한다면, 현 스크린 로우케이션이 시작 위치로서 사용되고 LOCATION이 윈도우 크기가 조정되도록 다수의 문자나 또는 현재 선택된 폰트의 문자와 라인으로 주어진다는 점을 설명한다.

실시예1

윈도우는 청색 배경화면, 화이트 보더(white border), 일부 텍스트를 VGA 스크린상에 오픈한다. 임의의 키가 눌려졌을 때, 윈도우는 폐쇄되고 언더라인된 표시는 복원된다.

window open; 100,100; 400,250 $$ open window, middle of screen

colore blue

erase $$ clear window to blue

.

.

color white+

box ;;1 $$ put border around window edge

at 2:4

write The author of this lesson is:

Dr. John Burdeen

University of Illinois at Urbana

press any key to continue...

pause pass=all

window close

실시예 2

at 5:15

window open; 20,5

상기 20 문자 넓이와 5 라인 폭의 윈도우는 라인 5 문자 15의 언더라인된 스크린(혹은 윈도우) 위치에서 오픈된다.

window openabs[;LOCATION[;LOCATION]]

상기 enable absolute가 유효한 것처럼 해석되는 사각 로우케이션을 제외한 window open과 동일시되는대; 상기 LOCATION 좌표는 물리적인 스크린을 언급하는 것이며, 이전에 오픈된 임의의 윈도우나 혹은 origin 명령에 의해 영향을 받지는 않는다.

window close[;noplot][;noarea]

현 표시 윈도우를 폐쇄하고, 저장된 윈도우 하부의 표시, 표시 status, area 정의 및 window relative, window clip, window compress의 스테이터스를 메모리 풀로부터 복원한다. 옵션널 키워드 noplot는 위도우 하부 표시의 복원을 금지한다. 상기 옵션널 키워드 noarea 는 영역 정의의 복원을 금지한다.

window reset[;noplot][;noarea]

최종 오픈된 것으로부터 맨 처음 오픈된 순차로 모든 윈도우를 폐쇄하고, 윈도우 하부의 표시, 표시 status, area 정의 및 window relative, window clip, window compress의 스테이터스를 복원한다. 옵션널 키워드 noplot는 위도우 하부 표시의 복원을 금지한다. 상기 옵션널 키워드 noarea 는 영역 정의의 복원을 금지한다.

window frame[;LOCATION[;LOCATION]]

현 표시 윈도우의 경계들을 변경함. 윈도우의 콘텐츠와 윈도우 하의 저장된 표시는 변경되지 않는다. window frame은 아웃터-레벨의 물리적 스크린 윈도우상에 사용될 수 있다.

window frameabs [;LOCATION[;LOCATION]]

상기 enable absolute가 유효한 것처럼 해석되는 사각 로우케이션을 제외한 window frame과 동일시되는대; 상기 좌표는 물리적 스크린을 언급한다. 이것은 이전에 오픈된 임의의 윈도우나 혹은 origin 명령에 의해 영향을 받지는 않는다.

window relative;[ on |off |CONDITION]

현 표시 윈도우를 위한 윈도우-상대- 좌표의 사용을 on 또는 off 시킴. 상기 디폴트는 윈도우가 오픈될 경우 clip on된다. 만약 클리핑이 턴 off될 경우, 현재 윈도우의 외측으로 연장되는 목적물이 표시되게 된다.

상기 시스템 변수 zclipx1,zclipy1,zclipx2,zclipy2는 클리핑 영역의 좌 하부와 우(right) 상부을 위한 절대 좌표를 유지한다.

window compress; [on |off |CONDITION]

언더라인된 스크린의 데이터 압축을 제어함. 상기 디폴트는 윈도우가 오폰될 경우 compress on 된다. 상기 윈도우가 오픈될 경우, 윈도우 화면상의 표시 콘텐츠는 메모리 풀내에 저장된다. 상기 윈도우 압축이 세트 on될 경우, 저장된 데이터는 메모리 풀 스페이스를 상당히 적게 차지하게 되나; 압축이 세트 off될 경우는, 저장된 데이터가 더 많은 메모리 풀 공간을 사용한다. 구형 컴퓨터일 경우 상기 윈도우는 더 신속히 오픈되고 폐쇄된다.

시스템 변수

zreturn

-1 성공적인 동작

18 메모리 풀내의 불충분한 메모리

23 물리적 스크린에서 윈도우의 일부가 오프됨

기타 명령

다음 시스템 변수는 윈도우에서 영향을 미친다.

zdispx 윈도우의 폭과 높이

zdispy

zxmax 윈도우의 최대 x 와 y 좌표

zwindowx 좌 하부 위도운 코너의 절대 x 와 y 좌표

zwindowy

zclipx1 좌 하부 클리핑 영역의 절대 x 와 y 좌표

zclipy1

zclipx2 우 상부 클리핑 영역의 절대 x 와 y 좌표

zclipy2

라이트(write)

텍스트를 표시함.

-----------------------------------------------------------------------

write TEXT

-----------------------------------------------------------------------

설 명

현 스크린 로우케이션에서 시작되는 스크린상에 텍스트를 표시함. 상기 로우케이션은 좌와 우 텍스트 마진을 또한 세트시키는 이전 at 명령에의해 일반적으로 세트된다. 상기 write 텍스트는 순환 동작이 상기 text margin 명령에 의해 제어되는 다수의 라인을 위해 연장시킬 수 있다.

텍스트 속성(즉, 칼라, 언더라인, 드롭 섀도우, 폰트 디자인, 등)은 내장된 텍스트 속성의 사용을 통해 문자대 문자로 변경시킬 수 있다. 이들은 소스 코드와 표시 에디터내의 메뉴 옵션을 통해 기입되는 노출 코드 시퀀스와; 내장 심볼 ≪≫ 의 사용을 통해 포함할 수 있는 내장 명령으로서 텍스트내에서 발생된다. 50개 이상의 텍스트 속성 노출 코드가 있다. 상기 명령과 text 명령 키워드는 다음과 같은 내장 속성을 갖는다:

color |c 포어그라운드 표시 칼라를 선택함

color |ce 배경 표시 칼라를 선택함

color | ma 텍스트 랩핑(wrapping)을 제어함

mode | m 텍스트가 현재의 표시 이상으로 플로팅하는 방법을 선택함

size | s 폰트의 사이즈를 변경함

spacing | sp 비례 혹은 고정 공간을 선택함

상기 write 의 시점에 존재하는 텍스트 속성은 임의의 속성 변경이 다음 명령으로 연장되지 않게 텍스트내에서 이루어지도록 write 의 끝에서 저장 및 복원된다.

이 시점을 저장한 속성은 "status text start" 의 노출 코드 시퀀스 Esc-&를 사용함에 의해 텍스트내에서 임의의 시간에 복원시킬 수 있다. 이러한 명령중 writex 변형은 스타팅 텍스트 속성을 저장하지는 못하지만; 이들은 이전 write 명령에 의해 저장된 것의 속성은 복원시킬 수 있다.

또한, 변수와 버퍼의 콘텐츠 표시는 show 명령문의 내장 양식을 사용하므로 write의 텍스트내에 내장시킬 수 있다.

show | s 변수와 식을 표시함

showa | a 버퍼내의 텍스트를 표시함

showh | h 16진수 포맷으로 버퍼를 표시함

showt | t 도표 포맷의 변수를 표시함

showv | v 널 코드를 구비한 텍스트 버퍼를 표시함

실시예들

실시예1

다음의 write는 소스 코드내의 3개의 라인상에 위치된다. 그러나, 그것은 상기 at 명령에 의해 세트된 것으로서의 마진이 더욱 더 좁은 단락을 만들기 때문에, 스크린상에 다수의 라인들을 표시시킬 수 있다.

at 1:10; 10:30 $$ left margin is char 10

$$ right margin is char 30

text margin; wordwrap $$ wrap full words at right margin

write This is a paragraph of text that goes on and on. It will appear nicely between the margins as set by the preceding at command. continued lines of text in a write statement begin by tabbing over the command field.

실시예 2

내장 show 명령문은 텍스트와 변수들로부터의 번호들을 표시시킬 수 있다. 다음은 임의의 대상을 표시한 것이다.

Bill:

your score is 92%

the class average was 85%

write ≪showa, name≫:

your score is ≪show, score≫%

the class average was ≪show, average≫%.

실시예 3

write Special effects such as underlining and italics are easily put on characters through insertion of embedded code sequences in the editors. Some attributes such as size can use the embedded command form so that they ≪show, 4≫ can be seen clearly in ≪color, red+≫printouts of your code. writec

writec

텍스트를 선택적으로 표시함.

-----------------------------------------------------------------------

writec SELECTOR; TEXT; TEXT;...

-----------------------------------------------------------------------

설 명

상기 write 명령의 선택적인 양식임.

상기 SELECTOR 을 수반하는 구분자는 수반되는 모든 TEXT 케이스를 분리시키도록 사용되고 a: 로 될 수 있다.

세미콜론 ;

콜론 :

콤마 ,

라인 종료 ┚

범용 구분자 │

실시예들

실시예 1

상기 변수 month는 달을 표시하기 위한 텍스트내에서 선택적으로 집어내어 사용한다. 먼저 두 개의 케이스(negativ 와 0)는 텍스트에서 사용되지 않는다.

write Today`s month is $$$ retain the trailing space

writec month,,,January, Fabruary, March, April, May, June, July, August, September, October, November, December

실시예 2

텍스트의 다양한 라인은 각각의 선택적인 케이스에 의해 실행시킬 수 있다. 구분자들은 셀렉터 구분자가 텍스트내에서 실행되는 것과 동일하게 사용되지는 않는다.

write question

what city was once called Fort Dearborn?

Hint: it is also called the Windy City.; $$ case 1

What is the largest city in the US?

Hint: it is on the east coast.; $$ case 2

What city is known as the Gateway to the West?

Hint: it is on the Mississippi.; $$ case 3

zero

변수 혹은 지정된 바이트 수를 0로 만듬.

-----------------------------------------------------------------------

zero variable [,length]

-----------------------------------------------------------------------

설 명

변수 공간의 바이트들을 0로 만듬. 상기 1-태그 양식은 지정된 변수일 경우에만 0로 만든다. 상기 2-태그 양식은 바이트의 임의의 수들을 0로 만들고, 지정된 variable 에서 시작하는대; 변수 경계들은 이러한 양식과 교차될 수 있다.

실시예

하나의 명령으로서 대용량(large) 변수를 제로로함

define global

var, 128 $$ a 128-byte buffer

define end

*

zero var $$ zero all 128 bytes

[발명의 효과]

본 발명이 특정한 실시예와 응용들에 국한하여 설명되기는 하였지만, 본 발명이 속하는 기술분야에서 통상의 지식을 가진자라면 그러한 설명을 참조하여 청구된 본 발명의 권리범위를 넘어서거나 혹은 기술사상으로부터 벗어남이 없이도 추가적으로 실시예와 개량을 실행할 수 있다. 따라서, 본 명세서에 기재된 상세한 설명과 도면은 본 발명의 이해를 용이하게 하기 위한 예에 불과한 것이므로, 그것에 의해 본원 발명의 권리 범위가 국한되는 것은 아니다.