//---------------------------------------------------------------------------

#ifndef editor_editH
#define editor_editH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------


//[database 접근을 위한것]
//{
    #include "database.h"

//}


#include  "font.h"
#include  "MyTypes.h"
#include  "gui_caret.h"
#include  "ide_popup.h"
#include  <ExtCtrls.hpp>

//[2011.06.22.수][추가!!!]
#include  "debug_view.h"

//[2012.03.01.목][추가!!!]
#include  "bookMark_DialogBox.h"

//[2012.09.19.수][추가!!!]
//[검증식 문자열] 작성을 위한 [한줄 편집기] 를 위한것.
#include  "gui_edit.h"


//[정지점]
//{
    //[2007.04.12.목][추가!!!]{----------------------------------
    //기본적으로 문서당 20 개까지 설정할수 있게 만든다.
    //[2009.04.24.금][수정!!!]-----------------------------------
    //실제 [VMOS] 는 내부적으로 12 개 의 [정지점] 을 관리 하므로
    //최대 12 개 이상을 관리할 필요는 없다.
    //최대 한개 문서에서 12 개를 선언하게 되므로.
    //}----------------------------------------------------------

    #define  d_breakpoint_max   12

    struct BREAKPOINT
    {
      //지정된 행번호(BASE: 0) 을 가진다.
      int  line[d_breakpoint_max];

      //설정된 총 수를 갖는다.
      int  count; //(BASE: 0)

    };

//}

struct TEXTINFO
{
  //[2007.01.01.월][생성!!!]{-------------
  //문서마다 다른 변수들을 관리한다.
  //문서 전환시 자동으로 저장되어야 한다.
  //
  //[2012.06.09.토][수정!!!]--------------
  //}-------------------------------------

  //이 관리 정보 대상이 되는 [문서] 이름.
  AnsiString         filename;

  //현재 문서의 byte 단위 크기를 기록한다.
  int                filesize;

  int                font_margin_size;

  int                text_org_x;
  int                text_org_y;

  int                linecount;

  int                linestartindex;
  int                lineendindex;

  int                linetop_startindex;
  int                linetop_linenumber;

  int                caretindex;
  int                caretindexwidth;

  //[단어 범위 정보]
  //{
      //[2012.05.24.목][추가!!!]{-------------------------------------------
      //실시간으로 [입력지정자] 가 위치한 [단어] 의 [시작/끝:위치] 를 관리.
      //}-------------------------------------------------------------------

      int  wordStartIndex;
      int  wordEndIndex;

  //}

  //[수직줄 정보]
  //{
      //[2012.06.09.토][추가!!]{----------------------------------
      //문자열 [수직정렬] 을 위한 [수직줄] 도 개별 문서별로 적용.
      //}---------------------------------------------------------
      
      bool  vLineEn;
      int   vLineX;

  //}

  int                row;
  int                col;

  int                caret_x;
  int                caret_y;

  //[2007.04.05.목][추가!!!]
  bool               changed;

  //[2007.04.12.목][추가!!!]
  //각각 문서의 [정지점] 을 관리한다.
  struct BREAKPOINT  breakpoint;

  //[선택영역정보][2007.02.14.수][수정!!!]
  //{
      struct CARETINFO select_start;
      struct CARETINFO select_end;

  //}

  //[스크롤 정보]
  //{
      //[문서] 의 [스크롤] 정보를 관리한다.
      int  scroll_V_min;
      int  scroll_V_max;
      int  scroll_V_position;
      int  scroll_V_design_size;

      int  scroll_H_min;
      int  scroll_H_max;
      int  scroll_H_position;
      int  scroll_H_design_size;
  //}

  //[2009.03.31.화][추가!!!]
  //[읽기전용] 속성을 가진다(BASE : false).
  bool  readOnly;

  //문서 종류를 구분한다.
  int   fileKind;

  //[검증식 보기판 관련]
  //{
      //[2011.06.26.일][추가!!!]{-------------------------------------------------
      //[검증식 보기판] 은 각 <*.c> 마다 설정이 다를수 있으므로 각 <*.c> 문서마다
      //개별적으로 가지고 있어야 한다.
      //}-------------------------------------------------------------------------

      bool  dbgView_Visible;
      char  dbgView_State;

      //[2011.07.01.금][추가!!!]{----------------------
      //[2/10/16 진수] 중 어떤 형식으로 보여줄 것인가?
      //직접 <2/10/16> 의 정수로 설정한다.
      int   dbgView_ViewKind; //(기본값 : 16)
      //}----------------------------------------------

  //}

  //[문서 용도 종류]
  //{
      //[2022.06.27.월][추가]{-----------------------------------------
      //<Tree:API 검색> 의 [순간보기] 기능 지원을 위한것.
      //문서의 용도를 기록.
      //사용되는 [정의이름] 은 맨 아래의 <_fileUseKind> 선언부를 참조.
      //}--------------------------------------------------------------

      int  fileUseKind;

  //}

};

struct HISTORY
{
  //[2009.05.01.금][생성!!!]{------------------------------------
  //[되돌리기/되살리기] 기능을 위한 관리 구조체.
  //실제는 항목별 관리가 아니라 [되돌림묶음] 의 나열로 관리한다.
  //즉, 일종의 [통신저장소] 처럼 관리 하는 것이다.
  //memmove() 함수로 고속 처리가 가능하므로 관리가 더 간단하다.
  //}------------------------------------------------------------

  //********************
  //[<되돌림묶음> 구조]
  //********************


  //[일반 편집용]{*********************************************************************
  //
  //      4Byte          1Byte        1Byte        XByte         4Byte
  //{ <편집기index> + <'+'/'-'\'> + <'c'/'s'> +<문자열 + '\0'> + <크기> }
  //  |<-------------------<크기>---------------------------->|
  //
  //
  //<크기> 는 처음부터 문자열 끝까지의 Byte 수를 가진다.
  //
  //이는 [되돌림묶음 저장소] 는 일종의 <STACK> 형식으로 사용되므로 거꾸로 뒤부터
  //접근해야하는데, 이 경우 문자열등과 섞여 있으므로 원하는 정보를 찾기 힘들다.
  //따라서, 바로 [되돌림묶음] 의 시작위치를 알기 위하여 <크기> 정보가 반드시 필요하다.
  //
  //일단, [되돌림묶음] 시작 위치만 알면 문자열을 제외하고는 크기가 정해져 있으므로
  //간단하게 정보를 추출하여 사용가능하다.
  //
  //[2009.05.06.수][수정!!!]-----------------------------------------------------------
  //<'c'/'s'> 정보를 추가한다.
  //'c' : 문자(한글, 영문, 기호, CRLF) 인 경우.
  //'s' : 문자열인경우(선택영역이었던 경우나 붙여넣기 잘라내기등으로 수집된 경우).
  //
  //}**********************************************************************************

  
  //[수평이동용][2012.02.03.금][추가!!!]{*******************************************************
  //
  //[2012.02.06.월][중요주의!!!]{-------------------------------------------
  //이 [수평이동] 정보는 이 구조체와는 무관하다.
  //단지 개념적으로 같은 [수정이력] 에 속하기 때문에 이곳에 정리해 주는 것.
  //}-----------------------------------------------------------------------
  //
  //[수평이동] 의 경우는 완전히 다른 구조를 갖는다.
  //[두번째정보] 로 [일반/수평이동] 을 쉽게 구분할수 있다.
  //
  //      4Byte          1Byte          4Byte                  4Byte                    4Byte               4Byte       4Byte
  //{ <편집기index> + <'>'/'<'> + <시작행:시작위치> + <수정전:끝행:시작위치> + <수정후:끝행:시작위치> + <이동공백수> + <크기> }
  //
  //  |<---------------------------------------------<고정크기:21Byte>-------------------------------------------->|     21
  //
  //모든 항목이 고정크기이므로 전체도 역시 [고정크기] 가 된다.
  //
  //[분류정보]
  //(>) : [수평이동:오른쪽] 인 경우.
  //(<) : [수평이동:왼쪽] 인 경우.
  //
  //이 기능은 [Ctrl]+[=>] 나 [Ctrl]+[<=] 를 사용하거나 전용 대화상자를 이용 [선택영역] 을
  //[수평이동] 하는 경우의 [수정이력] 을 위한것.
  //
  //[C언어] 문서 작성시 [들여쓰기] 를 해야 하는 경우 일일히 행단위로 직접 처리하는 경우
  //시간이 많이 걸리므로 이를 위한 새로운 기능에 사용하려는것.
  //이 경우 [수정이력] 에 [우측이동:(>)], [왼측이동:(<)] 의 형식으로 등록되고
  //수 많은 행을 행단위로 [되돌리기/되살리기] 하는 경우는 역시 시간이 많이 걸리므로
  //수정된 행등을 한번에 [되돌리기/되살리기] 하기 위하여 사용된다.
  //
  //이 기능을 위한 별도의 함수가 존재한다.
  //
  //[2012.02.06.월][중요수정!!!]****************************************************************
  //<끝행:시작위치> 를 <수정전:끝행:시작위치> 와 <수정후:끝행:시작위치> 로 두개 정보로 구분.
  //이는 [되돌리기/되살리기] 시에 각각의 정보가 모두 필요하기 때문.
  //
  //<시작행:시작위치> 는 변화가 없으므로 한개 정보만 관리한다.
  //}*******************************************************************************************


  //넉넉하게 4M Byte 정도로 설정한다.
  //순서대로 [되돌림묶음] 을 저장한다.
  #define  d_History_Max   1024*4000
  char   buf[d_History_Max];

  //저장된 총 크기(끝 위치)를 갖는다.
  int    bufCount;

  //[명령묶음] 위치를 갖는다.
  int    packetPtr;


  //[문자열]{-----------------------
  //[편집기] 상의 문자열 시작 위치.
  int    strStartIndex;
  //[편집기] 상의 문자열 끝 위치.
  int    strEndIndex;
  //}-------------------------------

  //[수평이동 관련]
  //{
      //[2012.02.06.월][추가!!!]{-------------------------------------
      //[수평이동] 관련 [수정이력] 정보 수집시 사용.
      //모든 항목이 다 사용되는 것이 아니라 필요에 따라 임시 저장소로
      //선택적으로 사용된다.
      //}-------------------------------------------------------------

      //입력지정자 배치 위치(복구시 사용할 위치).
      //실제는 [시작행:시작위치] 와 같은 값으로 설정.
      //복구시에는 전용 함수를 사용하기 위하여 [편의상] 입력지정자 위치를
      //[시작행:시작위치] 로 설정하는 것.
      int   mCaretIndex;

