2011-04-23 8 views
1

학기 중 긴 수업 프로젝트의 일환으로 모델 기차 시스템을 프로그래밍하고 있습니다. 여기에는 현재 상태를보기위한 모니터 인터페이스와 시스템 명령에 대한 키보드 입력이 있습니다. 키보드 입력을받을 때 우리는 키보드 입력을 표시하지 않아야합니다.키보드에서 문자를 입력하지 않는 방법

입력을 화면에 표시하지 않도록 설정하는 방법이나 키보드 스트림에서 입력을 가져 오는 방법은 있습니까?

현재 Ada.Text_IO 패키지를 사용하고 Get 및 Get_Immediate로 테스트했습니다.

추가

우리는 리눅스 시스템 용으로 개발하지 않습니다. 기본적으로 독립 실행 형 터미널이라고 할 수있는 것에 대해 MaRTE_OS를 개발 중입니다. 이 시스템은 수십 개의 하드웨어 보드에 연결되어 있으며, 대부분의 하드웨어 보드는 내가 보지 못했거나 그들이 무엇을 위해 있는지 알려줄 수도 있습니다.

모니터의 경우 화면이 자주 업데이트되며 시스템의 일부에서 정보가 새로 고쳐집니다 (0.05 초 정도 새로 고침). 정보를 표시하지 않으려 고 시도한 다음 다시 한 줄 위로 이동하려고 시도 할 여지가 없습니다 (한 번에 한 줄씩 실제로 인쇄되는 것도 없습니다. 디스플레이 클래스는 화면에 표시된 열, 행에 바로 필요한 것을 인쇄합니다) .

입력이 사용자가 입력을 검토 할 필요가 없습니다. 시스템에서 입력을 읽고 처리해야 할 명령을 생성해야합니다 (입력에 오류가있는 명령이 있고 아무 것도 수행하지 않습니다). 시스템이 대기 상태로 다시 돌아갈 수 있도록합니다).

답변

2

먼저 요구 사항을 확인합니다. 나는 명령을 반복하지 않는 것을 볼 수 있지만 에코를 취소하는 것은 약간의 사용자 적대적인 것처럼 보입니다. 또는 콘솔에서 VT100 ANSI Escape Sequences을 지원하는 경우 clear line 코드 중 하나를 사용할 수 있습니다. trashgods 제안에

2

건물 :

with Ada.Text_Io; 
with Ada.Characters.Latin_1; 

procedure Bsmain is 
    Achar : Character := ' '; 
    Escape: Character renames Ada.Characters.Latin_1.ESC; 
begin 
    Ada.Text_Io.Put (Escape & "[8m"); -- invisible text mode 
    while Achar /= 'q' loop -- q=quit 
     Ada.Text_Io.Get (Achar); 
     Ada.Text_Io.Put (Escape & "[1A"); -- move cursor back up a line 
    end loop; 
    Ada.Text_Io.Put (Escape & "[m"); -- restore back to normal text mode 
end Bsmain; 
+0

+1 좋은 예 – trashgod

3

나는 에이다를 모르겠지만, 당신은 유닉스 시스템에서 다음 명령을 실행할 수 있습니다 stty -echostty -noecho을. 그들은 에코 모드를 토글합니다. 나는 이것을 여러 언어로 사용하며 항상 효과가있다.

관련 문제