Các chương trình bảng điều khiển thường sử dụng các lời nguyền hoặc một trong những người kế nhiệm của nó để xây dựng các loại giao diện người dùng văn bản mà bạn đang nói đến.
Các thư viện này sử dụng một trong hai cơ sở dữ liệu, được gọi termcap
và terminfo
.² Các cơ sở dữ liệu này chứa các bản đồ cho thư viện biết mã nào sẽ gửi để nhận các hành động mong muốn với số lượng lớn các loại thiết bị đầu cuối đa dạng. Phần lớn các loại thiết bị đầu cuối mà bạn sẽ tìm thấy được xác định trong các cơ sở dữ liệu này đã không tồn tại qua thời của các thiết bị đầu cuối thực sự và vì vậy giờ chỉ còn là mối quan tâm lịch sử.
Thiết bị đầu cuối ANSI
Trình giả lập thiết bị đầu cuối Unix hiện đại - sử dụng giao thức ANSI X3.64 hoặc một trong các biến thể sau này của nó:
ANSI X3.64 : Một tiêu chuẩn để kiểm soát "thiết bị đầu cuối thủy tinh" - trái ngược với teletypes - nó dựa trên các chuỗi ký tự đặc biệt mà thiết bị đầu cuối từ xa diễn giải. Chẳng hạn, nếu hộp Unix muốn báo cho thiết bị đầu cuối tương thích ANSI X3.64 di chuyển con trỏ đến góc trên bên trái của màn hình, nó sẽ gửi các ký tựESC
[
1
;
1
H
. Hai ký tự đầu tiên báo cho thiết bị đầu cuối mong đợi một chuỗi điều khiển, 1s là hàng và cột vàH
là lệnh có nghĩa là "di chuyển con trỏ" .⁴
Thông tin bên lề: nhiều PC BBS cũng sử dụng mã ANSI. ( Vẫn làm , thực sự.)
DEC VT100 : Thiết bị đầu cuối bằng kính tương thích ANSI thực sự phổ biến đầu tiên là VT100 của Digital Equipment Corporation. Bằng cách chứng minh tiêu chuẩn de jure của ANSI trên thị trường, nó đã thiết lập một tiêu chuẩn thực tế vẫn còn quan trọng cho đến ngày nay.
Đôi khi bạn thấy giao thức này được gọi là giao thức VT102, là phiên bản giảm chi phí sau này - và do đó phổ biến hơn - phiên bản VT100 cộng với tất cả các tùy chọn mở rộng có sẵn.
Các giao thức đầu cuối DEC là một chuỗi tương thích ngược, mở rộng từ mô hình tương thích ANSI đầu tiên được giới thiệu vào năm 1978 (VT100) cho đến các mô hình loạt VT500 do Boundless Technologies sản xuất sau khi họ mua doanh nghiệp đầu cuối từ DEC năm 1995. (Boundless là bây giờ đã ngừng hoạt động, nhưng các thiết bị đầu cuối của họ vẫn thỉnh thoảng xuất hiện trên thị trường đã sử dụng.)
xterm : Một loại hỗn hợp của ANSI và VT - bất cứ tiêu chuẩn nào. Bất cứ khi nào bạn đang sử dụng trình giả lập thiết bị đầu cuối GUI nhưxterm
hoặc một trong các công cụ phái sinh của nó, bạn cũng thường sử dụngxterm
giao thức đầu cuối, điển hình là cácbiến thểxterm-color
hoặchiện đại hơnxterm-color256
.
Linux : Bảng điều khiển Linux cũng sử dụng một biến thể mở rộng của giao thức đầu cuối ANSI, cùng tinh thần với cácxterm
giao thức. Hầu hết các phần mở rộng của nó phải làm với sự khác biệt giữa PC và thiết bị đầu cuối bằng kính. Ví dụ, bàn phím IBM có một số phím không nằm trên DEC VT - bất cứ điều gì. (Và ngược lại.)
Một số hệ thống Unix cũng có giao thức đầu cuối giao diện điều khiển riêng. Chẳng scoansi
hạn, có biến thể ANSI X3.64 cho SCO Unixes.
Một chương trình giả lập thiết bị đầu cuối điển hình là một cái gì đó của một người họ hàng và không mô phỏng chính xác bất kỳ mô hình thiết bị đầu cuối nào. Nó có thể hỗ trợ 96% tất cả các chuỗi thoát của VT VT thông qua VT320, nhưng cũng hỗ trợ các tiện ích mở rộng như màu ANSI (tính năng VT525) và số lượng hàng và cột tùy ý. 4% mã mà nó không hiểu có thể không bị bỏ lỡ nếu các chương trình của bạn không cần các tính năng đó, mặc dù bạn đã nói curses
(hoặc bất cứ điều gì) rằng bạn muốn các chương trình sử dụng nó sử dụng giao thức VT320. Một chương trình như vậy có thể tự quảng cáo là tương thích VT320, sau đó, mặc dù, nói đúng ra là không.
Thiết bị đầu cuối không phải là ANSI
Có một vài tiêu chuẩn đáng chú ý khác mà đôi khi bạn vẫn bắt gặp:
Wyse : Một trong những nhà sản xuất thiết bị đầu cuối thủy tinh độc lập sớm nhất, Wyse bắt đầu sản xuất thiết bị đầu cuối vào đầu những năm 1980 trước khi máy tính máy trạm bắt đầu thay thế máy tính mini. Mặc dù các thiết bị đầu cuối Wyse có thể mô phỏng VT100 và các giao thức đầu cuối phổ biến khác, chúng cũng có mã riêng.
IBM 3270 : Mặc dù đây không hoàn toàn là loại thiết bị đầu cuối "Unix", nhưng nhu cầu kết nối các hệ thống Unix với các máy tính lớn của IBM đã dẫn đến việc tạo ra các chương trình giả lập thiết bị đầu cuối sê-ri 3270 mà bạn vẫn có thể sử dụng. Các trình giả lập cho cácthiết bị đầu cuối dòng 5250 của IBM sau nàycũng khá phổ biến, thường được sử dụng nhiều nhất vào những ngày này để kết nối với cácmáy tính mini AS / 400 và System i .
Tektronix 4014 : Trước khi PC và máy trạm thay thế phần lớn các thiết bị đầu cuối bằng kính và do đó biến đồ họa bitmap thành một tính năng tiêu chuẩn, có các thiết bị đầu cuối đồ họa đắt tiền đã vẽ đồ họa trên màn hình để đáp ứng các lệnh văn bản tương tự như các chuỗi thoát được mô tả ở trên. Có lẽ phổ biến nhất trong số này là loạt Tektronix 4010.
Chúng khá thú vị khi sử dụng. Bạn có thể viết một chương trình vẽ đồ họa, nhưng sau đó thay vì chỉ đơn giản là chạy nó để vẽ trên thiết bị đầu cuối cục bộ của bạn, bạn có thể chuyển hướng đầu ra của nó sang một tệp:
$ ./my4014program > my-neat-graphic
Sau đó, bạn có thể gửi tệp đó cho người khác và họ có thể gửi cat
nó trên thiết bị đầu cuối Tek của họ để xem đồ họa mà không cần có chương trình của bạn. Một phần của sự quyến rũ là cách các thiết bị đầu cuối này được vẽ chậm như thế nào, vì vậy bạn có thể xem đồ họa tích tụ trong vài giây.
Làm việc với Thi đua thiết bị đầu cuối Unix ngày hôm nay
Bạn có thể tìm ra tiêu chuẩn thiết bị đầu cuối nào bạn yêu cầu các thư viện muốn curses
sử dụng bằng cách xem TERM
biến môi trường:
$ echo $TERM
xterm-color
Khi bạn ssh
đến một hệ thống khác, TERM
biến được mang theo để hộp Unix từ xa biết cách giao tiếp với thiết bị đầu cuối cục bộ của bạn.
Bởi vì rất nhiều trong số các giao thức này là các biến thể ANSI X3.64 và do các tiêu chuẩn mã hóa ký tự ASCII và UTF-8 có mặt khắp nơi rất quan trọng, nên một TERM
biến không chính xác thường không phải là thảm họa. Những thứ có xu hướng bị phá vỡ là các phím mở rộng như Home và Page Up, Alt - bất kỳ tổ hợp phím nào và các tính năng hiển thị chính tả như màu sắc, chữ đậm, v.v.
Chú thích:
Thông thường nhất, ncurses .
Ngoài ra còn có các đối thủ cạnh tranh hoàn toàn với curses
API, chẳng hạn như S-Lang .
AT & T ban hành terminfo
thay thế cho termcap
cơ sở dữ liệu của BSD và phần lớn đã thành công trong việc thay thế nó, nhưng vẫn có những chương trình vẫn sử dụng termcap
cơ sở dữ liệu cũ . Đây là một trong nhiều điểm khác biệt giữa BSD và AT & T mà bạn vẫn có thể tìm thấy trên các hệ thống hiện đại.
Hộp macOS của tôi không có /etc/termcap
, nhưng nó có /usr/share/terminfo
, trong khi cài đặt FreeBSD tiêu chuẩn thì ngược lại, mặc dù hai hệ điều hành này thường khá giống nhau ở cấp dòng lệnh.
minicom
, xterm
, mintty
, GNOME ga , Terminal.app vv
Các chương trình Unix được viết đúng cách không trực tiếp phát ra các chuỗi thoát này . Thay vào đó, họ sử dụng một trong các thư viện được đề cập ở trên, bảo nó "di chuyển con trỏ đến vị trí (1,1)" hoặc bất cứ điều gì, và thư viện phát ra các mã điều khiển đầu cuối cần thiết dựa trên TERM
cài đặt biến môi trường của bạn . Điều này cho phép chương trình hoạt động chính xác cho dù bạn chạy loại thiết bị đầu cuối nào.
Các thiết bị đầu cuối văn bản cũ có rất nhiều tính năng lạ không được các chương trình sử dụng nhiều, vì vậy nhiều chương trình giả lập thiết bị đầu cuối phổ biến chỉ đơn giản là không thực hiện các tính năng này. Thiếu sót phổ biến là hỗ trợ cho đồ họa Sixel và chế độ văn bản hai chiều rộng / gấp đôi chiều cao.
Người duy trì xterm
đã viết một chương trình được gọi vttest
để thử nghiệm các trình giả lập thiết bị đầu cuối VT như xterm
. Bạn có thể chạy nó với các trình giả lập thiết bị đầu cuối khác để tìm ra những tính năng mà chúng không hỗ trợ.