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

//[!]{--------------------
#include "GUI\GUI_편집기.h"
//}-----------------------

#include "함수묶음.h"

#include "GUI\GUI.h"

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

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


void GUI_생성자_편집기(void)
{
  //[2012.07.08.일][생성!!!]

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

  //}

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

  //[전체판]
  //{
      //[!]{-----------------------------
      //[편집기] 는 처음에는 감춰진 상태로 시작.
      //}--------------------------------

      _GForm_생성_(gui->편집기.Form_기본틀, NULL, GID_생성(),
                  _GVmos_X_(gui->기본틀.GVmos, 0, d_읽기),
                  _GVmos_Y_(gui->기본틀.GVmos, 0, d_읽기) + _GVmos_높이_(gui->기본틀.GVmos, 0, d_읽기) - 1,
                  _GVmos_폭_(gui->기본틀.GVmos, 0, d_읽기),
                  300,//_GVmos_높이_(gui->기본틀.GVmos, 0, d_읽기),
                  false);

      _GForm_제목줄문자열_(gui->편집기.Form_기본틀,
                        "::: GMRCBASiC-프로그램/편집기 :::     ",
                        d_쓰기);

      //[이벤트]
      //{
          _GForm_이벤트_Close_(gui->편집기.Form_기본틀, true, d_쓰기);
          _GForm_이벤트_Resize_(gui->편집기.Form_기본틀, true, d_쓰기);

      //}

  //}

  //[편집기]
  //{
      //[Lb_제목]
      //{
          _GLabel_생성_(gui->편집기.Lb_제목, gui->편집기.Form_기본틀, GID_생성(),
                       4,
                       4,
                       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_쓰기);

      //}

      //[Lb_기본판]
      //{
          _GLabel_생성_(gui->편집기.Lb_기본판, gui->편집기.Form_기본틀, GID_생성(),
                       4,
                       _GLabel_Y_(gui->편집기.Lb_제목, 0, d_읽기) + _GLabel_높이_(gui->편집기.Lb_제목, 0, d_읽기)/2,
                       _GForm_폭_(gui->편집기.Form_기본틀, 0, d_읽기) - 16,
                       _GForm_높이_(gui->편집기.Form_기본틀, 0, d_읽기) - 16 - 23,
                       true);

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

      //}

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

      //[Edtr_편집기]
      //{
          _GEditor_생성_(gui->편집기.Edtr_편집기, gui->편집기.Lb_기본판, GID_생성(),
                        4,
                        _GLabel_높이_(gui->편집기.Lb_제목, 0, d_읽기)/2 + 4,
                        _GLabel_폭_(gui->편집기.Lb_기본판, 0, d_읽기) - 8,
                        _GLabel_높이_(gui->편집기.Lb_기본판, 0, d_읽기) - 16,
                        true);

          //[이벤트]
          //{
              _GEditor_이벤트_Select_(gui->편집기.Edtr_편집기, true, d_쓰기);
              _GEditor_이벤트_MSelect_(gui->편집기.Edtr_편집기, true, d_쓰기);

          //}

      //}

      //[Lb_문서]
      //{
          _GLabel_생성_(gui->편집기.Lb_문서, gui->편집기.Form_기본틀, GID_생성(),
                       _GLabel_X_(gui->편집기.Lb_제목, 0, d_읽기) + _GLabel_폭_(gui->편집기.Lb_제목, 0, d_읽기) + 4,
                       _GLabel_Y_(gui->편집기.Lb_제목, 0, d_읽기),
                       78, 16,
                       true);
          _GLabel_제목_(gui->편집기.Lb_문서, "문서/설정", d_쓰기);

          _GLabel_문자색_(gui->편집기.Lb_문서, clGray, d_쓰기);

          _GLabel_테두리_(gui->편집기.Lb_문서, true, d_쓰기);
          _GLabel_테두리색_(gui->편집기.Lb_문서, clBlack2, d_쓰기);

          _GLabel_제목수평자동위치_(gui->편집기.Lb_문서, false, d_쓰기);
          _GLabel_제목위치X_(gui->편집기.Lb_문서, 14, d_쓰기);


      //}

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

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

          //}

          _GBmpButton_생성_(gui->편집기.BmpBtn_문서, gui->편집기.Lb_문서, GID_생성(),
                           1,
                           1,
                           14,
                           14,
                           true);

          _GBmpButton_테두리_(gui->편집기.BmpBtn_문서, false, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_문서, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_문서, 1, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_문서, 1, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->편집기.BmpBtn_문서, true, d_쓰기);

          //}

      //}

      //[List_문서]
      //{
          _GList_생성_(gui->편집기.List_문서, NULL, GID_생성(),
                      _GLabel_X_(gui->편집기.Lb_문서, 0, d_읽기),
                      _GLabel_Y_(gui->편집기.Lb_문서, 0, d_읽기) + _GLabel_높이_(gui->편집기.Lb_문서, 0, d_읽기) - 1,
                      _GLabel_폭_(gui->편집기.Lb_문서, 0, d_읽기),
                      100,
                      false);

          _GList_전체항목_(gui->편집기.List_문서,
                         "새문서\r\n"
                         "열기\r\n"
                         "저장\r\n"
                         "다른이름으로저장\r\n"
                         "모두저장\r\n"
                         "<예제>-------\r\n"
                         "기본예제\r\n"
                         "<설정>-------\r\n"
                         "명령어색설정\r\n"
                         "주석문색설정\r\n"
                         "16진수색설정\r\n"
                         "2진수색설정\r\n"
                         "정지점색설정\r\n"
                         "지정자색설정\r\n"
                         "지정행문자색설정\r\n"
                         "지정행배경색설정\r\n"
                         "배경밝기설정\r\n"
                         "배경그림설정\r\n"
                         "------------\r\n"
                         "기본설정으로전환",
                         d_쓰기);

          _GList_메뉴사용_(gui->편집기.List_문서, true, d_쓰기);
          _GList_자동폭_(gui->편집기.List_문서, true, d_쓰기);
          _GList_자동높이_(gui->편집기.List_문서, true, d_쓰기);
          _GList_영점X_(gui->편집기.List_문서, 4, d_쓰기);
          //_GList_영점Y_(gui->편집기.List_문서, 2, d_쓰기);

          _GList_임시선택문자색_(gui->편집기.List_문서, clWhite, d_쓰기);
          _GList_임시선택배경색_(gui->편집기.List_문서, clBlack2, d_쓰기);
          _GList_배경색_(gui->편집기.List_문서, _GColor_밝기_(clGray, 150), d_쓰기);
          _GList_테두리색_(gui->편집기.List_문서, clBlack2, d_쓰기);

          //[이벤트]
          //{
              //[항목선택] 의 경우 발생.
              _GList_이벤트_Select_(gui->편집기.List_문서, true, d_쓰기);

              //[2012.08.18.토][추가!!!]{------------------------------
              _GList_이벤트_MSelect_(gui->편집기.List_문서, true, d_쓰기);
              //}-----------------------------------------------------

          //}

      //}

      //[Btn_열기]
      //{
          _GButton_생성_(gui->편집기.Btn_열기, gui->편집기.Form_기본틀, GID_생성(),
                        _GLabel_X_(gui->편집기.Lb_문서, 0, d_읽기) + _GLabel_폭_(gui->편집기.Lb_문서, 0, d_읽기) + 2,
                        _GLabel_Y_(gui->편집기.Lb_문서, 0, d_읽기),
                        40, 16,
                        true);
          _GButton_제목_(gui->편집기.Btn_열기, "열기", d_쓰기);
          _GButton_테두리색_(gui->편집기.Btn_열기, clBlack2, d_쓰기);

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->편집기.Btn_열기, true, d_쓰기);

          //}

      //}

      //[Btn_저장]
      //{
          _GButton_생성_(gui->편집기.Btn_저장, gui->편집기.Form_기본틀, GID_생성(),
                        _GButton_X_(gui->편집기.Btn_열기, 0, d_읽기) + _GButton_폭_(gui->편집기.Btn_열기, 0, d_읽기) + 2,
                        _GButton_Y_(gui->편집기.Btn_열기, 0, d_읽기),
                        40, 16,
                        true);
          _GButton_제목_(gui->편집기.Btn_저장, "저장", d_쓰기);
          _GButton_테두리색_(gui->편집기.Btn_저장, clBlack2, d_쓰기);

          //[2012.07.22.일][추가!!!]{-----------------------
          //[저장] 기능은 문서가 열려있을때만 유효.
          _GButton_유효_(gui->편집기.Btn_저장, false, d_쓰기);
          //}----------------------------------------------

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->편집기.Btn_저장, true, d_쓰기);

          //}

      //}

      //[Btn_모두저장]
      //{
          _GButton_생성_(gui->편집기.Btn_모두저장, gui->편집기.Form_기본틀, GID_생성(),
                        _GButton_X_(gui->편집기.Btn_저장, 0, d_읽기) + _GButton_폭_(gui->편집기.Btn_저장, 0, d_읽기) + 2,
                        _GButton_Y_(gui->편집기.Btn_저장, 0, d_읽기),
                        60, 16,
                        true);
          _GButton_제목_(gui->편집기.Btn_모두저장, "모두저장", d_쓰기);
          _GButton_테두리색_(gui->편집기.Btn_모두저장, clBlack2, d_쓰기);

          //[2012.07.22.일][추가!!!]{--------------------------
          //[저장] 기능은 문서가 열려있을때만 유효.
          _GButton_유효_(gui->편집기.Btn_모두저장, false, d_쓰기);
          //}-------------------------------------------------

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->편집기.Btn_모두저장, true, d_쓰기);

          //}

      //}


      //[명령표]
      //{
          //[Btn_명령표]
          //{
              //[2012.08.12.일][추가!!!]
              _GButton_생성_(gui->편집기.Btn_명령표, gui->편집기.Form_기본틀, GID_생성(),
                            _GButton_X_(gui->편집기.Btn_모두저장, 0, d_읽기) + _GButton_폭_(gui->편집기.Btn_모두저장, 0, d_읽기) + 10,
                            _GButton_Y_(gui->편집기.Btn_모두저장, 0, d_읽기),
                            57, 16,
                            true);
              _GButton_제목_(gui->편집기.Btn_명령표, "명령표", d_쓰기);

              _GButton_제목자동위치_(gui->편집기.Btn_명령표, false, d_쓰기);
              _GButton_제목위치X_(gui->편집기.Btn_명령표, 16, d_쓰기);

              _GButton_테두리색_(gui->편집기.Btn_명령표, clBlack2, d_쓰기);

              //[이벤트]
              //{
                  _GButton_이벤트_MClick_(gui->편집기.Btn_명령표, true, d_쓰기);

              //}

          //}

          //[BmpBtn_명령표]
          //{
              //[2012.08.13.월][추가!!!!]

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

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

              //}

              _GBmpButton_생성_(gui->편집기.BmpBtn_명령표, gui->편집기.Btn_명령표, GID_생성(),
                               1,
                               1,
                               14,
                               14,
                               true);

              _GBmpButton_테두리_(gui->편집기.BmpBtn_명령표, false, d_쓰기);

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

                  _GBmpButton_그림지정_(gui->편집기.BmpBtn_명령표, 그림경로이름확장자);
                  _GBmpButton_그림위치X_(gui->편집기.BmpBtn_명령표, 1, d_쓰기);
                  _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_명령표, 1, d_쓰기);

              //}

              //[이벤트]
              //{
                  _GBmpButton_이벤트_MClick_(gui->편집기.BmpBtn_명령표, true, d_쓰기);

              //}

          //}

          //[List_명령표]
          //{
              //[2012.08.13.월][추가!!!!]
              _GList_생성_(gui->편집기.List_명령표, NULL, GID_생성(),
                          _GLabel_X_(gui->편집기.Lb_문서, 0, d_읽기),
                          _GLabel_Y_(gui->편집기.Lb_문서, 0, d_읽기) + _GLabel_높이_(gui->편집기.Lb_문서, 0, d_읽기) - 1,
                          _GLabel_폭_(gui->편집기.Lb_문서, 0, d_읽기),
                          100,
                          false);

              _GList_전체항목_(gui->편집기.List_명령표,
                             "각도(Degree)\r\n속도(Speed)\r\n각도속도(DegSpd)\r\n각도8(Degree8)\r\n각도8T(Degree8T)\r\n"
                             "속도8(Speed8)\r\n각도설정(DegMem)\r\n각도설정X(DegMemX)\r\n각도설정XT(DegMemXT)\r\n"
                             "속도설정(SpdMem)\r\n속도설정X(SpdMemX)\r\n각도속도설정(DegSpdMem)\r\n설정반영(MemSet)\r\n"
                             "펄스(Pulse)\r\n가감속상수(AccelDiv)\r\n가감속상수8(AccelDiv8)\r\n가감속상수X(AccelDivX)\r\n"
                             "완료보고시점(ReportTime)\r\n완료보고시점X(ReportTimeX)\r\n완료보고(Report)\r\n완료보고대기(WaitReport)\r\n"
                             "시간지연(Delay)\r\n이동(Goto)\r\n끝(End)\r\n라벨선언\r\n#이름상수(#NameConstant)",
                             d_쓰기);

              _GList_메뉴사용_(gui->편집기.List_명령표, true, d_쓰기);
              _GList_자동폭_(gui->편집기.List_명령표, true, d_쓰기);
              _GList_자동높이_(gui->편집기.List_명령표, true, d_쓰기);
              _GList_영점X_(gui->편집기.List_명령표, 4, d_쓰기);

              _GList_임시선택문자색_(gui->편집기.List_명령표, clWhite, d_쓰기);
              _GList_임시선택배경색_(gui->편집기.List_명령표, clBlack2, d_쓰기);
              _GList_배경색_(gui->편집기.List_명령표, _GColor_밝기_(clGray, 150), d_쓰기);
              _GList_테두리색_(gui->편집기.List_명령표, clBlack2, d_쓰기);

              //[이벤트]
              //{
                  //[항목선택] 의 경우 발생.
                  _GList_이벤트_Select_(gui->편집기.List_명령표, true, d_쓰기);

              //}

          //}

      //}


      //[Btn_읽기]
      //{
          _GButton_생성_(gui->편집기.Btn_읽기, gui->편집기.Form_기본틀, GID_생성(),
                        _GLabel_X_(gui->편집기.Lb_기본판, 0, d_읽기) + _GLabel_폭_(gui->편집기.Lb_기본판, 0, d_읽기) - (16 + 2)*2 - 2,
                        _GLabel_Y_(gui->편집기.Lb_제목, 0, d_읽기),
                        16, 16,
                        true);
          _GButton_제목_(gui->편집기.Btn_읽기, "읽", d_쓰기);
          _GButton_배경색_(gui->편집기.Btn_읽기, _GColor_밝기_(clBlack2, 125), d_쓰기);
          _GButton_문자색_(gui->편집기.Btn_읽기, clWhite, d_쓰기);
          _GButton_테두리색_(gui->편집기.Btn_읽기, clBlack2, d_쓰기);

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->편집기.Btn_읽기, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GButton_풍선도움말문자열_
              (gui->편집기.Btn_읽기,
               "[제어기] 안에 저장돼 있는 문자열을 읽어서 편집기에 표시합니다.",
               d_쓰기);

              _GButton_풍선도움말_(gui->편집기.Btn_읽기, false, d_쓰기);

          //}

      //}

      //[Btn_쓰기]
      //{
          _GButton_생성_(gui->편집기.Btn_쓰기, gui->편집기.Form_기본틀, GID_생성(),
                        _GButton_X_(gui->편집기.Btn_읽기, 0, d_읽기) + _GButton_폭_(gui->편집기.Btn_읽기, 0, d_읽기) + 2,
                        _GButton_Y_(gui->편집기.Btn_읽기, 0, d_읽기),
                        16, 16,
                        true);
          _GButton_제목_(gui->편집기.Btn_쓰기, "쓰", d_쓰기);
          _GButton_배경색_(gui->편집기.Btn_쓰기, _GColor_밝기_(clBlack2, 125), d_쓰기);
          _GButton_문자색_(gui->편집기.Btn_쓰기, clWhite, d_쓰기);
          _GButton_테두리색_(gui->편집기.Btn_쓰기, clBlack2, d_쓰기);

          //[이벤트]
          //{
              _GButton_이벤트_MClick_(gui->편집기.Btn_쓰기, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GButton_풍선도움말문자열_
              (gui->편집기.Btn_쓰기,
               "현재 [편집기] 안의 문자열을 제어기로 전송합니다.\r\n"
               "문자열은 450 Byte 를 넘을수 없으며 이 문자열은\r\n"
               "제어기 내부 EEprom 에 보존됩니다.",
               d_쓰기);

              _GButton_풍선도움말_(gui->편집기.Btn_쓰기, false, d_쓰기);

          //}

      //}

  //}

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

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

      //}

      //[BmpBtn_검증_실행]
      //{
          _GBmpButton_생성_(gui->편집기.BmpBtn_검증_실행, gui->편집기.Form_기본틀, GID_생성(),
                           _GLabel_X_(gui->편집기.Lb_기본판, 0, d_읽기) + _GLabel_폭_(gui->편집기.Lb_기본판, 0, d_읽기) - 278,
                           _GLabel_Y_(gui->편집기.Lb_문서, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_검증_실행, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_검증_실행, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_검증_실행, -5, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_검증_실행, -8, d_쓰기);

              //[2012.08.05.일][중요추가!!!]{----------------------------
              //반드시 [폭] 지정하도록 한다.
              _GBmpButton_그림폭_(gui->편집기.BmpBtn_검증_실행, 30, 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->편집기.Form_기본틀, GID_생성(),
                           _GBmpButton_X_(gui->편집기.BmpBtn_검증_실행, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_실행, 0, d_읽기) + 2,
                           _GBmpButton_Y_(gui->편집기.BmpBtn_검증_실행, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_검증_행, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_검증_행, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_검증_행, -5, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_검증_행, -8, 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->편집기.Form_기본틀, GID_생성(),
                           _GBmpButton_X_(gui->편집기.BmpBtn_검증_행, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_행, 0, d_읽기) + 2,
                           _GBmpButton_Y_(gui->편집기.BmpBtn_검증_행, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_검증_자동, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_검증_자동, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_검증_자동, -5, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_검증_자동, -8, d_쓰기);

              //[2012.08.05.일][중요추가!!!]{----------------------------
              //반드시 [폭] 지정하도록 한다.
              _GBmpButton_그림폭_(gui->편집기.BmpBtn_검증_자동, 30, 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->편집기.Form_기본틀, GID_생성(),
                           _GBmpButton_X_(gui->편집기.BmpBtn_검증_자동, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_자동, 0, d_읽기) + 2,
                           _GBmpButton_Y_(gui->편집기.BmpBtn_검증_자동, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_검증_시작, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_검증_시작, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_검증_시작, -5, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_검증_시작, -8, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->편집기.BmpBtn_검증_시작, true, d_쓰기);

          //}

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

              _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_검증_시작, false, d_쓰기);

          //}

      //}

  //}

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

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

      //}

      //[BmpBtn_시작]
      //{
          _GBmpButton_생성_(gui->편집기.BmpBtn_시작, gui->편집기.Form_기본틀, GID_생성(),
                           _GBmpButton_X_(gui->편집기.BmpBtn_검증_시작, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_시작, 0, d_읽기) + 10,
                           _GBmpButton_Y_(gui->편집기.BmpBtn_검증_시작, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_시작, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_시작, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_시작, 3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_시작, -2, d_쓰기);

          //}

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

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->편집기.BmpBtn_시작,
               "[제어기] PWM 출력을 시작합니다.\r\n"
               "[제어기] PWM 출력이 일시 정지상태 일때만 유효합니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_시작, false, d_쓰기);

          //}

      //}

      //[BmpBtn_정지]
      //{
          _GBmpButton_생성_(gui->편집기.BmpBtn_정지, gui->편집기.Form_기본틀, GID_생성(),
                           _GBmpButton_X_(gui->편집기.BmpBtn_시작, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_시작, 0, d_읽기) + 2,
                           _GBmpButton_Y_(gui->편집기.BmpBtn_시작, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_정지, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_정지, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_정지, 3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_정지, -2, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->편집기.BmpBtn_정지, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->편집기.BmpBtn_정지,
               "[제어기] PWM 출력을 일시 정지시킵니다.\r\n"
               "개별적인 PWM 출력 설정과 무관한 것으로\r\n"
               "일시적으로만 적용되는 기능입니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_정지, false, d_쓰기);

          //}

      //}

      //[BmpBtn_재기동]
      //{
          _GBmpButton_생성_(gui->편집기.BmpBtn_재기동, gui->편집기.Form_기본틀, GID_생성(),
                           _GBmpButton_X_(gui->편집기.BmpBtn_정지, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_정지, 0, d_읽기) + 2,
                           _GBmpButton_Y_(gui->편집기.BmpBtn_정지, 0, d_읽기),
                           30, 16,
                           true);

          _GBmpButton_테두리색_(gui->편집기.BmpBtn_재기동, clBlack2, d_쓰기);

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

              _GBmpButton_그림지정_(gui->편집기.BmpBtn_재기동, 그림경로이름확장자);
              _GBmpButton_그림위치X_(gui->편집기.BmpBtn_재기동, 3, d_쓰기);
              _GBmpButton_그림위치Y_(gui->편집기.BmpBtn_재기동, -2, d_쓰기);

          //}

          //[이벤트]
          //{
              _GBmpButton_이벤트_MClick_(gui->편집기.BmpBtn_재기동, true, d_쓰기);

          //}

          //[풍선도움말]
          //{
              _GBmpButton_풍선도움말문자열_
              (gui->편집기.BmpBtn_재기동,
               "[제어기] 를 재기동 하고 [제어기] 의 현재 동작\r\n"
               "상태를 모두 읽어 관련 [그림부품] 에 반영합니다.",
               d_쓰기);

              _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_재기동, false, d_쓰기);

          //}

      //}

  //}

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

      //[2012.08.04.토][추가!!!]
      //[G.M.RC.BASiC:인터프리터] 용 [예약어] 를 [색동문자] 지정 [단어] 로 추가.
      편집기_색동단어_추가();

      //[2012.08.05.일][추가!!!]
      gv->편집기저장소 = (char *)_GEditor_편집기저장소위치얻기_(gui->편집기.Edtr_편집기);

  //}

  //[색동문자/사용자설정]
  //{
      //[2012.08.19.일][추가!!!]{------
      //<*.opt> 설정문서 내용으로 설정.
      //<*.opt> 가 없다면 기본설정을 적용.
      //}-----------------------------

      if(Ide_설정문서_반영() != true)
      {
        //[2012.08.20.월][수정!!!]{--------------------
        //<*.opt> 문서가 없거나 오류가 있다면 기본설정을 적용.
        //}-------------------------------------------

        //[맷돌C:예약어] 가 아니라 [인터프리터:예약어] 를 대상으로 처리.
        _GEditor_색동문자적용단어색_(gui->편집기.Edtr_편집기, clBlue, d_쓰기);

        _GEditor_색동문자주석_(gui->편집기.Edtr_편집기, 0x9d9d9d, d_쓰기);

        _GEditor_색동문자16진수_(gui->편집기.Edtr_편집기, 0xff8000, d_쓰기);

        _GEditor_색동문자2진수_(gui->편집기.Edtr_편집기, 0xff00ff, d_쓰기);

        _GEditor_정지점색_(gui->편집기.Edtr_편집기, clRed, d_쓰기);

        _GEditor_행지정자색_(gui->편집기.Edtr_편집기, 0xcc, d_쓰기);

        _GEditor_지정행문자색_(gui->편집기.Edtr_편집기, clBlack, d_쓰기);

        _GEditor_지정행배경색_(gui->편집기.Edtr_편집기, clLime, d_쓰기);

        _GEditor_배경밝기_(gui->편집기.Edtr_편집기, 225, d_쓰기);

        //[배경그림] 기본으로 설정.
        편집기_배경그림_기본설정();

      }

  //}

}

void GUI_소멸자_편집기(void)
{
  //[2012.07.08.일][생성!!!]

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

  //[제어]
  //{
      _GBmpButton_삭제_(gui->편집기.BmpBtn_재기동);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_정지);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_시작);

  //}

  //[검증]
  //{
      _GBmpButton_삭제_(gui->편집기.BmpBtn_검증_시작);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_검증_자동);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_검증_행);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_검증_실행);

  //}

  //[편집기]
  //{
      _GButton_삭제_(gui->편집기.Btn_쓰기);
      _GButton_삭제_(gui->편집기.Btn_읽기);

      //[2012.08.13.월][추가!!!]{----------------
      _GList_삭제_(gui->편집기.List_명령표);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_명령표);
      //[2012.08.12.일][추가!!!]-----------------
      _GButton_삭제_(gui->편집기.Btn_명령표);
      //}---------------------------------------

      _GButton_삭제_(gui->편집기.Btn_모두저장);
      _GButton_삭제_(gui->편집기.Btn_저장);
      _GButton_삭제_(gui->편집기.Btn_열기);

      _GList_삭제_(gui->편집기.List_문서);
      _GBmpButton_삭제_(gui->편집기.BmpBtn_문서);
      _GLabel_삭제_(gui->편집기.Lb_문서);

      _GEditor_삭제_(gui->편집기.Edtr_편집기);

  //}

  _GLabel_삭제_(gui->편집기.Lb_기본판);
  _GLabel_삭제_(gui->편집기.Lb_제목);

  _GForm_삭제_(gui->편집기.Form_기본틀);

  //[인터프리터 관련 삭제]
  //{
      //[2012.08.10.금][추가!!!]
      인터프리터_소멸자();

  //}

}

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

  //[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->편집기.List_문서))
  {
    if     (pGUI알림문64->알림문 == d_GuiMsg_Select)    { 편집기_List_문서_이벤트_Select(); return(true); }
    //[2012.08.18.토][추가!!!]
    else if(pGUI알림문64->알림문 == d_GuiMsg_MSelect)   { 편집기_List_문서_이벤트_MSelect(); return(true); }

  }


  else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Btn_열기))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_Btn_열기_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Btn_저장))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_Btn_저장_이벤트_MClick(); return(true); }

  }
  else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Btn_모두저장))
  {
    if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_Btn_모두저장_이벤트_MClick(); return(true); }

  }


  //[명령표]
  //{
      //[2012.08.12.일][추가!!!]
      else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Btn_명령표))
      {
        if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_Btn_명령표_이벤트_MClick(); return(true); }

      }
      //[2012.08.13.월][추가!!!]
      else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.BmpBtn_명령표))
      {
        if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_BmpBtn_명령표_이벤트_MClick(); return(true); }

      }
      else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.List_명령표))
      {
        if(pGUI알림문64->알림문 == d_GuiMsg_Select) { 편집기_List_명령표_이벤트_Select(); return(true); }

      }

  //}


  //[2012.07.17.화][추가!!!]
  else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Form_기본틀))
  {
    if     (pGUI알림문64->알림문 == d_GuiMsg_Close)  { 편집기_Form_기본틀_이벤트_Close();  return(true); }
    else if(pGUI알림문64->알림문 == d_GuiMsg_Resize) { 편집기_Form_기본틀_이벤트_Resize(); return(true); }

  }


  //[2012.07.19.목][추가!!!]
  else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Edtr_편집기))
  {
    if     (pGUI알림문64->알림문 == d_GuiMsg_Select)  { 편집기_Edtr_편집기_이벤트_Select(pGUI알림문64->정보int);  return(true); }
    else if(pGUI알림문64->알림문 == d_GuiMsg_MSelect) { 편집기_Edtr_편집기_이벤트_MSelect(pGUI알림문64->정보int); 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); }

      }
      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); }

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

      }

  //}

  //[읽기/쓰기]
  //{
      else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Btn_읽기))
      {
        if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_Btn_읽기_이벤트_MClick(); return(true); }

      }
      else if(pGUI알림문64->식별자 == GID_읽기(gui->편집기.Btn_쓰기))
      {
        if(pGUI알림문64->알림문 == d_GuiMsg_MClick) { 편집기_Btn_쓰기_이벤트_MClick(); return(true); }

      }

  //}

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

}


