
#ifndef ide_main_h
#define ide_main_h


#include  "vmos_def.h"

//[2009.08.17.월][추가!!!]
#include  "vmos_memmap_def.h"


struct  IDERECT
{
  //[2018.02.26.월][생성!!!]{----------------------------------------------------------
  //[최대화/기본] 등 크기/위치 변환시 해당 정보를 저장.
  //해당 정보가 <struct IDE_OPTION> 에 있었으나 개별적으로 돼 있던 것을 하나로 합친다.
  //}----------------------------------------------------------------------------------

  int   left;
  int   top;
  int   width;
  int   height;

};

struct  IDE_OPTION
{
  //[2007.12.10.월][생성!!!]{---------------------------------
  //각종 환경변수 값을 가진다.
  //일단, 간단하게 전체색만 가진다.
  //다른 곳에서는 전역변수를 포인터로 접근하여 사용할수 있다.
  //
  //[2019.02.26.화][추가]-------------------------------------
  //}---------------------------------------------------------

  //[색 설정]
  //{
      //전체 적용색.(사용시)
      int      color_0;

      //전체 적용색.(설정 저장시)
      int      color_0_save;

      //[디버그 관련]
      //{
          //디버그와 관련된 것은 시인성을 높이기 위하여 사용자가 직접 지정할 수 있게 만든다.
          int   color_linebox;

          int   color_run_arrow;

          int   color_breakpoint;

      //}

      //[색동문자 관련]
      //{
          int   color_Keyword;    //명령어 색.
          int   color_Comment;    //주석문 색.
          int   color_HexWord;    //16진수 색.
          int   color_BinWord;    //2진수  색.

          //[2007.12.13.목][추가!!!]
          int   color_Directive;  //의사 명령 색.
          int   color_String;     //문자열    색.
          int   color_Char;       //문자      색.

      //}

      //[배경그림 관련]
      //{
          //전체를 한개의 그림으로 할지/말지를 결정한다.
          bool  ideBackPictureEntire;
          //전체에 사용할 그림의 경로.
          char  ideBackpicturePath[400];

          //[각 그림 경로]
          //{
              //[편집기] 배경 그림 경로.
              char  editorBackPicturePath[400];

              //[트리] 배경 그림 경로.
              char  treeBackPicturePath[400];

              //[출력창] 배경 그림 경로.
              char  msgBackPicturePath[400];

          //}

      //}

  //}

  //[통신포트1 설정]
  //{
      //통신포트번호.
      int      portnumber;

      //[대피용]
      //{
          //[2010.04.01.목][추가!!!]{------------------------------------------------
          //내부적으로만 사용되며 [현재 통신포트 번호] 를 일시 저장할때 사용된다.
          //이는 [맷돌직접연결] 에서 사용된 통신포트가 [가상구동] 시에 내부적으로
          //바뀌는 경우 다시 [맷돌직접연결] 로 전환할때 자동으로 [맷돌직접연결] 시의
          //통신포트를 다시 선택해 주기 위한 것이다.
          //이는 번거로움을 막기 위한 것으로 [편의성] 을 위한것이다.
          //}------------------------------------------------------------------------

          int  portNumber_Backup;

      //}

  //}

  //[통신포트2 설정]
  //{
      //[2009.10.02.금][추가!!!]
      int      port2_Num;

      //전송율.
      int      port2_Baud;

  //}

  //[편집기 바탕 밝기 조정]
  //{
      //[2007.10.05.금][추가!!!]
      //[편집기] 바탕의 그림 밝기 값을 가진다.
      int      edit_back_brightness;

      //[2007.12.13.목][추가!!!]
      //[트리] 바탕의 그림 밝기 값을 가진다.
      int      tree_back_brightness;

      //[출력창] 바탕의 그림 밝기 값을 가진다.
      int      msg_back_brightness;

  //}

  //[알파블렌드 설정]
  //{
      //[2008.04.06.화][추가!!!]
      int      alphaBlendUse;    //[알파블렌드] 를 설정/해제 한다.
      int      alphaBlendValue;  //[알파블렌드] 값을 설정한다.

  //}

  //[풍선도움말 설정]
  //{
      //[2008.04.06.화][추가!!!]
      //[풍선 도움말] 을 사용 유/무를 결정한다.(기본값 : 사용)
      int   balloonHelpUse;

      //[풍선 도움말] 의 투명 속성의 사용 유/무를 결정한다.(기본값 : 사용)
      //AlphaBlend 값은 무조건 225 로 고정한다.(이게 가장 보기 좋다.)
      int   balloonHelpAlphaBlend;

      //[2018.05.09.수][추가!!!]{----------------------------------------------------------
      //[편집기] 문서 수정 알림 [풍선도움말] 사용 [유/무] 설정.
      //<editor_top_Form> 의 "::: 수정됐으나 아직 저장하지 않은 문서 :::" 알림 사용 유/무.
      bool  balloonChangeNotSaveUse; //(기본값:사용)
      //}----------------------------------------------------------------------------------

  //}

  //[전광판 설정]
  //{
      //[2010.02.22.월][추가!!!]{----------------------
      //[전광판] 에 관련된 문자열과 문자색을 관리한다.
      //}----------------------------------------------

      //[전광판] 을 사용할지 말지를 결정한다.
      bool     dotmatrixUse;

      //512 바이트 크기면 충분한다('\0' 가지 들어가게 설정한다).
      char     dotmatrixStr[513];

      //문자색을 설정한다.
      int      dotmatrixColor;

      //문자열을 회전 시킬지 여부를 저장(최종 상태가 자동 저장된다).
      bool     dotmatrixRotate;

      //[2018.02.19.월][추가!!!]
      //[회전 시간 간격] 설정(ms 시간값).
      int      dotmatrixRotateTime;

  //}

  //[자동 저장 설정]
  //{
      //[2018.05.05.토][추가!!!]{---------------------------------
      //문서 [자동 저장 기능] 관련 설정.
      //[맷돌-IDE:편집기] 에 열려 있는 모든 문서를 대상으로 처리.
      //기본적으로 [사용:true].
      //}---------------------------------------------------------

      //[자동 저장] 을 구현하는 <autoSave_Timer> 구동여부 값.
      bool  autoSaveUse;    //(기본:true)

      //1 분 단위(1 - 60 분 사이).
      int   autoSavePeriod; //(기본:2분)

  //}

  //[wine 설정]
  //{
      //[2018.02.16.금][추기!!!]{-----------------------------------
      //linux:wine 에서 구동되는 경우를 위한것.
      //거의 똑같이 동작되지만 IME 한/영 전한등 약간의 차이가 있다.
      //wine 에서 구동 하는 경우는 true 로 설정.
      //}-----------------------------------------------------------

      bool  wine; //(기본값:false)

  //}

  //[전체찾기:Tree <빠른목록> 관련]
  //{
      //[2019.02.26.화][추가]
      int   findTree_FontStyle;    //굵은문자.

      int   findTree_FontColor;    //clBlack.

      //[형광색] 지정 유/무.
      bool  findTree_FontBackUse;  //true.

      //[형광색] 값.
      int   findTree_FontBackColor; //clLime.

  //}

  //[편집기:실시간 선언정보판]
  //{
      //[2012.04.14.토][추가!!!]{-----------------
      //[편집기] 에 나오는 [실시간 선언정보판] 의
      //[밝기/투명/투명도] 관리.
      //}-----------------------------------------

      bool  editorInfoTree_AlphaBlend;
      int   editorInfoTree_AlphaBlendValue;
      int   editorInfoTree_Brightness;

      //[2012.05.26.토][추가!!!]
      bool  editorInfoTree_ItemHint; //(기본값:true)

      //[2012.05.24.목][추가!!!]
      //[정보판] 아래에 나오는 별도 [귀뜸말] 을 보일지 말지를 결정.
      bool  editorInfoTree_BottomHint; //(기본값:true)

      //[2012.05.29.화][추가!!!]
      //[아래 귀뜸말] 을 [제목줄] 이 있는 형식으로 보여줄지 결정.
      bool  editorInfoTree_BottomTitleHint; //(기본값:false)

      //[2012.05.30.수][추가!!!]{-----------------------
      //[근접 단어 정렬] 기능 사용 유/무.
      bool  editorInfoTree_ClosedWord; //(기본값:false)
      //}-----------------------------------------------

  //}

  //[메뉴:편집]
  //{
      //[2018.05.06.일][추가!!!]{----------------------------------------------------------
      //<*.opt> 에 저장되는 값은 아니나 [맷돌-IDE] 실행시 계속 설정이 유지 되는 값을 정의.
      //}----------------------------------------------------------------------------------

