À̵¿: Home à book02 à book0211

 

ÁÖ¼Ò: http://www.kernel.bz/book/02/book0211.htm

 

Á¦¸ñ: ¿µ¾îÇнÀ±â ±¸Çö2

ÀÌÆäÀÌÁö ÀúÀÛ±ÇÀº ÀúÀÚ¿¡°Ô ÀÖÀ½.

ÀúÀÚ: Á¤ÀçÁØ(rgbi3307(at)nate.com)

ÃÖ±Ù¼öÁ¤ÀÏ:2010-06-06

 

 

 

 

¸®´ª½º ÀÓº£µðµåº¸µå¿¡¼­ ¿µ¾îÇнÀ±â ±¸Çö¹æ¹ý (11)

¿µ¾îÇнÀ±â ±¸Çö2

 

¸®´ª½º ÀÓº£µðµåº¸µå ±¸Á¶ ÀÌÇØ¸¦ ¹ÙÅÁÀ¸·Î °³¹ßȯ°æÀ» ±¸ÃàÇϰí, µð¹ÙÀ̽º µå¶óÀ̹ö ÀÛ¼º ¹× ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö ¹æ¹ýÀ» ÀÍÇô¼­, ¸®´ª½º ÀÓº£µðµåº¸µå¿¡¼­ ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇØ º¸µµ·Ï ÇÏÀÚ.  ÇÊÀÚ°¡ °ü·Ã±â¼úµéÀ» ü°èÀûÀ¸·Î ÇнÀÇÏ°í ½Ç½ÀÇÑ ³»¿ëÀ¸·Î ÀÓº£µðµåº¸µå¿¡ ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇÑ »ç·Ê¸¦ µ¶ÀÚ ¿©·¯ºÐµé°ú °øÀ¯ÇϰíÀÚ ÇÑ´Ù.  ³»¿ëÀ» µÇµµ·ÏÀ̸é Á¤È®ÇÏ°Ô Àü´ÞÇϰíÀÚ ³ë·ÂÇßÀ¸¸ç, µ¶ÀÚ ¿©·¯ºÐµéÀÇ ¸¹Àº °ü½É°ú °Ý·Á Àֱ⸦ ¹Ù¶õ´Ù.  ÇÊÀÚÀÇ ÀÛÀº ³ë·ÂÀÌ °ü·Ã ±â¼úºÐ¾ß¿¡¼­ ÇÑÁÜÀÇ ¹Îµé·¹ ²É¾¾°¡ µÇ¾úÀ¸¸é ÇÑ´Ù.

±Û: Á¤ÀçÁØ / rgbi3307@nate.com / Ä¿³Î¿¬±¸È¸(www.kernel.bz)

 

 

¿¬Àç Â÷·Ê

1. ÀÓº£µðµåº¸µå ±¸Á¶

2. ºÎÆ®·Î´õ ÀÌÇØ

3. ¸®´ª½º Ä¿³ÎÆ÷ÆÃ

4. µð¹ÙÀ̽º µå¶óÀ̹ö ÀÌÇØ1

5. µð¹ÙÀ̽º µå¶óÀ̹ö ÀÌÇØ2

6. µð¹ÙÀ̽º µå¶óÀ̹ö ÀÌÇØ3

7. ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö1

8. ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö2

9. ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö3

10.¿µ¾îÇнÀ±â ±¸Çö1

11.¿µ¾îÇнÀ±â ±¸Çö2

 

°³¿ä

¸®´ª½º ÀÓº£µðµåº¸µå¿¡ ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇÏ´Â ¹æ½ÄÀº ¿©·¯°¡Áö°¡ ÀÖÀ» ¼ö ÀÖÀ¸¸ç, ½ÃÀå¿¡ ¸¹Àº ÇÁ·Î±×·¥µéÀÌ Ãâ½Ã µÇ¾î ÀÖ´Ù.

ÀüÀÚ»çÀü½Ä ¾îÈÖ ¾Ï±â ÇÁ·Î±×·¥.

¿µ¾î ¹®ÀåÀ» ¹Ýº¹ÇÏ¿© ¾Ï±âÇϵµ·Ï ÇÏ´Â ÇÁ·Î±×·¥.

¿µ¾î µ¿È­¸¦ µè°í µû¶óÇÏ´Â ÇÁ·Î±×·¥.

¿µ¾î¸¦ µè°í ÀÐ°í ¸»ÇÏ°í ¾²´Â ÇÁ·Î±×·¥.

¿µ¾îÇнÀ ÇÁ·Î±×·¥Àº ÀüÀÚ»çÀü µ¥ÀÌÅÍ Ã³¸® ¾Ë°í¸®Áò, ÇнÀÈ¿°ú¸¦ ³ôÀ̱â À§ÇÑ ½Ãû°¢ ÀÚ·áó¸®, ´Ù¾çÇÑ ÀÔÃâ·ÂÀåÄ¡ Á¦¾î, ¿µ¾îÇнÀ ½Ã³ª¸®¿ÀµîÀÌ Àß ±¸¼ºµÇ¾î¾ß ÇÑ´Ù.  ¿µÈ­³ª °ÔÀÓÀÇ ½Ã³ª¸®¿Àó·³ ¿µ¾îÇнÀ ½Ã³ª¸®¿À ¶ÇÇÑ ´Ù¾çÇÑ ³»¿ëµéÀÌ ÀÖÀ» ¼ö ÀÖÀ¸¸ç, ÇÊÀÚ´Â ¿µ¾îÇнÀ±â ½Ã³ª¸®¿À Áß½ÉÀ¸·Î ÇÊÀÚ°¡ °³¹ßÇÑ ³»¿ëÀ» °øÀ¯ÇϰíÀÚ ÇÑ´Ù.

 