void 편집기_BmpBtn_문서_이벤트_MClick(void)
{
  //[2012.07.15.일][생성!!!]{------------------------
  //[문서항목] 이 보이지 않는다면 보이고, 보이고 있다면 감춘다.
  //}-----------------------------------------------

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

  if(_GList_보이기_(gui->편집기.List_문서, NULL, d_읽기) == true)
  {
    //이미 보이고 있다면 감추기.
    _GList_보이기_(gui->편집기.List_문서, false, d_쓰기);

  }
  else
  {
    //안보인다면 <Btn_문서> 아래에 보이기.
    _GList_그림부품안메뉴보이기_(gui->편집기.List_문서,
                            gui->편집기.Form_기본틀,
                            _GLabel_X_(gui->편집기.Lb_문서, 0, d_읽기),
                            _GLabel_Y_(gui->편집기.Lb_문서, 0, d_읽기) + _GLabel_높이_(gui->편집기.Lb_문서, 0, d_읽기) - 1);

  }

}

void 편집기_List_문서_이벤트_Select(void)
{
  //[2012.07.15.일][생성!!!]{-------
  //[문서항목] 선택에 해당하는 처리 수행.
  //
  //[2012.08.17.금][추가!!!]--------
  //[편집기:설정] 관련 처리 추가.
  //}------------------------------

  //[VAR]
  //{
      char          항목[128];

      //[2012.08.17.금][추가!!!]
      unsigned int  임시;

      //[2012.08.20.월][추가!!!]
      char          경로이름확장자[1024*2];

  //}

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

  //[항목 문자열 얻기]
  //{
      _GList_항목얻기_(gui->편집기.List_문서,
                     _GList_항목선택_(gui->편집기.List_문서, NULL, d_읽기),
                     항목);

  //}

  //[항목 구분 처리]
  //{
      if     (_Str_일치확인_(항목, "새문서", false) == true)
      {
        _GEditor_새문서_(gui->편집기.Edtr_편집기);

        //[2012.07.22.일][수정!!!]{--------------------------------------
        //<편집기_Edtr_편집기_이벤트_Select()> 에서 처리.
        //Ide_검증활성_판단적용(_GEditor_문서번호얻기_(gui->편집기.Edtr_편집기));
        //}-------------------------------------------------------------

        Ide_공용알림창이_보인다면_대기();

      }
      else if(_Str_일치확인_(항목, "열기", false) == true)
      {
        편집기_Btn_열기_이벤트_MClick();

      }
      else if(_Str_일치확인_(항목, "저장", false) == true)
      {
        편집기_Btn_저장_이벤트_MClick();

      }
      else if(_Str_일치확인_(항목, "다른이름으로저장", false) == true)
      {
        _File_저장대화상자_확장자_("GMRCBASiC(*.gmrcbasic)|*.gmrcbasic|*.*|*.*");
        //_File_저장대화상자_확장자_("*.gmrcbasic|*.gmrcbasic|*.*|*.*");

        _GEditor_문서다른이름으로저장_(gui->편집기.Edtr_편집기);

        //[!]{----------------------------------------------------------
        //[다른 이름으로 저장] 시에는 현재 문서를 그대로 있으므로 적용할 필요가 없다.
        //Ide_검증활성_판단적용(_GEditor_문서번호얻기_(gui->편집기.Edtr_편집기));
        //}-------------------------------------------------------------

        Ide_공용알림창이_보인다면_대기();

      }
      else if(_Str_일치확인_(항목, "모두저장", false) == true)
      {
        편집기_Btn_모두저장_이벤트_MClick();

      }


      //[예제]
      //{
          else if(_Str_일치확인_(항목, "기본예제", false) == true)
          {
            //[2012.08.21.화][추가!!!]{--------------------
            //[인터프리터] 용 [기본예제] 를 편집기에 바로 열어준다.
            //}-------------------------------------------

            편집기_기본예제_열기();

          }

      //}


      //[편집기:설정]
      //{
          //[2012.08.17.금][추가!!!]{--------------------------------
          //별도의 [대화상자] 없이 직접 [메뉴:항목] 으로 설정하도록 새로운 시도.
          //}-------------------------------------------------------

          else if(_Str_일치확인_(항목, "명령어색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_색동문자적용단어색_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("명령어색설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "주석문색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_색동문자주석_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("주석문색설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "16진수색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_색동문자16진수_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("16진수색설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "2진수색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_색동문자2진수_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("2진수색설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "정지점색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_정지점색_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("정지점색설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "지정자색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_행지정자색_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("지정자색설정", &임시);

            }

          }

          else if(_Str_일치확인_(항목, "지정행문자색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_지정행문자색_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("지정행문자색설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "지정행배경색설정", false) == true)
          {
            if(_GColor_대화상자_(&임시) == true)
            {
              _GEditor_지정행배경색_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

              Ide_설정문서_수정("지정행배경색설정", &임시);

            }

          }

          else if(_Str_일치확인_(항목, "배경밝기설정", false) == true)
          {
            if(편집기_배경밝기_설정(&임시) == true)
            {
              Ide_설정문서_수정("배경밝기설정", &임시);

            }

          }
          else if(_Str_일치확인_(항목, "배경그림설정", false) == true)
          {
            //[2012.08.18.토][추가!!!]
            if(편집기_배경그림_설정() == true)
            {
              //[대화상자] 를 연 경우로 이 새로운 그림경로를 기록.
              _GPicture_열기대화상자_문서이름_(경로이름확장자);

              Ide_설정문서_수정("배경그림설정", 경로이름확장자);

            }

          }
          else if(_Str_일치확인_(항목, "기본설정으로전환", false) == true)
          {
            //[2012.08.20.월][추가!!!]{---------------------------
            //현재 설정을 무시하고 기본설정으로 돌려 놓는다.
            //[기본설정] 으로 돌려 놓으면 자동적으로 <설정.opt> 에 반영된다.
            //}--------------------------------------------------

            Ide_설정문서_기본설정반영저장();

          }

      //}

  //}

}