      //{메뉴 : 편집 -> 탭(Tab) => 공백(Space) 변환 } 에서 설정 된 값.
      int  tabToSpaceX; //(기본 : 1)
      
  //}

  //[가상기계 전용 환경 관련:문서에 저장되지 않음]
  //{
      //[2010.07.05.월][추가!!!]{-----------------------
      //[가상기계 전용 환경] 과 관련된 정보를 정의한다.
      //이 정보는 [환경변수문서] 에는 저장되지 않는다.
      //}-----------------------------------------------

      //현재 연 [가상기계] 의 이름을 갖는다(전체이름).
      char     gvmName[1024];

      bool     gvmMode; //(기본값 : false).

      //[위치/크기정보]
      //{
          //[!]{---------------------------------------------------------------------
          //현재 [개발환경] 의 [위치/크기] 정보를 복구할때를 위하여 저장한다.
          //
          //[2018.02.26.월][설명추가!!!]*********************************************
          //원래 { 메뉴 -> GVMS(PC) } 의 <*.gvms> 구동시 IDE 를 특정 크기로
          //만들고 복원하기 위하여 필요한 기능 이었다.
          //
          //금일, [Linux:wine] 에서는 [최대/기본] 의 전환이 제대로 동작하지 않으므로
          //이를 지원하기 위하여도 사용한다.
          //특별하게 수정하거나 추가할 것은 없다.
          //
          //개별 정보를 구조체 정보 하나로 대체.
          //단, 기본 크기 관리용과 [GVMS:실행] 등을 위한 백업용 2 개 선언.
          //}------------------------------------------------------------------------

          //기본 적인 [최대화/기본화] 에 사용.
          struct  IDERECT  ideRect;

          //<Ide_Menu_GVMS/X_Install()/Ide_Menu_GVM_Ide()> 에서 GVMS 등 실행시
          //IDE 모양이 바뀌는 경우 현재 <ideRect> 정보를 백업하는 용도로만 사용.
          //<Ide_Menu_GVMS/X_Install()> 에서 [백업] 되고, <Ide_Menu_GVM_Ide()> 에서 복구된다.
          struct  IDERECT  ideRectBackup;

      //}

  //}

};

//[정의]
//{
    #define  d_border_width          4

    #define  d_popup_border_width    1

    //[2007.04.08.일][추가!!!]
    #define  d_gutter_width          30

    //[2009.10.15.목][추가!!!]{----------------------------------------------------------------
    //editor_top_Form->Height 의 기본 값을 정의한다.
    //이는 검증시 나오는 [행지정상자] 의 위치가 이 값을 사용하는데, editor_top_Form->Height 이
    //펼쳐지는 경우 높이가 바뀌에 되므로 이것이 펼쳐져 있는 경우는 제대로 지정되지 않는다.
    //따라서, 고정값을 하나 만들어 놓는다.
    #define  d_editorTopHeight       16
    //}----------------------------------------------------------------------------------------

//}

//[환경선택]
//{
    //true  : 사용 하기.
    //false : 사용 하지 않기.
    #define  d_OPTION_ide_outline       true
    #define  d_OPTION_msgbox_outline    true
//}

//[color 지정]
//{
    //--------------------------------------------------------
    //향후 같은 이름의 전역 변수로 전부 대체된다.
    //모두 공통된 이름을 가지고 같은 색을 일괄 적용하게 된다.

    //기막힌녹색 : 0x00C4C400

    //나의녹색 : (clLime<<6) & 0x00ffffff
    //           (0x0000FF80<<7) & 0x00ffffff
    //맑은녹색 : (0x00FF8000>>1) & 0x00ffffff

    //진보라     : 0x00800040
    //연보라     : 0x00FF0080 (추천!!!)
    //아주연보라 : 0x00FF8080 (추천!!!)

    //자주     : clPurple
    //진홍     : 0x008000FF
    //분홍     : clFuchsia
    //홍시색   : 0x000C5BEF
    //토마토색 : clYellow>>2
    //감색     : clYellow>>1

    //연두     : 0x0000FF80
    //라임색   : clLime
    //청록색   : clTeal
    //진녹색   : 0x00004000
    //푸른녹색 : 0x00808040
    //올리브   : clOlive

    //진갈색   : 0x00000040
    //갈색     : clMaroon
    //연갈색   : 0x00004080

    //주황색   : 0x000080FF

    //흐린파랑 : 0x00FF8000 //(추천!!!)
    //흐린하늘 : 0x00C08000

    //짙은회색 : 0x003D3D3D

    //테두리 색.(caption 색)
    //#define IDE_COLOR_0           (clLime<<6) & 0x00ffffff

    //양각 문자
    #define IDE_COLOR_1           clBlack

    //바탕색.
    #define IDE_COLOR_2           clWhite

    //음각 문자.
    #define IDE_COLOR_3           clWhite

    //비활성 문자.
    #define IDE_COLOR_4           clGray

    //비활성 문자2.
    #define IDE_COLOR_5           clSilver



    //주석문색.
//    #define IDE_COLOR_comment     clSilver

    //예약어색.
//    #define IDE_COLOR_keyword     clBlue

    //지시어색.
//    #define IDE_COLOR_directive   clGreen

    //문자/문자열색.
//    #define IDE_COLOR_string      clRed

    //2진수색.
//    #define IDE_COLOR_num_bin     clFuchsia //clFuchsia //0x000080FF

    //16진수색.
//    #define IDE_COLOR_num_hex     0x00FF8000




    //[통합개발환경] 전체의 1 pixel 가장자리선 색.
    #define IDE_COLOR_outline     clBlack


    //[2007.04.15.일][추가!!!]
    #define IDE_COLOR_breakpoint  _ide_option->color_breakpoint

    //필요한경우 다른 색으로 바꾼다.(일단은 테두리색으로 지정한다.)
    #define IDE_COLOR_run_arrow   _ide_option->color_run_arrow

    //필요한경우 다른 색으로 바꾼다.(일단은 테두리색으로 지정한다.)
    #define IDE_COLOR_linebox     _ide_option->color_linebox
    //--------------------------------------------------------
//}

//[밝기 지정]
//{
    //밝기 지정 값을 정의한다.
//    #define IDE_BRIGHT_editback           225
//    #define IDE_BRIGHT_treeback           220//225
//    #define IDE_BRIGHT_msgback            220//225

    #define IDE_BRIGHT_editdebug          215//225

    #define IDE_BRIGHT_hint               225
    //[2012.05.28.월][추가!!!]
    #define Ide_Bright_HintTitle          80




    #define IDE_BRIGHT_submenu            200
    #define IDE_BRIGHT_submenu_select     100

    #define IDE_BRIGHT_popupmenu          215
    #define IDE_BRIGHT_popupmenu_select   100

    #define IDE_BRIGHT_tree_select        100

    //[2012.05.22.화][추가!!!]{----------------------------------------------------
    //[실시간 선언 정보판] 은 [투명] 속성이 적용되므로 <IDE_BRIGHT_tree_select> 를
    //사용하는 경우 [너무 밝아서] 제대로 보이지 않는다.
    //어떤 경우라도 확실하게 구분되게 만들기 위하여 좀더 진하게 설정.
    #define IDE_BRIGHT_infoTree_select    50
    //}----------------------------------------------------------------------------

    #define IDE_BRIGHT_editinfo_select    100

    #define IDE_BRIGHT_edittop_select     215

    #define IDE_BRIGHT_linebox            256/2

    #define IDE_BRIGHT_breakline          256/2

    #define IDE_BRIGHT_back               235

    
    //[2011.06.20.월][추가!!!]
    #define Ide_Bright_DbgView_Back       80//235

    //[2012.09.23.일][추가!!!]
    #define Ide_Bright_DbgView_EditBack   225//235



    //[2007.12.23.일][추가!!!]
    #define IDE_BRIGHT_List_Select        100

    //[2008.04.06.화][추가!!!]
    #define IDE_BRIGHT_BalloonBox         180

    //[2009.02.12.목][추가!!!]
    #define IDE_BRIGHT_captionbar         110

    //[2009.04.03.금][추가!!!]
    #define Ide_Bright_ImeHan             60
    #define Ide_Bright_ImeEng             200

    //[2009.04.04.토][추가!!!]
    //버튼의 비활성화시 그림의 밝기를 지정한다.
    #define Ide_Bright_BmpBtn_Disable     195

    //[2009.08.09.일[추가!!!]
    #define Ide_Bright_RadioBtn_Disable   195

    //[2010.07.06.화][추가!!!]
    #define Ide_Bright_CheckBtn_Disable   195

    //[2009.04.08.수][추가!!!]
    //[버튼묶음] 부분의 바탕색의 밝기를 지정한다.
    #define Ide_Bright_IdeButtonsBack     255//240//230

    //[2009.04.22.일][수정!!!]
    //[설정대화상자] 의 각각의 [설정부] 배경의 밝기를 지정한다.
    #define Ide_Bright_IdeOptionDialogPartBack     165

    //[2009.08.02.일][추가!!!]
    #define Ide_Bright_Progress           40

    //[2009.10.03.토][추가!!!]
    #define Ide_Bright_WizardBtn          230

    //[2018.04.18.수][추가!!!]
    #define Ide_Bright_SelBtn             200//115

    //[2009.10.03.토][추가!!!]
    #define Ide_Bright_DebugEtcBtn        255

    //[2011.04.27.수][추가!!!]
    #define Ide_Bright_BuildStatusLabelBack     135

    //[2018.02.17.토][추가!!!]
    #define Ide_Bright_MsgBoxEdit    235

    //[2019.02.16.토][추가]
    #define Ide_Bright_Edit    245//235

    //[2019.02.17.일][추가]
    #define Ide_Bright_Tree_Find_Doc    100

