
//[2012.07.08.일][생성!!!]

//[!]{----------------------
#include "GUI\GUI_프로그램.h"
//}-------------------------

#include "함수묶음.h"

#include "GUI\GUI.h"

#include "일반함수.h"
#include "색상정의.h"
#include "전역정보.h"

//[2012.08.11.토][추가!!!]
#include "인터프리터\인터프리터.h"


void GUI_생성자_프로그램(void)
{
  //[2012.07.08.일][생성!!!]

  //[VAR]
  //{
      int   i;

      char  그림경로[1024];
      char  그림경로이름확장자[1024];

  //}

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[제목]
  //{
      _GLabel_생성_(gui->프로그램.Lb_제목, gui->기본틀.GVmos, GID_생성(),
                   _GLabel_X_(gui->영점조정설정.Lb_기본판, 0, d_읽기) + _GLabel_폭_(gui->영점조정설정.Lb_기본판, 0, d_읽기) + 4,
                   25,
                   40, 16,
                   true);

      _GLabel_제목_(gui->프로그램.Lb_제목, "프로그램 실행/검증", d_쓰기);
      _GLabel_자동폭_(gui->프로그램.Lb_제목, true, d_쓰기);
      _GLabel_배경색_(gui->프로그램.Lb_제목, _GColor_밝기_(clGray, 100), d_쓰기);
      _GLabel_문자색_(gui->프로그램.Lb_제목, clWhite, d_쓰기);
      _GLabel_테두리_(gui->프로그램.Lb_제목, true, d_쓰기);

  //}

  //[기본틀]
  //{
      _GLabel_생성_(gui->프로그램.Lb_기본판, gui->기본틀.GVmos, GID_생성(),
                   _GLabel_X_(gui->프로그램.Lb_제목, 0, d_읽기),
                   _GLabel_Y_(gui->프로그램.Lb_제목, 0, d_읽기) + _GLabel_높이_(gui->프로그램.Lb_제목, 0, d_읽기)/2,
                   177, 212,
                   true);

      _GLabel_제목_(gui->프로그램.Lb_기본판, "", d_쓰기);
      _GLabel_테두리_(gui->프로그램.Lb_기본판, true, d_쓰기);
      _GLabel_배경색_(gui->프로그램.Lb_기본판, _GColor_밝기_(clGray, d_환경_배경밝기), d_쓰기);

  //}

  //[!]{----------------------------
  //제목줄 앞으로.
  _GX_가장앞으로_(gui->프로그램.Lb_제목);
  //}-------------------------------

  //[실행]
  //{
      //[Btn_실행]
      //{
          for(i = 0; i < 8; i++)
          {
            _GButton_생성_(gui->프로그램.Btn_실행[i], gui->프로그램.Lb_기본판, GID_생성(),
                          4,
                          _GLabel_Y_(gui->프로그램.Lb_제목, 0, d_읽기)/2 + (19 + 2)*i,
                          161 - 34, 19,
                          true);
            _GButton_제목_(gui->프로그램.Btn_실행[i], "", d_쓰기);

            //[이벤트]
            //{
                _GButton_이벤트_MDown_(gui->프로그램.Btn_실행[i], true, d_쓰기);
                _GButton_이벤트_MUp_(gui->프로그램.Btn_실행[i], true, d_쓰기);

            //}

            //[풍선도움말]
            //{
                _GButton_풍선도움말문자열_
                (gui->프로그램.Btn_실행[i],
                 "버튼을 누르면 등록된 문서를 자동으로 편집기에 열어주며\r\n"
                 "버튼을 누르고 있는 동안 해당 프로그램이 자동 실행됩니다.",
                 d_쓰기);

                _GButton_풍선도움말_(gui->프로그램.Btn_실행[i], false, d_쓰기);

            //}

          }

      //}

      //[BmpBtn_등록]
      //{
          //[그림 경로 얻기]
          //{
              //실행중인 맷돌통합개발환경 경로 얻기.
              _Ide_실행경로_(그림경로);

              //그림경로 합성.
              _Str_더하기_(그림경로, "sysbmp\\11_11\\");

              //올릴 그림 경로이름확장자 합성.
              _Str_합치기_(그림경로이름확장자, 그림경로, "program.bmp");

          //}

          for(i = 0; i < 8; i++)
          {
            _GBmpButton_생성_(gui->프로그램.BmpBtn_등록[i], gui->프로그램.Lb_기본판, GID_생성(),
                             _GButton_X_(gui->프로그램.Btn_실행[i], 0, d_읽기) + _GButton_폭_(gui->프로그램.Btn_실행[i], 0, d_읽기) + 2,
                             _GButton_Y_(gui->프로그램.Btn_실행[i], 0, d_읽기),
                             19, 19,
                             true);

            //[그림 올리기]
            //{
                _GBmpButton_그림지정_(gui->프로그램.BmpBtn_등록[i], 그림경로이름확장자);
                _GBmpButton_그림위치X_(gui->프로그램.BmpBtn_등록[i], 4, d_쓰기);
                _GBmpButton_그림위치Y_(gui->프로그램.BmpBtn_등록[i], 4, d_쓰기);

            //}

            //_GBmpButton_테두리색_(gui->프로그램.BmpBtn_등록[i], clBlack2, d_쓰기);

            //[이벤트]
            //{
                _GBmpButton_이벤트_MClick_(gui->프로그램.BmpBtn_등록[i], true, d_쓰기);

            //}

            //[풍선도움말]
            //{
                _GBmpButton_풍선도움말문자열_
                (gui->프로그램.BmpBtn_등록[i],
                 "실행될 문서를 등록 합니다.",
                 d_쓰기);

                _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_등록[i], false, d_쓰기);

            //}

          }

      //}

      //[BmpBtn_해제]
      //{
          //[그림 경로 얻기]
          //{
              //실행중인 맷돌통합개발환경 경로 얻기.
              _Ide_실행경로_(그림경로);

              //그림경로 합성.
              _Str_더하기_(그림경로, "sysbmp\\11_11\\");

              //올릴 그림 경로이름확장자 합성.
              _Str_합치기_(그림경로이름확장자, 그림경로, "empty.bmp");

          //}

          for(i = 0; i < 8; i++)
          {
            _GBmpButton_생성_(gui->프로그램.BmpBtn_해제[i], gui->프로그램.Lb_기본판, GID_생성(),
                             _GBmpButton_X_(gui->프로그램.BmpBtn_등록[i], 0, d_읽기) + _GBmpButton_폭_(gui->프로그램.BmpBtn_등록[i], 0, d_읽기) + 2,
                             _GBmpButton_Y_(gui->프로그램.BmpBtn_등록[i], 0, d_읽기),
                             19, 19,
                             true);

            //[그림 올리기]
            //{
                _GBmpButton_그림지정_(gui->프로그램.BmpBtn_해제[i], 그림경로이름확장자);
                _GBmpButton_그림위치X_(gui->프로그램.BmpBtn_해제[i], 4, d_쓰기);
                _GBmpButton_그림위치Y_(gui->프로그램.BmpBtn_해제[i], 4, d_쓰기);

            //}

            //_GBmpButton_테두리색_(gui->프로그램.BmpBtn_해제[i], clBlack2, d_쓰기);

            //[이벤트]
            //{
                _GBmpButton_이벤트_MClick_(gui->프로그램.BmpBtn_해제[i], true, d_쓰기);

            //}

            //[풍선도움말]
            //{
                _GBmpButton_풍선도움말문자열_
                (gui->프로그램.BmpBtn_해제[i],
                 "등록된 문서를 해제 합니다.",
                 d_쓰기);

                _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_해제[i], false, d_쓰기);

            //}

          }

      //}

  //}

  //[검증]
  //{
      //[그림 경로 얻기]
      //{
          //실행중인 맷돌통합개발환경 경로 얻기.
          _Ide_실행경로_(그림경로);

          //그림경로 합성.
          _Str_더하기_(그림경로, "sysbmp\\button\\debug\\");

      //}

      //[BmpBtn_실행]
      //{
          _GBmpButton_생성_(gui->프로그램.BmpBtn_실행, gui->프로그램.Lb_기본판, GID_생성(),
                           4,
                           _GBmpButton_Y_(gui->프로그램.Btn_실행[7], 0, d_읽기) + _GBmpButton_높이_(gui->프로그램.Btn_실행[7], 0, d_읽기) + 4,
                           40, 26,
                           true);

          _GBmpButton_테두리색_(gui->프로그램.BmpBtn_실행, clBlack2, d_쓰기);

          //[그림 올리기]
          //{
              //올릴 그림 경로이름확장자 합성.
              _Str_합치기_(그림경로이름확장자, 그림경로, "run.bmp");
              _GBmpButton_그림지정_(gui->프로그램.BmpBtn_실행, 그림경로이름확장자);

              //_GBmpButton_그림위치X_(gui->프로그램.BmpBtn_실행, -3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->프로그램.BmpBtn_실행, -3, d_쓰기);

              //[2012.08.05.일][중요추가!!!]{--------------------------
              //반드시 [폭] 지정하도록 한다.
              _GBmpButton_그림폭_(gui->프로그램.BmpBtn_실행, 40, d_쓰기);
              //}----------------------------------------------------

              _GBmpButton_연결그림사용_(gui->프로그램.BmpBtn_실행, true, d_쓰기);
              _GBmpButton_연결그림폭_(gui->프로그램.BmpBtn_실행, 40, d_쓰기);
              _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_실행, 0, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->프로그램.BmpBtn_실행, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->프로그램.BmpBtn_실행,
               "현재 편집기에 열려있는 문서를 자동 실행 합니다.\r\n"
               "이 버튼을 누르면 자동 실행이 시작되고 다시 누르면 중지 됩니다.\r\n"
               "[정지점] 이 설정된 행에서 실행이 중지됩니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_실행, false, d_쓰기);

          //}

      //}

      //[BmpBtn_행]
      //{
          _GBmpButton_생성_(gui->프로그램.BmpBtn_행, gui->프로그램.Lb_기본판, GID_생성(),
                           _GBmpButton_X_(gui->프로그램.BmpBtn_실행, 0, d_읽기) + _GBmpButton_폭_(gui->프로그램.BmpBtn_실행, 0, d_읽기) + 3,
                           _GBmpButton_Y_(gui->프로그램.BmpBtn_실행, 0, d_읽기),
                           40, 26,
                           true);

          _GBmpButton_테두리색_(gui->프로그램.BmpBtn_행, clBlack2, d_쓰기);

          //[그림 올리기]
          //{
              //올릴 그림 경로이름확장자 합성.
              _Str_합치기_(그림경로이름확장자, 그림경로, "step_statement.bmp");
              _GBmpButton_그림지정_(gui->프로그램.BmpBtn_행, 그림경로이름확장자);

              //_GBmpButton_그림위치X_(gui->프로그램.BmpBtn_행, -3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->프로그램.BmpBtn_행, -3, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->프로그램.BmpBtn_행, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->프로그램.BmpBtn_행,
               "현재 편집기에 열려있는 문서를 명령행 단위로 한개 행만 실행합니다.\r\n"
               "실행되는 행은 이전에 실행된 행 다음 명령행이 됩니다.\r\n"
               "실행할 행은 [행지정자] 로 표시됩니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_행, false, d_쓰기);

          //}

      //}

      //[BmpBtn_자동]
      //{
          _GBmpButton_생성_(gui->프로그램.BmpBtn_자동, gui->프로그램.Lb_기본판, GID_생성(),
                           _GBmpButton_X_(gui->프로그램.BmpBtn_행, 0, d_읽기) + _GBmpButton_폭_(gui->프로그램.BmpBtn_행, 0, d_읽기) + 3,
                           _GBmpButton_Y_(gui->프로그램.BmpBtn_행, 0, d_읽기),
                           40, 26,
                           true);

          _GBmpButton_테두리색_(gui->프로그램.BmpBtn_자동, clBlack2, d_쓰기);

          //[그림 올리기]
          //{
              //올릴 그림 경로이름확장자 합성.
              _Str_합치기_(그림경로이름확장자, 그림경로, "step_auto.bmp");
              _GBmpButton_그림지정_(gui->프로그램.BmpBtn_자동, 그림경로이름확장자);

              //_GBmpButton_그림위치X_(gui->프로그램.BmpBtn_자동, -3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->프로그램.BmpBtn_자동, -3, d_쓰기);

              //[2012.08.05.일][중요추가!!!]{--------------------------
              //반드시 [폭] 지정하도록 한다.
              _GBmpButton_그림폭_(gui->프로그램.BmpBtn_자동, 40, d_쓰기);
              //}----------------------------------------------------

              _GBmpButton_연결그림사용_(gui->프로그램.BmpBtn_자동, true, d_쓰기);
              _GBmpButton_연결그림폭_(gui->프로그램.BmpBtn_자동, 40, d_쓰기);
              _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_자동, 0, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->프로그램.BmpBtn_자동, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->프로그램.BmpBtn_자동,
               "현재 편집기에 열려있는 문서를 명령행 단위로 자동 실행 합니다.\r\n"
               "이 버튼을 누르면 자동 실행이 시작되고 다시 누르면 중지 됩니다.\r\n"
               "실행할 행은 [행지정자] 로 표시되며 [정지점] 이 설정된 행에서\r\n"
               "실행이 중지됩니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_자동, false, d_쓰기);

          //}

      //}

      //[BmpBtn_시작]
      //{
          _GBmpButton_생성_(gui->프로그램.BmpBtn_시작, gui->프로그램.Lb_기본판, GID_생성(),
                           _GBmpButton_X_(gui->프로그램.BmpBtn_자동, 0, d_읽기) + _GBmpButton_폭_(gui->프로그램.BmpBtn_자동, 0, d_읽기) + 3,
                           _GBmpButton_Y_(gui->프로그램.BmpBtn_자동, 0, d_읽기),
                           40, 26,
                           true);
          _GBmpButton_테두리색_(gui->프로그램.BmpBtn_시작, clBlack2, d_쓰기);

          //[그림 올리기]
          //{
              //올릴 그림 경로이름확장자 합성.
              _Str_합치기_(그림경로이름확장자, 그림경로, "reset.bmp");
              _GBmpButton_그림지정_(gui->프로그램.BmpBtn_시작, 그림경로이름확장자);

              //_GBmpButton_그림위치X_(gui->프로그램.BmpBtn_시작, -3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->프로그램.BmpBtn_시작, -3, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->프로그램.BmpBtn_시작, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->프로그램.BmpBtn_시작,
               "현재 편집기에 열려있는 문서의 첫번째 명령행으로 이동합니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_시작, false, d_쓰기);

          //}

      //}

  //}

  //[초기화]
  //{
      //[편집기] 에서 [G.M.RC.BASiC] 인터프리터 문서가 열릴때만 [활성화] 시킨다.
      프로그램_검증버튼_활성(false);

  //}

}

