³ª. ºÏ¸¶Å© °ü·Ã ÇÔ¼ö

ºÏ¸¶Å© ±â´ÉÀº ´Ù¸¥ ÆíÁý±â´É°ú´Â ±¸º°µÇ´Â ´Ù¼Ò µ¶¸³ÀûÀÎ ±â´ÉÀ̸ç ÀÌ ±â´ÉÀ¸·Î ÀÎÇØ ´Ù¸¥ ÇÔ¼öµéÀÌ ¿µÇâÀ» ¹Þ´Â ºÎºÐÀº °ÅÀÇ ¾ø´Ù. ±×·¡¼­ ÇÔ¼öµµ µû·Î ÇÑ ¼¼Æ®¸¦ ÁغñÇØ¾ß ÇÑ´Ù. ¹°·Ð ÀÌ ÇÔ¼öµéÀº GetRCFromOff, pLine ¹è¿­ µî ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖ´Â À¯Æ¿¸®Æ¼ ÇÔ¼ö³ª Á¤º¸¸¦ Àû±Ø È°¿ëÇÏ°í ÀÖ´Ù. ÀÌ ÇÔ¼öµéÀÌ ÇÏ´Â ÁÖ¿äÇÑ ÀÏÀº arMark ¹è¿­À» °ü¸®ÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ ´Ù¼¸ °³ÀÇ ÇÔ¼ö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ.

 

void ClearBookmark()

{

     int i;

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

          arMark[i]=-1;

     }

     Invalidate(-1);

}

 

void ToggleBookmark(int Para, int Mark)

{

     int r,c;

     int i;

     int state;

 

     if (Para == -1) {

          GetRCFromOff(off,r,c);

          Para=pLine[r].nPara;

     }

    

     if (Mark <= 9) {

          if (arMark[Mark] == -1) {

              arMark[Mark]=Para;

          } else {

              if (arMark[Mark] == Para) {

                   arMark[Mark]=-1;

              } else {

                   arMark[Mark]=Para;

              }

          }

     } else {

          state=FindBookmark(Para);

          if (state == -1) {

              for (i=10;i<MAXBOOKMARK && arMark[i]!=-1;i++);

              if (i==MAXBOOKMARK) {

                   return;

              }

              arMark[i]=Para;

          } else {

              for (i=10;i<MAXBOOKMARK && arMark[i]!=Para;i++);

              arMark[i]=-1;

          }

     }

 

     Invalidate(-1);

}

 

void GotoBookmark(int Mark)

{

     int Para;

     int l,i;

     int r,c;

     int nowPara;

     int Min=1000000,Max=-1,Next=1000000,Prev=-1;

 

     if (Mark<=9) {

          Para=arMark[Mark];

          if (Para == -1) {

              return;

          }

     } else {

          GetRCFromOff(off,r,c);

          nowPara=pLine[r].nPara;

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

              if (arMark[i] == -1)

                   continue;

              Min=min(arMark[i],Min);

              Max=max(arMark[i],Max);

              if (arMark[i] > nowPara) {

                   Next=min(arMark[i],Next);

              }

              if (arMark[i] < nowPara) {

                   Prev=max(arMark[i],Prev);

              }

          }

 

          if (Mark == 10) {

              if (Next == 1000000) {

                   Para=Min;

                   if (Para == 1000000) {

                        return;

                   }

              } else {

                   Para=Next;

              }

          } else {

              if (Prev == -1) {

                   Para=Max;

                   if (Para == -1) {

                        return;

                   }

              } else {

                   Para=Prev;

              }

          }

     }

 

     for (l=0;l<TotalLine;l++) {

          if (pLine[l].nPara == Para)

              break;

     }

 

     GotoLine(l);

}

 

void GotoLine(int Line)

{

     ClearSelection();

     off=GetOffFromRC(Line,0);

     SetCaret();

}

 

int FindBookmark(int Para)

{

     int i;

 

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

          if (arMark[i] == Para) {

              return (i <= 9) ? i:100;

          }

     }

     return -1;

}

 