void 편집기_List_문서_이벤트_MSelect(void)
{
  //[2012.08.18.토][생성!!!]{------------------------------------------
  //[편집기:설정] 관련 가설정 처리.
  //
  //[색설정] 관련 항목인 경우는 [예시문서] 를 보여주고 [정지점/지정행] 을 지정해준다.
  //이는 현재 [색설정] 을 보여주고 설정상태를 즉시 보여주기 위한것.
  //}-----------------------------------------------------------------

  //[VAR]
  //{
      char  항목[128];

      char  경로이름확장자[1024*2];

      int   문서번호;

  //}

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

  //[항목 문자열 얻기]
  //{
      _GList_항목얻기_(gui->편집기.List_문서,
                     _GList_항목임시선택_(gui->편집기.List_문서, NULL, d_읽기),
                     항목);

  //}

  //[합성]
  //{
      _Str_합치기_(경로이름확장자, gv->기준경로, "기계닉스\\설정예시.gtxt");

  //}

  //[메뉴사용:해제]
  //{
      //[중요!!!]{******************************************************************
      //[편집기] 에서 문서를 열때 [촛점] 이 이동하여 지속적으로 보이지 못하고 사라지게 되므로
      //일시적으로 [메뉴사용] 을 [해제] 시킨다.
      //단, [메뉴사용:해제] 시 [항상위로] 가 해제되어 역시 [편집기] 에 문서를 열때 잠깐 뒤로 갔다가
      //다시 나오는 문제가 발생하므로 반드시 [항상위로] 설정으로 이를 방지.
      //내부적으로 <fsStayOnTop> 으로 설정하는것.
      //}**************************************************************************

      _GList_메뉴사용_(gui->편집기.List_문서, false, d_쓰기);

      _GX_항상위로_(gui->편집기.List_문서, true);

  //}

  //[편집기:설정]
  //{
      if(_Str_일치확인_(항목, "명령어색설정", false) || _Str_일치확인_(항목, "주석문색설정", false) ||
         _Str_일치확인_(항목, "16진수색설정", false) || _Str_일치확인_(항목, "2진수색설정", false) ||
         _Str_일치확인_(항목, "정지점색설정", false) || _Str_일치확인_(항목, "지정자색설정", false) ||
         _Str_일치확인_(항목, "지정행문자색설정", false) || _Str_일치확인_(항목, "지정행배경색설정", false) ||
         _Str_일치확인_(항목, "배경밝기설정", false) || _Str_일치확인_(항목, "배경그림설정", false) ||
         _Str_일치확인_(항목, "기본설정으로전환", false))
      {
        //[!]{--------------------------------------------
        //[폴더:기계닉스] 안의 "설정예시.gtxt" 를 [편집기] 에 열기.
        //}-----------------------------------------------

        //[편집기에 문서 열기]
        //{
            //[문서 열기]
            //{
                //[!]{---------------------------------------------------------
                //해당 문서가 열려있지 않은 경우만 열어준다(내부 요소의 깜박임 방지를 위한것).
                //}------------------------------------------------------------

                if(_GEditor_문서이름으로번호얻기_(gui->편집기.Edtr_편집기, 경로이름확장자) < 0)
                {
                  _GEditor_문서열기_(gui->편집기.Edtr_편집기, 경로이름확장자);

                  //문서는 [읽기전용] 으로 설정.
                  _GEditor_읽기전용_(gui->편집기.Edtr_편집기, true, d_쓰기);

                }

            //}

            //[!]{----------------------------------------------------
            //[문서종류] 는 <*.gtxt> 자체로 내부 인식되므로 별도 설정하지 않는다.
            //}-------------------------------------------------------

            //[정지점/지정행 설정]
            //{
                //[!]{-------------------------------
                //설정을 위하여 [정지점/지정행] 을 임의 설정.
                //
                //정지점(11행), 지정행(14행).
                //}----------------------------------

                //[정지점 설정]
                //{
                    //[2012.08.19.일][추가!!!]{--------------------------------
                    //[정지점] 은 같은 행에 이미 설정돼 있는 경우 재 설정시 [해제] 되므로
                    //반드시 먼저 설정돼 있는지 확인하고 이미 설정돼 있다면 처리하지 않는다.
                    //}-------------------------------------------------------

                    if(_GEditor_정지점행확인_(gui->편집기.Edtr_편집기, 11) != true)
                    {
                      _GEditor_정지점설정_(gui->편집기.Edtr_편집기, 11);

                    }

                //}

                _GEditor_지정행_(gui->편집기.Edtr_편집기, 14, d_쓰기);

            //}

        //}

      }
      else
      {
        //[!]{----------------------------------------------
        //[폴더:기계닉스] 안의 "설정예시.gtxt" 문서가 열려있다면 닫기.
        //}-------------------------------------------------

        문서번호 = _GEditor_문서이름으로번호얻기_(gui->편집기.Edtr_편집기, 경로이름확장자);

        if(문서번호 >= 0)
        {
          //해당 문서가 존재한다면 닫아준다.
          _GEditor_지정문서닫기_(gui->편집기.Edtr_편집기, 문서번호);

        }

      }

  //}

  //[메뉴사용:설정]
  //{
      //[중요!!!]{******************************************************************
      //<_GList_그림부품안메뉴보이기_()> 함수를 사용하면 자동적으로 [메뉴사용:설정] 으로 변환된다.
      //같은 위치에 재설정 하는 것이므로 [감추기] 하지 않고 계속 상태를 유지하도록 금일 BCB 쪽 수정.
      //이렇게 하지 않은 경우 [감추기->위치설정->보이기] 가 되어 내부적으로 [깜박임] 문제가 발생.
      //}**************************************************************************

      //원래 위치 그대로 다시 보이기.
      _GList_그림부품안메뉴보이기_(gui->편집기.List_문서,
                              gui->편집기.Form_기본틀,
                              _GLabel_X_(gui->편집기.Lb_문서, 0, d_읽기),
                              _GLabel_Y_(gui->편집기.Lb_문서, 0, d_읽기) + _GLabel_높이_(gui->편집기.Lb_문서, 0, d_읽기) - 1);

  //}

}