void GUI_소멸자_프로그램(void)
{
  //[2012.07.08.일][생성!!!]

  //[VAR]
  //{
      int  i;

  //}

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[검증]
  //{
      _GBmpButton_삭제_(gui->프로그램.BmpBtn_시작);
      _GBmpButton_삭제_(gui->프로그램.BmpBtn_자동);
      _GBmpButton_삭제_(gui->프로그램.BmpBtn_행);
      _GBmpButton_삭제_(gui->프로그램.BmpBtn_실행);

  //}

  //[실행]
  //{
      for(i = 0; i < 8; i++) { _GBmpButton_삭제_(gui->프로그램.BmpBtn_해제[i]); }
      for(i = 0; i < 8; i++) { _GBmpButton_삭제_(gui->프로그램.BmpBtn_등록[i]); }
      for(i = 0; i < 8; i++) { _GButton_삭제_(gui->프로그램.Btn_실행[i]); }

  //}

  _GLabel_삭제_(gui->프로그램.Lb_기본판);
  _GLabel_삭제_(gui->프로그램.Lb_제목);

  //[사용 변수]
  //{
      //[2012.08.05.일][추가!!!]{----------------------------------------
      //[등록] 된 문서는 [동적생성] 으로 [경로이름확장자] 가 관리되므로 여기서 [삭제].
      //}---------------------------------------------------------------

      for(i = 0; i < 8; i++)
      {
        if(gv->실행경로이름확장자_[i] != NULL) { _Mem_삭제_(gv->실행경로이름확장자_[i]); }

      }

  //}

}