Á» ¾çÀÌ ¸¹Àºµ¥ Á÷Á¢ ÀÔ·ÂÇÏ´Â °Íº¸´Ù´Â CD-ROM¿¡ ÀÖ´Â ¿¹Á¦¸¦ Àоî¿Í º¹»çÇØ ³Öµµ·Ï ÇÏÀÚ. ÇÔ¼öÀÇ ¿øÇüµµ ¹°·Ð Ãß°¡ÇØ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼öµéÀÌ ¾î¶»°Ô arMark ¹è¿­À» °ü¸®ÇÏ°í arMark  ¹è¿­·ÎºÎÅÍ À̵¿ÇÒ ¹®´Ü¹øÈ£¸¦ ±¸ÇØ ³»´ÂÁö °³º°ÀûÀ¸·Î ºÐ¼®Çغ¸ÀÚ.

ClearBookmark

¸ðµç ºÏ¸¶Å©¸¦ ¸®¼ÂÇÏ¿© ÃʱâÈ­ÇÑ´Ù. Áï, ¸ðµç ºÏ¸¶Å©¸¦ ´Ù Áö¿î´Ù. arMark ¹è¿­¿ä¼Ò´Â ºÏ¸¶Å© ÁöÁ¤ÀÌ ¾øÀ» ¶§ -1ÀÇ °ªÀ» °¡Áöµµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î MAXBOOKMARK±îÁö arMark ¹è¿­À» ¸ðµÎ -1·Î ¸¸µé±â¸¸ ÇÏ¸é µÈ´Ù. È­¸é¿¡ ÀÌ¹Ì Ãâ·ÂµÇ¾î ÀÖ´Â ºÏ¸¶Å© Ç¥½ÄÀ» Áö¿ö¾ß ÇϹǷΠInvalidate ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù.

FindBookmark

Àμö·Î Àü´ÞµÈ Para ¹®´ÜÀÇ ºÏ¸¶Å© ¼³Á¤»óŸ¦ Á¶»çÇÑ´Ù. À̸§ÀÖ´Â ºÏ¸¶Å©°¡ ÀÖ´Ù¸é ±× ¹øÈ£¸¦ ¸®ÅÏÇÏ°í À̸§¾ø´Â ºÏ¸¶Å©°¡ ¼³Á¤µÇ¾î ÀÖÀ¸¸é 100À» ¸®ÅÏÇÑ´Ù. ¾Æ¹« ¼³Á¤µµ ¾øÀ¸¸é -1À» ¸®ÅÏÇÑ´Ù. arMark ¹è¿­ Àüü¸¦ µÚÁ® Para ¹®´ÜÀÌ ÀÖ´ÂÁö Á¶»çÇغ¸°í ÀÖ´Ù¸é, 9 ÀÌÇÏÀÎÁö ¾Æ´ÑÁö Á¶»çÇß´Ù.

ToggleBookmark

arMark ¹è¿­À» °ü¸®ÇÏ´Â ÇÙ½É ÇÔ¼öÀÌ¸ç µÎ °³ÀÇ Àμö¸¦ Àü´Þ¹Þ´Â´Ù. ù ¹ø° Àμö Para´Â ºÏ¸¶Å©¸¦ Åä±ÛÇÒ ¹®´Ü¹øÈ£Àε¥ -1À̸é ÇöÀç ij·µÀÌ ÀÖ´Â À§Ä¡ÀÇ ¹®´ÜÀÌ ´ë»óÀÌ´Ù. µÎ ¹ø° Àμö Mark´Â ¼³Á¤ÇÒ ºÏ¸¶Å©ÀÇ À̸§ÀÌµÇ 100À̸é À̸§¾ø´Â ºÏ¸¶Å©¶ó´Â ¶æÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ È£Ãâ ¿¹¸¦ µé¾î º¸ÀÚ.

 

ToggleBookmark(10,3);               // 10¹ø ¹®´Ü¿¡ 3¹ø ºÏ¸¶Å© Åä±Û