¿µ¾îÇнÀ±â ½Ã³ª¸®¿À

ÇÊÀÚ´Â ¾Æ·¡¿Í °°Àº ³»¿ëÀ¸·Î ¿µ¾îÇнÀ±â ½Ã³ª¸®¿À¸¦ ±¸¼ºÇß´Ù.  ¿µ¾îÇнÀ±â ¸ÞÀÎ ¸Þ´º¶ó°í º¼ ¼öµµ ÀÖ´Ù.

 

»ç¶÷ÀÇ À̸§À» ÀÌÇØÇÕ´Ï´Ù.(¸í»ç)

»ç¹°ÀÇ À̸§À» ÀÌÇØÇÕ´Ï´Ù.

¼ö·®¿¡ ´ëÇØ¼­ ÀÌÇØÇÕ´Ï´Ù.(º¹¼ö)

»ç¶÷°ú »ç¹°À» ²Ù¸çÁÖ´Â ¸»À» ÇÕ´Ï´Ù.(Çü¿ë»ç)

Àå¼Ò¿Í À§Ä¡¿¡ ´ëÇØ¼­ À̾߱â ÇÕ´Ï´Ù.(ÀüÄ¡»ç)

¼³¸íÇÏ´Â ¸»À» ÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç)

´ë»óÀ» º¸Ãæ¼³¸í ÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç,º¸¾î)

¸ñÀû¾î°¡ ÀÖ´Â ¸»À» ÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç,¸ñÀû¾î)

¸ñÀû ´ë»óÀÌ ¿©·¯ °³ÀÎ ¸»À» ÇÕ´Ï´Ù.(°£Á¢,Á÷Á¢¸ñÀû¾î)

¸ñÀû ´ë»óÀ» º¸ÃæÇÏ¿© À̾߱âÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç,¸ñÀû¾î,º¸¾î)

Áú¹®ÇÏ´Â ¸»À» ÇÕ´Ï´Ù.(Àǹ®¹®)

ÇൿÀ» °­Á¶ÇÏ´Â ¸»À» ÇÕ´Ï´Ù.(Á¶µ¿»ç)

¿©·¯°¡Áö ¸»À» ºÎ¼öÀûÀ¸·Î Ãß°¡ÇÕ´Ï´Ù.(ºÎ»ç)

À̾߱⠴ë»óÀ» ´Ù¾çÇÏ°Ô Ç¥ÇöÇÕ´Ï´Ù.(µ¿¸í»ç,ºÐ»ç,ºÎÁ¤»ç)

ÁøÇà°ú ¿Ï·á¸¦ ±¸ºÐÇÕ´Ï´Ù.(ÁøÇàÇü,¿Ï·áÇü)

°ú°Å¿Í ¹Ì·¡¿¡ ´ëÇØ¼­ À̾߱âÇÕ´Ï´Ù.(½ÃÁ¦)

¿©·¯°¡Áö ¹®ÀåÀ» ¿¬°áÇÏ¿© À̾߱âÇÕ´Ï´Ù.(Á¢¼Ó»ç,°ü°è»ç)

»ç¹°À» »ó¼¼ÇÏ°Ô ¼³¸íÇϰí Ãß»óÀûÀΠǥÇöµµ ÇÕ´Ï´Ù.(Ç¥Çö,Ãß»ó)

Ã¥À» Àаí ÀÌÇØÇÕ´Ï´Ù.(µ¶ÇØ)

 

¾Æ·¡ ±×¸²Àº À§ÀÇ ¿µ¾îÇнÀ±â ½Ã³ª¸®¿À(¸ÞÀÎ ¸Þ´º)¸¦ ¸®´ª½º ÀÓº£µðµåº¸µåÀÇ Graphic User Interface·Î ±¸ÇöÇÑ °ÍÀ» ÄÕÃÄÇÑ °ÍÀÌ´Ù.

±×¸²1. ¿µ¾îÇнÀ±â ¸ÞÀÎ ¸Þ´º(À̹ÌÁöÆÄÀÏ: ch11_001.jpg)

 

À§ÀÇ ¸Þ´º°¡ ½ÃÀ۵Ǵ main ÇÔ¼ö ¼Ò½º ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

int main (void)

{      

        //ÀÔÃâ·Â¶óÀ̺귯¸®¼³Á¤

        if (devio_setting () < 0) return -1;

 

        //È­¸éÁÂÇ¥¼³Á¤

        screen_coordinate ();

       

        //ÆÄÀÏ¿¡¼­ÇнÀ¸ñ·ÏÀбâ

        listChapter = wp_chapter_create ("eng_index.dat");

        if (!listChapter) return -1;

       

        idxPage = 1;

        idxChapter = 1;

 

        //ÇнÀÆäÀÌÁö¸Þ´º

        menu_chapter_view (idxPage, 0);

 

        //Àüü¹Ýº¹(¸Å°³º¯¼ö0)

        word_page_auto_start (0);

 

    while (1)

    {

               if (ex_loop ())

               {

                       ex_print_error ("ex_loop(): error!\n");

                       return -1;

               }

    }

 

        //ÇÒ´çÇØÁ¦

        if (queueWordPage) destroyQueue (queueWordPage);

        if (listChapter) destroyList (listChapter);

       

        gx_release_dc (dcScreen);

    gx_close ();

    return 0;

}

 