void 편집기_Btn_열기_이벤트_MClick(void)
{
  //[2012.07.18.수][생성!!!]

  //[VAR]
  //{
      char  경로이름확장자[1024];

  //}

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

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

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

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

  //}

  //[열기]
  //{
      _GEditor_문서열기_(gui->편집기.Edtr_편집기, 경로이름확장자);

  //}

  //[검증 활성화 판별]
  //{
      //[2012.07.22.일][수정!!!]{--------------------------------------
      //<편집기_Edtr_편집기_이벤트_Select()> 에서 처리.
      //현재 열린 문서가 <*.gmrcbasic> 라면 [검증] 기능을 [활성화] 시킨다.
      //Ide_검증활성_판단적용(_GEditor_문서번호얻기_(gui->편집기.Edtr_편집기));
      //}-------------------------------------------------------------

  //}

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

  //}

}

void 편집기_Btn_저장_이벤트_MClick(void)
{
  //[2012.07.18.수][생성!!!]

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

  _File_저장대화상자_확장자_("GMRCBASiC(*.gmrcbasic)|*.gmrcbasic|*.*|*.*");
  //_File_저장대화상자_확장자_("*.gmrcbasic|*.gmrcbasic|*.*|*.*");

  _GEditor_문서저장_(gui->편집기.Edtr_편집기);

  //[2012.07.22.일][수정!!!]{--------------------------------------
  //<편집기_Edtr_편집기_이벤트_Select()> 에서 처리.
  //Ide_검증활성_판단적용(_GEditor_문서번호얻기_(gui->편집기.Edtr_편집기));
  //}-------------------------------------------------------------

  Ide_공용알림창이_보인다면_대기();

}