bool GUI_동작함수_프로그램(struct GUI알림문64  *pGUI알림문64)
{
  //[2012.07.15.일][생성!!!]{---------
  //해당 [알림문] 만 처리.
  //처리한 알림문이 있다면 <true> 를 반환.
  //}--------------------------------

  //[VAR]
  //{
      int  i;

  //}

  //[GUI]{----------
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  if     (pGUI알림문64->식별자 == GID_읽기(gui->프로그램.BmpBtn_실행))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 프로그램_BmpBtn_실행_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->프로그램.BmpBtn_행))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 프로그램_BmpBtn_행_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->프로그램.BmpBtn_자동))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 프로그램_BmpBtn_자동_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->프로그램.BmpBtn_시작))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 프로그램_BmpBtn_시작_이벤트_MClick(); return(true); }

  }

  //[실행]
  //{
      for(i = 0; i < 8; i++)
      {
        if(pGUI알림문64->식별자 == GID_읽기(gui->프로그램.Btn_실행[i]))
        {
          if     (pGUI알림문64->알림문 == d_GuiMsg_MDown) { 프로그램_Btn_실행_이벤트_MDown(i); return(true); }
          else if(pGUI알림문64->알림문 == d_GuiMsg_MUp)   { 프로그램_Btn_실행_이벤트_MUp(i);   return(true); }

        }

      }

  //}

  //[등록]
  //{
      for(i = 0; i < 8; i++)
      {
        if(pGUI알림문64->식별자 == GID_읽기(gui->프로그램.BmpBtn_등록[i]))
        {
          if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 프로그램_BmpBtn_등록_이벤트_MClick(i); return(true); }

        }

      }

  //}

  //[해제]
  //{
      for(i = 0; i < 8; i++)
      {
        if(pGUI알림문64->식별자 == GID_읽기(gui->프로그램.BmpBtn_해제[i]))
        {
          if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 프로그램_BmpBtn_해제_이벤트_MClick(i); return(true); }

        }

      }

  //}

  //여기까지 온것은 처리하지 않은 것으로 보고.
  return(false);

}


