
#include "기계닉스\기계닉스.h"


void __Main(void);

//[2021.01.01.금][완료]
void Main_생성자(void);

//[2019.01.13.일][완료]
void Main_소멸자(void);

//[이벤트]
//{
    //[2018.06.17.일][완료!!!]
    void 이벤트_GVmos_크기변경(struct t_Gui_알림문64  *p알림문64);

    //[2019.02.25.월][완료]
    void 이벤트_메뉴(struct t_Gui_알림문64  *p알림문64);

    //[2019.01.13.일][완료]
    void 이벤트_하위메뉴_GList(struct t_Gui_알림문64  *p알림문64);

    //[2019.02.12.화][완료]
    void 이벤트_디자인판_GLabel(struct t_Gui_알림문64  *p알림문64);

    //[2018.06.17.일][완료!!!]
    void 이벤트_제어상자_GForm(struct t_Gui_알림문64  *p알림문64);

    //[2018.07.02.월][완료!!!]
    void 이벤트_제어상자크기전환_GBmpBtn(struct t_Gui_알림문64  *p알림문64);

    void 이벤트_제어상자_GTabs(struct t_Gui_알림문64  *p알림문64);

    //[2019.03.03.일][완료]
    void 이벤트_속성_GList(struct t_Gui_알림문64  *p알림문64);

    //[2018.09.20.목][완료!!!]
    void 이벤트_목록_GList(struct t_Gui_알림문64  *p알림문64);

    //[2018.07.07.토][완료!!!]
    void 이벤트_속성수정_GEdit(struct t_Gui_알림문64  *p알림문64);

    //[2018.07.09.월][완료!!!]
    void 이벤트_속성수정_GList(struct t_Gui_알림문64  *p알림문64);

    //[2018.07.03.화][완료!!!]
    void 이벤트_편집기(struct t_Gui_알림문64  *p알림문64);

    //[2019.01.13.일][완료]
    void 이벤트_수정이력(struct t_Gui_알림문64  *p알림문64);

    //[2019.02.14.목][완료]
    void 이벤트_폼디자인(struct t_Gui_알림문64  *p알림문64);

//}