void 편집기_Btn_모두저장_이벤트_MClick(void)
{
  //[2012.07.18.수][생성!!!]

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

  _File_저장대화상자_확장자_("GMRCBASiC(*.gmrcbasic)|*.gmrcbasic|*.*|*.*");
  //_File_저장대화상자_확장자_("*.gmrcbasic|*.gmrcbasic|*.*|*.*");

  _GEditor_문서모두저장_(gui->편집기.Edtr_편집기);

}

void 편집기_Edtr_편집기_이벤트_Select(int  p문서번호)
{
  //[2012.07.19.목][생성!!!]

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

  //[저장 버튼 활성화]
  //{
      //[2012.07.22.일][추가!!!]{-------------------------------
      //[저장/모두저장] 버튼은 [문서] 가 있을 경우만 활성화 되어야 하고
      //문서를 열때나 [새문서] 만들기 등의 경우 반드시 [이벤트:Select] 가
      //발생하므로 간단하게 여기서 집중 처리한다.
      //}------------------------------------------------------

      if(_GEditor_문서개수_(gui->편집기.Edtr_편집기) > 0)
      {
        //[저장] 기능 [활성화].
        _GButton_유효_(gui->편집기.Btn_저장, true, d_쓰기);
        _GButton_유효_(gui->편집기.Btn_모두저장, true, d_쓰기);

      }
      else
      {
        //[저장] 기능 [비활성화].
        _GButton_유효_(gui->편집기.Btn_저장, false, d_쓰기);
        _GButton_유효_(gui->편집기.Btn_모두저장, false, d_쓰기);

      }

  //}

  //[검증 활성화 판별]
  //{
      //[2012.07.22.일][추가!!!]{---------------------------------
      //현재 열린 문서가 <*.gmrcbasic> 라면 [검증] 기능을 [활성화] 시킨다.
      //
      //[새문서/열기/새문서저장] 등 모든 경우 [이벤트:Select] 가 발생하므로
      //여기서 한번만 처리.
      //}--------------------------------------------------------

      Ide_검증활성_판단적용(p문서번호);

  //}

}

void 편집기_Edtr_편집기_이벤트_MSelect(int  p문서번호)
{
  //[2012.07.19.목][생성!!!]{------------------------------------------
  //[2012.07.21.토][수정!!!]-------------------------------------------
  //이 경우 현재 [활성문서] 가 열려 있는 상태에서 [새문서] 등 [비활성문서] 항목을
  //지정하는 경우 [비활성] 화 되는데, 이 상태에서 [맨 아래 문서개수 항목] 을 눌러
  //[문서목록] 이 닫히는 경우 현재 [활성문서] 가 열려있지만 [비활성상태] 로 남겨진다.
  //[문서목록] 의 맨 아래 [문서개수] 는 <이벤트:Selet> 를 발생시키지 않기때문에
  //아예 이 <이벤트:MSelect> 는 사용하지 않는다.
  //}-----------------------------------------------------------------


}

void 편집기_Btn_명령표_이벤트_MClick(void)
{
  //[2012.08.12.일][생성!!!]{-----------------------------------------
  //"[기준경로]\기계닉스\인터프리터-명령표.gtxt" 문서를 [편집기] 에 열어준다.
  //
  //[2012.08.14.화][추가!!!]------------------------------------------
  //이 문서는 반드시 [읽기전용] 으로 설정해야 한다.
  //
  //[2012.08.19.일][수정!!!]------------------------------------------
  //"[기준경로]\기계닉스\인터프리터-명령표.gtxt" 문서가 이미 열려있다면 최종 선택된
  //항목을 다시 지정해 주는 기능 추가.
  //}----------------------------------------------------------------

  //[VAR]
  //{
      char  경로이름확장자[1024];

  //}

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

  //[합성]
  //{
      _Str_합치기_(경로이름확장자, gv->기준경로, "기계닉스\\인터프리터-명령표.gtxt");

  //}

  //[편집기에 문서 열기]
  //{
      if(_GEditor_문서이름으로번호얻기_(gui->편집기.Edtr_편집기, 경로이름확장자) < 0)
      {
        //[!]{---------------------------------------------------------------
        //문서를 처음 여는 경우는 이전에 다른 문서에서 [지정행] 등이 존재할수 있으므로 감춘다.
        //}------------------------------------------------------------------

        _GEditor_지정행해제_(gui->편집기.Edtr_편집기);

      }

      _GEditor_문서열기_(gui->편집기.Edtr_편집기, 경로이름확장자);

      //[항목 재지정]
      //{
          //[2012.08.19.일][추가!!!]{--------------------
          //이미 문서가 열려있는 경우라면 최종 항목을 재지정해준다.
          //}-------------------------------------------

          편집기_명령표_최종항목_다시지정();

      //}

      //[!]{-------------------------------------------------
      //문서종류는 <*.gtxt> 자체로 내부 인식되므로 별도 설정하지 않는다.
      //}----------------------------------------------------

  //}

  //[읽기전용]
  //{
      //[!]{-------------------------------------------------------
      //[문서열기/전환] 시 <편집기_Edtr_편집기_이벤트_Select()> 에서 호출되는
      //<Ide_검증활성_판단적용()> 에서 자동 처리.
      //}----------------------------------------------------------

  //}

}