À§ÀÇ ¿µ¾îÇнÀ ¸Þ´ºÀÇ Æ¯Â¡Àº ÇÁ·Î±×·¥ ³»ºÎÄڵ忡 °íÁ¤µÇ¾î ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¿ÜºÎ µ¥ÀÌÅÍÆÄÀÏÀ» ÆíÁýÇÏ¿© »ç¿ëÀÚ°¡ ¿øÇϴ´ë·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.  À§ÀÇ ¼Ò½º Äڵ忡¼­ wp_chapter_create () ÇÔ¼ö¿¡ ¸Å°³º¯¼ö·Î Àü´ÞÇÏ´Â ¡°eng_index.dat¡± ÆÄÀÏ¸í¿¡ ¿µ¾îÇнÀ ¸Þ´º ¸ñ·ÏÀÌ ÀÖ´Ù.

 

 

¿µ¾îÇнÀ ½Ã³ª¸®¿À(¸Þ´º) Àбâ

¿µ¾îÇнÀ ¸Þ´º µ¥ÀÌÅÍ ÆÄÀÏ(¡°eng_index.dat¡±)ÀÇ ³»¿ëÀº ¾Æ·¡¿Í °°´Ù.  ÀÌ ÆÄÀÏÀ» »ç¿ëÀÚ°¡ ÆíÁýÇÏ¿© ¿øÇÏ´Â ¿µ¾îÇнÀ ½Ã³ª¸®¿À(¸Þ´º)¸¦ ±¸¼ºÇÒ ¼ö ÀÖ´Ù.

 

//COMMENT----------------------------------------------------------------------

//#ºÐ·ù¹øÈ£(´ë,Áß,¼ÒºÐ·ù)

//space=¿ÞÂʹ®ÀÚ¿©¹é(±ÛÀÚ¼ö´ÜÀ§)

//title=ÇнÀÁ¦¸ñ(ÃÖ´ëÀÚ,ÇѱÛÀÚ)

//path=°æ·Î(Àý´ë°æ·Î,ÃÖ´ëÀÚ)

//file=µ¥ÀÌÅÍÆÄÀϸí(ÃÖ´ëÀÚ)

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

#START

#0101

space=0

title=»ç¶÷ÀÇÀ̸§À»ÀÌÇØÇÕ´Ï´Ù.(¸í»ç)

path=/mnt/usb2/ebook/data/eng/ch01/

file=ch0101.dat

 

#0102

space=2

title=»ç¹°ÀÇÀ̸§À»ÀÌÇØÇÕ´Ï´Ù.

path=/mnt/usb2/ebook/data/eng/ch01/

file=ch0102.dat

 

#0103

space=2

title=¼ö·®¿¡´ëÇØ¼­ÀÌÇØÇÕ´Ï´Ù.(º¹¼ö)

path=/mnt/usb2/ebook/data/eng/ch01/

file=ch0103.dat

 

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

#02

space=0

title=»ç¶÷°ú»ç¹°À»²Ù¸çÁִ¸»À»ÇÕ´Ï´Ù.(Çü¿ë»ç)

path=/mnt/usb2/ebook/data/eng/ch02/

file=ch0201.dat

#03

space=0

title=Àå¼Ò¿ÍÀ§Ä¡¿¡´ëÇØ¼­À̾߱âÇÕ´Ï´Ù.(ÀüÄ¡»ç)

path=/mnt/usb2/ebook/data/eng/ch03/

file=ch0301.dat

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

#0401

space=0

title=¼³¸íÇϴ¸»À»ÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç)

path=/mnt/usb2/ebook/data/eng/ch04/

file=ch0401.dat

#0402

space=2

title=´ë»óÀ»º¸Ãæ¼³¸íÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç,º¸¾î)

path=/mnt/usb2/ebook/data/eng/ch04/

file=ch0402.dat

#0403

space=2

title=¸ñÀû¾î°¡Àִ¸»À»ÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç,¸ñÀû¾î)

path=/mnt/usb2/ebook/data/eng/ch04/

file=ch0403.dat

#0404

space=2

title=¸ñÀû´ë»óÀÌ¿©·¯°³Àθ»À»ÇÕ´Ï´Ù.(°£Á¢,Á÷Á¢¸ñÀû¾î)

path=/mnt/usb2/ebook/data/eng/ch04/

file=ch0404.dat

#0405

space=2

title=¸ñÀû´ë»óÀ»º¸ÃæÇÏ¿©À̾߱âÇÕ´Ï´Ù.(ÁÖ¾î,µ¿»ç,¸ñÀû¾î,º¸¾î)

path=/mnt/usb2/ebook/data/eng/ch04/

file=ch0405.dat

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

#05

space=0

title=Áú¹®Çϴ¸»À»ÇÕ´Ï´Ù.(Àǹ®¹®)

path=/mnt/usb2/ebook/data/eng/ch05/

file=ch0501.dat

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

#06

space=0

title=ÇൿÀ»°­Á¶Çϴ¸»À»ÇÕ´Ï´Ù.(Á¶µ¿»ç)

path=/mnt/usb2/ebook/data/eng/

file=ch0601.dat

#07

space=0

title=¿©·¯°¡Áö¸»À»ºÎ¼öÀûÀ¸·ÎÃß°¡ÇÕ´Ï´Ù.(ºÎ»ç)

path=/mnt/usb2/ebook/data/eng/

file=ch0701.dat

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

#0801

space=0

title=À̾߱â´ë»óÀ»´Ù¾çÇϰÔÇ¥ÇöÇÕ´Ï´Ù.(µ¿¸í»ç,ºÐ»ç,ºÎÁ¤»ç)

path=/mnt/usb2/ebook/data/eng/ch08/

file=ch0801.dat

#0802

space=2

title=ÁøÇà°ú¿Ï·á¸¦±¸ºÐÇÕ´Ï´Ù.(ÁøÇàÇü,¿Ï·áÇü)

path=/mnt/usb2/ebook/data/eng/ch08/

file=ch0802.dat

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

#09

space=0

title=°ú°Å¿Í¹Ì·¡¿¡´ëÇØ¼­À̾߱âÇÕ´Ï´Ù.(½ÃÁ¦)