      //<시작행:시작위치>.
      //이 위치는 수정 전/후 항상 같은 값으로 변하지 않는다.
      int   mStartLineStartIndex;

      //수정전 <끝행:시작위치>.
      int   mEndLineStartIndex;

      //수정후 <끝행:시작위치>.
      int   mEndLineStartIndex_moved;

      //이동할 간격.
      int   mMoveCount;

  //}

};

struct COMMENTBLOCK_INFO_ITEM
{
  //[2009.06.02.화][생성!!!]{-------------------
  //1 개의 {/* ... */} 영역 정보를 관리한다.
  //
  //startIndex : "/*" 시작 위치('/' 문자 위치).
  //endIndex   : "*/" 끝위치('/' 문자 위치).
  //}-------------------------------------------

  int  startIndex;
  int  endIndex;

  //[2012.06.09.토][추가!!!]
  //각 행정보를 기록.
  int  startLine;
  int  endLine;

};

struct COMMENTBLOCK_INFO
{
  //[2009.06.02.화][생성!!!]{---------------------------------
  //편집기 상의 문서의 {/* ... */} 영역 정보를 모두 관리한다.
  //}---------------------------------------------------------

  //[2012.06.09.토][참고!!!]
  //<1024*100> 개 정도도 충분하나 기존 그대로 둔다.
  #define  d_COMMENTBLOCK_INFO_ITEM_Max  1024*100

  struct COMMENTBLOCK_INFO_ITEM   items[d_COMMENTBLOCK_INFO_ITEM_Max];

  //저장된 개수를 관리한다.
  //[2012.06.09.토][중요!!!]{---------------------------------------------------------
  //문서를 처음 열때 <_ROOT_TEXTINFO_Init()> 에서 반드시 <-1> 로 초기화.
  //이는 한번도 사용하지 않았다는 의미.
  //처음 문서를 열때 기존 문서의 [비교정보] 가 없기 때문에 이를 구별하기 위하여 필요.
  //문서 전환시에는 기존 문서 정보와 비교할수 있기 때문에 무관.
  int    itemCount; //(초기값:-1)
  //}---------------------------------------------------------------------------------

};

class Teditor_edit_Form : public TForm
{
__published:	// IDE-managed Components
        void __fastcall FormMouseWheel(TObject *Sender, TShiftState Shift,
          int WheelDelta, TPoint &MousePos, bool &Handled);
        void __fastcall FormMouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
        void __fastcall FormMouseMove(TObject *Sender, TShiftState Shift,
          int X, int Y);
        void __fastcall FormMouseUp(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y);
    void __fastcall FormDblClick(TObject *Sender);
private:	// User declarations
public:		// User declarations

        __fastcall Teditor_edit_Form(TComponent* Owner);

        //[2012.09.20.목][완료!!!]
        __fastcall ~Teditor_edit_Form(void);

        //[database]
        //{
            //[DATABASE] 에 접근하기 위한 포인터.

            //{DATABASE} 의 본체 주소값을 가지는 pointer.
            class DATABASE *_DATABASE_;
            
        //}

        //[서브클래싱]
        //{
            //[2009.04.03.금][중요수정완료!!!]
            //[2018.02.21.수][완료!!!]
            void __fastcall WndProc(Messages::TMessage &Message);

        //}

        //[VAR]
        //{
            //[환경변수]
            //{
                //[2007.10.02.화][추가!!!]
                struct  IDE_OPTION   *_ide_option;

                //[2018.07.24.화][추가!!!]{-------------------------------------------------------------
                //[더블클릭] 처리시작때 <true>, 끝날때 <false>.
                //실제는 [더블클릭] 처리부를 실제 처리하는 <_DbgView_Exe()> 함수의
                //[시작/끝] 을 알려주는 것.
                //
                //[검증식:문자열] 인 경우 [더블클릭] 시 [문자열:전체보기] 를 처리 하기위한것으로
                //실제는 <DebugViewDisplay_Make_DisplayStr()> 함수안에서 [문자열] 을 처리할때 사용된다.
                //
                //[검증식:문자열] 관련 자세한 설명은 [2018.07.24.화] 의 같은 날짜를 검색한다.
                bool  _isDblClick; //(기본값:false).

                //[더블클릭]  됬다면 true.
                //<FormDblClick()> 에서 <_DbgView_Exe()> 를 호출할때 <_DbgView_Exe()> 에서
                //<FormDblClick()> 에서 호출됐는지 확인할때 사용.
                //<_DbgView_Exe()> 에서 확인후 <false> 로 초기화.
                //<_DbgView_Exe()> 함수는 [더블틀릭:문자열 전체 보기] 뿐만 아니라 일반 [검증식 보기]
                //에도 사용되기 때문에 이 둘을 구분 처리하기 위한것.
                //오직 <_DbgView_Exe()> 에서만 <false> 로 해제된다.
                bool  _isDblClicked; //(기본값:false)
                //}-------------------------------------------------------------------------------------

            //}

            //[실제 그리는 영역]{-----------
            Graphics::TBitmap  *_bmp_;

            //편집기 배경 그림.
            Graphics::TBitmap  *_bmp_back_;
            //}-----------------------------

            //[사용글꼴]{--------------
            struct FONTPACK     _font;
            //}------------------------

            //사용 폰트를 적용한 한 행의 높이.
            int                 _line_height;
            //사용 폰트를 적용한 문자 한개의 넓이.
            int                 _word_width;


            //[편집용버퍼]{-------------------------------------------------------------
            //기본 크기로 10M 용량으로 설정한다.
            //옵션으로 조정 할수 있어야 하므로 동적생성할수 있도록 한다.
            char               *_editbuf;
            //실제 [편집] 을 위한 [저장소] 는 한개만 있으므로 아예 충분한 크기를 갖도록
            //하여 이 안에서 수정시에도 [저장소] 의 크기를 변경할 필요가 없게 만든다.
            //10M 정도면 충분할 것이다.
            //}-------------------------------------------------------------------------


            //[내부 임시 처리 저장소]{---------------------------------------------------------------------
            //[2007.04.09.월][추가!!!]
            //_editbuf[] 상에 [문자/문자열] 을 끼워 넣기 위한 [공간만들기] 를 할때
            //for() 문을 사용하는 것은 문서량이 많은 경우는 처리 속도가 느리다.
            //memmove() 함수를 사용할수 있으면 고속 처리가 가능한데, 한개의 저장소로는 불가능하므로
            //_editbuf[] 와 같은 크기의 [저장소] 를 만들어서 memmove() 함수를 사용하여 밀어낼 문자열부분을
            //이곳에 복사하고 -> 문자열을 끼워 넣은후 -> 다시 북사해서 이어주는 방법을 사용한다.
            //전부 memmove() 함수를 사용하게 되므로 고속으로 처리할수 있다.
            char               *_tempbuf;
            //}--------------------------------------------------------------------------------------------


            //[전체배경그림 시작좌표][2007.03.25.일][추가!!!]{------------------------
            //전체 배경그림을 사용하는 경우 이 폼에서 표시할 시작 위치 좌표를 가진다.
            //개별 배경 그림의 경우는 사용되지 않는다.
            int   _bmporg_x, _bmporg_y;
            //}-----------------------------------------------------------------------


            //[2007.03.31.토][추가!!!]{--------------------------------------------------------
            //배경 bmp 경로는 전역 변수로 관리 하는 것이 좋다.(수시로 바뀌는 것이 아니므로...)
            AnsiString  _bmp_path;
            //}--------------------------------------------------------------------------------
            
        //}

        //[내부 사용 개체]
        //{
            //[간편기능목록]
            //{
                //[2007.03.06.화][추가!!!]
                Tide_popup_Form  *_popup_menu_;

                //[동작함수]
                //{
                    //[간편기능항목] 에서 항목이 선택된 경우 호출된다.
                    //[2012.09.19.수][완료!!!]
                    void __fastcall _EVENT_PopupMenu(void);

                //}

                //[2012.09.19.수][완료!!!]
                void __fastcall _PopupMemu_Set(bool  pTeditFdebug);

            //}

        //}

        //[속성]
        //{
            //[2010.02.16.화][추가!!!]{------------------------------------------------------------
            //추가적인 속성을 넣는다.
            //<GXXX> 계열의 [부품] 을 만들면서 더 좋은 것을 만든 경우는 여기에 집어 넣어 보강한다.
            //}------------------------------------------------------------------------------------

            //[검증관련]
            //{
                //[2011.07.04.월][수정!!!]{----------------------------------------------------------
                //원래는 [검증관련] 으로 제한적인 기능만 존재하였으나, [검증식 보기판] 등
                //[검증식] 계산을 위한 새로운 기능의 추가로 더 상세한 정보까지 처리할수 있도록 한다.
                //}----------------------------------------------------------------------------------

                //[VAR]
                //{
                    //[2010.02.16.화][추가!!!]
                    //[특정색] 으로 지정할 행번호.
                    //사용하지 않는 경우는 <-1> 을 할당한다.
                    int  _focusLineNum; //(기본값 : -1)

                    //지정행의 [문자색].
                    int  _focusLineFontColor;

                    //지정행의 [배경색].
                    int  _focusLineBackColor;

                //}

                //[2010.02.14.일][완료!!!]
                void __fastcall _FocusLineNum(int  pLineNum);

                //[2010.02.14.일][완료!!!]
                void __fastcall _FocusLineFontColor(int  pColor);

                //[2010.02.14.일][완료!!!]
                void __fastcall _FocusLineBackColor(int  pColor);

                //[2010.02.14.일][완료!!!]
                void __fastcall _LineArrowColor(int  pColor);

                //[2010.02.14.일][완료!!!]
                void __fastcall _BreakPointColor(int  pColor);

                //[부가함수]
                //{
                    //[2010.02.14.일][완료!!!]
                    void __fastcall _FocusLine_Draw(void);

                //}

            //}

        //}

        //[FUNCTION]
        //{
            void __fastcall _Shape(void);

            //[2012.09.21.금][완료!!!]
            void __fastcall _Resize(void);

            void __fastcall _Draw(void);

            //[2012.03.27.화][완료!!!]
            void __fastcall _EditBuf_Text(void);

            //[2011.06.30.목][완료!!!]
            void __fastcall _EditBuf_LineText(int   pLineNumber,
                                              //[지정행] 을 그려줄경우는 true.
                                              bool  pFocusLineEn);

            //[2011.06.29.수][완료!!!]
            void __fastcall _EditBuf_LineTextX(//다시 그릴 시작 행 번호.
                                               int   pStartLineNumber,
                                               //다시 그릴 행 수.
                                               int   pLineCount,
                                               //[2011.06.29.수][추가!!!]
                                               //[검증보기판] 을 보여주는 경우는 <true>.
                                               bool  pDbgViewEn,
                                               //[지정행] 을 그려줄경우는 true.
                                               bool  pFocusLineEn);

