옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

1. 정보모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어다.

오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴한 지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지 때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를 안 보는데서 생기니라. 그렇더라도 모두 다 읽을 필요는 없느니라. 많은 정보가 능사는 아니니라. 정보의 가치를 찾는 법부터 배우라. 세상엔 너무나 많은 자료와 정보가 넘쳐난다.

알알이 모두 끌어 모을 생각을 하기 보단 정보를 하나로 꿰는 법부터 먼저 배우는것이 너의 근심에서 쉽게 벋어나게 하는 방법이 되리라. 일을 시작하기전에 필요한 정보를 꼼꼼히 먼저 챙기는 법부터 배워라. 너희는 먼저 개발 의뢰서를 꼼꼼히 읽을지어다. 만약 개발 의뢰서가 없다면 발주자에게 요구할 지어다. 개발 의뢰서 없는 프로그램은 존재하지 않으니라.

2. 너의 PC가 안전하다고 믿지 말지어다.

5분 후에 정전이 되고 내일 너의 하드가 맛이 가리라. 그러니 너의 소중한 소스코드는 정기적으로 여러 군데에 단계별로 백업해 두어라. PC는 평상시엔 안전하다. 그런 실수를 저지르는것은 네자신이거나 아니면 외부적인 요인에 기인한다. 항상 백업을 철저히 해두며 백업에 백업까지도 챙겨두라. 그리고 백업을 했다면 리스트를 작성하라. 쓸데없는 백업은 백해 무익하나니 리스트를 항상 유지할 지어다. 너희는 노트를 옆에 끼고 살 지어다. 노트는 너의 생명이며, 너희가 기억하지 못하는 모든것을 상기시켜 줄지어다.

3. 변하는 수를 다룰 때에는 늘 조심할지어다.

정수가 절대로 그 한계를 넘지 않으리라 가정하는 것은 어리석음이라. 127 ,-128 ,255 ,32767 ,-32768 ,65535, 이 숫자들을 너의 골수에 새기어라. 0.0은 0이 아니니 실수는 원래부터 결코 정밀하지 않느니라. 부호 없는 것과 있는 것을 어울리거나 정수끼리 나눌 때에는 늘 조심하여라. 변수는 프로그램의 근원, 프로그램을 작성할때 가장 유의 할것이 바로 변수의 이름 짓기니라. 이름보고도 성격을 알 수 있게 해두라. 그러나 변수는 성질이 더러우니 변수에 성격을 부여할때는 조심스럽게 할지어다. 너희는 코딩하기 이전에 계획을 할 지어다. 이는 프로그래머가 코더가 아닌 것이니라.

4. 무슨 일을 반복시킬 때에는 처음과 끝에 유의할지어다.

너의 컴퓨터는 1보다는 0을 좋아 하니라. 배열의 첨자가 그 범위를 넘지 않을지 손 댈 때마다 따져 보아라. 수식에 1을 더하거나 뺄 때에는 늘 긴장하라. 너의 프로그램은 단지 한 번 덜해서 틀리고 한 번 더해서 다운되느니라. 프로그램을 작성할땐 계산, 판단, 비교를 그 모든걸 컴에게 되도록 맡기지말라. 네손으로 미리 계산하고 그 결과를 사용하는 방법이 최선이니라. 컴퓨터는 의지가 없나니 네가 잘못하든 잘하든 아무런 상관이 없느라. 너희는 머리가 악세사리가 아님을 기억하고 항상 생각하고 항상 노트에 적을 지어다.

5. 항상 모든 경우의 수를 고려하고 섣불리 생략하지 말지어다.

절대로 일어 나지 않을 일은 반드시 일어나고, 가장 드물게 일어날 일이 가장 너를 괴롭히리라. 그러하니 언제나 논리에 구멍이 없는지 꼼꼼히 따져 보고, if를 쓸때에는 else 부터 생각하라. 논리적인 오류는 성급함에서 생기나니 처음엔 항상 원리와 원칙을 지키라. 생각은 네가 하라 그리고 그 결과를 컴에게 시켜라. IF를 쓰기전에 규칙을 세우라. 먼저 IF의 결과에대한 규칙부터 세우고 따져라. 그리고 논리적인 계산을 IF문장안에서 하지 말라. 하나의 IF문장속에 수많은 논리연산은 버그의 원인이니라. 어느 정도의 프로그램에 대한 윤곽이 잡히면 프로토 타입을 만들지어다. 프로토타입은 프로그램에 대한 시뮬레이션이며 발주자의 요구를 빨리 수용 하는 방법이니라.