path=/mnt/usb2/ebook/data/eng/

file=ch0901.dat

#10

space=0

title=¿©·¯°¡Áö¹®ÀåÀ»¿¬°áÇÏ¿©À̾߱âÇÕ´Ï´Ù.(Á¢¼Ó»ç,°ü°è»ç)

path=/mnt/usb2/ebook/data/eng/

file=ch1001.dat

#11

space=0

title=»ç¹°À»»ó¼¼ÇϰԼ³¸íÇÕ´Ï´Ù.(Ç¥Çö)

path=/mnt/usb2/ebook/data/eng/

file=ch1101.dat

#12

space=0

title=Ã¥À»ÀаíÀÌÇØÇÕ´Ï´Ù.(µ¶ÇØ)

path=/mnt/usb2/ebook/data/eng/

file=ch1201.dat

#END

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

 

°¢°¢ÀÇ Çà ±¸ºÐÀÚ¸¦ ¼³¸íÇϸé, #¹øÈ£´Â ¿µ¾îÇнÀ¸ñ·Ï ¹øÈ£ÀÌ´Ù.  space=´Â ¿µ¾îÇнÀ Á¦¸ñÀÌ ½ºÅ©¸°¿¡ Ãâ·ÂµÉ ¶§ ¿ÞÂÊ¿©¹éÀÇ ¼öÀÌ´Ù.  title=´Â ¿µ¾îÇнÀ Á¦¸ñÀÌ¸ç »ç¿ëÀÚ°¡ ÇнÀ ÁÖÁ¦¸¦ Á¤ÇÏ¿© ¿©±â¿¡ Ç¥½ÃÇÑ´Ù.  path=´Â ¿µ¾îÇнÀ ÁÖÁ¦ µ¥ÀÌÅÍÆÄÀÏÀÌ ÀúÀåµÇ¾î ÀÖ´Â °æ·ÎÀ̸ç, file=Àº ¿µ¾îÇнÀ µ¥ÀÌÅÍ ÆÄÀÏÀÌ´Ù.  °æ·Î¿Í ÆÄÀÏÀº USB ¸Þ¸ð¸®¿¡ ÀúÀåµÉ ¼ö ÀÖÀ¸¹Ç·Î »ç¿ëÀÚ°¡ PC ¾ÆÅ°ÅØÃÄ¿¡ »ó°ü¾øÀÌ ÅØ½ºÆ® ÆÄÀÏ Çü½Ä¸¸ ¸ÂÃß¾î ÆíÁýÇÏ¿© USB ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ¸é µÈ´Ù.

 

À§ÀÇ ¸Þ´º µ¥ÀÌÅÍ ÆÄÀÏÀ» Àо ¿µ¾îÇнÀ ½Ã³ª¸®¿À·Î ¼³Á¤ÇÏ´Â ¼Ò½º ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

 

//¸®½ºÆ®¸¦»ý¼ºÇÑÈÄ, ÆÄÀÏ(fname)¿¡¼­ÇнÀ¸ñ·ÏÀ»ÇÒ´ç

//fgets()¸¦»ç¿ëÇÏ¿©ÆÄÀÏÀ»ÀÐÀ½

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

LIST* wp_chapter_create (char *fname)

{

        CHAPTER*       Chapter;

        LIST*          list;

        FILE*          fstream;

        char           path_fname[128];

        char           linebuf[128], data[128];

        int            tag_idx = 0, cnt = 0, is, addResult;

        char           *tag[] = {"space=", "title=", "path=", "file="};

 

        list = createList (wp_chapter_cmp_index);

        if (!list) {

               printf ("\aCannot create list\n");

               return NULL;

        }      

 

        sprintf (path_fname, "%s%s", PATH_DATA, fname);

        if (access(path_fname, F_OK)) {

               printf ("%s not found!!\n", path_fname);

               return NULL;

        }

 

        fstream = fopen (path_fname, "r");

        if (!fstream) {

               printf ("\aError opening input file\n");

               return NULL;

        }

 

        //¸Þ¸ð¸®ÇÒ´ç

        Chapter = (CHAPTER*) malloc(sizeof(CHAPTER));

        if (!Chapter) {

               printf ("\aOut of Memory in build list\n");

               return NULL;

        }

 

        while (!feof(fstream))

        {

               fgets (linebuf, sizeof(linebuf), fstream);

               if ((linebuf[0] == '/') && (linebuf[1] == '/')) continue; //ÁÖ¼®

 

               //sscanf (linebuf, "%s", data);

               //strncpy(data, linebuf, strlen(linebuf)-1);

               strcpy(data, linebuf);

               if (strlen(data) < 3) continue;

               data[strlen(data)-2] = '\0'; //¹®ÀÚ¿­³¡¿¡°³Ç๮ÀÚÁ¦°Å

              

               if (data[0] == '#') {

                       if (tag_idx > 0) {

                               cnt++;

                              Chapter->idx = cnt;

                              //¸®½ºÆ®¿¡µî·Ï

                              addResult = addNode (list, Chapter);

                              if (addResult == 0) {

                                      //¸Þ¸ð¸®ÇÒ´ç

                                      Chapter = (CHAPTER*) malloc(sizeof(CHAPTER));

                                      if (!Chapter) {

                                             printf ("\aOut of Memory in build list\n");

                                             return NULL;

                                      }

                              } else {

                                      if (addResult == -1) {

                                             printf ("Memory overflow adding index(%d)\n", Chapter->idx);

                                             return NULL;

                                      } else

                                             printf ("Duplicate index(%d)\n", Chapter->idx);

                              }

                       }

                       tag_idx = -1;

                       continue;

               }

               tag_idx++;

               is = strlen(tag[tag_idx]);

 

               //printf ("wp_chapter_create():%s\n", &data[is]);

 

               if (tag_idx == 0) Chapter->space = atoi(&data[is]);

               else if (tag_idx == 1) sprintf (Chapter->title, "%s", &data[is]);

               else if (tag_idx == 2) sprintf (Chapter->path, "%s", &data[is]);

               else if (tag_idx == 3) sprintf (Chapter->file, "%s", &data[is]);

 

        } //while

 

        fclose (fstream);

        return list;

}

 