            //[2012.03.27.화][완료!!!]
            void __fastcall _Scroll_Set(void);

            //[2006.11.29.수][완료!!!]
            void __fastcall _Scroll_Resize(void);

            //[2006.12.17.일][완료!!!]
            void __fastcall _EditBuf_Clear(void);

            //[2011.06.06.월][완료!!!]
            bool __fastcall _EditFile_SetKind(char  *pFileName);

            //[2012.03.01.목][완료!!!]
            //[2019.03.08.금][완료]
            void __fastcall _EDITFILE_Open(AnsiString  pFILEname);

            //[2012.03.01.목][완료!!!]
            void __fastcall _EDITFILE_ReOpen(AnsiString  pFILEname);

            //[2009.05.05.화][완료!!!]
            void __fastcall _EDITFILE_TempDelete(char  *pFileFullName);

            //[2012.03.01.목][완료!!!]
            void __fastcall _EDITFILE_SaveNowFile_inTEMPfile(void);

            //[2012.03.01.목][완료!!!]
            void __fastcall _EDITFILE_SaveNowEditFile(void);

            //[2012.03.01.목][완료!!!]
            void __fastcall _EDITFILE_SaveAllFile(void);

            //[2007.04.02.월][완료!!!]
            void __fastcall _EDITFILE_SaveAsNowEditFile(void);

            //[2010.03.21.일][완료!!!]
            void __fastcall _EDITFILE_NewFile(void);

            //[2007.03.31.토][완료!!!]
            void __fastcall _BACKBMP_BrightEnable(bool  pENABLE);
            
        //}

        //[편집관련]
        //{
            //[VAR]
            //{
                //[기준값]
                //{
                    //[한글/영문] 의 각각의 대표 문자의 [폭] 값을 가진다.
                    //현재 [편집기] 에는 고정폭 글꼴만 사용되므로 [한글/영문] 각각 한개의
                    //[문자폭] 은 다른 처리를 위하여 가지고 있어야 한다.
                    //이 값은 [글꼴] 을 생성할때 한번만 구해놓으면 된다.
                    int  _font_kor_width;
                    int  _font_eng_width;
                //}

                //[가상원점]
                //{
                    //실제 문서가 출력되는 문서 영역의 원점이 된다.
                    //[입력지정자] 위치, [행/열] 표시 등도 전부 이 원점 좌표를 기준으로 한다.
                    int  _text_org_x;
                    int  _text_org_y;
                //}

                //[관리]
                //{
                    //[문서] 의 총 행수를 기록한다.
                    //산출하는데 시간이 많이 거리므로 항상 추척 관리 해 놓아야 한다.
                    //행이 바뀌는 [문서수정] 의 경우(Enter/Del/Back 키 와 잘라내기, 붙이기) 는
                    //즉시 행수를 계속 추척하여 정확한 값을 기록해 놓아야 한다.
                    //또한, 문서를 여는 경우는 기본적으로 값을 기록해 놓는다.
                    //단, [행 수] 는 1 부터 의미가 있다. ([행 번호] 는 0 부터 의미가 있으므로 혼동하지 않아야 한다.)
                    //완전 공백이라도 [입력지정자] 가 위치해야 하므로 최소한 한개의 행은 있어야한다.
                    int  _linecount; //(BASE : 1)

                    //현재 행의 _editbuf[] 상의 시작 index(행의 첫 문자 위치) 를 관리한다.
                    //어떤 상황에서도 가장 먼저 수정되 있어야 하고 항상 정확한 값을 가지고 있어야 한다.
                    int  _linestartindex; //(BASE : 0)

                    //_linestartindex 와는 달리 항상 추적할 필요는 없고 필요할때 사용된다.
                    //현재 행의 마지막 문자 위치 + 1 의 위치를 갖는다.
                    //일반적인 경우는 행의 끝의 CRLF 의 CR(0x0d) 의 위치가 되지만 마지막 행이
                    //CRLF 로 끝나지 않은 경우도 있으므로 일반적으로 마지막 문자 위치 + 1 의 위치로
                    //정의 하면 무난하다.
                    int  _lineendindex; //(BASE : 0)

                    //현재 _editbuf[] 에 있는 문서의 byte 단위 크기.(문자열의 경우 '\0' 까지 포함한 크기다.)
                    //FILE_Open_inBUF() 함수로 파일을 여는 경우는 문자열의 경우 '\0' 까지 크기에 포함된다.
                    int  _filesize;

                    //[보이는 가장 윗행]
                    //{
                        //일반적으로 [스크롤] 되는 경우 윗행이 바뀌게 되므로 이때 수정한다.

                        //[편집기] 창에서 보이는 가장 윗행의 [행 번호] 를 관리한다.
                        //[행 번호] 는 0 부터 유효하다.
                        int  _linetop_linenumber; //(BASE : 0)

                        //[편집기] 창에서 보이는 가장 윗행의 시작 index 를 관리한다.
                        int  _linetop_startindex; //(BASE : 0)
                    //}

                    //[중요!!!]
                    //{
                        //------------------------------------------------------------------------
                        //_editbuf[] 상의 현재 [입력지정자] 가 위치한 문자의 index 를 갖는다.
                        //가장 기본이 되는 값이며, 다른 모든 연산의 기준이 되므로 언제나 추적하여
                        //정확한 값을 가지고 있어야 한다.
                        int  _caretindex; //(BASE : 0)

                        //_caretindex 위치의 실제 표시상의 행 처음부터의 [폭] 을 가진다.
                        int  _caretindexwidth; //(BASE : 0)
                        //------------------------------------------------------------------------
                    //}

                    //[단어 구간 정보]
                    //{
                        //[2012.05.24.목][추가!!!]{---------------------------------------------------
                        //[입력지정자] 가 위치한 [단어] 의 [시작/끝:위치] 를 실시간 관리.
                        //[문서] 가 실제적으로 수정되는 부분에서 <_caretindex> 가 확정된후
                        //이 위치의 [단어:시작/끝:위치] 를 구해서 보관.
                        //
                        //단순한 [입력지정자] 의 [위치이동] 시 정보는 <_EDIT_CaretPos()> 함수에서
                        //획득하고, [문서 수정] 등으로 단어가 변경되거나 하는 모든 경우는
                        //<_filesize> 가 변경되는 [함수] 들에서 처리된다.
                        //
                        //이는 [입력지정자] 위치는 고정인데 [Key:Del] 로 삭제되는 경우는
                        //<_caretindex> 가 먼저 확정되고, 나중에 위치한 단어가 수정될수 있으므로
                        //반드시 [수정] 된 후에 정보가 수집되어야 하기 때문이다.
                        //
                        //<_filesize> 가 변경되는 [함수] 들은 현재 아래와 같다.
                        //<_EDITBUF_MOONJA_Delete()>, <_SELECT_Delete()>, <_EDITBUF_MOONJA_Insert()>,
                        //<_EditBuf_LineStr_Insert()>, <_EditBuf_LineStr_Delete()>, <_EDIT_Paste()>,
                        //<History_Insert()>
                        //}---------------------------------------------------------------------------

                        int  _wordStartIndex; //(기본값:0)
                        int  _wordEndIndex;   //(기본값:0)

                    //}

                    //[행/열]
                    //{
                        //-----------------------------------------------------------------------------
                        //[입력지정자] 의 상/하 이동시에는 이 [열] 정보를 사용해서 위치를 찾아야 한다.
                        //이 정보는 editor_info_Form 의 해당 위치에 즉시 표시 될수 있어야 한다.
                        int  _row;
                        int  _col;
                        //-----------------------------------------------------------------------------
                    //}

                    //[수정구분]
                    //{
                        //[2007.04.05.목][추가!!!]
                        //현재 문서가 수정된 경우는 true 로 설정한다.
                        bool  _changed; //(BASE : false)

                    //}

                    //[읽기전용]
                    //{
                        //[2009.03.31.화][추가!!!]
                        //읽기 전용 속성을 저장한다(BASE : false).
                        bool  _readOnly;

                        //[2009.04.25.토][추가!!!]{---------------------------------------------------
                        //위의 <_readOnly> 와는 관계 없이 이 속성이 true 인 경우는
                        //현재 열려 있는 모든 문서는 [수정불가] 상태가 된다.
                        //이는 [개발검증] 시에만 true 로 설정되며, 일일히 문서의 속성을 관리하지 않고
                        //전환 과정을 단순화 시키기 위한 것이다.
                        bool  _readOnlyAll;
                        //}---------------------------------------------------------------------------

                    //}

                    //[문서종류]
                    //{
                        //[2009.03.31.화][추가!!!]{------------------------------------------------
                        //문서 종류를 구분한다.
                        //이는 문서를 읽어 들이면서 확장자를 검사하는 것만으로 간단하게 알수 있다.
                        //}------------------------------------------------------------------------

                        int   _fileKind;

                        #define   d_Editor_FileKind_c        1  //<*.c   > 문서.
                        #define   d_Editor_FileKind_gasm     2  //<*.gasm> 문서.
                        #define   d_Editor_FileKind_gcsm     3  //<*.gcsm> 문서.

                        //[2009.05.28.목][추가!!!]
                        //<*.c> 와 같은 [색동문자] 를 적용받는다.
                        #define   d_Editor_FileKind_gtxt     4  //<*.gtxt> 문서.

                        //[2011.05.27.금][추가!!!]{-----------------------------------------
                        //<*.gasm> 과 유사하지만, 전용 처리를 한다.
                        #define   d_Editor_FileKind_obj      5   //<*.gobj>, <*.glib> 문서.
                        //}-----------------------------------------------------------------

                        //[2011.06.06.월][추가!!!]{-------------------------------
                        //<*.gtmp> 를 처리한다.
                        #define   d_Editor_FileKind_gtmp     6   //<*.gtmp> 문서.
                        //}-------------------------------------------------------

                        #define   d_Editor_FileKind_default  0  //<*.txt > 등 기본 문서.

                    //}

                //}

                //[입력지정자]
                //{
                    //-------------------------------------------------------
                    //개체를 갖는다.
                    Tgui_caret_Form  *_caret;

                    //표시 위치.
                    //(_text_x, _text_y) 위치를 기준으로 한다.
                    //이 값은 offset 좌표 이므로 절대로 "음수" 가 될수 없다.
                    int  _caret_x; //(BASE : 0)
                    int  _caret_y; //(BASE : 0)
                    //-------------------------------------------------------
                //}

