¶ó. ºÏ¸¶Å© °ü¸®

¿©±â±îÁö ÀÛ¼ºÇÑ ÈÄ ºÏ¸¶Å© ±â´ÉÀ» Å×½ºÆ®Çغ¸¸é ±×·°Àú·° Á¦´ë·Î µ¿ÀÛÇÑ´Ù. ±×·¯³ª ºÏ¸¶Å©¸¦ ¼³Á¤ÇÑ Ã¤·Î ¹®¼­¸¦ ÆíÁýÇÒ ¶§ ºÏ¸¶Å©ÀÇ À§Ä¡°¡ º¯°æµÇ¹Ç·Î Á¶Á¤ÇØ¾ß ÇÑ´Ù. ºÏ¸¶Å© Á¤º¸´Â arMark ¹è¿­¿¡ µû·Î °ü¸®µÇ´Âµ¥ ¹®¼­°¡ ÆíÁýµÇ¸é ÀÌ Á¤º¸°¡ ¹«È¿ÇØÁú ¼ö Àֱ⠶§¹®ÀÌ´Ù.

¿¹¸¦ µé¾î À§ÀÇ ±×¸²¿¡¼­ 2¹ø ºÏ¸¶Å©´Â 4¹ø ¹®´ÜÀ» °¡¸®Å°°í ÀÖÀ¸¹Ç·Î arMark[2]´Â 4ÀÇ °ªÀ» °¡Áö°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ »óÅ¿¡¼­ 3¹ø ¹®´Ü ¾Õ¿¡ ¿£ÅÍÄڵ带 ÀÔ·ÂÇϸé 4¹ø ¹®´ÜÀÌ 5¹ø ¹®´ÜÀ¸·Î ³»·Á°¡°Ô µÇ°í ÀÌ·¸°Ô µÇ¸é arMark[2]°¡ °¡¸®Å°°í ÀÖ´Â ¹®´Ü¹øÈ£´Â Ʋ¸®°Ô µÈ´Ù. »èÁ¦ÇÒ ¶§µµ ¸¶Âù°¡Áö·Î ºÏ¸¶Å©°¡ ¼³Á¤µÈ ¹®´Ü ¾ÕÀÇ ¹®´ÜÀÌ »ç¶óÁö¸é ¹®´Ü¹øÈ£°¡ Çϳª °¨¼ÒÇÏ°Ô µÈ´Ù.

ÀÌ·± ¹®Á¦ ¶§¹®¿¡ ºÏ¸¶Å©´Â ÇÑ ¹ø ¼³Á¤Çسõ°í ±×´ë·Î µÑ ¼ö ¾øÀ¸¸ç ¹®¼­ ³»¿ëÀÌ ÆíÁýµÇ¸é arMark°¡ °¡Áø Á¤º¸ Áß º¯°æµÇ¾î¾ß ÇÒ ºÎºÐÀ» ã¾Æ °°ÀÌ º¯°æÇØ¾ß ÇÑ´Ù. »ðÀÔ, »èÁ¦´Â Insert, Delete¿¡¼­ ÀϾ¹Ç·Î ÀÌ ÇÔ¼ö¿¡¼­ ºÏ¸¶Å© Á¤º¸¸¦ °ü¸®Çϵµ·Ï ÇÏÀÚ.

 

void Insert(int nPos, TCHAR *str)

{

     int len;

     int movelen;

    int nCrLf=0,i;

    int r,c;

    int nowPara;

    TCHAR *p=str;

 

     len=lstrlen(str);

     if (len==0) return;

     movelen=lstrlen(buf+nPos)+1;

     memmove(buf+nPos+len,buf+nPos,movelen);

     memcpy(buf+nPos,str,len);

     bLineEnd=FALSE;

     UpdateLineInfo();

     UpdateScrollInfo();

 

    while (*p) {

        if (*p==¡®\r¡¯)

           nCrLf++;

        p++;

    }

 

    if (nCrLf) {

        GetRCFromOff(nPos,r,c);

        nowPara=pLine[r].nPara;

        if (c != 0) {

           nowPara++;

        }

 

        for (i=0;i<MAXBOOKMARK;i++) {

           if (arMark[i] >= nowPara) {

               arMark[i]+=nCrLf;

           }

        }

    }

}

 

