

#include <vcl.h>
#pragma hdrstop


#include  "API_Ide_Gprj.h"

#include  "vmos_def.h"
#include  "vmos.h"
#include  "c_define.h"

#include  "ide_library.h"

#include  "database.h"


void __fastcall _API_Ide_Gprj_PathNameExt(void)
{
  //[2018.10.09.화][생성!!!]{--------------------------------------
  //[맷돌-IDE] 에서 연 [설계묶음<*.gprj>] [경로/이름/확장자] 얻기.
  //}--------------------------------------------------------------

  //[VAR]
  //{
      //[기본]
      //{
          class  VMOS  *vmos;

          //<@LOCAL> 을 기본으로 한 [절대주소](대문자로 절대주소임을 구분하자).
          DTU8   ADR;

      //}
        
      //[API]
      //{
          //주소는 전부 MCU 상의 주소다.
          DTU8  rPathNameExt;
          DTU8  rPath;
          DTU8  rNameExt;
          DTU8  rName;

      //}

  //}

  //[VMOS 위치 얻기]{--
  VMOS_GetPtr(&vmos);
  //}------------------

  //[함수형]{--------------------------------------------------
  //void _Ide_설계묶음_경로이름확장자_(char  *r경로이름확장자,
  //                                   char  *r경로,
  //                                   char  *r이름확장자,
  //                                   char  *r이름);
  //}----------------------------------------------------------

  //[기본주소 얻기]
  //{
      //[!]{--------------------------------------------------------
      //<@LOCAL> 과 같은 [절대주소] 값.
      //함수 [인수] 등 모든 지역변수는 <@LOCAL> 부터 시작되기 때문.
      //첫번째 [지역변수(인수포함)] 의 [절대주소] 가 된다.
      //}-----------------------------------------------------------

      ADR = (vmos->regREG_[d_VM_Reg_LOCAL]);

  //}

  //[char  *r경로이름확장자]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&rPathNameExt)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(rPathNameExt, &rPathNameExt);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[char  *r경로]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&rPath)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(rPath, &rPath);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[char  *r이름확장자]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&rNameExt)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(rNameExt, &rNameExt);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[char  *r이름]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&rName)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(rName, &rName);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[명령처리]
  //{
      Ide_GprjFile_Get_PathNameExt((char *)rPathNameExt,
                                   (char *)rPath,
                                   (char *)rNameExt,
                                   (char *)rName);
                          
  //}

}

void __fastcall _API_Ide_Gprj_Add_C(void)
{
  //[2018.10.11.목][생성!!!]
  //[2018.10.15.월][수정!!!]

  //[VAR]
  //{
      //[기본]
      //{
          class  VMOS  *vmos;

          //<@LOCAL> 을 기본으로 한 [절대주소](대문자로 절대주소임을 구분하자).
          DTU8   ADR;

      //}

      //[API]
      //{
          //주소는 전부 MCU 상의 주소다.
          DTU8  pGprj_PathNameExt;
          //[2018.10.15.월][추가!!!]{---
          DTU8  pInsertPosStr;
          //}---------------------------
          DTU8  pC_PathNameExt;

          DTU1  rReturn;

      //}

  //}

  //[VMOS 위치 얻기]{--
  VMOS_GetPtr(&vmos);
  //}------------------

  //[함수형]{-------------------------------------------------------------------
  //unsigned char _Ide_설계묶음_문서에_C_추가_(char  *p설계묶음_경로이름확장자,
  //                                           char  *p끼워넣을_위치의_문자열,
  //                                           char  *pC_경로이름확장자_목록);
  //}---------------------------------------------------------------------------

  //[기본주소 얻기]
  //{
      //[!]{--------------------------------------------------------
      //<@LOCAL> 과 같은 [절대주소] 값.
      //함수 [인수] 등 모든 지역변수는 <@LOCAL> 부터 시작되기 때문.
      //첫번째 [지역변수(인수포함)] 의 [절대주소] 가 된다.
      //}-----------------------------------------------------------

      ADR = (vmos->regREG_[d_VM_Reg_LOCAL]);

  //}

  //[char  *p설계묶음_경로이름확장자]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&pGprj_PathNameExt)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(pGprj_PathNameExt, &pGprj_PathNameExt);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[char  *p끼워넣을_위치의_문자열]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&pInsertPosStr)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(pInsertPosStr, &pInsertPosStr);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[char  *pC_경로이름확장자_목록]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&pC_PathNameExt)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(pC_PathNameExt, &pC_PathNameExt);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[명령처리]
  //{
      //[2018.10.15.월][수정!!!]
      rReturn = Ide_GprjFile_Add_C((char *)pGprj_PathNameExt, (char *)pInsertPosStr, (char *)pC_PathNameExt);

  //}

  //[반환]
  //{
      //[값] 쓰기.
      if(vmos->VMOS_WrRd(d_Wr, ADR, (1), (DTU1 *)(&rReturn)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

  //}

}

void __fastcall _API_Ide_Gprj_Add_Glib(void)
{
  //[2018.10.11.목][생성!!!]

  //[VAR]
  //{
      //[기본]
      //{
          class  VMOS  *vmos;

          //<@LOCAL> 을 기본으로 한 [절대주소](대문자로 절대주소임을 구분하자).
          DTU8   ADR;

      //}

      //[API]
      //{
          //주소는 전부 MCU 상의 주소다.
          DTU8  pGprj_PathNameExt;
          DTU8  pGlib_Name;

          DTU1  rReturn;

      //}

  //}

  //[VMOS 위치 얻기]{--
  VMOS_GetPtr(&vmos);
  //}------------------

  //[함수형]{--------------------------------------------------------------------------
  //unsigned char _Ide_설계묶음_문서에_함수묶음_추가_(char  *p설계묶음_경로이름확장자,
  //                                                  char  *p함수묶음_이름_목록);
  //}----------------------------------------------------------------------------------

  //[기본주소 얻기]
  //{
      //[!]{--------------------------------------------------------
      //<@LOCAL> 과 같은 [절대주소] 값.
      //함수 [인수] 등 모든 지역변수는 <@LOCAL> 부터 시작되기 때문.
      //첫번째 [지역변수(인수포함)] 의 [절대주소] 가 된다.
      //}-----------------------------------------------------------

      ADR = (vmos->regREG_[d_VM_Reg_LOCAL]);

  //}

  //[char  *p설계묶음_경로이름확장자]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&pGprj_PathNameExt)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(pGprj_PathNameExt, &pGprj_PathNameExt);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[char  *p함수묶음_이름_목록]
  //{
      //[절대주소] 읽기.
      if(vmos->VMOS_WrRd(d_Rd, ADR, (8), (DTU1 *)(&pGlib_Name)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

      //<Ide> 내부적으로만 사용되므로 바로 실제 주소로 바꾼다.
      vmos->VMOS_Conv_AdrToSysAdr(pGlib_Name, &pGlib_Name);

      //[다음 주소 계산]{----------
      //현재 [인수] 크기를 더한다.
      ADR += (8);
      //}--------------------------

  //}

  //[명령처리]
  //{
      rReturn = Ide_GprjFile_Add_Glib((char *)pGprj_PathNameExt, (char *)pGlib_Name);

  //}

  //[반환]
  //{
      //[값] 쓰기.
      if(vmos->VMOS_WrRd(d_Wr, ADR, (1), (DTU1 *)(&rReturn)) != true)
      { vmos->regSysFuncCallResult = d_False; return; }

  //}

}