                //문자한개를 저장한다.(한글/영문 일수 있으므로 2byte 값을 가지게 한다.)
                short  _moonja;
                bool   _ime_TkorFeng; //(BASE : false)

                //[2008.02.13.수][추가!!!]{-------------------------------------------------------------
                //한글 조함중 영문등이 입력되면 한글 조합이 완성되는데 이때 입력한 기호등도
                //출력해 주어야 하는데 이때 한글 조합을 깬 문자를 가진다.
                //예) 한글 조함중 '2' 를 입력하여 조합이 깨졌다면 '2' 문자가 들어 있어야 한다.
                //이를 위하여 WM_IME_COMPOSITION 처리부에서 ImmGetCompositionString() 함수를
                //사용하여 "한2" 으로 문자열을 읽어서 처리할수 있다.
                //중요힌것은 '2' 문자를 얻는 것이 중요한다. '한' 은 WParam 으로 쉽게 얻을수 있으므로...

                HIMC  _imeHimc;         //IME 핸들.
                char  _imeBuffer[1024]; //ime 버퍼에 저장된 문자열을 읽을때 사용한다.
                int   _imeBufcount;
                //}-------------------------------------------------------------------------------------

                //_EditBuf_Text() 함수내부를 처리할지를 결정한다.
                //이는 [스크롤] 시에 중복되어 깜박이는 것을 방지하기 위한 것이다.
                bool  _editbuf_text_on;  //(BASE : true)
                bool  _edit_caretpos_on; //(BASE : true)
                //[2007.03.08.목][추가!!!]
                bool  _edit_paste_ing;   //(BASE : true)
                //[2007.03.09.금][추가!!!]
                bool  _editbuf_text_no;  //(BASE : false)

                //[함수 유무효 구분자]
                //{
                    //[2012.03.27.화][추가!!!]--------------------------------
                    //[마법사:대화상자] 의 [미리보기] 기능을 지원하기 위한것.
                    //}-------------------------------------------------------

                    //[2012.03.27.화][추가!!!]
                    bool  _no_Editbuf_Text; //(기본값:false).

                    //[2012.03.27.화][추가!!!]
                    bool  _no_Scroll_Set; //(기본값:false).

                //}

                //[2009.05.07.목][추가!!!]{-------------------------------------------------------------
                //_EDIT_CaretPos() 함수 안에서 [선택영역] 해제시 이 함수를 호출하게 되는데
                //[되돌림/되살림] 처리시나 [교체] 등에서 [선택영역] 을 많이 사용하게 되어
                //중복 처리로 인한 시간 손실이 많다.
                //따라서, 이를 위하여 이런 경우 이 함수를 동작 시키지 않도록 하기 위한 변수를 추가한다.
                bool  _editBuf_Text_No_Select;
                //}-------------------------------------------------------------------------------------

                //[블록지정][2007.01.22.월]
                //{
                    //--------------------------------------------------------------------------
                    //[문서] 가 블록으로 지정되는 경우 관련 정보를 저장한다.
                    //이 정보는 [문서] 마다 전부 독립적인 것이므로 [문서] 마다 별도로 관리한다.
                    //각각 -1 로 초기화 하는데 이것은 현재 [선택영역] 이 없다는 것을 말한다.
                    //둘중 하나라도 -1 인 경우는 [선택영역이 없는 것으로 본다.]

                    //[선택영역] 을 시작하는 문자의 시작위치(시작 [입력지정자] 위치).
                    struct CARETINFO  _select_start;

                    //[선택영역] 이 끝나는 문자 다음 문자의 위치(끝 [입력지정자] 위치).
                    //끝문자의 시작 위치가 아니다.
                    //이는 [선택영역] 문자열의 길이를 쉽게 계산하기 위한 것이다.
                    //한글의 경우 2 byte 문자이므로 첫 문자인 경우 계산이 복잡해지기 때문이다.
                    //즉, 이 위치의 문자부터는 일반출력을 적용해 주어야  한다.
                    struct CARETINFO  _select_end;

                    //[주의!!!][2007.02.14.수][추가!!!]
                    //이 값은 [선택영역] 을 설정해 가는 방향에 따라서 꼭 "start < end" 의
                    //관계가 성립되지는 않으므로 반드시 _SELECT_Get_StartEndIndex() 함수로
                    //크기 순서대로 정리한 값을 사용해야 한다.
                    //--------------------------------------------------------------------------

                    //[부가정보]
                    //{
                        //[선택영역] 을 형성하는 과정에서 사용된다.(만들때는 위의 두개 정보만 있으면 된다.)
                        //[마우스] 로 집어끌기를 하여 [선택영역] 을 형성할때, [shift + 키] 를 사용하여
                        //[선택영역] 을 형성해 갈때 현재 이미 선택영역이 형성상태임을 알려준다.
                        //true  : 현재 [선택영역] 형성이 시작된 상태다.
                        //false : [선택영역] 이 해제된 상태.
                        bool  _select_ing;

                    //}

                //}

                //[2007.02.09.금][추가!!!]
                //[마우스] 가 [눌린상태(true)] 라는 것을 알린다.
                bool  _mouse_down; //(BASE : false)

                //[2007.02.10.토][추가!!!]
                //<shift-key> 가 눌린 상태인 경우는 true.
                bool  _shift_down; //(BASE : false)

                //[2007.02.11.일][추가!!!]
                //현재 [줄이동] 중인 경우는 true.
                bool  _scroll_ing; //(BASE : false)

            //}

            //[<Ctrl + Alt> + 마우스 이동으로 탐색]
            //{
                //[2010.08.28.토][추가!!!]{------------------------------------------------------
                //마우스 휠이 없는 경우도 마우스 움직임만을 이용한 탐색이 가능하도록
                //<Ctrl + Alt> 키와 조합된 탐색 기능을 제공한다.
                //[<Ctrl + Alt> + 마우스 상/하]  이동의 경우 처음 <Ctrl> 을 누른 위치보다 위라면
                //위쪽으로 줄이동 되고, <Ctrl> 을 누른 위치보다 아래라면 아래로 줄이동된다.
                //실제 사용해 보니, 대단히 편리했다.
                //가까운 거리를 탐색하는데는 [굴림] 보다 춸씬더 편리했다.
                //}------------------------------------------------------------------------------

                //현재 [편집기] 상의 [화면지정자] Y 위치를 계속 가진다.
                //이는 Ctrl 이 눌렸을때의 위치를 정확하게 알기 위한 것이다.
                int   _mousePosY; //계속 관리된다.

                //<Ctrl> 이 눌린 순간의 [편집기] 상의 Y 위치를 가진다.
                int   _mousePosY_Ctrl;

                //[2011.05.06.금][추가!!!]{---------------------------------------------------------
                //<Ctrl + Alt> 인 경우는 <true> 로 설정하고, 그 밖의 경우는 <false> 로 설정한다.
                //이 변수는 [줄이동 각 영역] 을 구분하는 [점선 을 [편집기] 줄이동시 그려주기 위하여
                //반드시 필요하다.
                //실제 [점선] 은 [편집기] 의 내용이 다시 그려질때 마지막으로 그려지기 때문이다.
                bool  _mouseCtrlAlt;
                //}---------------------------------------------------------------------------------

            //}

            //[기준세로줄]
            //{
                //[2012.06.08.금][추가!!!]{------------------------------------
                //편집시 "{", "}" 위치를 맟추기 위한 세로줄을 보여주기 위한것.
                //일종의 정렬을 위한 [기준선] 을 보여주는 것.
                //
                //[편집기] 문서 좌표와 동기되어 [수평줄이동] 시 동기 이동한다.
                //
                //[중요!!!]----------------------------------------------------
                //[문서] 마다 개별 설정 가능하다.
                //}------------------------------------------------------------

                //[세로줄] 유효/무효.
                bool  _vLineEn; //(기본값:false)

                //[세로줄] 편집기 상 X 좌표.
                //[수평줄이동] 시 같이 이동한다.
                //기본적으로는 <Ctrl+'G'> 누를때 [입력지정자] X 좌표가 된다.

                //실제는 <_Edit_Col()> 에서 항상 정확한 값으로 구해지는
                //<_caretindexwidth> 위치로 설정된다.
                int   _vLineX; //(기본값: -1)

            //}

            //[문서 정보 관리]
            //{
                //-------------------------------------------------------
                //실제 관리하는 문서수 + 1 로 크기를 설정해 주어야 한다.
                #define  d_TEXTINFO_max    41
                struct TEXTINFO  _textinfo[d_TEXTINFO_max];

                //현재 관리되는 [문서] 의 총수.
                int              _textinfo_count; //(BASE : 0)

                //현재 표시된 [문서] 의 index;
                int              _textinfo_index; //(BASE : -1)

                //[2007.03.28.수][추가!!!]
                int              _newfile_count;  //(BASE : 0)
                //-------------------------------------------------------

                //[총 관리 문서수 정의]
                //{
                    //[2010.03.21.일][중요추가!!!]{-------------------------------------------
                    //실제 열수 있는 문서 총수를 정의한다.
                    //이 이상의 문서는 열수 없도록 해야 오류가 발생하지 않는다.
                    //다른 곳에서 이 정보에 접근 할수 있도록 변수로 정의해 준다.
                    //실제 <d_TEXTINFO_max> 정의값보다 -1 한 값을 사용해야 한다.
                    //맨 뒤의 1 개의 여분을 두어야 하는 것이다.
                    //이는 <_TEXTINFO_Delete()> 함수안에서 뒤의 것을 앞으로 복사하는 방식으로
                    //빈곳을 매꾸고 있으므로 발생하는 문제로 만드시 맨 뒤에 1 개의 여분을
                    //두어야 한다.
                    //}-----------------------------------------------------------------------

                    int  _textMaxCount;

                //}

            //}

            //[함수]
            //{
                //[2012.06.09.토][완료!!!]
                void __fastcall _EDIT_Init(void);

                //[2007.10.09.화][완료!!!]
                void __fastcall _EDIT_TextOut(char  pText[]);

                //[2006.12.19.화][완료!!!]
                bool __fastcall _EDIT_IS_ImeHangul(void);

                //[2006.12.19.화][완료!!!]
                void __fastcall _EDIT_Change_ImeMode(void);

                //[2009.06.02.화][완료!!!]
                void __fastcall _EDIT_Changed(bool  pALWAYS,
                                              bool  pCHANGED);

                //[2007.04.06.금][완료!!!]
                bool __fastcall _EDIT_SaveCheckChanged_whenCloseThis(int  pLISTindex);