list = createList() ÇÔ¼ö¸¦ ÅëÇÏ¿© ¸µÅ©µå ¸®½ºÆ®°¡ »ý¼ºµÇ°í À̰÷¿¡ fopen(), fgets() ÇÔ¼ö¸¦ ÅëÇÏ¿© ¿µ¾îÇнÀ ¸ñ·Ï µ¥ÀÌÅ͸¦ Àо ¸Þ¸ð¸®¿¡ ÇÒ´çÇÑ´Ù.

 

 

¿µ¾îÇнÀ ÁøÇà

»ç¿ëÀÚ°¡ ¿µ¾îÇнÀ ¸ñ·ÏÁß¿¡¼­ Çϳª¸¦ ¼±ÅÃ(½ºÅ©¸° ÅÍÄ¡)Çϸé, path¿Í file¿¡ ÀÖ´Â ¿µ¾îÇнÀ µ¥ÀÌÅ͸¦ Àд´Ù.  ¿µ¾îÇнÀ µ¥ÀÌÅÍ ¶ÇÇÑ »ç¿ëÀÚ°¡ ÅØ½ºÆ® ÆÄÀÏÇüÅ·ΠÆíÁýÇÏ¿© ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.  ¾Æ·¡´Â ¿µ¾îÇнÀ µ¥ÀÌÅÍ ÆÄÀÏ Çü½ÄÀÌ´Ù.

 

//#¼ø¹ø

//query=ÇнÀÁú¹®(ÃÖ´ëÀÚ)

//path=±×¸²°æ·Î(Àý´ë°æ·Î,ÃÖ´ëÀÚ)

//pic1=±×¸²Ã¹¹øÂ°ÆÄÀϸí(ÃÖ´ëÀÚ)

//pic2=±×¸²µÎ¹øÂ°ÆÄÀϸí(ÃÖ´ëÀÚ)

//pic3=±×¸²¼¼¹øÂ°ÆÄÀϸí(ÃÖ´ëÀÚ)

//pic4=±×¸²³×¹øÂ°ÆÄÀϸí(ÃÖ´ëÀÚ)

//ans=Á¤´ä¹øÈ£

//timeout=´ë±â½Ã°£(ÃÊ)

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

#START

#

query=a boy

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010103.jpg

pic2=ch010104.jpg

pic3=ch010101.jpg

pic4=ch010102.jpg

ans=3

timeout=0

 

#

query=a girl

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010104.jpg

pic2=ch010102.jpg

pic3=ch010103.jpg

pic4=ch010101.jpg

ans=2

timeout=0

 

#

query=a man

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010103.jpg

pic2=ch010104.jpg

pic3=ch010101.jpg

pic4=ch010102.jpg

ans=1

timeout=0

 

#

query=a woman

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010102.jpg

pic2=ch010101.jpg

pic3=ch010103.jpg

pic4=ch010104.jpg

ans=4

timeout=0

 

#

#

query=a man and an old woman and a girl

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010134.jpg

pic2=ch010209.jpg

pic3=ch010210.jpg

pic4=ch010125.jpg

ans=1

timeout=0

 

((Áß°£ »ý·«...))

 

#

query=a family

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010301.jpg

pic2=ch010220.jpg

pic3=ch010215.jpg

pic4=ch010217.jpg

ans=2

timeout=0

 

#

query=He

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010118.jpg

pic2=ch010114.jpg

pic3=ch010123.jpg

pic4=ch010128.jpg

ans=1

timeout=0

 

#

query=She

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010101.jpg

pic2=ch010104.jpg

pic3=ch010103.jpg

pic4=ch010107.jpg

ans=2

timeout=0

 

#

query=They

path=/mnt/usb2/ebook/data/pic/ch01/

pic1=ch010109.jpg

pic2=ch010112.jpg

pic3=ch010105.jpg

pic4=ch010110.jpg

ans=3

timeout=0

 

#END

 

 

±×¸²2. ¿µ¾îÇнÀ µ¥ÀÌÅÍ Ç¥½Ã(À̹ÌÁöÆÄÀÏ: ch11_002.jpg)

 

#Àº ¼ø¹øÀ¸·Î ¿µ¾îÇнÀ µ¥ÀÌÅ͸¦ ±¸ºÐÇÏ´Â °ÍÀÌ´Ù.  query=´Â ¿µ¾îÇнÀÀ» ÇϰíÀÚ ÇÏ´Â ´Ü¾î³ª ¹®ÀåÀÌ´Ù.  pic1, pic2, pic3, pic4´Â ¿µ¾îÇнÀ ¹®ÀåÀÎ query¸¦ ½ÃÀÛÀûÀ¸·Î ¿¬»óÇÒ ¼ö ÀÖ´Â À̹ÌÁö(jpg) ÆÄÀϵéÀÌ´Ù.  query¸¦ ÅëÇÏ¿© ÀÐ°í µéÀº(û°¢) ¿µ¾î¿¡ ÇØ´çÇÏ´Â À̹ÌÁö(½Ã°¢)¸¦ 4°³Áß¿¡¼­ Çϳª ¼±ÅÃÇÏ´Â °ÍÀÌ´Ù.  ans=´Â Á¤´ä¹øÈ£À̸ç 4°³ÀÇ À̹ÌÁö Áß¿¡¼­ query¿¡ ¸Â´Â À̹ÌÁö ¹øÈ£ÀÌ´Ù.  timeout=´Â ÃÊ´ÜÀ§·Î Á¤´äÀÌ ¼±ÅÃµÉ ¶§ ±îÁö ´ë±âÇÏ´Â ½Ã°£ÀÌ´Ù.  0À̸é Á¤´äÀÌ ¼±ÅÃ(½ºÅ©¸° ÅÍÄ¡)µÉ¶§±îÁö °è¼Ó ±â´Ù¸°´Ù.

 

