1999³â 11¿ù, Shawn Hargreaves.
ÀÌ ±ÛÀ» ¾²´Â ½ÃÁ¡¿¡¼ÀÇ ¹öÀüÀÎ 3.9.x WIP ¹öÀü¿¡¼¿Í °°ÀÌ, Allegro´Â µµ½º (djgpp, Watcom), À©µµ¿ìÁî (MSVC, mingw32, RSXNTDJ), ¸®´ª½º (ÄܼÖ, X), BeOS¿¡ À̽ĵǾú½À´Ï´Ù. ´ç½ÅÀÌ À̰ÍÀ» ÀÐÀ» ¶§±îÁö´Â ¹öÀü 4.0ÀÌ ¾Æ¸¶µµ ¹ßÇ¥µÇ¾ú°Å³ª ´õ ¸¹Àº ´Ù¸¥ Ç÷§ÆûÀ» Áö¿øÇÏ´Â ÀÌÈÄ ¹öÀüÀÌ ¹ßÇ¥µÇ¾úÀ» °ÍÀÔ´Ï´Ù. Allegro´Â ¾îµð¿¡¼ ½ÇÇà½ÃŰ°Ç Á¤È®È÷ ¶È°°Àº ¶óÀ̺귯¸® ÇÔ¼ö¸¦ Á¦°øÇϸç, À̰ÍÀº ´Ù¸¥ Áö¿ø ½Ã½ºÅÛÀ» À§ÇÑ ÇÁ·Î±×·¥ÀÇ ¹öÀüÀ» ¸Å¿ì ½±°Ô ¸¸µéµµ·Ï ÇÕ´Ï´Ù: ÀÌ·ÐÀûÀ¸·Î, °£´ÜÇÑ ÀçÄÄÆÄÀϸ¸ÀÌ ÇÊ¿äÇÑ ÀÛ¾÷ÀÌ µË´Ï´Ù. ÇÏÁö¸¸ ½ÇÁ¦ ¼¼»ó¿¡¼´Â ¸ðµç ÀÏÀÌ ±×·¸°Ô °£´ÜÇÏÁö´Â ¾ÊÀ¸¹Ç·Î, °¢ »õ·Î¿î ÇÁ·§Æû¿¡¼ ÇÁ·Î±×·¥ÀÌ µ¿ÀÛÇϵµ·Ï ÇÏ·Á¸é ¸î°¡Áö Á¶ÀÛÀÌ ¾Æ¸¶µµ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù. ÀÌ ¹®¼´Â ³ªÁß¿¡ ¼ö¸¹Àº »ðÁúÀ» ÇØ¾ß ÇÏ´Â »óȲÀ» ¸¸³ª´Â ´ë½Å ¿Ã¹Ù¸£°Ô ½ÃÀÛÇÒ ¼ö Àֱ⸦ ¹Ù¶ó´Â ¸¶À½¿¡¼, °¡Àå ÀÖÀ»¹ýÇÑ ¹®Á¦Á¡ÀÌ ¾î¶² °ÍÀÌ µÉ °ÍÀÎÁö¸¦ »ý°¢ÇØ º¸·Á´Â ½Ãµµ·Î ÀÛ¼ºµÈ °ÍÀÔ´Ï´Ù. À̵é Áß ¸î¸îÀº Allegro¿¡ °ü·ÃµÈ °ÍÀÌÁö¸¸, ´ëºÎºÐÀº ÀϹÝÀûÀÎ C °ü·Ã ¹®Á¦ÀÔ´Ï´Ù: µÎ°¡Áö °æ¿ì ¸ðµÎ¿¡ ´ëÇÏ¿©, Á¦°¡ ºüÆ®¸° ¾î¶°ÇÑ ´Ù¸¥ ¹®Á¦Á¡¿¡ ´ëÇÑ »ý°¢À» Á¦°Ô ¾Ë·Á ÁֽʽÿÀ!
typedef struct MYSTRUCT
{
char a;
short b;
int c;
};
sizeof(MYSTRUCT)°¡ 7ÀÌ µÉ °ÍÀ¸·Î ¿¹»óÇÒ ¼ö ÀÖ°ÚÁö¸¸, ½ÇÁ¦·Î ´ëºÎºÐÀÇ
ÀÎÅÚ ÄÄÆÄÀÏ·¯´Â 8¹ÙÀÌÆ®·Î ¸¸µé °ÍÀÔ´Ï´Ù. ¶ÇÇÑ 12¹ÙÀÌÆ®ÀÇ ¿µ¿ªÀ»
Â÷ÁöÇÏ°Ô µÇ´Â °æ¿ìµµ ¸¹À¸¸ç, ¹Ì·¡ÀÇ 64ºñÆ® Ç÷§ÆûÀº int º¯¼ö¸¦
¿¹»óÇÏ´Â °Íº¸´Ù µÎ¹è·Î »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î ÀÌ¿Í °°Àº º¯µ¿
°¡´ÉÇÑ »çÇ×À» »ç¿ëÇÏ´Â ÄÚµåÀÇ »ç¿ëÀº ÇÇÇϵµ·Ï ÇÏ¿©¾ß Çϸç,
µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ À§ÇÑ °ø°£À» ÇÒ´çÇÒ ¶§¿¡ ¹Ýµå½Ã sizeof()¸¦ »ç¿ëÇÏ¿©¾ß
ÇÕ´Ï´Ù.
°¡Àå Áß¿äÇÑ °ÍÀº, Àбâ Àü¿ë µ¥ÀÌÅÍ, Àü¿ª °¡º¯ µ¥ÀÌÅÍ, »ç¿ëÀÚ °ü·Ã µ¥ÀÌÅ͸¦ ±¸ºÐÇÏ´Â °ÍÀÔ´Ï´Ù. ´©±º°¡°¡ ´ç½ÅÀÇ °ÔÀÓÀ» ´Ù¿î·ÎµåÇÏ¿© ¾ÐÃàÀ» Ç®°í ÄÄÆÄÀÏÇÏ¿© ½ÇÇà½ÃŲ´Ù°í °¡Á¤ÇÏ´Â °æ¿ì, ±×°ÍÀÌ ¼³Ä¡µÈ µð·ºÅ丮¸¦ °ÔÀÓÀÌ ÀüÇô ¼öÁ¤ÇÏÁö ¾Ê¾Æ, µð·ºÅ丮°¡ Àбâ Àü¿ëÀ¸·Î ¸¶¿îÆ®µÉ ¼ö ÀÖ´Ù¸é ¹®Á¦°¡ ¾ø½À´Ï´Ù. ÇÏÀ̽ºÄÚ¾î Å×À̺í°ú °°Àº °¡º¯ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ·Á¸é, À̰ÍÀ» /var/games µð·ºÅ丮¿¡ ³ÖÀ¸½Ê½Ã¿À (¶Ç´Â ¸¹Àº ÆÄÀÏÀ» ÀúÀå½ÃŰ´Â °ÍÀÌ ÇÊ¿äÇÑ °æ¿ì /var/games/mygame ¼ºêµð·ºÅ丮¸¦ »ý¼º½ÃŰ°í µ¥ÀÌÅ͸¦ ±×°÷¿¡ ÀúÀåÇϽʽÿÀ). °°Àº ½Ã½ºÅÛ¿¡ ¸¹Àº »ç¿ëÀÚ°¡ ÀÖÀ» ¼ö ÀÖÀ¸¸ç, °°Àº ÀúÀåµÈ Á¤º¸¸¦ °øÀ¯ÇÒ ¼öµµ ÀÖÀ½À» ÀØÁö ¸¶½Ê½Ã¿À! ÇöÀç »ç¿ëÀÚ¿¡ ÇÑÁ¤µÇ´Â ¾î¶² °ÍÀ̵ç (°ÔÀÓ ÆÄÀÏ ÀúÀåÀ̳ª ÄÁÆ®·Ñ·¯ ¼³Á¤ µî) HOME ȯ°æ º¯¼ö¸¦ Àоî ãÀ» ¼ö ÀÖ´Â (¿¹: char *mydir = getenv("HOME")) »ç¿ëÀÚÀÇ È¨ µð·ºÅ丮¿¡ ÀúÀåÇÏ¿©¾ß ÇÕ´Ï´Ù. ¿ª½Ã, ¸¹Àº ÆÄÀÏÀ» ÀúÀåÇÒ Çʿ䰡 ÀÖ´Ù¸é, ¼ºêµð·ºÅ丮¸¦ Á÷Á¢ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÁß »ç¿ëÀÚ È¯°æ¿¡¼ °ÔÀÓÀÌ µ¿ÀÛÇϵµ·Î°í Çϱ⿡´Â À̰ÍÀ¸·Î ÃæºÐÇÏÁö¸¸, Á¤¸»·Î ¾Æ¸§´Ù¿î ¼³Á¤À» ¿øÇÑ´Ù¸é (¿¹¸¦ µé¾î, Á¤±Ô ÄÄÆÄÀÏ ±ÔÄ¢°ú ÇÔ²² "make install"À» Á¦°øÇÏ·Á¸é), ´ÙÀ½ÀÇ Àå¼Ò¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÕ´Ï´Ù:
´ëºÎºÐÀÇ ¹ÙÀ̳ʸ®´Â /usr/local/bin¿¡ ÀúÀåµÇÁö¸¸, °ÔÀÓÀº /usr/local/games¿¡ ÀúÀåµÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ µð·ºÅ丮´Â ÇöÀç ½Ã½ºÅÛ¿¡¼ »ç¿ëÀÚ¿¡ ÀÇÇØ Á÷Á¢ ½ÇÇà½Ãų ¼ö ÀÖ´Â ½ÇÇàÆÄÀÏ ÀÚü¸¸À» À§ÇÑ °÷ÀÔ´Ï´Ù.
°øÀ¯ ¶óÀ̺귯¸®¿Í ´Ù¸¥ ½ÇÇà ÄÚµå´Â /usr/local/lib¿¡ ÀúÀåµË´Ï´Ù. ÀÌ µð·ºÅ丮ÀÇ ³»¿ëÀº ¿ª½Ã ÇϳªÀÇ ½Ã½ºÅÛ¿¡ ´ëÇÑ °ÍÀÌÁö¸¸, »ç¿ëÀÚ´Â À̰ÍÀ» Á÷Á¢ ½ÇÇà½ÃŰÁö´Â ¾Ê½À´Ï´Ù (¿¹¸¦ µé¾î, Allegro °øÀ¯ ¶óÀ̺귯¸®´Â À̰÷¿¡ ÀúÀåµË´Ï´Ù).
½ÇÇàÆÄÀÏÀÌ ¾Æ´Ñ ¸®¼Ò½º´Â /usr/local/share/¿¡ ÀúÀåµÇ°Å³ª, °ÔÀÓ¿¡ ´ëÇÏ¿©´Â, /usr/local/share/games/ ÀúÀåµÉ ¼ö ÀÖ½À´Ï´Ù. ÀÌ µð·ºÅ丮´Â ¾î¶°ÇÑ Å¸ÀÔÀÇ ÄÄÇ»ÅÍ¿¡¼ °ÔÀÓÀÌ ½ÇÇàµÇ¾îµµ µ¿ÀÏÇÏ°Ô À¯ÁöµÇ´Â Á¤º¸°¡ ÀúÀåµÇ´Â °ÍÀÔ´Ï´Ù. ±×·¯¹Ç·Î i386 ½Ã½ºÅÛ°ú Alpha ¹Ú½º, PPC ½Ã½ºÅÛÀÌ È¥¿ëµÇ´Â ³×Æ®¿öÅ©¿¡¼ »ç¿ëµÇ´Â °æ¿ì, °°Àº µ¥ÀÌÅ͸¦ ¸ðµç Çϵå¿þ¾î¿¡¼ ³×Æ®¿öÅ©¸¦ ÅëÇØ ¸¶¿îÆ®ÇÒ ¼ö ÀÖ½À´Ï´Ù. Çϳª ÀÌ»óÀÇ ÆÄÀÏÀ» ÀúÀåÇÏ¿©¾ß ÇÑ´Ù¸é ¼ºêµð·ºÅ丮¸¦ ¸¸µé¾î ±×°÷¿¡ ¸ðµÎ ÀúÀåÇϽʽÿÀ.
#ifdef GFX_MODEX
if (gfx_driver->id == GFX_MODEX) {
/* ¸ðµå-X ±×·¡ÇÈ ¸ðµå¸¦ À§ÇÑ ÀÛ¾÷À» ÇϽÿÀ */
}
else
#endif
{
/* ÀϹÝÀûÀÎ ±×·¡ÇÈ ¸ðµå¸¦ À§ÇÑ ÀÛ¾÷À» ÇϽÿÀ */
}
¸ðµå-X µå¶óÀ̹ö°¡ ÇöÀç Ç÷§Æû¿¡¼ Áö¿øµÇÁö ¾Ê´Â °æ¿ì, ÀÌ ÄÚµå´Â
¸ðµå-X ·çƾÀ» ÄÄÆÄÀÏÇÏÁö ¾Êµµ·Ï ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¹æ½ÄÀº ¸ðµå-X°¡
Áö¿øµÇ°Å³ª Áö¿øµÇÁö ¾ÊÀ» ¼ö ÀÖ´Â ¸®´ª½º¿Í °°Àº ½Ã½ºÅÛ¿¡¼
¼³Á¤ ½ºÅ©¸³Æ®ÀÇ ¿É¼Ç¿¡ µû¶ó ÀûÀÀµÉ °ÍÀ̹ǷÎ, Ç÷§Æû ÀÚü¸¦
üũÇÏ´Â °Íº¸´Ù ÁÁÀº ¹æ¹ýÀÔ´Ï´Ù.
// ±×¸®±â ÀÛ¾÷ÀÇ ¸Ç óÀ½¿¡¼ bmp_select()¸¦ Çѹø È£Ãâ
bmp_select(bmp);
for (y=top; y<bottom; y++) {
// °¢ °¡·Î ¶óÀθ¶´Ù bmp_write_line() È£Ãâ
unsigned long address = bmp_write_line(bmp, y);
for (x=left; x<right; x++) {
// Çȼ¿ µ¥ÀÌÅ͸¦ ¾²±â À§ÇØ bmp_write*() ¸ÅÅ©·Î¸¦ »ç¿ë
bmp_write8(address+x, color);
}
}
// ±×¸®±â ÀÛ¾÷ÀÇ ¸Ç ¸¶Áö¸·¿¡ bmp_unwrite_line()À» Çѹø È£Ãâ
bmp_unwrite_line(bmp);
±×·¸½À´Ï´Ù. À̰ÍÀº Á» ÁÁÁö ¾Ê¾Æ º¸ÀÔ´Ï´Ù¸¸, ÀÌµé ¸ÅÅ©·ÎÀÇ Àý¹ÝÀº ¾î¶²
Ç÷§Æû¿¡ ´ëÇØ¼´Â ´Ü¼øÈ÷ ¾Æ¹« µ¿ÀÛÀ» ÇÏÁö ¾Ê´Â °ÍÀ¸·Î º¯È¯µÉ °ÍÀ̸ç,
³ª¸ÓÁö ¹ÝÀº 1ºñÆ®ÀÇ Æ÷ÀÎÅÍ Á¶ÀÛÀ̳ª ÀζóÀÎ ¾î¼Àºí·¯·Î ¹Ù²î¹Ç·Î, ±×·¸°Ô
³ª»Û °ÍÀº ¾Æ´Õ´Ï´Ù. ±×¸®°í À̰ÍÀº ¾î´À Ç÷§ÆûÀ¸·Îµç ÀÌ½Ä °¡´ÉÇÑ
¹æ¹ýÀ¸·Î ¸Þ¸ð¸®¸¦ Á÷Á¢ ¾ï¼¼½ºÇÏ´Â ÀÛ¾÷À» ±¸ÇöÇÏ´Â À¯ÀÏÇÑ ¹æ¹ýÀÔ´Ï´Ù.
´õ ³ôÀº »ö»ó ºñÆ®¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡´Â, bmp_write8()À» bmp_write15(), bmp_write16() µîÀ¸·Î ¹Ù²Ù¾î »ç¿ëÇϸç, ¸ñÀû ¾îµå·¹½º¿¡ xÃà °ªÀ» ´õÇÏ´Â °æ¿ì¿¡ ¾ó¸¶¸¦ °öÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. 15¿Í 16ºñÆ® ¸ðµå¿¡¼´Â sizeof(short)¸¦ °öÇϸç, 24ºñÆ® ¸ðµå¿¡¼´Â 3À», 32ºñÆ® ¸ðµå¿¡¼´Â sizeof(long)À» °öÇÕ´Ï´Ù.