                //[2007.04.06.금][완료!!!]
                bool __fastcall _EDIT_SaveCheckChanged_whenCloseAll(void);

                //[2006.12.23.토][완료!!!]
                void __fastcall _EDIT_Get_TextOrigin(void);

                //[2012.06.09.토][완료!!!]
                void __fastcall _EDIT_CaretPos(int  pX,
                                               int  pY);

                //[2009.05.25.월][완료!!!]
                void __fastcall _Edit_Col(int   pCaretindex);

                //[2006.12.27.수][완료!!!]
                void __fastcall _EDIT_Get_Kor_Eng_Moonja_Width(void);

                //[2012.04.15.일][완료!!!]
                void __fastcall _EDIT_V_Scroll(void);

                //[2012.04.15.일][완료!!!]
                void __fastcall _EDIT_H_Scroll(void);

                //[2007.03.15.목][완료!!!]
                void __fastcall _KEY_PageUp(void);

                //[2007.03.15.목][완료!!!]
                void __fastcall _KEY_PageDown(void);

                //[2006.12.27.수][완료!!!]
                void __fastcall _CARETINDEX_CaretIndexWidth(int   pLINEstartINDEX,
                                                            int   pCARETINDEX,
                                                            int  *rCARETINDEXwidth,
                                                            int  *rMOONJAcount);

                //[2006.12.27.수][완료!!!]
                void __fastcall _CARETINDEXWIDTH_CaretIndex(int   pLINEstartINDEX,
                                                            int   pLINEendINDEX,
                                                            int  *prCARETINDEXwidth,
                                                            int  *rCARETINDEX,
                                                            int  *rMOONJAcount);

                //[2006.12.27.수][완료!!!]
                void __fastcall _CARETINDEX_MoveLeft(int   pLINEstartINDEX,
                                                     int  *prCARETINDEX);

                //[2006.12.27.수][완료!!!]
                void __fastcall _CARETINDEX_MoveRight(int   pLINEendINDEX,
                                                      int  *prCARETINDEX);

                //[2007.03.01.목][완료!!!]
                void __fastcall _MOUSEDOWN_Get_LineStartIndex(int   pLINEnumber,
                                                              int  *pLINEstartindex);

                //[2007.03.19.월][완료!!!]
                bool __fastcall _CARETPOS_MouseDown(int  pMOUSEdownX,
                                                    int  pMOUSEdownY);

                //[2012.06.09.토][완료!!!]
                void __fastcall _ROOT_TEXTINFO_Init(void);

                //[2012.06.09.토][완료!!!]
                void __fastcall _TEXTINFO_Format(struct TEXTINFO  *pTEXTINFO);

                //[2007.01.03.수][완료!!!]
                void __fastcall _TEXTINFO_Init(void);

                //[2007.01.01.월][완료!!!]
                void __fastcall _TEXTINFO_Add(struct TEXTINFO  *pTEXTINFO);

                //[2007.01.01.월][완료!!!]
                void __fastcall _TEXTINFO_Delete(int  pDELETEindex);

                //[2009.05.21.ahr][완료!!!]
                int __fastcall _TEXTINFO_GetIndex_withFILEname(AnsiString  pFILEname);

                //[2022.06.27.월][완료]
                int __fastcall _TEXTINFO_GetIndex_withFileUseKind(int  pFileUseKind);

                //[2022.06.27.월][완료]
                int __fastcall _TEXTINFO_Set_FileUseKind(//<TEXTINFO[]> 에서 기록 대상 문서 [전체경로이름확장자].
                                                         char  *pFilePathNameExt,
                                                         //기록할 문서 용도.
                                                         int    pFileUseKind);

                //[2012.06.09.토][완료!!!]
                void __fastcall _TEXTINFO_Backup(int  pINDEX);

                //[2012.06.09.토][완료!!!]
                void __fastcall _TEXTINFO_Restore(int  pINDEX);

                //[2007.04.10.화][완료!!!]
                bool __fastcall _TEXTINFO_IsChangedOne(void);

                //[2007.03.13.화][완료!!!]
                void __fastcall _KEY_Up(bool  pETCcontrol);

                //[2007.03.13.화][완료!!!]
                void __fastcall _KEY_Down(bool  pETCcontrol);

                //[2007.03.14.수][완료!!!]
                void __fastcall _KEY_Left(bool  pETCcontrol);

                //[2007.03.14.수][완료!!!]
                void __fastcall _KEY_Right(bool  pETCcontrol,
                                           bool  pSELECTtrue);

                //[2007.03.14.수][완료!!!]
                void __fastcall _KEY_Home(bool  pETCcontrol);

                //[2007.03.14.수][완료!!!]
                void __fastcall _KEY_End(bool  pETCcontrol);

                //[2009.05.09.토][완료!!!]
                void __fastcall _KEY_Enter(//[수정이력] 을 적용하는 경우는 true.
                                           bool  pHistoryAdd);

                //[2009.05.06.수][완료!!!]
                void __fastcall _KEY_Delete(//[수정이력] 을 적용하는 경우는 true.
                                            bool  pHistoryAdd);

                //[2009.05.08.금][완료!!!]
                void __fastcall _KEY_Backspace(void);

                //[2012.06.01.금][완료!!!]
                bool __fastcall _EDITBUF_MOONJA_Delete(int    pDELETEindex,
                                                       bool  *rIScrlf);

                //[2009.05.06.수][완료!!!]
                bool __fastcall _SELECT_Get_StartEndIndex(struct CARETINFO  *rSELECTstart,
                                                          struct CARETINFO  *rSELECTend);

                //[2012.06.01.금][완료!!!]
                bool __fastcall _SELECT_Delete(struct CARETINFO  *rSELECTstart,
                                               int               *rCRLFcount);

                //[2011.06.24.금][완료!!!]
                int __fastcall _SELECT_StartLineNum(void);

                //[2012.06.01.금][완료!!!]
                void __fastcall _EDITBUF_MOONJA_Insert(int    pINSERTindex,
                                                       short  pCODE);

                //[2012.06.01.금][완료!!!]
                void __fastcall _EditBuf_LineStr_Insert(int    pInsertIndex,
                                                        char  *pStr);

                //[2012.06.01.금][완료!!!]
                bool __fastcall _EditBuf_LineStr_Delete(//[삭제] 할 위치.
                                                        int  pDelIndex,
                                                        //[삭제] 할 크기.
                                                        int  pDelSize);
				//[2009.05.06.수][완료!!!]
				//[2018.02.14.수][완료!!!]
				void __fastcall _CARET_MOONJA_Insert(short  pCODE,
                                                     //[수정이력] 을 적용하는 경우는 true.
                                                     bool   pHistoryAdd);

                //[2007.03.19.월][완료!!!]
                void __fastcall _SELECTSCROLL_Up(int  pMOUSEy);

                //[2007.03.19.월][완료!!!]
                void __fastcall _SELECTSCROLL_Down(int  pMOUSEy);

                //[2007.03.19.월][완료!!!]
                void __fastcall _SELECTSCROLL_Left(int  pMOUSEx);

                //[2007.03.19.월][완료!!!]
                void __fastcall _SELECTSCROLL_Right(int  pMOUSEx);

                //[2012.06.09.토][완료!!!]
                void __fastcall _EDIT_SelectDelete(void);

                //[2012.06.01.금][완료!!!]
                void __fastcall _EDIT_Paste(char *pPASTEstr,
                                            //[2009.05.07.목][추가!!!]
                                            //다시그리는 경우는 true.
                                            bool   pReDraw);

                //[2007.03.21.수][완료!!!]
                void __fastcall _EDIT_SelectAll(void);

                //[2009.05.08.금][완료!!!]
                void __fastcall _Edit_SelectX(//선택 시작 위치.
                                              int    pSelStartIndex,
                                              //선택 끝 위치.
                                              int    pSelEndIndex,
                                              //true 인경우는 항상 [선택 영역] 을 항상 보이는 위치에 있게 한다.
                                              bool   pSelView,
                                              //[선택영역] 의 [시작행] 을 반환한다.
                                              int   *rStartLineNumber,
                                              //[2009.05.07.목][추가!!!]
                                              //다시그리는 경우는 true.
                                              bool   pReDraw);

                //[2022.05.30.월][완료]                              
                void __fastcall _Edit_Select_Off(void);

                //[2009.05.08.금][완료!!!]
                void __fastcall _Mouse_WordSelect(void);


                //[2011.07.19.화][완료!!!]
                void __fastcall _Select_CaretIndex(//<_select_start/_select_end> 만 사용한다.
                                                   struct CARETINFO  *pSelectX_CaretInfo,
                                                   //[입력지정자] 위치.
                                                   int                pCaretIndex);

            //}

            //[문자열처리]
            //{
                //한줄만 관리 하면 되므로 1024 개 단어만 관리하면 충분하다.
                #define  d_WORDCONFIG_max   1024
                struct WORDCONFIG  _wordconfig[d_WORDCONFIG_max];
                int                _wordconfig_count;

                //[2011.05.11.수][완료!!!]
                void __fastcall _WORD_LineGet(char  *pSTR,
                                              int    pINDEX,
                                              char   rWORD[],
                                              int   *rWORDindex,
                                              int   *rWORDlength);

                //[2011.06.06.월][완료!!!]
                void __fastcall _MOONJACONFIG_LineGet(int   pLINEstartindex,
                                                      int  *rLineEndIndex);

                //[2018.05.01.화][완료!!!]
                void __fastcall _MoonjaConfig_LineGet_C(int   pLineStartIndex,
                                                        int  *rLineEndIndex);

                //[2011.06.06.월][완료!!!]
                void __fastcall _MoonjaConfig_LineGet_Gasm(int   pLineStartIndex,
                                                           int  *rLineEndIndex);

                //[2009.05.09.토][완료!!!]
                void __fastcall _MoonjaConfig_LineGet_Gcsm(int   pLineStartIndex,
                                                           int  *rLineEndIndex);

                //[2011.06.02.목][완료!!!]
                void __fastcall _MoonjaConfig_LineGet_Obj(int   pLineStartIndex,
                                                          int  *rLineEndIndex);

                //[2011.06.06.월][완료!!!]
                void __fastcall _MoonjaConfig_LineGet_Gtmp(int   pLineStartIndex,
                                                           int  *rLineEndIndex);

                //[2009.05.09.토][완료!!!]
                void __fastcall _MoonjaConfig_LineGet_Default(int   pLineStartIndex,
                                                              int  *rLineEndIndex);


                //[/* ... */ 주석문 관련]
                //{
                    //[VAR]
                    //{
                        //[2009.06.02.화][추가!!!]{-----------
                        //{/* ... */} 주석문 정보를 관리한다.
                        //}-----------------------------------