6. 함수 안에서 매개 변수값은 결코 믿지 말지어다.

지금 그 매개 변수가 결코 가질 수 없다는 값을 내일부터는 가지리라. 그러하니 매개 변수 값이 올바름을 항상 검사할지어다. 그렇더라도 처리 속도가 문제가 되는 경우는 예외이니라. 함수도 하나의 독립적인 프로그램이란것을 잊지말며, 네가 프로그램을 작성할땐 모든 함수가 돼도록이면 독립적으로 돌아가도록 할지어다. 함수의 매계변수는 항상 그옆에 작은 컴맨트와 초기화를 잊지말라. 처음부터 속도문제를 생각하지 말라. 모든 루틴을 최적화 할순 없다. 전체 프로그램중에 단 20%가 전체 실행시간에 80%를 점유한다. 프로토 타입에대한 발주자의 의견을 꼼꼼히 들을 지어다. 이는 발주자에 대한 신뢰도의 척도니라.

7. 오류를 알려 주는 기능은 있는 대로 모두 활용할지어다.

컴파일러의 경고는 모두 켜두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라. 컴파일러가 모든 경고기능을 동원해도 알려주지 않는 것은 많다. 중요한 건 오류가 생기기전에 규칙을 지켰는지 생각하라. 파일의 입출력과 메모리의 항당은 항상 쌍으로 생각해서 열었다면 닫아주고 할당받았다면 돌려주라. 프로그램의 매인턴앤스를 게을리하지 말지어다. 이는 프로그램 만드는 일 보다 중요한 일이니라.

8. 한 번의 수정과 재컴파일만으로 연관된 모든 것이 저절로, 강제로 바뀌도록 할지어다.

어떠한 것을 수정했을 때에 연관된 것이 따라서 변하지 않는다면 그것이 곧 벌레이니라. 컴파일러로 하여금 매개 변수 리스트를 완전하게 검사하도록 하고 언젠가 손대야 하거나 따라서 변해야 하는 수치는 전부 매크로로 치환하며, 형 정의를 적극 활용하여라. 이미 완벽한 루틴을 손대지 말라. 프로그램이 무너지는 가장 첫번째이유는 도미노 현상 때문이나니 한번의 수정과 재컴파일로 쓸데없는것을 손대게 하지 말라. 컴파일러가 매개변수 리스트를 챙기지 말게 하라. 프로그램에 들어가기 전엔 미리 함수명과 매개변수 리스트를 만들어라. 너희는 프로그램의 도큐멘트를 만드는일에 게으르지말지어다. 이는 사용자가 너의 프로그램에 대해서는 바보이기 때문이니라.

9. 사용자가 알아서 잘 써 주리라고 희망하지 말지어다.

너의 프로그램은 항상 바보만이 쓰느니라. 사용 설명서를 쓸 때에는 결코 빠뜨리지 말아라. 빠뜨린 만큼 사용자는 너를 괴롭힐 것이니라. 사용자는 나쁜놈이다. 쓸데없는짓을 잘한다. 무식하다. 인간성도 더럽다. 대부분이 바보며 가끔 똑똑한 사람도 있는데 그 놈은 더 하다.모든것을 설명하지 말며 온갇기능을 가진 하나의 프로그램을 작성하려 들지 말라. 많은 기능이 필요한 프로그램은 나누어서 작게 따로 만들어주라. 너희는 공부하는데 게으르지 말지어다. 자고나면 새로운 하드웨어와 새로운 소프트 웨어가 나오기 때문이니라.

10. 매사에 겸손하고 항상 남을 생각할지어다.

