텍스트 실행 프로그래밍 언어

Text Executive Programming Language

1979년 Honeywell Information Systems는 Text Executive 텍스트 처리 시스템의 약자TEX라는 시간 공유 서비스의 새로운 프로그래밍 언어를 발표했다.TEX는 AWK 무렵에 개발된 1세대 스크립팅 언어로서, Honeywell이 초기에는 사내 시스템 테스트 자동화 툴로 사용하였다.

TEX는 사용자가 보다 복잡한 TSS FORTRAN 프로그램에서 이전에 수행했던 많은 다른 시간 공유 작업을 자동화하는 스크립트뿐만 아니라 사용하기 쉬운 편집 확장을 개발하는 데 있어 더 많은 관용도를 제공할 수 있도록 프로그램 가능한 기능으로 Honeywell Time-Sharing 서비스(TSS) 라인 편집기를 확장했다.

개요

TEXHoneywell TSS의 하위 시스템이었다.사용자는 TSS 명령 '텍스'를 입력하여 TEX 세션 작동 모드로 변경한다.TEX 표현식은 명령행에 직접 입력하거나 TEX 명령 Call ⟨filename⟩을 통해 스크립트 파일에서 실행할 수 있다.

TEX 프로그램은 TSS 라인 편집 명령어, TSS 세션 명령어 및 TEX 문의 모음입니다.TEX 변수를 TSS 변수 대체 기능을 통해 TSS 명령과 TSS 라인 편집기 명령에 삽입할 수 있다.TEX 프로그램은 주로 라인 편집기 시스템을 확장하도록 설계되었다.따라서 TEX는 라인 편집 명령을 작업 파일에 적용하고 필요에 따라 저장하는 대신 파일 입력/출력 개념을 갖지 않았다.

Honeywell의 TEX의 핵심 개발자는 ASCII의 아버지이자 COBOL의 조부로 유명한 로버트 베머와 함께 자문역량을 수행하는 에릭 클램온스와 리처드 키즈였다.[1]

텍스는 TeX와 도날드 크누스에 의해 발명된 형식 지정 마크업 언어와 혼동해서는 안 된다.

미국수학협회도 TeX의 상표를 주장해 왔는데, 이는 1980년대 초 이 시험 당시 Honeywell에 의해 "텍스트 EXecutical" 텍스트 처리 시스템에 "TEX" (all caps)가 등록되어 있었기 때문이다.[2]

변수

모든 변수를 문자열로 저장하고 필요할 때 정수 숫자 값으로 변환했다.현재 스크립팅 언어에서 공통적으로 사용되는 부동 소수점 변수, 배열 또는 기타 데이터 유형은 TEX 환경에 존재하지 않았다.

모든 변수는 변수 이름 지정 충돌을 피하기 위해 사용자가 관리해야 하는 단일 글로벌 변수 풀에 저장되었다.TEX에는 가변 범위 지정 기능이 없었다.변수 이름은 40자로 제한되었다.

TEX특정 TEX 문자열 구문 분석 작업이 실행될 때 상태가 변경된 별 함수 또는 별 변수라고 불리는 몇 개의 내부 읽기 전용 레지스터를 제공했다.스타 기능은 현재 날짜와 시간, 분할 또는 스캔 문자열 구문 분석 작업에서 결과 문자열, TEX 내부 통화 수준 및 TSS 세션 정보를 얻을 수 있는 수단을 제공했다.

문자열 값의 최대 길이는 240 ASC이었습니다.II 문자.여기에는 TEX 식을 평가할 때 중간 결과가 포함된다.숫자 문자열 값은 음수의 경우 (-)를 포함하여 문자열에서 62자리로 제한된다.숫자 값도 문자열 표현에서 선행 0이 제거되는 경우 정규화된다.

변수 사용의 몇 가지 예:

문자열에 a="헬로"가 포함되지 않는 한 인용문이나 기타 문자를 구분자로 사용할 수 있음 _ 여기서 우리는 / 문자를 구분 기호(특히 문자열에 "문자" b=/world/가 있는 경우 일반적인 관례)로 사용한다.
_ 쉼표 연결 연산자 c=a,/ /,b를 통해 문자열을 연결한다.
"헬로 월드"는 인용문 없이 터미널에 인쇄될 것이다.c
_ 여기서 우리는 "Hello world" hello="hello world" f:hello로 시작하는 라인을 찾기 위해 라인 편집 명령에서 TEX 변수를 사용한다.
_ 여기서는 "헬로" 문자열을 "헬로 월드" 문자열 rs:a:c로 대체한다.


연산자

TEX에는 세 가지 유형의 연산자가 있다.

  • 산수의
  • 부울
  • 끈을 매다

