UNVIS(3)

명칭
unvis, strunvis - 캐릭터의 화상 표현의 디코드

서식

프로그램 라이브러리
libc <vis.h> int unvis(char *cp, int c, int *astate, int flag) int strunvis(char *dst, const char *src)

해설
unvis() 및 strunvis() 함수는, 예를 들면 vis(3) 함수에 의해 만들기 나온 것 같은 캐릭터의 화상 표현을 디코드해 원의 형태에 되돌립니다. unvis는 c 에 있는 연속하는 캐릭터와 함께 유효한 순차 순서가 인식될 때까지 불러 나와 그것이 인식되면(자) 디코드된 캐릭터가 cp 에 의해 가리켜지는 캐릭터의 곳에 놓여집니다. strunvis는, src 에 의해 가리켜지는 캐릭터를 dst 에 의해 가리켜지는 버퍼에 디코드합니다.

strunvis() 함수는, escape sequence를 디코드하면서 단지 src (을)를 dst 에 카피해, dst 에 놓여진 캐릭터의 수를 돌려주는지, 또는 무효인 escape sequence가 검출되었을 경우에는 -1 을 돌려줍니다. dst 의 사이즈는, src 의 사이즈에 동일하지 않으면 안됩니다 (즉, 디코드중에는 확장은 일어나지 않습니다).

unvis() 함수는, 임의의 바이트 스트림을 디코드할 수 있는 스테이트 머신을 인플리맨트 하고 있습니다. 디코드되는 그 바이트에 부수 하는 모든 스테이트는, unvis() 함수의 밖에 보존될테니까 (즉, 스테이트에의 포인터는 건네받을테니까), 다른 스트림을 디코드하는 호출을 자유롭게 혼재할 수가 있습니다. 바이트 스트림의 디코드를 개시하려면 , 우선 정수를 제로에 초기화합니다. 이 정수에의 포인터 및 디코드처 캐릭터 에의 포인터와 함께 연속하는 바이트의 각각 unvis() (을)를 호출합니다. unvis() 함수는, 적절히 취급하지 않으면 안 되는 몇개의 return code를 가지고 있습니다. 그것들은 다음과 같습니다:

0 (제로)
    캐릭터가 하나 더 필요하고, 아직 아무것도 인식되고 있지 않습니다.

UNVIS_VALID
    유효한 캐릭터가 인식되어 cp 에 의해 가리켜지는 장소에 놓여져 있습니다.

UNVIS_VALIDPUSH
    유효한 캐릭터가 인식되어 cp 에 의해 가리켜지는 장소에 놓여져 있습니다. 그러나, 현재 건네받고 있는 그 캐릭터를 한번 더 건네준다 필요가 있습니다.

UNVIS_NOCHAR
    유효한 순차 순서가 검출되었지만, 캐릭터는 작성되고 있지 않습니다. 이 return code는, 캐릭터의 사이의 논리적 단락을 가리키기 위해서(때문에) 필요합니다.

UNVIS_SYNBAD
    무효인 escape sequence가 검출되었는지, 또는 디코더가 불명의 스테이트에 있습니다. 디코더는 스타트시의 스테이트에 놓여집니다.

스트림의 모든 바이트가 처리되었을 때, flag (을)를 UNVIS_END (으)로 설정해 한번 더 unvis() (을)를 호출해 남아 있는 캐릭터를 추출합니다 (건네받은 캐릭터는 무시됩니다).

다음과 같은 부분적 코드는, unvis() 의 적절한 사용법을 나타내고 있습니다.

    int state = 0;
    char out;
    while ((ch = getchar()) ! = EOF) {
    again:
    	switch(unvis(&out, ch, &state, 0)) {
    	case 0:
    	case UNVIS_NOCHAR:
    		break;
    	case UNVIS_VALID:
    		(void) putchar(out);
    		break;
    	case UNVIS_VALIDPUSH:
    		(void) putchar(out);
    		goto again;
    	case UNVIS_SYNBAD:
    		(void) fprintf(stderr, "bad sequence! \n");
    	exit(1);
    	}
    }
    if (unvis(&out, (char) 0, &state, UNVIS_END) == UNVIS_VALID)
    	(void) putchar(out);

관련 항목
vis(1)

역사
unvis() 함수는, 4.4BSD 그리고 처음 등장했습니다.