//}

//[배경 종류]
//{
    //[2007.03.24.토]
    //IDE 바탕화면에 그림을 각각 별도로 지정할지, 한개를 전체로 사용할지를 결정한다.
    #define  IDE_BACKBMP_entire         _ide_option->ideBackPictureEntire//true

    #define  IDE_BACKBMP_entire_path    (ExtractFilePath(Application->ExeName) + "image\\기계닉스.jpg")

    #define  IDE_BACKBMP_edit_path      (ExtractFilePath(Application->ExeName) + "image\\기계닉스.jpg")
    #define  IDE_BACKBMP_tree_path      (ExtractFilePath(Application->ExeName) + "image\\기계닉스.jpg")
    #define  IDE_BACKBMP_msg_path       (ExtractFilePath(Application->ExeName) + "image\\기계닉스.jpg")

//}

//[마법사 위치]
//{
    //[2009.05.27.수][추가!!!]
    //[설계묶음 생성기] 경로.
    #define  Ide_WizardFolderPath      (ExtractFilePath(Application->ExeName) + "wizard\\")

//}

//[temp 위치]
//{
    //[2010.04.06.화][추가!!!]{--------------------------------------------------------
    //"gui_temp" 위치를 정의한다.
    //이는 <ForceDirectories()> 를 사용하여 "temp" 까지 자동으로 생성하기 위한 것이다.
    //}--------------------------------------------------------------------------------

    #define  Ide_TempFolderPath    (ExtractFilePath(Application->ExeName) + "temp\\gui_temp\\")

//}

//[Glib 위치]
//{
    //[2010.12.16.목][추가!!!]
    #define  Ide_Glib_Root_Path    (ExtractFilePath(Application->ExeName) + "glib\\")

//}

//[IDE 자체 위치]
//{
    //[2010.12.16.목][추가!!!]
    #define  Ide_Root_Path         (ExtractFilePath(Application->ExeName) + "\\")

//}

//[운영체제 위치:VMOS 계열]
//{
    //[2009.08.26.수][추가!!!]{---------------
    //항상 고정인 [운영체제] 위치를 정의한다.
    //}---------------------------------------

    //[VMOS통합판수정중][2010.12.07.화]{-------------------
    //새로운 VMOS [운영체제] 의 경로에 맞게 전부 수정한다.
    //}----------------------------------------------------

    //[2010.12.13.월][추가!!!]
    #define  Ide_OS_Root_Path      (ExtractFilePath(Application->ExeName) + "os\\")

    //VMOS 계열 관리 위치를 정의한다.
    #define  Ide_Vmos_Root_Path    (ExtractFilePath(Application->ExeName) + "os\\vmos\\")

    //[2010.12.10.금][추가!!!]
    //OSX 계열 관리 위치를 정의한다.
    #define  Ide_Osx_Root_Path     (ExtractFilePath(Application->ExeName) + "os\\osx\\")

//}

//[맷돌-통합개발환경 특수기능 폴더위치]
//{
    //[2009.11.20.금][생성!!!]{-----------------------------------------------
    //[맷돌-통합개발환경] 에서 지원하는 특별기능을 위한 폴더 위치를 지정한다.
    //}-----------------------------------------------------------------------

    //[2011.11.19.토][수정!!!]
    //불필요하므로 주석으로 처리한다.
    //#define  Ide_System_GmRcBasic_Path          (ExtractFilePath(Application->ExeName) + "ide_system\\gmrcbasic_set\\gmrcbasic_set.gprj")

    //[2009.12.05.토][추가!!!]
    //{
        //[2011.11.13.일][수정!!!]{-----------------------------------------------------------------------------------------------------------------
        //[설계묶음] 을 열지 않고 바로 맷돌에 짝이되는 [가상기계(GVMX)] 를 설치하는 방식으로 수정되었다.
        //이에 따라 [가상기계(GVMX)] 지정으로 수정.
        #define  Ide_System_GmRcBasicGvmx_Path          (ExtractFilePath(Application->ExeName) + "ide_system\\gmrcbasic_make\\gmrcbasic_make.gvmx")
        //}-----------------------------------------------------------------------------------------------------------------------------------------

        //Flash 에 기록할 문서 경로.
        #define  Ide_System_GmRcBasicGhostFlash_Path    (ExtractFilePath(Application->ExeName) + "ide_system\\gmrcbasic_make\\ghost\\flash.hex")

        //EEprom 에 기록할 문서 경로.
        #define  Ide_System_GmRcBasicGhostEEp_Path      (ExtractFilePath(Application->ExeName) + "ide_system\\gmrcbasic_make\\ghost\\eeprom.hex")

        //[2009.12.06.일][추가!!!]
        #define  Ide_System_GmRcBasicCircuit_Path       (ExtractFilePath(Application->ExeName) + "ide_system\\gmrcbasic_make\\circuit.pdf")

        //[2009.12.24.목][추가!!!]
        //맷돌과 AT45DB041B 의 연결 회로도 위치를 가진다.
        //[2011.05.13.금][수정!!!]
        //<G.MTDL.A+AT45DB041B.pdf> => <G.MTDL.X+AT45DB041X.pdf> 로 이름을 변경하였다.
        //이는 내용이 AT45DB041B 만 지원하던 것을 AT45DB041X 계열을 다 지원하도록 수정되었기 때문이다.
        #define  Ide_System_OS_AT45DB041B_Circuit_Path       (ExtractFilePath(Application->ExeName) + "os\\vmos\\G.MTDL.X+AT45DB041X.pdf")

    //}

    //[가상기계 전용 환경 관련]
    //{
        //[2010.07.08.목][추가!!!]{-------------------------------
        //[가상기계 전용 환경] 지원을 위한 폴더위치등을 지정한다.
        //}-------------------------------------------------------

        //기계닉스에서 제공하는 [가상기계(*.gvms)] 가 들어 있는 폴더 경로를 가진다.
        #define  Ide_System_GVMS_Path       (ExtractFilePath(Application->ExeName) + "gigyenics\\gvm\\gvms\\")

        //기계닉스에서 제공하는 [가상기계(*.gvmx)] 가 들어 있는 폴더 경로를 가진다.
        #define  Ide_System_GVMX_Path       (ExtractFilePath(Application->ExeName) + "gigyenics\\gvm\\gvmx\\")


    //}

    //[ide_system:gmrcbasic_set]
    //{
        //[2011.11.19.토][추가!!!]
        #define  Ide_System_GmrcbasicSet_Gvmx_Path    (ExtractFilePath(Application->ExeName) + "ide_system\\gmrcbasic_set\\gmrcbasic_set.gvmx")

    //}

    //[ide_system:rc_servo_zero]
    //{
        //[2011.11.20.일][추가!!!]
        #define  Ide_System_RcServoZero_Gvmx_Path    (ExtractFilePath(Application->ExeName) + "ide_system\\rc_servo_zero\\rc_servo_zero.gvmx")

    //}

//}