//[생성관리]
//{
    struct ts_생성자
    {
      //[2018.06.22.금][추가!!!]{------------------------------------------------
      //[이름] 정보는 [폼디자인] 시에는 불필요하지만 [폼디자인] 된 것을 [맷돌-C] 에서 사용할때는
      //ID 로 접근하는 것보다는 [이름] 으로 접근하는 것이 훨씬 편리하므로 반드시 필요.
      //}-----------------------------------------------------------------------

      t_생성자  생성자[d_Gui_생성자_크기];

      //[모체 정보]
      //{
          //[!]{------------------------------
          //서로 포함관계를 알기 위하여 반드시 필요.
          //0  : 모체가 Screen 인 경우(없는 경우).
          //ID : 모체가 ID 를 가진 그림부품.
          //}---------------------------------

          t_u2     모체ID;

      //}

      //[특별 부품 정보]
      //{
          //[!]{--------------------------------------
          //설정과 폼디자인 문서 제작에 필요한 필요 정보를 추가.
          //}-----------------------------------------

          //[이름]
          //{
              //[중요!!!]{--------------------------------------------------------------------------
              //[이름] 은 [그림부품] 자체적으로는 존재하지 않지만 [폼디자인문서] 를 제작시 서로를 구분하기 위해서 필요.
              //실제 [맷돌C] 용 자동 완성 문서에서 절대적으로 필요(ID 는 사용할수 없으므로 반드시 [이름] 필요).
              //}----------------------------------------------------------------------------------

              #define  d_이름_크기    64
              char     이름[d_이름_크기];

          //}

          //[유효/보이기]
          //{
              //[2018.08.10.화][추가!!!]{----------------------------------------------
              //[유효/보이기] 는 [속성:설정] 을 할수 있으나 [폼디자인] 상에서는 반영되어서는 안되므로
              //가상적으로 관리하고 [폼디자인문서] 제작시 설정값만 포함시킨다.
              //즉, 이 값은 실제 [그림부품] 에 설정되지 않으며 여기서만 관리된다.
              //
              //기본값은 둘다 <true>.
              //}---------------------------------------------------------------------

              bool  유효;

              bool  보이기;

          //}

      //}

    };

    //[2018.07.10.화][완료!!!]
    void 생성자_초기화(struct ts_생성자  *p생성자);

    void 생성관리_초기화(void);

    bool 생성관리_생성자_얻기(struct ts_생성자  **r생성자);

    bool 생성관리_ID로_생성자_찾기(t_u2  pID, struct ts_생성자  **r생성자);

    //[2018.06.30.토][완료!!!]
    bool 생성관리_ID를_모체로_갖는_생성자_찾기(t_u2  pID, struct ts_생성자  **r생성자);

    //[2018.06.26.화][완료!!!]
    bool 생성관리_이름으로_생성자_찾기(char  *p이름, struct ts_생성자  **r생성자);

    //[2019.02.14.목][완료]
    bool 생성관리_포함관계_확인(t_u2  pID,
                           t_u2  p모체_ID);

    //[2018.06.30.토][완료!!!]
    int 생성관리_빈곳_개수_얻기(void);

    //[2018.07.08.일][완료!!!]
    //<true>  : 중복되지 않음.
    //<false> : 중복 됨.
    bool 생성관리_이름_중복_검사(t_u2  pID, char  *p이름);

    //[2019.01.12.토][완료]
    //<true>  : 중복되지 않음.
    //<false> : 중복 됨.
    //bool 생성관리_ID_중복_검사(t_u2  pID);

    //[2019.01.12.토][완료]
    //t_u2 생성관리_ID_중복검사_및_생성(void);

    //[2018.07.17.화][완료!!!]
    bool 생성관리_ID로_이름_찾기(t_u2  pID, char  *r이름);

    //[2018.09.20.목][완료!!!]
    bool 생성관리_생성된_그림부품_존재확인(void);

    //[2019.01.12.토][완료]
    //<true>  : <최대_ID> 를 얻은 경우.
    //<false> : 생성된 그림부품이 하나도 없어 처리되지 않은 경우.
    bool 생성관리_ID_최대값_얻기(t_u2  *r최대_ID);

    //[생성관리:정리]
    //{
        //[2018.07.17.화][추가!!!]
        struct  ts_생성자정리
        {
          t_u2  ID;

          int   번호;

          //[2019.02.07.목][추가]
          t_u2  모체ID;

        };

        //[2019.02.07.목][완료]
        void 생성관리_ID_작은_크기순으로_정리(void);

        //[2019.02.07.목][완료]
        void 생성관리_ID_모체_우선순으로_정리(void);

    //}

    //[2019.02.09.토][완료]
    void 생성관리_출력창에_내용출력(void);

//}

//[폼디자이너]
//{
    //[2018.08.10.금][완료!!!]
    void 폼디자이너_구성부품_삭제(void);

    //[2019.01.13.일][완료]
    void 폼디자이너_그림부품_삭제(//[2019.01.12.토][추가]
                             //[수정기록] 을 전부 초기화 하는 경우는 <true>.
                             bool  p수정기록초기화,
                             //[2019.01.13.일][추가]
                             //[그림부품:삭제] 시 [수정기록] 추가 유(true)/무(false) 결정.
                             //[미리보기 <=> 폼디자인] 전화시 각각 필요해서 추가.
                             bool  p수정기록사용유무);

    //[2019.01.13.일][완료]
    void 폼디자이너_편집기능_일시정지(bool  p일시정지,
                                bool  p폼디자인바탕판에도적용);

//}

