#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <tchar.h>
#include <locale.h>
#define STR_LEN 256 // 문자열 길이
#define CMD_TOKEN_NUM 10 // 입력가능한 최대 문자열 개수
TCHAR ERROR_CMD[100] = _T(" '%s'는 실행할 수 있는 프로그램이 아닙니다. \n");
INT_PTR CmdProcessing();
TCHAR* StrLower(TCHAR*);
INT_PTR _tmain(INT_PTR argc, TCHAR* argv[])
{
_tsetlocale(LC_ALL, _T("Korean")); // 유니코드 한글을 입력받기 위해
INT_PTR isExit;
while(TRUE) // 무한루프
{
isExit = CmdProcessing();
if(isExit == TRUE)
{
_tprintf(_T("종료합니다. \n"));
break;
}
}
return 0;
}
TCHAR cmdString[STR_LEN] = {0};
TCHAR CmdTokenList[CMD_TOKEN_NUM][STR_LEN];
TCHAR seps[] = _T(" , \t \n");
INT_PTR CmdProcessing() // 명령어 입력받아서 해당 명령어 기능 수행 함수
{
_tprintf(_T("Command Prompt >> "));
_tscanf(_T("%s"), cmdString); // 명령어 입력받음
TCHAR* token = _tcstok(cmdString, seps); // 명령어를 분리함, ex) copy a b -> copy, a, b
INT_PTR tokenNum = 0;
while(token != NULL)
{
_tcscpy(CmdTokenList[tokenNum++], StrLower(token)); // 분리된 문자열이 없을때까지
// 모두 소문자로 변경한 명령어를 붙여넣음
token = _tcstok(NULL, seps);
}
if(!_tcscmp(CmdTokenList[0], _T("exit")))
{
return TRUE;
}
else if(!_tcscmp(CmdTokenList[0], _T("추가명령어"))) // 명령어가 개수만큼 else if 추가
{
}
else // 해당명령어가 없으면 에러출력
{
_tprintf(ERROR_CMD, CmdTokenList[0]);
}
return 0;
}
TCHAR* StrLower(TCHAR* pStr) // 대문자 -> 소문자 (대소문자 구별없게 하기 위해서)
{
TCHAR* ret = pStr;
while(*pStr) // NULL 만날때까지 반복,
{
if(_istupper(*pStr)) // 대문자이면
{
*pStr = _tolower(*pStr); // 소문자로 변경
}
pStr++;
}
return ret;
}