//[대화상자 관련]
//{
    //[2012.03.17.토][추가!!!]
    //[맷돌-통합개발환경] 에서 열수 있는 모든 문서의 목록을 설정.
    #define  Ide_FileFilter    "*.c|*.c|*.h|*.h|*.txt|*.txt|*.gtxt|*.gtxt|*.gasm|*.gasm|*.gcsm|*.gcsm|*.gobj|*.gobj|*.glib|*.glib|*.gob1|*.gob1|*.gtmp|*.gtmp|*.glnk|*.glnk|*.$lst|*.$lst|*.$|*.$|*.gvmi|*.gvmi"

    //[맷돌-통합개발환경] 에서 열수 있는 모든 문서의 [확장자] 목록.
    #define  Ide_FileExtList   "c h txt gtxt gtxt gasm gcsm gobj glib gob1 gtmp glnk $lst $ gvmi"

//}

//[전체 투명]
//{
    //AlphaBlend 를 설정할수 있다.
    //#define  IDE_TOTAL_alphablend       _ide_option->alphaBlendUse
    //#define  IDE_TOTAL_alphablendvalue  _ide_option->alphaBlendValue

//}



//[2018.05.09.수][완료!!!]
void __fastcall IDE_CreateForms(void);

//[2012.04.29.일][완료!!!]
void __fastcall IDE_DeleteForms(void);

//[2012.06.05.화][완료!!!]
void __fastcall IDE_ResizeForms(void);

//[2022.06.07.화][완료]
void __fastcall IDE_StartUp_Etc(void);

//[2022.07.15.금][완료]
void __fastcall IDE_OnShow(void);


//[<*.opt> 관련]
//{
    //[2007.10.02.화][완료!!!]
    void __fastcall IDE_Get_Option(struct  IDE_OPTION  **pOption);


    //[2019.02.26.화][완료]
    void __fastcall Ide_Option_Init(void);

    //[2019.02.26.화][완료]
    void __fastcall IDE_OptionFile_Open(void);

    //[2019.02.26.화][완료]
    void __fastcall IDE_OptionFile_Save(void);


    //[2007.11.21.수][완료!!!]
    void __fastcall IDE_OptionFile_RestoreEditor(void);

//}


//[Debug 관련]
//{
    //[2007.11.28.수][완료!!!]
    void __fastcall DEBUG_Indicator_Show(void);

    //[2007.11.28.수][완료!!!]
    void __fastcall DEBUG_Indicator_Hide(void);

//}