À§ÀÇ µ¥ÀÌÅÍ ÆÄÀÏÀº »ç¿ëÀÚ°¡ Çü½Ä¿¡ ¸Â°Ô ³»¿ëÀ» ±¸¼ºÇÏ¸é »ç¿ëÀÚ ¸ÂÃãÇü ¿µ¾îÇнÀ ½Ã³ª¸®¿À¸¦ ±¸¼ºÇÒ ¼ö Àִٴ Ư¡ÀÌ ÀÖ´Ù.  ¿µ¾îÇнÀ ÇϰíÀÚ ÇÏ´Â ¹®ÀåÀ» query¿¡ ±â¼úÇϰí À̰ÍÀ» ¿¬»óÇÒ ¼ö ÀÖ´Â À̹ÌÁö¸¦ µðÁöÅÐ Ä«¸Þ¶ó·Î ÃÔ¿µÇÏ¿© USB ¸Þ¸ð¸®¿¡ ÀúÀåÇÏ¿© »ç¿ëÀÚ°¡ ¿µ¾îÇнÀ µ¥ÀÌÅ͸¦ ±¸ÃàÇØ ³ª°¥ ¼ö ÀÖ´Ù.

 

¾Æ·¡´Â À§ÀÇ ¿µ¾îÇнÀ µ¥ÀÌÅÍÆÄÀÏÀ» Àо Å¥(QUEUE)¿¡ ÇÒ´çÇÏ´Â ¼Ò½º ÄÚµåÀÌ´Ù.

//ÇнÀµ¥ÀÌÅÍÆÄÀÏÀбâ

int _fread_word_page (char* fname, QUEUE* queue)

{

        FILE    *fstream;

        char    linebuf[128], data[128];

        int            tag_idx = 0, cnt = 0, is;

        char    *tag[] = {"query=", "path=", "pic1=", "pic2=", "pic3=", "pic4=", "ans=", "timeout="};

        WORD1_PAGE* wpage;

 

        if (access(fname, F_OK)) {

               printf ("%s not found!!\n", fname);

               return -1;

        }

       

        fstream = fopen (fname ,"r");

        if (!fstream) {

               printf ("%s file open error!!\n", fname);

               return -1;

        }

 

        //¸Þ¸ð¸®ÇÒ´ç

        wpage = (WORD1_PAGE*) malloc(sizeof(WORD1_PAGE));

        if (!(wpage)) {

               printf("wp_page_create(): \aOut of Memory\n");

               return -1;

        }

        while (!feof(fstream))

        {

               fgets (linebuf, sizeof(linebuf), fstream);

               if ((linebuf[0] == '/') && (linebuf[1] == '/')) continue; //ÁÖ¼®

 

               //sscanf (linebuf, "%s", data);

               //strncpy(data, linebuf, strlen(linebuf)-1);

               strcpy(data, linebuf);

               if (strlen(data) < 3) continue;

               data[strlen(data)-2] = '\0'; //¹®ÀÚ¿­³¡¿¡°³Ç๮ÀÚÁ¦°Å

 

              

               if (data[0] == '#') {

                       is = sizeof(tag) / sizeof(*tag) - 2;  //¹è¿­°³¼ö-2

                       if (tag_idx > is) {

                              cnt++;

                              wpage->idx = cnt;

                              //Å¥¿¡µî·Ï

                              enqueue (queue, wpage);

                              //¸Þ¸ð¸®ÇÒ´ç

                              wpage = (WORD1_PAGE*) malloc(sizeof(WORD1_PAGE));

                              if (!(wpage)) {

                                      printf("wp_page_create(): \aOut of Memory\n");

                                      return -1;

                              }

                       }

                       tag_idx = -1;

                       continue;

               }

               tag_idx++;

               is = strlen(tag[tag_idx]);

              

               if (tag_idx == 0) sprintf (wpage->query, "%s", &data[is]);

               else if (tag_idx == 1) sprintf (wpage->path, "%s", &data[is]);

               else if (tag_idx == 2) sprintf (wpage->pic1, "%s", &data[is]);

               else if (tag_idx == 3) sprintf (wpage->pic2, "%s", &data[is]);

               else if (tag_idx == 4) sprintf (wpage->pic3, "%s", &data[is]);

               else if (tag_idx == 5) sprintf (wpage->pic4, "%s", &data[is]);

               else if (tag_idx == 6) wpage->ans = atoi(&data[is]);

               else if (tag_idx == 7) wpage->timeout = atoi(&data[is]);

        }

 

        fclose (fstream);

        return 0;

}

 

¾Æ·¡ ÄÚµå´Â ¿µ¾îÇнÀ ÆäÀÌÁö¸¦ ½ºÅ©¸°¿¡ Ç¥½ÃÇÏ´Â ÄÚµåÀÌ´Ù.

//´Ü¾îÇнÀÆäÀÌÁöÇ¥½Ã

//¸®ÅÏ: Á¤´ä¹øÈ£

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

int word_page_display (WORD1_PAGE* word_page)