void 편집기_BmpBtn_명령표_이벤트_MClick(void)
{
  //[2012.08.13.월][생성!!!]{---------------------------
  //[명령표 목록] 이 보이지 않는다면 보이고, 보이고 있다면 감춘다.
  //}--------------------------------------------------

  //[VAR]
  //{
      int  화면영역높이;
      int  목록전체높이;
      int  목록위치Y;
      int  항목높이;

  //}

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

  if(_GList_보이기_(gui->편집기.List_명령표, NULL, d_읽기) == true)
  {
    //이미 보이고 있다면 감추기.
    _GList_보이기_(gui->편집기.List_명령표, false, d_쓰기);

  }
  else
  {
    //[!]{--------------------------------------------------
    //안보인다면 <Btn_명령표> 아래에 보이기.
    //단, 모두 펼쳐진 경우 화면유효영역 아래로 사라지는 부분이 있는 경우는
    //자동으로 줄이동자를 보여주고 크기를 조정.
    //}-----------------------------------------------------

    //내부 처리를 위하여 일단 감추기.
    _GList_보이기_(gui->편집기.List_명령표, false, d_쓰기);

    //정확한 <Y> 위치를 알아야 하므로 먼저 보이지 않고 위치만 시킨다.
    _GList_그림부품안위치시키기_(gui->편집기.List_명령표,
                            gui->편집기.Form_기본틀,
                            _GButton_X_(gui->편집기.Btn_명령표, 0, d_읽기),
                            _GButton_Y_(gui->편집기.Btn_명령표, 0, d_읽기) + _GButton_높이_(gui->편집기.Btn_명령표, 0, d_읽기) - 1);

    //[정보 얻기]
    //{
        화면영역높이 = _Sys_화면영역높이_();

        항목높이    = _GList_항목높이_(gui->편집기.List_명령표);

        목록전체높이 = _GList_항목수_(gui->편집기.List_명령표) * 항목높이 + 2;

        목록위치Y   = _GList_Y_(gui->편집기.List_명령표, NULL, d_읽기);

    //}

    //[영역 구분 처리]
    //{
        //영역을 벗어나는지 여부에 따라 처리.
        if((목록위치Y + 목록전체높이) >= 화면영역높이)
        {
          //[!]{------------------------------------------
          //모든 항목을 다 표시하는 경우 [화면영역] 을 벗어나는 경우.
          //1) 전체 높이를 [화면영역] 안에 존재하도록 조정.
          //   단, [행단위] 로 보이도록 조정.
          //2) 줄이동자가 나오도록 설정.
          //}---------------------------------------------

          //크기조정을 위하여 자동 높이 해제.
          _GList_자동높이_(gui->편집기.List_명령표, false, d_쓰기);

          목록전체높이 = ((화면영역높이 - 목록위치Y)/항목높이) * 항목높이 + 2;
          _GList_높이_(gui->편집기.List_명령표, 목록전체높이, d_쓰기);

          _GList_줄이동자보이기_(gui->편집기.List_명령표, true, d_쓰기);

        }
        else
        {
          //[!]{----------------------------------------
          //모든 항목을 다 표시해도 [화면영역] 안에 존재하는 경우.
          //}-------------------------------------------

          //크기조정을 위하여 자동 높이 해제.
          _GList_자동높이_(gui->편집기.List_명령표, true, d_쓰기);

          //이미 자동 크기로 정리돼 있으므로 [줄이동자] 만 감춰준다.
          _GList_줄이동자보이기_(gui->편집기.List_명령표, false, d_쓰기);

        }

    //}

    //[보이기]
    //{
        _GList_그림부품안메뉴보이기_(gui->편집기.List_명령표,
                                gui->편집기.Form_기본틀,
                                _GButton_X_(gui->편집기.Btn_명령표, 0, d_읽기),
                                _GButton_Y_(gui->편집기.Btn_명령표, 0, d_읽기) + _GButton_높이_(gui->편집기.Btn_명령표, 0, d_읽기) - 1);

    //}

  }

}

void 편집기_List_명령표_이벤트_Select(void)
{
  //[2012.08.13.월][생성!!!]{---------------------------------------
  //[명령표] 에서 [선택항목] 을 찾아준다.
  //"[기준경로]\기계닉스\인터프리터-명령표.gtxt" 문서가 열려있지 않다면 열어준다.
  //}--------------------------------------------------------------

  //[VAR]
  //{
      char  항목[256];

      int   찾은위치;

      int   행번호;

  //}

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

  //[명령표 문서 열기]
  //{
      //[!]{------------------------------------------------------------
      //[문서] 안에서 해당 내용을 찾는 것이므로 [문서] 부터 열어준다.
      //중복되는 경우는 무시되므로 여기서는 항상 열어준다.
      //
      //[2012.08.14.화][중요수정!!!]{--------------------------------------
      //[문서열기/전환] 시 <편집기_Edtr_편집기_이벤트_Select()> 에서 호출되는
      //<Ide_검증활성_판단적용()> 에서 [지정행:해제/읽기전용] 등 부가 기능은 자동 처리
      //}----------------------------------------------------------------

      편집기_Btn_명령표_이벤트_MClick();

  //}

  //[항목 문자열 얻기]
  //{
      _GList_항목얻기_(gui->편집기.List_명령표,
                     _GList_항목선택_(gui->편집기.List_명령표, NULL, d_읽기),
                     항목);

  //}

  //[항목 문자열 찾기]
  //{
    //[!]{-------------------------------------------
      //[항목] 문자열을 가진 행을 찾아 [지정행] 으로 지정해 준다.
      //}----------------------------------------------

      찾은위치 = _Str_찾기_(gv->편집기저장소, -1, 0, true, true, 항목);

      행번호 = _Str_행번호얻기_(gv->편집기저장소, 찾은위치);

      //[지정행] 으로 지정.
      _GEditor_지정행배경색_(gui->편집기.Edtr_편집기, clLime, d_쓰기);
      _GEditor_지정행문자색_(gui->편집기.Edtr_편집기, clBlack, d_쓰기);
      _GEditor_지정행_(gui->편집기.Edtr_편집기, 행번호, d_쓰기);

  //}

}


void 편집기_Form_기본틀_이벤트_Close(void)
{
  //[2012.07.17.화][생성!!!]




}

