문제

나는 간단한 콘솔 앱을 사용하여 다시 저주로 발을 적시게합니다. XP에서 AIX로 앱을 포팅하는 데 약간의 문제가 있습니다. 다음은 코드의 샘플 덩어리입니다.

int main(void)
{
    WINDOW *_window = initscr(); 
    int _rows;
    int _cols;

    cbreak();

    /* Accept all keys */ 
    keypad(_window, true);

    /* Don't echo things that are typed */ 
    noecho();

    /* Get the screen dimensions */ 
    getmaxyx(_window, _rows, _cols);

    /* Don't display cursor */ 
    curs_set(0);

    for (;;)
    {
        printw("Press a Key ");
        refresh();
        int key = wgetch(_window);
        printw("%d \n", key);
    }

    endwin();

    return 0;
}

XP에서 이것을 실행하면 다운 arrow에서 다음 출력을 받고 Ctrl-downarrow가 이어집니다.

Press a Key 258
Press a Key 481
Press a Key

258을 제안하는 것은 다운 화살표의 코드이고 Ctrl 다운 화살표의 경우 481입니다.

AIX에서 동일한 테스트를 수행합니다.

Press a Key 1858
Press a Key 27
Press a Key 79
Press a Key 66
Press a Key

1858은 아래쪽 화살표이고 27/29/66은 Ctrl 다운 화살표에 대한 응답입니다. 나는 27/29/66이 아마도 표준 탈출 시퀀스 중 하나라는 것을 알고 있습니다. 나는 저주가 그것을 단일 값으로 매핑하기를 바랐다. XP쪽에는 curses.h 파일에 ctl_down이 정의되어 있습니다. AIX 측은 그렇지 않습니다.

그래서 여기 내 질문은입니다

그것들은 내가 여기서 놓친 약간의 주문입니까? 그것은 그 세 캐릭터가 멋진 독특한 정수에 마술처럼 매핑 할 것입니까? 아니면 플랫폼 특정 키 스트로크를 숨겨서 내 실제 앱을 사용할 수있는 것으로 처리하려면 어떤 종류의 클래스를 작성해야합니까?

내 눈은 AIX 온라인 물건을 검색하여 피를 흘렸다. 나를 올바른 방향으로 가리키는 데 도움이 될 것입니다.

다른 임의의 정보

최신 서비스 팩 MSVC 6, 서비스 팩 6과 함께 XP Pro를 운영하고 있습니다. Curses 라이브러리는 PDCurses입니다.

다른 컴파일러는 IBM XL C/C ++ Enterprise Edition V8.0입니다.

xlc ++ -g app.cpp -lcurses

PC에서 PDCurses33을 사용하고 AIX의 원시 저주를 사용하고 있습니다.

도움이 되었습니까?

해결책 2

Re : [pdcurses] alt + shift + n (예 : Windows)

LM Fri, 2002 년 7 월 12 일 08:13:53 -0700

2002 년 7 월 7 일 오후 6:10:00, Jeremy Smith는 다음과 같이 썼습니다.

나는 약간의 문제가 발생했습니다. 'n'또는 alt+'n'과 같은 키에 대한 Curses function getch ()를 사용하지만 다음 조합을 어떻게 감지합니까?

ctrl+n Alt+Shift+n Ctrl+alt+n ctrl+alt+shift+n

Shift+Alt+2를 실제 키 코드 (Shift, Alt 또는 2와 다름)로 반환하려면 일종의 플래그가 있어야한다고 생각하지만 방법을 모르겠습니다. :-(

Curses.h 파일의 헤더를 확인했으며 일부 ALT 조합 및 몇 가지 제어 조합을 포함하여 키보드에서 돌아올 수있는 모든 표준 스캔 코드를 나열하는 것으로 보입니다.

그런 다음 캐릭터를 얻기 위해 Windows 구현을 확인했습니다. PDCKBD.C에서 일상적인 Win32_KBHIT는 readConsoleInput을 호출합니다. Shift, Alt, Control 및 기타 상태 키는 DWControlkeyState 의이 함수에서 반환됩니다. PDC_GET_BIOS_KEY는 두 개의 KPTAB 테이블 (KPTAB 및 EXT_KPTAB)을 사용하여 어떤 키를 누르는 지보고하므로 조합이 테이블에 있지 않으면 아마 보지 못할 것입니다. 무언가 누락 된 경우 테이블에 일부 정의를 추가 할 수 있습니다. 동일한 루틴에는 상태 (button_shift, button_control, button_alt)를 설정하는 코드도 있지만 마우스 입력 용으로 보입니다. 따라서 Mouse_status 구조에서 이러한 키를 확인할 수 있습니다. 이는 Windows 구현에만 해당됩니다. 모든 플랫폼에는 어떤 키를 누르는 지 파악하는 독특한 방법이 있습니다.

16 비트 DOS에서 HEX 417 주소에서 설정을 변경하여 시프트 상태, 캡 잠금 및 NUM 잠금 상태를 변경했습니다. 이것은 실제 모드 프로그램에만 적용됩니다. 많은 새로운 Windows 컴파일러는 더 이상 기능으로 바이오스 또는 메모리에 직접 액세스 할 수 없습니다. HEX 417 및 HEX 418의 16 비트 위치는 417 주소 인 왼쪽 시프트에서 가장 높은 비트를 설정하여 올바른 시프트를 눌렀음을 나타냅니다. 그리고 그 후 다음으로 가장 높은 ALT 키. 418 주소는 오른쪽 또는 왼쪽 ALT 및 제어 키가 누락되었는지 여부의 상태를 유지합니다.

원하는 것을 정확하게 얻기 위해 특정 버전의 저주를 수정해야 할 수도 있습니다. Curses는 매우 휴대용 사용자 인터페이스이므로 일부 플랫폼에서 가장 낮은 공통 분모를 지원합니다.

그건 그렇고, 나는 국제 캐릭터 지원이 포함 된 새로운 Curses 표준에 대한 작업이 진행되었다는 것을 읽은 것을 기억합니다. 이 노력에 대해 더 이상 들어 본 사람이 있습니까?

최고의 소원.

로라 마이클스http://www.distasis.com

내 키보드 디코딩을 해야하는 것 같습니다.

다른 팁

IBM 특정 하드웨어 및 소프트웨어 라이브러리에 크게 조정 된 AIX 제공 라이브러리 대신 오픈 소스 "NCURSES"라이브러리를 사용해 볼 수 있습니다.

XLC 호환 버전이 있는지 정확히 기억할 수 없으므로 소스에서 라이브러리를 빌드하거나 'GCC'로 전환해야 할 수도 있습니다. Thier는 또한 Windows 용 NCurses 버전이므로 원래 버전의 코드 버전으로 변경할 수 있습니다.

컨트롤 키의 숫자보다는 UP_ARROW 등과 같은 논리적 이름을 지원하는 NCURSE의 VAUGE 메모리가 있습니다. 플랫폼, 터미널 에뮬레이션, NLS 설정 등의 문제는 간단한 화살표가 'up_arrow', 'esc_up', 'cntrl_k'로 돌아올 수 있습니다.

나는 마지막으로 몇 개의 키 스트로크를 하나의 논리적 '의도' 'se-up'와 같은 하나의 논리적 '의도'에 매핑하는 것을 기억합니다. 마지막으로 다른 플랫폼에 대한 Curses 애플리케이션을 포트해야 할 때 (그리고 그것은 Solaris 포트와 관련이있는 AIX였습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top