{

        char                   path_fname[256], section[20];

        int                           x, y, x2, y2;

        SND_FILE               snd_file;

 

        //¿ÞÂʸ޴ºÃâ·Â

        sprintf (section, "ch_%d_%d", idxChapter, word_page->idx);

        word_page_left (section);

 

        //Äõ¸®Ãâ·ÂÁÂÇ¥

        x = boxBookLeft->x + boxBookLeft->width + prsBook->colum;

        y = boxBookLeft->y + prsBook->row;

        dcScreen->pen_color = CL_SILVER;

        dcScreen->brush_color = CL_WHITE;

        //Äõ¸®Ãâ·Â

        gx_rectangle (dcScreen, x-5, y-20, prsBook->width - 20, y + prsBook->colum*2);    

        dcScreen->pen_color = CL_BLACK;

        gx_text_out (dcScreen, x, y, word_page->query);     

 

        //±×¸²(»çÁø) Ãâ·ÂÁÂÇ¥

        x = boxBookPic->x;

        y = boxBookPic->y;

        x2 = boxBookPic->x + boxBookPic->width / 2;

        y2 = boxBookPic->y + boxBookPic->height / 2;

 

        //pic1

        sprintf (path_fname, "%s%s", word_page->path, word_page->pic1);

        lib_jpg_display (dcScreen, path_fname, x, y);

        //pic2

        sprintf (path_fname, "%s%s", word_page->path, word_page->pic2);

        lib_jpg_display (dcScreen, path_fname, x2, y);

        //pic3

        sprintf (path_fname, "%s%s", word_page->path, word_page->pic3);

        lib_jpg_display (dcScreen, path_fname, x, y2);

        //pic4

        sprintf (path_fname, "%s%s", word_page->path, word_page->pic4);

        lib_jpg_display (dcScreen, path_fname, x2, y2);

       

        //±×¸²Á߽ɼ±

        gx_hline (dcScreen, x, x + boxBookPic->width, y2, CL_BLACK);

        gx_vline (dcScreen, x2, y, y + boxBookPic->height, CL_BLACK);

        //±×¸²Å׵θ®¼±(°¡·Î)

        gx_hline (dcScreen, x, x + boxBookPic->width, y, CL_BLACK);

        gx_hline (dcScreen, x, x + boxBookPic->width, y + boxBookPic->height, CL_BLACK);

        //±×¸²Å׵θ®¼±(¼¼·Î)

        gx_vline (dcScreen, x, y, y + boxBookPic->height, CL_BLACK);

        gx_vline (dcScreen, x + boxBookPic->width, y, y + boxBookPic->height, CL_BLACK);    

 

        //»ç¿îµåÃâ·Â

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

        strcpy (snd_file.fname, section);

        snd_file.length = strlen(word_page->query); //¹®ÀÚ¿­±æÀÌ(»ç¿îµå±æÀÌ)

        printf ("snd_file.fname = %s\n", snd_file.fname);

        //tid = pthread_create (&thr, NULL, snd_file_listening, (void*)&snd_file);

        snd_file_listening ((void*)&snd_file);

 

        sleep (word_page->timeout);

 

        return 1;

}

 

 

 

À§ÀÇ Äڵ忡¼­ ¿µ¾îÇнÀ ÆäÀÌÁö¸¦ Å¥(queue)¿¡ Àо ¼ø¼­´ë·Î ½ºÅ©¸°¿¡ Ç¥½ÃÇÑ´Ù.  »ç¿ëÀÚ°¡ ½ºÅ©¸°¿¡¼­ query¿¡ ÇØ´çÇÏ´Â ±×¸²À» ÅÍÄ¡Çϸé Á¤´ä¿©ºÎ¸¦ ÆÇ´ÜÇÏ¿© Á¤´äÀ̸é Å¥¿¡¼­ »èÁ¦(dequeue)Çϰí, ¿À´äÀ̸é Å¥¿¡ ´Ù½Ã ÀÔ·Â(enqueue)ÇÏ¿© ¹Ýº¹ÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.  »ç¿ëÀÚ°¡ ¸ðµÎ Á¤´äÀ» ´äÇϸé Å¥°¡ »èÁ¦(dequeue)µÇ¾î ¸ÞÀÎ ¸Þ´º·Î À̵¿ÇÏ°Ô µÈ´Ù.  ¾Æ·¡´Â À§ÀÇ °úÁ¤À» º¸¿©ÁÖ´Â È­¸éÀ» ĸÃÄÇÑ °ÍÀÌ´Ù.

 

 

±×¸²3. ¿µ¾îÇнÀ ÁøÇà(ch11_003.jpg)            ±×¸²4. ¿µ¾îÇнÀ ÁøÇà(ch11_004.jpg)

 

¿µ¾îÇнÀ ÁøÇà Åë°è(¹®Á¦¼ö/Á¤´ä¼ö/¿À´ä¼ö/Á¡¼ö)¸¦ Ç¥½ÃÇÏ´Â ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

 

void word_page_left (char* sSection)

{

        int            x, y, col, row, itotal, iscore;

        char    sline[50];    

 

        x = boxBookLeft->x;

        y = boxBookLeft->y;

        col = prsBook->colum;  //ÇÑÄ­

        row = prsBook->row;           //ÇÑÇà

 

        dcScreen->pen_color = CL_SILVER;

        dcScreen->brush_color = CL_BLACK;

        gx_rectangle (dcScreen, x, y, x+boxBookLeft->width, y+boxBookLeft->height);

 

        //gx_text_out (dcScreen, x+col*10, row, Chapter->ch[idx]);

        gx_text_out (dcScreen, x+col, y + row, sSection);

 

        //Á¡¼ö°è»ê

        itotal = queueCount (queueWordPage) + iCnt1 + iCnt0;

        iscore = (iCnt1 * 100) / itotal;

 

        sprintf (sline, "¹®Á¦¼ö:%d/%d", queueCount (queueWordPage), queueCount (queueWordPage) + iCnt1);

        gx_text_out (dcScreen, x+col, y + row*3, sline);

        sprintf (sline, "Á¤´ä¼ö:%d", iCnt1);

        gx_text_out (dcScreen, x+col, y + row*4, sline);

        sprintf (sline, "¿À´ä¼ö:%d", iCnt0);

        gx_text_out (dcScreen, x+col, y + row*5, sline);    

        sprintf (sline, "* Á¡¼ö:%d", iscore);

        gx_text_out (dcScreen, x+col, y + row*6, sline);

}

 