//[IDE 함수]
//{
    //[2009.01.26.월][수정!!!]{---------------------------------------
    //원래 <main.h> 에 정의되 있던 것들을 <ide_main.h> 안으로 옮긴다.
    //}---------------------------------------------------------------

    //[폴더 만들기]
    //{
        //[2010.04.06.화][완료!!!]
        void __fastcall Ide_Make_TempFolder(void);

    //}

    //[문서 관련 함수]
    //{
        //[2012.03.17.토][완료!!!]
        void __fastcall IDE_File_Open(void);

        void __fastcall IDE_File_Save(void);

        void __fastcall IDE_File_SaveAll(void);

        //[2007.04.01.일][완료!!!]
        void __fastcall IDE_File_SaveAs(void);

        //[2007.03.28.수][완료!!!]
        void __fastcall IDE_File_New(void);

        //[2018.05.05.토][완료!!!]
        void __fastcall Ide_AutoSave_Period(int  pMinute);

        //[2018.05.05.토][완료!!!]
        void __fastcall Ide_AutoSave_Use(bool  pUse);

    //}

    //[설계묶음 관련 함수]
    //{
        //[2012.05.13.일][완료!!!]
        //[2018.10.21.일][완료!!!]
        bool __fastcall IDE_Project_New(bool  pNewOnly,
                                        //[2009.05.30.토][추가!!!]
                                        //[설계묶음 마법사] 를 보이는 경우는 true.
                                        bool  pWizardShow);

        //[2012.04.20.금][완료!!!]
        void __fastcall IDE_Project_Open(//[2009.05.28.목][추가!!!]
                                         //NULL인 경우는 대화상자를 열어주고 이미 경로가 있는 경우는 바로 열어준다.
                                         //이는 [설계묶음 마법사] 기능으로 이미 만들어 진 거을 자동으로 열어 주어야 하기 때문이다.
                                         char  *pGprjName);

        //[2012.04.20.금][완료!!!]
        void __fastcall IDE_Project_Save(//[다른이름으로 저장] 인 경우는 무조건 [대화상자] 를 열어 주어야 한다.
                                         bool  pSaveAs);

        //[2009.02.01.일][완료!!!]
        void __fastcall IDE_Project_SaveAs(void);

        //[2012.05.13.일][완료!!!]
        void __fastcall IDE_Project_Close(void);

        //[2012.04.20.금][완료!!!]
        void __fastcall IDE_Project_Add_C(char  *pFileName);

        //[2012.04.20.금][완료!!!]
        int __fastcall IDE_Project_Delete_C(void);


        
        //[2019.02.23.토][완료]
        bool __fastcall Ide_Project_Get_TotalFileSize(int  *rSize,
                                                      //처리한 문서 개수(중복되지 않은 순수 문서 개수, NULL 이면 미사용).
                                                      int  *rCount);



        //[2012.04.20.금][완료!!!]
        bool __fastcall IDE_Project_Add_Glib(char  *pFileName);

        //[2012.04.20.금][완료!!!]
        bool __fastcall Ide_Project_Add_Glib_Tree(//<*.glib> 전체 경로를 전받 받는다.
                                                  char  *pGlibFileName);

        //[2012.04.20.금][완료!!!]
        int __fastcall IDE_Project_Delete_Glib(void);

        //[2011.05.08.일][완료!!!]
        void __fastcall Ide_Project_Delete_Glib_ReName(struct TREE  *pTree,
                                                       //처리할 [옹이] 의 [절대위치].
                                                       int           pNodeIndex);

        //[2012.04.20.금[완료!!!]
        void __fastcall Ide_Project_Glib_Make_InFileName(struct TREE  *pTree,
                                                         //<*.glib> 항목의 [절대위치].
                                                         int           pGlibItemIndex,
                                                         //합성된 [설계묶음] 내부 경로.
                                                         char         *rInFileName);




        //[2012.04.20.금][완료!!!]
        void __fastcall IDE_Project_Add_Etc(char  *pFileName);

        //[2011.05.10.화][완료!!!]
        int __fastcall IDE_Project_Delete_Etc(void);



        //[Tree:가상기계]
        //{
            //[2012.04.20.금][완료!!!]
            bool __fastcall Ide_Project_Add_Gvm(char  *pFileName);

            //[2012.03.16.금][완료!!!]
            //[옹이:가상기계] 에 [GVMS/GVMX] 항목 추가.
            bool __fastcall Ide_Project_Add_Gvm_Item(//추가할 [옹이] 절대위치.
                                                     int    pNodeIndex,
                                                     //<*.gvmx/*.gvmx> 의 [경로이름확장자].
                                                     char  *pGvmFileName,
                                                     //[2012.03.17.토][추가!!!]
                                                     //추가된 항목의 [절대위치] 반환(NULL 인 경우는 무효).
                                                     int   *rAddItemIndex);

            //[2012.03.16.금][완료!!!]
            //[GVMS/GVMX] 항목에 해당 하위 항목 추가.
            bool __fastcall Ide_Project_Add_Gvm_SubItem(//추가할 [옹이] 절대위치.
                                                        int    pNodeIndex,
                                                        //<*.*> 의 [경로이름확장자].
                                                        char  *pFileName,
                                                        //[2012.03.17.토][추가!!!]
                                                        //추가된 항목의 [절대위치] 반환(NULL 인 경우는 무효).
                                                        int   *rAddItemIndex);

            //[2012.03.16.금][완료!!!]
            int __fastcall IDE_Project_Delete_Gvm(void);

            //[2012.03.16.금][완료!!!]
            void __fastcall Ide_Project_Delete_Gvm_ReName(struct TREE  *pTree,
                                                          //처리할 [옹이] 의 [절대위치].
                                                          int           pNodeIndex);

            //[2012.04.20.금][완료!!!]
            void __fastcall Ide_Project_Gvm_Make_InFileName(struct TREE  *pTree,
                                                            //<*.gvms/*.gvmx> 항목의 [절대위치].
                                                            int           pGvmItemIndex,
                                                            //합성된 [설계묶음] 내부 경로.
                                                            char         *rInFileName);

        //}



        //[2009.04.02.목][완료!!!]
        int __fastcall Ide_Project_All_Delete_C_Include_H(void);

        //[2012.04.20.금][완료!!!]
        void __fastcall Ide_Project_C_IncludeFile(void);

        //[2010.12.17.금][완료!!!]
        bool __fastcall Ide_Project_Api_Vmos_Match(char  *pVmosGinfName);



        //[2011.11.13.일][완료!!!]
        bool __fastcall Ide_Mtdl_Get_VmosGinfFileName(char  *rVmosGinfFileName);

        //[2011.11.19.토][완료!!!]
        bool __fastcall Ide_Mtdl_Vmos_Api_Match(//한행 단어나열로 된 API 목록.
                                                //예) "Spi I2c Math"
                                                char  *pApiClassList);

        
        //[2009.09.05.토][완료!!!]
        void __fastcall Ide_Project_Api_ReCopy(char  *pApiTreeText);

        //[<*.gprj> 문서 관련]
        //{
            //[2018.10.09.화][완료!!!]
            void __fastcall Ide_GprjFile_Get_PathNameExt(char  *rPathNameExt,
                                                         char  *rPath,
                                                         char  *rNameExt,
                                                         char  *rName);

            //[2018.10.15.월][완료!!!]
            bool __fastcall Ide_GprjFile_Add_C(char  *pGprj_PathNameExt,
                                               //[2018.10.15.월][추가!!!]{----------------------------------------------------
                                               //<pInsertPosStr> 문자열을 찾아 이 위치에 <pC_PathNameExt_List> 를 끼워넣는다.
                                               //찾는 문자열이 없는 경우는 그냥 <설계문서> 마지막에 추가.
                                               //""  인 경우는 사용하지 않는다.
                                               char  *pInsertPosStr,
                                               //}----------------------------------------------------------------------------
                                               //반드시 [설계묶음] 내부 경로에 존재해야 함.
                                               char  *pC_PathNameExt_List);

            //[2018.10.13.토][완료!!!]
            bool __fastcall Ide_GprjFile_Add_Glib(char  *pGprj_PathNameExt,
                                                  //[함수묶음] 은 단지 [이름] 만 사용(확장자도 불필요).
                                                  char  *pGlib_Name_List);

        //}

        //[설계묶음 마법사 관련]
        //{
            //[2018.05.02.수][완료!!!]
            bool __fastcall Ide_Project_Wizard(//[설계묶음 마법사] 에서 생성할 [설계묶음] 이름(경로가 없는 순수 이름).
                                               char   *pWizardName);

        //}



    //}

    //[기타 문서 관리]
    //{
        //[2011.05.31.화][완료!!!]
        void __fastcall Ide_File_Close_DebugFiles(void);

        //[2009.05.28.목][완료!!!]
        void __fastcall Ide_File_Close_GlibSysHeader(void);

        //[2011.05.09.월][완료!!!]
        void __fastcall Ide_File_Close_GlibGtxt(//[2011.05.09.월][추가!!!]
                                                //닫아줄 문서전체이름.
                                                char  *pCloseFilelName);

        //[2012.04.20.금][완료!!!]
        void __fastcall Ide_Glib_MakeHeader(void);

        //[2012.04.20.금][완료!!!]
        void __fastcall Ide_Glib_MakeGtxt(//지정 [옹이] 의 [절대위치].
                                          int    pNodeIndex,
                                          //완성되어 저장된 문서의 경로.
                                          char  *rFileFullName);


    //}

    //[정보창 처리 관련]
    //{
        //[2022.06.24.금][완료]
        void __fastcall IDE_Tree_Item_DoubleClick(void);

        //[2009.02.02.월][완료!!!]
        void __fastcall IDE_Tree_Item_Add(void);

        //[2012.03.16.금][완료!!!]
        void __fastcall IDE_Tree_Item_Delete(void);

    //}

    

    //[전체 찾기 관련]
    //{
        //[2019.02.21.목][완료]
        bool __fastcall Ide_Tree_Find_Add_Doc(char  *pPathNameExt,
                                              //[다시그리기] 로 즉시 반영하는 경우는 <true>.
                                              bool   pShape,
                                              //[2019.02.21.목][추가]
                                              //항목이 추가된 경우 이 항목의 <index> 반환.
                                              //단, 이상없이 등록된 경우만 유효.
                                              int   *rItemIndex);

        //[2019.02.26.화][완료]
        void __fastcall Ide_Tree_Find_Add_Item(//추가할 1행 문자열([찾을문자열] 이 있는 행전체).
                                               char  *pLineStr,
                                               //[2019.02.17.일][추가]{----------------------
                                               //[찾은문자열] 의 [문서] 상의 [시작/끝:위치].
                                               //나중에 [찾기지정] 시에 필요.
                                               int    pStartIndex,
                                               int    pEndIndex,
                                               //[2019.02.26.화][추가]
                                               //[찾은문자열] 이 위치한 행의 [시작:위치].
                                               int    pLineStartIndex,
                                               //}-------------------------------------------
                                               //[다시그리기] 로 즉시 반영하는 경우는 <true>.
                                               bool   pShape,
                                               //[2019.02.21.목][추가]
                                               //항목이 추가된 경우 이 항목의 <index> 반환.
                                               //단, 이상없이 등록된 경우만 유효.
                                               int   *rItemIndex);

        //[2019.02.17.일][완료]
        void __fastcall Ide_Tree_Find_DoubleClick(void);

        //[2019.02.17.일][완료]
        bool __fastcall Ide_Tree_Find_FileOpen(char  *pStr);

    //}



    //[검증식 보기창 관련]
    //{
        //[2012.05.21.월][완료!!!]
        bool __fastcall Ide_Tree_DbgExp_Add(struct DBGEXP_TREE_INFO  *pInfo,
                                            //[2011.07.18.월][추가!!!]
                                            //추가된 [검증식] 위치를 반환한다.
                                            int                      *rExpIndex);

        //[2011.07.14.목][완료!!!]
        bool __fastcall Ide_Tree_DbgExp_Delete(void);

        //[2011.07.14.목][완료!!!]
        void __fastcall Ide_Tree_DbgExp_DeleteAll(void);

        //[2011.07.18.월][완료!!!]
        void __fastcall Ide_Tree_DbgExp_ModeChange(//<10, 16, 2> 의 [값] 으로 직접 형식을 지정한다.
                                                   int  pViewMode);

        //[2011.07.19.화][완료!!!]
        void __fastcall Ide_Tree_DbgExp_ViewSelectItem(void);

        //[2011.07.19.화][완료!!!]
        void __fastcall Ide_Tree_DbgExp_ViewAll(void);

        //[2011.07.20.수][완료!!!]
        void __fastcall Ide_Tree_DbgExp_DoubleClick(void);

        //[2011.07.21.목][완료!!!]
        void __fastcall Ide_Tree_DbgExp_EVENT_Item_M(//[2011.07.21.목][추가!!!]
                                                     //[검증식 보기창] 을 다시 그리는 경우는 <true>.
                                                     bool  pRePaint);

        //[2011.07.20.수][완료!!!]
        void __fastcall Ide_Tree_DbgExp_ThisItemExpandAll(void);

        //[2011.07.20.수][완료!!!]
        void __fastcall Ide_Tree_DbgExp_ThisLevelExpandAll(void);

        //[2011.07.20.수][완료!!!]
        void __fastcall Ide_Tree_DbgExp_ExpandAll(void);

    //}

    //[가상머신 제작 관련]
    //{
        //[2009.12.28.월][완료!!!]
        bool __fastcall Ide_IsBuilded(void);

        //[2023.01.29.일][완료]
        bool __fastcall IDE_Build(unsigned char  pStep);

        //[단계 설정]
        //{
            //[2009.02.12.목][추가!!!]{----------------------------------------------
            //일괄적으로 처리 하는 것이 아니라 정해진 단계까지만 처리한다.
            //즉, 각각의 [비트] 를 검사하여 해당 기능만 수행한다.
            //이는 이 함수 하나를 여러 [버튼] 에 할당하여 해당 [버튼] 의 기능 까지만
            //처리하기 위한 것이다.
            //}----------------------------------------------------------------------

            #define  d_Build_Parser     0x01
            #define  d_Build_Object     0x02
            #define  d_Build_Link       0x04
            #define  d_Build_Gvmx       0x08

            //서로 "|" 연산자로 조합하여 사용한다.

        //}

    //}

    //[IDE 자체 운영 관련]
    //{
        //[2018.02.18.일][완료!!!]
        void __fastcall IDE_Close(void);

        //[2018.02.26.월][완료!!!]
        void __fastcall IDE_Size_Max(void);

        //[2018.02.26.월][완료!!!]
        void __fastcall IDE_Size_Normal(void);

        //[2018.03.04.일][완료!!!]
        void __fastcall IDE_Size_Min(void);

    //}

    //[Linux:Wine 지원 관련]
    //{
        //[2018.03.06.화][완료!!!]
        void __fastcall IDE_Wine_Modal(//유사모달(true)/해제(false))
                                       bool  pModal);

    //}

    //[설계 정보 보여주기 함수]
    //{
        //[2012.06.03.일][완료!!!]
        void __fastcall Ide_TreeInfo(void);

        //[2012.05.16+2.금][완료!!!]
        void __fastcall Ide_TreeInfo_ItemTextMake(int    pRecIndex,
                                                  char  *rItemText,
                                                  //[구조체] 인 경우는 's', [공용체] 인 경우는 'u' 를 반환한다.
                                                  char  *rStructUnion);

        //[2009.02.18.수][완료!!!]
        void __fastcall Ide_TreeInfo_DoubleClick(void);  

    //}

    //[API 정보창 관련]
    //{
        //[2012.04.27.금][완료!!!]
        void __fastcall Ide_Tree_Api(void);

        //[2022.06.24.금][완료]
        void __fastcall Ide_Tree_Api_Make_ItemPath(//[2022.06.24.금][추가]
                                                   //<d_TREE_api>, <d_TREE_apiSrch> 둘중 하나만 사용.
                                                   //[Tree:API 검색] 지원하기 위한것.
                                                   int    pTreeIndex,
                                                   //항목의 index.
                                                   int    pItemIndex,
                                                   //합성된 경로(경우에 따라 문서이름까지 포함된다).
                                                   char  *rPath);

        //[2009.06.01.월][완료!!!]
        void __fastcall Ide_Tree_Api_File_Close_GlibGtxt(char  *pDelFileName);

        //[2022.06.24.금][완료]
        void __fastcall Ide_Tree_Api_Glib_MakeGtxt(//[2022.06.24.금][추가]{---------------------------
                                                   //<d_TREE_api>, <d_TREE_apiSrch> 둘중 하나만 사용.
                                                   //[Tree:API 검색] 지원하기 위한것.
                                                   int    pTreeIndex,
                                                   //}------------------------------------------------
                                                   //처리 대상 항목의 index.
                                                   int    pItemIndex,
                                                   //완성되어 저장된 문서의 경로.
                                                   char  *rFileFullName);

        //[2022.06.30.목][완료]
        void __fastcall Ide_Tree_Api_DoubleClick(//[2022.06.24.금][추가]
                                                 //<d_TREE_api>, <d_TREE_apiSrch> 둘중 하나만 사용.
                                                 //[Tree:API 검색] 지원하기 위한것.
                                                 int  pTreeIndex);

        //[2022.06.24.금][완료]
        void __fastcall Ide_Tree_Api_Add_Glib_To_Gprj(//[2022.06.24.금][추가]
                                                      //<d_TREE_api>, <d_TREE_apiSrch> 둘중 하나만 사용.
                                                      //[Tree:API 검색] 지원하기 위한것.
                                                      int  pTreeIndex);

    //}

    //[기타 처리 함수]
    //{
        void __fastcall IDE_Database_View(void);

        //[2011.04.29.금][완료!!!]
        void __fastcall Ide_ErrorLine(//[오류] 가 있는 문서.
                                      char  *pErrorFileName,
                                      //[오류] 가 있는 [행번호].
                                      int    pErrorLineNumber);

    //}

    //[검증 구동 관련]
    //{
        //[2009.04.07.화][추가!!!]{----------------
        //[검증구동] 을 위한 [쓰레드] 를 관리한다.
        //}----------------------------------------

        //[2011.06.15.수][완료!!!]
        void __fastcall Ide_VDEBUG_Run(void);

        //[2011.06.15.수][완료!!!]
        void __fastcall Ide_VDEBUG_Quit(void);

        //[2009.04.07.화][완료!!!]
        bool __fastcall Ide_VDEBUG_Exsist(void);

        //[2018.05.06.일][완료!!!]
        bool __fastcall Ide_VDEBUG_Done(void);

    //}

    //[가상구동 관련]
    //{
        //[2009.03.12.목][추가!!!]{-------------------------------------------------------------
        //<Build> 후 완성된 <*.gvmx> 를 읽어 들여 [가상구동] 해준다.
        //실제 VMOS 와 같은 가상 VMOS 에서 구동시키며 [검증구동] 도 완벽하고 동일하게 실행된다.
        //
        //[2009.03.16.월][수정!!!]--------------------------------------------------------------
        //기존 달리 완전히 [Thread] 를 사용하여 완벽하게 동시 독립 구동이 가능하게 수정 되었다.
        //}-------------------------------------------------------------------------------------

        //[2009.03.17.화][완료!!!]
        void __fastcall Ide_VMOS_Run(void);

        //[2009.03.15.일][완료!!!]
        void __fastcall Ide_VMOS_Quit(void);

        //[2009.03.18.수][완료!!!]
        bool __fastcall Ide_VMOS_Exsit(void);

        //[2012.04.20.금][완료!!!]
        bool __fastcall Ide_VMOS_Download(void);

        //[2010.07.06.화][완료!!!]
        bool __fastcall Ide_VMOS_Download_Gvms(//가상 구동용 <*.gvms> 를 지정하여 설치한다.
                                               char  *pGvmsFileName);


        //[2009.03.18.수][처리중!!!]
        bool __fastcall Ide_VMOS_Upload(void);

        //[2009.03.18.수][완료!!!]
        bool __fastcall Ide_VMOS_Verify(void);

        //[2009.04.17.금][완료!!!]
        bool __fastcall Ide_VMOS_Erase(void);

        //[2009.04.17.금][완료!!!]
        bool __fastcall Ide_VMOS_Start(void);

        //[2009.04.17.금][완료!!!]
        bool __fastcall Ide_VMOS_Stop(void);

        //[2009.04.17.금][완료!!!]
        bool __fastcall Ide_VMOS_Reset(void);

        //[2009.04.17.금][완료!!!]
        bool __fastcall Ide_VMOS_DebugReset(void);

        //[2010.07.07.수][완료!!!]
        bool __fastcall Ide_VMOS_ResetStop(void);

        //[VM 명령]
        //{
            //[2009.04.17.금][완료!!!]
            bool __fastcall Ide_VM_Reset(void);

            //[2009.04.17.금][완료!!!]
            bool __fastcall Ide_VM_ResetVector(void);

            //[2009.04.17.금][완료!!!]
            bool __fastcall Ide_VM_Mode(int  pVmMode);

            //[2011.05.28.토][완료!!!]
            bool __fastcall Ide_VM_Mode_Read(int  *rVmMode);

            //[2009.04.17.금][완료!!!]
            bool __fastcall Ide_VM_SysBreakPoint(DTU8  pAdr);

            //[2009.04.29.수][완료!!!]
            bool __fastcall Ide_VM_BreakPoint(bool  pEnable);

        //}

    //}

    //[맷돌모듈 제어관련]
    //{
        //[2009.07.14.화][추가!!!]{-------------------------------------
        //실제 [맷돌모듈] 을 구동하는데 필요한 함수를 정의한다.
        //모두 [직렬버스] 를 사용한 방법으로 실제 모듈을 대상으로 한다.
        //}-------------------------------------------------------------

        //[2009.08.02.일][완료!!!]
        bool __fastcall Ide_Mdl_Exsist(void);

        //[2012.04.20.금][완료!!!]
        bool __fastcall Ide_Mdl_Download(void);

        //[2011.11.13.일][완료!!!]
        bool __fastcall Ide_Mdl_Download_Gvmx(//맷돌(G.MTDL.A) 구동용 <*.gvmx> 를 지정하여 설치한다.
                                              char              *pGvmxFileName,
                                              //[2011.11.11.금][추가!!!]
                                              //<PCC:VMOS> 와 동기화를 위한것(미사용인 경우 NULL).
                                              struct VMOS_SYNC  *pVmosSync);

        //[2013.06.19.수][완료!!!]
        bool __fastcall Ide_Mdl_Upload(void);

        //[2012.04.20.금][완료!!!]
        bool __fastcall Ide_Mdl_Verify(void);

        //[2011.11.11.금][완료!!!]
        bool __fastcall Ide_Mdl_Verify_Gvmx(char              *pGvmxFileName,
                                            //[2011.11.11.금][추가!!!]
                                            //<PCC:VMOS> 와 동기화를 위한것(미사용인 경우 NULL).
                                            struct VMOS_SYNC  *pVmosSync);

        //[2009.07.24.금][완료!!!]
        bool __fastcall Ide_Mdl_Erase(void);

        //[2009.07.27.월][완료!!!]
        bool __fastcall Ide_Mdl_Start(void);

        //[2009.07.27.월][완료!!!]
        bool __fastcall Ide_Mdl_Stop(void);

        //[2010.05.07.금][완료!!!]
        bool __fastcall Ide_Mdl_Reset(//[2010.05.07.금][추가!!!]
                                      //Ide_Mdl_Stop() 함수를 사용할지 말지를 결정한다.
                                      bool  pVmosStopUse);

        //[2009.07.29.수][완료!!!]
        bool __fastcall Ide_Mdl_DebugReset(void);

        //[2010.07.07.수][완료!!!]
        bool __fastcall Ide_Mdl_ResetStop(void);

        //[2009.07.29.수][완료!!!]
        bool __fastcall Ide_Mdl_VM_Reset(void);

        //[2009.07.29.수][완료!!!]
        bool __fastcall Ide_Mdl_VM_ResetVector(void);

        //[2009.07.29.수][완료!!!]
        bool __fastcall Ide_Mdl_VM_Mode(int  pVmMode);

        //[2011.05.28.토][완료!!!]
        bool __fastcall Ide_Mdl_VM_Mode_Read(int  *rVmMode);

        //[2009.07.29.수][완료!!!]
        bool __fastcall Ide_Mdl_VM_SysBreakPoint(DTU8  pAdr);

        //[2009.07.29.수][완료!!!]
        bool __fastcall Ide_Mdl_VM_BreakPoint(bool  pEnable);

        //[2009.08.05.수][완료!!!]
        bool __fastcall Ide_Mdl_BuildDate(unsigned long long  *rBuildDate);

        //[2010.05.07.금][완료!!!]
        bool __fastcall Ide_Mdl_Change_OS_To_BaseVM(void);

        //[2010.12.08.수][중요수정!!!]
        bool __fastcall Ide_Mdl_Vmos_Install(char  *pVmosFileName);

        //[2010.05.08.토][완료!!!]
        bool __fastcall Ide_Mdl_OSX_Install(char  *pFileName);

        //[2011.05.05.목][완료!!!]
        bool __fastcall Ide_Mdl_OS_Check(void);

        //[2011.11.18.금][완료!!!]
        bool __fastcall Ide_Mtdl_Get_OS_Name(char  *rOS_Name);

    //}

    //[동작 기능 관련]
    //{
        //[2009.04.04.토][추가!!!]{-----------------------------------------------------------
        //실제 동작 버튼을 누르는등의 제어 기능을 관리한다.
        //[가상구동] 인 경우와 [맷돌구동] 의 두가지 경우로 나뉘므로 이 함수를 사용하여
        //공통으로 호출하여 처리하되, 이 함수 안에서 두 경우를 구분하여 해당 함수로 처리한다.
        //}-----------------------------------------------------------------------------------

        //[2009.04.05.일][완료!!!]
        bool __fastcall Ide_Ctrl_Exsist(void);

        //[2010.07.07.수][완료!!!]
        bool __fastcall Ide_Ctrl_Download(void);

        //[2009.04.04.토][처리중!!!]
        bool __fastcall Ide_Ctrl_Upload(void);

        //[2010.07.07.수][완료!!!]
        bool __fastcall Ide_Ctrl_Verify(void);

        //[2009.04.06.월][완료!!!]
        bool __fastcall Ide_Ctrl_Erase(void);

        //[2009.04.05.일][완료!!!]
        bool __fastcall Ide_Ctrl_Start(void);

        //[2009.04.05.일][완료!!!]
        bool __fastcall Ide_Ctrl_Stop(void);

        //[2009.04.05.일][완료!!!]
        bool __fastcall Ide_Ctrl_Reset(void);

        //[2009.04.06.월][완료!!!]
        bool __fastcall Ide_Ctrl_DebugReset(void);

        //[2010.07.07.수][완료!!!]
        bool __fastcall Ide_Ctrl_ResetStop(void);

        //[2009.11.20.금][완료!!!]
        bool __fastcall Ide_Ctrl_Auto(void);

        //[2012.04.20.금][완료!!!]
        bool __fastcall Ide_Ctrl_Auto_Debug(//[2009.12.28.월][수정!!!]{------------------------------------------
                                            //[개발검증] 시 계속 다시 설치할지를 결정한다.
                                            //이는 변경내용이 없는 경우는 굳이 다시 설치할 필요가 없기 때문이다.
                                            //true  : 다시 설치하지 않고 바로 전환한다.
                                            bool  pNoDownload
                                            //}------------------------------------------------------------------
                                           );

        //[VM 제어 명령]
        //{
            //[2009.04.08.수][완료!!!]
            bool __fastcall Ide_Ctrl_Vm_Reset(void);

            //[2009.04.08.수][완료!!!]
            bool __fastcall Ide_Ctrl_Vm_ResetVector(void);

            //[2009.04.08.수][완료!!!]
            bool __fastcall Ide_Ctrl_Vm_Mode(int  pVmMode);

            //[2011.05.28.토][완료!!!]
            bool __fastcall Ide_Ctrl_Vm_Mode_Read(int  *rVmMode);

            //[2009.04.09.목][완료!!!]
            bool __fastcall Ide_Ctrl_Vm_SysBreakPoint(DTU8  pAdr);

            //[2009.04.29.수][완료!!!]
            bool __fastcall Ide_Ctrl_Vm_BreakPoint(bool  pEnable);   

        //}

        //[2009.08.05.수][완료!!!]
        bool __fastcall Ide_Ctrl_BuildDate(unsigned long long  *rBuildDate);

        //[2011.05.17.화][완료!!!]
        bool __fastcall Ide_Ctrl_Vmos_Install(char  *pVmosFileName);

        //[2010.12.14.화][완료!!!]
        bool __fastcall Ide_Ctrl_OSX_Install(char  *pOsxFileName);

        //[2010.12.14.화][완료!!!]
        bool __fastcall Ide_Ctrl_OS_Check(void);

        //[2011.07.24.일][완료!!!]
        bool __fastcall Ide_Ctrl_OS_MemRange(//운영체제 사용 가능 메모리 전체 영역 시작 주소.
                                             unsigned long long  *rStartAdr,
                                             //운영체제 사용 가능 메모리 전체 영역 끝 주소.
                                             unsigned long long  *rEndtAdr);

        //[2011.12.28.수][완료!!!]
        bool __fastcall Ide_Ctrl_GVM_VerCheck(//읽어들인 [가상기계] 1개 덩어리.
                                              unsigned char  *pGvm);

    //}

    //[컨트롤 제어 관련]
    //{
        //[2009.04.11.토][완료!!!]
        bool __fastcall Ide_Ctrl_Ack(int  pAckTimeOut);

    //}

    //[통신포트 제어 관련]
    //{
        //[2009.04.21.화][완료!!!]
        bool __fastcall Ide_Comport_Open(int  pPortNum);

        //[2009.04.21.화][완료!!!]
        bool __fastcall Ide_Comport_Close(void);


        //[2009.10.02.금][완료!!!]
        bool __fastcall Ide_Comport2_Open(int  pPortNum,
                                          int  pBaud);

        //[2009.10.02.금][완료!!!]
        bool __fastcall Ide_Comport2_Close(void);

    //}

