노무현 대통령 배너

한글 조사 처리

기본적으로 맨 마지막 글자를 보고
받침이 붙느냐 안붙느냐를 처리하게 되는데,

일단 쓰여있는 방법은

http://winp.egloos.com/1917711
http://ttongfly.net/zbxe/?document_srl=45333

걍 맨 뒷글자를 일일히 확인하는 방법이다.


그런데 뒤에 있는 문서의 글자 목록을 뺀어서 다음과 같은 코드로 확인해보았더니..

#include <stdio.h>
#include <tchar.h>
#include <vector>
#include <algorithm>

using namespace std;

int wmain()
{
    FILE * fp=_wfopen(L"Table.txt",L"wt,ccs=UTF-16LE");
    wstring wstrList=L"가갸거겨고교구규그기개걔게계과괘궈궤괴귀긔까꺄꺼껴꼬꾜꾸뀨끄끼깨꺠께꼐꽈꽤꿔꿰꾀뀌끠나냐너녀노뇨누뉴느니내냬네녜놔놰눠눼뇌뉘늬다댜더뎌도됴두듀드디대댸데뎨돠돼둬뒈되뒤듸따땨떠뗘또뚀뚜뜌뜨띠때떄떼뗴똬뙈뚸뛔뙤뛰띄라랴러려로료루류르리래럐레례롸뢔뤄뤠뢰뤼릐마먀머며모묘무뮤므미매먜메몌뫄뫠뭐뭬뫼뮈믜바뱌버벼보뵤부뷰브비배뱨베볘봐봬붜붸뵈뷔븨빠뺘뻐뼈뽀뾰뿌쀼쁘삐빼뺴뻬뼤뽜뽸뿨쀄뾔쀠쁴사샤서셔소쇼수슈스시새섀세셰솨쇄숴쉐쇠쉬싀싸쌰써쎠쏘쑈쑤쓔쓰씨쌔썌쎄쎼쏴쐐쒀쒜쐬쒸씌아야어여오요우유으이애얘에예와왜워웨외위의자쟈저져조죠주쥬즈지재쟤제졔좌좨줘줴죄쥐즤짜쨔쩌쪄쪼쬬쭈쮸쯔찌째쨰쩨쪠쫘쫴쭤쮀쬐쮜쯰차챠처쳐초쵸추츄츠치채챼체쳬촤쵀춰췌최취츼카캬커켜코쿄쿠큐크키캐컈케켸콰쾌쿼퀘쾨퀴킈타탸터텨토툐투튜트티태턔테톄톼퇘퉈퉤퇴튀틔파퍄퍼펴포표푸퓨프피패퍠페폐퐈퐤풔풰푀퓌픠하햐허혀호효후휴흐히해햬헤혜화홰훠훼회휘희";
    sort(wstrList.begin(),wstrList.end());
    wchar_t wcBase=wstrList[0];
    wstring::iterator iterList=wstrList.begin();
    while(iterList!=wstrList.end())
    {
        fwprintf(fp,L"%c 0x%04X %5d %3d\n",*iterList,*iterList,*iterList,(*iterList)-wcBase);
        wcBase=*iterList;
        iterList++;
    }
    fclose(fp);
    return 0;
}


UTF16-LE에서는 저 글자들이 모두 28씩 차이가 난다는 것을 발견했다 -_-;;

그래서 2번째 페이지에 나온 구분 함수를 개량한 버전이...

bool Has3rdCh(wstring * pstrText)
{
    if(pstrText->length()==0)
        return false;

    bool bRet=false;
    wchar_t wcLast=*(pstrText->end()-1);
    wchar_t wszLast[2]={wcLast,L'\0'};
    if(wcLast<=0x0080)
    {
        if(wcLast>=L'A'&&wcLast<=L'Z')
            wcLast=wcLast-'A'+'a';
        switch(wcLast)
        {
        case L'm':
        case L'n':
        case L'l':
        case L'c':
        case L'M':
        case L'N':
        case L'L':
        case L'C':
        case L'1':
        case L'3':
        case L'6':
        case L'7':
        case L'8':
        case L'0':
            bRet=true;
            break;
        default:
            if(pstrText->length()>=2)
            {
                wchar_t wc2nd = *(pstrText->end()-2);
                if(wc2nd>0x80)
                    break;

                if(wc2nd>=L'A'&&wc2nd<=L'Z')
                    wc2nd=wcLast-'A'+'a';
                if(wc2nd==L'n'&&wcLast==L'g')
                    bRet=true;
                else if(wc2nd==L'c'&&wcLast==L'k')
                    bRet=true;
                else if(wc2nd==L'r'&&wcLast==L'g')
                    bRet=true;
                else if(wc2nd==L'l'&&wcLast==L'e')
                    bRet=true;
                else if(wc2nd==L'n'&&wcLast==L'e')
                    bRet=true;
            }
            break;
        }
    }
    else if(wcLast>=0xAC00&&wcLast<0xD7B0)
    {
        if((wcLast-0xAC00)%28!=0)
            bRet=true;
    }

    return bRet;
}