void 프로그램_BmpBtn_실행_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{--------------
  //실행중에는 [반전] 상태로 만든다(index 수정).
  //}-------------------------------------

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  if(_GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_실행, 0, d_읽기) == 0)
  {
    //[!]{------------------------------------------
    //현재 [정지] 상태이므로 [실행] 으로 전환하고 그림도 교체.
    //}---------------------------------------------

    //[다른 것이 실행중인지 확인]
    //{
        //[2012.08.09.목][추가!!!]{------------------------
        //[실행/자동행/버튼실행] 의 경우는 서로 중복 되면 안된다.
        //모든 [검증기능] 은 반드시 [정지] 상태에서만 시작할수 있다.
        //}-----------------------------------------------

        if(gv->ivm동작구분 != d_ivm_정지) return;

    //}

    _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_실행, 1, d_쓰기);
    _GBmpButton_연결그림번호_(gui->편집기.BmpBtn_검증_실행, 1, d_쓰기);

    gv->ivm동작구분 = d_ivm_실행;


    //[2012.08.09.목][추가!!!]{----------------
    //[실행] 시에는 [지정행] 을 보이지 않는다.
    _GEditor_지정행해제_(gui->편집기.Edtr_편집기);
    //}---------------------------------------

  }
  else
  {
    //현재 [실행] 상태이므로 [정지] 로 바꾼다.

    _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_실행, 0, d_쓰기);
    _GBmpButton_연결그림번호_(gui->편집기.BmpBtn_검증_실행, 0, d_쓰기);

    gv->ivm동작구분 = d_ivm_정지요청;

  }

}