//}         

//[메뉴 관련]
//{
    //[수평이동]
    //{
        //[2012.02.08.수][완료!!!]
        void __fastcall Ide_Menu_MoveRL_Right(void);

        //[2012.02.08.수][완료!!!]
        void __fastcall Ide_Menu_MoveRL_Left(void);

    //}

    //[편집:특수]
    //{
        //[2018.05.08.화][완료!!!]
        void __fastcall Ide_Menu_TabToSpaceX(void);

        //[2021.08.01.일][완료]
        void __fastcall Ide_Menu_SpaceArrange(void);

        //[2021.07.29.목][완료]
        void __fastcall Ide_Menu_SpaceArrangeAll(void);

    //}

    //[2023.01.29.일][완료]
    void __fastcall Ide_Menu_GVMS_Install(//[2011.11.10.목][추가!!!]
                                          //구동할 <GVMS> 를 직접 지정한 경우만 사용.
                                          //일반적으로는 NULL 로 하여 대화상자를 보여준다.
                                          char  *pGvms,
                                          //즉시 실행까지 하는 경우는 <true>.
                                          bool   pReset);

    //[2012.03.18.일][완료!!!]
    void __fastcall Ide_Tree_Gvm_GVMX_Install(//<*.gvmx> 의 [경로이름확장자].
                                              char  *pGvmx,
                                              //즉시 실행까지 하는 경우는 <true>.
                                              bool   pReset);


    //[2011.11.11.금][완료!!!]
    bool __fastcall Ide_API_GVMX_Install(//[맷돌] 에 설치할 [가상기계(GVMX)] 의 [경로이름확장자].
                                         char              *pGvmx,
                                         //즉시 실행까지 하는 경우는 <true>.
                                         bool               pReset,
                                         //[2011.11.11.금][추가!!!]
                                         //<PC:VMOS> 와 동기화를 위한것(미사용인 경우 NULL).
                                         struct VMOS_SYNC  *pVmosSync);

    //[2011.11.12.토][완료!!!]
    bool __fastcall Ide_API_GVMX_Verify(//[맷돌] 에 설치할 [가상기계(GVMX)] 의 [경로이름확장자].
                                        char              *pGvmx,
                                        //<PCC:VMOS> 와 동기화를 위한것(미사용인 경우 NULL).
                                        struct VMOS_SYNC  *pVmosSync);


    //[2018.02.26.월][완료!!!]
    void __fastcall Ide_Menu_GVMX_Install(void);

    //[2023.01.29.일][완료]
    void __fastcall Ide_Menu_GVM_Ide(void);

    //[2011.11.10.목][완료!!!]
    void __fastcall Ide_Menu_Gigyenics_GVMS(void);

    //[2011.05.05.목][완료!!!]
    void __fastcall Ide_Menu_Gigyenics_GVMX(void);


    //[하위항목]
    //{
        //[2011.11.16.수][완료!!!]
        void __fastcall Ide_ListSubMenu_GVMS_Install(char  *pItemStr);

        //[2011.11.18.금][완료!!!]
        void __fastcall Ide_ListSubMenu_GVMX_Install(char  *pItemStr);

        //[2011.11.16.수][완료!!!]
        void __fastcall Ide_ListSubMenu_GVMS_Get_ItemList(char  **rItemList);

        //[2011.11.16.수][완료!!!]
        void __fastcall Ide_ListSubMenu_GVMX_Get_ItemList(char  **rItemList);

        //[2023.02.02.목][완료]
        void __fastcall Ide_ListSubMenu_GVMS_Thumb_View(char  *pItemStr);

    //}