//[폼디자인]
//{
    //[2023.02.09.목][완료]
    void 폼디자인_생성(t_u2  p모체ID, int pX, int pY);

    //[2019.01.12.토][완료]
    void 폼디자인_삭제(t_u2  pID,
                    //[2019.01.12.토][추가]
                    //NULL 인 경우는 [수정기록] 금지.
                    t_u2  p수정기록_ID);

    //[2023.02.09.목][완료]
    void 폼디자인_그림부품_삭제(t_u2  pID);

    //[2023.02.09.목][완료]
    void 폼디자인_속성탭에_속성_설정(t_u2  pID,
                               //[2019.01.31.목][추가]
                               //true => 선택항목(-1) 로 초기화.
                               //현재 선택 항목을 유지하는 경우 false.
                               bool  p항목선택초기화유무);

    //[2023.02.12.일][완료]
    void 폼디자인_속성탭의_속성_수정(int   p항목번호,
                               //[2018.07.04.수][추가!!!]
                               bool  pT설정_F준비);

    //[2018.06.26.화][완료!!!]
    void 폼디자인_목록탭에_지정(t_u2  pID);

    //[2023.02.13.월][완료]
    void 폼디자인_선택된_그림부품_기본크기위치로_조정(void);

    //[2018.08.14.화][완료!!!]
    void 폼디자인_분포정보_얻기(int  *rL, int  *rT, int  *rR, int  *rB,
                           int  *r보정값x, int  *r보정값y);

    //[2019.02.14.목][완료]
    bool 폼디자인_모체_수정(t_u2   p부품_ID,
                        t_u2   p모체_ID,
                        //[2019.02.10.일][추가]
                        //수정된 위치의 [변위값] 을 반환([수정기록] 지원을 위한것).
                        //사용하지 않은 인수는 NULL 로 처리.
                        int   *r변위_x,
                        int   *r변위_y);

//}

//[메뉴 관련]
//{
    //[2018.12.21.금][완료!!!]
    void 메뉴_활성화(bool   p활성유무,
                   //"기본", "미리보기", "수정이력" 중 선택.
                   char  *p동작구분);

    //[2018.09.20.목][완료!!!]
    void 메뉴_기본모양으로_만들기(void);

//}

//[편집기 관련]
//{
    //[2018.07.03.화][완료!!!]
    void 편집기_크기조정(void);

    //[2018.07.03.화][완료!!!]
    void 편집기_일반_보이기(void);

    //[2018.07.03.화][완료!!!]
    void 편집기_속성_보이기(void);

    //[2018.09.20.목][완료!!!]
    void 편집기_폼디자인_문서_보이기(void);

    //[2018.07.03.화][완료!!!]
    void 편집기_감추기(void);

//}