                        struct COMMENTBLOCK_INFO  _cmtBlockInfo;

                    //}

                    //[2012.05.09.수][완료!!!][중요수정!!!]
                    //[묶음주석] 이 변경되어 전체를 <_EditBuf_Text()> 로 다시 그릴
                    //필요가 있는 경우는 <true> 를 반환.
                    //[2012.06.14.목][완료!!!]
                    //[행] 정보가 수정된 것이 있다면 전체 다시 그리기.
                    //[2012.06.19.화][완료!!!]
                    bool __fastcall _CommentBlock_Info(//부분처리인 경우는 <true>.
                                                       bool  pPartInfo);

                    //[2009.06.02.화][완료!!!]
                    bool __fastcall _CommentBlock_Check_Word(int  pWordIndex);

                    //[2009.06.02.화][완료!!!]
                    //bool __fastcall _CommentBlock_SymbolCheck(char  *pStr,
                    //                                          //<pStr: NULL> 인 경우만 유효하다.
                    //                                          //문자열을 사용하는 경우는 그냥 0 을 준다(아무것이나 무관하다).
                    //                                          int    pStartIndex,
                    //                                          int    pEndIndex);

                //}
                
                //[2019.01.08.화][완료!!!]
                bool __fastcall _EDITBUF_LINE_Out(int   pX,
                                                  int   pY,
                                                  int   pLINEstartindex,
                                                  int  *rLINEendindex);

                //[2012.06.09.토][완료!!!]
                bool __fastcall _EDITBUF_STRING_Out(int  pX,
                                                    int  pY,
                                                    int  pLINEstartindex);

                //[2009.05.09.토][완료!!!]
                bool __fastcall _CARET_ViewAlways(//실제 적용하지 않고 확인만 하는 경우는 true.
                                                  bool  pSimulate);

                //[2009.05.08.금][완료!!!]
                bool __fastcall _Caret_ViewAlways_Middle(//항상 위쪽도 중간위 위치.
                                                         bool  pAlwaysTopMiddle,
                                                         //항상 아래쪽도 중간에 위치.
                                                         bool  pAlwaysBottomMiddle);

            //}

            //[클립보드관련]
            //{
                //[2007.03.06.화][완료!!!]
                bool __fastcall _CLIPBOARD_IsText(void);

                //[2007.03.07.수][완료!!!]
                void __fastcall _CLIPBOARD_Copy(void);

                //[2012.06.11.월][완료!!!]
                void __fastcall _CLIPBOARD_Cut(void);

                //[2012.06.11.월][완료!!!]
                //[2019.03.08.금][완료]
                void __fastcall _CLIPBOARD_Paste(void);

            //}

        //}

        //[묶음수평이동]
        //{
            //[2012.01.28.토][추가!!!]{-------------------------------------
            //[Ctrl + =>] 또는 [Ctrl + =>] 또는 전용 대화상자로 실행되는
            //선택영역에 포함되는 모든 행의 [수평이동] 에 대한 부분을 기술.
            //}-------------------------------------------------------------

            //[2012.02.07.화][완료!!!]
            bool __fastcall _LineBlock_MoveRL_Right(//추가할 공백수.
                                                    int  pSpaceCount);

            //[2012.03.03.토][완료!!!]
            bool __fastcall _LineBlock_MoveRL_Left(//삭제할 공백수.
                                                   int  pSpaceCount);

            //[수정이력 관련]
            //{
                //[2012.02.04.토][완료!!!]
                void __fastcall History_MoveRL_Right(//설정할 [입력지정자] 위치.
                                                     int  pCaretIndex,
                                                     //처리할 [시작행 시작위치].
                                                     int  pStartLineStartIndex,
                                                     //처리할 [끝행 시작위치].
                                                     int  pEndLineStartIndex,
                                                     //이동할 공백수.
                                                     int  pSpaceCount);

                //[2012.02.05.일][완료!!!]
                void __fastcall History_MoveRL_Left(//설정할 [입력지정자] 위치.
                                                    int  pCaretIndex,
                                                    //처리할 [시작행 시작위치].
                                                    int  pStartLineStartIndex,
                                                    //처리할 [끝행 시작위치].
                                                    int  pEndLineStartIndex,
                                                    //이동할 공백수.
                                                    int  pSpaceCount);

                //[2012.02.06.월][완료!!!]
                void __fastcall History_MoveRL_Add(//수평이동 종류('>', '<').
                                                   char  pKind,
                                                   //입력지정자 배치 위치(복구시 사용할 위치).
                                                   //[수평이동] 에서는 <pStartLineStartIndex> 와 같은값.
                                                   int   pCaretIndex,
                                                   //<시작행:시작위치>.
                                                   //이 위치는 수정 전/후 항상 같은 값으로 변하지 않는다.
                                                   int   pStartLineStartIndex,
                                                   //수정전 <끝행:시작위치>.
                                                   int   pEndLineStartIndex,
                                                   //수정후 <끝행:시작위치>.
                                                   int   pEndLineStartIndex_moved,
                                                   //이동할 간격.
                                                   int   pMoveCount);

            //}

        //}

        //[되돌림묶음 관리]
        //{
            //[!]{---------------------------------------------
            //[되돌림/되살림] 기능을 처리하는 함수를 선언한다.
            //}------------------------------------------------

            //[VAR]
            //{
                //[2009.05.02.토][추가!!!]
                struct HISTORY  _history;

            //}

            //[수정이력 기본함수]
            //{
                //[2009.05.02.토][완료!!!]
                void __fastcall History_Init(void);

                //[2009.06.03.수][완료!!!]
                bool __fastcall History_CheckAndMake(void);

                //[2009.06.03.수][완료!!!]
                //[2012.02.05.일][정리!!!]
                //이 함수는 [일반적인 편집] 의 경우만 사용된다.
                //[수평이동] 의 경우는 별도의 함수군을 사용한다.
                void __fastcall History_Add(//추가('+')인지 삭제('-')인지 구분한다.
                                            char  pChangeKind,
                                            //[2009.05.06.수][추가!!!]
                                            //<c:문자>, <s:문자열> 인지 구분한다.
                                            char  pCharString);

                //[2012.06.11.월][완료!!!]
                void __fastcall History_UnDo(void);

                //[2012.06.11.월][완료!!!]
                void __fastcall History_ReDo(void);

                //[2012.06.13.수][완료!!!]
                void __fastcall History_SetCaretPos(//[입력지정자] 위치.
                                                    int    pCaretIndex,
                                                    //[입력지정자] 를 항상 보이는 위치에 두기:true.
                                                    bool   pCaretView);

                //[2009.05.08.금][완료!!!]
                void __fastcall History_SelectX(//선택 시작 위치.
                                                int    pSelStartIndex,
                                                //선택 끝 위치.
                                                int    pSelEndIndex,
                                                //true 인경우는 항상 [선택 영역] 을 항상 보이는 위치에 있게 한다.
                                                bool   pSelView,
                                                //[선택영역] 의 [시작행] 을 반환한다.
                                                int   *rStartLineNumber,
                                                //다시 그려줄지(true)/말지(false)를 결정한다.
                                                bool   pReDraw,
                                                //[2009.05.08.금][추가!!!]
                                                //[입력지정자] 위쪽 보기 설정.
                                                bool   pAlwaysTopMiddle,
                                                //[입력지정자] 아래쪽 보기 설정.
                                                bool   pAlwaysBottomMiddle);

            //}

            //[수정이력 특수 처리 함수]
            //{
                //[2012.02.05.일][정리!!!]{---------------------------------------
                //[수평이동] 관련 [수정이력] 함수를 추가하면서, 기존의 [수정이력]
                //처리관련 특수 함수들을 구분할 필요가 있어 별도로 묶어 놓는다.
                //}---------------------------------------------------------------

                //[2009.05.02.토][완료!!!]
                void __fastcall History_SelectDelete(void);

                //[2012.06.01.금][완료!!!]
                void __fastcall History_Insert(char  *pInsertStr,
                                               //[2009.05.07.목][추가!!!]
                                               //다시그리는 경우는 true.
                                               bool   pReDraw);

                //[2009.05.05.화][완료!!!]
                void __fastcall History_FileSave(char  *pFileFullName);

                //[2009.05.05.화][완료!!!]
                void __fastcall History_FileOpen(char  *pFileFullName);


                //[2009.05.15.금][완료!!!]
                void __fastcall History_EditFileSave(void);

                //[2009.05.05.화][완료!!!]
                void __fastcall History_EditFileOpen(void);


                //[2009.05.05.화][완료!!!]
                void __fastcall History_FileDelete(char  *pFileFullName);

            //}

        //}

        //[검증판]
        //{
            //[2007.04.08.일][추가!!!]{---------------------------------------------
            //[검증판] 은 별도의 bmp 만 가지고 관리되고, 그려진 것을 다시 _bmp_ 에
            //복사하여 전체를 완성하는 방식으로 사용된다.
            //이는 [수직 줄이동] 시에 완벽하게 [편집기] 와 동기화 하기 위한 것이다.
            //}---------------------------------------------------------------------

            //[VAR]
            //{
                //[2012.06.08.금][수정!!!]{------------------------------------------------
                //<_bmp_> 와 같이 수시로 [편집기:높이] 에 따라 크기가 변경된다.
                //크기는 수시로 변경되지 않기 때문에 그리기 속도를 보다 고속화 하기 위하여
                //꼭 필요한 크기로 항상 조정되도록 한다.
                //}------------------------------------------------------------------------
                
                Graphics::TBitmap  *_bmp_debug;

                //[내부 사용 그림]
                //{
                    //복사할때는 투명속성을 지정해 주어야 한다.

                    //[정지점]
                    Graphics::TBitmap  *_bmp_breakpoint_;

                    //[2018.09.12.수][추가!!!]{******************************************
                    //[정지점:행] 의 배경행을 만드는데 사용.
                    //이전에 그냥 행을 칠하는 방식에서 [편집기:배경] 을 [반투명] 하게
                    //보여주는 방식으로 반경해서 필요.
                    //여기에 [줄이동자:막대배경] 과 같이 [교차점] 으로 그린후, 이 그림을
                    //그대로 [정지점] 행에 [투명(투명색:흰색)] 복사 하는 방식을 사용.
                    Graphics::TBitmap  *_bmp_BreakPointLine_;
                    //}******************************************************************

                    //[실행 지정자]
                    Graphics::TBitmap  *_bmp_run_arrow_;
                    
                //}

                //scroll 을 해주기 위하여 사용하는 가상 기준 y.(BASE : 0)
                int                 _scroll_y;