»ðÀԵǴ ¹®ÀÚµé Áß ´Ù¸¥ ¹®ÀÚ´Â ºÏ¸¶Å©¿¡ ÀüÇô ¿µÇâÀ» ÁÖÁö ¾Ê´Â´Ù. ´Ù¸¸ °³ÇàÄڵ常ÀÌ ¹®´Ü¹øÈ£¿¡ ¿µÇâÀ» ÁÙ »ÓÀÌ´Ù. Insert ÇÔ¼ö´Â ¹®¼­¿¡ ¹®ÀÚ¿­À» »ðÀÔÇϱâ Àü¿¡ ¿£ÅÍÄڵ尡 ¸î °³³ª µé¾î°¡´ÂÁö ¼¼¾î º»´Ù. ±×¸®°í ¸¸¾à ¿£ÅÍÄڵ尡 Çϳª¶óµµ »ðÀԵǾú´Ù¸é ÇöÀç ¹®´Ü ÀÌÈÄ¿¡ ÀÖ´Â ¸ðµç ºÏ¸¶Å©¸¦ »ðÀÔµÈ ¿£ÅÍÄÚµå °³¼ö¸¸Å­ µÚ·Î À̵¿½ÃÄÑ ÁÖ¾ú´Ù. ÀÌ Á¶Á¤ ´ë»ó¿¡ ÇöÀç ¹®´Üµµ Æ÷ÇԵǴ°¡ ¾Æ´Ñ°¡´Â ¿£Å͸¦ ´©¸¥ À§Ä¡¿¡ µû¶ó ´Þ¶óÁø´Ù.

¹®´ÜÀÇ ¼±µÎ¿¡¼­ ¿£Å͸¦ ´­·¶´Ù¸é ÀÌ ¹®´ÜÀÇ ¹øÈ£°¡ Çϳª Áõ°¡µÇ¹Ç·Î ÀÌ ¹®´ÜÀ» °¡¸®Å°´Â ºÏ¸¶Å©µµ °°ÀÌ Áõ°¡µÇ¾î¾ß ÇÑ´Ù. ¹Ý¸é ¹®´ÜÀÇ Áß°£Âë¿¡¼­ ¿£Å͸¦ ´­·¶´Ù¸é ÀÌ ¹®´ÜÀÇ ÀϺΰ¡ ¾ÆÁ÷ ³²¾Æ ÀÖÀ¸¹Ç·Î ºÏ¸¶Å©´Â ±×´ë·Î À¯ÁöµÈ´Ù. ºÏ¸¶Å©°¡ Á¤È®ÇÏ°Ô ¹®´ÜÀÇ ¾îµðÂëÀ» °¡¸®Å°°í Àִ°¡¿¡ µû¶ó ÇöÀç ¹®´ÜÀÇ ºÏ¸¶Å© Á¶Á¤ ¿©ºÎ°¡ ´Þ¶óÁö´Âµ¥ ApiEdit´Â ºÏ¸¶Å©°¡ ¹®´ÜÀÇ ¼±µÎ¸¦ °¡¸®Å°°í ÀÖ´Â °ÍÀ¸·Î Á¤ÀÇÇÑ´Ù. Deleteµµ ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î ºÏ¸¶Å©¸¦ °ü¸®ÇÑ´Ù.

 

void Delete(int nPos, int nCount)

{

     int movelen;

    int nCrLf=0,i;

    int sr,sc,er,ec;

    int sPara,ePara;

    TCHAR *p=buf+nPos;

 

     if (nCount == 0) return;

     if (lstrlen(buf) < nPos+nCount) return;

 

    for (i=0;i<nCount;i++) {

        if (p[i]==¡®\r¡¯)

           nCrLf++;

    }

 

    if (nCrLf) {

        GetRCFromOff(nPos,sr,sc);

        sPara=pLine[sr].nPara;

        GetRCFromOff(nPos+nCount,er,ec);

        ePara=pLine[er].nPara;

 

        for (i=0;i<MAXBOOKMARK;i++) {

           if (arMark[i] >= sPara && arMark[i] < ePara) {

               arMark[i]=-1;

           }

           if (arMark[i] >= ePara) {

               arMark[i]-=nCrLf;

           }

        }

    }

 

     movelen=lstrlen(buf+nPos+nCount)+1;

     memmove(buf+nPos, buf+nPos+nCount, movelen);

     UpdateLineInfo();

     UpdateScrollInfo();

}

 

»èÁ¦µÇ´Â ¹®ÀÚ Áß¿¡ °³ÇàÄڵ尡 ÀÖ´ÂÁö º¸°í ±× °³¼ö¸¸Å­ ºÏ¸¶Å©¸¦ ¾ÕÀ¸·Î À̵¿½ÃÅ°¸é µÈ´Ù. Insert¿Í´Â ´Þ¸® Delete´Â °³Ç๮ÀÚ¸¦ ¸ÕÀú »èÁ¦ÇÏ¸é ºÏ¸¶Å©¸¦ ¾î¶»°Ô Á¶Á¤ÇØ¾ß ÇÏ´ÂÁö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ ¸ÕÀú Á¶Á¤ÇÑ ÈÄ ¹®ÀÚ¿­À» »èÁ¦ÇØ¾ß ÇÑ´Ù. ÀÌÁ¦ ½ÇÇàÇغ¸¸é ¹®¼­°¡ ÆíÁýµÇ¾îµµ ºÏ¸¶Å©´Â Ç×»ó Á¦ÀÚ¸®¸¦ À¯ÁöÇÒ °ÍÀÌ´Ù.