//[속성수정 관련]
//{
    //[항목수정]
    //{
        //[2018.07.05.목][생성!!!]{---------------------------
        //이미 구한 정보를 다시 구하지 않고 계속 사용하기 위하여 만든다.
        //}-------------------------------------------------

        struct ts_항목수정정보
        {
          struct ts_생성자  *생성항목;

          int               항목번호;

          char             *항목문자열;

          char             *항목이름;

          //[2018.07.11.수][추가!!!]{--------------------------------
          char             *문자열1;
          char             *문자열2;
          //<속성항목수정_XXX()> 관련 함수에서 처리된 값을 반환하는 용도로 사용.
          long              처리된값;
          //}-------------------------------------------------------

        };

        struct ts_전광판전구설정정보
        {
          //[2018.07.15.일][생성!!!]{--------------------
          //[폼디자이너:속성] 지원을 위하여 만든다.
          //<_Led_Make()> 에서 설정한 인수 정보를 그대로 저장.
          //}-------------------------------------------

          unsigned char   종류;
          unsigned short  크기;
          unsigned int    켜기색;
          unsigned int    끄기색;
          bool            테두리유무;
          unsigned int    테두리색;
          unsigned int    배경색;

        };

        //[2018.07.09.월][완료!!!]
        void 속성_수정_한줄편집기_보이기(struct ts_항목수정정보  *p정보);

        //[2018.07.09.월][완료!!!]
        void 속성_수정_bool_보이기(struct ts_항목수정정보  *p정보);

        //[2018.07.09.월][완료!!!]
        void 속성_수정_문자형식_보이기(struct ts_항목수정정보  *p정보);

        //[2018.07.15.일][완료!!!]
        void 속성_수정_전구종류_보이기(struct ts_항목수정정보  *p정보);

        //[2018.07.08.일][완료!!!]
        void 속성_수정_편집기_보이기(struct ts_항목수정정보  *p정보);

        //[2023.02.13.월][완료]
        void 속성_수정_편집기_설정(struct ts_항목수정정보  *p정보);

        //[2019.02.05.화][완료]
        void 속성_수정_감추기(void);

        //[2018.07.12.목][완료!!!]
        bool 속성_수정_부품_보이는지_확인(void);

    //}

    void 문자열_값_합성(char  *p문자열, int  p값, char  *r합성된문자열);

    //[2018.06.22.금][완료!!!]
    int 속성에서_첫단어로_항목_찾기(char  *p첫단어);

    //[2018.06.26.화][완료!!!]
    int 목록에서_이름으로_항목_찾기(char  *p이름);

    //[2019.03.03.일][완료]
    void 속성_귀뜸말_보이기(void);

    //[2018.07.11.수][완료!!!]
    void 속성_귀뜸말_감추기(void);

    //[속성창:속성수정]
    //{
        //[수정기록:미지원]
        //{
            //[2018.06.22.금][완료!!!]
            bool 속성_수정_문자열(char  *p항목이름, char  *p문자열, char  *r반환문자열);

            //[2018.06.22.금][완료!!!]
            bool 속성_수정_10진수(char  *p항목이름, long  p값, char  *r반환문자열);

            //[2018.06.22.금][완료!!!]
            bool 속성_수정_16진수(char  *p항목이름, long  p값, char  *r반환문자열);

            //[2018.06.22.금][완료!!!]
            bool 속성_수정_Bool(char  *p항목이름, bool  pBool, char  *r반환문자열);

            //[2018.06.22.금][완료!!!]
            bool 속성_수정_문자형식(char  *p항목이름, int  p문자형식, char  *r반환문자열);

            //[2018.07.15.일][완료!!!]
            bool 속성_수정_전구종류(char  *p항목이름, int  p전구종류, char  *r반환문자열);

        //}

        //[수정기록:지원]
        //{
            //[2019.01.06.월][완료]
            bool 속성_수정_기록_문자열(t_u2  pID, char  *p항목이름, char  *p문자열);

            //[2019.01.09.수][완료]
            bool 속성_수정_기록_10진수(t_u2  pID, t_u2  p수정기록_ID, char  *p항목이름, long  p값);

            //[2019.01.06.월][완료]
            bool 속성_수정_기록_16진수(t_u2  pID, char  *p항목이름, long  p값);

            //[2019.01.06.월][완료]
            bool 속성_수정_기록_Bool(t_u2  pID, char  *p항목이름, bool  pBool);

            //[2019.01.06.월][완료]
            bool 속성_수정_기록_문자형식(t_u2  pID, char  *p항목이름, int  p문자형식);

            //[2019.01.06.월][완료]
            bool 속성_수정_기록_전구종류(t_u2  pID, char  *p항목이름, int  p전구종류);

            //[2023.02.13.월][완료]
            void 속성_수정_기록_편집기_설정(struct ts_항목수정정보  *p정보);

        //}

    //}

    //[2018.07.16.월][완료!!!]
    bool 속성_수정_항목의_값이_비어있는지_확인(char  *p항목이름);

    //[2018.07.16.월][완료!!!]
    bool 속성_수정_값이_양수인지_확인(long  p값);

    //[2018.07.29.일][완료!!!]
    bool 속성_수정_값이_밝기범위인지_확인(long  p값);

//}

//[속성 항목 수정 관련]
//{
    //[2019.01.09.수][완료!!!]
    bool 속성항목수정_이름(struct ts_항목수정정보  *p정보);

    //[2019.01.29.화][완료]
    bool 속성항목수정_10진수(struct ts_항목수정정보  *p정보);

    //[2018.07.11.수][완료!!!]
    bool 속성항목수정_16진수(struct ts_항목수정정보  *p정보);

    //[2018.07.11.수][완료!!!]
    void 속성항목준비_색상(struct ts_항목수정정보  *p정보);

    //[2018.08.11.토][완료!!!]
    void 속성항목준비_문서경로(struct ts_항목수정정보  *p정보);

    //[2019.02.16.토][완료]
    void 속성항목준비_모체(struct ts_항목수정정보  *p정보);

    //[2019.02.10.일][완료]
    void 속성항목수정_모체(t_u2  p부품_ID, t_u2  p모체_ID);

