Àú´Â À̰Ϳ¡ ´ëÇØ µ¶ÀçÀÚ°¡ µÇ°í ½ÍÀº »ý°¢Àº ¾øÁö¸¸, ÀϰüµÈ ·¹À̾ƿôÀ» ¸ðµç Äڵ忡¼ »ç¿ëÇÏ´Â °ÍÀÌ »îÀ» ´õ ½±°Ô ¸¸µì´Ï´Ù. ÀڽмÒÀ¯ÀÇ ÇϳªÀÇ ¿ÏÀüÇÑ ¼Ò½º ÆÄÀÏ ÀÌ»óÀÇ Äڵ带 ÀÛ¼ºÇÏ°í °ü¸®ÇÏ·Á ÇÑ´Ù¸é, ¾î¶² °ÍÀ» ÇÏ°í ½Í°Ç °£¿¡ ±×°ÍÀ» ÇÒ ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù. ÇÏÁö¸¸ µ¿µîÇÑ °øÇåÀÇ ÀϷμ, Àú´Â ¾Æ¸¶µµ ±× Äڵ带 ÀúÀÇ ±âÁ¸ ½ºÅ¸ÀÏ¿¡ ¸ÂÃß¾î ÀçÀÛ¼ºÇÒ °ÍÀÔ´Ï´Ù. óÀ½ºÎÅÍ ´ÙÀ½¿¡¼ ¼³¸íµÇ´Â ½ºÅ¸ÀÏ·Î ÀÛ¼ºÇÑ´Ù¸é ÀúÀÇ ½Ã°£À» È®½ÇÈ÷ Àý¾àÇØ ÁÙ °ÍÀÔ´Ï´Ù:
±âº» Allegro ½ºÅ¸ÀÏ: K&R, 3°³ÀÇ °ø¹é µé¿©¾²±â. ´Ù½ºÅ©¿¡¼´Â ÅÇÀº 8°³ÀÇ °ø¹éÀ̹ǷÎ, ¿¹¸¦ µé¾î, ÇÑ ¶óÀο¡ 12 °ø¹éÀÌ µé¾î°¡´Â °æ¿ì, 4°³ÀÇ ÅÇ ´ë½Å, 12°³ÀÇ °ø¹éÀ¸·Î ÀúÀåµÇ°Å³ª 1°³ÀÇ Åǰú 4°³ÀÇ °ø¹éÀ¸·Î ÀúÀåµË´Ï´Ù. »ç¿ëÇÏ´Â ¿¡µðÅͰ¡ 3 ¹®ÀÚ ³»ºÎ Åǰú 8 ¹®ÀÚ ¿ÜºÎ ÅÇÀÇ Â÷À̸¦ ´Ù·çÁö ¸øÇÑ´Ù¸é, ´õ ÁÁÀº ¿¡µðÅÍ·Î ¹Ù²Ù°Å³ª ³ªÁß¿¡ µé¿©¾²±â¸¦ ±ú²ýÀÌ ¼öÁ¤ÇϽʽÿÀ. Allegro ¹èÆ÷ÆÇ¿¡ Æ÷ÇԵǾî ÀÖ´Â indent.pro ÆÄÀÏÀº ·¹À̾ƿôÀ» ¹Ù·ÎÀâ´Â °Í¿¡ ±ÙÁ¢ÇÑ °ÍÀÌÁö¸¸, ¿ÏÀüÈ÷ ´Ù·çÁö´Â ¸øÇϹǷÎ, ¿ª½Ã ¼ÕÀ¸·Î ¼öÁ¤ÇØ ÁÙ Çʿ䰡 ÀÖ½À´Ï´Ù.
ÇÁ¸®ÇÁ·Î¼¼¼ Á¤ÀÇ¿Í ±¸Á¶Ã¼ À̸§Àº ´ë¹®ÀÚÀ̰í, ÇÔ¼ö¿Í º¯¼ö À̸§Àº ¼Ò¹®ÀÚÀÔ´Ï´Ù. ´ë¼Ò¹®ÀÚ¸¦ ¼¯¾î¼ À̸§À» ºÙÀÌ´Â °ÍÀº ÁÁÁö ¾ÊÀ¸¸ç »ç¿ëÇØ¼´Â ¾ÈµË´Ï´Ù. ¹Ùº¸°°Àº Çë°¡¸®¾È ¸í¸í¹ýÀº (¿ªÀÚÁÖ: MS À©µµ¿ìÁî °ü·Ã ¹®¼¿¡¼ ±ÇÀåµÇ´Â °ÍÀ¸·Î, m_pHungarian°ú °°ÀÌ º¯¼ö À̸§ ¾Õ¿¡ º¯¼öÀÇ Å¸ÀÔ¿¡ ÇØ´çÇÏ´Â ¹®ÀÚ¸¦ ºÙ¿© ¾²´Â °Í) _Á¤¸»·Î_ ÁÁÁö ¾ÊÀ¸¹Ç·Î »ý°¢Á¶Â÷ ÇÏÁö ¸¶½Ê½Ã¿À.
¸ðµç ½Éº¼Àº ¿ÏÀüÈ÷ ºÒ°¡´ÉÇÒ °æ¿ì°¡ ¾Æ´Ï¶ó¸é staticÀ¸·Î ¼±¾ðµÇ¾î¾ß ÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ» °æ¿ì¿¡´Â ¹ØÁÙÀ» À̸§ ¾Õ¿¡ ºÙÀ̽ʽÿÀ.
ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ÇüŰ¡ µË´Ï´Ù:
3°³ÀÇ ºó ¶óÀÎÀÌ ÇÔ¼ö »çÀÌ¿¡ µé¾î°¨./* foobar: * ¹«½¼ ÀÏÀ» ÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸í. */ void foobar(int foo, int bar) { /* ¾î¶² µ¿ÀÛÀÌ µé¾î°¨ */ }
Á¶°Ç¹®Àº ´ÙÀ½°ú °°Àº ÇüŰ¡ µË´Ï´Ù:
ºí·° ´Ý±âÈÄ °°Àº ¶óÀο¡ ¹«¾ð°¡ ¿À°Ô µÇ´Â °æ¿ì´Â do/while ·çÇÁÀÇ ³¡ÀÎ °æ¿ì¿¡¸¸ÀÔ´Ï´Ù:if (foo) { /* ÄÚµå */ } else { /* ÄÚµå */ }
Case¹®Àº ´ÙÀ½°ú °°Àº ÇüŰ¡ µË´Ï´Ù:do { /* ÄÚµå */ } while (foo);
°ø¹éÀ» ¾îµð¿¡ ³ÖÀ» °ÍÀΰ¡¿¡ ´ëÇÑ ¿¹:switch (foo) { case bar: /* ÄÚµå */ break; default: /* ÄÚµå */ break; }
¸ðµç ¼Ò½º´Â ´ÙÀ½°ú °°Àº Ç¥ÁØ Çì´õ·Î ½ÃÀÛÇÏ¿©¾ß ÇÕ´Ï´Ù:char *p; if (condition) { } for (x=0; x<10; x++) { } function(foo, bar); (BITMAP *)data[id].dat;
ÀÛ¼ºÀÚ Å©·¹µðÆ®´Â ³¯Â¥¼øÀ¸·Î Ãß°¡µÇ¾î¾ß Çϸç, À̸ÞÀÏ ÁÖ¼Ò°¡ Æ÷ÇԵǾ ¾ÈµË´Ï´Ù: À̸ÞÀÏ ÁÖ¼Ò´Â ¸ÞÀÎ Å©·¹µðÆ® ÆÄÀÏ¿¡¼ ãÀ» ¼ö Àִµ¥, ÇÑ °÷¿¡¸¸ Á¸ÀçÇÏ°Ô µÇ¸é ÁÖ¼Ò°¡ ¹Ù²î¾îµµ ¼öÁ¤ÇÏ´Â °ÍÀÌ ½¬¿öÁö±â ¶§¹®ÀÔ´Ï´Ù./* ______ ___ ___ * /\ _ \ /\_ \ /\_ \ * \ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___ * \ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ * \ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ * \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/ * \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ * /\____/ * \_/__/ * * ÀÌ ÆÄÀÏÀÌ ÇÏ´Â ÀÏ¿¡ ´ëÇÑ °£´ÜÇÑ ¼³¸í. * * By ÀÛ¼ºÀÚ. * * ÈǸ¢ÇÑ ÀÛ¾÷ added by ´Ù¸¥ »ç¶÷. * * ¹Ùº¸°°Àº ¹ö±× fixed by ¶Ç ´Ù¸¥ »ç¶÷. * * See readme.txt for copyright information. */
Äڵ忡 Áß¿äÇÑ °øÇåÀ» ÇÑ °æ¿ì¿¡¸¸ (ÇÑÁÙÀ» °íÄ£°ÍÀº Æ÷ÇÔµÇÁö ¾Ê½À´Ï´Ù) ¼Ò½º ÆÄÀÏ Çì´õ¿¡ À̸§ÀÌ Æ÷ÇÔ µÉ Çʿ䰡 ÀÖÁö¸¸, Ãß°¡ÇÑ ³»¿ëÀÌ ¾Æ¹«¸® ÀÛ´õ¶óµµ ±×µéÀº doc/thanks._tx ÆÄÀÏ¿¡ Æ÷ÇԵǾî¾ß ÇÕ´Ï´Ù. ÀÌ ÆÄÀÏÀº À̸§ÀÇ ¾ËÆÄºª ¼øÀ¸·Î Á¤·ÄµË´Ï´Ù. ÀÌ¹Ì À̸§ÀÌ ÆÄÀÏ¿¡ Æ÷ÇԵǾî ÀÖ´Â °æ¿ì¿¡´Â »õ·Î¿î °øÇåÀÚ·Î Ãß°¡µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ¼³¸íÀ» ¼öÁ¤ÇÕ´Ï´Ù. ¶ÇÇÑ ¸Å¿ì ÀÛÀº ¼öÁ¤ ÀÌ»óÀÇ ¾î¶² °ÍÀÌ¶óµµ docs/changes._tx ÆÄÀÏ¿¡ Æ÷ÇԵǾî¾ß Çϴµ¥, ÀÌ ÆÄÀÏÀº °¡Àå À§ÂÊ¿¡ ½Ã°£ÀÇ ¿ª¼øÀ¸·Î ¾÷µ¥ÀÌÆ®µË´Ï´Ù. ÀÌ ÆÄÀÏÀº ¼öÁ¤ÀÇ ³»¿ë°ú ´©°¡ ÇÏ¿´´ÂÁö¸¦ °£´ÜÈ÷ ¼³¸íÇÏ¿©¾ß ÇÕ´Ï´Ù.
À̰ÍÀº autoconf¸¦ »ç¿ëÇϰí Àִ°¡ ¾Æ´Ï¸é °íÁ¤µÈ makefileÀ» »ç¿ëÇϰí Àִ°¡¿¡ µû¶ó ¸Å¿ì ´Þ¶óÁý´Ï´Ù. ±×·¸Áö¸¸ ´ëºÎºÐÀÇ Ç÷§Æû¿¡¼ Ç÷§Æû ¼öÁ¤ ½ºÅ©¸³Æ®´Â (¿¹: fixdjgpp.bat) ÀÛÀº makefileÀ» »ý¼º½Ã۴µ¥, À̰ÍÀº MAKEFILE_INC¸¦ ´Ù¸¥ ÆÄÀÏ·Î (¿¹: makefile.dj) Á¤ÀÇÇϸç makefile.allÀ» Æ÷ÇÔÇÕ´Ï´Ù. À̰ÍÀº ¼ö ¸¹Àº ÀÏ¹Ý ±ÔÄ¢À» Æ÷ÇÔÇϸç, Ãß°¡ÀûÀÎ Ç÷§Æû¿¡ ƯȵǴ Á¤º¸¸¦ Á¦°øÇϱâ À§ÇØ MAKEFILE_INC¿¡ µé¾î ÀÖ´Â ÆÄÀϵéÀ» Æ÷ÇÔÇÕ´Ï´Ù. ½ÇÁ¦ ¼Ò½º ÆÄÀÏÀº makefile.lst¿¡ ±â·ÏµË´Ï´Ù.
´ÙÀ½ ¼¼ °¡ÁöÀÇ ¶óÀ̺귯¸® Ÿ°ÙÀÌ Á¸ÀçÇÕ´Ï´Ù: alleg (¸±¸®Áî), alld (µð¹ö±ë), allp (ÇÁ·ÎÆÄÀϸµ). ¿ÀºêÁ§Æ® ÆÄÀÏÀº obj/compiler/version/À¸·Î µé¾î°¡´Âµ¥, versionÀº alleg, alld, allp ÁßÀÇ Çϳª°¡ µË´Ï´Ù. ¶óÀ̺귯¸®´Â lib/compiler/¿¡ µé¾î°©´Ï´Ù. asmdefs.inc¿Í mmxtest.s µîÀÇ ¸î °¡Áö »ý¼ºµÈ ÆÄÀϵéÀº obj/compiler/¿¡ µé¾î°©´Ï´Ù. ÀÇÁ¸¼ºÀº "make depend"¿¡ ÀÇÇØ »ý¼ºµÇ¸ç, obj/compiler/version/makefile.dep¿¡ ÀúÀåµÇ¾î makefile.all¿¡ Æ÷ÇԵ˴ϴÙ.
"make clean"À» ½ÇÇà½ÃŰ¸é ¿ÀºêÁ§Æ®¿Í °°Àº Áö¿ï ¼ö ÀÖ´Â »ý¼º ÆÄÀϵ鸸ÀÌ »èÁ¦µË´Ï´Ù. "make distclean"Àº Å×½ºÆ® ½ÇÇà ÆÄÀϰú ¶óÀ̺귯¸® ÀÚü¸¦ »èÁ¦ÇÏ´Â ÀÏÀ» Æ÷ÇÔÇÏ¿© ¿ø·¡ ¹èÆ÷º»ÀÇ »óÅ·ΠµÇµ¹¸³´Ï´Ù. ±Ã±ØÀÇ ±ú²ýÇÑ »óŸ¦ ¿øÇÑ´Ù¸é "maker veryclean"À¸·Î ¸ðµç »ý¼º ÆÄÀÏÀ» »èÁ¦½Ãų ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀ» ½ÇÇà½ÃŲ µÚ¿¡´Â "make depend"¸¦ ¶óÀ̺귯¸®¸¦ ºôµåÇϱâ Àü¿¡ ½ÇÇà½ÃÄÑ¾ß ÇÒ °ÍÀ̸ç, À©µµ¿ìÁî Ç÷§Æû¿¡¼ »ç¿ëÇÏ´Â °æ¿ì¶ó¸é "fixdll.bat"µµ ½ÇÇà½ÃÄÑ¾ß ÇÕ´Ï´Ù.
MSVC¿Í Watcom ¸µÄ¿¿¡¼ ±ä Ä¿¸Çµå¶óÀÎÀ» »ç¿ëÇÏ·Á¸é, runner.exe¸¦ gcc·Î ÄÄÆÄÀÏÇÏ¿© make°¡ ¼ö¸¹Àº ÀμöµéÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. À̰ÍÀº ÆÄ¶ó¹ÌÅ͵éÀ» ÇϳªÀÇ Àӽà ÆÄÀÏ¿¡ ÀúÀåÇÏ¿© ½ÇÁ¦ ¸í·É¾î¸¦ ÀÌ ÇϳªÀÇ ÆÄÀÏÀ» Àμö·Î ÁÖ¾î ½ÇÇà½ÃŰ´Â °ÍÀÔ´Ï´Ù.
¸ðµç makefileÀº ÀÇÁ¸¼º »ý¼ºÀ» À§ÇØ gcc¸¦ »ç¿ëÇϴµ¥, À̰ÍÀº MSVC³ª Watcom ¿¡¼º¸´Ù Á¤È® Á¤º¸ÀÇ Ãâ·ÂÀ» ¾ò±â°¡ ½±±â ¶§¹®ÀÔ´Ï´Ù.
LIBRARY_VERSION ½Éº¼Àº makefile.verÀÇ ¸Ç À§¿¡¼ Á¤ÀǵǸç, DLL ÆÄÀÏ À̸§ µî¿¡ ¹öÀü ¹øÈ£¸¦ Æ÷ÇÔ½Ã۴µ¥ »ç¿ëµË´Ï´Ù.
allegro.h´Â include/ µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù. À̰ÍÀº include/allegro/ Æ®¸®¿¡ ÀÖ´Â ´Ù¸¥ Çì´õµéÀ» Æ÷ÇÔÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¾à°£ ÀÌ»óÇÑ Á¢±Ù ¹æ¹ýÀ» »ç¿ëÇÏ´Â °ÍÀº allegro.h°¡ "allegro/alconfig.h"¿Í °°Àº ÆÄÀÏÀ» Æ÷ÇÔÇÒ ¼ö Àֱ⠶§¹®Àε¥, À̰ÍÀº ºôµå µð·ºÅ丮 ¾ÈÀÇ º»·¡ À§Ä¡¿¡ ÀÖ´Â °æ¿ì³ª allegro.h¿Í ´Ù¸¥ Çì´õ¸¦ ½Ã½ºÅÛÀÇ include/ µð·ºÅ丮¿Í system_include/allegro/ µð·ºÅ丮¿¡ º¹»çÇÑ °æ¿ì ¸ðµÎ¿¡¼ µ¿ÀÛÇÒ °ÍÀÔ´Ï´Ù. À̰ÍÀº ¼ö¸¹Àº ¿ì¸®ÀÇ Çì´õµé·Î ÀÎÇØ ½Ã½ºÅÛ µð·ºÅ丮°¡ ´Ã¾î³ª´Â °ÍÀ» ÇÇÇϵµ·Ï Çϸç, ÇÁ·Î±×·¥¿¡¼ ´ÜÁö <allegro.h>¸¦ Æ÷ÇÔÇϰųª ³»ºÎ Çì´õ¸¦ #include <allegro/aintern.h>¿Í °°ÀÌ Æ÷ÇÔÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù.
allegro.h´Â alconfig.h¸¦ Æ÷ÇÔÇϴµ¥, À̰ÍÀº ÇöÀç Ç÷§ÆûÀ» °Ë»çÇϸç ÀÌ ÄÄÆÄÀÏ·¯¸¦ À§ÇÑ ÇïÆÛ Çì´õ¸¦ (aldjgpp.h, almsvc.h, alwatcom.h µî) Æ÷ÇÔÇÕ´Ï´Ù. ÇïÆÛ Çì´õ´Â ½Ã½ºÅÛ¿¡ ´ëÇÑ ¸¹Àº ¸ÅÅ©·Î¸¦ Á¤ÀÇÇϸç, Äڵ尡 ¿Ã¹Ù¸£°Ô ÄÄÆÄÀϵǵµ·Ï Çϱâ À§ÇÑ ¿¡¹Ä·¹À̼ÇÀ» Æ÷ÇÔÇϸç, ´Ù¸¥ Ç÷§Æû¿¡ Æ¯ÈµÈ Çì´õ°¡ ÇÊ¿äÇÑ °æ¿ì¿¡ ¼±ÅÃÀûÀ¸·Î ALLEGRO_EXTRA_HEADER¿Í ALLEGRO_INTERNAL_HEADER¸¦ Á¤ÀÇÇÕ´Ï´Ù.
Ç÷§Æû Çì´õ¸¦ Æ÷ÇÔ½ÃŲ ÈÄÀÇ alconfig.hÀÇ ³ª¸ÓÁö´Â Ç÷§Æû Çì´õ°¡ ƯÁ¤ÇÑ °ÍÀ¸·Î ÀÏ¹Ý ¸ÅÆÛ¸¦ ¿À¹ö¶óÀ̵åÇÏÁö ¾ÊÀº °æ¿ì¿¡ ÇÑÇÏ¿© ¸¹Àº ÀÏ¹Ý ÇïÆÛ ¸ÅÅ©·ÎÀÇ µðÆúÆ® °ªÀ» Á¤ÀÇÇÕ´Ï´Ù.
allegro.h´Â ±¸Á¶Ã¼ Á¤ÀÇ¿Í ÇÔ¼öÀÇ ÇÁ·ÎÅäŸÀÔÀ¸·Î ±¸¼ºµË´Ï´Ù. ÆÄÀÏ ¸¶Áö¸·¿¡´Â alinline.h¸¦ Æ÷ÇÔÇϴµ¥, ¿©±â¼´Â ¸ðµç ÀζóÀÎ ·çƾ°ú vtable ·¡ÆÛ, ±×¸®°í ÀζóÀÎ asmÀÌ ºÒ°¡´ÉÇÒ °æ¿ìÀÇ °íÁ¤¼Ò¼ýÁ¡ ¼öÇÐ ·çƾÀÇ C ¹öÀüÀ» Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù. ÀζóÀÎ asmÀÌ Áö¿øµÈ´Ù¸é al386gcc.h, al386vc.h, al386wat.h ÁßÀÇ Çϳª°¡ Æ÷ÇԵ˴ϴÙ.
ALLEGRO_EXTRA_HEADER°¡ Á¤ÀǵǾî ÀÖ´Â °æ¿ì, allegro.h´Â ÆÄÀÏÀÇ ¸¶Áö¸·¿¡¼ À̰ÍÀ» Æ÷ÇÕ´Ï´Ù. À̰ÍÀº aldos.h, alwin.h µîÀÇ ÆÄÀÏ ÁßÀÇ Çϳª¸¦ Æ÷ÇÔÇÏ¿´´Âµ¥, Çϵå¿þ¾î µå¶óÀ̹öÀÇ ID°ª°ú °°Àº Ç÷§Æû¿¡ Æ¯ÈµÈ °ÍµéÀ» Á¤ÀÇÇÏ´Â °ÍÀÔ´Ï´Ù. allegro.hÀÇ ¾ÕºÎºÐ¿¡¼ Æ÷ÇԵǴ Ç÷§Æû ÆÄÀϰú´Â ´Þ¸®, À̵éÀº ÄÄÆÄÀÏ·¯º°·Î ´Þ¶óÁö´Â °ÍÀÌ ¾Æ´Ï¶ó OSº°·Î ´Þ¶óÁö´Â ÆÄÀÏÀ̹ǷÎ, alwin.h¸¦ MSVC¿Í MinGW32¿¡¼ µ¿ÀÏÇÏ°Ô »ç¿ëÇÕ´Ï´Ù. Çì´õ ¾ÕÂÊ¿¡¼´Â ±âº» ¾ð¾î ¹®¹ýÀ» ¼³¸íÇϰí ÀÖ´Â ¹Ý¸é, ¿©±â¼´Â ÀÌ Ç÷§Æû¿¡ °ü·ÃµÈ ¶óÀ̺귯¸® ÇÔ¼öµéÀÌ ¼³¸íµË´Ï´Ù.
aintern.h´Â Ãʱâ Allegro ¹öÀüÀÇ internal,h¿Í ºñ½ÁÇÑ °ÍÀ¸·Î, ¿©·¯ ¼Ò½º »çÀÌ¿¡¼ °øÀ¯µÇÁö¸¸ »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼´Â ÀϹÝÀûÀ¸·Î º¸¿©ÁöÁö ¾Ê±â¸¦ ¿øÇÏ´Â ·çƾÀ» Á¤ÀÇÇϰí ÀÖ½À´Ï´Ù. Ç÷§Æû¿¡ Æ¯ÈµÈ ³»ºÎ Á¤ÀǸ¦ À§ÇØ, aintdos.h, aintwin.h µîÀ» »ç¿ëÇÕ´Ï´Ù. À̵é Çì´õ´Â allegro.h¿¡¼ Á÷Á¢ Æ÷ÇÔµÇÁö´Â ¾ÊÁö¸¸ Á» ´õ ¿ë°¨Çϰųª ¹Ùº¸°°Àº ŸÀÔÀÇ »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼´Â ¾ÆÁ÷µµ Æ÷Ç﵃ ¼ö ÀÖ½À´Ï´Ù :-)
ƯȵǾî Àְųª À̽ÄÀÌ ºÒ°¡´ÉÇÑ ÀÚü API ·çƾÀ» °®´Â Ç÷§Æû¿¡ ´ëÇÏ¿©´Â include µð·ºÅ丮ÀÇ ·çÆ®ÀÇ Æ¯Á¤ Çì´õ¸¦ »ç¿ëÇÏ¿©¾ß ÇÕ´Ï´Ù (¿¹: winalleg.h). À̰ÍÀº ÀÌµé ·çÆ¾À» »ç¿ëÇÏ¿©¾ß ÇÏ´Â »ç¿ëÀÚ ÇÁ·Î±×·¥¿¡¼ Æ÷Ç﵃ ¼ö ÀÖÀ¸¸ç, À̽ÄÀÌ ºÒ°¡´ÉÇÑ Äڵ带 ÀÛ¼ºÇÏ´Â °æ¿ì À̰ÍÀ» Æ÷ÇÔÇÏ´Â °ÍÀ¸·Î ¸Å¿ì ±ò²ûÇÏ°Ô ÀÛ¾÷Çϵµ·Ï ÇÕ´Ï´Ù.
Çì´õÀÇ ¸ðµç ÇÔ¼ö ÇÁ·ÎÅäŸÀÔÀº AL_FUNC() ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ¿©¾ß ÇÕ´Ï´Ù. ÀζóÀÎ ·çƾÀº AL_INLINE() ¸ÅÅ©·Î¸¦ »ç¿ëÇÕ´Ï´Ù. Àü¿ª º¯¼ö´Â AL_VAR()¸¦ »ç¿ëÇϰųª AL_ARRAY()¸¦ »ç¿ëÇÕ´Ï´Ù. ÇÔ¼ö¸¦ °¡¸®Å°´Â Àü¿ª Æ÷ÀÎÅÍ´Â AL_FUNCPTR()À» »ç¿ëÇÕ´Ï´Ù. ´Ù¸¥ ·çƾÀÇ ÆÄ¶ó¹ÌÅÍ·Î ÀÌ¿ëµÇ°Å³ª ±¸Á¶Ã¼ typedef¿¡ ÀúÀåµÇ´Â ÇÔ¼öÀÇ Æ÷ÀÎÅÍ´Â AL_METHOD()¸¦ »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº Áö³ªÄ£ °ÍÀ¸·Î º¸ÀÏ ¼ö ÀÖ°ÚÀ¸³ª, DLL ÀÓÆ÷Æ®/ÀͽºÆ÷Æ® Áö½Ã¾î, _cdecl°ú °°Àº È£Ãâ ±Ô¾à Áö½Ã¾îÀÇ »ç¿ë, ƯÁ¤ ÄÄÆÄÀÏ·¯¿¡¼ÀÇ ½Éº¼ À̸§ º¯È¯¿¡ ´ëÇØ ¸¹Àº À¯¿¬¼ºÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â °ÍÀ» Àؾú´Ù¸é, ±× ÄÚµå´Â ƯÁ¤ Ç÷§Æû¿¡¼´Â µ¿ÀÛÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
ÇÏÁö¸¸ À̰ÍÀº Çì´õ ÆÄÀÏ¿¡¸¸ Àû¿ëµË´Ï´Ù: C ¼Ò½º¿¡¼´Â º¸ÅëÀÇ ÄÚµå·Î ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
ALLEGRO_SRC ½Éº¼Àº ¶óÀ̺귯¸® ¼Ò½º ÆÄÀÏÀ» ÄÄÆÄÀÏÇÏ¸é¼ Á¤Àǵ˴ϴÙ. ¼Ò½º¿¡¼ ÀζóÀÎ ÇÔ¼ö¸¦ »ç¿ëÇÏ·Á¸é INLINE ¸ÅÅ©·Î¸¦ »ç¿ëÇϽʽÿÀ. ±¸Á¶Ã¼¿¡¼ »çÀÌÁî°¡ 0ÀÎ ¹è¿À» Á¤ÀÇÇÏ·Á¸é x[ZERO_SIZE]¸¦ »ç¿ëÇϽʽÿÀ. 64ºñÆ® Á¤¼ö´Â LONG_LONG º¯¼ö·Î ¼±¾ðÇÕ´Ï´Ù (À̰ÍÀº ¸ðµç Ç÷§Æû¿¡¼ Àû¿ëµÇÁö´Â ¾ÊÀ» °ÍÀ¾´Ï´Ù). ÆÄÀÏ À̸§À¸·Î ÀÛ¾÷ÇÏ´Â °æ¿ì¿¡´Â ALLEGRO_LFN, OTHER_PATH_SEPARATOR, DEVICE_SEPARATOR¸¦ üũÇϽʽÿÀ. ÀÚ¼¼ÇÑ ³»¿ëÀº Çì´õÆÄÀÏÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù.
¹®ÀÚ¿ÀÌ ASCII¶ó°í °¡Á¤ÇÏÁö ¸¶½Ê½Ã¿À. ¾Æ´Õ´Ï´Ù. ASCII·Î °¡Á¤ÇÏ¿© ÀÛ¼ºµÈ ÄÚµå´Â UTF-8 µ¥ÀÌÅ͸¦ »ç¿ëÇÒ °æ¿ì¿¡¸¸ µ¿ÀÛÇÒ °ÍÀ̸ç, 16ºñÆ® À¯´ÏÄÚµå ¹®ÀÚ¿À̳ª Áß±¹¾î GB-ÄÚµå, ȤÀº ´Ù¸¥ ÀÌ»óÇÑ MIME Çü½ÄÀ» »ç¿ëÇÏ´Â °æ¿ì¿¡´Â ½É°¢ÇÏ°Ô ´Ù¿îµÉ °ÍÀÔ´Ï´Ù. char *°¡ ÆÄ¶ó¹ÌÅÍ·Î »ç¿ëµÇ´Â °ÍÀ» º»´Ù¸é ±×°ÍÀº ÇöÀç ¼±ÅõǾî ÀÖ´Â Çü½ÄÀÌ ¹«¾ùÀÌµç °£¿¡ ½ÇÁ¦·Î ¹®ÀÚ¿À» °¡Áö°í ÀÖÀ» °ÍÀÔ´Ï´Ù. ±×·¯¹Ç·Î ¹®ÀÚ¿À» ´Ù·ê ¶§¿¡´Â Ç×»ó ¸Å¿ì Á¶½ÉÇÏ¿©¾ß ÇÕ´Ï´Ù. ºÎÁÖÀÇÇÏ°Ô Á¤±Ô libc ·çƾÀ» È£ÃâÇÏÁö ¸¶½Ê½Ã¿À!
¸ðµç ÅØ½ºÆ® °ü·Ã ÀÛ¾÷¿¡¼ À¯´ÏÄÚµå ÇÔ¼ö¸¦ ÀÌ¿ëÇϽʽÿÀ: ÀÚ¼¼ÇÑ ³»¿ëÀº ¹®¼¸¦ Âü°íÇϽʽÿÀ. ½ºÅ©·¡Ä¡ ¹®ÀÚ¿À» ½ºÅÿ¡ ÇÒ´çÇÒ ¶§´Â °¢ ¹®ÀÚ°¡ ÃÖ´ë 4¹ÙÀÌÆ®¸¦ Â÷ÁöÇÑ´Ù°í °¡Á¤ÇÏ¿©¾ß ÇÕ´Ï´Ù: À̰ÍÀº ÇöÀç ¿£ÄÚµù ¹æ½ÄÀÌ ¹«¾ùÀ̵ç ÃæºÐÇÑ °ø°£À» Á¦°øÇÒ °ÍÀÔ´Ï´Ù.
»ó¼ö ¹®ÀÚ¿À» ÁöÁ¤ÇÏ·Á¸é uconvert_ascii ("³ªÀÇ ¹®ÀÚ¿", buf)¸¦ »ç¿ëÇÏ¿© "³ªÀÇ ¹®ÀÚ¿"ÀÇ ÇöÀç ÀÎÄÚµù Çü½ÄÀÇ º¹»çº»À» ±¸ÇÕ´Ï´Ù. buf°¡ NULLÀÌ¸é ³»ºÎÀÇ static ¹öÆÛ¸¦ »ç¿ëÇÒ °ÍÀÌÁö¸¸, º¯È¯µÈ ¹®ÀÚ¿Àº ´ÙÀ½¹ø Çü½Ä º¯È¯ ·çƾ¿¡ ÀÇÇØ º¯°æµÇ°Ô µÇ¹Ç·Î, ´Ù¸¥ ¶óÀ̺귯¸® ÇÔ¼ö·Î À̰ÍÀ» Àü´ÞÇÏ¿© »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÏ¿©¾ß ÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î´Â º¯È¯À» À§ÇÑ °ø°£À» ½ºÅÃÀÇ Àӽà ¿ÀºêÁ§Æ®·Î buf¸¦ ÇÒ´çÇÏ¿© ¸¸µé¾î ÁÖ¾î¾ß ÇÕ´Ï´Ù.
¹Ý´ë·Î º¯È¯ÇÏ·Á¸é (¿¹: Allegro ¹®ÀÚ¿À» ASCII µ¥ÀÌÅ͸¦ »ç¿ëÇÏ´Â OSÀÇ ´Ù¸¥ ÇÔ¼ö·Î Àü´ÞÇÏ·Á¸é) uconvert_toascii(mystring, buf)¸¦ È£ÃâÇϽʽÿÀ.
»ç¿ëÀÚ¿¡°Ô º¸¿©Áú ¸Þ½ÃÁö¿¡ ´ëÇØ¼´Â get_config_text("³ªÀÇ ascii ¹®ÀÚ¿")À» uconvert_ascii() ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº ÇöÀç ¹®ÀÚ¿ ÀÎÄÚµù Çü½ÄÀ¸·Î º¯È¯ÇÑ ÈÄ¿¡ °íÀ¯ ¸Þ¸ð¸® ¿µ¿ªÀÇ Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÒ °ÍÀÔ´Ï´Ù (±×·¯¹Ç·Î µ¶¸³ÀûÀ¸·Î ÀÌ ¹®ÀÚ¿À» ´Ù·ç¾îµµ ¹®Á¦ ¾ø½À´Ï´Ù). ÀÌ ÇÔ¼ö´Â º¯È¯µÈ ¹®ÀÚ¿À» À§ÇØ °ø°£À» ÇÒ´çÇÏ´Â ¼ö°í¸¦ ´ú¾îÁÖ¸ç, ¹®ÀÚ¿À» language.dat ÆÄÀÏÀÇ ¹ø¿ªÀ¸·Î Ç×»ó ¹Ù²Ù¾î ÁֹǷΠÁÁ½À´Ï´Ù. get_config_text()¿¡ Ç×»ó »ó¼ö ¹®ÀÚ¿À» ³Ñ°Ü ÁÖ¾î¾ß ÇÔ¿¡ À¯ÀÇÇϽʽÿÀ. ´Ù¸¥ ÇÔ¼ö¿¡¼ »ý¼ºµÇ¾ú°Å³ª ´Ù¸¥ ¹®ÀÚ¿ º¯¼ö¿¡¼ ¿Â µ¥ÀÌÅÍ´Â »ç¿ëÇÏÁö ¸¶½Ê½Ã¿À: À̰ÍÀº findtext.sh ½ºÅ©¸³Æ®°¡ ¹ø¿ªÀÌ µÇ¾î¾ßÇÒ ¹®ÀÚ¿À» ½±°Ô ãÀ» ¼ö ÀÖµµ·Ï Çϱâ À§ÇؼÀÔ´Ï´Ù.
Çϵå¿þ¾î µå¶óÀ̹ö´Â ±×°ÍÀÇ name°ú desc Çʵ带 Àü¿ªÀÇ empty_string¿¡ ÃʱâÈÇϰí ASCII µå¶óÀ̹ö À̸§À» ascii_name Çʵ忡 ÀúÀåÇÏ¿©¾ß ÇÕ´Ï´Ù. ÇÁ·¹ÀÓ¿öÅ© ÄÚµå´Â ÀÚµ¿À¸·Î ÀÌ °ªÀ» ¹ø¿ªÇÏ°í º¯È¯ÇÏ¿© ±× °á°ú¸¦ name°ú desc Çʵ忡 ÀúÀåÇÒ °ÍÀÔ´Ï´Ù. ´ëºÎºÐÀÇ µå¶óÀ̹ö¿¡¼´Â À̰ÍÀ¸·Î ÃæºÐÇÒ °ÍÀÌÁö¸¸, ´õ ÀÚ¼¼ÇÑ ¼³¸íÀ» Á¦°øÇÏ·Á¸é ±×°ÍÀÇ ÃʱâÈ ·çƾÀÇ ¼³Á¤¿¡ µû¶ó ´Ù¸£¹Ç·Î, ¸ðµç ¿ä±¸µÇ´Â º¯È¯¿¡ ÁÖÀǽʽÿÀ.
±¸Á¶Ã¼ ¿É¼ÂÀº asmdef.inc¿¡¼ Á¤ÀǵǸç, À̰ÍÀº asmdef.c¿¡¼ »ý¼ºµË´Ï´Ù. À̰ÍÀº asm Äڵ尡 »ç¶÷ÀÌ ÀÐÀ» ¼ö ÀÖ´Â À̸§À» ±¸Á¶Ã¼ ¸â¹ö·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ¸ç ÀÚµ¿ÀûÀ¸·Î »õ·Î¿î Çʵ尡 Ãß°¡µÉ ¶§¸¶´Ù Á¶Á¤µÇ¹Ç·Î, À̰ÍÀÌ Ç×»ó C ±¸Á¶Ã¼ÀÇ ·¹À̾ƿô¿¡ Á¤È®È÷ ¸Â°Ô µË´Ï´Ù.
Asm ÄÚµå´Â ¸ÅÅ©·Î FUNC(À̸§)À» ·çƾÀÇ ½ÃÀÛ ¼±¾ð¿¡ »ç¿ëÇÏ¿©¾ß Çϸç, GLOBL(À̸§)À» ¿ÜºÎ ½Éº¼À» ÂüÁ¶ÇÏ·Á ÇÒ ¶§ (¿¹: C º¯¼ö³ª ÇÔ¼ö) »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº À̸§ º¯È¯À» (name mangling) ÀÌ½Ä °¡´ÉÇÑ ¹æ½ÄÀ¸·Î ´Ù·ç´Â °ÍÀÔ´Ï´Ù (COFF´Â ¹ØÁÙÀ» ¾Õ¿¡ ºÙ¿©¾ß ÇÏÁö¸¸, ELF´Â ±×·¸Áö ¾Ê½À´Ï´Ù).
±×°ÍÀ» ´Ù½Ã µÇµ¹·Á ³õ´Â ÇÑ asmÀÇ %ds¿Í %es¸¦ ¼öÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. USE_FS¿Í FSEG°¡ Á¤ÀǵǾî ÀÖ´Ù¸é %fsµµ º¯°æ½Ãų ¼ö ÀÖÀ¸¸ç, ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â ¸ðµç °ÍÀ» ¾ï¼¼½ºÇÒ ¶§ nearptrÀ» ¾ÈÀüÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
MMX opcode°¡ Áö¿øµÈ´Ù°í °¡Á¤ÇÏÁö ¸¶½Ê½Ã¿À: ¸ðµç ¾î¼Àºí·¯ ¹öÀüÀÌ À̰ÍÀ» ÀνÄÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ALLEGRO_MMX ¸ÅÅ©·Î¸¦ üũÇϽðí, »ç¿ë °¡´ÉÇÏÁö ¾Ê´Â ¸í·É¾î¶ó¸é ¿ì¾ÆÇÏ°Ô »ç¿ëÀ» Æ÷±âÇÏ´Â °ÍÀ» ¸í½ÉÇϽʽÿÀ.
ŸÀÌ¸Ó Çڵ鷯³ª ÀÔ·Â ÄÝ¹é ³»¿¡¼ ½ÇÇàµÇ´Â ¾î¶°ÇÑ ÀÌ½Ä °¡´É ·çƾÀº À̰ÍÀÌ °Çµå¸®´Â ¸ðµç ÄÚµå¿Í µ¥ÀÌÅ͸¦ ¹Ýµå½Ã Àá±×¾î¾ß ÇÕ´Ï´Ù. À̰ÍÀº END_OF_FUNCTION(x)³ª END_OF_STATIC_FUNCTION(x)¸¦ °¢ ÇÔ¼ö Á¤ÀÇ ´ÙÀ½¿¡ À§Ä¡½Ã۰í (ÇÔ¼ö¸¦ INLINEÀ¸·Î ¼±¾ðÇÏ´Â °æ¿ì¿¡´Â ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù) ÃʱâÈ ÄÚµåÀÇ ¾îµò°¡¿¡¼ LOCK_FUNCTION()À» È£ÃâÇÏ´Â ÀÏÀÔ´Ï´Ù. Àü¿ª º¯¼ö¸¦ Àá±×·Á¸é LOCK_VARIABLE()À» »ç¿ëÇϸç, ÇÒ´çµÈ ¸Þ¸ð¸®´Â LOCK_DATA()¸¦ »ç¿ëÇÕ´Ï´Ù.
¸®¼Ò½º Á¦°Å µîÀÇ Å¬¸°¾÷ Äڵ带 °®´Â ¸ðµâÀº _add_exit_func()¸¦ È£ÃâÇÏ¿© ÀÚ½ÅÀÇ exit Äڵ带 µî·ÏÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. À̰ÍÀº »ç¿ëÀÚ°¡ allegro_exit()¸¦ È£ÃâÇÏ´ÂÁö¿Í °ü°è ¾øÀÌ, ¶Ç´Â ÇÁ·Î±×·¥ÀÌ °©Àڱ⠷±Å¸ÀÓ ¿¡·¯¿¡ ÀÇÇØ ´Ù¿îµÉ °æ¿ì µî, ÇÁ·Î±×·¥ÀÌ ¿ì¾ÆÇÏ°Ô Á¾·áµÇµµ·Ï º¸ÀåÇÕ´Ï´Ù. ¼Ë´Ù¿î ·çƾ ¾È¿¡¼ _remove_exit_func()¸¦ È£ÃâÇÏ¿©¾ß Çϴµ¥, ±×·¸Áö ¾ÊÀ¸¸é ¹«ÇÑ ·çÇÁ¿¡ ºüÁö°Ô µÉ °ÍÀÔ´Ï´Ù.