void 프로그램_BmpBtn_행_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{--------
  //[행] 단위 실행으로 [동작구분] 만 설정.
  //}-------------------------------

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[다른 것이 실행중인지 확인]
  //{
      //[2012.08.09.목][추가!!!]{------------------------
      //[실행/자동행/버튼실행] 의 경우는 서로 중복 되면 안된다.
      //모든 [검증기능] 은 반드시 [정지] 상태에서만 시작할수 있다.
      //}-----------------------------------------------

      if(gv->ivm동작구분 != d_ivm_정지) return;

  //}

  gv->ivm동작구분 = d_ivm_행;

}

void 프로그램_BmpBtn_자동_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{--------------------
  //[자동행] 으로 [실행] 과 같으나 [검증시간] 이 적용되고
  //[지정자] 등이 보이는 것만 다르다.
  //}-------------------------------------------

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  if(_GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_자동, 0, d_읽기) == 0)
  {
    //[!]{-------------------------------------------
    //현재 [정지] 상태이므로 [자동행] 으로 전환하고 그림도 교체.
    //}----------------------------------------------

    //[다른 것이 실행중인지 확인]
    //{
        //[2012.08.09.목][추가!!!]{------------------------
        //[실행/자동행/버튼실행] 의 경우는 서로 중복 되면 안된다.
        //모든 [검증기능] 은 반드시 [정지] 상태에서만 시작할수 있다.
        //}-----------------------------------------------

        if(gv->ivm동작구분 != d_ivm_정지) return;

    //}

    _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_자동, 1, d_쓰기);
    _GBmpButton_연결그림번호_(gui->편집기.BmpBtn_검증_자동, 1, d_쓰기);

    gv->ivm동작구분 = d_ivm_자동행;

  }
  else
  {
    //현재 [자동행] 상태이므로 [정지] 로 바꾼다.

    _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_자동, 0, d_쓰기);
    _GBmpButton_연결그림번호_(gui->편집기.BmpBtn_검증_자동, 0, d_쓰기);

    gv->ivm동작구분 = d_ivm_정지요청;

  }

}