void 편집기_Form_기본틀_이벤트_Resize(void)
{
  //[2012.07.17.화][생성!!!]

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


  //[편집기]
  //{
      //[Lb_기본판]
      //{
          _GLabel_폭_(gui->편집기.Lb_기본판, _GForm_폭_(gui->편집기.Form_기본틀, 0, d_읽기) - 16, d_쓰기);
          _GLabel_높이_(gui->편집기.Lb_기본판, _GForm_높이_(gui->편집기.Form_기본틀, 0, d_읽기) - 16 - 23, d_쓰기);

      //}

      //[Edtr_편집기]
      //{
          _GEditor_폭_(gui->편집기.Edtr_편집기, _GLabel_폭_(gui->편집기.Lb_기본판, 0, d_읽기) - 8, d_쓰기);
          _GEditor_높이_(gui->편집기.Edtr_편집기, _GLabel_높이_(gui->편집기.Lb_기본판, 0, d_읽기) - 16, d_쓰기);

      //}

      //[Btn_읽기]
      //{
          _GButton_X_(gui->편집기.Btn_읽기, _GLabel_X_(gui->편집기.Lb_기본판, 0, d_읽기) + _GLabel_폭_(gui->편집기.Lb_기본판, 0, d_읽기) - (16 + 2)*2 - 2, d_쓰기);

      //}

      //[Btn_쓰기]
      //{
          _GButton_X_(gui->편집기.Btn_쓰기, _GButton_X_(gui->편집기.Btn_읽기, 0, d_읽기) + _GButton_폭_(gui->편집기.Btn_읽기, 0, d_읽기) + 2, d_쓰기);

      //}

  //}

  //[검증]
  //{
      //[BmpBtn_검증_실행]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_검증_실행, _GLabel_X_(gui->편집기.Lb_기본판, 0, d_읽기) + _GLabel_폭_(gui->편집기.Lb_기본판, 0, d_읽기) - 278, d_쓰기);

      //}

      //[BmpBtn_검증_행]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_검증_행, _GBmpButton_X_(gui->편집기.BmpBtn_검증_실행, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_실행, 0, d_읽기) + 2, d_쓰기);

      //}

      //[BmpBtn_검증_자동]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_검증_자동, _GBmpButton_X_(gui->편집기.BmpBtn_검증_행, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_행, 0, d_읽기) + 2, d_쓰기);

      //}

      //[BmpBtn_검증_시작]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_검증_시작, _GBmpButton_X_(gui->편집기.BmpBtn_검증_자동, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_자동, 0, d_읽기) + 2, d_쓰기);

      //}

  //}

  //[제어]
  //{
      //[BmpBtn_시작]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_시작, _GBmpButton_X_(gui->편집기.BmpBtn_검증_시작, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_검증_시작, 0, d_읽기) + 10, d_쓰기);

      //}

      //[BmpBtn_정지]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_정지, _GBmpButton_X_(gui->편집기.BmpBtn_시작, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_시작, 0, d_읽기) + 2, d_쓰기);

      //}

      //[BmpBtn_재기동]
      //{
          _GBmpButton_X_(gui->편집기.BmpBtn_재기동, _GBmpButton_X_(gui->편집기.BmpBtn_정지, 0, d_읽기) + _GBmpButton_폭_(gui->편집기.BmpBtn_정지, 0, d_읽기) + 2, d_쓰기);

      //}

  //}

  //[크기 미세 조정]
  //{
      //[2012.07.21.토][추가!!!]{--------------------------------------------------
      //1) [제어판] 양쪽 끝 <+/- 10 픽셀> 범위 안에 [편집기] 세로모서리가 위치한다면
      //   [제어판] 세로 모서리와 일치시킨다.
      //
      //2) 아래 모서리가 [화면영역] 을 벗어난 경우(작업표시줄 안으로 들어간 경우)는 [화면영역] 안에
      //   위치하도록 크기 재조정.
      //
      //[주의!!!][2012.07.22.일]---------------------------------------------------
      //단, [최대화] 시에는 적용해서는 안된다.
      //}-------------------------------------------------------------------------

      //[최대화 상태 확인]
      //{
          //[2012.07.22.일][추가!!!]{---
          //[최대화] 시에는 적용하지 않는다.
          //}--------------------------

          if((_Sys_화면영역폭_() == _GForm_폭_(gui->편집기.Form_기본틀, NULL, d_읽기)) &&
             (_Sys_화면영역높이_() == _GForm_높이_(gui->편집기.Form_기본틀, NULL, d_읽기)))

          {
            return;

          }

      //}

      //[제어판:왼쪽 확인]
      //{
          if(((_GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) - 20) <= _GForm_X_(gui->편집기.Form_기본틀, NULL, d_읽기)) &&
             (_GForm_X_(gui->편집기.Form_기본틀, NULL, d_읽기) <= (_GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) + 20)))
          {
            //[제어판] 과 같이 왼쪽 모서리 맞추기.
            _GForm_X_(gui->편집기.Form_기본틀, _GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기), d_쓰기);

          }

      //}

      //[제어판:오른쪽 확인]
      //{
          if(((_GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) + _GVmos_폭_(gui->기본틀.GVmos, NULL, d_읽기) - 20) <= (_GForm_X_(gui->편집기.Form_기본틀, NULL, d_읽기) + _GForm_폭_(gui->편집기.Form_기본틀, NULL, d_읽기))) &&
             ((_GForm_X_(gui->편집기.Form_기본틀, NULL, d_읽기) + _GForm_폭_(gui->편집기.Form_기본틀, NULL, d_읽기)) <= (_GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) + _GVmos_폭_(gui->기본틀.GVmos, NULL, d_읽기) + 20)))
          {
            //[제어판] 과 같이 오른쪽 모서리 맞추기.
            _GForm_폭_(gui->편집기.Form_기본틀, _GVmos_X_(gui->기본틀.GVmos, NULL, d_읽기) + _GVmos_폭_(gui->기본틀.GVmos, NULL, d_읽기) - _GForm_X_(gui->편집기.Form_기본틀, NULL, d_읽기), d_쓰기);

          }

      //}

      //[제어판:아래쪽 확인]
      //{
          if((_GForm_Y_(gui->편집기.Form_기본틀, NULL, d_읽기) + _GForm_높이_(gui->편집기.Form_기본틀, NULL, d_읽기)) > _Sys_화면영역높이_())
          {
            //[화면영역] 안에 맞추기(실제는 작업표시줄 위치).
            _GForm_높이_(gui->편집기.Form_기본틀, (_Sys_화면영역높이_() - _GForm_Y_(gui->편집기.Form_기본틀, NULL, d_읽기) + 1), d_쓰기);

          }

      //}

  //}

}

void 편집기_BmpBtn_검증_실행_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  프로그램_BmpBtn_실행_이벤트_MClick();

}

void 편집기_BmpBtn_검증_행_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  프로그램_BmpBtn_행_이벤트_MClick();

}

void 편집기_BmpBtn_검증_자동_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  프로그램_BmpBtn_자동_이벤트_MClick();

}

void 편집기_BmpBtn_검증_시작_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  프로그램_BmpBtn_시작_이벤트_MClick();

}

void 편집기_BmpBtn_시작_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  제어기제어_BmpBtn_시작_이벤트_MClick();

}

void 편집기_BmpBtn_정지_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  제어기제어_BmpBtn_정지_이벤트_MClick();

}

void 편집기_BmpBtn_재기동_이벤트_MClick(void)
{
  //[2012.07.22.일][생성]
  제어기제어_BmpBtn_재기동_이벤트_MClick();

}

void 편집기_Btn_읽기_이벤트_MClick(void)
{
  //[2012.07.23.월][생성!!!]{--------------------------
  //[2012.08.04.토][수정!!!]---------------------------
  //[제어기] 로부터 [EEprom:문자열] 을 읽어 새문서로 열어준다.
  //}-------------------------------------------------

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

  //}

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

  //[통신포트 열림 확인]
  //{
      //[2012.07.29.일][추가!!!]{--------------------------------
      //모든 기능이 [통신포트:열림] 에서만 처리 가능하므로 여기서 일괄 검사후
      //[닫혀] 있다면 아무것도 처리하지 않는다.
      //}-------------------------------------------------------

      if(항목줄_통신포트열림확인() != true) return;

  //}

  //[이벤트:무효화]{------------------------------------------
  _GButton_이벤트_MClick_(gui->편집기.Btn_읽기, false, d_쓰기);
  //}------------------------------------------------------

  //[명령 처리]
  //{
      if(_GMRCBASIC_StringRead(기본조정설정_제어기번호(), 문자열) != true) { Ide_통신오류알림(); goto lb끝; }

  //}

  //[문자열 출력]
  //{
      //[2012.08.04.토][추가!!!]{--
      //1) 편집기에 [새문서] 열기.
      //2) [새문서] 에 문자열 출력.
      //}-------------------------

      //[새문서] 생성.
      _GEditor_새문서_(gui->편집기.Edtr_편집기);

      //문자열 출력.
      _GEditor_문자열출력_(gui->편집기.Edtr_편집기, 문자열);

  //}

  lb끝:

  //[이벤트:유효화]{-----------------------------------------
  _GButton_이벤트_MClick_(gui->편집기.Btn_읽기, true, d_쓰기);
  //}-----------------------------------------------------

}

void 편집기_Btn_쓰기_이벤트_MClick(void)
{
  //[2012.07.23.월][생성!!!]{-----------------------
  //[2012.08.04.토][수정!!!]------------------------
  //현재 [편집기] 의 [문자열] 을 대상으로 처리.
  //
  //1) 문자열 총 길이가 '\0' 포함 450 바이트 이하인지 검사.
  //
  //2) 1) 에 해당한다면 기록.
  //}----------------------------------------------

  //[VAR]
  //{
      char  *편집기문자열;

      int    크기;

  //}

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

  //[통신포트 열림 확인]
  //{
      //[2012.07.29.일][추가!!!]{--------------------------------
      //모든 기능이 [통신포트:열림] 에서만 처리 가능하므로 여기서 일괄 검사후
      //[닫혀] 있다면 아무것도 처리하지 않는다.
      //}-------------------------------------------------------

      if(항목줄_통신포트열림확인() != true) return;

  //}

  //[이벤트:무효화]{------------------------------------------
  _GButton_이벤트_MClick_(gui->편집기.Btn_쓰기, false, d_쓰기);
  //}------------------------------------------------------

  //[문자열 크기 검사]
  //{
      //편집기 문자열 위치 얻기.
      편집기문자열 = (char *)_GEditor_편집기저장소위치얻기_(gui->편집기.Edtr_편집기);

      //문자열 길이 얻기.
      크기 = _Str_길이얻기_(편집기문자열);

      //크기검사.
      if(크기 >= 450)
      {
        //[문자열] 은 '\0' 포함 <450 바이트> 를 넘을수 없음.
        Ide_알림(d_오류,
                "제어기에 기록할 문자열은 <450 바이트> 미만 이어야 합니다.");

        //더이상 처리하지 않는다.
        goto lb끝;

      }

  //}

  //[문자열 기록]
  //{
      //[명령 처리]
      //{
          if(_GMRCBASIC_StringSet(기본조정설정_제어기번호(), 편집기문자열) != true) { Ide_통신오류알림(); goto lb끝; }

      //}

  //}

  lb끝:

  //[이벤트:유효화]{-----------------------------------------
  _GButton_이벤트_MClick_(gui->편집기.Btn_쓰기, true, d_쓰기);
  //}-----------------------------------------------------

}

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