TEX 식을 구성할 때는 문자열 리터럴을 제외한 모든 공간을 압축해야 한다.일반적으로, 공간은 TEX 문을 구분한다.

_ "d=" 문장에 쉼표나 변수 a="hello" b="c="world" d=a,b,c out:d 사이에 공백이 없다.
_ 공간은 a:eqs:"hello" 아웃아웃:a가 조건부로 실행되도록 다음 TEX 명령에서 'if'와 식을 구분한다.


산술

TEX는 기본 정수 산술 연산만 지원한다.

  • 단일 기호 번호 접두사(+/-)
  • 추가(+),
  • 빼기(-),
  • 곱하기(*) 및
  • 분할(/)

최대 16단계의 괄호를 사용하여.

몇 가지 예는 다음과 같다.

a=1 b=-2 c=3*(a-b)/(2*2+(4+1))


부울 연산자

TEX 부울 연산자는 다음과 같은 두 가지 맛을 낸다.

  • 수치 비교
  • 끈 비교

그것들은 IF 제어문의 맥락 안에서 가장 자주 사용되었다.

TEX에서 사용할 수 있는 숫자 부울 연산자 목록은 다음과 같다.

  • :eq: 또는 :eqn: 두 값이 숫자로 같은 경우 t를 true로 반환함
  • :ge: 또는 :gen: 첫 번째 값이 두 번째 값과 숫자적으로 같거나 큰 경우 t를 true에 대해 반환
  • :le: 또는 :len: 첫 번째 값이 두 번째 값과 숫자적으로 같거나 작은 경우 t를 true로 반환
  • :gt; 또는 :gtn: 첫 번째 값이 두 번째 값보다 숫자적으로 큰 경우 t를 true로 반환
  • :lt: 또는 :ltn: 첫 번째 값이 두 번째 값보다 숫자로 작은 경우 t를 true로 반환함
  • :ne: 또는 :nen: 첫 번째 값이 두 번째 값과 숫자적으로 같지 않을 경우 t를 true로 반환함

사용 가능한 문자열 부울 연산자 목록은 다음과 같다.

  • :eqs: 문자, 대소문자 및 길이에서 두 문자열 값이 동일한 경우 t를 true로 반환
  • :ges: 첫 번째 문자열이 대소문자 및 길이의 두 번째 문자열보다 크거나 같은 경우 t를 true로 반환
  • :les: 문자 대소문자 및 길이의 첫 번째 문자열이 두 번째 문자열보다 작거나 같은 경우 t를 true로 반환
  • :gts: 첫 번째 문자열이 대소문자 및 길이의 두 번째 문자열보다 크거나 같은 경우 t를 true로 반환
  • :lts: 문자 대소문자 및 길이의 첫 번째 문자열이 두 번째 문자열보다 작을 경우 t를 true로 반환
  • :nes: 문자 대소문자 및 길이의 첫 번째 문자열이 두 번째 문자열과 같지 않을 경우 t를 true로 반환

문자열 부울 연산자는 TEXCASE 모드의 영향을 받는다.CASE 모드에서는 'ABC'와 'ABC'와 같은 문자열이 동등하다고 간주되었다(TEX는 비교에 앞서 'ABC'를 'ABC'로 변환했다).NOCASE 모드에서는 'A'가 'A' ASCII 코드 포인트 값보다 큰 값이라는 ASCII 코드 포인트 값에 기초한 'ABC' 문자열보다 큰 것으로 간주된다.

부울 NOT 연산자는 곡절 문자(^)로 표현되었다.

실행 중인 부울 연산자의 몇 가지 예:

if name:eqs:"luke" out:"힘이 함께 있기를!" ^age:gtn:500 out:"허허, 요다가 될 수 없어!"

TEX는 더 복잡한 부울 식을 만들기 위해 또는 연결자를 제공하지 않았다.대신 프로그래머는 다음에 대한 문장연결부, 그리고 ...에 대한 블록을 처리하거나 연결하기 위한 문장으로 해야 했다.

_ an example of an and construct    if a:eqs:'a'   if b:eqs:'b'  goto !its_true    goto !its_false     _ an example of an or construct    if a:eqs:'a'   goto !its_true    if b:eqs:'b'   goto !its_true    if c:eqs:'c'   goto !its_true    goto !its_false     !its_true out:"그것이 진실이다!"라고 말했다!next_block!its_false out:"거짓말이야!" "다음_블록!다음_블록...뭔가를 해봐... 

문자열 연산자

TEX의 문자열 연결은 쉼표 연산자에 의해 제공되었다.

a="안녕", ","세계"

