터미널 비정규모드에서 백스페이스 ERASE 구현?

beeswing의 이미지

안녕하세요?

아래 탭키, 방향키 질문 했던 사람입니다.~~

답변에 너무 감사하구요~~

termios.h 를 이용한

비정규모드에서 백스페이스를 어떻게 구현할까요?

한문자씩입력받기 때문에, 백스페이스가 안 먹어서 따로 구현해줘야 할 것 같은데요....

꽁수 부탁드립니다~~~

yeppiguy의 이미지

ㅎㅎ 결국은 소스가 스스히 폭로가 되네요...
비정규모드로 동작할때 가급적이면 ECHO OFF하시야 이런 부분을 원활하게 처리할 수 있습니다. 주의하실건 ascii 문자일경우에 한해서, 유저 프로그램에서 입력받은 문자를 다시 출력하는 걸 추가하셔야 할 겁니다.

아래 코드에서 백스페이스와 DEL키에 대한 처리 부분입니다.
if문 아래에서 입력받은 문자열의 가장 최근걸 지우는 거 빠뜨리지 마시구요.
입력받은 문자가 하나도 없는 상태에서 백스페이스나 DEL키를 입력받으면, 저는 벨 소리를 울려줬답니다.

도움이 되시길...

        else if(ch == 0x08 || ch == 0x7f)   /*  bs or del   */
        {
            if(pWindow->nRecvCount)
            {
                pWindow->PutChar(0x08); pWindow->PutChar(' ');
                pWindow->PutChar(0x08);
                pWindow->nRecvCount--;
                pWindow->szRecvData[pWindow->nRecvCount] = '\0';
            }
            else
                pWindow->PutChar(0x07);     /*  print bell  */
        }
        else if(isascii(ch))    
            MWIN_OnChar(pWindow, ch);