NDK 샘플소스를 이클립스로 로드하는 방법입니다.
아주 간단합니다~
하지만 처음하려니 헤메이더군요 ^^;
1. 이클립스에서 New Android Project 창을 띄웁니다.
[File] - [New] - [Project]
2. New Project에서 Android Project를 선택합니다.
Create project from existing source 를 선택하고
Location에 샘슬 소스의 경로를 적어줍니다~
BLOG ARTICLE 무엇이 궁금하니? | 329 ARTICLE FOUND
- 2010.07.13 NDK 샘플 소스 이클립스로 로드하는 방법
- 2010.07.09 java.lang.IllegalArgumentException: Path for project must have only one segment. 에러 해결 방법.
- 2010.06.15 윈도우의 프로그램 오류 디버거, 닥터 왓슨 (Dr. Watson) 끄기
- 2010.06.04 매크로에 사용되는 #과 ## 사용 방법
- 2010.04.30 관리목적의 기본 공유 폴더(C$,D$,Admin$,IPC$)의 공유 해제 하는방법
- 2010.04.30 VMware에서 안드로이드 OS 사용하기
- 2010.04.28 VC++ 6.0 64Bit x64 컴파일 환경 만들기
- 2010.04.26 윈도우용 SSH(SCP) Server freeSSHd
- 2010.04.22 STA와 MTA의 개념
- 2010.04.16 LCID 국가별 언어 코드표
java.lang.IllegalArgumentException: Path for project must have only one segment. 에러 해결 방법.
안드로이드 궁금하니? 2010. 7. 9. 19:19느닷없이 java.lang.IllegalArgumentException 에러가 발생하는 경우
해결될 수도 있습니다.
일반적으로 helloworld 프로젝트 경로에 한글이 포함되어 있는 경우
발생할 수 있다고 하는데,
제 경우 한글 경로는 아니었습니다.
이클립스를 사용하는 경우 메뉴에 Run - Run Configurations 의
설정을 약간 변경한 후에 해결되었습니다.
android 탭의 project 와 Launch Actiond의 Launch 부분이 비어있더군요
그래서 project의 browse버튼 눌러서 찾아주었더니
해결되더군요~
출처: http://comlog.kr/77
닥터 왓슨 (Dr. Watson) 은 명탐정 셜록 홈즈의 든든한 친구로 활약하기도 했지만 우리가 사용하고 있는 윈도우에서도 보이지 않게 많은 활약을 하고 있습니다. :)
윈도우에 고용된 닥터왓슨 (Dr. Watson, drwtsn32.exe) 은 윈도우 응용프로그램에서 오류가 발생했을 때, 해당 오류를 수정하기 용이하도록 오류 정보를 기록하고 메모리 덤프를 저장하는 디버거 (Debugger, 오류를 수정하는데 도움을 주는 프로그램) 역할을 하고 있습니다.
하지만 직접 디버깅 (Debugging, 오류를 수정하는 일) 을 하지 않고, 저장된 오류 정보를 분석하기 힘든 일반 사용자들에게는 그저 월급만 축내는 귀찮은 존재입니다. 오늘은 윈도우 응용프로그램 오류 디버거인 닥터 왓슨 (Dr. Watson) 을 해고하여 보겠습니다. :)
먼저, 윈도우 프로그램에서 오류가 발생했을 때 닥터 왓슨이 아무 일도 하지 않게 설정하여 보겠습니다.
'시작 - 실행' 을 선택하거나 '윈도우 + R' 키를 눌러 실행창을 띄운 후 다음 명령어를 입력합니다.
drwtsn32
그러면 아래와 같은 닷터왓슨 설정창이 나타납니다.
위 화면같이 '명령 개수' 와 '저장할 오류 개수' 를 '0' 으로 수정하고, 아래 옵션 항목의 모든 체크를 해제합니다.
이제 닥터 왓슨은 응용프로그램에서 오류가 발생해도 아무런 일도 수행하지 않습니다. :) 즐거운 컴퓨터고난기록기
만약 윈도우가 디버거 자체를 사용하지 않도록 하려면 아래의 레지스트리 키를 삭제합니다.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\AeDebug
레지스트리 작업을 할 때는 그 어느 때보다 주의를 기울여야 합니다. 자칫 다른 레지스트리의 항목을 잘못 수정하거나 삭제하면 윈도우 동작에 이상이 발생할 수도 있습니다.
반대로, 다시 닥터 왓슨을 윈도우 기본 디버거로 사용하려면 실행창에서 다음 명령어를 입력합니다.
drwtsn32 -i
출처 : 「윈도우즈 MFC 프로그래밍 - 원리...」본문 中 #과 ## - 71페이지
매로크의 # ##
#define macro_define(str) (#str)
가령 매크로를 위와 같이 정의하고, char *p = macro_define(string); 이라고 코드를 구현한다면 p는
"string"이라는 문자열을가리키게 된다, 즉 매크로정의의 인자를 문자열화 한다.
다음의 매크로 정의에 사용되는 ##은 매크로 인자를 연결하여 새로운 토큰을 구성한다.
#define macro_define(t1,t2) (t1##t2)
위와 같이 매크로를 정의하고 int macro_define(na,na2); 라고 코드를 기술하면 int na1na2;로 구현한 것과 같다.
즉, ## 는 전처리 단계에서 두 개의 매크로 인자를 연결하여 새로운 토큰을 생성한다. 이렇게 매크로 정의에서
사용되는 두개의 #과 ##은 MFC가 자신이 사용하는 여러 매크로( 메세지 매크로, CRuntimeClass 매크로)를
구현하기 위해 내부적으로 자주 사용 한다.
출처: http://blog.naver.com/nerve21i?Redirect=Log&logNo=100067291943
관리목적의 기본 공유 폴더(C$,d$,Admin$,IPC$)의 공유해제하는 방법
레지스트리 정보에서 변경하고 재부팅하면 기본 공유 폴더가 자동 해제된다.
-regedit
HKLM -> System -> CurrentControlSet -> Services -> LanmanServer -> Parameters 에 아래의 조건으로 값을 새로 생성
키 값 : AutoShareWks (Windows XP Pro)
AutoShareServer (Wind Server2003 혹은 Win2000 Server)
DWORD : 0(Zero)
참고: 외부에서 내 컴퓨터의 공유폴더에 접근하지 못하도록 차단하기
HKLM -> System -> CurrentControlSet -> Control -> LSA 에 아래 조건으로 값 생성
키값: restrictanonymous
데이터형식: DWORD : 1 (Windows XP/2003)
2 (Windows 2000)
XP에서는 SAM 정보 획득 방지를 위해 다음 항목을 확인함
-restrictanonymoussam을 '1'로 변경 (SAM 정보획득 방지)
-everyoneincludesanonymous '0'으로 설정(null세션 사용자차단)
대소문자 주의
3. 공유 폴더 해제하기
3-1) 명령어 입력을 통한 해제: [시작] -> [실행] -> cmd 엔터
-net share c$ /delete 엔터 //C$공유해제
-net share ADMIN$ /delete
-net share print$ /delete
이 방법은 부팅 후 다시 기본 공유가 설정됨으로 일시적 방편이다
출처: http://blog.naver.com/baljern?Redirect=Log&logNo=140105847638
VMware에서 Android OS 사용하기
애플 아이폰의 대항마로 나선 안드로이드폰의 OS를 체험해보는 간단한 방법은 안드로이드OS를 VMware나 VMware Player용 안드로이드 OS를 다운받아 가상머신에 설치하면 됩니다. 안드로이드가 내장된 스마트폰을 구입하기에 앞서 미리 체험해보는 것도 괜찮을 것입니다.
구글 안드로이드
안드로이드(Android)는 휴대전화기를 비롯, 모바일 디바이스를 위한 운영체제와 미들웨어 그리고 핵심 어플리케이션을 포함하고 있는 소프트웨어 스택이다. 안드로이드는 개발자들이 자바(Java) 언어로 어플리케이션을 작성 할 수 있게 하였으며, 컴파일된 바이트코드를 구동할 수 있는 런타임 라이브러리를 제공한다. 또한 안드로이드 SDK를 통해 어플리케이션을 개발하기 위해 필요한 각종 도구들과 API를 제공한다. 안드로이드는 리눅스 커널 위에서 동작하며, 다양한 안드로이드 시스템 컴포넌트에서 사용되는 C/C++ 라이브러리들을 포함하고 있다. 안드로이드는 기존의 자바 가상 머신 과는 다른 가상 머신인 달빅 가상 머신을 통해 자바로 작성된 어플리케이션을 별도의 프로세스에서 실행하는 구조로 되어있다.
2005년 안드로이드 사를 구글에서 인수한 후 2007년 11월, 안드로이드 플랫폼을 휴대전화용 OS로서 무료 공개한다고 발표한 후 48개의 하드웨어, 소프트웨어, 통신 회사가 모여 만든 OHA(Open Handset Alliance)에서 공개 표준을 위해 개발하고 있다. 구글은 안드로이드의 모든 소스 코드를 오픈 소스 라이센스인 아파치 라이센스로 배포하고 있다.
PC에서 안드로이드를 구동하기 위해서는 VMware Workstation(상용) 또는 VMware Player(공개용)
Android-x86-1.6-r2.iso 파일이 필요합니다. (Downlaod)
Android OS 다운로드 사이트 http://code.google.com/p/android-x86/downloads/list
저는 VMware Workstation을 사용하고 있으므로, VMware에서 설치하는 방법을 다루겠습니다.
테스트에는 Windows 7 Pro K x64 / Intel Core2Duo / VMware Workstation 7.0.1을 이용했습니다.
VMware에서 가상머신 만들기
가상머신에서 Android를 구동하는 방법은 CDROM(이미지파일)로 구동하는 방법과 가상 하드디스크에 파일로 설치하여 구동하는
2가지의 방법이 있습니다만, 하드디스크에 설치하는 방법은 파티션 포맷 등의 추가 작업이 필요하기 때문에, 여기서는 간단하게
이미지파일을 이용하여 구동하는 방법을 다루려합니다.
VMware의 File > New > Virtual Machine...을 클릭합니다.
Next를 클릭합니다.
Browse...를 클릭해 android-x86-1.6-r2.iso파일을 지정하고 Next를 클릭합니다.
Guest OS에 Other, Version에 Other을 선택하고 Next를 클릭합니다.
가상머신 이름을 입력하고 Next를 클릭합니다.
어차피 하드디스크는 필요없기 때문에, 설정없이 Next를 클릭합니다.
Customize Hardware를 클릭합니다.
Memory 설정항목을 512MB로 고쳐줍니다.
Floppy는 필요없으니 선택 후에 Remove를 클릭하고 OK를 클릭하여 설정을 끝냅니다.
한 가지 설정을 더 해야 하므로 Power on this virtual machine after creation에 체크를 빼고 Finish를 클릭합니다.
Edit virtual machine settings를 클릭합니다.
Hard Disk를 선택하고 Remove를 클릭한 후에 OK를 클릭합니다.
Power on this virtual machine을 클릭하여 가상머신을 실행합니다.
안드로이드 구동
Live CD - Run Android-x86 without installation을 선택하고 엔터를 누릅니다.
로고 화면이 지나가면
안드로이드 기본화면이 나옵니다.
마우스 오른쪽 버튼을 클릭하여 설정화면을 불러낼 수 있습니다.
설정은 핸드폰의 설정과 비슷하네요. (안드로이드는 구글의 태플릿PC인 위패드 등에도 사용될 예정입니다)
웹브라우저를 구동하고 검색란을 클릭하니 입력자판이 나옵니다.
제 블로그에 접속해보니 안드로이드에서는 이렇게 나오는군요.
화면 우측에 화살표를 당깁니다.
여러가지 어플리케이션이 들어 있는데, 실제 폰이 아니기 때문에 어플리케이션을 추가 할 수 없는 점이 아쉽군요.
간단한 내장게임을 실행해봤습니다.
뮤직 플레이어인데 디자인이 심플하다 못해 썰렁하네요.
스마트폰은 필요한 어플리케이션을 추가로 구입하거나 무료로 제공되는 것들을 다운로드하여 설치하고, 입맛에 맞게 설정하고
배열 할 수 있기 때문에, 위에서 살펴 본 내용들은 말 그대로 맛보기에 지나지 않습니다. 폰이 아니기 때문에 웹에 연결이 안되고
SD메모리 카드 슬롯도 가상머신 내에서는 동작하지않기 때문에 추가 어플리케이션을 사용 할 수 없어, 썰렁한 화면만 볼 수 있
고 터치스크린이 모니터가 아닌 관계로 편리함을 느낄 수도 없습니다만, 베이스 파일만 이용해봐도 아이폰OS와 비교하기엔 충
분하군요. 짧은 시간이었지만 안드로이드를 써보고는 스마트폰으로 교체하게 된다면 어떤 폰을 골라야 하는지 결정을 내리는데 는 충분했다고 생각합니다.
HDD에 설치하는 방법도 이용해봤는데 NTFS 포맷까지 호환이 가능한 점을 볼 때 PC에서 NTFS로 포맷된 대용량의 메모리카드
에 동영상파일과 같은 컨텐츠들을 담아 안드로이드폰에서 이용하는데에도 문제가 없을 것 같네요.
관련포스트 - VMware에서 Google Chrome OS 돌리기 http://blog.naver.com/baljern/140105563310
관련사이트 - 안드로이드펍 http://www.androidpub.com/usergroup
네이버 안드로이드폰 사용자모임 http://cafe.naver.com/mp3o
삼성안드로이드폰랜드 http://cafe.naver.com/androidland
다음 안
[출처] VMware에서 안드로이드 OS 사용하기|작성자 비모씨
출처 :http://bwangel.egloos.com/923770
Batch 파일
call C:\Rnd\Ms\PlatSDK_2K3SP1\setenv /X64 /RETAIL
call "%MSDevDir%\Bin\msdev" %MSDEVOPENFILE% /useenv
02. Project - Sttings - ProjectSettings 창을 띄운다.
03. General Tab - Output directories - Intermediate files, Output files 를 수정한다.
04. Link Tab - General - Output file name 을 수정한다.
05. Link Tab - General - Object/library modules 에 BufferOverflowU.lib 추가한다.
06. Link Tab - Debug - Debug Info 에 Separate types 항목의 체크를 없애준다.
07. Link Tab - Project Options 에서 /machine:I386 을 삭제한다.
08. Link Tab - Project Options 에서 /machine:AMD64 로 추가한다.
09. Link Tab - Output에서 Entry-Point Symbol 에 wWinMainCRTStartup를 추가한다.
10. C/C++ Tab - General - Preprocessor definitions 에 _MBCS 삭제한다.
11. C/C++ Tab - General - Preprocessor definitions 에
WIN32,_AMD64_=1,WIN64,_WIN64,_UNICODE,UNICODE 를 추가한다.
12. C/C++ Tab - General - Debug info 를 Program Database 로 변경한다.
13. C/C++ Tab - C++ Language - /GX(Enable exception handling) 체크를 삭제한다.
14. C/C++ Tab - C++ Language - Project Options 에서 /GZ(Calling Convention)
삭제한다.
15. C/C++ Tab - C++ Language - Project Options 에서 /EHsc 추가한다.
16. C/C++ Tab - C++ Language - Project Options 에서 /Wp64 추가한다.
출처: http://blog.naver.com/hypalgesia3?Redirect=Log&logNo=70074511013
CoInitialize : http://msdn.microsoft.com/en-us/library/ms678543(VS.85).aspx
CoInitializeEx : http://msdn.microsoft.com/en-us/library/ms695279(VS.85).aspx
COINIT Enumeration : http://msdn.microsoft.com/en-us/library/ms678505(VS.85).aspx
Peek Message : http://msdn.microsoft.com/en-us/library/ms644943(VS.85).aspx
Send Message : http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
STA : single threaded apartment
MTA : multi threaded apartment
STA의 경우 :
thread A가 objects들을 생성한다.
다른 thread들이 이 object들의 method를 호출하면, 이 모든 것들은 thread A 안에서, serialization이 되어서 동작을 한다.
즉, 외부의 모든 call들은 message queue로 들어오고, 따라서 자연스럽게 serialization이 된다.
따라서 object 코드를 작성할 때, 단일 쓰레드에서 동작한다고 가정하고 코드를 작성하면 된다.
MTA의 경우 :
CoInitializeEx에 COINIT_MULTITHREADED값을 주어서, COM library를 initialization을 하면 된다.
다른 thread들이 이 object들의 method들을 호출하면, 이 method들은 다른 thread들 내부에서 실행이 되는것 같다.
특정 method, 또는 특정 object가 동시에 여러 thread들로 부터 호출이 될 수 있으므로,
object의 code 내에서 synchronization (critical section, semaphore, mutex)을 구현해야 한다.
특정 thread data를 object 내부에 저장을 할 수 없다.(왜냐하면, object는 자신을 호출한 thread의 수명을 제어하지 않기 때문이다.)
(특정 thread의 정보를 저장하고 싶다면, Thread Local Storage를 이용하라)
[출처] STA와 MTA의 개념|작성자 hypalgesia3
출처: http://msdn.microsoft.com/en-us/goglobal/bb964664.aspx
see Locale ID and Language Collections for Windows XP and Windows Server 2003.
Language - Country/Region | LCID Hex | LCID Dec |
Afrikaans - South Africa | 0436 | 1078 |
Albanian - Albania | 041c | 1052 |
Amharic - Ethiopia | 045e | 1118 |
Arabic - Saudi Arabia | 0401 | 1025 |
Arabic - Algeria | 1401 | 5121 |
Arabic - Bahrain | 3c01 | 15361 |
Arabic - Egypt | 0c01 | 3073 |
Arabic - Iraq | 0801 | 2049 |
Arabic - Jordan | 2c01 | 11265 |
Arabic - Kuwait | 3401 | 13313 |
Arabic - Lebanon | 3001 | 12289 |
Arabic - Libya | 1001 | 4097 |
Arabic - Morocco | 1801 | 6145 |
Arabic - Oman | 2001 | 8193 |
Arabic - Qatar | 4001 | 16385 |
Arabic - Syria | 2801 | 10241 |
Arabic - Tunisia | 1c01 | 7169 |
Arabic - U.A.E. | 3801 | 14337 |
Arabic - Yemen | 2401 | 9217 |
Armenian - Armenia | 042b | 1067 |
Assamese | 044d | 1101 |
Azeri (Cyrillic) | 082c | 2092 |
Azeri (Latin) | 042c | 1068 |
Basque | 042d | 1069 |
Belarusian | 0423 | 1059 |
Bengali (India) | 0445 | 1093 |
Bengali (Bangladesh) | 0845 | 2117 |
Bosnian (Bosnia/Herzegovina) | 141A | 5146 |
Bulgarian | 0402 | 1026 |
Burmese | 0455 | 1109 |
Catalan | 0403 | 1027 |
Cherokee - United States | 045c | 1116 |
Chinese - People's Republic of China | 0804 | 2052 |
Chinese - Singapore | 1004 | 4100 |
Chinese - Taiwan | 0404 | 1028 |
Chinese - Hong Kong SAR | 0c04 | 3076 |
Chinese - Macao SAR | 1404 | 5124 |
Croatian | 041a | 1050 |
Croatian (Bosnia/Herzegovina) | 101a | 4122 |
Czech | 0405 | 1029 |
Danish | 0406 | 1030 |
Divehi | 0465 | 1125 |
Dutch - Netherlands | 0413 | 1043 |
Dutch - Belgium | 0813 | 2067 |
Edo | 0466 | 1126 |
English - United States | 0409 | 1033 |
English - United Kingdom | 0809 | 2057 |
English - Australia | 0c09 | 3081 |
English - Belize | 2809 | 10249 |
English - Canada | 1009 | 4105 |
English - Caribbean | 2409 | 9225 |
English - Hong Kong SAR | 3c09 | 15369 |
English - India | 4009 | 16393 |
English - Indonesia | 3809 | 14345 |
English - Ireland | 1809 | 6153 |
English - Jamaica | 2009 | 8201 |
English - Malaysia | 4409 | 17417 |
English - New Zealand | 1409 | 5129 |
English - Philippines | 3409 | 13321 |
English - Singapore | 4809 | 18441 |
English - South Africa | 1c09 | 7177 |
English - Trinidad | 2c09 | 11273 |
English - Zimbabwe | 3009 | 12297 |
Estonian | 0425 | 1061 |
Faroese | 0438 | 1080 |
Farsi | 0429 | 1065 |
Filipino | 0464 | 1124 |
Finnish | 040b | 1035 |
French - France | 040c | 1036 |
French - Belgium | 080c | 2060 |
French - Cameroon | 2c0c | 11276 |
French - Canada | 0c0c | 3084 |
French - Democratic Rep. of Congo | 240c | 9228 |
French - Cote d'Ivoire | 300c | 12300 |
French - Haiti | 3c0c | 15372 |
French - Luxembourg | 140c | 5132 |
French - Mali | 340c | 13324 |
French - Monaco | 180c | 6156 |
French - Morocco | 380c | 14348 |
French - North Africa | e40c | 58380 |
French - Reunion | 200c | 8204 |
French - Senegal | 280c | 10252 |
French - Switzerland | 100c | 4108 |
French - West Indies | 1c0c | 7180 |
Frisian - Netherlands | 0462 | 1122 |
Fulfulde - Nigeria | 0467 | 1127 |
FYRO Macedonian | 042f | 1071 |
Gaelic (Ireland) | 083c | 2108 |
Gaelic (Scotland) | 043c | 1084 |
Galician | 0456 | 1110 |
Georgian | 0437 | 1079 |
German - Germany | 0407 | 1031 |
German - Austria | 0c07 | 3079 |
German - Liechtenstein | 1407 | 5127 |
German - Luxembourg | 1007 | 4103 |
German - Switzerland | 0807 | 2055 |
Greek | 0408 | 1032 |
Guarani - Paraguay | 0474 | 1140 |
Gujarati | 0447 | 1095 |
Hausa - Nigeria | 0468 | 1128 |
Hawaiian - United States | 0475 | 1141 |
Hebrew | 040d | 1037 |
Hindi | 0439 | 1081 |
Hungarian | 040e | 1038 |
Ibibio - Nigeria | 0469 | 1129 |
Icelandic | 040f | 1039 |
Igbo - Nigeria | 0470 | 1136 |
Indonesian | 0421 | 1057 |
Inuktitut | 045d | 1117 |
Italian - Italy | 0410 | 1040 |
Italian - Switzerland | 0810 | 2064 |
Japanese | 0411 | 1041 |
Kannada | 044b | 1099 |
Kanuri - Nigeria | 0471 | 1137 |
Kashmiri | 0860 | 2144 |
Kashmiri (Arabic) | 0460 | 1120 |
Kazakh | 043f | 1087 |
Khmer | 0453 | 1107 |
Konkani | 0457 | 1111 |
Korean | 0412 | 1042 |
Kyrgyz (Cyrillic) | 0440 | 1088 |
Lao | 0454 | 1108 |
Latin | 0476 | 1142 |
Latvian | 0426 | 1062 |
Lithuanian | 0427 | 1063 |
Malay - Malaysia | 043e | 1086 |
Malay - Brunei Darussalam | 083e | 2110 |
Malayalam | 044c | 1100 |
Maltese | 043a | 1082 |
Manipuri | 0458 | 1112 |
Maori - New Zealand | 0481 | 1153 |
Marathi | 044e | 1102 |
Mongolian (Cyrillic) | 0450 | 1104 |
Mongolian (Mongolian) | 0850 | 2128 |
Nepali | 0461 | 1121 |
Nepali - India | 0861 | 2145 |
Norwegian (Bokmål) | 0414 | 1044 |
Norwegian (Nynorsk) | 0814 | 2068 |
Oriya | 0448 | 1096 |
Oromo | 0472 | 1138 |
Papiamentu | 0479 | 1145 |
Pashto | 0463 | 1123 |
Polish | 0415 | 1045 |
Portuguese - Brazil | 0416 | 1046 |
Portuguese - Portugal | 0816 | 2070 |
Punjabi | 0446 | 1094 |
Punjabi (Pakistan) | 0846 | 2118 |
Quecha - Bolivia | 046B | 1131 |
Quecha - Ecuador | 086B | 2155 |
Quecha - Peru | 0C6B | 3179 |
Rhaeto-Romanic | 0417 | 1047 |
Romanian | 0418 | 1048 |
Romanian - Moldava | 0818 | 2072 |
Russian | 0419 | 1049 |
Russian - Moldava | 0819 | 2073 |
Sami (Lappish) | 043b | 1083 |
Sanskrit | 044f | 1103 |
Sepedi | 046c | 1132 |
Serbian (Cyrillic) | 0c1a | 3098 |
Serbian (Latin) | 081a | 2074 |
Sindhi - India | 0459 | 1113 |
Sindhi - Pakistan | 0859 | 2137 |
Sinhalese - Sri Lanka | 045b | 1115 |
Slovak | 041b | 1051 |
Slovenian | 0424 | 1060 |
Somali | 0477 | 1143 |
Sorbian | 042e | 1070 |
Spanish - Spain (Modern Sort) | 0c0a | 3082 |
Spanish - Spain (Traditional Sort) | 040a | 1034 |
Spanish - Argentina | 2c0a | 11274 |
Spanish - Bolivia | 400a | 16394 |
Spanish - Chile | 340a | 13322 |
Spanish - Colombia | 240a | 9226 |
Spanish - Costa Rica | 140a | 5130 |
Spanish - Dominican Republic | 1c0a | 7178 |
Spanish - Ecuador | 300a | 12298 |
Spanish - El Salvador | 440a | 17418 |
Spanish - Guatemala | 100a | 4106 |
Spanish - Honduras | 480a | 18442 |
Spanish - Latin America | 580a | 58378 |
Spanish - Mexico | 080a | 2058 |
Spanish - Nicaragua | 4c0a | 19466 |
Spanish - Panama | 180a | 6154 |
Spanish - Paraguay | 3c0a | 15370 |
Spanish - Peru | 280a | 10250 |
Spanish - Puerto Rico | 500a | 20490 |
Spanish - United States | 540a | 21514 |
Spanish - Uruguay | 380a | 14346 |
Spanish - Venezuela | 200a | 8202 |
Sutu | 0430 | 1072 |
Swahili | 0441 | 1089 |
Swedish | 041d | 1053 |
Swedish - Finland | 081d | 2077 |
Syriac | 045a | 1114 |
Tajik | 0428 | 1064 |
Tamazight (Arabic) | 045f | 1119 |
Tamazight (Latin) | 085f | 2143 |
Tamil | 0449 | 1097 |
Tatar | 0444 | 1092 |
Telugu | 044a | 1098 |
Thai | 041e | 1054 |
Tibetan - Bhutan | 0851 | 2129 |
Tibetan - People's Republic of China | 0451 | 1105 |
Tigrigna - Eritrea | 0873 | 2163 |
Tigrigna - Ethiopia | 0473 | 1139 |
Tsonga | 0431 | 1073 |
Tswana | 0432 | 1074 |
Turkish | 041f | 1055 |
Turkmen | 0442 | 1090 |
Uighur - China | 0480 | 1152 |
Ukrainian | 0422 | 1058 |
Urdu | 0420 | 1056 |
Urdu - India | 0820 | 2080 |
Uzbek (Cyrillic) | 0843 | 2115 |
Uzbek (Latin) | 0443 | 1091 |
Venda | 0433 | 1075 |
Vietnamese | 042a | 1066 |
Welsh | 0452 | 1106 |
Xhosa | 0434 | 1076 |
Yi | 0478 | 1144 |
Yiddish | 043d | 1085 |
Yoruba | 046a | 1130 |
Zulu | 0435 | 1077 |
HID (Human Interface Device) | 04ff | 1279 |