안시 문자열로 인한 공백

2007.04.12 11:45

그리움 조회 수:193 추천:62

제 목:[무한] 안시 문자열로 인한 공백 생김 방지
올린이:쿨러453 (이기한 ) 99/02/11 02:27 읽음: 92 관련자료 없음
-----------------------------------------------------------------------------
안시로 인해서 잡담이나 소지품 리스트에 불필요한 공백이 생기는 문제를 고친
것입니다. misc.c 의 delimit() 함수.

/************************************************************************/
/* delimit */
/************************************************************************/

/* This function takes a given string, and if it is greater than a given*/
/* number of characters, then it is split up into several lines. This */
/* is done by replacing spaces with carriage returns before the end of */
/* the line. */

/* ANSI 문자열로 인하여 정렬이 제대로 되지 않던 문제 고침 -- by beagle */
#define MAXLINE 77

void delimit(str)
char *str;
{
       int i, j, l, len, lastspace;
       char str2[2048];
       int sublen, isansistr; /* 변수 추가 */

       str2[0] = 0;
       j = (str) ? strlen(str) : 0;
       if(j < MAXLINE)
               return;
                            
       len = 0; lastspace = -1; l = 0;
       sublen = 0; isansistr = 0; /* 변수 초기화 */

       for(i=0; i                 if(str[i] == ' ') {
                       lastspace = i;
                       sublen = 0; /* 공백을 만나면 sublen 초기화 */
               }
               if(str[i] == '\n') {
                       len = 0;
                       lastspace = -1;
                       sublen = 0; /* 개행되면 sublen 초기화 */
               }
                      
               /* ANSI 시작 부분인지 검사 */
               if (str[i] == '\x1B' && str[i + 1] == '[')
                       isansistr = 1;

               /* ANSI 부분이라면 문자열 길이에서 제외 */
               if (!isansistr) {
                       len++;
                       sublen++;
               }

               /* ANSI 끝나는 부분 검사 */
               if (isansistr && isalpha (str[i]))
                       isansistr = 0;
                                    
               /* MAXLINE 보다 길이가 커지면 개행함 */
               if(len > MAXLINE && lastspace > -1) {
                       str[lastspace] = 0;
                       strcat(str2, &str[l]);
                       strcat(str2, "\n ");
                       l = lastspace + 1;
                       len = sublen + 2; /* 다음 줄의 길이 초기화 */
                       lastspace = -1;
               }
       }
       strcat(str2, &str[l]);
       strcpy(str, str2);
}
                

홈지기 "그륨"


XE Login