                //[실행지정자] 의 표시 [유/무] 를 결정한다.(BASE : false)
                bool                _run_arrow_visible;

                //[실행지정자] 의 위치 행을 저장한다.(scroll 을 위한 복사 값.)
                int                 _run_arrow_line;
            //}

            //[함수]
            //{
                //[2018.09.12.수][완료!!!]
                void __fastcall _DEBUG_Init(void);

                void __fastcall _DEBUG_Shape(void);
                void __fastcall _DEBUG_BreakPoint(void);
                void __fastcall _DEBUG_RunArrow(int   pLINEnumber,
                                                bool  pSELFdraw);
                void __fastcall _DEBUG_RunArrow_Show(void);
                void __fastcall _DEBUG_RunArrow_Hide(void);
                void __fastcall _DEBUG_Scroll(int  pPOSITION);
                void __fastcall _DEBUG_Draw(void);

            //}

        //}

        //[정지점]
        //{
            //[정지점] 은 각각의 문서마다 독립적으로 관리된다.

            //[VAR]
            //{
                //[2007.04.12.목][추가!!!]
                //[정지점] 을 관리하기 위한 구조체를 만든다.
                //이는 각각의 문서마다 전부 개별적으로 관리된다.
                struct BREAKPOINT  _breakpoint;
                int                _breakline_color;

                //[2018.09.12.수][추가!!!]{***********************************************
                //<_BREAKPOINT_Edit_Draw()> 에서 [정지점:행] 을 <_bmp_BreakPointLine_> 에
                //그리기 전에 현재 <_breakline_color> 를 저장한다.
                //이는  색이 변경되는 경우 이를 비교하고 다시 그려주기 위한 것.
                //다시 그리기에 시간이 걸리므로 변경시 [한번] 만 그리기 위한것.
                int                 _breakline_color_Save; //(기본값: -1)
                //}***********************************************************************

                //[정지점 설정 상태]
                //{
                    //[정지점] 의 [유/무효] 상태에 따라서 적용되는 비트맵을 다르게 하기 위한 것이다.

                    #define  d_Editor_BreakPoint_Enable    1 //[정지점] 유효.
                    #define  d_Editor_BreakPoint_Disable   0 //[정지점] 무효.

                //}

            //}

            //[함수]
            //{
                //[2007.04.12.목][완료!!!]
                void __fastcall _BREAKPOINT_Init(struct BREAKPOINT  *pBREAKpoint);

                int __fastcall _BREAKPOINT_Search(int  pLINEnumber);

                bool __fastcall _BREAKPOINT_Add(int  pLINEnumber);

                void __fastcall _BREAKPOINT_Delete(int  pLINEnumber);

                void __fastcall _BREAKPOINT_DebugPanel_Draw(bool pERASEback,
                                                            int  pLINEnumber);

                //[2009.04.30.목][완료!!!]
                void __fastcall _BREAKPOINT_Set(//지정 위치.
                                                int  pPosX,
                                                int  pPosY,
                                                int  pLINEnumber);

                //[2018.09.12.수][완료!!!]
                void __fastcall _BREAKPOINT_Edit_Draw(int  pLINEnumber);

                //[2007.04.15.일][완료!!!]
                void __fastcall _BREAKPOINT_Edit_DrawAll(void);

                //[2007.04.16.월][완료!!!]
                void __fastcall _BREAKPOINT_Edit_Verify_Draw(int  pLINEnumber);

                //[2007.04.16.월][완료!!!]
                void __fastcall _BREAKPOINT_Edit_StartLine_Draw(int  pLINEnumber);

                //[2009.04.29.수][완료!!!]
                void __fastcall _BREAKPOINT_Bmp(int  pBmpIndex);

            //}

        //}

        //[편집기 바탕 설정]
        //{
            //[2007.12.04.화][완료!!!]
            void __fastcall _BACKBMP_Brightness(int  pBrightness);

            //[2007.12.02.일][완료!!!]
            void __fastcall _BACKBMP_ChangeJpeg(AnsiString  pJpegFilePath);

        //}

        //[부가함수]
        //{
            //[2007.12.03.월][완료!!!]
            void __fastcall _Debug_BreakPoint_RePaint(void);

            //[2007.12.03.월][완료!!!]
            void __fastcall _Debug_Arrow_RePaint(void);

            //[2011.05.06.금][완료!!!]
            void __fastcall _CtrlAltMouse_ScrollAreaDotLine(void);

            //[2012.08.14.화][완료!!!]
            void __fastcall _VLine(void);
            //{
                //[2012.06.09.토][추가!!!]
                //<_VLine()> 함수 [유/무효] 선택.
                //<Ctrl+G> 가 눌릴때는 항상 <true> 로 설정.
                bool  _sw_VLine; //(기본값:true);

            //}

        //}

        //[찾기 대화상자 관련]
        //{
            //[2019.01.08.화][완료!!!]
            void __fastcall _FindDialog_Show(void);

        //}

        //[검증식 바로보기 관련]
        //{
            //[2011.06.20.월][추가!!!]{------------------------------------------------------
            //[편집기] 상의 [선택 영역 검증식] 의 경우는 <debug_view.cpp> 에서 계산등
            //실제 정보를 수집하고, 그려주는 것은 이 정보를 바탕으로 [편집기] 에서 처리한다.
            //실제 그려주는 것은 <tree> 형식으로 그린다.
            //}------------------------------------------------------------------------------

            //[글꼴]
            //{
                struct FONTPACK     _dbgView_font;

                //문자색.
                int                 _dbgView_FontColor;

                //[2011.06.25.토][추가!!!]
                //행의 높이를 가진다.
                int                 _dbgView_LineHeight;
                //[2011.06.28.화][추가!!!]
                //[영문자] 한개의 폭이 된다.
                int                 _dbgView_EngWidth;


            //}

            //[그림판]
            //{
                //[2011.06.20.월][추가!!!]{--------------------------------------------------------------------
                //실제 [선택 영역 점증식] 은 여기에 내용을 그리고, 다시 이 내용을 편집기 영역에
                //복사하는 방식을 사용한다.
                //이는 고속으로 [편집기] 다시 그리기를 만족하기 위한 것이다.
                //
                //[2012.06.08.금][설명!!!]---------------------------------------------------------------------
                //[검증] 시 [고속] 으로 계속 값이 변경될수 있으므로 이때마다 [재생성] 되지 않도록 고정 크기로.
                //}--------------------------------------------------------------------------------------------

                Graphics::TBitmap  *_dbgView_bmp;
                //{
                    //4행의 문자열을 표시하고 각 문자열은 길이가 길지 않으므로 적당한 폭으로 설정한다.
                    //2진수 64비트 표기의 경우는 아주 길이가 길기 때문에 800 정도는 되야 다 표시가 가능하다.
                    #define  d_dbgView_bmp_Width         Screen->Width
                    //높이는 기본 5행으로 설정한다.
                    //현재 표시할 항목이 5개 밖에 안된다.
                    #define  d_dbgView_bmp_Height        (13*6)

                    //[2011.06.22.수][추가!!!]
                    #define  d_dbgView_TreeArea_Width    (3 + 9*2 + 2)
                    //[2011.06.26.일][추가!!!]
                    //[+], [x] 로 한줄 정보만 있는 경우를 위한것.
                    #define  d_dbgView_TreeArea_Width2   (3 + 9*1 + 2)

                //}

                //[바탕색] 은 [테마색] 의 밝은 색이다.
                int  _dbgView_BackColor;

                //[테두리색] 은 [테마색] 자체를 사용한다.
                int  _dbgView_BorderColor;

                //[2011.06.24.금][추가!!!]
                //[투명색] 을 설정한다.
                int  _dbgView_TransColor;


                //[실제 그려진 영역 좌표/크기]
                //{
                    //실제 그려진 영역 폭.
                    int  _dbgView_Width;

                    //실제 그려진 영역 높이.
                    int  _dbgView_Height;

                    //[2011.06.23.목][추가!!!]
                    //[MouseDown()] 등 이벤트 부분에서 이 [검증식 보기 판] 영역을
                    //별도 처리하기 위하여 반드시 [좌표] 가 필요하다.
                    int  _dbgView_X, _dbgView_Y;

                //}

                //[2011.06.24.금][추가!!!]
                //왼쪽 아래 모서리의 크기를 정의한다.
                int  _dbgView_EdgeSize;

            //}

            //[엄지그림]
            //{
                //[2011.06.25.토][추가!!!]{--------------------------------------------------------
                //tree 를 만들기 위한 여러 작은 그림들.
                //처리 속도를 빠르게 하기 위하여 그리지 않고 바로 복사할수 있도록 그림을 사용한다.
                //}--------------------------------------------------------------------------------

                Graphics::TBitmap  *_bmp_tree_p,   //'+'
                                   *_bmp_tree_m,   //'-'
                                   *_bmp_tree_i,   //'.'
                                   *_bmp_tree_3,   //3방향 줄기.
                                   *_bmp_tree_end, //줄기 끝.
                                   *_bmp_tree_x;   //'X'

                //[2011.06.26.일][추가!!!]
                //[검증식 보기판 닫기] 버튼을 위한 것.
                //[기본/고정 보기] 모두다 해당된다.
                //[기본/고정 보기] 를 전환할때 사용한다.
                Graphics::TBitmap  *_dbgView_bmp_Close;
                //{
                    //[2011.06.29.수][추가!!!]
                    //<_dbgView_bmp_Close> 의 위치를 관리한다.
                    //이는 [이벤트] 를 처리하기 위한 것이다.
                    //<_dbgView_bmp> 안의 위치가 된다.
                    TRect  _dbgView_bmp_Close_TRect;

                    //눌린 경우는 true.
                    bool   _dbgView_bmp_Close_Down; //(기본값:false)

                    //[함수]
                    //{
                        //[2011.06.29.수][완료!!!]
                        void __fastcall _Event_dbgView_bmp_Close(void);

                        //[2011.06.29.수][완료!!!]
                        void __fastcall _DbgView_bmp_Close_Down(bool  pTdownFup);

                    //}

                //}

                //[2011.06.27.월][추가!!!]
                //[선택된 검증식으로 이동] 버튼을 위한 것.
                //단, [고정보기] 의 경우만 적용된다.
                Graphics::TBitmap  *_dbgView_bmp_GoBlock;
                //{
                    //[2011.06.29.수][추가!!!]
                    //<_dbgView_bmp_GoBlock> 의 위치를 관리한다.
                    //이는 [이벤트] 를 처리하기 위한 것이다.
                    //<_dbgView_bmp> 안의 위치가 된다.
                    TRect  _dbgView_bmp_GoBlock_TRect;