//}

//[GCover 관련]
//{
    //[2019.02.25.월][완료]
    //[반환] : 처리한 경우는 true.
    bool 선택된_그림부품_이동(void);

    //[2019.01.09.수][완료!!!]
    void 선택된_그림부품_묶음이동(t_u2  p선택ID, t_u2  p모체ID);

    //[2019.02.25.월][완료]
    void 선택된_그림부품_크기변경(//[2019.01.09.수][추가]
                             t_u2  p수정기록_ID);

//}

//[부가 함수들]
//{
    //[2018.07.05.목][완료!!!]
    t_u4 항목문자열_수정부분_이전까지_문자열_폭_얻기(char  *p항목문자열, char  *r수정부분_이전까지_문자열);

    //[2018.07.09.월][완료!!!]
    void 항목문자열_수정부분_문자열_얻기(char  *p항목문자열, char  *r수정부분문자열);

    void 문자열_값_합성(char  *p문자열, int  p값, char  *r합성된문자열);

    //[2018.06.25.월][완료!!!]
    void 생성된_부품_목록_만들기(void);

    //[2018.07.16.월][완료!!!]
    bool 검사_10진수규칙(char  *p부호10진수표기);

    //[2018.07.16.월][완료!!!]
    long 변환_10진수표기_Long값(char  *p부호10진수표기);

    //[2019.01.29.화][완료]
    void 숫자표기정리_10진수(char  *pr10진수표기);

    //[2018.08.10.금][완료!!!]
    void 십자보조선에_정보_표시(int   p절대좌표x, int  p절대좌표y,
                           int   p상대좌표x, int  p상대좌표y,
                           t_u4  p폭, t_u4  p높이,
                           t_u4  p문자색) ;

    //[2018.08.10.금][완료!!!]
    bool 경로이름확장자를_내부경로로_변환(char  *p경로이름확장자,
                                   char  *r내부경로이름확장자);

    //[2018.08.10.금][완료!!!]
    bool 내부경로를_경로이름확장자로_변환(char  *p내부경로이름확장자,
                                   char  *r경로이름확장자);

//}