void 프로그램_BmpBtn_시작_이벤트_MClick(void)
{
  //[2012.07.22.일][생성!!!]{--------
  //[행] 단위 실행으로 [동작구분] 만 설정.
  //}-------------------------------

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[다른 것이 실행중인지 확인]
  //{
      //[2012.08.09.목][추가!!!]{------------------------
      //[실행/자동행/버튼실행] 의 경우는 서로 중복 되면 안된다.
      //모든 [검증기능] 은 반드시 [정지] 상태에서만 시작할수 있다.
      //}-----------------------------------------------

      if(gv->ivm동작구분 != d_ivm_정지) return;

  //}

  //[2012.08.07.화][추가!!!]{-------------------------------------------
  //시작위치는 반드시 [첫 명령행] 위치를 고려하지 않고 [문서 첫위치] 로 지정하면 된다.
  gv->ivm명령행시작위치 = 0;
  //
  //[2012.08.16.목][추가!!!]--------------------------------------------
  //<인터프리터_이름상수_비우기()> 를 아래 함수로 교체.
  인터프리터_검증_초기화();
  //}------------------------------------------------------------------

  gv->ivm동작구분 = d_ivm_시작행;

}

void 프로그램_Btn_실행_이벤트_MDown(int  p번호)
{
  //[2012.08.06.월][생성!!!]{--------------------------------
  //해당 등록 문서를 [편집기] 에 열어주고 [인터프리터:실행] 상태로 설정.
  //<Up>상태가 될때까지 계속 [실행] 상태가 되므로 결과적으로
  //[누르고 있는 동안 계속 실행] 상태가 된다.
  //}-------------------------------------------------------

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[다른 것이 실행중인지 확인]
  //{
      //[2012.08.09.목][추가!!!]{------------------------
      //[실행/자동행/버튼실행] 의 경우는 서로 중복 되면 안된다.
      //모든 [검증기능] 은 반드시 [정지] 상태에서만 시작할수 있다.
      //}-----------------------------------------------

      if(gv->ivm동작구분 != d_ivm_정지) return;

  //}

  //[등록 문서 존재 확인]
  //{
      //등록 문서가 없다면 처리하지 않는다.
      if(gv->실행경로이름확장자_[p번호] == NULL) return;

  //}

  //[버튼눌림 상태 알림]
  //{
      //[2012.08.22.수][추가!!!]
      gv->ivm실행버튼눌림 = true;

  //}

  //[편집기:보이기]
  //{
      //[2012.08.16.목][추가!!!]{---
      //[편집기] 를 먼저 보인다.
      //}--------------------------

      항목줄_Btn_편집기보이기_이벤트_MClick();

  //}

  //[편집기에 등록 문서 열기]
  //{
      //[주의!!!][2012.08.22.수]{----------------------------------------
      //이 부분을 처리하면 <편집기_Edtr_편집기_이벤트_Select()> 가 발생하고 관련
      //처리가 수반된다는 것에 주의.
      //단, 이 이벤트는 현재 이 함수 자체가 이벤트 안이기 때문에 이 함수가 처리된후
      //발생한다는 것에 주의.
      //아래에서 { gv->ivm동작구분 = d_ivm_실행; } 로 처리해도 이벤트 처리부에서
      //다시 [정지]  로 변경될수 있음에 주의.
      _GEditor_문서열기_(gui->편집기.Edtr_편집기, gv->실행경로이름확장자_[p번호]);
      //}---------------------------------------------------------------

      //문서종류는 <*.c> 로 정의하여 같은 [색동문자] 를 적용.
      _GEditor_문서종류_(gui->편집기.Edtr_편집기, 1, d_쓰기);

  //}

  //[동작구분]
  //{
      gv->ivm명령행시작위치 = 0;

      //[2012.08.16.목][추가!!!]
      //<인터프리터_이름상수_비우기()> 를 아래 함수로 교체.
      인터프리터_검증_초기화();

      gv->ivm동작구분 = d_ivm_실행;

      //[실행] 시에는 [지정행] 을 보이지 않는다.
      _GEditor_지정행해제_(gui->편집기.Edtr_편집기);

  //}

}