가장 완벽한 프로그램일수록 가장 완벽하게 숨은 벌레가 있느니라. 네가 이 세상 최고의 프로그래머라고 떠들며 자만할 때, 옆집 곳간에서는 훨씬 더 뛰어난 것을 묵묵히 만들고 있느니라. 아무렴 프로그래밍은 혼자 잘나서 할 게 아니니, 너로 인해 다른 사람들도 더불어 잘 되면 그 얼마나 좋은 것이냐. 프로그래머는 논리적으로 생각하여야 하지만 프로그램은 비논리적으로 작성하라. 프로그래머가 경지에 들면 누가 누가 잘하는지 알수가 없는 법, 또한 프로그래머로서의 '무지'에 대해서 잊지마라. 프로그래머의 '무지'는 생략하고, 선택하고, 단순화시키고, 명백하게하는 것이니라. 항상 새로운 아이디어와 새로운 생각으로 무장하라. 그리고 나누라 나누는곳에 기쁨있나니 너희는 모든 프로그램에 대해서 위의 프로시줘를 따를 지니라.

 

※ 원작자는 임인건님으로 터보 씨 2.0 정복이라는 매우 유명한 C언어 책을 쓰시고 또한 한라 프로라는 도스용 한글 라이브러리를 만드신 분입니다.

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

Error code Stop 0x00000050
 
시스템 디바이스 사이의 소프트웨어적 충돌을 의미하는 에러

win32k.sys파일은 시스템 장치드라이버를 제어하는 파일
윈도우즈를 설치하는 과정에서 장치 설치하는 도중에 발생한 소프트웨어적인 충돌

Cmos와 램/VGA/HDD등의 하드웨어 장치를 의심해볼것.


Error code Stop 0x0000000A or IRQL_NOT_LESS_OR_EQUAL 
ː내 용
1. 프로세서 및 메모리관리나 데이터 입출력 하드웨어제어 등의 IRQL(interrupt request level)인터럽트 요청 레벨이 너무높을때 발생하는 오류이다.

2. 메모리로 접근을위한 커널모드가 퍼미션을 가지지 못할 때 생기는 오류이다.

3. 일반적으로 이 메시지는 하드웨어나 소프트웨어 호환성 문제 때문에 생긴다.

ː문제해결 방법

- 드라이버나 펌웨어를 설치하는데 실패할 때 발생한다. 문제를 해결하기 위해 실패한 드라이버를 삭제하거나 드라이버 롤백기능을 사용한다. 

- 윈도우 XP를 업그레이드하는 동안 이오류가 나타나면 호환성부족 드라이버나 바이러스를 체크 해본다.


Error code Stop 0x0000001E or KMODE_EXCEPTION_NOT_HANDLED 
ː내 용 

1. 커널 오류중 하나이며 0×A오류와 거의 같다.

2. 메모리 부족 때문에 발생하는 오류이다. 

ː문제해결 방법

- 잘못된 드라이버를 설치하거나 메모리와 IRQ충돌시 이런 문제가 나타난다.

- 바이러스 백신이나 멀티미디어 응용프로그램 백업 프로그램등과 같이 필터프로그램을 사용하는 소프트웨어를 업데이트한다.

- 원격 제어프로그램의 win32k.sys 파일이 손상되었을 경우나 다른회사의 원격제어 프로그램을 설치할 경우에 발생될 수 있다.

- 안전모드로 접근을 못하는 경우 Recovery Console을 이용하여 문제를 해결한다.

- 시스템 펌웨어의 호환성부족으로 발생할수 있으며 바이오스 업그레이드로 문제를 해결해 본다.

- 디스크 공간이 부족할 때 발생되는 오류중하나이며 chkdsk.exe autochk.exe의해 발생되는 인터넷케쉬파일이나 temporary files(*.tmp files) 응용프로그램 백업파일을 삭제해 준다.


Error code Stop 0x00000024 or NTFS_FILE_SYSTEM 
ː내 용

1. 이 오류메시지는 NTFS파일 시스템 드라이버들을 쓰거나 읽는데 필요한 드라이버파일인 ntfs.sys 가 깨지거나 삭제되었을 경우 발생한다.

ː문제해결 방법

- SCSI나 ATA 하드웨어드라이버의 부조화로 발생하는 에러이다.
스커지인 경우 termination문제 케이블을 체크한다.

