NCURSES-Programming-HOWTO
|
[edit]
NCURSES Programming HOWTO ¶Ã¹ ¹ø¿ªÀÌ¶ó ¸¹ÀÌ ¹ÌÈíÇÕ´Ï´Ù ¸ðÀÚ¶õ Á¡ÀÌ ÀÖÀ¸¸é ÁöÀûÇØ Áֽñ⠹ٶø´Ï´Ù. --gsong
¹ø¿ª
gsong
ÀÛ¼º
Pradeep Padala
#! v1.7.1, 2002-06-25 Revision History Revision 1.7.1 2002-06-25 Revised by: ppadala Added a README file for building and instructions for building from source. Revision 1.7 2002-06-25 Revised by: ppadala Added "Other formats" section and made lot of fancy changes to the programs. Inlining of programs is gone. Revision 1.6.1 2002-02-24 Revised by: ppadala Removed the old Changelog section, cleaned the makefiles Revision 1.6 2002-02-16 Revised by: ppadala Corrected lot of spelling mistakes, added ACS variables section Revision 1.5 2002-01-05 Revised by: ppadala Changed structure to present proper TOC Revision 1.3.1 2001-07-26 Revised by: ppadala Corrected maintainers paragraph, Corrected stable release number Revision 1.3 2001-07-24 Revised by: ppadala Added copyright notice(LDP license) to main document, Put copyright notice (GPL) for programs as well, Corrected printw_example. Revision 1.2 2001-06-05 Revised by: ppadala Incorporated ravi's changes. Mainly to introduction, menu, form, justforfun sections Revision 1.1 2001-05-22 Revised by: ppadala Added "a word about window" section, Added scanw_example. ÀÌ ¹®¼´Â ncurses ¿Í ±× ÀڸжóÀ̺귯¸®·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â µ¥ ÀÖ¾î "All in One" °¡À̵带 ÁöÇâÇϰí ÀÖ´Ù. °£´ÜÇÑ "Hello World" ÇÁ·Î±×·¥ ºÎÅÍ º¸´Ù ´õ º¹ÀâÇÑ Æû ó¸® ±îÁö ´Ù·é´Ù. ncurses ÀÇ ¼±Çà°æÇèÀº ÇÊ¿äÄ¡ ¾Ê´Ù. ÀÌ ¹®¼ÀÇ ÃֽйöÀüÀº
³ªÀÇ À¥ »çÀÌÆ® ¿¡¼ ãÀ» ¼ö ÀÖ´Ù. p_padala_at_yahoo.com ÀÌ ÁÖ¼Ò·Î ºñÆòÀ» º¸³»ÁÖ±æ ¹Ù¶õ´Ù.
¸ñÂ÷
[edit]
1.1 Introduction ¶¿¹Àü ¿ø°Å¸® Å͹̳ÎÀº ÄÄÇ»ÅͷκÎÅÍ ¶³¾îÁø ä ½Ã¸®¾ó ÄÉÀ̺íÀ» ÅëÇØ ¿¬°áµÇ¾î ÀÖ¾ú´Ù. ±× Å͹̳ε鿡 ¾î¶² ƯÁ¤ÇÑ ¹ÙÀÌÆ®µéÀ» º¸³¿À¸·Î½á Å͹̳ÎÀ» ¼³Á¤ÇÒ ¼ö ÀÖ¾ú´Ù. Å͹̳ÎÀÇ ÀÌ ¸ðµç ±â´Éµé (Ä¿¼¸¦ »õ À§Ä¡·Î ¿Å±â°Å³ª, ȸéÀÇ ÀϺθ¦ Áö¿ì°Å³ª, ȸéÀ» ½ºÅ©·Ñ Çϰųª, ¸ðµå¸¦ ¹Ù²Ù°Å³ª, ȸéÀÇ ÇüÅÂ, »ö, ¹à±â, ±ôºýÀÓ, ¹ØÁÙ, reverse video µîÀ» ¼³Á¤ÇÏ´Â µî) Àº ÈçÈ÷ escape sequences ¶ó ºÒ¸®´Â ¹ÙÀÌÆ®µé¿¡ ÀÇÇØ¼ ÀÌ·ïÁ³´Ù. ÀÌ ¹ÙÀÌÆ®µéÀº escape(0x1B) ¹®ÀÚ·Î ½ÃÀÛÇϱ⠶§¹®¿¡ escape sequences ¶ó ºÒ¸°´Ù. ½ÉÁö¾î ¿À´Ã³¯¿¡µµ ÀûÀýÇÑ ¿¡¹Ä·¹ÀÌ¼Ç ±â´ÉÀÌ ÀÖÀ¸¸é, ¿ì¸®´Â escape sequences ¸¦ ¿¡¹Ä·¹ÀÌÅÍ¿¡ º¸³»¾î Å͹̳Πâ¿¡¼ ¶È°°Àº È¿°ú¸¦ º¼ ¼ö ÀÖ´Ù.
Ū
¸¸¾à ´ç½ÅÀÌ Ä÷¯·Î ÇÑ ÁÙÀ» Âï°í ½Í´Ù¸é, ´ÙÀ½À» ´ç½ÅÀÇ Äֿܼ¡¼ ½ÇÇàÇØº¸¾Æ¶ó.
echo "^[[0;31;40mIn Color" ^ ¿Í [ ÀÇ µÎ°³ÀÇ ¹®ÀÚó·³ º¸À̴ ù¹øÂ° ij¸¯ÅÍ´Â À̽ºÄÉÀÌÇÁ ij¸¯ÅÍ ÀÌ´Ù. Àú°ÍÀ» Âï¾îº¼·Á¸é CTRL+V۸¦ ´©¸£°í³ª¼ ESC ۸¦ ´©¸£¸é µÈ´Ù. ´Ù¸¥ ¸ðµç ¹®ÀÚµéÀº ÀϹÝÀûÀ¸·Î ÀÔ·ÂÇÏ´Â °Í°ú °°´Ù. ±×¸®°í ´ç½ÅÀº ¹®ÀÚµéÀÎ ºÓÀº»öÀ¸·Î ÂïÈ÷´Â °É º¸°Ô µÉ °Í ÀÌ´Ù. µû·Î º¯°æÀ» ÇÏÁö ¾ÊÀ¸¸é °è¼Ó ±× »óÅÂÀ̰í, ¿ø·¡´ë·Î µ¹¾Æ°¥·Á¸é ´ÙÀ½À» ÀÔ·ÂÇ϶ó.
echo "^[[0;37;40m" ÀÚ, Àú ¸¶¼ú°°Àº ij¸¯Å͵éÀÌ ¹» ÀǹÌÇÒ±î? ÀÌÇØÇϱ⠾î·Á¿î°¡? °Ô´Ù°¡ Àú ¹®ÀÚµéÀº Å͹̳εéÀÌ ´Ù¸£´Ù¸é ¶Ç ´Þ¶óÁú ¼öµµ ÀÖ´Ù. ±×·¡¼ UNIX ÀÇ µðÀÚÀ̳ʵéÀº termcap À̶ó ºÒ¸®´Â ¸ÅÄ¿´ÏÁòÀ» ¹ß¸íÇß´Ù. ±×°ÍÀº °¢°¢ÀÇ Å͹̳εéÀÇ ±â´É°ú °Å±â¿¡ µû¸¥ ƯÁ¤ÇÑ È¿°ú¸¦ ³»±âÀ§ÇÑ escape sequence µéÀ» ³ª¿ÇØ ³õÀº ÆÄÀÏÀÌ´Ù. ÈÄ¿¡ À̰ÍÀº terminfo ¿¡ ÀÇÇØ ´ëüµÇ¾ú´Ù. ÀÌ ¸ÅÄ¿´ÏÁòÀÇ °³³äÀ» °£·«È÷ ¾ê±âÇÏÀÚ¸é, ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥¿¡¼ terminfo µ¥ÀÌÅͺ£À̽º¿¡ Äõ¸®¸¦ ÇÏ¿© Å͹̳ÎÀ̳ª Å͹̳Π¿¡¹Ä·¹ÀÌÅÍ¿¡ º¸³¾ control ¹®ÀÚµéÀ» ¾ò¾î¿À°Ô ÇÏ´Â °ÍÀÌ´Ù.
[edit]
1.1.1 NCURSES ¶õ ¹«¾ùÀΰ¡? ¶¾Æ¸¶ ´ç½ÅÀº ÀÌ ¸ðµç ±â¼úÀûÀΠȾ¼öµéÀÌ ¹» ¾ê±âÇϰíÀÚ ÇÏ´Â °ÍÀÎÁö ±Ã±ÝÇÒ °ÍÀÌ´Ù. ¾Õ¼¿¡¼ ¸ðµç ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥Àº terminfo ¸¦ Äõ¸®Çϰí ÇÊ¿äÇÑ ÀϵéÀ» ¼öÇàÇÑ´Ù°í ¾ê±âÇß¾ú´Ù(control ¹®ÀÚµéÀ» º¸³»´Â ÀÏ µîµî.). ÀÌ º¹ÀâÇÑ °ÍÀ» ´Ù·ç´Â °ÍÀº ±Ý¹æ ¾î·Á¿öÁö¸ç ÀÌ·Î ÀÎÇØ 'CURSES' °¡ ź»ýÇÏ°Ô µÈ´Ù. Curses ´Â "cursor optimization"À» Àç¹Õ°Ô ¹ßÀ½ÇÑ °ÍÀÌ´Ù. Curses ¶óÀ̺귯¸®´Â raw Å͹̳ÎÄÚµå À§¿¡ wrapper ¸¦ Çü¼ºÇϰí ÀÖÀ¸¸ç, »ó´çÈ÷ À¯¿¬Çϰí È¿À²ÀûÀÎ API(Application Programing Interface) ¸¦ Á¦°øÇÑ´Ù. ±×°ÍÀº Ä¿¼¸¦ ¿òÁ÷À̰ųª, À©µµ¿ì¸¦ »ý¼ºÇϰí, »ö±òÀ» ¸¸µé°í, ¸¶¿ì½º¸¦ °¡Áö°í ³ë´Â°Í µîÀÇ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ¾îÇø®ÄÉÀÌ¼Ç ÇÁ·Î±×·¥Àº ±× ±Ù°£À» ÀÌ·ç´Â Å͹̳ÎÀÇ ±â´É¿¡ ´ëÇØ¼´Â °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.
ÀÚ ±×·³ NCURSES ´Â ¹«¾ùÀΰ¡? NCURSES ´Â ¿ø·¡ÀÇ System V Release 4.0(SVr4) curses ÀÇ Å¬·ÐÀÌ´Ù. ±×°ÍÀº ÀÚÀ¯·Ó°Ô ¹èÆ÷µÉ¼ö ÀÖ´Â ¶óÀ̺귯¸®À̸ç, curses ÀÇ ±¸¹öÀü°ú ¿Ïº®È÷ ȣȯµÈ´Ù. ½±°Ô¸»ÇØ ¾îÇø®ÄÉÀ̼ÇÀÇ ¹®ÀÚÇ¥Çö -cell terminals À» ´Ù·ç´Â ÇÔ¼öµéÀÇ ¶óÀ̺귯¸®ÀÌ´Ù. ÀÌÁ¦ ÀÌÈķδ curses ¿Í ncurses ´Â °°Àº ¶æÀ¸·Î ¾²ÀÏ °ÍÀÌ´Ù.
ncurses ÆÐŰÁö´Â ¿ø·¡ Pavel Curtis ¿¡ ÀÇÇØ °³¹ßµÇ¾ú´Ù. ÀÌ ÆÐŰÁöÀÇ ¿ø °ü¸®ÀÚ´Â Zeyd Ben-Halim <
zmbenhal_at_netcom.com> ÀÌ´Ù. Eric S. Raymond < esr_at_snark.thyrsus.com> ´Â 1.8.1 ¹öÀü¿¡¼ ¸¹Àº »õ·Î¿î ±â´ÉÀ» Ãß°¡ÇÏ¿´´Ù. Jürgen Pfeifer ´Â menu ¿Í form ¿¡ °ü·ÃµÈ ¸ðµç ÄÚµå´Â ¹°·Ð Ada95 ¿¡ ´ëÇÑ ¹ÙÀεùÀ» Ãß°¡ÇÏ¿´´Ù. ÇöÀç Thomas Dickey < dickey_at_herndon4.his.com> ¿Í Jürgen Pfeifer < juergen.pfeifer_at_gmx.net>
¿¡ ÀÇÇØ °³¹ßÀÌ ÁøÇàµÇ°í ÀÖ´Ù. Florian La Roche < florian_at_gnu.org> ´Â ncurses ÀÇ copyright ¸¦ °¡Áø Free Software Foundation ÀÇ °ü¸®ÀڷΠȰµ¿Çϰí ÀÖ´Ù. ÇöÀç °ü¸®ÀÚ¿¡°Ô ¸ÞÀÏÀ» º¸³»±â À§Çؼ´Â bug-ncurses_at_gnu.org·Î ¿¬¶ôÇϱ⠹ٶõ´Ù.
[edit]
1.1.2 NCURSES ·Î ¹«¾ùÀ» ÇÒ ¼ö Àִ°¡? ¶Ncurses ´Â Å͹̳Π±â´ÉÀÇ wrapper ¸¦ ¸¸µé¾îÁÙ »Ó¸¸ ¾Æ´Ï¶ó ÅØ½ºÆ®¸ðµå¿¡¼ ¸ÚÁø UI (User Interface)¸¦ ¸¸µé¼ö Àִ ưưÇÑ ÇÁ·¹ÀÓ¿÷µµ Á¦°øÇÑ´Ù. ±×°ÍÀº À©µµ¿ìµîÀ» ¸¸µé ¼ö ÀÖ´Â ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ±×°ÍÀÇ ÀڸжóÀ̺귯¸®ÀÎ ÆÐ³Î, ¸Þ´º, ÆûµîÀº ±âº»ÀûÀÎ curses ¶óÀ̺귯¸®¿¡ È®À强À» Á¦°øÇÑ´Ù. ÀÌ ¶óÀ̺귯¸®µéÀº º¸Åë curses ¿Í °°ÀÌ ¼³Ä¡µÈ´Ù. ´©±¸³ª ´ÙÁß À©µµ¿ì¿Í ¸Þ´º, ÆÐÅÐ ±×¸®°í ÆûÀ» Æ÷ÇÔÇϰí ÀÖ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. À©µµ¿ìµéÀº °¢°¢ µ¶¸³ÀûÀ¸·Î ´Ù·ïÁö¸ç, 'scrollability' ±â´Éµµ ÀÖ°í, ½ÉÁö¾î hidden µÉ ¼öµµ ÀÖ´Ù.
¸Þ´ºµéÀº »ç¿ëÀÚ¿¡°Ô ½¬¿î ¸í·É¼±ÅÃÀ» ÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù. ÆûÀº data entry ¸¦ »ç¿ëÇÏ´Â °Í°ú À©µµ¿ì¸¦ Ç¥ÇöÇÏ´Â °ÍÀ» ½±°Ô ÇØÁØ´Ù. ÆÐ³ÎµéÀº °ãÃÄÁö°Å³ª ½×ÀÎ À©µµ¿ìµéÀ» ´Ù·ê ¼ö ÀÖ°Ô ncurses ÀÇ ±â´ÉÀ» È®Àå½ÃÄÑ ÁØ´Ù.
À̰͵éÀº ¿ì¸®°¡ ncurses ·Î ÇÒ ¼ö ÀÖ´Â ±âº»ÀûÀÎ °Íµé¿¡ ºÒ°úÇÏ´Ù. ´ÙÀ½À¸·Î ³Ñ¾î°¥ ¼ö·Ï ¿ì¸®´Â ÀÌ ¶óÀ̺귯¸®µéÀÇ ¸ðµç ±â´ÉµéÀ» ¾Ë°Ô µÉ °ÍÀÌ´Ù.
[edit]
1.1.3 ¾îµð¼ ±×°ÍÀ» ±¸Çϴ°¡? ¶ÀÚ, ncurses·Î ¾î¶² ÀÏÀÌ °¡´ÉÇÑÁö ¾Ë¾ÒÀ¸´Ï, ½áº¸°í ½Í¾î ±ÙÁú±ÙÁúÇÏ½Ç °Í °°´Ù. ncurses ´Â º¸Åë ¼³Ä¡ÇÒ¶§ ÀÚµ¿À¸·Î ±ò¸°´Ù. ¸¸¾à ±×°ÍÀÌ ¾ø°Å³ª, ´ç½Å¸¸ÀÇ ¶óÀ̺귯¸®·Î ÄÄÆÄÀÏÇÏ°í ½Í´Ù¸é ¾Æ·¡¸¦ °è¼Ó Àо¾Æ¶ó.
ÆÐŰÁö ÄÄÆÄÀÏÇϱâ
ncurses ´Â
ftp://ftp.gnu.org/pub/gnu/ncurses/ncurses.tar.gz ³ª http://www.gnu.org/order/ftp.html ¿¡ ³ª¿ÍÀÖ´Â ¾Æ¹« ftp »çÀÌÆ®¿¡¼ ¾òÀ» ¼ö ÀÖ´Ù. ÃÖ±Ù ¾ÈÁ¤È ¹öÀüÀº 5.2 20001021 ÀÌ´Ù.
¼³Ä¡ÇÏ´Â ¹æ¹ýÀ» ÀÚ¼¼È÷ ¾Ë°íÀÚ ÇÑ´Ù¸é README ¿Í INSTALL ÆÄÀÏÀ» Àо¾Æ¶ó. º¸Åë ´ÙÀ½°ú °°Àº ÀÛ¾÷µéÀ» Æ÷ÇÔÇϰí ÀÖ´Ù.
tar zxvf ncurses<version>.tar.gz # unzip and untar the archive
cd ncurses<version> # cd to the directory
./configure # configure the build according to your
# environment
make # make it
su root # become root
make install # install it
RPM À» ÀÌ¿ëÇÑ ¼³Ä¡
ncurses RPM ˼
http://rpmfind.net ¿¡¼ ã¾Æ¼ ´Ù¿î·ÎµåÇÏ¸é µÈ´Ù. RPM Àº ·çÆ® ±ÇÇÑÀ¸·Î ´ÙÀ½ÀÇ ¸í·ÉÀ» ½ÇÇàÇÏ¸é ¼³Ä¡°¡ µÈ´Ù.
rpm -i <downloaded rpm>
[edit]
1.1.4 ¹®¼ÀÇ ¸ñÀû ¹× ¹üÀ§ ¶ÀÌ ¹®¼´Â ncurses ¿Í ±×°ÍÀÇ ÀڸжóÀ̺귯¸®·Î ÇÁ·Î±×·¡¹Ö ÇÏ´Â µ¥ ÀÖ¾î ÅëÇÕ °¡À̵尡 µÇ´Â °ÍÀ» ¸ñÇ¥·Î Çϰí ÀÖ´Ù. ´Ü¼øÇÑ "Hello World" ÇÁ·Î±×·¥ºÎÅÍ ´õ º¹ÀâÇÑ ±â´ÉÀÇ ÇÁ·Î±×·¥±îÁö ´Ù·ê °ÍÀÌ´Ù. ncurses ÀÇ ¼±Çà°æÇèÀ» ÇÊ¿ä·Î ÇÏÁö´Â ¾Ê´Â´Ù.
[edit]
1.1.5 ÇÁ·Î±×·¥µé¿¡ ´ëÇØ ¶¹®¼¿¡ ÀÖ´Â ¸ðµç ÇÁ·Î±×·¥µéÀº
¿©±â¿¡¼ ¾ÐÃàµÈ ÇüÅ·Π¹ÞÀ» ¼ö ÀÖ´Ù. ±×°ÍµéÀÇ ¾ÐÃàÀ» Ç®°í tar ·Î ÆÄÀÏÀ» Ç®¸é µÈ´Ù. µð·ºÅ丮 ±¸Á¶´Â ¾Æ·¡¿Í °°´Ù.
#! ncurses | |----> <a class='nonexistent' href='/wiki.php/JustForFun'>?</a>JustForFun -- just for fun programs |----> basics -- basic programs |----> demo -- output files go into this directory after make | | | |----> exe -- exe files of all example programs |----> forms -- programs related to form library |----> menus -- programs related to menus library |----> panels -- programs related to panels library |----> Makefile -- the top level Makefile |----> README -- the top level README file. contains instructions |----> COPYING -- copyright notice °¢°¢ÀÇ µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϵé°ú ±× ¼³¸íÀº ´ÙÀ½°ú °°´Ù.
#!
<a class='nonexistent' href='/wiki.php/JustForFun'>?</a>JustForFun
|
|----> hanoi.c -- The Towers of Hanoi Solver
|----> life.c -- The Game of Life demo
|----> magic.c -- An Odd Order Magic Square builder
|----> queens.c -- The famous N-Queens Solver
|----> shuffle.c -- A fun game, if you have time to kill
|----> tt.c -- A very trivial typing tutor
basics
|
|----> acs_vars.c -- ACS_ variables example
|----> hello_world.c -- Simple "Hello World" Program
|----> init_func_example.c -- Initialization functions example
|----> key_code.c -- Shows the scan code of the key pressed
|----> mouse_menu.c -- A menu accessible by mouse
|----> other_border.c -- Shows usage of other border functions apa
| -- rt from box()
|----> printw_example.c -- A very simple printw() example
|----> scanw_example.c -- A very simple getstr() example
|----> simple_attr.c -- A program that can print a c file with
| -- comments in attribute
|----> simple_color.c -- A simple example demonstrating colors
|----> simple_key.c -- A menu accessible with keyboard UP, DOWN
| -- arrows
|----> temp_leave.c -- Demonstrates temporarily leaving curses mode
|----> win_border.c -- Shows Creation of windows and borders
|----> with_chgat.c -- chgat() usage example
forms
|
|----> form_attrib.c -- Usage of field attributes
|----> form_options.c -- Usage of field options
|----> form_simple.c -- A simple form example
|----> form_win.c -- Demo of windows associated with forms
menus
|
|----> menu_attrib.c -- Usage of menu attributes
|----> menu_item_data.c -- Usage of item_name() etc.. functions
|----> menu_multi_column.c -- Creates multi columnar menus
|----> menu_scroll.c -- Demonstrates scrolling capability of menus
|----> menu_simple.c -- A simple menu accessed by arrow keys
|----> menu_toggle.c -- Creates multi valued menus and explains
| -- REQ_TOGGLE_ITEM
|----> menu_userptr.c -- Usage of user pointer
|----> menu_win.c -- Demo of windows associated with menus
panels
|
|----> panel_browse.c -- Panel browsing through tab. Usage of user
| -- pointer
|----> panel_hide.c -- Hiding and Un hiding of panels
|----> panel_resize.c -- Moving and resizing of panels
|----> panel_simple.c -- A simple panel example
¸ÞÀÎ µð·ºÅ丮¿¡ ÃÖ»óÀ§ Makefile ÀÌ ÀÖ´Ù. ±×°ÍÀº ¸ðµç ÆÄÀϵéÀ» ºôµåÇϰí, »ç¿ëÇÒ Áغñ°¡µÈ ½ÇÇàÆÄÀϵéÀ» demo/exe µð·ºÅ丮¿¡ ³Ö¾îµÐ´Ù. ¶Ç, °¢°¢ÀÇ µð·ºÅ丮¿¡¼ ¼±ÅÃÀûÀ¸·Î ÆÄÀϵéÀ» ¸ÞÀÌÅ© ÇÒ ¼öµµ ÀÖ´Ù. °¢ µð·ºÅ丮´Â °Å±â¿¡ ÀÖ´Â ÆÄÀϵéÀÇ ¿ëµµ°¡ ¹«¾ùÀÎÁö ¼³¸íÇÏ´Â README ÆÄÀϵéÀÌ ÀÖ´Ù.
¸ðµç ¿¹Á¦¿¡¼ ³ª´Â ncurses µð·ºÅ丮¿¡ ´ëÇÑ »ó´ë °æ·Î¸íÀ» ¾²°í ÀÖ´Ù.
¸¸¾à °¢°¢ÀÇ ÇÁ·Î±×·¥ º°·Î º¸±â¸¦ ¿øÇÑ´Ù¸é,
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ncurses_programs/ ¿¡¼ º¼ ¼ö ÀÖ´Ù.
¸ðµç ÇÁ·Î±×·¥µéÀº
GPL ÇÏ¿¡ ¹èÆ÷µÇ¸ç ´ç½ÅÀº ±×°ÍÀ» ´ç½ÅÀÌ ¿øÇÏ´Â ´ë·Î ¾µ ¼ö ÀÖ´Ù.
[edit]
1.1.6 ¹®¼ÀÇ ´Ù¸¥ Æ÷¸Ëµé ¶ÀÌ ÇÏ¿ìÅõ ¹®¼´Â tldp.org »çÀÌÆ®¿¡ ´Ù¾çÇÑ Æ÷¸ËÀÌ ÀÖ´Ù. ¾Æ·¡´Â ÀÌ ¹®¼ÀÇ ´Ù¸¥ Æ÷¸Ëµé¿¡ ´ëÇÑ ¸µÅ©ÀÌ´Ù.
[edit]
1.1.6.2 ¼Ò½º·Î ºÎÅÍ ºôµåÇϱ⠶¸¸¾à À§ÀÇ ¸µÅ©µéÀÌ ±úÁ³°Å³ª sgml ÆÄÀÏ·Î ¹«¾ð°¡¸¦ ÇØº¸°í ½Í´Ù¸é ÀÌ ÀýÀ» Àо±â ¹Ù¶õ´Ù.
sgml ¹®¼ ¼Ò½º¿Í tar ¿Í gzip À¸·Î ¹ÀÎ ÇÁ·Î±×·¥À» ¾Æ·¡ÀÇ ¸µÅ©¿¡¼ ´Ù¿î¹Þ´Â´Ù.
http://cvsview.tldp.org/index.cgi/LDP/howto/docbook/
NCURSES-HOWTO/NCURSES-Programming-HOWTO.sgml
http://cvsview.tldp.org/index.cgi/LDP/howto/docbook/
NCURSES-HOWTO/ncurses_programs.tar.gz
ncurses_programs.tar.gz ÆÄÀÏÀÇ ¾ÐÃàÀ» Ǭ´Ù
tar zxvf ncurses_programs.tar.gz jade ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ´Ù¾çÇÑ Æ÷¸ËÀÇ ¹®¼¸¦ ¸¸µé¾î ³½´Ù. ¿¹¸¦ µé¾î ¿©·¯ °³ÀÇ ¹®¼·Î ³ª´©¾îÁø html ÆÄÀÏÀ» »ý¼ºÇÏ°í ½Í´Ù¸é ¾Æ·¡¿Í °°ÀÌ ÀÔ·ÂÇØ º¸ÀÚ.
jade -t sgml -i html -d <docbook html ½ºÅ¸ÀÏ ½ÃÆ®ÀÇ °æ·Î> NCURSES-Programming-HOWTO.sgml pdf ¹®¼¸¦ »ý¼ºÇÏ·Á¸é ¸ÕÀú ÇϳªÀÇ ¹®¼·Î µÈ html ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.
jade -t sgml -i html -d <docbook html ½ºÅ¸ÀÏ ½ÃÆ®ÀÇ °æ·Î> -V nochunks NCURSES-Programming-HOWTO.sgml > NCURSES-ONE-BIG-FILE.html then use htmldoc to get pdf file with
±×¸®°í htmldoc À» »ç¿ëÇÏ¿© pdf ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.
htmldoc --size universal -t pdf --firstpage p1 -f <output file name.pdf> NCURSES-ONE-BIG-FILE.html ps ÆÄÀÏÀ» »ý¼ºÇϱâ À§Çؼ´Â ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÑ´Ù.
htmldoc --size universal -t ps --firstpage p1 -f <Ãâ·Â ÆÄÀÏ À̸§> NCURSES-ONE-BIG-FILE.html ÀÚ¼¼ÇÑ »çÇ×Àº
http://www.tldp.org/LDP/LDP-Author-Guide/ ¹®¼¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. ¸¸¾à ¹®¼ »ý¼º¿¡ ½ÇÆÐÇÑ °æ¿ì¿¡´Â p_padala_at_yahoo.com À¸·Î ¸ÞÀÏÀ» º¸³»Áֱ⠹ٶõ´Ù.
[edit]
1.1.7 Å©·¹µðÆ® ¶I thank Sharath <
sharath_1_at_usa.net> and Emre Akbas for helping me with
few sections. The introduction was initially written by sharath. I rewrote it
with few excerpts taken from his initial work. Emre helped in writing printw
and scanw sections.
Then comes Ravi Parimi <
parimi_at_ece.arizona.edu>, my dearest friend,
who has been on this project before even one line was written. He constantly
bombarded me with suggestions and patiently reviewed the whole text. He also
checked each program on Linux and Solaris. See his notes to check on your
problems.
[edit]
1.1.8 Wish List ¶This is the wish list, in the order of priority. If you have a wish or you
want to work on completing the wish, mail
p_padala_at_yahoo.com me.
ashoknn_at_cisco.com N.N.Ashok is working on it)
[edit]
1.1.9 Copyright ¶Copyright (c) 2001 by Pradeep Padala. This document may be distributed under
the terms set forth in the LDP license at [
http://www.linuxdoc.org/
COPYRIGHT.html] linuxdoc.org/COPYRIGHT.html.
This HOWTO is free documentation; you can redistribute it and/or modify it
under the terms of the LDP license. This document is distributed in the hope
that it will be useful, but without any warranty; without even the implied
warranty of merchantability or fitness for a particular purpose. See the LDP
license for more details.
[edit]
1.2 The Hello World ÇÁ·Î±×·¥ ¶curses ÀÇ ¼¼°è¿¡ ¿Â °É ȯ¿µÇÑ´Ù. ¶óÀ̺귯¸®·Î ¶Ù¾îµé¾î ±×°ÍÀÇ ´Ù¾çÇÑ Æ¯Â¡µéÀ» »ìÆìº¸±â Àü¿¡, bells and whistles, ¼¼°è¿¡ ¾È³çÀ» Ç¥ÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾îº¸ÀÚ.
[edit]
1.2.1 Ncurses ¶óÀ̺귯¸®¿Í °°ÀÌ ÄÄÆÄÀÏ Çϱ⠶ncurses ¶óÀ̺귯¸®ÀÇ ÇÔ¼öµéÀ» ¾²±â À§Çؼ± ncurses.h °¡ ÀÎŬ·çµå µÇ¾î¾ß Çϰí ÇÁ·Î±×·¥À» ncurses ¿Í ¸µÅ©½ÃŰ´Â -lncurses Ç÷¡±×°¡ ´õÇØÁ®¾ß ÇÑ´Ù.
ncurses.h ´Â stdio.h ¿¡ ÀÌ¹Ì ÀÎŬ·çµå µÇ¾î ÀÖ´Ù.
#include <ncurses.h>
.
.
.
compile and link: gcc <program file> -lncurses
Example 1. The Hello World !!! Program
#include <ncurses.h>
int main()
{
initscr(); /* Start curses mode */
printw("Hello World !!!"); /* Print Hello World */
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
[edit]
1.2.2 ºÐ¼® ¶À§ ÇÁ·Î±×·¥Àº ȸ鿡 "Hello World !!!" ¸¦ Âï°í Á¾·áÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¾î¶»°Ô curses ¸¦ ÃʱâÈ Çϰí, ½ºÅ©¸°À» ´Ù·ç´ÂÁö ¶Ç ¾î¶»°Ô curses ¸ðµå¸¦ Á¾·áÇÏ´ÂÁö º¸¿©ÁØ´Ù. ÀÚ ÀÌÁ¦ ÇÑÁÙ ÇÑÁÙ ºÐ¼®Çغ¸ÀÚ.
[edit]
1.2.2.1 initscr() ¿¡ ´ëÇØ ¶initscr() ÇÔ¼ö´Â curses mode ·Î Å͹̳ÎÀ» ÃʱâÈ ÇÑ´Ù. ¸î¸î ±¸Çö¿¡¼´Â ȸéÀ» Ŭ¸®¾îÇÏ°í ºó ȸéÀ» º¸¿©Áֱ⵵ ÇÑ´Ù. curses ÆÐŰÁö¸¦ ÀÌ¿ëÇØ¼ ½ºÅ©¸° 󸮸¦ ÇÒ·Á¸é ÀÌ ÇÔ¼ö¸¦ ¹Ýµå½Ã ¸ÕÀú ÄÝÇØ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â curses ½Ã½ºÅÛÀ» ÃʱâÈ Çϰí 'stdscr' À̶ó ºÒ¸®´Â ¿ì¸®ÀÇ ÇöÀç À©µµ¿ì¿Í ¸î¸î µ¥ÀÌÅ͵é-±¸Á¶Ã¼- µéÀ» À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÑ´Ù. ¾ÆÁÖ ±ØÇÑ »óȲ¿¡¼³ª ÀÌ ÇÔ¼ö´Â curses ¶óÀ̺귯¸®ÀÇ µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ À§ÇÑ ¸Þ¸ð¸®¸¦ ÇÒ´ç½ÇÆÐ·Î ¿¡·¯´Â ³¾ °ÍÀÌ´Ù.
À̰ÍÀÌ ¼öÇàµÈ ÈÄ ¿ì¸®´Â curses ¼¼ÆÃÀ» ÆíÀÇ¿¡ ¸ÂÃß±âÀ§ÇÑ ´Ù¾çÇÑ Ãʱâȸ¦ ÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ ´ëÇÑ »ó¼¼ ¼³¸íÀº Â÷Â÷ ´Ù·ç±â·Î ÇÑ´Ù.
[edit]
1.2.2.2 ½Å±âÇÑ refresh() ¶´ÙÀ½ ÁÙÀÇ printw ´Â "Hello World !!!" ¸¦ ȸ鿡 Âï´Â´Ù. ÀÌ ÇÔ¼ö´Â stdscr À̶ó ºÒ¸®´Â À©µµ¿ì ³»¿¡ (y,x)À§Ä¡¿¡ µ¥ÀÌÅ͸¦ Âï´Â´Ù´Â Á¡À» Á¦¿ÜÇϰí´Â printf ÇÔ¼ö¿Í ºñ½ÁÇÏ´Ù. À§ ÇÁ·Î±×·¥¿¡¼´Â Ä¿¼À§Ä¡°¡ 0,0 À̱⠶§¹®¿¡ À©µµ¿ìÀÇ ¿ÞÂÊ ¸Ç À§ ±¸¼®¿¡ ½ºÆ®¸µÀ» Âï°Ô µÈ´Ù.
´ÙÀ½Àº ½ÅºñÇÑ refresh() ÇÔ¼ö¸¦ º¼ Â÷·ÊÀÌ´Ù. ¿ì¸®°¡ printw ÇÔ¼ö¸¦ È£ÃâÇÏ¸é »ç½Ç»ó µ¥ÀÌÅÍ´Â stdscr À̶õ ºÒ¸®´Â °¡»óÀÇ À©µµ¿ì¿¡¸¸ ¾²¿©Áö°í ȸ鿡´Â ¾ÆÁ÷ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. printw °¡ ÇÏ´Â ÀÏÀº ¸î¸î Ç÷¡±×µé°ú µ¥ÀÌÅÍ ±¸Á¶Ã¼µéÀ» °»½ÅÇϰí stdscr ¿¡ ÇØ´çÇÏ´Â ¹öÆÛ¿¡ µ¥ÀÌÅ͵éÀ» ¾²´Â °ÍÀÌ´Ù. ±×°ÍÀ» ȸ鿡 Ç¥½ÃÇϱâ À§Çؼ´Â refresh() ÇÔ¼ö¸¦ È£ÃâÇÏ¿© curses ½Ã½ºÅÛÀÌ ±× ¹öÆÛÀÇ ³»¿ëµéÀ» ȸ鿡 ³ªÅ¸³»µµ·Ï ÇØ¾ß ÇÑ´Ù.
¿©±â¿£ ÇÁ·Î±×·¡¸Ó°¡ °¡»óÀÇ ½ºÅ©¸°À̳ª À©µµ¿ì¿¡ ¿©·¯¹ø °»½ÅÀ» ÇÑ´ÙÀ½ ÇѹøÀÇ refresh ·Î ȸéÀ» ÀüºÎ °»½ÅÇѴٴ öÇÐÀÌ ±ò·Á ÀÖ´Ù. refresh() ÇÔ¼ö´Â À©µµ¿ì¸¦ È®ÀÎÇÏ°í º¯ÈµÈ ºÎºÐ¸¸ °»½ÅÇÑ´Ù. À̰ÍÀº ºü¸¥ ¹ÝÀÀ¼Óµµ¿Í ÈξÀ ÁÁÀº À¯¿¬ÇÔÀ» Á¦°øÇÑ´Ù. ±×·¯³ª Ãʺ¸ÀÚ¿¡°Ô´Â Á¶±Ý È¥¶õ½º·¯¿î ¸éÀÌ ÀÖ´Ù. Ãʺ¸ÀÚµéÀÌ ÇàÇÏ´Â ÀϹÝÀûÀÎ ½Ç¼ö´Â printw() ·ùÀÇ ÇÔ¼öµéÀ» ½á¼ ÀÛ¾÷À» ÇÑ´ÙÀ½ refresh() ¸¦ ±î¸Ô°ï ÇÑ´Ù´Â °ÍÀÌ´Ù. ³ª ¶ÇÇÑ ¿©ÀüÈ÷ ÀÌ°É ¶§¶§·Î ±î¸Ô°ï ÇÑ´Ù
[edit]
1.2.2.3 endwin() ¿¡ ´ëÇØ ¶±×¸®°í ÃÖÁ¾ÀûÀ¸·Î curses ¸ðµå¸¦ ³¡³»´Â °É Àؾ ¾ÈµÈ´Ù. ±×·¸Áö¾ÊÀ¸¸é ÇÁ·Î±×·¥ Á¾·á ÈÄ¿¡ ´ç½ÅÀÇ Å͹̳ÎÀº ÀÌ»óÇÏ°Ô ÀÛµ¿ÇÒ °ÍÀÌ´Ù. endwin() ÇÔ¼ö´Â curses ÀÇ ÇÏÀ§ ½Ã½ºÅÛµé°ú µ¥ÀÌÅÍ ±¸Á¶Ã¼°¡ Á¡À¯Çß´ø ¸Þ¸ð¸®¸¦ ÇØÁ¦Çϰí Å͹̳ÎÀ» ÀϹÝÀûÀÎ ¸ðµå·Î ¹Ù²ã ³õ´Â´Ù. ÀÌ ±â´ÉÀº curses ¸ðµå¿¡¼ ÀÛ¾÷À» ¸¶Ä¡°Ô µÇ¸é ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÑ´Ù.
[edit]
1.3 The Gory Details ¶ÀÚ ÀÌÁ¦ ¿ì¸®´Â °£´ÜÇÑ curses ÇÁ·Î±×·¥À» ¾î¶»°Ô ÀÛ¼ºÇÏ´ÂÁö »ìÆìº¸¾Ò´Ù. ÀÌÁ¦ Á» ´õ »ó¼¼ÇÑ °ÍµéÀ» ¾Ë¾Æº¸ÀÚ. ´ç½ÅÀÌ È¸é¿¡¼ º¸´Â °ÍµéÀ» ¹Ù²Ü ¼ö ÀÖ´Â ¸¹Àº ÇÔ¼öµéÀÌ ÀÖÀ¸¸é ¾ÕÀ¸·Î ¸¹ÀÌ »ç¿ëµÉ ´Ù¾çÇÑ Æ¯Â¡µéÀÌ ÀÖ´Ù.
ÀÚ ½ÃÀÛÇÕ´Ï´Ù...
[edit]
1.4 ÃʱâÈ ¶¿ì¸®´Â ÀÌÁ¦ curses ½Ã½ºÅÛÀ» ÃʱâÈ Çϱâ À§Çؼ´Â initscr() ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¾È´Ù. ÀÌ ÃʱâÈ ÀÌÈÄ¿¡ curses ¼¼¼ÇÀ» ¼³Á¤Çϱâ À§ÇØ È£ÃâÇÒ ¼ö ÀÖ´Â ÇÔ¼öµéÀÌ ´õ ÀÖ´Ù. ÀÌ°É ÅëÇØ ¿ì¸®´Â curses ½Ã½ºÅÛ¿¡ Å͹̳ÎÀ» raw ¸ðµå·Î ¼¼ÆÃÇØ´Þ¶ó°í Çϰųª »öÀ» ÃʱâÈ Çϰųª ¸¶¿ì½ºµîÀ» ÃʱâÈ ÇÒ ¼öµµ ÀÖ´Ù. ±×·³ initscr() ÇÔ¼ö ÀÌÈÄ¿¡ º¸Åë È£ÃâµÇ´Â ÇÔ¼öµé¿¡ ¾î¶²°ÍµéÀÌ ÀÖ´ÂÁö »ìÆìº¸µµ·Ï ÇÏÀÚ.
[edit]
1.4.2 raw() ¿Í cbreak() ¶º¸Åë Å͹̳Πµå¶óÀ̹ö´Â new line À̳ª ij¸®Áö¸®ÅÏÀÌ µé¾î¿Ã ¶§±îÁö »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ³»¿ëÀ» ¹öÆÛ¸µÇÑ´Ù. ±×·¯³ª ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀº »ç¿ëÀÚ°¡ ŸÀÌÇÎÀ» ÇÏ°í³ª¼ µÉ ¼ö ÀÖ´Â ÇÑ »¡¸® ±× ¹®ÀÚµéÀ» ÇÊ¿ä·Î ÇÑ´Ù. À§ÀÇ µÎ ÇÔ¼ö´Â ¶óÀÎ ¹öÆÛ¸µÀ» ºñȰ¼ºÈ ½ÃŰ´Â µ¥ ÀÚÁÖ »ç¿ëµÈ´Ù. ÀÌ µÎ ÇÔ¼öÀÇ Â÷ÀÌÁ¡Àº suspend (CTRL-Z) ³ª interrupt ±×¸®°í quit (CTRL-C) ¿Í °°Àº control ¹®ÀÚµéÀÌ ÇÁ·Î±×·¥¿¡ Àü´ÞµÇ´Â ¹æ¹ý¿¡ ÀÖ´Ù. raw() ¸ðµå¿¡¼ ÀÌ control ¹®ÀÚµéÀº signal À» ¹ß»ý½ÃŰÁö ¾Ê°í ¹Ù·Î ÇÁ·Î±×·¥¿¡ Àü´ÞµÈ´Ù. cbreak() ¸ðµå¿¡¼ ÀÌ control ¹®ÀÚµéÀº Å͹̳Πµå¶óÀ̹ö¿¡ ÀÇÇØ ´Ù¸¥ ¾î¶² ¹®ÀÚ·Î ¹ø¿ªµÈ´Ù. ³ª´Â °³ÀÎÀûÀ¸·Î »ç¿ëÀÚµéÀ» º¸´Ù ´õ Àß Á¦¾îÇÏ´Â ¿¬½ÀÀ» Çϱâ À§Çؼ raw() ¸¦ ¾Ö¿ëÇÏ´Â ÆíÀÌ´Ù.
[edit]
1.4.3 echo() ¿Í noecho() ¶ÀÌ ÇÔ¼öµéÀº »ç¿ëÀÚµéÀÌ Å͹̳ο¡ ÀÔ·ÂÇÑ ¹®ÀÚµéÀ» echoing ÇÒ °ÍÀÎÁö Á¦¾îÇÑ´Ù. echoing ¿¡ ´ëÇÑ ´õ ¸¹Àº Á¦¾î¸¦ Çϱâ À§Çؼ³ª ¶Ç´Â getch() µîÀÇ ÇÔ¼ö·Î »ç¿ëÀڵ鿡°Ô¼ ÀÔ·ÂÀ» ¹Þ°í ÀÖÀ» ¶§ ºÒÇÊ¿äÇÑ echoing À» ¾ø¾Ö±â À§Çؼ ÀÌ ÇÔ¼öµéÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ´ëºÎºÐÀÇ ÀÎÅÍ·¢Æ¼ºêÇÑ ÇÁ·Î±×·¥µéÀº noecho() ¸¦ Ãʱâȶ§ È£ÃâÇϰí ÇÊ¿äÇÒ¶§¸é Á¦¾î¸¦ ÅëÇØ echoing À» ÇÑ´Ù. ÀÌ·¸°Ô Çϸé ÇÁ·Î±×·¡¸Ó´Â À©µµ¿ìÀÇ (y,x) ÀÇ À§Ä¡¸¦ ±»ÀÌ °»½Å½ÃŰÁö ¾Ê´õ¶óµµ ÇÊ¿äÇÑ À§Ä¡¿¡ ¹®ÀÚµéÀ» echoing ÇÒ¼ö ÀÖ´Â À¶Å뼺À» °¡Áö°Ô µÈ´Ù.
[edit]
1.4.4 keypad() ¶ÀÌ ÇÔ¼ö´Â ³»°¡ ÁÁ¾ÆÇÏ´Â ÃʱâÈ ÇÔ¼öÁß ÇϳªÀÌ´Ù. À̰ÍÀº F1, F2, ¹æÇâŰ °°Àº ±â´É۵éÀ» ÀԷ¹ÞÀ» ¼ö ÀÖ°Ô ÇÑ´Ù. ¹æÇâ۵éÀº ¾î¶°ÇÑ »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¿¡¼µµ Å« ºñÁßÀ» Â÷ÁöÇϵíÀÌ, °ÅÀÇ ¸ðµç ÀÎÅÍ·¢Æ¼ºêÇÑ ÇÁ·Î±×·¥µéÀº ÀÌ ±â´ÉµéÀ» ÇÊ¿ä·Î ÇÑ´Ù. keypad(stdscr, TRUE) ¸¦ È£ÃâÇÏ´Â °ÍÀº ÀÏ¹Ý È¸éÀÎ (stdscr) ¿¡¼ ÀÌ ±â´ÉÀ» ¾²°Ô ÇÑ´Ù. ÀÌ ¹®¼ÀÇ Â÷ÈÄ ¼½¼Ç¿¡¼ ´õ ¸¹Àº Ű »ç¿ë¹ýÀ» ¹è¿ì°Ô µÉ °ÍÀÌ´Ù.
[edit]
1.4.5 halfdelay() ¶ÀÌ ÇÔ¼ö´Â ÀÚÁÖ ¾²ÀÌÁö´Â ¾ÊÁö¸¸ ¶§·Ð ¸Å¿ì À¯¿ëÇÏ°Ô ¾²ÀδÙ. halfdelay() ÇÔ¼ö´Â ŸÀÌÇÎµÈ ¹®ÀÚµéÀÌ ÇÁ·Î±×·¥¿¡¼ ¹Ù·Î »ç¿ë°¡´ÉÇÏ°Ô ÇÏ´Â cbreak() ¸ðµå¿Í ºñ½ÁÇÑ half-delay ¸ðµå¸¦ ¾²°Ô ÇÑ´Ù. ±×·¯³ª ÀÌ ÇÔ¼ö´Â ÀԷ¿¡ ´ëÇØ¼ ½ÊºÐÀÇ 'X' ÃÊ ¸¸Å ±â´Ù¸®¸ç ¸¸¾à ¾Æ¹« ÀÔ·ÂÀÌ ¾ø´Ù¸é ERR À» ¸®ÅÏÇÑ´Ù. 'X' ´Â halfdelay() ÇÔ¼ö¿¡ Àü´ÞµÇ´Â ŸÀӾƿô °ªÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ´ç½ÅÀÌ »ç¿ëÀÚ¿¡°Ô ÀÔ·ÂÀ» ¿ä±¸ÇÏ°í ¸¸¾à ƯÁ¤ ½Ã°£ µ¿¾È ÀÔ·ÂÀÌ ¾ø´Ù¸é ´Ù¸¥ ¾î¶² ÀÛ¾÷À» ÇÒ¶§¿¡ »ç¿ëµÈ´Ù. ÆÐ½º¿öµå ÇÁ·ÒÇÁÆ® µî¿¡¼ ŸÀӾƿôÀÌ ÀÖ´Â °ÍµîÀÌ ±× ÁÁÀº ¿¹ÀÌ´Ù.
[edit]
1.4.6 ±×¿Ü Àâ´ÙÇÑ ÃʱâÈ ÇÔ¼öµé ¶À§¿¡¼ ¾ê±âÇÑ °Í ¸»°íµµ Ä¿¼ÀÇ ¿òÁ÷ÀÓÀ» ¼³Á¤ÇÏ´Â ÃʱâÈ ÇÔ¼öµéÀÌ Á» ´õ ÀÖ´Ù. ±×·¯³ª ±×°ÍµéÀº À§¿¡¼ ¾ð±ÞÇÑ °Íµé¸¸Å Àß ¾²ÀÌÁö ¾Ê´Â´Ù. ÀÌ Áß ¸î¸îÀº ºÎ·Ï¿¡¼ ¼³¸íÇÒ °ÍÀÌ´Ù.
[edit]
1.4.7 ¿¹Á¦ ¶ÀÌ ÇÔ¼öµéÀÇ »ç¿ë¹ýÀ» ¸íÈ®È÷ ÀÌÇØÇÒ ¼ö ÀÖ´Â ÇÁ·Î±×·¥À» Â¥º¸ÀÚ.
Example 2. Initialization Function Usage example
#include <ncurses.h>
int main()
{ int ch;
initscr(); /* Start curses mode */
raw(); /* Line buffering disabled */
keypad(stdscr, TRUE); /* We get F1, F2 etc.. */
noecho(); /* Don't echo() while we do getch */
printw("Type any character to see it in bold\n");
ch = getch(); /* If raw() hadn't been called
* we have to press enter before it
* gets to the program */
if(ch == KEY_F(1)) /* Without keypad enabled this will */
printw("F1 Key pressed");/* not get to us either */
/* Without noecho() some ugly escape
* charachters might have been printed
* on screen */
else
{ printw("The pressed key is ");
attron(A_BOLD);
printw("%c", ch);
attroff(A_BOLD);
}
refresh(); /* Print it on to the real screen */
getch(); /* Wait for user input */
endwin(); /* End curses mode */
return 0;
}
ÀÌ ÇÁ·Î±×·¥Àº ÀÚü ÁÖ¼®ÀÌ µÇ¾î ÀÖ´Ù. ±×·¯³ª ¾ÆÁ÷ ¼³¸íÇÏÁö ¾ÊÀº ÇÔ¼ö°¡ Çϳª Àִµ¥, »ç¿ëÀڷκÎÅÍ ¹®ÀÚ¸¦ ÀԷ¹޴ getch() ÇÔ¼ö°¡ ±×°ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ÀÔ·ÂÈÄ <enter> ¸¦ ÇÇÇϱâ À§ÇØ ¶óÀÎ ¹öÆÛ¸µÀ» ÇØÁ¦ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» Á¦¿ÜÇϸé getchar() ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù. getch() ÀÇ ´õ ¸¹Àº Á¤º¸¿Í ۸¦ ÀԷ¹޴ °Í¿¡ ´ëÇØ¼´Â key management ¼½¼ÇÀ» Âü°íÇÏ±æ ¹Ù¶õ´Ù. attron °ú attroff ÇÔ¼ö´Â ¾î¶² Ư¼ºÀ» ²ô°í Äѱâ À§ÇØ »ç¿ëµÈ´Ù. ¿¹Á¦¿¡¼´Â ¹®ÀÚ¸¦ bold ü·Î Âï±âÀ§ÇØ »ç¿ëÇÏ¿´´Ù. ÀÌ ÇÔ¼öµéµµ ÈÄ¿¡ ÀÚ¼¼È÷ ¼³¸íÇÑ´Ù.
[edit]
1.5 À©µµ¿ì¿¡ °üÇØ ¶ncurses ÀÇ ¹«¼öÇÑ ÇÔ¼öµé·Î ¶Ù¾îµé±â Àü¿¡, À©µµ¿ì ¿¡ ´ëÇØ ¸î°¡Áö¸¸ ¸íÈ®È÷ Çϵµ·Ï ÇÏÀÚ. À©µµ¿ìÀÇ ÀÚ¼¼ÇÑ »çÇ׿¡ ´ëÇØ¼´Â ´ÙÀ½ ¼½¼Ç¿¡¼ ¼³¸íÇÒ °ÍÀÌ´Ù.
À©µµ¿ì´Â curses ½Ã½ºÅÛ¿¡ ÀÇÇØ Á¤ÀÇµÈ °¡»ó ȸéÀÌ´Ù. ±×·¯³ª À©µµ¿ì´Â ´ç½ÅÀÌ Win9X Ç÷§Æû¿¡¼ ÈçÈ÷ º¸´ø Å׵θ®°¡ Àִ âÀ» ¶æÇÏÁö´Â ¾Ê´Â´Ù. curses °¡ Ãʱâ鵃 ¶§, ´ç½ÅÀÇ 80x25 (¶Ç´Â ÇöÀç ½ÇÇàµÇ´Â âÀÇ Å©±â¸¸Å) ½ºÅ©¸°À» ÀǹÌÇÏ´Â stdscr À̶ó´Â ±âº» À©µµ¿ì°¡ »ý¼ºµÈ´Ù. ¸¸¾à ´ç½ÅÀÌ ¸î¸î ½ºÆ®¸µÀ» Âï°Å³ª, ÀÔ·ÂÀ» ¹Þ´Â µîÀÇ °£´ÜÇÑ ÀÛ¾÷µéÀ» ÇÒ °ÍÀ̶ó¸é, ÀÌ ±âº» À©µµ¿ì¸¸ ½áµµ µÈ´Ù. ¹Ý¸é âÀ» »ý¼ºÇؼ, ±× ƯÁ¤ À©µµ¿ì¿¡¼ ±ò²ûÈ÷ ÀÛµ¿ÇÒ ÇÔ¼öµéÀ» È£ÃâÇØµµ µÈ´Ù.
¿¹¸¦ µé¾î, ¸¸¾à ´ç½ÅÀÌ ¾Æ·¡¸¦ È£ÃâÇÑ´Ù¸é
printw("Hi There !!!");
refresh();
À̰ÍÀº stdscr ÀÇ ÇöÀç Ä¿¼ À§Ä¡¿¡ ½ºÆ®¸µÀ» ÂïÀ» °ÍÀÌ´Ù. ºñ½ÁÇÏ°Ô refresh() ÇÔ¼ö È£Ãâ ¶ÇÇÑ stdscr ¿¡¼¸¸ ÀÛµ¿ÇÒ °ÍÀÌ´Ù.
´ç½ÅÀÌ ¸¸¾à À©µµ¿ì¸¦ ¸¸µé¾ú´Ù¸é, º¸ÅëÇÔ¼ö À̸§ ¾Õ¿¡ 'w' °¡ ºÙÀº ÇÔ¼öµéÀ» È£ÃâÇØ¾ß¸¸ ÇÑ´Ù.
wprintw(win, "Hi There !!!");
wrefresh(win);
¹®¼ÀÇ ³ª¸ÓÁö ºÎºÐ¿¡¼ ¹è¿ï °ÍÀÌÁö¸¸, ÇÔ¼öÀÇ À̸§Àº °°Àº ÀÛ¸í¹ýÀ» µû¸¥´Ù. °¢°¢ÀÇ ÇÔ¼ö¿¡´Â º¸Åë ºñ½ÁÇÑ ¼¼°³ÀÇ ÇÔ¼ö°¡ ´õ ÀÖ´Ù.
printw(string); /* Print on stdscr at present cursor position */
mvprintw(y, x, string);/* Move to (y, x) then print string */
wprintw(win, string); /* Print on window win at present cursor position */
/* in the window */
mvwprintw(win, y, x, string); /* Move to (y, x) relative to window */
/* co-ordinates and then print */
º¸Åë w °¡ ºÙÁö ¾ÊÀº ÇÔ¼ö´Â À©µµ¿ì ÆÄ¶ó¸ÞÅÍ·Î stdscr À» »ç¿ëÇÏ´Â w °¡ ºÙÀº ÇÔ¼öµé¿¡ ´ëÇÑ ¸ÅÅ©·ÎÀÌ´Ù.
[edit]
1.6 printw() °°Àº Ãâ·Â ÇÔ¼ö¿¡ ´ëÇØ ¶¾Æ¸¶ ´ç½ÅÀº ÀÌÁ¦ ¹«¾ð°¡¸¦ ÇÏ°í ½Í¾î ¾È´ÞÀÌ ³µÀ» °Í °°´Ù. curses ÇÔ¼öµéÀÇ ¸ðÇèÀ¸·Î ´Ù½Ã µ¹¾Æ°¡ÀÚ. ÀÚ ÀÌÁ¦ curses ´Â ÃʱâÈ µÇ¾ú´Ù¸é, ¼¼°è¿Í interact ¸¦ ÇØº¸ÀÚ.
ȸ鿡 Ãâ·ÂÀ» ÇÏ´Â ÇÔ¼ö¿¡´Â Å©°Ô ¼¼Á¾·ù°¡ ÀÖ´Ù.
[edit]
1.6.1 addch() ·ùÀÇ ÇÔ¼öµé ¶ÀÌ ÇÔ¼öµéÀº ÇöÀç Ä¿¼ À§Ä¡¿¡ ÇÑ ¹®ÀÚ¸¦ Âï°í Ä¿¼ÀÇ À§Ä¡¸¦ ´ÙÀ½À¸·Î ¿Å±ä´Ù. ´ç½ÅÀº ÀÌ°É ÅëÇØ ¹®ÀÚ¸¦ ÂïÀ» ¼öµµ ÀÖÁö¸¸, º¸Åë ÀÌ ÇÔ¼öµéÀº ¸î¸î ¼Ó¼ºÀÌ ÀÖ´Â ¹®ÀÚµéÀ» ÂïÀ» ¶§ ¾²ÀδÙ. ¼Ó¼º¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº µÚ¿¡ ´Ù·ç°í ÀÖ´Ù. ¸¸¾à ¹®ÀÚ¿¡ ¾î¶°ÇÑ ¼Ó¼ºµé (±½Àº ±Û¾¾, ¹ÝÀü»ö µîµî) ÀÌ °áÇյǾî ÀÖ´Ù¸é curses °¡ ±× ¹®ÀÚ¸¦ Ãâ·ÂÇÒ¶§ ±× ¼Ó¼º¿¡ ¸Â°Ô Ãâ·ÂÇÏ°Ô µÈ´Ù.
¹®ÀÚ¿¡ ƯÁ¤ ¼Ó¼ºµéÀ» ³ÖÀ¸·Á¸é ´ÙÀ½ÀÇ µÎ°¡Áö ¹æ¹ýÀÌ ÀÖ´Ù.
addch(ch | A_BOLD | A_UNDERLINE);
[edit]
1.6.2 mvaddch(), waddch() ¿Í mvwaddch() ¶mvaddch() ÇÔ¼ö´Â Ä¿¼¸¦ ÁÖ¾îÁø À§Ä¡·Î ¿Å±â°í ¹®ÀÚ¸¦ Ãâ·ÂÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ¾´´Ù.
move(row,col); /* moves the cursor to rowth row and colth column */
addch(ch);
can be replaced by
mvaddch(row,col,ch);
waddch() ÇÔ¼ö´Â addch() ¿Í ºñ½ÁÇÏ´Ù. ´Ü ÁÖ¾îÁø À©µµ¿ì¿¡ ¹®ÀÚ¸¦ Âï´Â´Ù´Â Á¡À» Á¦¿ÜÇÏ°ï ¸»ÀÌ´Ù. (addch() ÇÔ¼ö´Â stdscr À©µµ¿ì¿¡ ¹®ÀÚ¸¦ Âï´Â´Ù´Â °Í¿¡ ÁÖÀÇÇ϶ó.)
ÀÌ¿Í À¯»çÇÏ°Ô mvwaddch() ÇÔ¼öµµ ÁÖ¾îÁø À©µµ¿ì³»¿¡¼ ÁÖ¾îÁø À§Ä¡¿¡ ¹®ÀÚ¸¦ ÂïÀ» ¶§ »ç¿ëµÈ´Ù.
ÀÚ ¿ì¸®´Â ±âº»ÀûÀÎ Ãâ·Â ÇÔ¼öÀÎ addch() ¿¡ ´ëÇØ ¾Ë¾Æº¸¾Ò´Ù. ±×·±µ¥ ¸¸¾à ¿ì¸®°¡ ½ºÆ®¸µÀ» Âï±æ ¿øÇÑ´Ù¸é ÇѱÛÀÚ¾¿ Âï´Â °ÍÀº ¸Å¿ì ¹ø°Å·Î¿î ÀÏÀÌ µÉ °ÍÀÌ´Ù. ¿îÁÁ°Ôµµ ncurses ´Â printf ·ù³ª puts ·ùÀÇ ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.
[edit]
1.6.3 printw() ·ùÀÇ ÇÔ¼öµé ¶ÀÌ ÇÔ¼öµéÀº ½ºÅ©¸°ÀÇ ¾Æ¹« À§Ä¡¿¡³ª Ãâ·ÂÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ ´õÇØÁø printf() ÇÔ¼ö¶ó°í º¸¸é µÈ´Ù.
[edit]
1.6.3.1 printw() ¿Í mvprintw ¶ÀÌ µÎ°³ÀÇ ÇÔ¼ö´Â printf() ¿Í ÀÛµ¿¹ýÀÌ À¯»çÇÏ´Ù. mvprintw() ´Â Ä¿¼¸¦ ƯÁ¤À§Ä¡·Î ¿Å±â°í Ãâ·ÂÇÒ¶§ ¾²ÀδÙ. ¸¸¾à ´ç½ÅÀÌ Ä¿¼¸¦ ÀÏ´Ü ¸ÕÀú ¿Å±â°í ±× ÈÄ¿¡ printw() ÇÔ¼ö·Î Ãâ·ÂÀ» ÇϰíÀÚ ÇÑ´Ù¸é, move() ÇÔ¼ö¸¦ ¸ÕÀú ¾²°í printw() ÇÔ¼ö¸¦ ¾²¸éµÈ´Ù. ÀÌ·± °æ¿ì¿£ mvprintw() ÇÔ¼ö¸¦ ¾²¸é µÇ°ÚÁö¸¸, ¾Æ¹«Æ° ´ç½ÅÀÌ ¿øÇÏ´Â ´ë·Î À¶Å뼺ÀÖ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù.
[edit]
1.6.3.2 wprintw() ¿Í mvwprintw ¶ÀÌ µÎ ÇÔ¼ö´Â ÀÎÀÚ·Î ¹ÞÀº À©µµ¿ì¿¡ Ãâ·ÂÇÑ´Ù´Â Á¡À» Á¦¿ÜÇϰï À§ÀÇ µÎ ÇÔ¼ö¿Í µ¿ÀÏÇÏ´Ù.
[edit]
1.6.3.3 vwprintw() ¶ÀÌ ÇÔ¼ö´Â vprintf() ¿Í ºñ½ÁÇÏ´Ù. ÇÔ¼ö ÀÎÀÚÀÇ Á¾·ù°¡ ´Ù¾çÇÑ °æ¿ì¸¦ Ãâ·ÂÇÒ¶§ ¾µ ¼ö ÀÖ´Ù.
[edit]
1.6.3.4 °£´ÜÇÑ printw ¿¹Á¦ ¶Example 3. A Simple printw example
#include <ncurses.h> /* ncurses.h includes stdio.h */
#include <string.h>
int main()
{
char mesg[]="Just a string"; /* message to be appeared on the screen */
int row,col; /* to store the number of rows and *
* the number of colums of the screen */
initscr(); /* start the curses mode */
getmaxyx(stdscr,row,col); /* get the number of rows and columns */
mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
/* print the message at the center of the screen */
mvprintw(row-2,0,"This screen has %d rows and %d columns\n",row,col);
printw("Try resizing your window(if possible) and then run this program again");
refresh();
getch();
endwin();
return 0;
}
À§ ÇÁ·Î±×·¥Àº printw ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ¾ó¸¶³ª ½¬¿îÁö º¸¿©ÁÖ°í ÀÖ´Ù. ´ÜÁö À§Ä¡¿Í ȸ鿡 ³ªÅ¸³¯ ¸Þ¼¼Áö¸¦ ³Ñ°ÜÁֱ⸸ ÇÏ¸é µÈ´Ù.
À§ ÇÁ·Î±×·¥¿¡´Â ncurses.h ¿¡ Á¤ÀÇµÈ ¸ÅÅ©·Î ÇÔ¼ö getmaxyx() °¡ »ç¿ëµÇ¾ú´Ù. ÀÌ ÇÔ¼ö´Â ÁÖ¾îÁø À©µµ¿ìÀÇ Çà°ú ¿ÀÇ ÃÖ´ë°ªÀ» ±¸Çؼ ¸®ÅÏÇÑ´Ù. getmaxyx() ÇÔ¼ö´Â ÁÖ¾îÁø º¯¼öÀÇ °ªÀ» °»½ÅÇÏ°Ô µÇ´Âµ¥, ÀÌÀ¯´Â ¿ì¸®°¡ ±× ÇÔ¼ö¿¡ º¯¼ö¿¡´ëÇÑ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁØ °ÍÀÌ ¾Æ´Ï¶ó ´ÜÁö º¯¼ö¸¦ ³Ñ°ÜÁá±â ¶§¹®ÀÌ´Ù.
[edit]
1.6.4 addstr() ·ùÀÇ ÇÔ¼öµé ¶addstr() ÇÔ¼ö´Â ÁÖ¾îÁø À©µµ¿ì¿¡ ¹®ÀÚ¿À» ÂïÀ» ¶§ »ç¿ëÇÑ´Ù. À̰ÍÀº ÁÖ¾îÁø ¹®ÀÚ¿ÀÇ °¢ ¹®ÀÚ¿¡ ´ëÇØ addch() ¸¦ ¸Å¹ø È£ÃâÇÏ´Â °Í°ú À¯»çÇѵ¥, ÀÌ´Â ¸ðµç Ãâ·Â ÇÔ¼öµé¿¡ ´ëÇØ¼µµ ¸¶Âù°¡ÁöÀÌ´Ù. ¿©±â¿¡µµ curses ÀÇ ÀÛ¸í¹ýÀ» µû¸£´Â mvaddstr(), mvwaddstr(), waddstr() µîÀÇ À¯»çÇÔ¼öµéÀÌ ÀÖ´Ù.(e.g. mvaddstr() ÇÔ¼ö´Â move() ¸¦ È£ÃâÇÏ°í³ª¼ addstr() À» È£ÃâÇÏ´Â °Í°ú °°´Ù.) À̿ܿ¡µµ Á¤¼ö ÀÎÀÚ(n À̶óÇÏÀÚ) ¸¦ Ãß°¡·Î ¹Þ´Â addnstr() À̶ó´Â ÇÔ¼ö°¡ Àִµ¥, ÀÌ ÇÔ¼ö´Â ÃÖ´ë n °³ÀÇ ¹®ÀÚ¸¦ ȸ鿡 Ãâ·ÂÇÑ´Ù. ¸¸¾à n ÀÌ À½¼ö¶ó¸é, ¹®ÀÚ¿À» ¸ðµÎ Âï°ÔµÈ´Ù.
[edit]
1.6.5 ÁÖÀÇ »çÇ× ¶ÀÌ ÇÔ¼öµéÀº ÀüºÎ y À§Ä¡ °ªÀ» ¸ÕÀú ÀÎÀÚ·Î ¹Þ°í ±× µÚ¿¡ x ¸¦ ¹Þ´Â´Ù. Ãʺ¸ÀÚ°¡ ÈçÈ÷ ÇÏ´Â ½Ç¼öÁß Çϳª°¡ x,y ¼ø¼·Î °ªÀ» Àü´ÞÇÏ´Â °ÍÀÌ´Ù. ¸¸¾à ´ç½ÅÀÌ (y,x) ÁÂÇ¥·Î ¸¹Àº ÀÛ¾÷À» ÇØ¾ß ÇÑ´Ù¸é, ½ºÅ©¸°À» À©µµ¿ì·Î ³ª´²¼ °¢°¢À» µû·Î ó¸®ÇÏ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¸µµ·Ï ÇÏ¿©¶ó. À©µµ¿ìÁî´Â windows ¼½¼Ç¿¡¼ ´Ù·ç°í ÀÖ´Ù.
[edit]
1.7 scanw() °°Àº ÀÔ·ÂÇÔ¼ö¿¡ ´ëÇØ ¶ÀÔ·Â ¾øÀÌ Ãâ·Â¸¸ ÇÏ´Â °ÍÀº Áö·çÇÏÁö ¾ÊÀº°¡? ÀÌÁ¦ »ç¿ëÀڷκÎÅÍ ÀÔ·ÂÀ» ¹Þ´Â ÇÔ¼öµéÀ» ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ÀÌ ÇÔ¼öµéµµ ¿ª½Ã ¼¼°³ÀÇ Å« ºÐ·ù·Î ³ª´ ¼ö ÀÖ´Ù.
[edit]
1.7.1 getch() ·ùÀÇ ÇÔ¼öµé ¶ÀÌ ÇÔ¼öµéÀº Å͹̳ηΠºÎÅÍ ¹®ÀÚ Çϳª¸¦ ÀԷ¹޴´Ù. ±×·¯³ª ¿©±â¿¡´Â ¹Ýµå½Ã ¤°í ³Ñ¾î°¡¾ßÇÒ ¸î¸î ¹®Á¦°¡ ÀÖ´Ù. ¿¹¸¦ µé¾î ¸¸¾à cbreak() ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é, curses ´Â ´ç½ÅÀÇ ÀԷ¹®ÀÚµéÀ» ¿¬¼ÓÀ¸·Î ÀÐÁö ¾Ê°í new line À̳ª EOF ¹®ÀÚ°¡ µé¾î¿ÔÀ» ¶§¸¸ ÀÔ·ÂÀ» Àб⠽ÃÀÛÇÒ °ÍÀÌ´Ù. À̰ÍÀ» ¸·±â À§Çؼ´Â cbreak() ÇÔ¼ö¸¦ ¹Ýµå½Ã »ç¿ëÇØ¼ ÇÁ·Î±×·¥¿¡¼ ¹®ÀÚµéÀ» Áï°¢ Ȱ¿ëÇÏ°Ô ÇØ¾ßÇÑ´Ù. ¶Ç ´Ù¸¥ ³Î¸® »ç¿ëµÇ´Â ÇÔ¼ö´Â noecho() ÀÌ´Ù. À̸§¿¡¼ ¾Ë ¼ö ÀÖµíÀÌ, ÀÌ ÇÔ¼ö°¡ ¼³Á¤µÇ¸é »ç¿ëÀÚµéÀÌ ´©¸¥ ŰÀÇ ¹®ÀÚ°¡ ȸ鿡 ³ªÅ¸³ªÁö ¾Ê´Â´Ù. cbreak() ¿Í noecho() µÎ ÇÔ¼ö´Â Ű °ü¸®ÀÇ ÀüÇüÀûÀÎ ¿¹ÀÌ´Ù. ÀÌ·± ·ùÀÇ ÇÔ¼öµéÀº key management ¼½¼Ç¿¡¼ ¼³¸íÇϰí ÀÖ´Ù.
[edit]
1.7.2 scanw() ·ùÀÇ ÇÔ¼öµé ¶ÀÌ ÇÔ¼öµéÀº ½ºÅ©¸°ÀÇ ¾Æ¹« À§Ä¡¿¡¼³ª ÀÔ·ÂÀ» ¹ÞÀ» ¼ö ÀÖ´Â ±â´ÉÀÌ ´õÇØÁø scanf() ÇÔ¼ö¿Í À¯»çÇÏ´Ù.
[edit]
1.7.2.1 scanw() ¿Í mvscanw ¶ÀÌ ÇÔ¼öµéÀÇ »ç¿ë¹ýÀº sscanf() ÇÔ¼ö¿Í ºñ½ÁÇѵ¥, ÀԷ¹ÞÀ» ÁÙÀÌ wgetstr() ÇÔ¼ö¿¡ ÀÇÇØ Á¦°øµÈ´Ù. Áï ÀÌ ÇÔ¼öµéÀº wgetstr() ÇÔ¼ö (¾Æ·¡¿¡¼ ¼³¸íÇÔ) À» È£ÃâÇÏ°í ±× °á°ú·Î ¹ÞÀº ÁÙÀ» ½ºÄµ¿¡ »ç¿ëÇÑ´Ù.
[edit]
1.7.2.2 wscanw() ¿Í mvwscanw() ¶ÀÌ ÇÔ¼öµéÀº ÀÔ·ÂÀ» ÀÎÀÚ·Î ¹ÞÀº À©µµ¿ì¿¡¼ Àд´ٴ °Í ¸»°í´Â À§ÀÇ µÎ ÇÔ¼ö¿Í À¯»çÇÏ´Ù.
[edit]
1.7.2.3 vwscanw() ¶ÀÌ ÇÔ¼ö´Â vscanf() ¿Í ºñ½ÁÇÏ´Ù. À̰ÍÀº ÀԷ¹ÞÀ» ÀÎÀÚÀÇ Á¾·ù°¡ ´Ù¾çÇÒ °æ¿ì »ç¿ëµÈ´Ù.
[edit]
1.7.3 getstr() ·ùÀÇ ÇÔ¼öµé ¶ÀÌ ÇÔ¼öµéÀº Å͹̳ηΠºÎÅÍ ¹®ÀÚ¿À» ÀԷ¹ÞÀ» ¶§ »ç¿ëµÈ´Ù. º»ÁúÀûÀ¸·Ð ÀÌ ÇÔ¼ö´Â getch() ÇÔ¼ö¸¦ newline, ij¸®Áö¸®ÅÏ, EOF ¸¦ ¹ÞÀ»¶§ ±îÁö °è¼Ó È£ÃâÇÏ´Â °Í°ú °°Àº ÀÏÀ» ÇÑ´Ù. °á°ú ¹®ÀÚ¿Àº »ç¿ëÀÚ°¡ Á¦°øÇÑ ¹®ÀÚ¿ Æ÷ÀÎÅÍÀÎ str º¯¼ö¿¡ ÀúÀåµÈ´Ù.
[edit]
1.7.4 ¸î¸î ¿¹Á¦ ¶Example 4. A Simple scanw example
#include <ncurses.h> /* ncurses.h includes stdio.h */
#include <string.h>
int main()
{
char mesg[]="Enter a string: "; /* message to be appeared on the screen */
char str[80];
int row,col; /* to store the number of rows and *
* the number of colums of the screen */
initscr(); /* start the curses mode */
getmaxyx(stdscr,row,col); /* get the number of rows and columns */
mvprintw(row/2,(col-strlen(mesg))/2,"%s",mesg);
/* print the message at the center of the screen */
getstr(str);
mvprintw(LINES - 2, 0, "You Entered: %s", str);
getch();
endwin();
return 0;
}
[edit]
1.8 ¼Ó¼º ¶¿ì¸®´Â ¹®ÀÚ¸¦ Ãâ·ÂÇÒ¶§ Ưº°ÇÑ È¿°ú¸¦ ÁÖ±âÀ§Çؼ ¼Ó¼ºÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö ÀÌ¹Ì ¾Ë¾Æº» ÀûÀÌ ÀÖ´Ù. ¼Ó¼ºÀº Àß »ç¿ëÇϱ⸸ Çϸé Á¤º¸¸¦ ½±°í ÀÌÇØÇϱâ ÁÁ°Ô Ç¥ÇöÇÒ ¼ö°¡ ÀÖ´Ù. ´ÙÀ½ ÇÁ·Î±×·¥Àº C ÆÄÀÏÀ» ÀÔ·ÂÀ¸·Î Àоî ÁÖ¼®µéÀ» ±½°Ô Ç¥ÇöÇÑ´Ù. Äڵ带 »ìÆìº¸µµ·Ï ÇÏÀÚ.
Example 5. A Simple Attributes example
#include <ncurses.h>
int main(int argc, char *argv[])
{
int ch, prev;
FILE *fp;
int goto_prev = FALSE, y, x;
if(argc != 2)
{ printf("Usage: %s <a c file name>\n", argv[0]);
exit(1);
}
fp = fopen(argv[1], "r");
if(fp == NULL)
{ perror("Cannot open input file");
exit(1);
}
initscr(); /* Start curses mode */
prev = EOF;
while((ch = fgetc(fp)) != EOF)
{ if(prev == '/' && ch == '*') /* If it is / and * then olny
* switch bold on */
{ attron(A_BOLD);
goto_prev = TRUE; /* Go to previous char / and
* print it in BOLD */
}
if(goto_prev == TRUE)
{ getyx(stdscr, y, x);
move(y, x - 1);
printw("%c%c", '/', ch); /* The actual printing is done
* here */
ch = 'a'; /* 'a' is just a dummy
* character to prevent */
// "/*/" comments.
goto_prev = FALSE; /* Set it to FALSE or every
* thing from here will be / */
} else
printw("%c", ch);
refresh();
if(prev == '*' && ch == '/')
attroff(A_BOLD); /* Switch it off once we got *
and then / */
prev = ch;
}
getch();
endwin(); /* End curses mode */
return 0;
}
Àú Ãʱâȵé°ú ´Ù¸¥ ¾µµ¥ ¾ø´Â °ÍµéÀº ½Å°æ¾²Áö ¸»°í, while ·çÇÁ ¿¡¸¸ ÁýÁßÇØ¶ó. ±×°ÍÀº ÆÄÀÏ¿¡¼ ¹®ÀÚµéÀ» ÀÐ¾î¼ /* ¿Í °°Àº ÆÐÅÏÀ» ã´Â´Ù. Çѹø ÆÐÅÏÀ» ã°ÔµÇ¸é attron() ÇÔ¼ö¸¦ ½á¼ BOLD ¼Ó¼ºÀ» ÄÒ´Ù. ±× ÈÄ */ ÆÐÅÏÀ» ãÀ¸¸é attroff() ·Î ¼Ó¼ºÀ» ´Ù½Ã ²ô°Ô µÈ´Ù.
¶ÇÇÑ À§ ÇÁ·Î±×·¥Àº getyx() ¿Í move() ¶ó´Â À¯¿ëÇÑ ÇÔ¼öµéµµ ¼Ò°³ÇØÁÖ°í ÀÖ´Ù. ù¹øÂ° ÇÔ¼ö´Â ÇöÀç Ä¿¼ÀÇ À§Ä¡¿¡ ÇØ´çÇÏ´Â °ªÀ» º¯¼ö y, x ¿¡ ÀúÀåÇÑ´Ù. getyx() ÇÔ¼ö´Â ¸ÅÅ©·Î ÇÔ¼öÀ̱⠶§¹®¿¡ º¯¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Àü´ÞÇÒ Çʿ䰡 ¾ø´Ù. move() ÇÔ¼ö´Â Ä¿¼¸¦ ÁÖ¾îÁø À§Ä¡·Î ¿Å±â´Â ÇÔ¼öÀÌ´Ù.
À§ ÇÁ·Î±×·¥Àº ±×´ÙÁö ¸¹Àº ÀÏÀ» ÇÏÁö ¾Ê´Â Á¤¸» °£´ÜÇÑ °ÍÀÌ´Ù. ÀÌ ÄÚµå À§¿¡ C ÆÄÀÏÀ» ÀÐ°í ±×°ÍÀ» ÆÄ½ÌÇØ¼ ¼·Î ´Ù¸¥ »öÀ¸·Î Ãâ·ÂÇÏ´Â º¸´Ù ´õ À¯¿ëÇÑ ±â´ÉÀ» Ãß°¡ÇØ º¼ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ Àú°ÍÀ» ´Ù¸¥ ¾ð¾îµé¿¡ ´ëÇØ¼µµ È®ÀåÇØ º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
[edit]
1.8.1 ¼¼ºÎ »çÇ× ¶¼Ó¼º¿¡ ´ëÇØ Á» ´õ ÀÚ¼¼È÷ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. attron(), attroff(), attrset() ¹× ±×¿Ü attr_get() µîÀÇ ÇÔ¼öµéÀº ¼Ó¼ºÀ» ²ô°í ÄѰųª, ¼Ó¼ºÀ» °¡Á®¿À°í Ä÷¯Ç®ÇÑ È¸éÀ» ¸¸µé¾î³»´Âµ¥ ¾²ÀδÙ.
attron °ú attroff ÇÔ¼ö´Â ¼Ó¼ºµé¿¡ ´ëÇÑ bit-mask ¸¦ °¡Áö°í ±×°ÍµéÀ» ²°´Ù Ä×´Ù ÇÑ´Ù. <curses.h> ¿¡ Á¤ÀǵǾî ÀÖ´Â ´ÙÀ½ÀÇ ºñµð¿À ¼Ó¼ºµéÀÌ ÀÌ ÇÔ¼ö¿¡ ¾²ÀÏ ¼ö ÀÖ´Ù.
#!
A_NORMAL Normal display (no highlight)
A_STANDOUT Best highlighting mode of the terminal.
A_UNDERLINE Underlining
A_REVERSE Reverse video
A_BLINK Blinking
A_DIM Half bright
A_BOLD Extra bright or bold
A_PROTECT Protected mode
A_INVIS Invisible or blank mode
A_ALTCHARSET Alternate character set
A_CHARTEXT Bit-mask to extract a character
COLOR_PAIR(n) Color-pair number n
¸¶Áö¸· °ÍÀÌ °¡Àå È·ÁÇÑ °ÍÁß Çϳª´Ù. »ö»óµé(#color)Àº ´ÙÀ½ ¼½¼Ç¿¡¼ ¼³¸íÇÑ´Ù.
¿©·¯ È¿°ú¸¦ °ãÃij¾·Á¸é À§ÀÇ ¾Æ¹« °ªµéÀ» OR(|) ¿¬»êÀ» ÇÏ¸é µÈ´Ù. ¸¸¾à ¹ÝÀüµÇ°í ±ôºýÀÌ´Â ¹®ÀÚµéÀ» ¿øÇÑ´Ù¸é ´ÙÀ½Ã³·³ ÇØ¶ó.
attron(A_REVERSE | A_BLINK);
[edit]
1.8.2 attron() ´ë attrset() ¶±×·³ ´ëü attron() ÇÔ¼ö¿Í attrset() ÇÔ¼öÀÇ Â÷ÀÌ´Â ¹«¾ùÀϱî? attron ÀÌ ±×°Í¿¡ ÁÖ¾îÁø ¼Ó¼º¸¸À» ÄÓ ¼ö Àִµ¥ ¹ÝÇØ attrset Àº À©µµ¿ìÀÇ ¼Ó¼ºµéÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. Áï attset() ´Â À©µµ¿ì°¡ ÇöÀç ¾î¶² ¼Ó¼ºÀ» °¡Áö°í ÀÖ´ÂÁö »ó°ü¾øÀÌ »õ ¼Ó¼ºµéÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. attroff() ¶ÇÇÑ ±×°Í¿¡ ÀÎÀÚ·Î ÁÖ¾îÁø ¼Ó¼º¸¸À» ²ø ¼ö ÀÖ´Ù. ÀÌ·± ±â´ÉÀº ¼Ó¼ºÀ» ½±°Ô ´Ù·ê ¼ö ÀÖ´Â À¯¿ëÇÔÀ» Á¦°øÇÏ´Â ¹Ý¸é, ¸¸¾à ´ç½ÅÀÌ ÁÖÀDZí°Ô ±×°ÍÀ» »ç¿ëÇÏÁö ¾Ê´Â´Ù¸é À©µµ¿ì°¡ ¾î¶² ¼Ó¼ºÀ» °¡Áö°í ÀÖ´ÂÁö ³õÄ¥ ¼öµµ ÀÖ°í ȸéÇ¥½Ã¸¦ ¸ðµÎ ¸ÁÄ¥ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÀÌ°Í Æ¯È÷ ¸Þ´º¸¦ ´Ù·ê¶§¿¡ Àß ÀϾ´Â ¹®Á¦´Ù. ±×·¯´Ï ¹Ì¸® ¼Ó¼º¿¡ ´ëÇÑ Á¤Ã¥À» ¼¼¿ö³õ°í ±×°ÍÀ» °í¼öÇϵµ·Ï Ç϶ó. ¾Æ ¶ÇÇÑ ¸ðµç ¼Ó¼ºÀ» ²ô°í ÀÏ¹Ý ¸ðµå·Î µ¹·Á³õ´Â attrset(A_NORMAL) ÇÔ¼ö¿Í µ¿ÀÏÇÑ ±â´ÉÀÇ standend() ÇÔ¼ö¸¦ ¾ðÁ¦µçÁö È£ÃâÇÒ ¼öµµ ÀÖ´Ù.
[edit]
1.8.3 attr_get() ¶attr_get() ÇÔ¼ö´Â À©µµ¿ìÀÇ ÇöÀç ¼Ó¼º°ú »ö»óµé °ªÀ» ¾ò¾î¿Â´Ù. ºñ·Ï À§ ÇÔ¼öµé¸¸Å ÀÚÁÖ ¾²Áö´Â ¾Ê°ÚÁö¸¸, À̰ÍÀº ½ºÅ©¸°ÀÇ ¿µ¿ªµéÀ» ½ºÄµÇϴµ¥ À¯¿ëÇÏ´Ù. ¿¹¸¦µé¾î ½ºÅ©¸°¿¡ º¹ÀâÇÑ º¯°æÀ» °¡ÇØ¾ß µÇ´Âµ¥, °¢°¢ÀÇ ¹®ÀÚµéÀÌ ¾î¶²¼Ó¼ºÀ» °¡Áö°í ÀÖ´ÂÁö È®½ÇÇÏÁö ¾Ê´Ù°í ÇÏÀÚ. ÀÌ °æ¿ì¿¡ attrset ¶Ç´Â attron µîÀÇ ¿øÇÏ´Â È¿°ú¸¦ ³»´Â ÇÔ¼öµé°ú ÇÔ²² ÀÌ ÇÔ¼ö¸¦ ½á¼ ÇØ°áÇÒ ¼ö ÀÖ´Ù.
[edit]
1.8.4 attr_ ÇÔ¼öµé ¶attr_set(), attr_on °ú °°Àº ·ùÀÇ ÇÔ¼öµéÀÌ ´õ ÀÖ´Ù. À̰͵éÀº attr_t ŸÀÔÀÇ ÀÎÀÚ¸¦ ¹Þ´Â´Ù´Â °É Á¦¿ÜÇϸé À§ÀÇ ÇÔ¼öµé°ú ºñ½ÁÇÏ´Ù.
[edit]
1.8.5 wattr ÇÔ¼öµé ¶À§¿¡¼ ¾ê±âÇÑ °¢°¢ÀÇ ÇÔ¼ö¿¡ ´ëÇØ¼ ƯÁ¤ À©µµ¿ì¿¡¼ ÀÛµ¿ÇÏ´Â À̸§¿¡ 'w' °¡ ºÙÀº ÇÔ¼öµéÀÌ ÀÖ´Ù. À§ÀÇ ÇÔ¼öµéÀº stdscr ¿¡¼ ÀÛµ¿ÇÏ´Â °ÍµéÀÌ´Ù.
[edit]
1.8.6 chgat() ÇÔ¼öµé ¶chgat() ÇÔ¼ö´Â curs_attr ÀÇ man ÆäÀÌÁöÀÇ ¸Ç ³¡¿¡ ³ª¿µÇ¾î ÀÖ´Ù. ±×·¯³ª »ç½Ç ÀÌ°Ç À¯¿ëÇÑ ÇÔ¼öÁß Çϳª´Ù. ÀÌ ÇÔ¼ö´Â ¿òÁ÷ÀÌÁö ¾Ê°í ¹®ÀÚµéÀÇ ±×·ì¿¡ ¼Ó¼ºÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. Ä¿¼ ¸»ÀÌ´Ù. ±×°ÍÀ» ¿òÁ÷ÀÌÁö ¾Ê°í °¡´ÉÇÏ´Ù. ÀÌ ÇÔ¼ö´Â ÇöÀç Ä¿¼ À§Ä¡¿¡¼ ½ÃÀÛÇÏ´Â ¹®Àڵ鿡¼ ÁÖ¾îÁø ¼ö¸¸ÅÀÇ ¼Ó¼ºÀ» º¯°æÇÑ´Ù.
ÁÙÀÇ ³¡±îÁö º¯°æÇÒ·Á¸é ¹®ÀÚÀÇ °¹¼ö¿¡ -1 À» ÁÖ¸éµÈ´Ù. ¸¸¾à ÇöÀç À§Ä¡¿¡¼ ÁÙÀÇ ³¡±îÁö ¹®ÀÚµéÀÇ ¼Ó¼ºµé ¹Ù²Ù°íÀÚ ÇÑ´Ù¸é ´ÙÀ½ ó·³ ÇØ¶ó.
chgat(-1, A_REVERSE, 0, NULL);
ÀÌ ÇÔ¼ö´Â ÀÌ¹Ì È¸é¿¡ ³ªÅ¸³ª ÀÖ´Â ±ÛÀÚµéÀÇ ¼Ó¼ºÀ» ¹Ù²Ù´Âµ¥ À¯¿ëÇÏ´Ù. ¹Ù²Ù°íÀÚ ÇÏ´Â °ÍÀÇ ½ÃÀÛÀ§Ä¡·Î Ä¿¼¸¦ ¿Å±ä´ÙÀ½ ¼Ó¼ºÀ» ¹Ù²ã¶ó.
´Ù¸¥ wchgat(), mvchgat(), wchgat() ÀÌ·± ÇÔ¼öµéµµ w ·Î ½ÃÀÛÇÏ´Â ÇÔ¼öµéÀÌ Æ¯Á¤ À©µµ¿ì¿¡¼ ÀÛµ¿ÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϸé À§¿Í ºñ½ÁÇÏ°Ô µ¹¾Æ°£´Ù. mv ·Î ½ÃÀÛÇÏ´Â ÇÔ¼ö´Â ¸ÕÀú Ä¿¼¸¦ ¿Å±â°í ÁÖ¾îÁø ÀÏÀ» ÇÑ´Ù. »ç½Ç chgat ÇÔ¼ö´Â wchgat() ÇÔ¼ö¿¡ stdscr À» À©µµ¿ì·Î ³Ñ°ÜÁÖ´Â ¸ÅÅ©·Î ÇÔ¼ö ÀÌ´Ù. ´ëºÎºÐÀÇ w ·Î ½ÃÀÛÇÏÁö ¾Ê´Â ÇÔ¼öµéÀº ¸ÅÅ©·Î ÇÔ¼öµéÀÌ´Ù.
Example 6. Chgat() Usage example
#include <ncurses.h>
int main(int argc, char *argv[])
{ initscr(); /* Start curses mode */
start_color(); /* Start color functionality */
init_pair(1, COLOR_CYAN, COLOR_BLACK);
printw("A Big string which i didn't care to type fully ");
mvchgat(0, 0, -1, A_BLINK, 1, NULL);
/*
* First two parameters specify the position at which to start
* Third parameter number of characters to update. -1 means till
* end of line
* Forth parameter is the normal attribute you wanted to give
* to the charcter
* Fifth is the color index. It is the index given during init_pair()
* use 0 if you didn't want color
* Sixth one is always NULL
*/
refresh();
getch();
endwin(); /* End curses mode */
return 0;
}
ÀÌ ¿¹Á¦´Â curses ÀÇ »ö»óµé¿¡ ´ëÇØ º¸¿©ÁÖ°í ÀÖ´Ù. »ö»ó¿¡ °üÇØ¼´Â ÈÄ¿¡ ÀÚ¼¼È÷ ´Ù·é´Ù. »öÀ» »ç¿ëÇÏÁö ¾ÊÀ¸·Á¸é 0 °ªÀ» ³ÖÀ¸¸é µÈ´Ù.
[edit]
1.9 À©µµ¿ì ÇÔ¼öÀÇ ¸ðµç °Í ¶À©µµ¿ì´Â curses ¿¡¼ °¡Àå Áß¿äÇÑ °³³äÀÌ´Ù. ÀÌ¹Ì ´ç½ÅÀº ¸ðµç ÇÔ¼öµéÀÌ Àº¿¬Áß¿¡ ÀÛµ¿ÇÏ´Â stdscr À̶ó´Â Ç¥ÁØ À©µµ¿ì¿¡ ´ëÇØ ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ÀÚ ÀÌÁ¦ °¡Àå °£´ÜÇÑ GUI ¸¦ ¸¸µç´Ù°í ÇØµµ ´ç½ÅÀº À©µµ¿ì¸¦ ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù. À©µµ¿ì¸¦ ½á¾ßÇÏ´Â ÁÖµÈ ÀÌÀ¯Áß Çϳª´Â ½ºÅ©¸°ÀÇ ÀϺθ¸ µû·Î ó¸®ÇÔÀ¸·Î¼ ¹Ù²î¾î¾ßÇÒ Çʿ䰡 ÀÖ´Â À©µµ¿ìµé¸¸ º¯°æÇϰԵǾî È¿À²¼ºÀ» ³ôÀÏ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ¶Ç º¸´Ù ´õ ³ªÀº µðÀÚÀÎÀÌ ÇÊ¿äÇÒ ¶§µµ ¸¶Âù°¡Áö ÀÌ´Ù. ³ À©µµ¿ì¸¦ »ç¿ëÇÏ´Â Á¦ÀÏ Áß¿äÇÑ ÀÌÀ¯´Â ÈÄÀÚ¶ó°í ¸»ÇÏ°í ½Í´Ù. ´ç½ÅÀº ´ç½ÅÀÇ ÇÁ·Î±×·¥¿¡¼ Ç×»ó ´õ ³´°í ´õ ´Ù·ç±â ½¬¿î µðÀÚÀÎÀ» °¥±¸ÇÒ °ÍÀÌ´Ù. ¸¸¾à ´ç½ÅÀÌ Å©°í º¹ÀâÇÑ GUI ¸¦ ¸¸µç´Ù¸é À̰ÍÀº ´Ù¸¥ ¹«¾ùº¸´Ù ¼±ÇàÇÏ´Â ÇÙ½ÉÀûÀÎ Áß¿ä ¿ä¼ÒÀÌ´Ù.
[edit]
1.9.1 °³°ý ¶À©µµ¿ì´Â newwin() ÇÔ¼ö¸¦ È£ÃâÇØ¼ ¸¸µé ¼ö°¡ ÀÖ´Ù. À̰ÍÀº »ç½Ç»ó ȸ鿡´Â ¾Æ¹«°Íµµ »ý¼ºÇÏÁö ¾Ê´Â´Ù. ÀÌ ÇÔ¼ö´Â À©µµ¿ì¸¦ ó¸®Çϱâ À§ÇÑ ±¸Á¶Ã¼ÀÇ ¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ°í ±× À©µµ¿ì¿¡ ÇØ´çÇÏ´Â Å©±â, ½ÃÀÛxÀ§Ä¡, ½ÃÀÛyÀ§Ä¡ µîÀÇ Á¤º¸¸¦ °»½ÅÇÑ´Ù. ÀÌ·¸±â ¶§¹®¿¡ curses ¿¡¼ À©µµ¿ì´Â ´ÜÁö ȸéÀÇ ´Ù¸¥ ºÎºÐ°ú µ¶¸³ÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Â °¡»óÀÇ À©µµ¿ìÀÇ abstraction ÀÌ´Ù. newwin() ÇÔ¼ö´Â WINDOW ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÑ´Ù. ÀÌ Æ÷ÀÎÅÍ´Â wprintw() µî°ú °°ÀÌ À©µµ¿ì¿Í °ü·ÃµÈ ÇÔ¼ö¿¡ ÀÎÀÚ·Î ³Ñ°ÜÁú ¼ö ÀÖ´Ù. ÃÖÁ¾ÀûÀ¸·Î À©µµ¿ì´Â delwin() ÇÔ¼ö¿¡ ÀÇÇØ ÆÄ±«µÉ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â À©µµ¿ì ±¸Á¶Ã¼¿¡ ÇÒ´çµÇ¾î ÀÖ´Â ¸Þ¸ð¸® ¿µ¿ªÀ» ÇØÁ¦ÇÒ °ÍÀÌ´Ù.
[edit]
1.9.2 À©µµ¿ì°¡ ÀÖÀ¸¶ó !!! ¶À©µµ¿ì°¡ »ý¼ºµÇ¾ú°í ¿ì¸®°¡ ±×°ÍÀ» º¼ ¼ö°¡ ¾ø´Ù¸é ¿ô±âÁö ¾ÊÀ»±î. ÀÌÁ¦ Àç¹Õ´Â À©µµ¿ì ³ªÅ¸³»±â°¡ ½ÃÀ۵ȴÙ. box() ÇÔ¼ö´Â À©µµ¿ìÀÇ Å׵θ®¸¦ ±×¸®´Âµ¥ ¾µ ¼ö ÀÖ´Ù. ¿¹Á¦¸¦ ÅëÇØ ÀÌ ÇÔ¼öµéÀ» º¸´Ù ÀÚ¼¼ÇÏ°Ô µÑ·¯º¸µµ·Ï ÇÏÀÚ.
Example 7. Window Border example
#include <ncurses.h>
WINDOW *create_newwin(int height, int width, int starty, int startx);
void destroy_win(WINDOW *local_win);
int main(int argc, char *argv[])
{ WINDOW *my_win;
int startx, starty, width, height;
int ch;
initscr(); /* Start curses mode */
cbreak(); /* Line buffering disabled, Pass on
* everty thing to me */
keypad(stdscr, TRUE); /* I need that nifty F1 */
height = 3;
width = 10;
starty = (LINES - height) / 2; /* Calculating for a center placement */
startx = (COLS - width) / 2; /* of the window */
printw("Press F1 to exit");
refresh();
my_win = create_newwin(height, width, starty, startx);
while((ch = getch()) != KEY_F(1))
{ switch(ch)
{ case KEY_LEFT:
destroy_win(my_win);
my_win = create_newwin(height, width, starty,--startx);
break;
case KEY_RIGHT:
destroy_win(my_win);
my_win = create_newwin(height, width, starty,++startx);
break;
case KEY_UP:
destroy_win(my_win);
my_win = create_newwin(height, width, --starty,startx);
break;
case KEY_DOWN:
destroy_win(my_win);
my_win = create_newwin(height, width, ++starty,startx);
break;
}
}
endwin(); /* End curses mode */
return 0;
}
WINDOW *create_newwin(int height, int width, int starty, int startx)
{ WINDOW *local_win;
local_win = newwin(height, width, starty, startx);
box(local_win, 0 , 0); /* 0, 0 gives default characters
* for the vertical and horizontal
* lines */
wrefresh(local_win); /* Show that box */
return local_win;
}
void destroy_win(WINDOW *local_win)
{
/* box(local_win, ' ', ' '); : This won't produce the desired
* result of erasing the window. It will leave it's four corners
* and so an ugly remnant of window.
*/
wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
/* The parameters taken are
* 1. win: the window on which to operate
* 2. ls: character to be used for the left side of the window
* 3. rs: character to be used for the right side of the window
* 4. ts: character to be used for the top side of the window
* 5. bs: character to be used for the bottom side of the window
* 6. tl: character to be used for the top left corner of the window
* 7. tr: character to be used for the top right corner of the window
* 8. bl: character to be used for the bottom left corner of the window
* 9. br: character to be used for the bottom right corner of the window
*/
wrefresh(local_win);
delwin(local_win);
}
[edit]
1.9.3 ¼³¸í ¶±«¼ºÀ» Áö¸£Áø¸¶¶ó. ³ªµµ ÀÌ°Ô ¾çÀÌ ¸¹Àº ¿¹Á¦¶õ°É ¾Ë°í ÀÖ´Ù. ±×·¯³ª ¿©±â¼ ¸î¸î Áß¿äÇÑ °ÍµéÀ» ¼³¸íÇØ¾ß¸¸ ÇÑ´Ù :-). ÀÌ ÇÁ·Î±×·¥Àº »óÇÏÁ¿ìÀÇ ¹æÇâŰ·Î À̵¿ÇÒ ¼ö ÀÖ´Â Á÷»ç°¢ÇüÀÇ À©µµ¿ì¸¦ »ý¼ºÇÑ´Ù. ±×¸®°í »ç¿ëÀÚ°¡ ۸¦ ´©¸¦¶§¸¶´Ù ¹Ýº¹ÀûÀ¸·Î À©µµ¿ì¸¦ ¾ø¾Ö°í ´Ù½Ã ¸¸µç´Ù. ȸéÀÇ ÇÑ°è ³Ñ¾î±îÁø °¡Áö¸¶¶ó. ±× ÇѰèµéÀ» üũÇÏ´Â °ÍÀº µ¶ÀÚµéÀ» À§ÇÑ ¿¬½ÀÀ¸·Î ³²°ÜµÎ°Ú´Ù. ÀÌÁ¦ Àú°ÍÀ» ÇÑÁÙÇÑÁÙ ºÐ¼®ÇØ º¸ÀÚ.
create_newwin() ÇÔ¼ö´Â newwin() À» ÅëÇØ À©µµ¿ì¸¦ »ý¼ºÇϰí box ÇÔ¼ö·Î ±× Å׵θ®¸¦ º¸¿©ÁØ´Ù. destroy_win() ÇÔ¼ö´Â ¸ÕÀú À©µµ¿ìÀÇ Å׵θ®¸¦ ' ' ¹®ÀÚ·Î ±×¸²À¸·Î¼ À©µµ¿ì¸¦ Áö¿ì°í ±× ÈÄ delwin() ÇÔ¼ö¸¦ È£ÃâÇØ¼ °ü·ÃµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÑ´Ù. »ç¿ëÀÚ°¡ ´©¸£´Â Ű¿¡ µû¶ó starty ¶Ç´Â startx °ªÀÌ ¹Ù²î°í »õ À©µµ¿ì°¡ ¸¸µé¾îÁø´Ù.
º¸´Ù½ÃÇÇ destroy_win ¿¡¼ box ÇÔ¼ö ´ë½Å¿¡ wborder À» »ç¿ëÇÏ¿´´Ù. ÀÌÀ¯´Â ÁÖ¼®¿¡ ¾²¿©ÀÖ´Ù. (ÀÐÁö ¾Ê¾ÒÀ» °ÍÀÌ´Ù. ¾È´Ù. Äڵ带 Àо¶ó :-)). wborder ÇÔ¼ö´Â ¾Æ·¡¿Í °°ÀÌ È£ÃâÇÒ °æ¿ì 4°³ÀÇ ÄÚ³Ê¿Í 4°³ÀÇ ÁÙ¿¡ ´ëÇØ ÁÖ¾îÁø ¹®ÀÚ·Î À©µµ¿ì¸¦ ±×¸°´Ù:
wborder(win, '|', '|', '-', '-', '+', '+', '+', '+');
ÀÌ·¸°Ô »ý±ä âÀÌ »ý¼ºµÈ´Ù.
#!
+-----------------------+
| |
| |
| |
| |
| |
| |
+-----------------------+
[edit]
1.9.4 ¿¹Á¦ÀÇ ´Ù¸¥ ºÎºÐ ¶¶ÇÇÑ À§ÀÇ ¿¹Á¦¿¡¼ º¼ ¼ö ÀÖµíÀÌ, ³ COLS, LINES ¶ó´Â º¯¼ö¸¦ »ç¿ëÇß´Ù. À̰͵éÀº initscr() ÀÌÈÄ¿¡ ȸéÀÇ Å©±â¿¡ ¸Â°Ô °ªÀÌ ÃʱâȵȴÙ. ÀÌ º¯¼öµéÀº ȸéÀÇ ³ÐÀ̳ª À§ ¿¹Á¦Ã³·³ ȸéÀÇ Á¤Áß¾ÓÀÇ À§Ä¡¸¦ ã´Âµ¥ À¯¿ëÇÏ´Ù. getch() ÇÔ¼ö´Â ÈçÈ÷ ¾²µí Űº¸µå·ÎºÎÅÍ ÀÔ·ÂÀ» ¹Þ´Â´Ù. ±×¸®°í ÀÔ·ÂµÈ Å°¿¡µû¶ó ÇØ´çÇÏ´Â ÀÏÀ» ÇÏ°Ô µÈ´Ù. ÀÌ·± ·ùÀÇ switch-case ¹®Àº GUI ±â¹Ý ÇÁ·Î±×·¥¿¡¼ ¸Å¿î ÀϹÝÀûÀÎ ÇüÅÂÀÌ´Ù.
[edit]
1.9.5 ´Ù¸¥ Å׵θ® ÇÔ¼öµé ¶À§ ÇÁ·Î±×·¥Àº ۰¡ ´·ÁÁú¶§¸¶´Ù À©µµ¿ì°¡ ¾ø¾îÁö°í ´Ù¸¥°ÍÀÌ »ý±â±â ¶§¹®¿¡ ±²ÀåÈ÷ ºñÈ¿À²ÀûÀÌ´Ù. ÀÌÁ¦ ´Ù¸¥ Å׵θ®°ü·Ã ÇÔ¼ö¸¦ ½á¼ ÇÁ·Î±×·¥À» Á» ´õ È¿À²ÀûÀ¸·Î ¸¸µé¾îº¸ÀÚ.
´ÙÀ½ÀÇ ÇÁ·Î±×·¥Àº mvhline() ¿Í mvvline() ÇÔ¼ö¸¦ ½á¼ °°Àº È¿°ú¸¦ ³»¾ú´Ù. ÀÌ µÎ ÇÔ¼ö´Â ´Ü¼øÇÏ´Ù. À̰͵éÀº ¼öÆò ¶Ç´Â ¼öÁ÷ÀÇ ¼±À» ƯÁ¤ À§Ä¡¿¡¼ ƯÁ¤ ±æÀ̸¸Å »ý¼ºÇÑ´Ù.
Example 8. More border functions
#include <ncurses.h>
typedef struct _win_border_struct {
chtype ls, rs, ts, bs,
tl, tr, bl, br;
}WIN_BORDER;
typedef struct _WIN_struct {
int startx, starty;
int height, width;
WIN_BORDER border;
}WIN;
void init_win_params(WIN *p_win);
void print_win_params(WIN *p_win);
void create_box(WIN *win, int bool);
int main(int argc, char *argv[])
{ WIN win;
int ch;
initscr(); /* Start curses mode */
start_color(); /* Start the color functionality */
cbreak(); /* Line buffering disabled, Pass on
* everty thing to me */
keypad(stdscr, TRUE); /* I need that nifty F1 */
noecho();
init_pair(1, COLOR_CYAN, COLOR_BLACK);
/* Initialize the window parameters */
init_win_params(&win);
print_win_params(&win);
attron(COLOR_PAIR(1));
printw("Press F1 to exit");
refresh();
attroff(COLOR_PAIR(1));
create_box(&win, TRUE);
while((ch = getch()) != KEY_F(1))
{ switch(ch)
{ case KEY_LEFT:
create_box(&win, FALSE);
--win.startx;
create_box(&win, TRUE);
break;
case KEY_RIGHT:
create_box(&win, FALSE);
++win.startx;
create_box(&win, TRUE);
break;
case KEY_UP:
create_box(&win, FALSE);
--win.starty;
create_box(&win, TRUE);
break;
case KEY_DOWN:
create_box(&win, FALSE);
++win.starty;
create_box(&win, TRUE);
break;
}
}
endwin(); /* End curses mode */
return 0;
}
void init_win_params(WIN *p_win)
{
p_win->height = 3;
p_win->width = 10;
p_win->starty = (LINES - p_win->height)/2;
p_win->startx = (COLS - p_win->width)/2;
p_win->border.ls = '|';
p_win->border.rs = '|';
p_win->border.ts = '-';
p_win->border.bs = '-';
p_win->border.tl = '+';
p_win->border.tr = '+';
p_win->border.bl = '+';
p_win->border.br = '+';
}
void print_win_params(WIN *p_win)
{
#ifdef _DEBUG
mvprintw(25, 0, "%d %d %d %d", p_win->startx, p_win->starty,
p_win->width, p_win->height);
refresh();
#endif
}
void create_box(WIN *p_win, int bool)
{ int i, j;
int x, y, w, h;
x = p_win->startx;
y = p_win->starty;
w = p_win->width;
h = p_win->height;
if(bool == TRUE)
{ mvaddch(y, x, p_win->border.tl);
mvaddch(y, x + w, p_win->border.tr);
mvaddch(y + h, x, p_win->border.bl);
mvaddch(y + h, x + w, p_win->border.br);
mvhline(y, x + 1, p_win->border.ts, w - 1);
mvhline(y + h, x + 1, p_win->border.bs, w - 1);
mvvline(y + 1, x, p_win->border.ls, h - 1);
mvvline(y + 1, x + w, p_win->border.rs, h - 1);
}
else
for(j = y; j <= y + h; ++j)
for(i = x; i <= x + w; ++i)
mvaddch(j, i, ' ');
refresh();
}
[edit]
1.10.1 °³°ý ¶»öÀÌ ¾ø´Ù¸é »îÀº Âü ¿ì¿ïÇÒ °ÍÀÌ´Ù. curses ´Â »öÀ» ´Ù·ç´Â ¸ÚÁø ¸ÞÄ¿´ÏÁòÀ» °¡Áö°í ÀÖ´Ù. ÀÚ ±×·³ ªÀº ÇÁ·Î±×·¥À¸·Î õõÈ÷ Çѹø ½ÃÀÛÇØº¸ÀÚ.
Example 9. A Simple Color example
#include <ncurses.h>
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string);
int main(int argc, char *argv[])
{ initscr(); /* Start curses mode */
if(has_colors() == FALSE)
{ endwin();
printf("You terminal does not support color\n");
exit(1);
}
start_color(); /* Start color */
init_pair(1, COLOR_RED, COLOR_BLACK);
attron(COLOR_PAIR(1));
print_in_middle(stdscr, LINES / 2, 0, 0, "Viola !!! In color ...");
attroff(COLOR_PAIR(1));
getch();
endwin();
}
void print_in_middle(WINDOW *win, int starty, int startx, int width, char *string)
{ int length, x, y;
float temp;
if(win == NULL)
win = stdscr;
getyx(win, y, x);
if(startx != 0)
x = startx;
if(starty != 0)
y = starty;
if(width == 0)
width = 80;
length = strlen(string);
temp = (width - length)/ 2;
x = startx + (int)temp;
mvwprintw(win, y, x, "%s", string);
refresh();
}
º¸´Ù½ÃÇÇ, »öÀ» »ç¿ëÇÒ·Á¸é ¸ÕÀú start_color() ÇÔ¼ö¸¦ È£ÃâÇØ¾ß ÇÑ´Ù. ±× ÈÄ ´Ù¾çÇÑ ÇÔ¼öµéÀ» ÅëÇØ ´ç½ÅÀÇ Å͹̳ÎÀÇ »ö»ó±â´ÉµéÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. Å͹̳ÎÀÌ »ö»ó ±â´ÉÀÌ ÀÖ´ÂÁö ¾Æ´ÑÁö ¾Ë¾Æº¼·Á¸é, has_colors() ÇÔ¼ö¸¦ ½á¶ó. ¸¸¾à Å͹̳ÎÀÌ »öÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù¸é FALSE °¡ ¸®Å쵃 °ÍÀÌ´Ù.
curses ´Â start_color() ÀÌ È£ÃâµÉ ¶§ Å͹̳ο¡¼ Áö¿øµÇ´Â ¸ðµç »öµéÀ» ÃʱâÈÇØ¼ ÁغñÇÑ´Ù. ÀÌ »öµéÀº ¹Ì¸® Á¤ÀÇµÈ COLOR_BLACK µîµîÀÇ »ó¼ö¸¦ ÅëÇØ ¾µ ¼ö ÀÖ´Ù. ÀÚ ÀÌÁ¦ ½ÇÁ¦·Î »öÀ» ¾µ·Á¸é, »ö»ó¦À» Á¤ÀÇÇØ¾ß ÇÑ´Ù. »öµéÀº Ç×»ó »ö»ó¦ÀÇ ²Ã·Î ¾²¿©Áø´Ù. Áï, init_pair() ÇÔ¼ö¸¦ ÅëÇØ Àü°æ ¹× Èİæ»öÀ» Á¤ÀÇÇØ¾ß¸¸ ÀÌ »ö»ó¦ °ªÀ» ¾µ ¼ö ÀÖ´Ü ¸»ÀÌ´Ù. ÀÌ·¸°Ô ÇÑ´ÙÀ½¿¡¾ß »ö»ó¦ÀÇ °ªÀº COLOR_PAIR() ÇÔ¼ö¿Í ÇÔ²² ÀÏ¹Ý ¼Ó¼º ó·³ ¾²¿©Áú ¼ö ÀÖ´Ù. À̴ óÀ½¿£ Á» ¼º°¡¼Å º¸ÀÌ´Â ÀϵéÀ̳ª, ÀÌ ¹æ¹ýÀº ¿ì¸®°¡ »ö»ó¦µéÀ» ¸Å¿ì ½±°Ô ¾µ ¼ö ÀÖ´Â ¿ì¾ÆÇÑ ±â¹ýÀÌ´Ù. ½© ½ºÅ©¸³Æ®¿¡¼ ´ÙÀ̾ó·Î±× »óÀÚ¸¦ º¸¿©ÁÖ´Â À¯Æ¿¸®Æ¼ÀÎ "dialog" ÀÇ ¼Ò½º Äڵ带 º¸°Ô µÇ¸é À̸¦ ¾Ë ¼ö ÀÖ´Ù. À̰ÍÀÇ °³¹ßÀÚ´Â ÇÊ¿äÇÑ ¸ðµç Àü°æ ¹× ÈÄ°æ »ö»ó¦¿¡ ´ëÇØ¼ Á¤ÀǸ¦ ÇØ³õ°í, ÇÁ·Î±×·¥ ½ÃÀ۽ÿ¡ À̸¦ ÃʱâÈÇϰí ÀÖ´Ù. ÀÌ ¹æ¹ýÀº ¿ì¸®°¡ ¹Ì¸® »ó¼öó·³ Á¤ÀÇÇØ³õÀº »ö»ó¦À» ¾¸À¸·Î½á »ö»ó ¼Ó¼ºÀ» ¼³Á¤ÇÏ´Â °ÍÀ» ¸Å¿ì ½±°Ô ÇØÁØ´Ù.
´ÙÀ½ÀÇ »öµéÀº curses.h ¿¡ Á¤ÀǵǾî ÀÖ´Ù. ´ç½ÅÀº À̰͵éÀ» ´Ù¾çÇÑ »ö°ü·Ã ÇÔ¼öµé¿¡ ¾µ ¼ö ÀÖ´Ù.
#!
COLOR_BLACK 0
COLOR_RED 1
COLOR_GREEN 2
COLOR_YELLOW 3
COLOR_BLUE 4
COLOR_MAGENTA 5
COLOR_CYAN 6
COLOR_WHITE 7
[edit]
1.10.2 »ö»ó Á¤ÀÇ ¹Ù²Ù±â ¶init_color() ÇÔ¼ö´Â curses ¿¡ ÀÇÇØ Á¤ÀÇµÈ »ö»óÀÇ rgb °ªÀ» º¯°æÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ´ç½ÅÀÌ »¡°£»öÀÇ °µµ¸¦ ¾ÆÁÖ ¾à°£ ÁÙÀÌ°í ½Í´Ù°í ÇÏÀÚ. ±×·¸´Ù¸é ÀÌ ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ È£ÃâÇÑ´Ù.
init_color(COLOR_RED, 700, 0, 0);
/* param 1 : color name
* param 2, 3, 4 : rgb content min = 0, max = 1000 */
¸¸¾à ´ç½ÅÀÇ Å͹̳ÎÀÌ »ö»ó Á¤ÀǸ¦ º¯°æÇÏÁö ¸øÇÑ´Ù¸é, ÀÌ ÇÔ¼ö´Â ERR À» ¸®ÅÏÇÑ´Ù. can_change_color() ÇÔ¼ö´Â Å͹̳ÎÀÌ »ö»óÀ» ¹Ù²Ü ¼ö ÀÖ´Â ±â´ÉÀÌ ÀÖ´ÂÁö ¾ø´ÂÁö È®ÀÎÇÏ´Â ÇÔ¼öÀÌ´Ù. rgb °ªÀÇ ¹üÀ§´Â 0 ºÎÅÍ 1000 ±îÁöÀÌ´Ù. óÀ½¿¡ RED »öÀÌ 1000(r), 0(g), 0(b) ·Î Á¤ÀǵȴÙ.
|









![[http]](/imgs/http.png)

![[ftp]](/imgs/ftp.png)