TEX는 여러 문자열 분할 연산자를 제공했다.

  • 문자열을 왼쪽에서 분할하고 왼쪽을 저장('])
  • 문자열을 왼쪽에서 분할하고 오른쪽을 저장(])
  • 끈을 오른쪽에서 쪼개서 왼쪽을 살린다('[])
  • 끈을 오른쪽에서 쪼개어 오른쪽([])을 살린다.

일부 문자열 분할 예제:

a="헬로 월드" b=a]5 c=a]5 아웃:"이상한 새 ",c"이지만 ",b" 어쨌든!"


TEX는 여러 문자열 검색/파싱 연산자를 제공했다.

  • 지정된 하위 문자열에 대해 왼쪽에서 문자열 검색 및 왼쪽 저장('')
  • 지정된 하위 문자열에 대해 왼쪽에서 문자열 스캔 및 오른쪽 저장(>')
  • 지정된 하위 문자열에 대해 오른쪽에서 문자열 검색 및 왼쪽 저장('<)
  • 문자열을 오른쪽에서 검색하여 지정된 하위 문자열을 저장하고 오른쪽 측면(<)을 저장

일부 문자열 검색/파싱 예제:

a="헬로 월드" b=a""" 아웃:b


레이블

모든 TEX 문 라벨에는 a (!)가 붙었다.goto 또는 호출 문에서 참조하지 않는 한 일반적으로 문 라벨은 무시되었다.TEX의 한 가지 주목할 만한 특징은 다른 파일에 있는 라벨을 호출하거나 호출할 수 있는 능력이었다.TEX SUBS 모드와 결합하면 TEX는 이 스크립트의 라인 편집, 저장, 호출 또는 goto 라벨을 통해 동적으로 새 스크립트를 작성할 수 있다.

mypgm 파일:


!hello out:"hello world" return!hello2 out:"hello world again" exit(파일 끝 마커)


레이블로 호출 예제:

/mycat/mypgm을 불러!안녕


위의 예에서 TEX는 !hello 라벨(*)을 검색하는 /mycat/mypgm 파일을 처리한다.TEX반환문 또는 종료문이 실행되거나 파일의 끝에 도달할 때까지 파일 처리를 계속한다.

레이블별 Goto 예제:

got to /mycat/mypgm!헬로2


다음 예에서 TEX는 !hello2 라벨(*)을 검색하는 /mycat/mypgm 파일을 처리한다.TEX종료문 또는 파일 끝에 도달할 때까지 계속 처리한다.반송문이 실행되었고 활성 상태인 CLAB가 없는 경우 오류가 발생할 수 있다.

(*) TEX는 동일한 파일에 중복 레이블이 있는지 확인하지 않았으며, 따라서 실행이 있을 경우 예측할 수 없었다.

대체

TEX는 후속 TEX 문 또는 TSS 명령에 대한 변수 대체를 활성화하거나 비활성화하는 SUBSNOSUBS 명령을 제공한다.


xx=/out:""Hello World"/ subs ?xx? nosubs ?


위의 예에서 xx 변수는 그 으로 TEX 출력 문을 포함한다.하위 명령어는 (?)가 프로그램의 모든 미래 문장에 대한 대체 문자임을 명시한다.첫 번째 xx? 라인을 처리하는 즉시 TEX아웃을 대체할 것이다."hello world' 명령어는 ?xx?? 명령어를 입력한 다음 결과 문장을 실행한다.nosubs 명령은 후속 문장에 대한 대체 기능을 해제하여 TEX가 두 번째 ?xx? 줄을 실행하려고 할 때 오류를 발생시킨다.

나침략

TEX는 가변 대체 외에도 변수 양방향도 지원했다.밑줄 문자(_)가 앞에 붙은 변수들은 그 내용물로 변수 이름을 포함하는 것으로 간주되어 TEX는 값을 얻기 위해 간접적으로 사용할 것이다.TEX는 가능한 루핑을 방지하기 위해 64단계로 제한했다.

예를 들면 다음과 같다.

a="b" b="c" c="hello world" ___a ==_b == c = c _ 이래서 명령어는:c가 되었다.아웃:__a

입출력

Honeywell Timesharing 세션은 작업 파일에 대한 개념을 가지고 있었다.기존 파일을 편집하려면 먼저 이전 명령을 통해 해당 파일을 작업 파일로 만드십시오.새 파일을 생성하려면 먼저 새 명령을 통해 파일을 생성하십시오.변경이 완료되면, 작업 파일을 저장하거나(새 파일의 경우) 다시 저장하십시오.기본적으로 한 번에 하나의 파일만 편집할 수 있다.

TEX 프로그램은 주로 라인 편집기 시스템을 확장하도록 설계되었다.따라서 TEX는 라인 편집 명령을 통해 작업 파일을 변경하고 필요에 따라 저장하는 대신 파일 입력/출력 개념을 갖지 않았다.

그러나 TEX는 다음과 같은 터미널 지향 입출력 명령을 제공했다.

  • in - 프롬프트를 인쇄한 후 텍스트가 입력될 때까지 일시 중지하고 *in star 변수에 저장
  • out - 메시지를 인쇄하다

내부외부 사용의 간단한 예:

in:"이름이 뭐니?"아웃:"Hi ",*in


항성 변수 및 함수

TEXTEX 시스템 기능의 결과나 부작용에 접근하거나 ASCII 터미널 코드를 나타내기 위한 수단으로 별 변수를 제공했다.

항성 변수 목록은 다음과 같다.

  • *계정 - 현재 userid와 연결된 사용자 계정
  • *cl - 편집 중인 현재 파일의 현재 줄
  • *lcl - *cl 값의 길이
  • *clvl - 현재 통화 깊이
  • *날짜 - YY-MM-DD 형식의 현재 날짜
  • *eof - 현재 파일의 마지막 줄 뒤에 있거나 현재 파일이 없는 경우 T
  • *in - in 또는 in TEX 명령 실행에 대한 마지막 응답 포함
  • *lin - 길이 *in
  • *왼쪽 또는 *l - 검색 또는 분할 명령 실행에서 왼쪽 문자열
  • *왼쪽 또는 *ll - 길이 *왼쪽
  • *중간 또는 *m - 검색 또는 분할 명령 실행의 중간 문자열
  • *lmiddle 또는 *lm - 길이 *middle
  • *오른쪽 또는 *r - 검색 또는 분할 명령 실행의 오른쪽 문자열
  • *lright 또는 *lr - 길이 *right
  • *null - null 문자열을 나타냄
  • *nump - 0에서 9까지 임의로 선택한 숫자 포함
  • *rmdr - 마지막 분할 작업의 나머지 부분
  • *snumb - 마지막 배치 작업 실행의 시스템 번호
  • *svmd - TEX 명령을 통해 마지막 인터페이스 호출 또는 gotoTEX 모드를 복원
  • *sw00 ~ *sw35 - 1비트가 T 값을 반환하고 0비트가 F 을 반환하는 TSS 36비트 스위치 워드 검사
  • *시간 - 현재 시간(hh:mm:ss)은 항상 가장 가까운 초까지입니다.
  • *userid - 현재 사용자 ID

터미널 코드

TEX 프로그램에서 쉽게 참조할 수 있도록 터미널 코드가 별 함수로 매핑되었다.

  • *nul - null
  • *소 - 헤더 시작
  • *문자 시작 - 텍스트 시작
  • *etx - 텍스트 끝
  • *전송 종료
  • *enq - 문의
  • *ack - 확인
  • *벨 - 벨
  • *bs - 백스페이스
  • *ht - 수평 탭
  • *lf - 라인 피드
  • *vt - 수직 탭
  • *ff - 폼 피드
  • *cr - 캐리지 리턴
  • *그러므로 - 교대
  • *si - shift in
  • *dle - 데이터 링크 이스케이프
  • *dc1 - 장치 컨트롤 1
  • *dc2 - 장치 컨트롤 2
  • *dc3 - 장치 컨트롤 3
  • *dc4 - 장치 컨트롤 4(정지)
  • *nak - 부정 인정
  • *동기식 유휴 상태
  • *etb - 변속기 블록의 끝
  • *can - 취소
  • *em - 중간 끝
  • *sub - 대체
  • *esc - 탈출
  • *fs - 필드 구분 기호
  • *gs - 그룹 구분 기호
  • *rs - 레코드 구분 기호
  • *us - 유닛 분리기
  • *del - 삭제

명령

TEX 프로그램 내에서 그러한 라인 편집기 명령을 사용할 수 있기 때문에 TSS 라인 편집기 위에 TEX가 구축되었다.TEX 프로그램에는 다음이 있을 수 있다.

  • TSS 줄 편집 명령
  • TEX 명령어
  • TEX 모드 명령
  • TSS 시스템 명령

명령 편집

일반 명령 형식은 다음과 같다.

동사:<search_count>;<<count_count>:<pross_string>


⟨search_expression⟩은 F:/hello/,/world/와 같은 범위를 포함할 수 있으며 문자열 "hello"로 시작하는 모든 줄을 찾을 수 있다.

TEX는 다음 표준 라인 기반 파일 편집 명령을 제공했다.

  • P: 전류 라인 인쇄
  • F: 현재 파일 줄을 따라 앞으로 이동
  • B: 현재 파일 줄을 따라 뒤로 이동
  • A: 현재 줄 뒤에 추가
  • I: 현재 줄 앞에 삽입
  • R: 제공된 표현식으로 전류 교체
  • D: 현재 라인 삭제
  • 복사: 현재 줄 복사
  • 잘라내기: 현재 줄 복사 및 삭제
  • 붙여넣기: 잘라내거나 복사한 것을 현재 줄 앞에 붙여넣기

각 명령은 숫자 반복 값 또는 별표(*)로 수정할 수 있다.

  • P;999: 현재 위치에서 다음 999줄 인쇄
  • P;*: 현재 위치에서 파일 끝까지 모든 라인 인쇄
  • F;999: 현재 위치에서 999줄 전진
  • F;*: 파일 끝으로 이동
  • B;999: 현재 위치에서 999줄 뒤로 이동
  • B;*: 파일의 첫 번째 줄로 이동

다음 행과 일치하는 문자열 또는 식을 사용하여 명령을 추가로 수정할 수 있다.

  • F:/xxx/;999는 999번째 발생 /xxx/부터 시작하는 라인으로 전진한다.
  • B:/xxx/;999는 999번째 /xxx/ 발생부터 시작하여 뒤로 이동
  • I:/xxx/;999:/yyy/ /xxx/로 시작하는 다음 999 줄 앞에 yyyy 줄을 삽입
  • R:/xxx/;999;/yyy/ /xx/로 시작하는 다음 999 라인을 /yyy/ 라인으로 교체하십시오.
  • D://xxx/;999는 /xxx/로 시작하는 다음 999행 삭제

문자열 모드의 경우 S가 추가되었다./xxx/가 라인 내에서 발견될 때마다 편집이 적용됨:

  • FS:/xxx/;999는 문자열 /xxx/의 999번째 발생으로 이동하십시오.
  • IS:/xxx/;999:/yyy/ 다음 999 발생 전에 /yyy/ 문자열을 삽입하십시오.
  • RS:/xxx/;999:/yyy/ 다음 999개 문자열 /xx/를 /yyy/로 교체
  • DS:/xxx/;999 다음 999개의 문자열 /xx/ 삭제

마지막으로, 확인 모드를 켜기 위해 V를 사용하고 n번째 발생 문자열 모드를 지정하기 위해 O를 사용하여 명령을 추가로 수정할 수 있다.

  • RVO:/xxx/;999;999:/yyy/ 999번째 문자열 /xxx/를 /yyy/로 교체하고 99회 반복한다.

그 밖에 덜 사용된 편집 명령이 몇 가지 있다.

  • 표시 – 현재 또는 이후에 포함된 파일에서 .mark ⟨filename⟩ 문이 발견될 때 파일에 파일을 포함(재발 작업)
  • befl – 현재 라인 앞에 삽입(일반적으로 "A" 명령은 현재 라인 뒤에 삽입하는 데 사용됨)
  • trul ⟨collat – 현재 파일의 맨 왼쪽 열 잘라내기
  • trur ⟨collat – 현재 파일의 맨 오른쪽 열을 잘라내십시오.

모든 편집 명령 형식에서 /xxx/ 또는 /yyy/ 또는 999를 TEX 변수로 대체할 수 있다.또한 999 값은 모든 발생을 나타내기 위해 별표(*)로 대체될 수 있다.

TEX 명령어

TEX는 현대 스크립트 언어에서 흔히 볼 수 있는 숫자 또는 조건부 루프 또는 스위치 케이스에 대한 명령을 제공하지 않았다.이것은 if, label 및 goto 명령을 사용하여 생성되어야 했다.예를 들어 파일에서 중복된 줄을 제거하려면 다음을 사용하십시오.

!ELIM_DUPS a=*cl f;1 _ !NEXT_LINE 만약 *eof:"태스크 완료"가 되면 b=*cl을 반환한다. a:eqs:b d got!NEXT_LINE a=b f;1 goto!넥스트_라인

TEX 명령:

  • ⟨filepath⟩을 불러라!⟨label⟩ – 현재 프로그램이나 다른 파일에서 서브루틴을 호출한다.중지 또는 복귀 시 통화가 종료됨
  • ⟨variable_name⟩ 지우기 – 풀에서 명명된 변수를 제거하거나 *를 사용하여 모든 변수를 제거
  • gotfilepath⟩!⟨label⟩ – 명명된 파일과 레이블로 이동
  • ercall pathfilepath⟩!⟨label⟩ – 이전 명령의 오류 시 서브루틴 호출
  • 에르고토 ⟨filepath⟩!⟨label⟩ – 선행 명령의 오류에 대한 goto 절차
  • 만약 expressionexpression – 조건부라면, 표현은 앞에서 언급한 비교 연산 중 하나인 < <값>:op:<variable값> 형식이다.
  • in:⟨⟨⟩ – 식을 인쇄하고 입력을 기다린다.*인 변수에 입력 저장
  • int:int:csvitu – 식을 인쇄하고 터미널에서 특별히 입력을 기다리십시오.*in 변수에 입력을 저장한다.
  • *null – TEX 프로그램에서 삽입 모드를 종료하는 데 사용되는 터미널에서 무입력 캐리지 리턴.다른 어떤 명령도 같은 줄에 있지 않을 수 있다.
  • 중지 – TEX 프로그램 중지
  • _ – 비고선
  • 리턴 – 서브루틴 호출에서 리턴
  • out:⟨expression⟩ – 표현식을 단자에 인쇄
  • outt:csvitalize – 식(및 아직 플러시되지 않은 모든 이전 출력)을 터미널에 강제 인쇄
  • scan:computerand-a⟩:superoperand-b⟩ – 왼쪽에서 오른쪽으로 rightoperand-a 검색 scanoperand-a 검색 결과 *좌, *중간*우측 항성 변수인 경우 *matchT인 경우 일치하는 것이 발견되었다.
  • scann:⟨operand-a⟩:⟨operand-b⟩ – scan ⟨operand-a⟩ from left to right searching for ⟨operand-b⟩ and parse ⟨operand-a⟩ placing the results in *left, *middle, and *right star variables and if *match is T then a match was found. scann ⟨operand-b⟩ was limited to a single character or character class (*lc=lowercase alphabetic, *uc=uppercase alphabetic,*n=sn, *a=알파벳lc+*uc), *an=영숫자+*n))
  • scanr:csnoperand-a::csnoperand-b⟩ – 오른쪽에서 왼쪽으로 스캔 operoperand-a⟩, 파스 andoperand-a⟩, *왼쪽, *중간*우측 항성 변수에 결과를 배치하고 *matchT인 경우 일치하는 것을 발견했다.
  • scannr:⟨operand-a⟩:⟨operand-b⟩ – scan ⟨operand-a⟩ from right to left searching for ⟨operand-b⟩ and parse ⟨operand-a⟩ placing the results in *left, *middle, and *right star variables and if *match is T then a match was found. scannr ⟨operand-b⟩ was limited to a single character or character class (*lc=lowercase alphabetic, *uc=uppercase alphabetic, *n=sn, *a=알파벳lc+*uc), *an=영숫자+*n))
  • split:splitoperand-aa:superoperand-b⟩ – –operand-b⟩ 위치의 split operoperand-a⟩ 위치의 split ⟨operand-a⟩ - *왼쪽, *중간 및 *우측 항성 변수
  • splitr:splitoperand-a⟩:splitoperand-b⟩⟨operand-b⟩ 위치의 split andoperand-a⟩ 위치의 splitoperand-a⟩ 위치의 split operoperand-a-presults *왼쪽, *중간*우측 항성 변수
  • subs ⟨subs_caracters – TEX가 한 쌍의 <subs_charactors>를 스캔하여 식을 평가하고 라인을 실행하기 전에 줄에 배치하는 하위 모드를 활성화한다.NOSUBS에 의해 SUBS 모드가 꺼짐
  • trace - 실행하기 전에 선이 표시되는 추적 모드를 활성화하십시오.NOTRACE에 의해 추적 모드가 해제됨
  • 변수 - 항성 변수를 포함한 모든 변수 및 값 표시

TEX 모드

TEX 모드는 다른 TEX 명령이 작동하는 방식을 정의했다.*svmd 변수에는 모든 TEX 모드의 현재 상태가 TEX 명령 형태로 포함되어 있어 모드를 복원한다.각 모드에는 언제든지 할 수 있는 모드를 끄라는 역 명령이 있었다.

  • subschar⟩/nosubs - TEX가 ⟨charchar 쌍을 스캔하여 식을 평가하고 라인을 실행하기 전에 줄에 배치하는 하위 모드를 활성화한다.
  • 추적/공지 – 실행하기 전에 선이 표시되는 추적 모드를 활성화하십시오.
  • 대/소문자 구분 - 비교 작업 전에 모든 문자열을 소문자로 변환
  • 8진수 ⟨char⟩ / nooctl - 8진수 접두사 문자 정의(예: 8진수 % 및 rs:/BELL/:/%007/)
  • 마스크 ⟨char⟩ / nomask - 검색 문자열 내의 모든 문자와 일치하도록 마스크 문자 정의
  • cols ⟨col⟩ / nocols - 문자열 검색이 검색으로 제한된 열 창 정의

TSS 명령

이 글의 범위를 벗어나지만, 가장 일반적으로 사용되는 TSS 명령은 다음과 같았다.

  • 새로 만들기 – 새 파일(즉, 빈 파일, 편집기 작업영역 지우기)
  • 이전 – 이전 파일을 편집기 작업 영역에 가져옴
  • SAVE – 새 파일 저장(파일 이름은 존재할 수 없음)
  • RESAVE – 편집기 작업영역을 기존 파일에 다시 저장

예시 코드

이 코드는 1980년 뉴욕주 셰넥타디 635번지의 익스플로러 스카우트 팀이 작성한 TEX 기반 어드벤처 게임에서 발췌한 것이다.어드벤처 게임은 GE 타임즈해링 서비스에서 이용 가능한 몇몇 인기 있는 온라인 텍스트 기반 어드벤처 게임 중 첫 번째 게임이었다.스카우트들은 TEX를 이용하여 그들만의 모험 게임을 만들기로 결정했다.오리지널 어드벤처 게임은 두 단어의 명령을 사용하여 거대한 동굴을 항해했다.아래 나온 파서는 서쪽으로 가거나 오른쪽으로 움직이는 간단한 두 단어의 명령을 처리하여 게임에서 위치설정과 방향지향을 위한 x,y 델타로 변환하였다.

모험 구문 분석 두 단어 명령:

_ 간결성을 위해 건너뛰는 프로그램의 주체는 _ 여기서!init 및 !parser로의 반복적인 호출이 이루어진다.!init _ 텔비디오 터미널의 클리어 스크린을 강제로 내보낸다:*esc":" 클리어 프로그램 변수 rmdr=*del=0dir="n"xlocn=1 ylocn=1 return
_________________________________________________ PARSER 하위 루틴은 입력 명령을 해석하고 프로그램으로 돌아가기 전에 미리 처리하려고 시도한다._    _    !parser    qry=*cr,*lf,"-->" sntc=*null call !ask1    ergo !unkn_cmd verb=ans vdel=0 goto !$ans$_cmd    _    !walk_cmd   del=2     call !move_to  return    !run_cmd    del=4     call !move_to  return    !fly_cmd    del=6     call !move_to  return    !swim_cmd   del=2     call !move_to  return    !look_cmd   msg="mlk" call !sense_to re!listen_cmd msg="mli" call !install_cmd msg="msm" call !touch_cmd msg="mto" call !theat_cmd msg="mta" call !cast_cmd call!unkn_cmd returnurno!
!move_to call !ask3 if ans:eqs:*null goto !to_$dir$    ercall !to_same call !to_$ans$    _    !to_locn xlocn=xlocn+xdel ylocn=ylocn+ydel return    _    !to_f    !to_forward    !to_ahead    !to_same goto !to_$dir$    _    !to_b    !to_backward goto !inv_$dir$    _    !to_r    !to_right goto !rt_$dir$    _    !to_l    !to_left goto !lt_$dir$    _!inv_south    !rt_northwest    !lt_northeast    !to_n    !to_north dir="n" xdel=0 ydel=del return    _    !inv_west    !rt_northeast    !lt_southeast    !to_e    !to_east dir="e" xdel=del ydel=0 return    _    !inv_north    !rt_southeast    !lt_southwest    !to_s    !to_south dir="s" xdel=0 ydel=-del return    _    !inv_east    !rt_southwest!lt_del !to_w!to_w!to_w!to_very vdel=vdel+1 return _!to_very vdel=vdel+1 goto!to_fast del=del+vdel=0 goto!to_del=del=0 goto!to!to!to!to_del_del=vdel=vdel=0 got!to!to_del_to_del_del_do_del
!ask3 ercall!to_recall!to_usk3 ercall !to_ans$ msg=msg, call !msg return ___________________________________________________________________________________________________?" ans=*in goto !sense_it_1    msg=msg,ans call !msg return    _    _    _ _______________________________________________________________    _    !msg i=1    !msg_1 ergo !msg_end out:$(msg,i)$ i=i+1 clear $(msg,i)$ goto !msg_1    !msg_end return
_ ASK 서브루틴은 공간에 따라 당신의 단말기를 입력하여 분리한다._!mdr:eqs:*in:qry rmdr=*in sntc=*in sntc=*mdr:"인 경우!ask2.sntc=*rdr:"".sntc=*r]1 !ask3 scan:"앤sntc=*r retc=*r retc.

주사위 굴리기:

_    _    _ _______________________________________________________________    _    _ The DICE subroutine rolls the dice for you and returns the answer    _ in the variable called DICE.    _    _ Input to the DICE subroutine is via the DICE variable as shown below :    _    _     1d6 - roll the 6-sided die once    _     3d8 - roll the 8-sided die 3 times    _     d%  - roll the 100-sided die once (percentage roll)    _    !dice if dice:eqs:"d%" dice="1d100"    scan:dice:"d" i=*l j=*r dice=0        !dice_1     k=*random if j:gt:9 k=k,*random    k=k/j dice=dice+*rmdr+1    i=i-1 if i:gt:0 goto !dice_1        clear i clear j clear k     return

텔레비디오 화면 코드:

__ _ 다음과 같은 루틴을 통해 _텔레비전 950 단말기에 그림을 쉽게 그릴 수 있다._    _      xyplot—positions the cursor    _     _      gr—turns graphics mode on    _    _      nogr—turns graphics mode off    _    _      clear—clears the screen    _    _      load—used by xyplot to load the xytbl    _    !xyplot    ercall !load xytbl=xytbl    cx=(xytbl]'(x-1))']1    cy=(xytbl]'(y-1))']1    out:*ESC,"=",cy,cx,z    return    _    _    !load    xytbl=" !",/"/,"#$%&'()*+,-./"    xytbl=xytbl,"0123456789:;<=>?",*AT,"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"    xytbl=xytbl,"`abcdefghijklmnopqrstuvwxyz{ }~",*DEL    return    _    _    !gr nosubs    out:*ESC"$"은(는) $*SVMD$ 반환!nogrout:*ESC",%" 반품!삭제:*ESC":" 반환


주목할 만한 특징

TEX에서 가장 눈에 띄는 특징은 변수 값이 교차하여 실행 가능한 코드가 되도록 하는 SUBS 모드였다.그것은 프로그래머가 LISP와 같은 방식으로 나중에 TEX 표현에 사용될 새로운 변수를 즉석에서 만들 수 있도록 했다.TEX는 또한 프로그래머들이 회선 편집을 통해 즉석에서 스크립트를 작성할 수 있도록 했고, 콘텐츠를 파일로 저장해 나중에 인터페이스 통화goto 문구를 사용하여 현재 프로그램의 일부로 실행할 수 있도록 했다.그러나, 대부분의 경우, 이러한 특징들은 어드벤처 게임 파서 예에서 볼 수 있는 간단한 다이나믹 goto 문장을 코드로 제공하는 데 사용되었다.다른 종류의 인공지능이 개발할 수 있는 것은 결코 완전히 탐구되지 않았다.

즉석에서 변수를 만든 다음 이를 사용하여 인터페이스 goto를 수행하는 예.

_ x,y,z를 글로벌 변수 풀 cmd="x=1 y=2 z=3" 하위 ?cmd? 
_ 다음에는 mycat/mypgm_1_2를 수정하여 "hello world"라고 말할 수 있도록 수정하고 나중에 스크립트 old mycat/mypgm_1_2 r:*cl:/!migration_3 out:'에서 실행할 코드를 작성한다.Hello World'/mypgm_1_2 저장
_ 마지막으로 x,y,z로 요약한 다음, mypgm_1_2!label_3을 평가하는데, 어떤 인터페이스가 mycat/mypgm_?x??_y?!label_z? 


위의 TEX 프로그램은 대체, 파일 편집 및 인터페이스 gots를 통한 동적 스크립트 작성과 실행을 보여준다.실제로 프로그램 작성은 거의 하지 않았지만 프로그램 작성은 가능했다.위의 예에서 mycat/mypgm_1_2 파일은 label_3에서 "hello world"를 출력할 것이다.

참조

  • TEX 사용자 가이드(DF72) - Honeywell Information Systems, Copyright 1979
  • TEX 빠른 참조 - Honeywell Information Systems, Copyright 1979
  • 소프트웨어 카탈로그(AW15 Rev05), Honeywell Information Systems, Copyright 1979, 섹션 4 - Series 600/6000, Series 60/Level 66, 페이지 4-42 TEX Executive Processor
  • R.W.Bemer, "TEX 언어 소개 - Part I", 인터페이스 에이지 매거진 3, 8권, 144–147, 1978년 8월
  • R.W.Bemer, "TEX 언어 소개 - Part II", 인터페이스 에이지 매거진, 제3권, No. 9, 124–127, 1978년 9월
  • R.W.Bemer, "TEX 언어 소개 - Part III", 인터페이스 에이지 매거진, 제3권, 제3권, 제10권, 제126–131, 1978년 10월
  • R.W.Bemer, "TEX 기반 화면 편집기" Proc.HLSUA Forum XXXI, 1980년 10월 12일부터 15일까지 세계 최초의 반복식 풀스크린 편집기.
  1. ^ TEX 소개, 페이지 144 인터페이스 시대 - 1978년 8월
  2. ^ * 도널드 E. 크누스TeXbook(Computers and Typesetting, Volume A).매사추세츠 주의 레딩:애디슨 웨슬리, 1984년 ISBN0-201-13448-9.