U E D R , A S I H C RSS

데블스캠프2011/넷째날/Git/권순의 (rev. 1.2)

데블스캠프2011/넷째날/Git/권순의

소스

myCmdBase

// myCmdBase.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <string.h>



#include "cmdTest.h"
#include "rei.h"

typedef char (*ARGV)[ARG_SIZE];
typedef int (*PF)(int, ARGV);

struct Cmds{
	char cmdName[256];
	PF cmd;
} cmds[] = {{"rei", rei}};

int parseCommand(char* str, ARGV argv);
PF getCommander(ARGV argv);

int _tmain(int argc, _TCHAR* argv[])
{
	char input[256];
	char inputArgv[ARG_NUM][ARG_SIZE] = {0,};

	cout<<"input your command : ";
	cin>>input;
	// 사용자 입력을 띄어쓰기 단위로 나누고 몇개로 
	int inputArgc = parseCommand(input, inputArgv);
	// 커맨드를 비교하여 적절한 커맨드 함수를 받는다.
	PF pf = getCommander(inputArgv);
	// 커맨드 함수 호출
	pf(inputArgc, inputArgv);
	return 0;
}

// 문자열을 띄어쓰기 단위로 나눈다.
int parseCommand(char* str, ARGV argv){
	if( strlen(str) <= 0 )
		return 0;               // no command
	char* ptr = strtok( str, " ");
	strcpy( argv[0], ptr);
	int i;
	for( i=1; ptr = strtok( NULL, " "); i++)
		strcpy(argv[i], ptr);
	return i;
}

// 가장 앞 문자열을 이용하여 일치하는 커맨드를 가져온다.
PF getCommander(ARGV argv){
	for( int i=0; i<sizeof(cmds)/sizeof(Cmds); i++)
		if( strcmp(argv[0], cmds[i].cmdName ) == 0 )
			return cmds[i].cmd;
	return testCmd;
}

rei.cpp

#include "rei.h"
#include <fstream>

int rei(int argc, char (*argv)[ARG_SIZE]){
	ifstream f("rei.txt");
	if(!f) {
		cout << "Fail to Load File" << endl; 
		exit(0);
	}

	char ch;
	while(!f.eof()){
		f.get(ch);
		cout << ch;
	}

	return 0;
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:29:11
Processing time 0.0184 sec