#include <iostream>
using namespace std;

#define DO_CMD(name) void name(char *msg)

DO_CMD(do_east);
DO_CMD(do_west);
DO_CMD(do_south);
DO_CMD(do_north);
DO_CMD(do_quit);

// 명령어 해석 함수
void command_interpreter(char *cmd);

// 명령 목록 구조체
struct command_info {
  char *command;
  void (*command_pointer) (char *arg);
};

// 명령 목록 리스트
struct command_info cmd_list[] = {
  { "RESERVED", 0 },
  { "동"  , do_east },
  { "서"  , do_west },
  { "남"  , do_south },
  { "북"  , do_north },
  { "종료"  , do_quit },
  { "\n"    , 0 }
};


int main(int argc, char **argv)
{
  char cmd[20];
  char *msg = "메시지 내용";
 
  printf( "명령 입력(동, 서, 남, 북, 종료) : " );
  scanf( "%s", cmd );
 
  command_interpreter( cmd );
 
  return 0;
}

// 명령에 대한 함수포인터 분기 부분을 제작중
// -- 진행중 --
void command_interpreter(char *cmd)
{
  for(int cmd_no = 1; i < 4; i++)
  {
    cmd_list[i].command
  }
}

DO_CMD(do_east)
{
  printf("동쪽 : %s\n", msg);
}
DO_CMD(do_west)
{
  printf("서쪽 : %s\n", msg);
}
DO_CMD(do_south)
{
  printf("남쪽 : %s\n", msg);
}
DO_CMD(do_north)
{
  printf("북쪽 : %s\n", msg);
}
DO_CMD(do_quit)
{
  printf("종료 : %s\n", msg);
}


//////////////////////////////////////////////
// 참조하기 위한 함수 부분
//

void in_game_command_function(struct login_list *stList, unsigned char ucBuf[])
{
  int cmd_no;
  unsigned char cmd[1024], arg[1024];
 
  // 버퍼의 내용을 '명령 + 아규먼트'의 형태로 나눈다.
  parse_buffer(ucBuf, cmd, arg);
 
  // 명령을 명령 리스트에서 확인해서 몇 번째 명령인지 알아온다.
  for( cmd_no = 1; *cmd_list[cmd_no].command != '\n'; cmd_no++ )
  {
    if( !strcmp(cmd, cmd_list[cmd_no].command) )
    {
      break;
    }
  }

  if( *cmd_list[cmd_no].command == '\n' )
  {
    write_string_to_tcp_socket( stList->sockfd, "확인 불가능한 명령입니다. 다시 입력해 주세요." );
    return;
  }
 
  // 명령을 확인하여 해당 파일 포인터로 아규먼트와 같이 넘어간다.
  ((*cmd_list[cmd_no].command_pointer) (stList, arg));
}
 
2006/05/13 23:50 2006/05/13 23:50

글 걸기 주소 : 이 글에는 트랙백을 보낼 수 없습니다

덧글을 달아 주세요