- event viewer에서 시스템 로그 안에 SCSI나 FASTFAT 과 관련된 에러사항을 체크한다. 

- 시스템 제조회사에서 제공하는 하드웨어 진단프로그램과 진단 소프트웨어로 테스트해본다. 


Error code Stop 0x0000002E or DATA_BUS_ERROR 
ː내 용

1. 시스템 페러티 에러나 메모리모듈 Level2 cache 나 비디오메모리 손상으로 발생되는 에러이다. 

2. 바이러스로 인해 발생할수있다.

ː문제해결 방법

- 드라이버를 잘못설치한 경우 발생할 수 있다. 파일이름을 보여주면 제거하거나 롤백 기능을 사용하여 문제를 해결한다.

- 램의 물리적인 손상일 경우가 많으므로 데이터가 주소에 제대로 접근 못하는경우가 많다. 이럴경우는 램을 교체해본다.

- 크랙된 응용프로그램을 설치한 경우에 발생할 수 있다.


Error code Stop 0x0000003F or NO_MORE_SYSTEM_PTES 
ː내 용

1. 이 에러는 여러 가지 원인에 의해 발생될수 있다.
주로 PTEs(page table entries)-시스템의 입출력수행의 과도현상 PTEs(메모리공간에대한정보)가 부족하거나 파손되는경우에 발생할수 있는 에러이다.

2. 잘못된 드라이버 설치시 발생할수 있다.

ː문제해결 방법

- 응용프로그램들이 요구하거나 이용할 수 있는 충분한 크기의 메모리 블록이 부족한경우에 발생하는 에러이다.

- 응용프로그램의 드라이버를 업데이트해본다.

- 윈도우 xp 는 PTEs의 수를 늘리기위해 registry entry,system pages를 제공한다.


Error code Stop 0x00000050 or PAGE_FAULT_IN_NONPAGED_AREA 

ː내 용

1. 요청된 데이터가 메모리에 상주되어 있지 않을때 발생하는 에러이다.

2. 호환이 잘 안되는 소프트웨어 설치시(원격 엑세스, 바이러스 백신)들이 에러를 일으키는 원인이 된다.

3. 결함이있는 메모리(메인 메모리,L2케시 메모리,video RAM) 

ː문제해결 방법

- 잘못된 드라이버 설치시 에러를 발생시킬수 있다. 드라이버를 삭제하고 업데이트된 드라이버를 재설치 한다.

- 만약 제조회사에서 드라이버를 찾지못한다면 비슷한 종류의 드라이버로 교체한다.


Error code Stop 0x00000077 or KERNEL_STACK_INPAGE_ERROR 
ː내 용

1. 이 에러는 페이징 (가상 메모리)파일로부터 요구된 커널 데이터의 페이지가 메모리에서 읽거들이거나 발견되지 않았을때 생기는 오류이다.

2. 디스크 데이터 충돌이나 바이러스 감염에 의해서도 생기는 오류이다. 

ː상태 코드

- 0xC000009A, or STATUS_INSUFFICIENT_RESOURCES 리소스부족을 가르킨다.

- 0xC000009C, or STATUS_DEVICE_DATA_ERROR,하드디스크의 베드블럭,섹터로 요청된 데이터를 찾지 못할때

- 0xC000009D, or STATUS_DEVICE_NOT_CONNECTED, 결함있는 파워케이블, 스카시 터미네이션 ,하드디스크 컨트롤러 

- 0xC000016A, or STATUS_DISK_OPERATION_FAILED, 결함있는 하드디스크의 베드섹터

- 0xC0000185, or STATUS_IO_DEVICE_ERROR, 결함있는 파워케이블 ,스카시 터미네이션 ,하드디스크 컨트롤러 두가지 디바이스장치가 동일한 시스템 리소스를 사용해서 생기는 오류


Error code Stop 0x00000079 or MISMATCHED_HAL 

ː내 용

1. 하 드웨어추상화계층(Hardware Abstraction Layer)-입출력 인터페이스, 인터럽트 제어, 다중 프로세서 통신을 구현하 는 데 필요한 하드웨어 종속적인 세부 사항을 처리하는 루틴과 커널타입이 맞지 않아 생기는 오류이다.