ToggleBookmark(12,100);       // 12¹ø ¹®´Ü¿¡ À̸§¾ø´Â ºÏ¸¶Å© Åä±Û

ToggleBookmark(-1,8);               // ÇöÀç ¹®´Ü¿¡ 8¹ø ºÏ¸¶Å© Åä±Û

 

À̸§¿¡¼­µµ ¾Ë ¼ö ÀÖµíÀÌ ÀÌ ÇÔ¼ö´Â ºÏ¸¶Å©¸¦ ¼³Á¤ÇÏ´Â ÇÔ¼öµµ ¾Æ´Ï°í ÇØÁ¦ÇÏ´Â ÇÔ¼öµµ ¾Æ´Ï¸ç Åä±ÛÇÏ´Â ÇÔ¼öÀÌ´Ù. ¼³Á¤µÇ¾î ÀÖÀ¸¸é ÇØÁ¦ÇÏ°í ÇØÁ¦µÇ¾î ÀÖÀ¸¸é ¼³Á¤ÇÏ´Â µ¿ÀÛÀ» ÇÑ ÇÔ¼ö°¡ ´ã´çÇϴµ¥ »ç¿ëÀÚµéÀÌ ºÏ¸¶Å©ÀÇ ¼³Á¤°ú ÇØÁ¦ ±â´ÉÀ» µû·Î µÎ´Â °Íº¸´Ù´Â Åä±Û¹æ½ÄÀ» ¼±È£Çϱ⠶§¹®ÀÌ´Ù.

¸ÕÀú À̸§ÀÖ´Â ºÏ¸¶Å©ÀÇ °æ¿ì¸¦ º¸ÀÚ. arMark[Mark]°¡ -1À̸é, Áï ÀÌ ¹øÈ£ÀÇ ºÏ¸¶Å©°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é ¿©±â´Ù Para ¹®´Ü¹øÈ£¸¦ ½á ³Ö±â¸¸ ÇÏ¸é µÈ´Ù. ¾ÆÁÖ °£´ÜÇÏ´Ù. ÀÌ ¹øÈ£ÀÇ ºÏ¸¶Å©°¡ ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ìÀÇ Ã³¸®´Â µÎ °æ¿ì°¡ Àִµ¥ Para ¹®´ÜÀ̸é ÇØÁ¦ÇÏ°í ´Ù¸¥ ¹®´ÜÀ̶ó¸é ºÏ¸¶Å©¸¦ À̵¿ÇØ ¿Í¾ß ÇÑ´Ù. À̸§ÀÖ´Â ºÏ¸¶Å©´Â ¹®¼­ Àüü¸¦ ÅëƲ¾î Çϳª¸¸ Á¸ÀçÇϱ⠶§¹®¿¡ µÎ ¹®´ÜÀÌ µ¿½Ã¿¡ °°Àº ¹øÈ£ÀÇ ºÏ¸¶Å©¸¦ °¡Áú ¼ö ¾ø´Ù. ¹Ý´ë·Î ÇÑ ¹®´ÜÀÌ ¿©·¯ °³ÀÇ ºÏ¸¶Å©¸¦ °¡Áö´Â °ÍÀº ±»ÀÌ ¸·À» ÇÊ¿ä°¡ ¾ø´Ù.

À̸§¾ø´Â ºÏ¸¶Å©´Â ´Ü¼øÈ÷ Åä±Û¸¸ ½ÃÅ°¸é µÈ´Ù. ÀÌ ¹®´ÜÀÌ ÀÌ¹Ì ºÏ¸¶Å©¸¦ °¡Áö°í ÀÖÀ¸¸é ÇØÁ¦ÇÏ°í ºÏ¸¶Å©°¡ ¾øÀ¸¸é ¼³Á¤ÇÑ´Ù. À̸§¾ø´Â ºÏ¸¶Å©´Â arMark[10] ~ arMark[99] »çÀÌ¿¡ ±â·ÏµÇ´Âµ¥ °¡Àå ¸ÕÀú ¹ß°ßµÇ´Â ºó ÀÚ¸®¿¡ ÀÌ ¹®´Ü¹øÈ£¸¦ ½á ³Ö±â¸¸ ÇÏ¸é µÈ´Ù. ¸¸¾à arMark[99]±îÁö ºó ÀÚ¸®¸¦ ã¾Ò´Âµ¥ ¹ß°ßµÇÁö ¾Ê´Â´Ù¸é 90°³±îÁö ¸ðµç ºÏ¸¶Å©°¡ ¼³Á¤µÈ °ÍÀ̹ǷΠ´õ ÀÌ»ó ºÏ¸¶Å©¸¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù.

