Câu hỏi trình tự lệnh DEC ANSI; chuyển động con trỏ


8

Vì vậy, tôi đang viết một mô phỏng thiết bị đầu cuối (tôi biết, tôi chỉ nên biên dịch putty, v.v.) và đang ở giai đoạn tìm hiểu thông qua vttest để đảm bảo đúng. Bây giờ tôi đang dựa trên VT102 nhưng sẽ thêm các tính năng đầu cuối sau này như màu sắc khi các điều cơ bản hoạt động tốt.

Bộ lệnh chủ yếu là ANSI. DEC có bộ lệnh riêng của họ nhưng hỗ trợ các lệnh ANSI từ khoảng năm 1973. Hiện tại các tiêu chuẩn ANSI đó không có sẵn nhưng tương đương với ECMA, tôi có chúng (ECMA-48 có vẻ phù hợp nhất) nhưng không trả lời câu hỏi này cho đến khi tôi có thể thấy. Hầu hết các chuỗi lệnh ANSI bắt đầu với ESC. Nhiều lệnh bắt đầu bằng mã định danh chuỗi lệnh được hiển thị ở đây là CSI và được biểu thị trong dữ liệu là 0x1c 0x5b (ESC [) hoặc 0xdb nếu có thể giao tiếp 8 bit. Sau đó theo một chuỗi xác định lệnh. Một số lệnh ảnh hưởng đến vị trí con trỏ, một số màn hình, một số kích thích phản hồi cho máy chủ và vv.

Một số lệnh đầu cuối bao gồm một đối số số. Ví dụ CSI 10 ; 5 Hcó nghĩa là tạo vị trí con trỏ hàng 10, cột 5. Khi thiếu đối số số, có một giá trị mặc định để sử dụng: CSI 10 ; Hcó nghĩa là tạo vị trí con trỏ hàng 10, cột 1 vì 1 là giá trị mặc định khi không đưa ra đối số.

Tôi có hướng dẫn vt102 từ vt100.net (tài nguyên tuyệt vời) và khoảng một chục trang cung cấp thông tin một phần về các chuỗi lệnh này. Rõ ràng thông số kỹ thuật cuối cùng của Phúc âm DEC chưa bao giờ được đưa ra khỏi DEC.

Điều rõ ràng là CSI Cdi chuyển con trỏ sang phải và giá trị mặc định là 1.

Những gì không rõ ràng là ý nghĩa của CSI 0 C.

Tại sao có số 0 ở đó, nó dường như làm cho lệnh không làm gì? Nếu nó có nghĩa là "sử dụng giá trị mặc định" thì nó có thể đã được gửi là 1 thay vào đó, nhưng chuỗi ngắn hơn sẽ không có đối số và dựa vào giá trị mặc định được hiểu là 1. Các thiết bị đầu cuối VT vật lý thực tế này thường được sử dụng ở mức 300 baud và thấp hơn nên một ký tự có vấn đề!

Tôi không quá tiến bộ với vttest đến nỗi tôi có thể thử cả hai cách và xem điều gì làm cho mọi thứ trở nên hoàn hảo nhưng tôi đủ xa để những câu hỏi nhỏ như thế này bắt đầu quan trọng.


2
Thuật ngữ lưu ý: CSI là esc- [, có thể được mã hóa dưới dạng chuỗi hai ký tự ESC [hoặc như [với tập bit thứ 8. (Một số kiểu máy chỉ có thể hỗ trợ ESC [) Tôi không biết những gì CSI 0 Cđã làm trên vt102; trên xterm nó tương đương với CSI 1 C. Tôi nghi ngờ, nhưng không biết chắc chắn rằng 0 và sự vắng mặt của một giá trị được phân tích cú pháp giống hệt nhau tại một số điểm (nghĩ atoi). Bạn đã tìm kiếm ý kiến ​​trong nguồn xterm?
Gilles 'SO- ngừng trở nên xấu xa'

Hoàn toàn chính xác, cảm ơn vì đã chỉnh sửa và mong đợi tôi sẽ cần xem xét một số nguồn để có thêm manh mối.
Adam Eberbach

Câu trả lời:


4

Tôi đã liên lạc với Thomas Dickey (vô hình-island.net), người duy trì xterm và vttest - anh ấy giải thích điều đó CSI 0 Cgiống như CSI 1 Choặc CSI Ctrong xterm.

Đối với bất kỳ ai đang tìm kiếm thêm thông tin về lập trình thiết bị đầu cuối, tôi khuyên bạn nên kiểm tra nguồn xterm mà anh ta lưu trữ - cụ thể là ctlseqs.txt bên trong xterm, trông rất giống với một tham chiếu trình tự điều khiển thiết bị đầu cuối thực sự mà tôi đang tìm kiếm.


Tệp nguồn này hữu ích cho tôi để tìm mã CSI là gì; thông tin về CSI được biểu diễn dưới dạng byte 0x9b từ ctlseqs.txt được đề cập có vẻ sai, thực tế là 0x1b
Hi-Angel

1

Tại sao khả năng tương thích mã cứng cho một loại thiết bị đầu cuối cụ thể khi bạn đã có cơ sở dữ liệu ánh xạ chức năng đến các chuỗi mã cụ thể cho nhiều thiết bị đầu cuối khác nhau? (cơ sở dữ liệu terminfo thường ở / usr / share và được bao gồm trong hầu hết các bản phân phối của ncurses). Bất kỳ tài nguyên về lời nguyền nào cũng nên giải thích cách các chức năng này được dán nhãn.

Lưu ý rằng các tệp terminfo thường được biên dịch (sử dụng tic) vì vậy bạn có thể phải đào một chút để tìm các tệp nguồn terminfo.

Xem thêm http://tldp.org/HOWTO/Text-Terminal-HOWTO.html#toc16 (có một liên kết trong một kho chứa các tệp terminfo.src)


Thiết bị tôi đang đặt thiết bị đầu cuối trên không có terminfo hoặc ncurses, và viết một mô phỏng thiết bị đầu cuối cụ thể dường như là cách tốt nhất để có được netback để chạy trên nó. Đã có nethacks cho iPad nhưng tôi chỉ muốn có thể chơi nó bằng bàn phím ở chế độ DECgraphics chứ không phải bất kỳ GUI nào có sơ đồ điều khiển cảm ứng như tất cả chúng đều có. Tôi không hy vọng điều này sẽ khiến cả thế giới rực cháy nhưng đó là cách tôi muốn chơi nethack.
Adam Eberbach

1
Không - Tôi không nói rằng nên có một mục trong terminfo cho phần cứng của bạn - SILL có một mục cho VT102 mặc dù mô tả tất cả các chuỗi lệnh mà nethack hoặc bất kỳ ứng dụng dựa trên lời nguyền nào khác sẽ sử dụng.
symcbean

Ah, cảm ơn - đó sẽ là một tài liệu tham khảo nhỏ gọn tốt.
Adam Eberbach
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.