//}

//[특수기능 관련]
//{
    //[2009.11.20.금][생성!!!]{------------------------------------
    //맷돌을 직접 통합개발환경에서 제어하는 부가기능등을 관리한다.
    //}------------------------------------------------------------

    //[2011.11.20.일][완료!!!]
    void __fastcall Ide_System_Mtdl_RcServoZero(void);

    //[2011.11.20.일][완료!!!]
    void __fastcall Ide_System_Mtdl_GmRcBasic(void);

    //[2011.11.13.일][완료!!!]
    void __fastcall Ide_System_Mtdl_GmRcBasic_Make(void);

//}

//[Alt+F9:현재 문서만 문법확인]
//{
    //[2023.01.29.일][완료]
    bool __fastcall Ide_Parser_OneFile(char  *pPathNameExt);

//}

//[편집기:실시간 선언정보판]
//{
    //[2012.05.27.일][완료!!!]
    void __fastcall Ide_EditorInfoTree_DoubleClick(void);

    //[2012.05.27.일][완료!!!]
    //실제 현재 편집중인 <*.c>, <*.h> 를 대상으로 [실시간 선언정보] 를 수집.
    bool __fastcall Ide_RealTimeInfo(char  *pPathNameExt,
                                     //[2012.05.10.목][추가!!!]
                                     //현재 [편집기] 상 [입력지정자:위치] 정보.
                                     //이는 [실시간 선언정보 수집] 시 [입력지정자] 가 위치한
                                     //함수영역 정보를 자세하게 얻는데 필요.
                                     int    pEditorCaretIndex);

    //[2012.07.21.토][완료!!!]
    void __fastcall Ide_InfoTree_SetInfo(//[2012.05.29.화][추가!!!]
                                         //NULL 이 아닌 경우는 [근접단어정렬] 로 처리.
                                         char  *pPartName_,
                                         //[2012.05.30.수][추가!!!]
                                         //현재 영역 정보.
                                         //<전역영역:-1> 이 아닌 경우는 이 함수 영역안에서
                                         //사용할수 있는(유효한) 정보만 정리한다.
                                         //단, [지역변수] 에만 적용되고 <pPartName_:NULL> 아닌 경우만 유효.
                                         int    pFncRecIndex,
                                         //[2012.06.01.금][추가!!!]
                                         //[다시 그리기] 하는 경우는 <true>.
                                         bool   pRePaint);

    //[2012.06.25.월][완료!!!]
    bool __fastcall Ide_InfoTree_Operator(void);