ºÏ¸¶Å©¸¦ ÇØÁ¦ÇÒ ¶§´Â arMark[10]~arMark[99]±îÁö ¼øȸÇϸ鼭 Para ¹®´Ü¹øÈ£¸¦ °¡Áø ¹è¿­¿ä¼Ò¸¦ ã¾Æ -1·Î ¹Ù²Ù¸é µÈ´Ù. ºÏ¸¶Å© ¼³Á¤ÀÌ ¹Ù²ï ÈÄ¿¡´Â È­¸é¿¡ ºÏ¸¶Å© Ç¥½Ã°¡ »èÁ¦µÇ¾î¾ß ÇϹǷΠÀÛ¾÷¿µ¿ªÀ» ´Ù½Ã ±×¸®µµ·Ï ÇÏ¿´´Ù.

GotoLine

Àμö·Î Àü´ÞµÈ Line ÇàÀ¸·Î À̵¿ÇÏ´Â µµ¿ì¹Ì ÇÔ¼öÀÌ´Ù. GetOffFromRC·Î ÁÙÀÇ ¿ÀÇÁ¼ÂÀ» ã°í SetCaretÀ¸·Î ij·µÀ» ¿Å°Ü ÁÖ¾ú´Ù. ±× Àü¿¡ ¼±Åÿµ¿ªÀÌ ÀÖ´Ù¸é À̵¿Çϱâ Àü¿¡ ÇØÁ¦ÇØ¾ß ÇÑ´Ù. ¼³»ç À̵¿ÇÒ À§Ä¡°¡ È­¸é ¹Û¿¡ ¾È º¸ÀÌ´Â °÷¿¡ ÀÖ´õ¶óµµ SetCaretÀÌ ¾Ë¾Æ¼­ ½ºÅ©·ÑÇϵµ·Ï µÇ¾î ÀÖ¾î ÀÌ ÇÔ¼ö°¡ Ưº°È÷ ÇÒ ÀÏÀº ¾ø´Ù.

ºÏ¸¶Å©´Â ¹®´Ü¹øÈ£¿¡ ´ëÇØ ¸Å°ÜÁö´Âµ¥ ºñÇØ ½ÇÁ¦ À̵¿Àº ÁÙ´ÜÀ§·Î ÇØ¾ß Çϱ⠶§¹®¿¡ ÀÌ ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù. ¸¸¾à GetOffFromPara ÇÔ¼ö¸¦ ¹Ì¸® ¸¸µé¾î µÎ¾ú´Ù¸é ±»ÀÌ ÀÌ ÇÔ¼ö°¡ ÇÊ¿äÄ¡ ¾Ê°ÚÁö¸¸ ¹®´Ü °ü·Ã ÇÔ¼ö´Â ÇÑÂü ÈÄ¿¡³ª ¸¸µé¾îÁø´Ù.

GotoBookmark

ºÏ¸¶Å©°¡ ¼³Á¤µÈ °÷À¸·Î À̵¿ÇÑ´Ù. Mark Àμö°¡ 0~9ÀÎ °æ¿ì´Â À̸§ÀÖ´Â ºÏ¸¶Å©·Î À̵¿Ç϶ó´Â ¶æÀÌ°í 10ÀÌ¸é ´ÙÀ½ ºÏ¸¶Å©·Î, 11Àº ÀÌÀü ºÏ¸¶Å©·Î À̵¿Ç϶ó´Â ¶æÀÌ´Ù. À̸§¾ø´Â ºÏ¸¶Å©´Â ¼ø¼­°¡ Àֱ⠶§¹®¿¡ ÇöÀç À§Ä¡¸¦ ±âÁØÀ¸·Î ÀÌÀü, ÀÌÈÄ ºÏ¸¶Å©¸¦ ãÀ» ¼ö ÀÖ´Ù.