¸ÎÀ½¸»

¸®´ª½º ÀÓº£µðµåº¸µå¿¡¼­ ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇÒ ¶§, ¿µ¾î»çÀü µ¥ÀÌÅÍ Ã³¸® ¾Ë°í¸®Áò, ½Ãû°¢ ÀÚ·áó¸®, ´Ù¾çÇÑ ÀÔÃâ·ÂÀåÄ¡ Á¦¾î, ¿µ¾îÇнÀ ½Ã³ª¸®¿ÀµîÀÌ Àß ±¸¼ºµÇ¾î¾ß ÇÑ´Ù.  ÇÊÀÚ´Â ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇÑ ½Ã³ª¸®¿À¸¦ Áß½ÉÀ¸·Î ³»¿ëÀ» ±â¼ú ÇÏ¿´´Ù.  ÇÊÀÚÀÇ ¿µ¾îÇнÀ ½Ã³ª¸®¿À´Â »ç¿ëÀÚ ¼³Á¤(¸ÂÃã)ÇüÀÌ´Ù.  ¿µ¾îÇнÀÀº »ç¿ëÀÚ¿¡ µû¶ó¼­ ´Ù¾çÇÑ ¹æ½ÄÀÌ ÀÖÀ» ¼ö Àֱ⠶§¹®¿¡, »ç¿ëÀÚ°¡ Á÷Á¢ ¿µ¾îÇнÀ ¸ñ·ÏÀ» ÅØ½ºÆ® ÆÄÀÏ·Î ÆíÁýÇÏ¿© USB ¸Þ¸ð¸®¿¡ ÀúÀåÇϸé À̰ÍÀ» Àо ¿µ¾îÇнÀÀ» ÁøÇàÇÏ°í ±×³»¿ëÀ» Åë°èÀÚ·á·Î º¸°üÇØ µÑ ¼ö ÀÖ´Ù.  ¶ÇÇÑ, ½Ãû°¢ È¿°ú¸¦ ³ôÀ̱â À§Çؼ­ ¿µ¾î¹®Àå(query)¿¡ ÇØ´çÇÏ´Â »ýȰ»óÀ» µðÁöÅÐ Ä«¸Þ¶ó·Î ÃÔ¿µÇÏ¿© ±×¸²ÆÄÀÏ(jpg)·Î USB ¸Þ¸ð¸®¿¡ ÀúÀåÇÑÈÄ À̰ÍÀ» ¿µ¾îÇнÀ ¹®Àå°ú ¿¬°á½Ãų ¼ö Àִ Ư¡ÀÌ ÀÖ´Ù.

 

¸®´ª½º ÀÓº£µðµåº¸µå¿¡¼­ ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇϰíÀÚ ÇÏ´Â ÇÊÀÚÀÇ ³ë·ÂÀº ÇöÀç ÁøÇàÇüÀÌ´Ù.  ¾ÕÀ¸·Î Á»´õ ¹ßÀüµÈ ÇüÅÂÀÇ ¿µ¾îÇнÀ±â¸¦ ±¸ÇöÇϱâ À§Çؼ­ ±â¼úÀûÀÎ ºÎºÐÀ» Áö¼ÓÀûÀ¸·Î ¿¬±¸ °³¹ßÇÒ ¿¹Á¤ÀÌ´Ù.  ±×µ¿¾È ÇÊÀÚÀÇ ±â°í¹®À» ¿¬ÀçÇØ ÁֽŠ¿ù°£ÀÓº£µðµå¿ùµå °ü°èÀںеé°ú ÀоîÁֽе¶Àںе鿡°Ô °¨»çÀÇ ¸¶À½À» ÀüÇÑ´Ù.

 

Âü°í ¹®Çå

[1] Computer Organization and Design (c)2007

by David A. Patterson, John L. Hennessy

[2] Embedded Linux Primer (c)2006

by Christopher Hallinan

[3] Essential Linux Device Drivers (c)2008

by Sreekrishnan Venkateswaran

[4] LINUX System Programming (c)2007

by Robert Love

[5] DATA STRUCTURES (c)2005

by Richard F. Gilberg, Behrouz A. Forouzan

[6] (ÁÖ)¿¡ÇÁ¿¡À̸®´ª½º Æ÷·³

http://forum.falinux.com/zbxe/

[7] RMI»çÀÇ Au1200 User¡¯s Guide

http://www.rmicorp.com/

[8] Linux Kernel In a Nutshell (c)2007 O¡¯Reilly

    by Greg Kroah-Hartman

 

 

 

 

 

À̵¿: Home à book02 à book0211

 

ÁÖ¼Ò: http://www.kernel.bz/book/02/book0211.htm

 

Á¦¸ñ: ¿µ¾îÇнÀ±â ±¸Çö2

ÀÌÆäÀÌÁö ÀúÀÛ±ÇÀº ÀúÀÚ¿¡°Ô ÀÖÀ½.

ÀúÀÚ: Á¤ÀçÁØ(rgbi3307(at)nate.com)

ÃÖ±Ù¼öÁ¤ÀÏ:2010-06-06