2. 주로 ACPI 펌웨어 설정이 변경되었을때 자주일어나는 오류이다.

parameter 1 parameter 2 parameter 3 Description 
0×00000001 Release level of Ntoskrnl.exe Release level of Hal.dll PRCB release
level mismatch 
0×00000002 Build type of Ntoskrnl.exe Build type of Hal.dll Build type mismatch 

3. 이 에러는 주로 Ntoskrnl.exe 나 Hal.dll 파일이 손상되었을 경우에 일어난다. 

ː문제해결 방법

- 리커버리 콘솔에서 두 파일을 복구시켜준다.

- ACPI 기능을 disable 시켜준후 IRQ를 재설정해준다.


Error code Stop 0x0000007B or INACCESSIBLE_BOOT_DEVICE 
ː내 용

1. 부팅하면서 시스템 파티션을 엑세스하지 못할 때

2. 잘못된 디바이스드라이버가 설치되거나 업그레이드 될 때

3. 바이러스 감염에 의해서 발생될 수 있다. 

ː문제해결 방법

- 입출력시스템이나 컨트롤러나 드라이버 장치가 잘못잡혀있을때나타나는 오류

- 파일시스템이 부트 디바이스의 데이터를 인식하지 못했을 때

- 새로운 디스크를 추가하거나 파티션설정을 다시할경우나 새로운 디스크 컨트롤러를 업그레이드할 때 boot.ini 부트메니져정보가 변경될 경우 생긴다.
이럴 경우 boot.ini 파일을 편집하거나 부트 메니져 파라미터를 조절한다.

- 주기적으로 드라이버와 펌웨어를 업데이트 해야 합니다.


Error code Stop 0x0000007F or UNEXPECTED_KERNEL_MODE_TRAP 

ː내 용

1. 일반적으로 운영체제상의 커널모드(프로그램실행에 필요한 메모리관리,프로세서관리 데이터 입출력, 하드웨어제어를 수행)하는데 발생하는 에러이다.

2. 과다한 CPU 오버크럭킹으로 인한 열발생 때문에 오류가 발생한다. 

ː문제해결 방법 - 모든 클럭과 버스 스피드설정을 처음 설정값으로 변경시켜준다.

- 크랙된 프로 그램을 쓰는 경우 발생할수 있다.

- 호환성이 부족한 응용프로그램을 인스톨할 경우 발생하는에러이다.

- 업데이트를 통하여 해결하거나 패치를 통하여 해결한다.


Error code Stop 0x0000009F or DRIVER_POWER_STATE_FAILURE 

ː내 용

이 에러는 갑작스런 전력변동에 의해 발생하는 에러이다. 

ː문제해결 방법

- shutting down stanby mode hibernate 모드설정을 체크한다. 


Error code Stop 0x000000D1 or DRIVER_IRQL_NOT_LESS_OR_EQUAL 
ː내 용 

ː문제해결 방법

- 커널 인터럽트 요청레벨(IRQL)이 너무 높을때-메모리관리나 데이터입출력 및 하드웨어를 제어하는 신호값이 너무 높거나 운영체제가 메모리를 인식할수있는공간을 접근할수 없을때 나타나는 오류이다. 


Error code Stop 0x000000D8 or DRIVER_USED_EXCESSIVE_PTES 

ː내 용 

ː문제해결 방법

- 주로 PTEs(page table entries)-시스템의 입출력수행의 과도현상 PTEs(메모리공간에대한정보)가 부족하거나 파손되는경우에 발생할수 있는 에러이다.

- 응용프로그램들이 요구하거나 이용할 수 있는 충분한 크기의 메모리 블록이 부족한경우에 발생하는 에러이다.

- 응용프로그램의 드라이버를 업데이트해본다.

- 윈도우 xp 는 PTEs의 수를 늘리기위해 registry entry,system pages를 제공한다.

PTEs를 늘리기 위한 방법

실행-열기-regedit 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management에서
pagefoolsize의 값:0
systempages의 값 128M 메모리값 :40000
256M 메모리값 :110000 으로 변경 


Error code Stop 0x000000EA or THREAD_STUCK_IN_DEVICE_DRIVER 

ː내 용