À̸§ÀÖ´Â ºÏ¸¶Å©¸¦ ã´Â °ÍÀº ¾ÆÁÖ ½±´Ù. arMark[Mark]¸¦ ÀÐÀ¸¸é ¹®´Ü¹øÈ£¸¦ ¹Ù·Î ±¸ÇÒ ¼ö ÀÖ°í ÀÌ ¹®´ÜÀÌ ¼ÓÇØ ÀÖ´Â ÁÙÀ» ãÀ» ¼ö ÀÖ´Ù. ÀÌ ÁÙÀ» GotoLineÀ¸·Î Àü´ÞÇϱ⸸ ÇÏ¸é µÈ´Ù. ¹°·Ð arMark[Mark]°¡ -1À̸é, Áï ÀÌ ¹øÈ£¿¡ ºÏ¸¶Å©°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾ÊÀ¸¸é ¾Æ¹«°Íµµ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

À̸§¾ø´Â ºÏ¸¶Å©´Â ÇöÀç À§Ä¡¸¦ ±âÁØÀ¸·Î ÀÌÀü ¶Ç´Â ÀÌÈÄ ºÏ¸¶Å©¸¦ ã¾Æ À̵¿Çϴµ¥ Á÷¼± À̵¿ÀÌ ¾Æ´Ï¶ó ¼øȸ¸¦ ÇØ¾ß Çϱ⠶§¹®¿¡ 4°¡Áö À§Ä¡¸¦ Á¶»çÇصξî¾ß ÇÑ´Ù. ¸¶Áö¸· ºÏ¸¶Å© À§Ä¡¿¡¼­ ´ÙÀ½ ºÏ¸¶Å©·Î À̵¿Çϸé ù ¹ø° ºÏ¸¶Å©·Î °¡¾ß ÇÏ°í ù ¹ø° ºÏ¸¶Å©¿¡¼­ ÀÌÀü ºÏ¸¶Å©·Î À̵¿ÇÏ¸é ¸¶Áö¸· À§Ä¡·Î °¡¾ß ÇÑ´Ù. ±×·¡¼­ ÀÌÀü, ÀÌÈÄ ºÏ¸¶Å© À§Ä¡´Â ¹°·ÐÀÌ°í óÀ½, ¸¶Áö¸· ºÏ¸¶Å© À§Ä¡µµ °°ÀÌ Á¶»çÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

10¹øºÎÅÍ 99¹ø±îÁö ·çÇÁ¸¦ µ¹¸ç arMark ¹è¿­ Àüü¸¦ Á¶»çÇÏ¿© óÀ½(Min), ¸¶Áö¸·(Max), ÀÌÀü(Prev), ´ÙÀ½(Next) À§Ä¡¸¦ Á¶»çÇÏ¿´´Ù. »óȲ¿¡ µû¶ó ÀÌ °ªµé Áß ÀϺδ Á¶»çµÇÁö ¾ÊÀ» ¼öµµ Àִµ¥ ¿¹¸¦ µé¾î ÇöÀç ¹®´ÜÀÌ ¸¶Áö¸· ¹®´ÜÀ̶ó¸é ´ÙÀ½ ºÏ¸¶Å©´Â ¾ø´Ù. ÀÌ·¸°Ô Á¶»çµÈ °ªÀ» ÂüÁ¶ÇÏ¿© ÀÌÀü, ÀÌÈÄ ºÏ¸¶Å© ¹®´Ü¹øÈ£¸¦ ã¾Ò´Ù. ´ë»ó ¹®´Ü¹øÈ£¸¦ ã¾ÒÀ¸¸é ÁÙ¹øÈ£¸¦ ã°í GotoLine ÇÔ¼ö·Î À̵¿ÇÏ¸é µÈ´Ù.