//}

//[API 자동 추가 관련]
//{
    //[2022.05.24.화][추가]{-------------------------------
    //API 자동 추가 기능이 필요해서 관련 함수 묶음을 제작.
    //}----------------------------------------------------

    //[2022.06.07.화][완료]
    //[반환값] : 구한 [API 목록] 의 문자열 길이.
    int __fastcall API_Get_List(//API 목록 반환(내부에서 동적 생성하므로 (**) 사용).
                                char **rApiList);

    //[2022.05.27.금][완료]
    bool __fastcall API_Add_To_Project(//확장자 없이 "_XXX_" 나 "_XXX" 같은 순수 이름만 사용.
                                       char  *pApiName);

    //[2022.05.27.금][완료]                                   
    bool __fastcall API_Check(//확장자 없이 "_XXX_" 나 "_XXX" 같은 순수 이름만 사용.
                              char  *pName);

    //[2022.06.07.화][완료]
    int __fastcall API_Get_List_H(//API 목록 반환(내부에서 동적 생성하므로 (**) 사용).
                                  char **rApiHList);

    //[2022.06.08.수][완료]                              
    void __fastcall API_Make_DefFile(void);

    //[2022.06.08.수][완료]
    //[반환정보]
    //0      : <pName> 은 API 에서 사용되는 [이름정의] 가 아님.
    //1      : <pName> 은 단 한개의 API 에서 사용되는 [이름정의] 에 해당.
    //2 이상 : <pName> 은 다 수의 API 에서 복수적으로 사용되는 [이름정의] 에 해당.
    int __fastcall API_DefFile_Check(char   *pName,
                                     //<def_file.glst> 에서 <pName> 과 일치하는 [API 이름] 이
                                     //있는 경우 이 목록(1행 단위 목록)을 반환한다(내부적으로 동적 생성).
                                     char  **rApiList);


    //[2022.06.05.일][...]                          
    void __fastcall API_Test(void);

//}

//[API 검색 기능 관련]
//{
    //[2022.06.15.수][추가]{---------------------------------
    //[Tree:API] 에 새로 추가하는 [API 검색 기능] 관련 기술.
    //}------------------------------------------------------

    //[2022.06.20.월][완료]
    void __fastcall Ide_Tree_ApiSrch_Item_Add(struct TREE  *pTreeSrc_,
                                              struct TREE  *pTreeDst_,
                                              int           pSrcItemIndex,
                                              //[형식적용문자열] 지원을 위한 부가 정보.
                                              int           pInfo1,  //[형식적용문자열] 을 적용할 시작위치.
                                              int           pInfo2); //[형식적용문자열] 을 적용할 끝위치.

    //[2022.06.23.목][완료]
    void __fastcall Ide_Tree_ApiSrch_Search(//[2022.06.21.화][추가]
                                            //[한줄편집기] 전체 문자열을 사용하는 경우는 <true>.
                                            //[입력지정자] 까지의 문자열을 사용하는 경우는 <false>.
                                            bool  pFullStrUse);

    //[2022.06.15.수][...]
    void __fastcall Ide_Tree_ApiSrch_Test(void);

//}


//[시험용 함수들]
//{
    //[2009.04.21.화][완료!!!]
    //void __fastcall Ide_Test_Gmrc(void);

    //[2009.07.07.화][처리중!!!]
    //void __fastcall Ide_Test_Flash(void);

    //[2009.09.05.토][완료!!!]
    void __fastcall Ide_Copy_VmosGos_In_OsFolder(void);





    //[2012.05.16.수][완료!!!]
    void __fastcall Ide_Test(void);
    //[2012.06.04.월][완료!!!]
    //void __fastcall Ide_Test(int  pTemp);

    //[2012.05.19.토][완료!!!]
    void __fastcall Ide_Test_TreeItem(int  pX, int  pY, char  *pStr);






    //[2010.02.10.수][완료!!!]
    void __fastcall Ide_GuiPart_Test0(void);

    //[2010.02.10.수][완료!!!]
    void __fastcall Ide_GuiPart_Test1(void);

//}


#endif