일반적으로 주로 비디오 어댑터가 문제를 발생할 때 나타나는 오류이다. 

ː문제해결 방법

- 특히 드라이버를 (비디오 드라이버)를 새로 설치한후에 나타나는 현상으로 드라이버가 잘못잡히거나 못잡을때 나타나는 에러이다.

- 최신 드라이버로 업데이트 한다. 


Error code Stop 0x000000F2 or HARDWARE_INTERRUPT_STORM 

ː내 용

인터럽트 충돌에 의해 발생하는 메시지이다. 

ː문제해결 방법

- 같은 IRQ를 쓰는 장치를 지우고 장치를 다시 잡는다.

'생활' 카테고리의 다른 글

맥북 사망...  (0) 2012.05.31
[링크] 윈도우의 역사  (0) 2012.03.10
whylinuxisbetter  (0) 2012.03.10
역전재판 총정리,,  (0) 2012.03.10
[TIP!]windows에서 linux의 심볼릭 링크기능 사용하기  (0) 2012.03.10

옛날에 동아리 클럽에 썼던 글입니다.

============================================================================================

dll파일이 필요하다고 뜨면 여기에 쳐보세요.

거의 다 나옴,,,

받아서 압축풀고 readme 는 상콤히 지워주고

system32에 넣으면 됨.

주요 클래스

class CURL
{
private:
 // The default browser
 CString m_strBrowser;
public:
 void Open(LPCTSTR lpszURL, bool bNewWindow = true)
 {
  if (bNewWindow)
   ::ShellExecute(NULL, NULL, GetBrowser(), lpszURL, NULL, SW_SHOWNORMAL);
  else
   ::ShellExecute(NULL, NULL, lpszURL, NULL, NULL, SW_SHOWNORMAL);
 }

 LPCTSTR GetBrowser(void)
 {
  // Do we have the default browser yet?
  if (m_strBrowser.IsEmpty())
  {
   // Get the default browser from HKCR\http\shell\open\command
   HKEY hKey = NULL;
   // Open the registry
   if (::RegOpenKeyEx(HKEY_CLASSES_ROOT, _T("http\\shell\\open\\command"), 0,
     KEY_READ, &hKey) == ERROR_SUCCESS)
   {
    // Data size
    DWORD cbData = 0;
    // Get the default value
    if (::RegQueryValueEx(hKey, NULL, NULL, NULL, NULL, &cbData) == ERROR_SUCCESS && cbData > 0)
    {
     // Allocate a suitable buffer
     TCHAR* psz = new TCHAR [cbData];
     // Success?
     if (psz != NULL)
     {
      if (::RegQueryValueEx(hKey, NULL, NULL,
       NULL, (LPBYTE)psz, &cbData) ==
       ERROR_SUCCESS)
      {
       // Success!
       m_strBrowser = psz;
      }
      delete [] psz;
     }
    }
    ::RegCloseKey(hKey);
   }
   // Do we have the browser?
   if (m_strBrowser.GetLength() > 0)
   {
    // Strip the full path from the string
    int nStart = m_strBrowser.Find('"');
    int nEnd = m_strBrowser.ReverseFind('"');
    // Do we have either quote?
    // If so, then the path contains spaces
    if (nStart >= 0 && nEnd >= 0)
    {
     // Are they the same?
     if (nStart != nEnd)
     {
      // Get the full path
      m_strBrowser = m_strBrowser.Mid(nStart + 1, nEnd - nStart - 1);
     }
    }
    else
    {
     // We may have a pathname with spaces but
     // no quotes (Netscape), e.g.:
     //   C:\PROGRAM FILES\NETSCAPE\COMMUNICATOR\PROGRAM\NETSCAPE.EXE -h "%1"
     // Look for the last backslash
     int nIndex = m_strBrowser.ReverseFind('\\');
     // Success?
     if (nIndex > 0)
     {
      // Look for the next space after the final
      // backslash
      int nSpace = m_strBrowser.Find(' ', nIndex);
      // Do we have a space?
      if (nSpace > 0)
       m_strBrowser = m_strBrowser.Left(nSpace);
     }
    }
   }
  }
  // Done
  return m_strBrowser;
 }
};