void 편집기_풍선도움말_사용유무(bool  p사용유무)
{
  //[2012.07.31.화][생성!!!]

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

  _GButton_풍선도움말_(gui->편집기.Btn_읽기, p사용유무, d_쓰기);

  _GButton_풍선도움말_(gui->편집기.Btn_쓰기, p사용유무, d_쓰기);


  _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_검증_실행, p사용유무, d_쓰기);

  _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_검증_행, p사용유무, d_쓰기);

  _GBmpButton_풍선도움말_(gui->편집기.BmpBtn_검증_자동, 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.04.토][생성!!!]{-----------------------------------------------
  //[G.M.RC.BASiC:인터프리터] 용 [예약어] 를 [편집기:색동문자] 로 지정될수 있도록 추가.
  //
  //편집기 생성후 반드시 한번 호출하여 설정.
  //}----------------------------------------------------------------------

  //[VAR]
  //{
      char  *색동단어;

  //}

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

  //[인터프리터 예약어 등록]
  //{
      색동단어 = "각도 Degree 속도 Speed 각도속도 DegSpd 각도8 Degree8 각도8T Degree8T 속도8 Speed8 "
               "각도설정 DegMem 각도설정X DegMemX 각도설정XT DegMemXT 속도설정 SpdMem 속도설정X SpdMemX "
               "각도속도설정 DegSpdMem 설정반영 MemSet 펄스 Pulse 가감속상수 AccelDiv 가감속상수8 AccelDiv8 "
               "가감속상수X AccelDivX 완료보고시점 ReportTime 완료보고시점X ReportTimeX 완료보고 Report "
               "완료보고대기 WaitReport 시간지연 Delay 이동 Goto 끝 End "
               //[2012.08.08.수][추가!!!]
               //예약어처럼 정의된 상수.
               "등속 AccelNo 가감속 Accel 가속 AccelUp 감속 AccelDown "
               //[2012.08.11.토][추가!!!]
               "전체대상 DidAll";

      _GEditor_색동문자적용단어등록_(gui->편집기.Edtr_편집기,
                                색동단어,
                                d_굵은문자,
                                clBlue,
                                clWhite,
                                true);

  //}

}

bool 편집기_배경밝기_설정(unsigned int  *r배경밝기)
{
  //[2012.08.17.금][생성!!!]{--------
  //[편집기 배경 밝기] 를 설정.
  //<0 - 255> 사이의 값을 10진수로 설정.
  //}-------------------------------

  //[VAR]
  //{
      char  문자열[512];
      bool  확인취소;

      int   임시;

  //}

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

  //[대화상자 보이기]
  //{
      //대화상자 이외의 것은 동작되지 않도록 한다.
      Ide_활성(false);
      //{
          //[현재 설정값 출력]
          //{
              //현재 [배경밝기] 값을 문자열로 변환.
              _Conv_Long값_문자열_(_GEditor_배경밝기_(gui->편집기.Edtr_편집기, NULL, d_읽기), 0, false, false, 문자열);

              //대화상자의 [한줄 편집기] 에 출력.
              _GMsgBox_한줄편집기문자열_(gui->공용알림창, 문자열, d_쓰기);

          //}

          확인취소 = _GMsgBox_한줄편집기_
                   (gui->공용알림창, d_기계닉스,
                    "[편집기:배경밝기] 는 0 - 255 사이 값을 10진수로 입력합니다."
                   );

      //}
      Ide_활성(true);

  //}

  //[확인/취소]
  //{
      //[취소] 인 경우는 처리하지 않고 바로 종료.
      if(확인취소 == false) return(false);

  //}

  //[문자열 검사]
  //{
      //[한줄편집기] 의 문자열 얻기.
      _GMsgBox_한줄편집기문자열_(gui->공용알림창, 문자열, d_읽기);

      if(_Check_10진수규칙_(문자열) != true)
      {
        Ide_알림(d_오류,
                "10진수 문자열이 아닙니다.\r\n"
                "0 - 9 의 숫자로 이루어진 10진수 문자열만 사용가능하며\r\n"
                "앞뒤에 공백이 없어야 합니다."
               );

        //더이상 처리하지 않고 종료한다.
        return(false);

      }

  //}

  //[문자열 => 값 변환]
  //{
      //10진수 문자열을 값으로 변환후 환경변수에 저장.
      임시 = _Conv_10진수표기_Int값_(문자열);

  //}

  //[범위 확인]
  //{
      //[!]{-------------------
      //<0 - 255> 사이 값만 가능.
      //}----------------------

      if(!((0 <= 임시) && (임시 <= 255)))
      {
        Ide_알림(d_오류,
                "[편집기:배경밝기] 는 0 - 255 사이 값만 사용 가능합니다."
               );

        return(false);

      }

  //}

  //[편집기 배경 밝기 조정]
  //{
      _GEditor_배경밝기_(gui->편집기.Edtr_편집기, 임시, d_쓰기);

  //}

  //[밝기 반환]
  //{
      (*r배경밝기) = 임시;

  //}

  return(true);

}

bool 편집기_배경그림_설정(void)
{
  //[2012.08.18.토][생성!!!]{--
  //[편집기 배경 그림] 설정.
  //}-------------------------

  //[VAR]
  //{
      char  경로이름확장자[1024*2];

  //}

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

  //[열기 대화상자]
  //{
      if(_GPicture_열기대화상자_() != true) return(false);

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

  //}

  //[열기]
  //{
      _GEditor_배경그림_(gui->편집기.Edtr_편집기, 경로이름확장자);

  //}

  return(true);

}

void 편집기_배경그림_기본설정(void)
{
  //[2012.08.18.토][생성!!!]{-------------------------
  //"[맷돌-IDE]\image\기계닉스2.jpg" 를 기본으로 설정.
  //}------------------------------------------------

  //[VAR]
  //{
      char  경로이름확장자[1024*2];

  //}

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

  //[맷돌-IDE:경로얻기]
  //{
      _Ide_실행경로_(경로이름확장자);

  //}

  //[경로합성]
  //{
      _Str_합치기_(경로이름확장자, 경로이름확장자, "image\\기계닉스2.jpg");

  //}

  //[배경설정]
  //{
      _GEditor_배경그림_(gui->편집기.Edtr_편집기, 경로이름확장자);

  //}

}

void 편집기_명령표_최종항목_다시지정(void)
{
  //[2012.08.19.일][생성!!!]{----------------------------------------------------
  //<편집기_List_명령표_이벤트_Select()> 함수에서 [항목선택] 처리 부분만 필요하여 다시 만든것.
  //
  //원래 <편집기_Btn_명령표_이벤트_MClick()> 함수에서 <편집기_List_명령표_이벤트_Select()>
  //함수를 호출하여 간단하게 처리하려 하였으나, <편집기_List_명령표_이벤트_Select()> 함수에서도
  //<편집기_Btn_명령표_이벤트_MClick()> 함수를 호출하여 [재귀호출] 이 되므로 별도 함수가 필요.
  //
  //[주의!!!]--------------------------------------------------------------------
  //단, 이 함수는 먼저 "[기준경로]\기계닉스\인터프리터-명령표.gtxt" 문서가 열려있을때만 사용.
  //}---------------------------------------------------------------------------

  //[VAR]
  //{
      char  항목[256];

      int   찾은위치;

      int   행번호;

  //}

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

  //[항목 문자열 얻기]
  //{
      _GList_항목얻기_(gui->편집기.List_명령표,
                     _GList_항목선택_(gui->편집기.List_명령표, NULL, d_읽기),
                     항목);

  //}

  //[항목 문자열 찾기]
  //{
    //[!]{-------------------------------------------
      //[항목] 문자열을 가진 행을 찾아 [지정행] 으로 지정해 준다.
      //}----------------------------------------------

      찾은위치 = _Str_찾기_(gv->편집기저장소, -1, 0, true, true, 항목);

      행번호 = _Str_행번호얻기_(gv->편집기저장소, 찾은위치);

      //[지정행] 으로 지정.
      _GEditor_지정행배경색_(gui->편집기.Edtr_편집기, clLime, d_쓰기);
      _GEditor_지정행문자색_(gui->편집기.Edtr_편집기, clBlack, d_쓰기);
      _GEditor_지정행_(gui->편집기.Edtr_편집기, 행번호, d_쓰기);

  //}

}

void 편집기_기본예제_열기(void)
{
  //[2012.08.21.화][생성!!!]{---------------------------------------
  //"[기준경로]\기계닉스\예제\기본예제.gmrcbasic" 문서를 [편집기] 에 열어준다.
  //}--------------------------------------------------------------

  //[VAR]
  //{
      char  경로이름확장자[1024];

  //}

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

  //[합성]
  //{
      _Str_합치기_(경로이름확장자, gv->기준경로, "기계닉스\\예제\\기본예제.gmrcbasic");

  //}

  //[편집기에 문서 열기]
  //{
      _GEditor_문서열기_(gui->편집기.Edtr_편집기, 경로이름확장자);

      //<*.c> 로 설정.
      _GEditor_문서종류_(gui->편집기.Edtr_편집기, 1, d_쓰기);

  //}

}