//[폼디자인:문서]
//{
    //[2019.01.13.일][완료]
    void 폼디자인_문서_새문서(void);

    //[2019.01.13.일][완료]
    void 폼디자인_문서_닫기(void);

    //[2018.08.03.금][완료!!!]
    bool 폼디자인_문서_저장(//[2018.07.22.일][추가!!!]
                        //[다른이름으로 저장] 인 경우는 true.
                        bool  p다른이름으로저장,
                        //[2018.08.03.금][추가!!!]
                        bool  p새문서만들기);

    //[2023.02.14.화][완료]
    void 폼디자인_문서_만들기(char  *r문서);

    //[2019.02.10.일][완료]
    void 폼디자인_그림부품_속성_문서_만들기(t_u2   pID,
                                     //[2018.11.27.화][추가]{-----------------
                                     //NULL 인 경우는 [그림부품] 처리가 되고
                                     //지정 [속성이름] 이 있다면 [속성] 처리가 된다.
                                     char  *p속성이름,
                                     //}-------------------------------------
                                     char  *r문서);

    //[2021.10.17.일][완료]
    void 폼디자인_문서_최적화(char  *pr문서,
                          //[2018.11.24.토][추가]
                          bool  p진행바_사용유무);

    //[2018.08.02.목][완료!!!]
    void 폼디자인_문서_보기(void);

    //[2019.01.13.일][완료]
    void 폼디자인_문서_열기(//[2018.08.12.일][추가]
                        //[현재문서] 다시 열기인 경우는 <true>.
                        bool  p현재문서다시열기,
                        //[2019.01.11.금][추가]
                        //<true> : [미리보기] => [폼디자인] 으로 복원시
                        //<폼디자인_문서_미리보기()> 에서 사용되는 경우.
                        bool  p미리보기에서복원하는경우);

    //[2019.01.13.일][완료]
    void 폼디자인_미리보기_열기(void);

    //[2023.02.17.금][완료]
    void 폼디자인_문서_복원(char  *p문서, t_u4  p문서크기,
                        //[2018.11.24.토][수정!!!]
                        //[되돌리기/되살리기] 지원을 위한 4가지 동작으로 수정.
                        t_u1   p동작구분,
                        //[2018.11.25.일][추가]
                        //<p동작구분> 이 <d_그림부품/d_속성> 인 경우만 의미가 있고
                        //다른 경우는 <NULL/0> 로 처리.
                        //[되돌리기/되살리기] 를 위한 대상 개체의 ID 에 해당.
                        t_u2   pID,
                        //[2019.01.11.금][추가]
                        //[ID] 까지 <*.fmdsn> 문서의 것으로 복원하는 경우는 <true>.
                        bool   pID포함복원);

    //[p동작구분]
    //{
        //[2018.11.24.토][추가]

        //[기본처리]
        #define d_폼디자인    (0x01)
        #define d_미리보기    (0x02)

        //[되돌리기/되살리기]
        //기본적으로는 <폼디자인> 의 일부이므로 <d_폼디자인> 을 포함시킨다.
        #define d_그림부품    (d_폼디자인|0x04)
        #define d_속성       (d_폼디자인|0x08)

    //}

    struct ts_위치크기
    {
      //[2018.08.12.일][생성!!!]
      int  x, y;

      //[2019.02.25.월][수정]
      //unsigned => signed 로 수정.
      int  폭, 높이;

    };

    //[2019.01.11.금][완료]
    void 폼디자인_문서_미리보기(void);

//}

//[수정기록]
//{
    //[2019.02.13.수][완료]
    //[반환] : 현재 <rxPos> 위치 항목번호.
    int 폼디자이너_수정기록_되돌리기(void);

    //[2019.02.13.수][완료]
    //[반환] : 현재 <rxPos> 위치 항목번호.
    int 폼디자이너_수정기록_되살리기(void);

    //[2019.01.02.수][완료]
    void 폼디자이너_수정이력_묶음수정(int  p항목번호);

    //[2019.01.12.토][완료]
    void 폼디자이너_수정기록_그림부품_추가(t_u2  p수정기록_ID,
                                    t_u2  p그림부품_ID,
                                    //문자 (C/D) 둘 중 하나.
                                    t_u1  p수정종류);

    //[2018.12.09.일][완료]
    void 폼디자이너_수정기록_속성_추가(//[2018.12.09.일][추가]
                                 t_u2  p수정기록_ID,
                                 t_u2  p그림부품_ID,
                                 //문자 (+/-) 둘 중 하나.
                                 t_u1  p수정종류,
                                 //수정 대상 속성이름.
                                 char  *p속성이름);

    //[2019.01.31.목][완료]
    void 폼디자이너_수정기록_속성_폭_높이_추가(t_u2  p수정기록_ID,
                                       t_u2  p부품_ID,
                                       int   p폭_변위,
                                       int   p높이_변위);

    //[2019.02.13.수][완료]
    void 폼디자이너_수정기록_속성_X_Y_추가(t_u2  p수정기록_ID,
                                     t_u2  p부품_ID,
                                     int   pX_변위,
                                     int   pY_변위);

    //[2019.01.06.일][완료]
    void 폼디자이너_수정기록_마우스이동_되돌리기_되살리기(t_u2  p부품_ID,
                                               //"되돌리기", "되살리기" 선택 사용.
                                               char  *p동작구분,
                                               char  *p내용);

    //[2019.01.03.목][완료]
    void 폼디자이너_수정기록_묶음이동_되돌리기_되살리기(//"되돌리기", "되살리기" 선택 사용.
                                              char  *p동작구분,
                                              char  *p내용);

    //[2019.01.10.목][완료]
    void 폼디자이너_수정기록_마우스크기조정_되돌리기_되살리기(t_u2  p부품_ID,
                                                  //"되돌리기", "되살리기" 선택 사용.
                                                  char  *p동작구분,
                                                  char  *p내용);

    //[2018.12.22.토][완료]
    void 폼디자이너_수정이력_보이기(void);

    //[2019.01.02.수][완료]
    //[반환] : 현재 <rxPos> 위치 항목번호.
    int 폼디자이너_수정이력_현재위치_지정(//"되돌리기", "되살리기", "" 사용.
                                   //[2019.01.01.화][수정]
                                   //"" 인 경우는 "되돌리기", "되살리기" 모두를 처리해서 구한다.
                                   char  *p동작구분);

    //[2019.02.13.수][완료]
    //[반환] : 교정된 선택 항목번호.
    int 폼디자이너_수정이력_선택항목_교정(int   p항목번호,
                                   bool  p항목지정);

    //[2019.01.01.화][완료]
    //[반환] : 교정된 선택 항목번호.
    int 폼디자이너_수정이력_선택항목_묶음_교정(int   p항목번호,
                                       bool  p항목지정);

    //[2019.02.13.수][완료]
    void 폼디자이너_수정이력_선택항목_묶음범위_얻기(int   p항목번호,
                                           //사용하지 않는 경우는 NULL 로 지정.
                                           int  *r시작항목번호,
                                           int  *r끝항목번호);

    //[2018.12.31.월][완료]
    void 폼디자이너_수정이력_현재_선택된_항목_정보_얻기(//사용하지 않는 인수는 NULL 로 처리.
                                              t_u4  *rRxPos,
                                              char  *r묶음_종류,
                                              t_u2  *r묶음_ID,
                                              t_u2  *r부품_ID,
                                              char  *r내용,
                                              int   *r항목번호);