void 프로그램_Btn_실행_이벤트_MUp(int  p번호)
{
  //[2012.08.06.월][생성!!!]{--
  //[인터프리터:정지] 상태로 설정.
  //}-------------------------

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[버튼올림 상태 알림]
  //{
      //[2012.08.22.수][추가!!!]
      gv->ivm실행버튼눌림 = false;

  //}

  //[다른 것이 실행중인지 확인]
  //{
      //[2012.08.09.목][추가!!!]{------------------------
      //[실행/자동행/버튼실행] 의 경우는 서로 중복 되면 안된다.
      //모든 [검증기능] 은 반드시 [정지] 상태에서만 시작할수 있다.
      //}-----------------------------------------------

      if((gv->ivm동작구분 != d_ivm_정지) &&
         ((_GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_실행, 0, d_읽기) != 0) ||
          (_GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_자동, 0, d_읽기) != 0))) return;

  //}

  //[동작구분]
  //{
      //[2012.08.09.목][수정!!!]{------------------
      //바로 [정지] 하지 않고 [정지요청] 하는 것으로 수정.
      //}-----------------------------------------

      gv->ivm동작구분 = d_ivm_정지요청;

  //}

}

void 프로그램_BmpBtn_등록_이벤트_MClick(int  p번호)
{
  //[2012.07.23.월][생성!!!]{-----------------------------------
  //[실행] 할 문서를 [버튼:실행] 에 등록.
  //단, [이름] 만 추리되 너무 긴 경우는 [버튼] 에 들어가도록 [말줄임] 처리.
  //
  //문서이름은 [동적생성] 으로 관리된다.
  //}----------------------------------------------------------

  //[VAR]
  //{
      //임시 사용으로 넉넉하게 설정.
      char  문자열[1024*2];

      char  이름[1024];

  //}

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[열기 대화상자]
  //{
      _File_열기대화상자_확장자_("GMRCBASiC(*.gmrcbasic)|*.gmrcbasic");
      //_File_열기대화상자_확장자_("*.gmrcbasic|*.gmrcbasic");

      if(_File_열기대화상자_() != true) return;

      //경로이름확장자 얻기.
      _File_열기대화상자_문서이름_(문자열);

  //}

  //[등록]
  //{
      //[경로이름확장자:저장]
      //{
          //이전 생성된 것이 있다면 [삭제].
          if(gv->실행경로이름확장자_[p번호] != NULL) _Mem_삭제_(gv->실행경로이름확장자_[p번호]);

          //[경로이름확장자] 저장/관리할 공간 [동적생성].
          //'\0' 까지 저장-----------------------------------------------------v
          gv->실행경로이름확장자_[p번호] = (char *)_Mem_생성_(_Str_길이얻기_(문자열) + 1);

          //[경로이름확장자] 저장.
          _Str_할당_(gv->실행경로이름확장자_[p번호], 문자열);

      //}

      //[이름만 추출]
      //{
          _FileStr_이름만얻기_(gv->실행경로이름확장자_[p번호], 이름);

      //}

      //[말줄임 적용]
      //{
          //출력할 [버튼:폭] 에 맞게 [말줄임] 적용.
          _Str_출력폭줄임표적용_(이름,
                             _GButton_폭_(gui->프로그램.Btn_실행[p번호], NULL, d_읽기) - 2,
                             문자열);

      //}

      //[버튼에 등록]
      //{
          //<제목:X> 위치를 알기 위하여 일단 [자동위치] 로 설정.
          _GButton_제목자동위치_(gui->프로그램.Btn_실행[p번호], true, d_쓰기);
          _GButton_제목_(gui->프로그램.Btn_실행[p번호], 문자열, d_쓰기);

          //<제목:X, Y> 를 얻었으므로 이 값으로 재설정.
          //이는 [자동위치] 에서 <제목:Y> 위치를 세로 가운데로 보기 좋게 위치시키기 위한것.
          _GButton_제목자동위치_(gui->프로그램.Btn_실행[p번호], false, d_쓰기);
          _GButton_제목위치X_(gui->프로그램.Btn_실행[p번호], _GButton_제목위치X_(gui->프로그램.Btn_실행[p번호], NULL, d_읽기), d_쓰기);
          _GButton_제목위치Y_(gui->프로그램.Btn_실행[p번호], 4, d_쓰기);

      //}

      //[풍선도움말]
      //{
          //[2012.08.15.수][추가!!!]{-----------------------
          //[Btn_실행] 의 [풍선도움말] 을 [경로이름확장자] 로 교체.
          //}----------------------------------------------

          _GButton_풍선도움말문자열_(gui->프로그램.Btn_실행[p번호], gv->실행경로이름확장자_[p번호], d_쓰기);

      //}

  //}

}