                    //눌린 경우는 <true>.
                    bool   _dbgView_bmp_GoBlock_Down; //(기본값:false)

                    //[함수]
                    //{
                        //[2011.06.29.수][완료!!!]
                        void __fastcall _Event_dbgView_bmp_GoBlock(void);

                        //[2011.06.29.수][완료!!!]
                        void __fastcall _DbgView_bmp_GoBlock_Down(bool  pTdownFup);

                    //}

                //}

            //}

            //[검증식 추가버튼]
            //{
                //[2011.07.10.일][추가!!!]{-----------------------------------------
                //[검증식 추가] 버튼 기능을 하는 [엄지그림].
                //보일때는 반드시 <_dbgView_bmp> 오른쪽에 위치한다.
                //높이는 같고, 내부에 표시하는 엄지그림은 13*13 으로 크기가 다르다.
                //항상 같이 사용되므로 <_dbgView_bmp> 를 [편집기] 에 반영할때
                //같이 반영한다.
                //}-----------------------------------------------------------------

                Graphics::TBitmap  *_dbgView_bmp_AddBtn; //17*17 크기.
                //{
                    //버튼을 구별하는 그림을 관리한다.
                    //<_dbgView_bmp_AddBtn> 가 먼저 그려진후 안에 올려지는 그림이다.
                    //버튼이 눌리는 경우는 이 [그림] 만 반전된다.
                    Graphics::TBitmap  *_dbgView_bmp_AddBtn_icon; //13*13 크기.

                //}

                //[편집기상의 좌표]
                //{
                    //[!]{-----------------------------------------------------------------------------------
                    //<_dbgView_bmp_AddBtn> 의 위치를 관리한다.
                    //이는 [이벤트] 를 처리하기 위한 것이다.
                    //이것은 [검증식 보기판] 안에 위치하지 않으므로 [편집기] 상의 위치가 된다.
                    //
                    //실제 [편집기] 상의 정확한 좌표는 <_DbgView_Draw()> 에서 처리된다.
                    //이는 [검증식 보기판] 의 위치가 실제 <_DbgView_Draw()> 에서 그려질때 확정되기 때문이다.
                    //}--------------------------------------------------------------------------------------

                    TRect  _dbgView_bmp_AddBtn_TRect;

                //}

                //눌린 경우는 <true>.
                bool   _dbgView_bmp_AddBtn_Down; //(기본값:false)

                //[함수]
                //{
                    //[2011.07.10.일][완료!!!]
                    void __fastcall _DbgView_AddBtn_Shape(void);

                    //[2011.07.10.일][완료!!!]
                    void __fastcall _DbgView_bmp_AddBtn_Down(bool  pTdownFup);

                    //[2011.07.18.월][완료!!!]
                    void __fastcall _Event_dbgView_bmp_AddBtn(void);

                //}

            //}


            //[검증식 문자열 작성]
            //{
                //[2012.09.19.수][추가!!!]{-----------------
                //[검증식 작성] 을 위한 [한줄 편집기] 관련.
                //}-----------------------------------------

                //[VAR]
                //{
                    Tgui_edit_Form  *_dbgView_Edit;

                //}

                //[2012.09.23.일][완료!!!]
                void __fastcall _DbgView_ExpStr_Edit(void);

                //[2012.09.23.일][완료!!!]
                void __fastcall _DbgView_ExpStr_Add(void);

                //[동작함수]
                //{
                    //[2012.09.23.일][완료!!!]
                    void __fastcall _EVENT_KeyEnter_dbgView_Edit(void);

                    //[2012.09.23.일][완료!!!]
                    void __fastcall _EVENT_KeyDown_Esc_dbgView_Edit(void);

                //}

            //}


            //[모양 관리]
            //{
                //[2011.07.01.금][수정!!!]{--
                //각 문서마다 개별 적용된다.
                //}--------------------------

                //[상태] 를 관리하며 실제적인 처리유형을 구분한다.
                char  _dbgView_State;
                //{
                    //'+' : 기본상태(선택영역이 생성된 경우).
                    //'-' : 검증보기 상태.
                    //'x' : 오류상태.

                //}

            //}

            //[유/무효]
            //{
                //[2011.06.23.목][추가!!!]{------------------
                //자체가 유효/무효인지 구분한다.
                //이는 [검증시] 에만 동작해야 하기 때문이다.
                //
                //[2011.07.01.금][추가!!!]-------------------
                //공용으로 사용된다.
                //}------------------------------------------

                bool  _dbgView_Enable;

            //}

            //[보이기/감추기]
            //{
                //[2011.06.23.목][추가!!!]{------------------------------------------
                //보이고 있는지 아닌지 구분한다.
                //
                //[선택영역] 이 존재하는 경우는 자동으로 [검증식 보기판] 이
                //<_dbgView_State> 형식에 맞게 보여지게 되고, [선택영역] 이 사라질때
                //<false> 로 보이지 않게 되어야 한다.
                //
                //[2011.07.01.금][추가!!!]-------------------------------------------
                //각 문서마다 개별 적용된다.
                //}------------------------------------------------------------------

                bool  _dbgView_Visible;

            //}

            //[기본/고정 보기 구분]
            //{
                //[2011.06.26.일][추가!!!]{---------------------------------------
                //[기본보기:false] 로 할지 [고정보기:true] 로 할지 결정한다.
                //[기본보기] 는 [검증식] 아래에 붙이는 방식이고,
                //[고정보기] 는 [편집기] 위에 고정으로 붙이는 방식이다.
                //이는 [검증시] 계속 지정값을 볼 필요가 있는데 정작 [줄이동] 으로
                //보이지 않게 되는 경우를 위한 것이다.
                //이런 경우 [고정보기] 로 처리하면 항상 값을 볼수 있어 좋다.
                //
                //[2011.07.01.금][추가!!!]----------------------------------------
                //공용으로 사용된다.
                //}---------------------------------------------------------------

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

            //}

            //[검증식 관련 정보 관리자]
            //{
                //[2011.06.28.화][추가!!!]
                struct DEBUGVIEWINFO       _dbgViewInfo;

                //[2011.06.22.수][추가!!!]
                struct  DEBUGVIEW_DISPLAY  _dbgViewDspInfo;

            //}

            //[함수]
            //{
                //[2011.07.10.일][완료!!!]
                void __fastcall _DbgView_Init(void);

                //[2011.06.30.목][완료!!!]
                void __fastcall _DbgView_Shape(void);

                //[2011.07.10.일][완료!!!]
                void __fastcall _DbgView_Draw(void);

                //[2011.06.30.목][완료!!!]
                //[2018.07.24.화][완료!!!]
                void __fastcall _DbgView_Exe(void);

                //[2011.07.04.월][완료!!!]
                void __fastcall _DbgView_DebugExe(void);

                //[2018.07.24.화][완료!!!]
                void __fastcall _DbgView_ModeChange(void);

                //[2011.07.17.일][완료!!!]
                void __fastcall _DbgView_MakeDspExpStr(//지정폭.
                                                       int    pSetWidth,
                                                       //표시할 검증식 문자열.
                                                       char  *rStr);

            //}

         //}

         //[책갈피 대화상자]
         //{
             //[2012.03.01.목][추가!!!]{-------------------------------------------------
             //[2012.03.03.토][주의!!!]--------------------------------------------------
             //<bookMark_DialogBox.cpp> 에 [전역변수] 로 선언된 <_bookMark_DialogBox> 이
             //[편집기] 보다 먼저 [삭제] 된다는 것에 주의!!!
             //}-------------------------------------------------------------------------

             class BookMark_DialogBox  *_bookMark_DialogBox;

         //}

         //[<infoTree> 관련]
         //{
             //[2012.06.24.일][완료!!!]
             void __fastcall InfoTree_Call(//[2012.05.30.수][추가!!!]
                                           //<Parser()> 를 돌리지 않고 [재정리] 만 하는 경우는 <true>.
                                           //이는 [단어조합중] 인 경우 계속 [근접단어] 를 찾을때 사용.
                                           //즉, 이미 정리된 {DB} 정보만 가지고 계속 처리하는 경우.
                                           bool  pInfoSetOnly);

             //[2012.06.24.일][완료!!!]
             void __fastcall InfoTree_ReCall(//입력지정자 위치 [전체단어] 시작위치.
                                             int    pWordIndexS,
                                             //입력지정자 위치 [전체단어] 끝위치.
                                             int    pWordIndexE,
                                             //[입력지정자] 위치까지의 부분단어.
                                             char  *pPartWord_,
                                             //<Ide_InfoTree_SetInfo()> 로 재정리 하는 경우는 <true>.
                                             bool   pSetInfo);

             //[2012.05.25.금][완료!!!]
             void __fastcall InfoTree_OnHide(void);


             //[2012.04.15.일][완료!!!]
             void __fastcall InfoTree_Cal_XY(//문서상 위치.
                                             int   pIndex,
                                             //계산한 좌표.
                                             int  *rX,
                                             int  *rY);

             //[2012.06.09.토][완료!!!]
             void __fastcall InfoTree_AutoInput(void);

             //[키제어]
             //{
                 //[2012.05.14.월][완료!!!]
                 void __fastcall InfoTree_Key_Enter(void);

                 //[2012.05.14.월][완료!!!]
                 void __fastcall InfoTree_Key_Space(void);

                 //[2012.06.28.목][완료!!!]
                 void __fastcall InfoTree_Key_Esc(void);

                 //[2012.05.23.수][완료!!!]
                 void __fastcall InfoTree_Key_Up(void);

                 //[2012.05.23.수][완료!!!]
                 void __fastcall InfoTree_Key_Down(void);

             //}

		 //}

         //[문서 용도 종류 관련]
         //{
             //[2022.06.27.월][추가]{----------------------------
             //<Tree:API 검색> 의 [순간보기] 기능 지원을 위한것.
             //문서의 용도를 기록한다.
             //}-------------------------------------------------

             int  _fileUseKind;
             //{
                 #define  d_Editor_fileUseKind_Default        0 //기본.

                 //[순간보기] 는 일시적인 기능으로 실제 1 개 문서만 해당된다.
                 #define  d_Editor_fileUseKind_SoonganView    1 //[순간보기] 용도로 연 경우.


             //}

         //}

         //[<Ctrl+P> 관련]
         //{
             //[2022.07.05.화][완료]
             void __fastcall ApiTree_Ctrl_P(void);

         //}

};

//---------------------------------------------------------------------------
extern PACKAGE Teditor_edit_Form *editor_edit_Form;
//---------------------------------------------------------------------------

#endif