//}

//[맷돌C-번역]
//{
    //[2022.05.08.일][완료]
    //[2023.02.17.금][...]
    void 폼디자인_문서_맷돌C_번역(void);

    //[2018.10.11.목][완료!!!]
    void 맷돌C_번역_이름(char *p문서_c, char *p문서_h, char *p문서_l, char *p함수이름, char *r이름, char *p내용);

    //[2018.10.19.금][완료!!!]
    bool 맷돌C_번역_모체(char *p문서, char *p내용);

    //[2018.10.20.토][완료!!!]
    void 맷돌C_번역_X(char *p문서, char *p내용, bool  p모체유무);

    //[2018.10.20.토][완료!!!]
    void 맷돌C_번역_Y(char *p문서, char *p내용, bool  p모체유무);

    //[2018.10.02.화][완료!!!]
    void 맷돌C_번역_폭(char *p문서, char *p내용);

    //[2018.10.02.화][완료!!!]
    void 맷돌C_번역_높이(char *p문서, char *p내용);

    //[2018.10.02.화][완료!!!]
    void 맷돌C_번역_값(char *p문서_c, char *p문서_l, char *p함수이름, char *p이름, char *p내용);

    //[2018.10.02.화][완료!!!]
    void 맷돌C_번역_bool(char *p문서_c, char *p문서_l, char *p함수이름, char *p이름, char *p내용);

    //[2018.10.02.화][완료!!!]
    void 맷돌C_번역_문자형식(char *p문서_c, char *p문서_l, char *p함수이름, char *p이름, char *p내용);

    //[2023.02.19.일][완료]
    void 맷돌C_번역_문자열(char *p문서_c, char *p문서_l, char *p함수이름, char *p이름, char *p내용,
                        //[2023.02.19.일][추가]{*****************************************
                        //<GTabs:항목> 이나 <GList:전체항목> 의 경우는 기본적으로 [행단위목록] 이라
                        //"\r\n" 이 들어 있으나, 이 앞에는 "\" 를 붙이면 안된다.
                        //이를 구분하기 위하여 <p행단위목록> 을 추가(true:행단위목록).
                        bool  p행단위목록
                        //}*************************************************************
                        );

    //[2018.10.05.금][완료!!!]
    void 맷돌C_번역_함수묶음_수집(char *p문서, char *p함수이름);

    //[2018.10.06.토][완료!!!]
    void 맷돌C_번역_소멸자_수집(char *p문서_d, char *p문서_l, char *p함수이름, char *p이름);

    //[2018.10.06.토][완료!!!]
    void 맷돌C_번역_소멸자_기술(char *p문서_c, char *p문서_d);

    //[2018.10.06.토][완료!!!]
    void 맷돌C_번역_자원_수집(char *p문서, char *경로이름확장자);

    //[2018.10.06.토][완료!!!]
    void 맷돌C_번역_자원_복사(char *p번역_경로, char *p자원목록);


    //[이벤트]
    //{
        //[2018.10.17.수][완료!!!]
        void 맷돌C_번역_이벤트_수집(char *p문서, char *p함수이름, char *p이름, char *p내용);

        //[2018.10.20.토][완료!!!]
        void 맷돌C_번역_이벤트_기술(char *p문서_c, char *p문서_h, char *p문서_e, char *r문서_m, char *r문서_b,
                                //[GUI 전체 종료:기술] 이 들어가는 첫번째 생성 <GForm> 의 [이름].
                                //앞에 "_폼디자인." 이 붙지 않은 [순수:이름].
                                char *pGForm_이름,
                                //사용자가 <이벤트_Close:true> 인 경우는 <true>.
                                //자동 추가된 경우는 <false>.
                                bool  pGForm_이벤트_Close_사용유무);

        //[2018.10.17.수][완료!!!]
        void 맷돌C_번역_이벤트_Main_추가(char *p번역_기본경로, char *p문서);

        //[2018.10.20.토][완료!!!]
        void 맷돌C_번역_이벤트_Main_책갈피_만들기(char *p번역_기본경로, char *p문서);

    //}

    //[모체없는 그림부품]
    //{
        //[2018.10.22.월][완료!!!]
        void 맷돌C_번역_모체없는_그림부품_수집(//<문서_nm>
                                        char *r문서,
                                        //"_폼디자인.xx" 으로 완성된 것.
                                        char *p이름,
                                        //"_GXxx_유효_" 형식으로 완성된 것.
                                        char *p함수이름,
                                        //<""/"모체이름"> 이 들어있음.
                                        char *p내용);

        //[2018.10.22.월][완료!!!]
        void 맷돌C_번역_모달_함수_만들기(char *p문서_nm, char *r문서_nm_c, char *r문서_nm_h);

    //}

    //[2018.10.23.화][완료!!!]
    void 맷돌C_번역_정보_기술(char *p폼디자인_경로이름확장자, char *p번역_기본경로, char *p폼디자인_이름, char *r문서);

    //[2018.10.06.토][완료!!!]
    void 맷돌C_번역_경로문자열_변환(char *p경로문자열, char *r변환결과문자열);

    //[2018.10.13.토][완료!!!]
    void 맷돌C_번역_GUI_기본_복사(char *p번역_기본경로, char *r설계묶음_경로이름확장자);

    //[2018.10.15.월][완료!!!]
    void 맷돌C_번역_설계묶음_문서에_추가(char *p번역_기본경로, char *p번역_경로, char *p설계묶음_경로이름확장자);

//}

//[검증용 함수들]
//{
    //[2018.08.02.목][완료!!!]
    void 폼디자인_제목줄에_문서이름_출력(void);

    void 폼디자인_제목줄에_XY_출력(char  *p접두문자열,
                              int    pX,
                              int    pY);

    //[2018.06.29.금][완료!!!]
    void 검증_문자열_보기(char  *p문자열);

    //[2018.06.29.금][완료!!!]
    void 검증_10진수_보기(char  *p접두문자열, long p값);

    //[2018.06.29.금][완료!!!]
    void 검증_16진수_보기(char  *p접두문자열, long p값);

    void 검증_함수(void);

//}