void 프로그램_BmpBtn_해제_이벤트_MClick(int  p번호)
{
  //[2012.07.23.월][생성!!!]{---------------------------
  //[등록] 된 [문서]를 해제시키고 [문서이름 저장소] 를 동작 삭제.
  //}--------------------------------------------------

  //[VAR]
  //{
      char  문자열[128];

  //}

  //[GUI/전역변수]{------
  struct 전역정보  *gv;
  struct GUI     *gui;
  전역정보_위치얻기(&gv);
  GUI_위치얻기(&gui);
  //}------------------

  //[해제]
  //{
      //[경로이름확장자:저장]
      //{
          //이전 생성된 것이 있다면 [삭제].
          if(gv->실행경로이름확장자_[p번호] != NULL) _Mem_삭제_(gv->실행경로이름확장자_[p번호]);

          //반드시 <NULL> 로 초기화 해서 [해제] 된 상태임을 알린다.
          gv->실행경로이름확장자_[p번호] = NULL;

      //}

      //[버튼에 해재]
      //{
          _GButton_제목_(gui->프로그램.Btn_실행[p번호], "", d_쓰기);

      //}

      //[풍선도움말]
      //{
          //[2012.08.15.수][추가!!!]{------------------
          //[Btn_실행] 의 [풍선도움말] 을 기본 설명으로 복원.
          //}-----------------------------------------

          _GButton_풍선도움말문자열_
          (gui->프로그램.Btn_실행[p번호],
           "버튼을 누르면 등록된 문서를 자동으로 편집기에 열어주며\r\n"
           "버튼을 누르고 있는 동안 해당 프로그램이 자동 실행됩니다.",
           d_쓰기);

      //}

  //}

}

//----------------------------------------------------------------------------
//[함수]-----------------------------------------------------------------------
//----------------------------------------------------------------------------

void 프로그램_풍선도움말_사용유무(bool  p사용유무)
{
  //[2012.07.31.화][생성!!!]

  //[VAR]
  //{
      int  i;

  //}

  //[GUI]{----------
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  for(i = 0; i < 8; i++) { _GButton_풍선도움말_(gui->프로그램.Btn_실행[i], p사용유무, d_쓰기); }

  for(i = 0; i < 8; i++) { _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_등록[i], p사용유무, d_쓰기); }

  for(i = 0; i < 8; i++) { _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_해제[i], p사용유무, d_쓰기); }

  _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_실행, p사용유무, d_쓰기);

  _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_행, p사용유무, d_쓰기);

  _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_자동, p사용유무, d_쓰기);

  _GBmpButton_풍선도움말_(gui->프로그램.BmpBtn_시작, p사용유무, d_쓰기);

}

void 프로그램_검증버튼_활성(bool  p활성유뮤)
{
  //[2012.07.18.수][생성!!!]{---------
  //4개 검증 버튼의 [활성화/비활성화] 제어.
  //}--------------------------------

  //[GUI]{----------
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  _GBmpButton_유효_(gui->프로그램.BmpBtn_실행, p활성유뮤, d_쓰기);

  _GBmpButton_유효_(gui->프로그램.BmpBtn_행, p활성유뮤, d_쓰기);

  _GBmpButton_유효_(gui->프로그램.BmpBtn_자동, p활성유뮤, d_쓰기);

  _GBmpButton_유효_(gui->프로그램.BmpBtn_시작, p활성유뮤, d_쓰기);

}

void 프로그램_실행자동행버튼_복구(void)
{
  //[2012.08.11.토][생성!!!]{----------------
  //[버튼:실행/자동행] 을 기본(올려진상태)로 만든다.
  //}---------------------------------------

  //[GUI/전역변수]{---
  struct GUI  *gui;
  GUI_위치얻기(&gui);
  //}---------------

  //[실행]
  //{
      _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_실행, 0, d_쓰기);
      _GBmpButton_연결그림번호_(gui->편집기.BmpBtn_검증_실행, 0, d_쓰기);

  //}

  //[자동행]
  //{
      _GBmpButton_연결그림번호_(gui->프로그램.BmpBtn_자동, 0, d_쓰기);
      _GBmpButton_연결그림번호_(gui->편집기.BmpBtn_검증_자동, 0, d_쓰기);

  //}

}