대강 요렇다
(wstring 클래스를 사용하니 #include <string> 필수)
영어도 약간 처리가 되는 정도인데,
뭐 이 이상을 쓸일 없을듯 하니 걍 놔둘 생각

by Hide_D | 2009/05/23 19:58 | 컴질 - 프로그래밍 | 트랙백

Windows 7 에서 탐색기 초기 위치를 '컴퓨터'로 변경하기.

스누피님의 블루그에 있는
http://snoopy.textcube.com/765 (윈도우 7 작업표시줄 윈도우 탐색기 내컴퓨터 지정)
의 댓글을 인용해서 글을 작성합니다.

--------------------------------------

이래저래 슈퍼바(새로운 작업표시줄)에 대해서 흡족하게 쓰고 있는데

꼭 아쉬운게, 탐색기의 초기 시작 위치가 '라이브러리'라는 점입니다.

이것을 컴퓨터로 바꾸는 간단한 방법이 있습니다.


작업표시줄의 탐색기에 우클릭 -> Windows 탐색기 에 또 우클릭 -> 속성 클릭
대상을

%windir%\explorer.exe /e,
요렇게 바꿔주면.

앞으로는 내 컴퓨터로 뜨게 됩니다.

덧. C드라이브를 초기주소로 하고싶다면
%windir%\explorer.exe /e,C:\
로 입력하면 됩니다.

by Hide_D | 2009/05/18 03:40 | 트랙백

Windows 7에서 HID 키보드 우측 Ctrl Alt 사용가능 하도록 수정하기

XP에서는 HID든 뭐든 걍 101C로 먹이면 에러내든 말들 알아서 잘 돌아가 주덥니다만.
Windows 7에선 그렇지 않습니다. -_-;
HID는 HID라 이거죠;

레지만 살짝 바꾼 패치가 있었는데,
제 컴퓨터에서는 그 레지를 먹이니 역시 XP용이었던 모양인지
재부팅하니 바로 복구모드가 뜨고는 롤백을 해버리덥니다.

그래서 이리저리 찾다가 발견한 페이지가
http://4na2.com/gboard/bbs/board.php?bo_table=tipntech&wr_id=13
여기!

다만 XP 기준인것 같아서 7에 바로 적용하기엔 문제가 있습니다.

하다가 조금 고생하다가 결국 제대로 세팅을 변경하는데 성공했습니다.(물론 대부분은 비슷합니다 ^^;)

-------------------------------------------------------------------------

우선 c:\windows\inf\keyboard.inf 파일을
c:\windows\system32\drivers\ 폴더로 복사본을 하나 만듭니다.
(keyboard.PNF는 복사하지 않습니다 ^^)

그리고
c:\windows\system32\ 폴더에서
kbd101c.dll과 kbdkor.dll 파일도  drivers 폴더로 옮겨주세요.
(안옮겨도 될지도 모르겠지만, 전 저 상태에서 시도했기 떄문에 혹시나 해서 ^^;)

이제부터는 drivers\ 폴더의 이 keyboard.inf 파일을 가지고 작업할 겁니다.


(복사한 후에는 저 글의 내용과 99% 동일하므로, Ctrl+C + Ctrl+V를 하고 바뀐점만 살짝 고쳐두겠습니다.)

[MS_KBD.NTx86] (또는 [MS_KBD.NTx64]) 라는 탭 부분을 찾아 제일 아래에

%HID2.KeyboardDevice% = HID_Keyboard_Inst2,,HID_DEVICE_SYSTEM_KEYBOARD ; Generic HID Keyboard 2

을 추가합니다. (한줄입니다.)

다음은 [HID_Keyboard_Inst.NT.Services] 의 내용이 끝나는 지점에
다음을 추가합니다.

[HID_Keyboard_Inst2.NT]
Needs = HID_Keyboard_Inst.NT
Copyfiles = 101C_TYPE_LayerDriverFiles
AddReg = HID_Keyboard_Inst2.AddReg

[HID_Keyboard_Inst2.NT.HW]
AddReg = HID_Keyboard_Inst2.AddReg.NT.HW

[HID_Keyboard_Inst2.AddReg.NT]

[HID_Keyboard_Inst2.AddReg.NT.HW]
HKR,,"KeyboardTypeOverride",0x00010001,8
HKR,,"KeyboardSubtypeOverride",0x00010001,5

[HID_Keyboard_Inst2.NT.Services]
Needs = HID_Keyboard_Inst.NT.Services


마지막으로

; HID device IDs 로 검색해서

HID.KeyboardDevice = "HID 키보드 장치"  아래에

HID2.KeyboardDevice = "한글 USB 키보드"
를 추가합니다.


그 다음에
장치관리자에 들어가서 드라이버 업데이트
수동으로 설치 -> 다음 위치에서 드라이버 검색란에 C:\Windows\System32\drivers 를 입력
다음
"한글 USB 키보드"를 선택하고 경고 무시하고 설치해줍니다.

그리고 나서 재부팅하면, 제대로 우측 Ctrl키가 먹는 것을 알 수 있습니다.


- 기존 글과 변경점
우선 keyboard.inf를 다른곳으로 이동시켰습니다.
이유인 즉슨 이 녀석이 한글판이기 때문에 ko-kr의 내용을 추가 참조하기 때문인데,
전 저 두녀석 다 고칠 엄두가 나질 않기에 걍 아무데나 옮겨버렸습니다.

또 옮긴 위치가 c:\windows\system32\drivers인데,
sys파일 2개와 dll파일 2개로는 왠지 모르겠지만 계속 파일이 부족하다고 하기에
아예 통째로 저 위치로 넣고 설치를 시도하니 잘 되더랍니다.

그리고 Vista부터는 x86,x64의 구분이 있기에 그부분 살짝 수정했습니다.

by Hide_D | 2009/05/18 03:27 | 컴질 | 트랙백

◀ 이전 페이지          다음 페이지 ▶