From 7a91a704c549c3acc412e95d7f475c944bf2648b Mon Sep 17 00:00:00 2001 From: Yogev Ezra Date: Sun, 30 Jan 2011 11:17:50 +0000 Subject: [PATCH] Added sources of the following games: mario2, megamaze, MSquare, pig, soko. git-svn-id: svn://kolibrios.org@1806 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/games/MSquare/trunk/MSquare.asm | 725 +++ programs/games/MSquare/trunk/MSquare.fnt | Bin 0 -> 160 bytes programs/games/MSquare/trunk/editbox_ex.mac | 194 + programs/games/mario2/trunk/MARIO.ASM | 813 ++++ programs/games/mario2/trunk/MARIOALL.BMP | Bin 0 -> 15874 bytes programs/games/megamaze/trunk/GIF_LITE.INC | 318 ++ programs/games/megamaze/trunk/MACROS.INC | 264 ++ programs/games/megamaze/trunk/blackbox.inc | 300 ++ programs/games/megamaze/trunk/colzone.bin | Bin 0 -> 124 bytes programs/games/megamaze/trunk/colzone.inc | 140 + programs/games/megamaze/trunk/cstep.bin | Bin 0 -> 166 bytes programs/games/megamaze/trunk/cstep.inc | 66 + programs/games/megamaze/trunk/debug.inc | 137 + programs/games/megamaze/trunk/fhouse.bin | Bin 0 -> 106 bytes programs/games/megamaze/trunk/fhouse.inc | 197 + programs/games/megamaze/trunk/loops.bin | Bin 0 -> 2291 bytes programs/games/megamaze/trunk/loops.inc | 245 + programs/games/megamaze/trunk/marble.bin | Bin 0 -> 346 bytes programs/games/megamaze/trunk/marble.inc | 138 + programs/games/megamaze/trunk/megamaze.asm | 855 ++++ programs/games/megamaze/trunk/nolt.bin | Bin 0 -> 474 bytes programs/games/megamaze/trunk/nolt.inc | 92 + programs/games/megamaze/trunk/omaze.bin | Bin 0 -> 29 bytes programs/games/megamaze/trunk/or2.bin | Bin 0 -> 798 bytes programs/games/megamaze/trunk/orient.bin | Bin 0 -> 100 bytes programs/games/megamaze/trunk/orient.inc | 227 + programs/games/megamaze/trunk/orientg2.gif | Bin 0 -> 3114 bytes programs/games/megamaze/trunk/smz.bin | Bin 0 -> 1335 bytes programs/games/megamaze/trunk/smz.inc | 94 + programs/games/megamaze/trunk/tam.INC | 164 + programs/games/megamaze/trunk/tam.bin | Bin 0 -> 1475 bytes programs/games/megamaze/trunk/tilt.bin | Bin 0 -> 1130 bytes programs/games/megamaze/trunk/tilt.inc | 93 + programs/games/megamaze/trunk/tilt2.bin | Bin 0 -> 290 bytes programs/games/megamaze/trunk/tilt2.inc | 105 + programs/games/megamaze/trunk/wriggle.bin | Bin 0 -> 375 bytes programs/games/megamaze/trunk/wriggle.inc | 251 + programs/games/pig/trunk/AUTHORS | 1 + programs/games/pig/trunk/COPYING | 340 ++ programs/games/pig/trunk/ChangeLog | 2 + programs/games/pig/trunk/INSTALL | 182 + programs/games/pig/trunk/INSTRUCTIONS | 54 + programs/games/pig/trunk/Makefile.am | 6 + programs/games/pig/trunk/Makefile.in | 494 ++ programs/games/pig/trunk/NEWS | 0 programs/games/pig/trunk/README | 269 ++ programs/games/pig/trunk/aclocal.m4 | 961 ++++ programs/games/pig/trunk/config.guess | 1363 ++++++ programs/games/pig/trunk/config.sub | 1470 ++++++ programs/games/pig/trunk/configure | 4713 +++++++++++++++++++ programs/games/pig/trunk/configure.in | 43 + programs/games/pig/trunk/depcomp | 411 ++ programs/games/pig/trunk/dirty.c | 176 + programs/games/pig/trunk/dirty.h | 41 + programs/games/pig/trunk/dirtyrects.txt | 83 + programs/games/pig/trunk/engine.c | 1156 +++++ programs/games/pig/trunk/engine.h | 404 ++ programs/games/pig/trunk/evil.png | Bin 0 -> 58131 bytes programs/games/pig/trunk/font.png | Bin 0 -> 14229 bytes programs/games/pig/trunk/glassfont.png | Bin 0 -> 159490 bytes programs/games/pig/trunk/icons.png | Bin 0 -> 119918 bytes programs/games/pig/trunk/install-sh | 251 + programs/games/pig/trunk/lifepig.png | Bin 0 -> 6170 bytes programs/games/pig/trunk/missing | 190 + programs/games/pig/trunk/mkinstalldirs | 40 + programs/games/pig/trunk/pig-linux-x86 | Bin 0 -> 26744 bytes programs/games/pig/trunk/pig.c | 1332 ++++++ programs/games/pig/trunk/pigframes.png | Bin 0 -> 53743 bytes programs/games/pig/trunk/slime.png | Bin 0 -> 69856 bytes programs/games/pig/trunk/stars.png | Bin 0 -> 2338 bytes programs/games/pig/trunk/tiles.png | Bin 0 -> 44393 bytes programs/games/soko/trunk/100BOXES.LEV | Bin 0 -> 609 bytes programs/games/soko/trunk/990602.LEV | Bin 0 -> 2377 bytes programs/games/soko/trunk/AENIGMA.LEV | Bin 0 -> 5650 bytes programs/games/soko/trunk/ALBG-BST.LEV | Bin 0 -> 3239 bytes programs/games/soko/trunk/ALBG1-1.LEV | Bin 0 -> 5825 bytes programs/games/soko/trunk/ALBG1-2.LEV | Bin 0 -> 4374 bytes programs/games/soko/trunk/ALBG1-3.LEV | Bin 0 -> 2652 bytes programs/games/soko/trunk/AUTOGEN.LEV | Bin 0 -> 1841 bytes programs/games/soko/trunk/BAGLE.LEV | Bin 0 -> 1712 bytes programs/games/soko/trunk/BAGLE2.LEV | Bin 0 -> 1442 bytes programs/games/soko/trunk/BOXXLE1.LEV | Bin 0 -> 9704 bytes programs/games/soko/trunk/BOXXLE2.LEV | Bin 0 -> 8811 bytes programs/games/soko/trunk/CANTRIP.LEV | Bin 0 -> 1214 bytes programs/games/soko/trunk/CANTRIP2.LEV | Bin 0 -> 892 bytes programs/games/soko/trunk/CELLTYPE.INC | 28 + programs/games/soko/trunk/CNF | Bin 0 -> 80 bytes programs/games/soko/trunk/CNF.ASM | 102 + programs/games/soko/trunk/DH1.LEV | Bin 0 -> 1067 bytes programs/games/soko/trunk/DH2.LEV | Bin 0 -> 1378 bytes programs/games/soko/trunk/DIM-YORK.LEV | Bin 0 -> 2156 bytes programs/games/soko/trunk/ERIM.LEV | Bin 0 -> 2800 bytes programs/games/soko/trunk/FPOK.LEV | Bin 0 -> 1570 bytes programs/games/soko/trunk/GRIG2001.LEV | Bin 0 -> 7416 bytes programs/games/soko/trunk/GRIG2002.LEV | Bin 0 -> 3085 bytes programs/games/soko/trunk/HANDMADE.LEV | Bin 0 -> 3064 bytes programs/games/soko/trunk/HEYTAK.LEV | Bin 0 -> 840 bytes programs/games/soko/trunk/HOWARD1.LEV | Bin 0 -> 7762 bytes programs/games/soko/trunk/HOWARD2.LEV | Bin 0 -> 3689 bytes programs/games/soko/trunk/HOWARD3.LEV | Bin 0 -> 1704 bytes programs/games/soko/trunk/HOWARD4.LEV | Bin 0 -> 3393 bytes programs/games/soko/trunk/JCD.LEV | Bin 0 -> 3110 bytes programs/games/soko/trunk/JCT.LEV | Bin 0 -> 19577 bytes programs/games/soko/trunk/KOKOBAN.LEV | Bin 0 -> 2562 bytes programs/games/soko/trunk/KOMPACT.LEV | Bin 0 -> 2638 bytes programs/games/soko/trunk/LOMA.LEV | Bin 0 -> 3026 bytes programs/games/soko/trunk/MACROS.INC | 189 + programs/games/soko/trunk/MAELSTRM.LEV | Bin 0 -> 2717 bytes programs/games/soko/trunk/MARIOB.LEV | Bin 0 -> 2126 bytes programs/games/soko/trunk/MASMICRO.LEV | Bin 0 -> 9099 bytes programs/games/soko/trunk/MASSASQ.LEV | Bin 0 -> 7585 bytes programs/games/soko/trunk/MICRCOSM.LEV | Bin 0 -> 2380 bytes programs/games/soko/trunk/MICROBAN.LEV | Bin 0 -> 7630 bytes programs/games/soko/trunk/MINICOSM.LEV | Bin 0 -> 2117 bytes programs/games/soko/trunk/NABOCOSM.LEV | Bin 0 -> 2300 bytes programs/games/soko/trunk/NOVOBAN.LEV | Bin 0 -> 2190 bytes programs/games/soko/trunk/NUMBERS.LEV | Bin 0 -> 551 bytes programs/games/soko/trunk/ONLINE.LEV | Bin 0 -> 712 bytes programs/games/soko/trunk/ORIGINAL.LEV | Bin 0 -> 10001 bytes programs/games/soko/trunk/PICOCOSM.LEV | Bin 0 -> 1232 bytes programs/games/soko/trunk/RULES.TXT | 180 + programs/games/soko/trunk/SASQ_.LEV | Bin 0 -> 6536 bytes programs/games/soko/trunk/SASQ_III.LEV | Bin 0 -> 8098 bytes programs/games/soko/trunk/SASQ_IV.LEV | Bin 0 -> 6419 bytes programs/games/soko/trunk/SASQ_V.LEV | Bin 0 -> 7199 bytes programs/games/soko/trunk/SASQ_VI.LEV | Bin 0 -> 8471 bytes programs/games/soko/trunk/SIMPLE.LEV | Bin 0 -> 5559 bytes programs/games/soko/trunk/SKIN.RAW | Bin 0 -> 11520 bytes programs/games/soko/trunk/SOKEVO.LEV | Bin 0 -> 4886 bytes programs/games/soko/trunk/SOKHARD.LEV | Bin 0 -> 1367 bytes programs/games/soko/trunk/SOKO | Bin 0 -> 2945 bytes programs/games/soko/trunk/SOKO-4.LEV | Bin 0 -> 160 bytes programs/games/soko/trunk/SOKO-5.LEV | Bin 0 -> 2652 bytes programs/games/soko/trunk/SOKO-6.LEV | Bin 0 -> 1568 bytes programs/games/soko/trunk/SOKO-7.LEV | Bin 0 -> 3980 bytes programs/games/soko/trunk/SOKO-8.LEV | Bin 0 -> 415 bytes programs/games/soko/trunk/SOKO-9.LEV | Bin 0 -> 554 bytes programs/games/soko/trunk/SOKO.ASM | 1161 +++++ programs/games/soko/trunk/SOKOLATE.LEV | Bin 0 -> 2135 bytes programs/games/soko/trunk/SOLOBAN.LEV | Bin 0 -> 1025 bytes programs/games/soko/trunk/STILMORE.LEV | Bin 0 -> 4346 bytes programs/games/soko/trunk/SVEN.LEV | Bin 0 -> 68047 bytes programs/games/soko/trunk/TAKAKEN.LEV | Bin 0 -> 281 bytes programs/games/soko/trunk/TITLSCRN.LEV | Bin 0 -> 1094 bytes programs/games/soko/trunk/TWISTY.LEV | Bin 0 -> 225 bytes 145 files changed, 21060 insertions(+) create mode 100644 programs/games/MSquare/trunk/MSquare.asm create mode 100644 programs/games/MSquare/trunk/MSquare.fnt create mode 100644 programs/games/MSquare/trunk/editbox_ex.mac create mode 100644 programs/games/mario2/trunk/MARIO.ASM create mode 100644 programs/games/mario2/trunk/MARIOALL.BMP create mode 100644 programs/games/megamaze/trunk/GIF_LITE.INC create mode 100644 programs/games/megamaze/trunk/MACROS.INC create mode 100644 programs/games/megamaze/trunk/blackbox.inc create mode 100644 programs/games/megamaze/trunk/colzone.bin create mode 100644 programs/games/megamaze/trunk/colzone.inc create mode 100644 programs/games/megamaze/trunk/cstep.bin create mode 100644 programs/games/megamaze/trunk/cstep.inc create mode 100644 programs/games/megamaze/trunk/debug.inc create mode 100644 programs/games/megamaze/trunk/fhouse.bin create mode 100644 programs/games/megamaze/trunk/fhouse.inc create mode 100644 programs/games/megamaze/trunk/loops.bin create mode 100644 programs/games/megamaze/trunk/loops.inc create mode 100644 programs/games/megamaze/trunk/marble.bin create mode 100644 programs/games/megamaze/trunk/marble.inc create mode 100644 programs/games/megamaze/trunk/megamaze.asm create mode 100644 programs/games/megamaze/trunk/nolt.bin create mode 100644 programs/games/megamaze/trunk/nolt.inc create mode 100644 programs/games/megamaze/trunk/omaze.bin create mode 100644 programs/games/megamaze/trunk/or2.bin create mode 100644 programs/games/megamaze/trunk/orient.bin create mode 100644 programs/games/megamaze/trunk/orient.inc create mode 100644 programs/games/megamaze/trunk/orientg2.gif create mode 100644 programs/games/megamaze/trunk/smz.bin create mode 100644 programs/games/megamaze/trunk/smz.inc create mode 100644 programs/games/megamaze/trunk/tam.INC create mode 100644 programs/games/megamaze/trunk/tam.bin create mode 100644 programs/games/megamaze/trunk/tilt.bin create mode 100644 programs/games/megamaze/trunk/tilt.inc create mode 100644 programs/games/megamaze/trunk/tilt2.bin create mode 100644 programs/games/megamaze/trunk/tilt2.inc create mode 100644 programs/games/megamaze/trunk/wriggle.bin create mode 100644 programs/games/megamaze/trunk/wriggle.inc create mode 100644 programs/games/pig/trunk/AUTHORS create mode 100644 programs/games/pig/trunk/COPYING create mode 100644 programs/games/pig/trunk/ChangeLog create mode 100644 programs/games/pig/trunk/INSTALL create mode 100644 programs/games/pig/trunk/INSTRUCTIONS create mode 100644 programs/games/pig/trunk/Makefile.am create mode 100644 programs/games/pig/trunk/Makefile.in create mode 100644 programs/games/pig/trunk/NEWS create mode 100644 programs/games/pig/trunk/README create mode 100644 programs/games/pig/trunk/aclocal.m4 create mode 100644 programs/games/pig/trunk/config.guess create mode 100644 programs/games/pig/trunk/config.sub create mode 100644 programs/games/pig/trunk/configure create mode 100644 programs/games/pig/trunk/configure.in create mode 100644 programs/games/pig/trunk/depcomp create mode 100644 programs/games/pig/trunk/dirty.c create mode 100644 programs/games/pig/trunk/dirty.h create mode 100644 programs/games/pig/trunk/dirtyrects.txt create mode 100644 programs/games/pig/trunk/engine.c create mode 100644 programs/games/pig/trunk/engine.h create mode 100644 programs/games/pig/trunk/evil.png create mode 100644 programs/games/pig/trunk/font.png create mode 100644 programs/games/pig/trunk/glassfont.png create mode 100644 programs/games/pig/trunk/icons.png create mode 100644 programs/games/pig/trunk/install-sh create mode 100644 programs/games/pig/trunk/lifepig.png create mode 100644 programs/games/pig/trunk/missing create mode 100644 programs/games/pig/trunk/mkinstalldirs create mode 100644 programs/games/pig/trunk/pig-linux-x86 create mode 100644 programs/games/pig/trunk/pig.c create mode 100644 programs/games/pig/trunk/pigframes.png create mode 100644 programs/games/pig/trunk/slime.png create mode 100644 programs/games/pig/trunk/stars.png create mode 100644 programs/games/pig/trunk/tiles.png create mode 100644 programs/games/soko/trunk/100BOXES.LEV create mode 100644 programs/games/soko/trunk/990602.LEV create mode 100644 programs/games/soko/trunk/AENIGMA.LEV create mode 100644 programs/games/soko/trunk/ALBG-BST.LEV create mode 100644 programs/games/soko/trunk/ALBG1-1.LEV create mode 100644 programs/games/soko/trunk/ALBG1-2.LEV create mode 100644 programs/games/soko/trunk/ALBG1-3.LEV create mode 100644 programs/games/soko/trunk/AUTOGEN.LEV create mode 100644 programs/games/soko/trunk/BAGLE.LEV create mode 100644 programs/games/soko/trunk/BAGLE2.LEV create mode 100644 programs/games/soko/trunk/BOXXLE1.LEV create mode 100644 programs/games/soko/trunk/BOXXLE2.LEV create mode 100644 programs/games/soko/trunk/CANTRIP.LEV create mode 100644 programs/games/soko/trunk/CANTRIP2.LEV create mode 100644 programs/games/soko/trunk/CELLTYPE.INC create mode 100644 programs/games/soko/trunk/CNF create mode 100644 programs/games/soko/trunk/CNF.ASM create mode 100644 programs/games/soko/trunk/DH1.LEV create mode 100644 programs/games/soko/trunk/DH2.LEV create mode 100644 programs/games/soko/trunk/DIM-YORK.LEV create mode 100644 programs/games/soko/trunk/ERIM.LEV create mode 100644 programs/games/soko/trunk/FPOK.LEV create mode 100644 programs/games/soko/trunk/GRIG2001.LEV create mode 100644 programs/games/soko/trunk/GRIG2002.LEV create mode 100644 programs/games/soko/trunk/HANDMADE.LEV create mode 100644 programs/games/soko/trunk/HEYTAK.LEV create mode 100644 programs/games/soko/trunk/HOWARD1.LEV create mode 100644 programs/games/soko/trunk/HOWARD2.LEV create mode 100644 programs/games/soko/trunk/HOWARD3.LEV create mode 100644 programs/games/soko/trunk/HOWARD4.LEV create mode 100644 programs/games/soko/trunk/JCD.LEV create mode 100644 programs/games/soko/trunk/JCT.LEV create mode 100644 programs/games/soko/trunk/KOKOBAN.LEV create mode 100644 programs/games/soko/trunk/KOMPACT.LEV create mode 100644 programs/games/soko/trunk/LOMA.LEV create mode 100644 programs/games/soko/trunk/MACROS.INC create mode 100644 programs/games/soko/trunk/MAELSTRM.LEV create mode 100644 programs/games/soko/trunk/MARIOB.LEV create mode 100644 programs/games/soko/trunk/MASMICRO.LEV create mode 100644 programs/games/soko/trunk/MASSASQ.LEV create mode 100644 programs/games/soko/trunk/MICRCOSM.LEV create mode 100644 programs/games/soko/trunk/MICROBAN.LEV create mode 100644 programs/games/soko/trunk/MINICOSM.LEV create mode 100644 programs/games/soko/trunk/NABOCOSM.LEV create mode 100644 programs/games/soko/trunk/NOVOBAN.LEV create mode 100644 programs/games/soko/trunk/NUMBERS.LEV create mode 100644 programs/games/soko/trunk/ONLINE.LEV create mode 100644 programs/games/soko/trunk/ORIGINAL.LEV create mode 100644 programs/games/soko/trunk/PICOCOSM.LEV create mode 100644 programs/games/soko/trunk/RULES.TXT create mode 100644 programs/games/soko/trunk/SASQ_.LEV create mode 100644 programs/games/soko/trunk/SASQ_III.LEV create mode 100644 programs/games/soko/trunk/SASQ_IV.LEV create mode 100644 programs/games/soko/trunk/SASQ_V.LEV create mode 100644 programs/games/soko/trunk/SASQ_VI.LEV create mode 100644 programs/games/soko/trunk/SIMPLE.LEV create mode 100644 programs/games/soko/trunk/SKIN.RAW create mode 100644 programs/games/soko/trunk/SOKEVO.LEV create mode 100644 programs/games/soko/trunk/SOKHARD.LEV create mode 100644 programs/games/soko/trunk/SOKO create mode 100644 programs/games/soko/trunk/SOKO-4.LEV create mode 100644 programs/games/soko/trunk/SOKO-5.LEV create mode 100644 programs/games/soko/trunk/SOKO-6.LEV create mode 100644 programs/games/soko/trunk/SOKO-7.LEV create mode 100644 programs/games/soko/trunk/SOKO-8.LEV create mode 100644 programs/games/soko/trunk/SOKO-9.LEV create mode 100644 programs/games/soko/trunk/SOKO.ASM create mode 100644 programs/games/soko/trunk/SOKOLATE.LEV create mode 100644 programs/games/soko/trunk/SOLOBAN.LEV create mode 100644 programs/games/soko/trunk/STILMORE.LEV create mode 100644 programs/games/soko/trunk/SVEN.LEV create mode 100644 programs/games/soko/trunk/TAKAKEN.LEV create mode 100644 programs/games/soko/trunk/TITLSCRN.LEV create mode 100644 programs/games/soko/trunk/TWISTY.LEV diff --git a/programs/games/MSquare/trunk/MSquare.asm b/programs/games/MSquare/trunk/MSquare.asm new file mode 100644 index 0000000000..8b3587a3c2 --- /dev/null +++ b/programs/games/MSquare/trunk/MSquare.asm @@ -0,0 +1,725 @@ +; 10.06.2010 staper@inbox.ru + +;Магический квадрат - это набор таких целых чисел, что их суммы +;в строках, столбцах (реже в диагоналях) равны. + +;Пример: + +; 16 3 2 13 +; 5 10 11 8 +; 9 6 7 12 +; 4 15 14 1 + +use32 +org 0x0 + db 'MENUET01' + dd 0x1, START, I_END, (D_END+100) and not 3, (D_END+100) and not 3, 0, 0 + +;Цвета: +Bckgrd_clr equ 0xffffff ;фон +Brdr_line_clr equ 0xb0b0b0 ;линии по границам +Inter_line_clr equ 0xb0b0b0 ;внутренние линии +Square_clr equ 0xdddddd ;цвет курсора +Fix_nmb_clr equ 0x83459 ;статичное значение +Chg_nmb_clr equ 0;x008d8d ;переменное значение +Text_clr equ 0x000000 ;текст +Message_clr equ 0x0000ff ;сообщения + +max_dif equ 10 +min_dif equ 2 +len_kub equ 30 ;длина стороны квадратика +beg_x equ 40 ;координата Х левого верхнего угла +beg_y equ 50 ;координата Y левого верхнего угла +sym_x equ 20 +sym_y equ 20 +win_x equ 400 ;ширина окна +win_y equ 400 ;высота окна + + +DEBUG equ 0 + +macro dbg_dec num +{pushad +newline +debug_print_dec num +popad +} + +include 'macros.inc' +;include 'debug.inc' +include 'editbox_ex.mac' +include 'lang.inc' + + +START: + ;mcall 40,7 + +redraw_all: + mcall 12,1 + mcall 48,4 + add eax,100*65536+win_x + mov ecx,eax + mcall 0,100*65536+win_y,,(0x34000000+Bckgrd_clr),,title + movzx eax,[Difficult] + mov ebx,len_kub + xor edx,edx + mul ebx + add eax,beg_x*65536+beg_x + xchg eax,ebx + mcall 38,,beg_y*65536+beg_y,Brdr_line_clr + mov edx,Inter_line_clr + movzx esi,[Difficult] + dec esi + @@: add ecx,len_kub*65536+len_kub + mcall + dec esi + jnz @b + add ecx,len_kub*65536+len_kub + mcall ,,,Brdr_line_clr + + movzx eax,[Difficult] + mov ecx,len_kub + xor edx,edx + mul ecx + add eax,(beg_y+1)*65536+beg_y-1 + xchg eax,ecx + mov ebx,beg_x*65536+beg_x + mcall 38,,,Brdr_line_clr + mov edx,Inter_line_clr + movzx esi,[Difficult] + dec esi + + @@: add ebx,len_kub*65536+len_kub + mcall + dec esi + jnz @b + add ebx,len_kub*65536+len_kub + mcall ,,,Brdr_line_clr + + mcall 8,<3,78>,<3,13>,2,0xbbbbbb + mcall 4,<7,5>,(0x80000000+Text_clr),txt.clear + mcall ,<105,5>,,txt.dif + + + call show_level + + push dword Map;esi; mov esi,Map + mcall 12,2 +draw_pole: + if DEBUG + call SysMsgBoardNum ;show esp + endf + + movzx eax,[Y] + dec al + movzx ebx,[Difficult] + mul bl + mov bl,[X] + add al,bl + pop esi ; mov esi,Map + push eax ;курсорчик + movzx eax,[Difficult] + mov ebx,eax + mul eax + sub eax,ebx + mov edi,eax + pop eax + push eax +; mov edi,81-9 + movzx ebp,[Difficult] + mov ebx,beg_x*65536+beg_x+sym_x + mov ecx,beg_y*65536+beg_y+sym_y + call out_numbers + pop eax + call out_sum + +still: + mcall 10 + + dec al + jz redraw_all + dec al + jz key + dec al + jnz still +;button: + mcall 17 + cmp ah,1 + jne @f + mcall -1 +.clear: +@@: mov ecx,max_dif*max_dif + mov esi,Map +@@: mov byte [esi+ecx-1],0 + loop @b + jmp redraw_all + +key: + mcall 2 + +.43: cmp ah,43 ;+ + jne .45 + cmp [Difficult],max_dif + je still + inc [Difficult] + jmp redraw_all + jmp still +.45: ;- + cmp ah,45 + jne .99 + cmp [Difficult],min_dif + je still + dec [Difficult] + jmp redraw_all + jmp still + +.99: cmp ah,0x58 + je @f + cmp ah,0x78 + jne .39 +@@: jmp still.clear + +.39: cmp ah,0x39 + ja .110 + cmp ah,0x30 + jb still + sub ah,0x30 + mov cl,ah + + movzx eax,[Y] + dec al + mov ebx,max_dif;[Difficult] + mul bl + mov bl,[X] + dec bl + add al,bl + + mov esi,Map + bt [flags],9 + jnc @f + mov bl,[esi+eax] + push eax + mov ax,10 + xor dl,dl + mul bl + add cl,al + pop eax + mov [esi+eax],cl + btr [flags],9 + jmp .onedraw + @@: mov [esi+eax],cl + bts [flags],9 + jmp .onedraw + + +.110: cmp ah,110 ;n + jne .176 +.new_game: + jmp redraw_all + +.176: cmp ah,176 ;курсоры + jne .177 + call draw_one_symbol + dec [X] + cmp [X],1 + jge @f + push eax + movzx eax,[Difficult] + mov [X],al + pop eax +@@: btr [flags],9 + jmp .onedraw +.177: cmp ah,177 + jne .178 + call draw_one_symbol + inc [Y] + push eax + movzx eax,[Difficult] + cmp [Y],al + jbe @f + mov [Y],1 +@@: pop eax + btr [flags],9 + jmp .onedraw +.178: cmp ah,178 + jne .179 + call draw_one_symbol + dec [Y] + cmp [Y],1 + jge @f + push eax + movzx eax,[Difficult] + mov [Y],al + pop eax +@@: btr [flags],9 + jmp .onedraw +.179: cmp ah,179 + jne still + call draw_one_symbol + inc [X] + push eax + movzx eax,[Difficult] + cmp [X],al + jbe @f + mov [X],1 +@@: btr [flags],9 + pop eax +.onedraw: + bts [flags],4 + call draw_one_symbol + call out_one_sum + jmp still ;.todraw + +show_level: + movzx ecx,[Difficult] + mcall 47,0x10000,,<205,5>,(0x50000000+Text_clr),Bckgrd_clr +ret + + +draw_one_symbol: + movzx eax,[X] + mov ebx,len_kub*65536+len_kub + mul ebx + xchg eax,ebx + add ebx,(beg_x*65536+beg_y-len_kub*65536+len_kub) + movzx eax,[Y] + mov ecx,len_kub*65536+len_kub + mul ecx + xchg eax,ecx + add ecx,(beg_y*65536+beg_y+sym_y-len_kub*65536+len_kub) + movzx eax,[Y] + dec al + push ebx + movzx ebx,[Difficult] + mul bl + mov bl,[X] + add al,bl + dec al + pop ebx + mov esi,Map + add esi,eax + push dword 0 ;не курсор + bt [flags],4 + jnc @f + mov dword [esp],1 ;курсор + btr [flags],4 +@@: mov edi,0 + mov ebp,1 + call out_numbers + pop eax +ret + + +out_numbers: + push ebx ecx esi + shr ebx,16 + inc bx + shl ebx,16 + add ebx,len_kub-1 + shr ecx,16 + inc cx + shl ecx,16 + add ecx,len_kub-1 + mov edx,Bckgrd_clr + push ebp + dec dword [esp+4*5] + jnz @f + mov edx,Square_clr +@@: mcall 13 + pop ebp + pop esi + + push ebx edx + mov eax,esi + sub eax,Map-1 + xor edx,edx + movzx ebx,[Difficult] + div ebx + push edx + xor edx,edx + mov ebx,max_dif + mul ebx + pop edx + test edx,edx + jnz @f + movzx edx,[Difficult] + sub eax,max_dif +@@: add eax,edx + mov al,[eax+Map-1] + pop edx ebx + test al,al + +; cmp byte [esi],0 + jnz .changeable_number + jmp .null +.end: + inc esi + dec ebp + jnz out_numbers + test edi,edi + jz @f + push ebx edx + movzx eax,[Difficult] + sub edi,eax + mov ebp,eax + mov ebx,len_kub*65536 + xor edx,edx + mul ebx + push eax + movzx eax,[Difficult] + mov ebx,len_kub + mul ebx + pop ebx + add eax,ebx + pop edx + pop ebx + sub ebx,eax +; add ebx,-9*24*65536-9*24 + add ecx,len_kub*65536+len_kub + jmp out_numbers + @@: +ret + + +.null: + pop ecx ebx + add ebx,len_kub*65536+len_kub + jmp .end +.changeable_number: + push esi + shr ebx,16 + shr ecx,16 + mov dx,bx + shl edx,16 + mov dx,cx + add edx,8*65536+4 + + push ebx edx + mov eax,esi + sub eax,Map-1 + xor edx,edx + movzx ebx,[Difficult] + div ebx + push edx + xor edx,edx + mov ebx,max_dif + mul ebx + pop edx + test edx,edx + jnz @f + movzx edx,[Difficult] + sub eax,max_dif +@@: add eax,edx + pop edx ebx + + movzx ebx,byte [eax+Map-1];[esi] + + + push esi ebp edi edx + sub edx,2*65536-3 + push edx + xchg eax,ebx + mov ebx,10 + xor edx,edx + div ebx + mov ebx,edx + pop edx + + push ebx + + test eax,eax + jz .only_first_num + +; bt [flags],9 +; jc .only_first_num + + xchg eax,ebx + + shl bx,4 + add ebx,FONT + mov ecx,8*65536+16 + + mov edi,Pltr.ch + cmp dword [esp+4*9],0 + jne @f + mov edi,Pltr.chk +@@: mov esi,1 + mov ebp,0 + mcall 65 + +.only_first_num: + pop ebx + shl bl,4 + + add ebx,FONT + mov ecx,8*65536+16 + add edx,8*65536 + mov edi,Pltr.ch + cmp dword [esp+4*8],0 + jne @f + mov edi,Pltr.chk +@@: mov esi,1 + mov ebp,0 + mcall 65 + pop edx edi ebp esi + pop esi ecx ebx + add ebx,len_kub*65536+len_kub + jmp .end + +out_sum: + movzx eax,[Difficult] + push eax + mov esi,Map + mov edi,out_sum_buf +.1: xor ebx,ebx + xor ecx,ecx + xor edx,edx +.2: mov dl,[ebx+esi] + add ecx,edx + inc ebx + cmp ebx,[esp] + jne .2 + mov word [edi],cx + add edi,2 + add esi,max_dif + dec eax + jnz .1 + + push out_sum_buf + movzx eax,[Difficult] + mov ebx,len_kub*65536 + xor edx,edx + mul ebx + add eax,40*65536 + push eax + mov edx,(beg_x-30)*65536+beg_y+10 + mov ebx,0x30000 + mov esi,0x50000000+Fix_nmb_clr + mov edi,Bckgrd_clr + +.3: mov ecx,[esp+4] + mov cx,[ecx] + shl ecx,16 + shr ecx,16 + mcall 47 + push edx + add edx,[esp+4] + mcall + pop edx + add edx,len_kub + add dword [esp+4],2 + dec dword [esp+8] + jnz .3 + pop eax + pop eax + pop eax + + + movzx eax,[Difficult] + push eax + mov esi,Map + mov edi,out_sum_buf + xor ebx,ebx +.4: xor ecx,ecx + xor edx,edx + mov ebx,[esp] +.5: mov dl,[esi] + add ecx,edx + add esi,max_dif + dec ebx + jnz .5 + mov word [edi],cx + add edi,2 + push eax + mov eax,max_dif + xor edx,edx + mul dword [esp+4] + dec eax + sub esi,eax + pop eax + dec eax + jnz .4 + + push out_sum_buf + movzx eax,[Difficult] + mov ebx,len_kub + xor edx,edx + mul ebx + add eax,35 + push eax + mov edx,(beg_x+5)*65536+beg_y-20 + mov ebx,0x30000 + mov esi,0x50000000+Fix_nmb_clr + mov edi,Bckgrd_clr + +.6: mov ecx,[esp+4] + mov ecx,[ecx] + shl ecx,16 + shr ecx,16 + mcall 47 + push edx + add edx,[esp+4] + mcall + pop edx + add edx,len_kub*65536;[esp] + add dword [esp+4],2 + dec dword [esp+8] + jnz .6 + pop eax + pop eax + pop eax +ret + + + +out_one_sum: + movzx ecx,[Difficult] + mov esi,Map + xor edx,edx + + movzx eax,[Y] + dec al + mov ebx,max_dif + mul bl + add esi,eax +@@: mov al,[esi] + inc esi + add edx,eax + loop @b + + mov ecx,edx + movzx eax,[Difficult] + mov ebx,len_kub*65536 + xor edx,edx + mul ebx + add eax,40*65536 + push eax + movzx eax,[Y] + dec eax + mov ebx,len_kub + xor edx,edx + mul ebx + mov edx,(beg_x-30)*65536+beg_y+10 + add edx,eax + mov ebx,0x30000 + mov esi,0x50000000+Fix_nmb_clr + mov edi,Bckgrd_clr + + mcall 47 + add edx,[esp] + mcall + pop eax + + + + + movzx ecx,[Difficult] + mov esi,Map + xor edx,edx + + movzx eax,[X] + dec al + add esi,eax +@@: mov al,[esi] + add esi,max_dif + add edx,eax + loop @b + + mov ecx,edx + movzx eax,[Difficult] + mov ebx,len_kub + xor edx,edx + mul ebx + add eax,35 + push eax + movzx eax,[X] + dec eax + mov ebx,len_kub*65536 + xor edx,edx + mul ebx + mov edx,eax + add edx,(beg_x+5)*65536+beg_y-20 + mov ebx,0x30000 + mov esi,0x50000000+Fix_nmb_clr + mov edi,Bckgrd_clr + + mcall 47 + add edx,[esp] + mcall + + pop edx + +ret + + + + +if DEBUG +SysMsgBoardNum: ;warning: destroys eax,ebx,ecx,esi + mov ebx,esp + mov ecx,8 + mov esi,(number_to_out+1) +.1: + mov eax,ebx + and eax,0xF + add al,'0' + cmp al,(10+'0') + jb @f + add al,('A'-'0'-10) +@@: + mov [esi+ecx],al + shr ebx,4 + loop .1 + dec esi + mcall 71,1,number_to_out +ret + +number_to_out db '0x00000000',13,10,0 +endf + + + + + +if lang eq ru +title db 'Магический квадрат',0 +txt: +.dif db "Сложность (+/-):",0 +.clear db 'Очистить (x)',0 +else +title db 'Magical square',0 +txt: +.dif db "Difficult (+/-)",0 +.clear db 'Clear (x)',0 +endf + + + + +align 4 +;Палитры: +Pltr: +.ch dd Bckgrd_clr,Chg_nmb_clr +.chk dd Square_clr,Chg_nmb_clr +.fx dd Bckgrd_clr,Fix_nmb_clr +.fxk dd Square_clr,Fix_nmb_clr + +FONT file "MSquare.fnt" + +X db 1 +Y db 1 + +Difficult db 3 + +I_END: +align 16 +Map rb max_dif*max_dif +out_sum_buf rw max_dif + +flags rw 1 + +D_END: +;бит 0: см. перед draw_pole +;2: в draw_pole и key +;4: in draw_one_symbol +;9: введёна первая цифра числа diff --git a/programs/games/MSquare/trunk/MSquare.fnt b/programs/games/MSquare/trunk/MSquare.fnt new file mode 100644 index 0000000000000000000000000000000000000000..efa18a4aea3a6dbfd5f264ca3629787d2ba6ae92 GIT binary patch literal 160 zcmZQzu*f-f?%K6y$ByM#Fo1xBMMZ=J7}SCJHOJc6cq9xG4jlUj=KlloEO^-1+K$zL z`7As#HaTbh@$m4-LF5k{IPixJA#alg down ? + jge nojumpdown + mov eax,[marioy] + cmp eax,[mario_below] + jb yesgd + mov [velocity],dword 0xff + mov eax,[marioxy] + mov eax,[mario_below] + sub eax,1 + mov ebx,40 + mul ebx + sub eax,10 + mov word [marioxy],ax + jmp nojumpdown + yesgd: + mov ebx,[velocity] + sub ebx,1 + mov [velocity],ebx + mov eax,[marioxy] + add ax,0xff + sub ax,bx + mov [marioxy],eax + nojumpdown: + + + popa + + ret + + +marioy dd 0x0 + +mariox dd 0x0 + +mario_below dd 5 + + +mario_environment: + + pusha + + mov eax,[marioy] + mov ebx,12 + mul ebx + add eax,[mariox] + add eax,field + + cmp [eax],byte ' ' + jz me_ok + + mov eax,[marioy] + mov [mario_below],eax + + popa + ret + + me_ok: + + mov [mario_below],dword 100 + + popa + ret + + +mario_delay: + + pusha + + mov eax,5 + mov ebx,2 + int 0x40 + + popa + ret + + + +draw_mario: + + pusha + + mov eax,[mariomem] + cmp eax,[marioxy] + jnz dm1 + + call mario_delay + + popa + + ret + + dm1: + + mov eax,[marioxy] + mov [mariomem],eax + + + cmp byte [leftright],byte 1 ; go left + jnz no_m_left + jmp m_left + no_m_left: + + cmp byte [leftright],byte 4 ; go right + jnz no_m_right + jmp m_right + no_m_right: + + cmp byte [leftright],byte 2 ; stand left + jnz no_r_still + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_1 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + popa + ret + no_r_still: + + cmp byte [leftright],byte 3 ; stand right + jnz no_l_still + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_4 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + popa + ret + no_l_still: + + popa + ret + + + + + m_left: + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_1 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_2 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_3 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_2 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + popa + + ret + + m_right: + + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_4 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_5 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_6 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + mov eax,7 + mov ebx,mario_green + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call advance_mario + mov eax,7 + mov ebx,mario_5 + mov ecx,50*65536+70 + mov edx,[marioxy] + int 0x40 + call mario_delay + + popa + + ret + + + + + +draw_window: + + pusha + + mov eax,12 ; tell os about redraw + mov ebx,1 + int 0x40 + + mov eax,0 ; define and draw window + mov ebx,80*65536+480+1 + mov ecx,20*65536+382 + mov edx,0x0000500f + mov esi,0x8066AA88 + mov edi,0x00559977 + int 0x40 + + mov eax,dword 0x00000004 + mov ebx,8*65536+8 + mov ecx,dword 0x00cccccc + mov edx,text + mov esi,textlen-text + int 0x40 + + mov eax,8 + mov ebx,(481-19)*65536+12 ; button start x & size + mov ecx,5*65536+12 ; button start y & size + mov edx,1 ; button number + mov esi,0x00229911 ; button color + int 0x40 + + mov eax,12 ; tell os about redraw end + mov ebx,2 + int 0x40 + + popa + + ret + + +; DATA SECTION + + +filename: + db 'MARIOALLBMP' + +text: + db 'SUPER MARIO - USE ARROW KEYS' +textlen: + +xx db 'x' + +field: + + db '1 1' + db '1 1' + db '111 111' + db '1 1' + db '1 1' + db '1 111111 1' + db '1 1' + db '1 1' + db '222222222222' + +xxyy dd 0x0 + +marioxy dd 0x0 + +mariomem dd 0x0 + +leftright dd 0x0 + +velocity dd 0x0 + + +I_END: + + + + diff --git a/programs/games/mario2/trunk/MARIOALL.BMP b/programs/games/mario2/trunk/MARIOALL.BMP new file mode 100644 index 0000000000000000000000000000000000000000..54b6cbc5b90c36406f33700138d3d68d543138b7 GIT binary patch literal 15874 zcmeI2y^`ES6oq9Q)?@rL4qYUsiU5a@P$c{mIc2>84xQN{8GZyJ2zdk^!TSJILAD{h z0h5t(M&Ib{RkzgAjAqU5%(!~xt5)ALJ?HD&n!j(qyZu$w{QF$TXZrhDe;@1bR`o>3 zs`~xQ=D*HiSyyRWESHPrtBaM61dr=CvC*GqB|1&+W+br(G~%hCuMPxv>JO@V*=>)i zS}p0!PCHNcAWwQwwCJuC!$p185_@#3e(-*MPd)eRJ5~K4!wB2l-gFi)Z% zN&M#7(?UxIcTTT@A(|Oj9#^xz=VP@9*+r=79l^gG!s_3ZTC}99p3}bn=r=WD z5asFaNf_Gos0`ThTJX-SL^LhsK$n=dC+}&T7&hF?7;#u#Sw*6w5U`*0| z%0fVmTOvIXpk=*3J3S9h42L(A#H~Ftbg59lCx*iiW?tEWp{r5bV3HnBfu^JC5R6Jp zNa_@|@{UTDc23`!*+qSt%X)4z{kaM0(RJd)50w)=?08tNqfN>ck{*rJPN;MmY8(wP zN%3i%jACBLqC?CAQBRcBsUB1xrQWUY-UJ9U=V-T*AX*|nXqZQwj4z*BE$ZO3dJ4HD z`p!w96#;w&G_NcIl;hV`d{8j`$af+2FXzwS{-vfMZ$teaxpVH8OmqLR?ZwO0P-8%R zADxTD9*r+Zm37Qefp-KtSq?g~vXbNaYW>h(OHHT8$h|Nuz%27WEQYKFp!wLlB6M|Q zf3s^SvHiYr{jKn)zy7&ZGsB%ZI8i}fkXOpE{e~c4xNrYhsoB5HfcVLD5)Vjit%Gcz z8d9Fs<(!)oeN`+JbZ!MugUOo1VNULxI_&f5(wOF|87kOZO3)2k9;JG8q~9y0&asL0 zsMXbb^}U4Q(~H$;gEo&?<`A!zbi$E zdGqwFJS7F1)mgnT!%=h|FvPIz`hKs@X6Oxyz{c1rSA{N_c}^1YPA9;4KZK;>fLz2q zN_3V2vfSe-A;_%s<^FLq)QdojkxvBb!8{wLQ{0lHHrs(NMdQs1<1L~J1ECHZ7wz73f%b}HWR&U_9`5mby zcV~vYr0li4w=<&KIrr)rVwFDC>R6SO&@|VD;`%du{Ni=qA}hslfG-sodW-^w#hznj zsI|a{rRmC=QHPOCto+zN6dTUOa@`lhv3Jw1z>y*x)3F~IpSqru^fa}rW5{g3d0n}A z{s!nC1$0Ix<#@k!IOf(C42x3eOa%zi;mz5z(pu6p&TsR=zrC zFKyhy2^qud5B<)Umugr}1@>5l)7eoYk>V%AlCsWtF?ZFFvKmrW8=O+cFuuOYZEztl;Bcot63c*L+rH8F__|XJ|-#< z=VK=J}{`p%iue!V^)*(Bjx6nNB78)7$<)%-=z?7eivl7V`=wpsef nR1Jn4p;SJS70GNHi&Fk#C8BeDVmP*@t|!Bsn~^HmvJU?PWR`%n literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/GIF_LITE.INC b/programs/games/megamaze/trunk/GIF_LITE.INC new file mode 100644 index 0000000000..579ce2ad9f --- /dev/null +++ b/programs/games/megamaze/trunk/GIF_LITE.INC @@ -0,0 +1,318 @@ +; GIF LITE v2.0 by Willow +; Written in pure assembler by Ivushkin Andrey aka Willow +; +; This include file will contain functions to handle GIF image format +; +; Created: August 15, 2004 +; Last changed: September 9, 2004 + +; Change COLOR_ORDER in your program +; if colors are displayed improperly + +if ~ (COLOR_ORDER in ) +; This message may not appear under MenuetOS, so watch... + display 'Please define COLOR_ORDER: MENUETOS or OTHER',13,10 +end if + +struc GIF_info +{ +; .NextImg rd 1 ; used internally + .Left rw 1 + .Top rw 1 + .Width rw 1 + .Height rw 1 +} + +_null fix 0x1000 + +; **************************************** +; FUNCTION GetGIFinfo - retrieve Nth image info +; **************************************** +; in: +; esi - pointer to image list header +; ecx - image_index (0...img_count-1) +; edi - pointer to GIF_info structure to be filled + +; out: +; eax - pointer to RAW data, or 0, if error + +GetGIFinfo: + push esi ecx edi + xor eax,eax + jecxz .eloop + .lp: + mov esi,[esi] + test esi,esi + jz .error + loop .lp + .eloop: + add esi,4 + movsd + movsd + mov eax,esi + .error: + pop edi ecx esi + ret + +; **************************************** +; FUNCTION ReadGIF - unpacks GIF image +; **************************************** +; in: +; esi - pointer to GIF file in memory +; edi - pointer to output image list +; eax - pointer to work area (MIN 16 KB!) + +; out: +; eax - 0, all OK; +; eax - 1, invalid signature; +; eax >=8, unsupported image attributes +; +; ecx - number of images + +ReadGIF: + push esi edi + mov [.table_ptr],eax + mov [.cur_info],edi + xor eax,eax + mov [.globalColor],eax + mov [.img_count],eax + inc eax + cmp dword[esi],'GIF8' + jne .er ; signature + mov ecx,[esi+0xa] + inc eax + add esi,0xd + mov edi,esi + bt ecx,7 + jnc .nextblock + mov [.globalColor],esi + call .Gif_skipmap + .nextblock: + cmp byte[edi],0x21 + jne .noextblock + inc edi + cmp byte[edi],0xf9 ; Graphic Control Ext + jne .no_gc + add edi,7 + jmp .nextblock + .no_gc: + cmp byte[edi],0xfe ; Comment Ext + jne .no_comm + inc edi + .block_skip: + movzx eax,byte[edi] + lea edi,[edi+eax+1] + cmp byte[edi],0 + jnz .block_skip + inc edi + jmp .nextblock + .no_comm: + cmp byte[edi],0xff ; Application Ext + jne .nextblock + add edi,13 + jmp .block_skip + .noextblock: + cmp byte[edi],0x2c ; image beginning + jne .er + inc [.img_count] + inc edi + mov esi,[.cur_info] + add esi,4 + xchg esi,edi + movsd + movsd + push edi + movzx ecx,word[esi] + inc esi + bt ecx,7 + jc .uselocal + push [.globalColor] + mov edi,esi + jmp .setPal + .uselocal: + call .Gif_skipmap + push esi + .setPal: + movzx ecx,byte[edi] + inc ecx + mov [.codesize],ecx + dec ecx + pop [.Palette] + lea esi,[edi+1] + mov edi,[.table_ptr] + xor eax,eax + cld + lodsb ; eax - block_count + add eax,esi + mov [.block_ofs],eax + mov [.bit_count],8 + mov eax,1 + shl eax,cl + mov [.CC],eax + inc eax + mov [.EOI],eax + lea ecx,[eax-1] + mov eax, _null shl 16 + .filltable: + stosd + inc eax + loop .filltable + pop edi + mov [.img_start],edi + .reinit: + mov edx,[.EOI] + inc edx + push [.codesize] + pop [.compsize] + call .Gif_get_sym + cmp eax,[.CC] + je .reinit + call .Gif_output + .cycle: + movzx ebx,ax + call .Gif_get_sym + cmp eax,edx + jae .notintable + cmp eax,[.CC] + je .reinit + cmp eax,[.EOI] + je .end + call .Gif_output + .add: + push eax + mov eax,[.table_ptr] + mov [eax+edx*4],ebx + pop eax + cmp edx,0xFFF + jae .cycle + inc edx + bsr ebx,edx + cmp ebx,[.compsize] + jne .noinc + inc [.compsize] + .noinc: + jmp .cycle + .notintable: + push eax + mov eax,ebx + call .Gif_output + push ebx + movzx eax,bx + call .Gif_output + pop ebx eax + jmp .add + .er: + pop edi + jmp .ex + .end: + mov eax,[.cur_info] + mov [eax],edi + mov [.cur_info],edi + add esi,2 + xchg esi,edi + .nxt: + cmp byte[edi],0 + jnz .continue + inc edi + jmp .nxt + .continue: + cmp byte[edi],0x3b + jne .nextblock + xor eax,eax + stosd + mov ecx,[.img_count] + .ex: + pop edi esi + ret + +.Gif_skipmap: +; in: ecx - image descriptor, esi - pointer to colormap +; out: edi - pointer to area after colormap + + and ecx,111b + inc ecx ; color map size + mov ebx,1 + shl ebx,cl + lea ebx,[ebx*2+ebx] + lea edi,[esi+ebx] + ret + +.Gif_get_sym: + mov ecx,[.compsize] + push ecx + xor eax,eax + .shift: + ror byte[esi],1 + rcr eax,1 + dec [.bit_count] + jnz .loop1 + inc esi + cmp esi,[.block_ofs] + jb .noblock + push eax + xor eax,eax + lodsb + test eax,eax + jnz .nextbl + mov eax,[.EOI] + sub esi,2 + add esp,8 + jmp .exx + .nextbl: + add eax,esi + mov [.block_ofs],eax + pop eax + .noblock: + mov [.bit_count],8 + .loop1: + loop .shift + pop ecx + rol eax,cl + .exx: + xor ecx,ecx + ret + +.Gif_output: + push esi eax edx + mov edx,[.table_ptr] + .next: + push word[edx+eax*4] + mov ax,word[edx+eax*4+2] + inc ecx + cmp ax,_null + jnz .next + shl ebx,16 + mov bx,[esp] + .loop2: + pop ax + + lea esi,[eax+eax*2] + add esi,[.Palette] + + if COLOR_ORDER eq MENUETOS + mov esi,[esi] + bswap esi + shr esi,8 + mov [edi],esi + add edi,3 + else + movsw + movsb + end if + + loop .loop2 + pop edx eax esi + ret + + .globalColor rd 1 + .img_count rd 1 + .cur_info rd 1 ; image table pointer + .img_start rd 1 + .codesize rd 1 + .compsize rd 1 + .bit_count rd 1 + .CC rd 1 + .EOI rd 1 + .Palette rd 1 + .block_ofs rd 1 + .table_ptr rd 1 diff --git a/programs/games/megamaze/trunk/MACROS.INC b/programs/games/megamaze/trunk/MACROS.INC new file mode 100644 index 0000000000..7de7b6f831 --- /dev/null +++ b/programs/games/megamaze/trunk/MACROS.INC @@ -0,0 +1,264 @@ +; new application structure +macro meos_app_start + { + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd __start + dd __end + dd __memory + dd __stack + + if used __params & ~defined __params + dd __params + else + dd 0x0 + end if + + dd 0x0 + } +MEOS_APP_START fix meos_app_start + +macro code + { + __start: + } +CODE fix code + +macro data + { + __data: + } +DATA fix data + +macro udata + { + if used __params & ~defined __params + __params: + db 0 + __end: + rb 255 + else + __end: + end if + __udata: + } +UDATA fix udata + +macro meos_app_end + { + align 32 + rb 2048 + __stack: + __memory: + } +MEOS_APP_END fix meos_app_end + + +; macro for defining multiline text data +struc mstr [sstring] + { + forward + local ssize + virtual at 0 + db sstring + ssize = $ + end virtual + dd ssize + db sstring + common + dd -1 + } + + +; strings +macro sz name,[data] { ; from MFAR [mike.dld] + common + if used name + label name + end if + forward + if used name + db data + end if + common + if used name + .size = $-name + end if +} + +macro lsz name,[lng,data] { ; from MFAR [mike.dld] + common + label name + forward + if lang eq lng + db data + end if + common + .size = $-name +} + + + +; easy system call macro +macro mpack dest, hsrc, lsrc +{ + if (hsrc eqtype 0) & (lsrc eqtype 0) + mov dest, (hsrc) shl 16 + lsrc + else + if (hsrc eqtype 0) & (~lsrc eqtype 0) + mov dest, (hsrc) shl 16 + add dest, lsrc + else + mov dest, hsrc + shl dest, 16 + add dest, lsrc + end if + end if +} + +macro __mov reg,a,b { ; mike.dld + if (~a eq)&(~b eq) + mpack reg,a,b + else if (~a eq)&(b eq) + mov reg,a + end if +} + +macro mcall a,b,c,d,e,f { ; mike.dld + __mov eax,a + __mov ebx,b + __mov ecx,c + __mov edx,d + __mov esi,e + __mov edi,f + int 0x40 +} + + + +; language for programs +;lang fix ru ; ru en fr ge fi + + + +; optimize the code for size +__regs fix + +macro add arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + inc arg1 + else + add arg1,arg2 + end if + else + add arg1,arg2 + end if + } + +macro sub arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + dec arg1 + else + sub arg1,arg2 + end if + else + sub arg1,arg2 + end if + } + +macro mov arg1,arg2 + { + if (arg1 in __regs) & (arg2 eqtype 0) + if (arg2) = 0 + xor arg1,arg1 + else if (arg2) = 1 + xor arg1,arg1 + inc arg1 + else if (arg2) = -1 + or arg1,-1 + else if (arg2) > -128 & (arg2) < 128 + push arg2 + pop arg1 + else + mov arg1,arg2 + end if + else + mov arg1,arg2 + end if + } + + +macro struct name + { + virtual at 0 + name name + sizeof.#name = $ - name + end virtual + } + +; structures used in MeOS +struc process_information + { + .cpu_usage dd ? ; +0 + .window_stack_position dw ? ; +4 + .window_stack_value dw ? ; +6 + .not_used1 dw ? ; +8 + .process_name rb 12 ; +10 + .memory_start dd ? ; +22 + .used_memory dd ? ; +26 + .PID dd ? ; +30 + .x_start dd ? ; +34 + .y_start dd ? ; +38 + .x_size dd ? ; +42 + .y_size dd ? ; +46 + .slot_state dw ? ; +50 + rb (1024-52) + } +struct process_information + +struc system_colors + { + .frame dd ? + .grab dd ? + .grab_button dd ? + .grab_button_text dd ? + .grab_text dd ? + .work dd ? + .work_button dd ? + .work_button_text dd ? + .work_text dd ? + .work_graph dd ? + } +struct system_colors + + +; constants + +; events +EV_IDLE = 0 +EV_TIMER = 0 +EV_REDRAW = 1 +EV_KEY = 2 +EV_BUTTON = 3 +EV_EXIT = 4 +EV_BACKGROUND = 5 +EV_MOUSE = 6 +EV_IPC = 7 +EV_STACK = 8 + +; event mask bits for function 40 +EVM_REDRAW = 1b +EVM_KEY = 10b +EVM_BUTTON = 100b +EVM_EXIT = 1000b +EVM_BACKGROUND = 10000b +EVM_MOUSE = 100000b +EVM_IPC = 1000000b +EVM_STACK = 10000000b diff --git a/programs/games/megamaze/trunk/blackbox.inc b/programs/games/megamaze/trunk/blackbox.inc new file mode 100644 index 0000000000..b98a2d2ed5 --- /dev/null +++ b/programs/games/megamaze/trunk/blackbox.inc @@ -0,0 +1,300 @@ +RAY_NUM equ 100000b +RAY_ABS equ 1000000b +RAY_REF equ 10000000b +BBSIZE equ 10 +ATOM_COUNT equ BBSIZE/2 + +CELL_EMPTY_CENTER equ 10100000b +CELL_ABSORBED equ 10000000b +CELL_REFLECTED equ 01000000b +CELL_EMPTY_EDGE equ 11000000b +CELL_FULL_EDGE equ 00100000b +MASK_ATOM equ 00000001b +MASK_GUESS equ 00000010b +MASK_ALL equ 11100000b +MASK_DIR equ 00000011b + +BB_levelp: + mcall 40,100111b + mov byte[fx],BBSIZE + mov byte[fy],BBSIZE + and [cur_step],0 + and [pause_time],0 + call get_xy_sf.count + call erase_field + mov edi,field+1 + mov ecx,BBSIZE-2 + mov eax,CELL_EMPTY_EDGE+1 + rep stosb + mov eax,CELL_EMPTY_CENTER + mov ecx,BBSIZE-2 + .lp: + push ecx + mov word[edi],(CELL_EMPTY_EDGE+3) shl 8+CELL_EMPTY_EDGE + add edi,2 + mov ecx,BBSIZE-2 + rep stosb + pop ecx + loop .lp + mov word[edi],(CELL_EMPTY_EDGE+3) shl 8+CELL_EMPTY_EDGE + add edi,2 + mov eax,CELL_EMPTY_EDGE+2 + mov ecx,BBSIZE-2 + rep stosb + + mov ecx,BBSIZE/2 + mov ebx,BBSIZE*BBSIZE + .again: + call get_rnd + xor edx,edx + div ebx + cmp byte[field+edx],CELL_EMPTY_CENTER + jne .again + or byte[field+edx],MASK_ATOM + loop .again + mov [win_flag],5 + ret + +BB_key: + cmp eax,-1 + je BB_mouse + cmp eax,9 + jne .ex + xor edx,edx + xor edi,edi + mov esi,field + mov ecx,BBSIZE*BBSIZE + .lp: + lodsb + mov ebx,eax + and eax,MASK_ALL;+MASK_ATOM + cmp eax,CELL_EMPTY_CENTER + jne .nxt + cmp ebx,CELL_EMPTY_CENTER+MASK_ATOM+MASK_GUESS + jne .nomatch + add dx,0x101 + jmp .nxt + .nomatch: + test ebx,MASK_GUESS + jz .nxt + inc dh + .nxt: + loop .lp + cmp dh,ATOM_COUNT + je .chk + mov [win_flag],9 + jmp .ex + .chk: + mov [win_flag],10 + mov ebx,(BBSIZE-2)*4 + mov ecx,ATOM_COUNT + sub cl,dl + imul ecx,ATOM_COUNT + sub ebx,ecx + sub ebx,[pause_time] + mov [score],ebx + .ex: + ret + +BB_drawm: + mov eax,47 + mov esi,0x100000ff + cmp [win_flag],5 + jne .no5 + mcall ,0x10000,ATOM_COUNT, + .no5: + cmp [win_flag],10 + jne .no10 + mcall ,0x20000,[score], + .no10: + cmp [win_flag],9 + jne .no9 + mcall ,0x10000,ATOM_COUNT, + .no9: + mov ecx,[cell_count] + .lp: + push ecx + lea eax,[ecx-1] + movzx ebx,byte[field+eax] + call get_xy + mov eax,ebx + and eax,MASK_ALL + cmp eax,CELL_EMPTY_CENTER + jne .nocenter + test ebx,MASK_ATOM + jz .noatom + cmp [win_flag],10 + jne .noatom + mov edx,0xff0000 + push ebx + mcall 13,[lx],[ly] + pop ebx + .noatom: + test ebx,MASK_GUESS + jz .nxtlp + add [lx],2 shl 16-4 + add [ly],2 shl 16-4 + mov edx,0xffff00 + .bar: + mcall 13,[lx],[ly] + .nxtlp: + pop ecx + loop .lp + .ex2: + ret + .nocenter: + mov edx,0xff + cmp eax,CELL_ABSORBED + je .bar + mov edx,0x8000 + cmp eax,CELL_REFLECTED + je .bar + cmp eax,CELL_FULL_EDGE + jne .nxtlp + and ebx,11111b + mov ecx,ebx + push word[ly+2] + pop word[lx] + mov eax,[Ces] + shr eax,1 + add word[lx],ax + add word[lx+2],ax + sub [lx],8 shl 16+6 + mcall 47,0x20000,,[lx],0x10000000 + jmp .nxtlp + +corners db 0,BBSIZE-1,BBSIZE*BBSIZE-1,BBSIZE*(BBSIZE-1) + +BB_mouse: + cmp [win_flag],1 + je .ex + mov [jump],still + mov edx,eax + call get_last_mclick + mov eax,ebx + mov edi,corners + mov ecx,4 + repne scasb + je .ex + movzx ebx,byte[field+eax] + mov ecx,ebx + and ecx,MASK_ALL + cmp ecx,CELL_EMPTY_CENTER + jne .nocenter + xor byte[field+eax],MASK_GUESS + mov [win_flag],11 + jmp .red + .nocenter: + cmp ecx,CELL_EMPTY_EDGE + jne .ex + + mov [player],eax + and ebx,MASK_DIR + .step: + mov [finish],eax + add eax,[dirs+ebx*4] ; 1 step + mov [stepptr],eax + movzx edx,byte[field+eax] ; cell ahead - edx + and edx,MASK_ALL+MASK_ATOM + cmp edx,CELL_EMPTY_CENTER+MASK_ATOM + jne .noabsorb + mov eax,[player] + mov byte[field+eax],CELL_ABSORBED + inc [pause_time] + mov [win_flag],7 + jmp .red + .noabsorb: + lea ecx,[ebx-2] + and ecx,MASK_DIR + add eax,[dirs+ecx*4] + movzx edx,byte[field+eax] ; cell aside - edx + xor ecx,11b + and edx,MASK_ALL+MASK_ATOM + cmp edx,CELL_EMPTY_CENTER+MASK_ATOM + jne .noreflect1 + .reflect: + mov eax,[finish] + cmp eax,[player] + je .endref + mov ebx,ecx ;new direction + jmp .nextstep + .noreflect1: + mov eax,[stepptr] + add eax,[dirs+ecx*4] + movzx edx,byte[field+eax] ; cell aside - edx + xor ecx,11b + and edx,MASK_ALL+MASK_ATOM + cmp edx,CELL_EMPTY_CENTER+MASK_ATOM + je .reflect + .noreflect2: + mov eax,[stepptr] + movzx edx,byte[field+eax] + and edx,MASK_ALL + cmp edx,CELL_EMPTY_CENTER + je .nextstep + + cmp eax,[player] + je .endref + mov ebx,[cur_step] + add ebx,CELL_FULL_EDGE + mov byte[field+eax],bl + mov eax,[player] + mov byte[field+eax],bl + inc [cur_step] + mov [win_flag],6 + add [pause_time],2 + jmp .red + .endref: + mov eax,[player] + mov byte[field+eax],CELL_REFLECTED + mov [win_flag],8 + inc [pause_time] + jmp .red + .nextstep: + jmp .step + + .red: + mov [jump],drw + .ex: + ret + +BB_level: + db 0 + +if lang eq ru + BB_help mstr \ + 'Ваша цель состоит в том, чтобы обнаружить',\ + 'положение пяти атомов в черном ящике, посылая',\ + 'лучи света в коробку и наблюдая, где лучи',\ + 'появляются. Атом или поглотит луч, если луч',\ + 'упадет на него в упор, или отклонит луч на 90',\ + 'градусов, если он пройдет по смежному ряду или',\ + 'колонке). Могут произойти 2 отклонения, вынуждая',\ + 'луч возвратиться во входной точке,- это считается',\ + 'отражением. Если желаете проверить себя и узнать',\ + 'счет, отметьте 5 клеток желтым цветом и нажмите',\ + 'TAB. Пять скрытых атомов будут показаны красными',\ + 'квадратиками.',\ + ' Луч поглощен - синий квадрат;',\ + ' Луч отражен - зеленый квадрат.',\ + ' Числами отмечены точки входа и выхода лучей.','',\ + 'http://puzzleprograms.narod.ru' +else + BB_help mstr \ + 'Your goal is to discover the whereabouts of five',\ + 'atoms in a black box by sending rays of light',\ + 'into the box and observing if and where the rays',\ + 'emerge. An atom will either absorb a ray if the',\ + 'ray hits it head on, or deflect a ray through 90',\ + 'if it comes close (passes through an adjacent row',\ + 'or column). Two deflections can occur at the same',\ + 'time forcing a ray to return and emerge at its',\ + 'entry point, this is referred to as reflection.','',\ + 'The challenge is to pin point the location of all',\ + 'atoms using the least number of rays. If you wish',\ + 'to commit your solution and to discover your',\ + 'score you must have exactly five guesses marked,',\ + 'then press TAB. The five hidden atoms will appear',\ + 'as red squares.','',\ + 'http://puzzleprograms.narod.ru' +end if diff --git a/programs/games/megamaze/trunk/colzone.bin b/programs/games/megamaze/trunk/colzone.bin new file mode 100644 index 0000000000000000000000000000000000000000..6f81b0c887157233e393f4093c00012fe8e643f5 GIT binary patch literal 124 zcmd-M72{!b4Rm2-bl?UuS4g!nI);LoTpQL%U;FC7o5sM(5F#3Xbx$@|1Bml${iy># z?3Y$e1#*-bSr`Ny7#$fL1j{*iI72jxmY>~Y`uQsV1qQ)#e&GVuKU0fV9#H=<_0v+I V3I+p420=y!2Np*LM+Qa)1^~U;Bzyn> literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/colzone.inc b/programs/games/megamaze/trunk/colzone.inc new file mode 100644 index 0000000000..5aa31e0679 --- /dev/null +++ b/programs/games/megamaze/trunk/colzone.inc @@ -0,0 +1,140 @@ +; level format +; [fx|fy]..[field cells x2]..[worm_count]..[worm_len][start cell #][body dirs x2] + +; internal format +; [stepptr]= worms # +; area: [worm_len][start_cell #][end_cell #]..[dirs].. +; [cur_step]: dragged worm pointer +; [finish]: 0 - if head dragged, 1- if tail +CZ_levelp: + call get_xy_sf + call LP_levelp.bit2 + mov dword[area],5;0 + ret + +CZ_key: + mov [jump],still + cmp eax,176 + jb .ex + cmp eax,179 + ja .ex + mov ecx,dword[area] + lea ebx,[eax-176] + mov eax,[player] + call check_bounds + je .ex + cmp ecx,5 + jne .novert + .vert: + add eax,[dirs+ebx*4] + call check_bounds + je .ex + mov ecx,eax + add ecx,[dirs+ebx*4] + mov cl,[field+ecx] + cmp cl,[field+eax] + jne .ex + mov dword[area],ebx + .ok: + mov [player],eax + cmp eax,[finish] + jne .jm + cmp dword[area],5 + jne .jm + mov [win_flag],1 + .jm: + mov [jump],drw + .ex: + ret + .novert: + mov edx,ebx + cmp edx,ecx ; the same dir + jne .nosame + add eax,[dirs+ebx*4] + call check_bounds + je .ex + .set5: + mov dword[area],5 + add eax,[dirs+ebx*4] + jmp .ok + .nosame: + xor edx,11b + cmp edx,ecx ; the opposite dir + je .set5 + add eax,[dirs+ebx*4] + mov ebx,ecx + xor ecx,11b + add eax,[dirs+ecx*4] + jmp .vert + +CZ_drawm: + mov ecx,[cell_count] + mov esi,field + mov [sq_size],3 + .lp: + push ecx + movzx ebx,byte[field+ecx-1] + shr ebx,6 + lea eax,[ecx-1] + call get_xy + add [lx],5-2 shl 16 + add [ly],5-2 shl 16 + mov edx,[f_colors+ebx*4] + mcall 13,[lx],[ly] + .no: + pop ecx + loop .lp + + inc [sq_size] + mov eax,[player] + call get_xy + xor edx,edx + cmp dword[area],5 + je .vert + push [lx] + push [ly] + mov edx,dword[area] + add eax,[dirs+edx*4] + call get_xy + mcall 13,[lx],[ly] + pop [ly] + pop [lx] + .vert: + mcall 13,[lx],[ly] + add [sq_size],5 + mov eax,[finish] + call get_xy + mcall 13,[lx],[ly],0xffffff + + ret + + +CZ_level: +file 'colzone.bin' + +if lang eq ru + CZ_help mstr \ + 'Черный блок из 2 кубиков стоит на раскрашенной',\ + 'клетчатой доске. Ваша задача - перекатить его на',\ + 'клетку с белым квадратиком. Блок начинает стоя и',\ + 'должен закончить тоже в вертикальном положении.',\ + 'Нельзя выкатывать его за пределы сетки и сверх',\ + 'того - кубики блока должны всегда ложиться на',\ + 'клетки одинакового цвета. Блок не отображен в 3D,',\ + 'поэтому Вы видите лишь его проекцию.','',\ + 'http://www.clickmazes.com' +else + CZ_help mstr \ + 'A black block, made of two black cubes stuck',\ + 'together, sits on a coloured grid. Your challenge',\ + 'is to roll the black block to its target',\ + 'position, which is marked with a small white',\ + 'square. The block starts on one end (vertical)',\ + 'and must also finish in this position. The block',\ + 'is not permitted to roll off the grid and, in',\ + 'addition, the block must always lie entirely',\ + 'within one colour-zone. Note the block is not',\ + 'displayed in 3D, in effect you see only its',\ + 'shadow.','',\ + 'http://www.clickmazes.com' +end if diff --git a/programs/games/megamaze/trunk/cstep.bin b/programs/games/megamaze/trunk/cstep.bin new file mode 100644 index 0000000000000000000000000000000000000000..df0984c5db809c3bce42dcd66d842730a85da782 GIT binary patch literal 166 zcmWN~F%E(-7(ii48janU_%St7sBBIyjd3UjI=Z>ZfXEqKp{aK$#+Vqrg$siRv-8WB zH`}0TMRh}hV~8q6rR^E$Ta%E*HCUFac;sMN40FmyCMa;+rP-FO2mer>lzO7Q9Qzt< z61c!lQNsY-0BZ*E$9aLx5KXv6 NAYB26WiRJaP*gWy@8A}dHL_suVBpd*v}W&MW)TooWS_|@Afs=?F_TwJLSEaBV|6951J literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/fhouse.inc b/programs/games/megamaze/trunk/fhouse.inc new file mode 100644 index 0000000000..4c580e1de7 --- /dev/null +++ b/programs/games/megamaze/trunk/fhouse.inc @@ -0,0 +1,197 @@ +FH_levelp: + mcall 40,100111b + call get_xy_sf + call erase_field + sub esi,2 + mov [levptr],esi + movzx ecx,byte[esi-2] + sub ecx,2 + xor eax,eax + .lp: + lodsb + mov byte[field+eax],-1 + loop .lp + mov dword[player],-1 + mov [win_flag],3 + ret + +FH_key: + cmp eax,-1 + je FH_mouse + cmp eax,8 + jne .nobsp + cmp [stepptr],0 + jne .no1st + mov [jump],run.game + ret + .no1st: + mov [win_flag],0 + sub [cur_step],2 + mov esi,[cur_step] + mov edi,[finish] + mov eax,3 + movzx ebx,byte[esi] + sub eax,ebx + movzx ecx,byte[esi+1] + .lp0: + and byte[field+edi],0 + add edi,[dirs+eax*4] + loop .lp0 + mov [finish],edi + dec [stepptr] + ret + .nobsp: + cmp eax,176 + jb .ex + cmp eax,179 + ja .ex + sub eax,176 + jmp FH_mouse.fromkey + .ex: + ret + +FH_drawm: + mov ecx,[cell_count] + .lp: + push ecx + movzx ebx,byte[field+ecx-1] + test ebx,ebx + jz .no + lea eax,[ecx-1] + call get_xy + mov edx,0 + cmp ebx,0xf + jne .stable + mov edx,0x909090 + .stable: + mcall 13,[lx],[ly] + .no: + pop ecx + loop .lp + + mov eax,[player] + cmp eax,-1 + je .ex + call get_xy + mcall 13,[lx],[ly],0xff00 + mov eax,[finish] + call get_xy + mcall 13,[lx],[ly],0xff0000 + + mov ecx,[stepptr] + jecxz .ex + mov ebx,area + mov edi,[player] + mov edx,0xffffff + .lp3: + push ecx + mov esi,edi + movzx eax,byte[ebx] + movzx ecx,byte[ebx+1] + add ebx,2 + .lp2: + add edi,[dirs+eax*4] + loop .lp2 + call getline + pop ecx + loop .lp3 + .ex: + ret + +FH_mouse: + mov [jump],drw;red + call get_last_mclick + cmp byte[field+ebx],0 + jne .ex + cmp dword[player],-1 + jne .nostart + mov dword[player],ebx + mov byte[field+ebx],0xf + mov [finish],ebx + and [win_flag],0 + mov [cur_step],area + and [stepptr],0 + ret + .nostart: + mov eax,[finish] + call get_offset + cmp eax,-1 + je .ex + .fromkey: + xor ecx,ecx + mov edx,eax + mov esi,[finish] + .lp: + add esi,[dirs+edx*4] + cmp byte[field+esi],0 + jnz .exlp + mov eax,[finish] + mov ebx,esi + call get_offset + cmp eax,edx + jne .exlp + mov byte[field+esi],0xf + inc ecx + mov [finish],esi + jmp .lp + + .exlp: + jecxz .ex + mov eax,edx + mov edi,[cur_step] + stosb + mov [edi],cl + inc edi + mov [cur_step],edi + inc [stepptr] + mov edi,field + mov ecx,[cell_count] + xor eax,eax + repne scasb + je .ch_deadend + mov [win_flag],1 + .ex: + ret + .ch_deadend: + mov ecx,4 + mov edx,dirs + .lpp: + mov eax,[finish] + mov ebx,[edx] + add ebx,eax + push ebx + call get_offset + pop ebx + cmp eax,-1 + je .nxtlp + cmp byte[field+ebx],0 + jz .ex + .nxtlp: + add edx,4 + loop .lpp + mov [win_flag],4 + ret + +FH_level: +file 'fhouse.bin' + +if lang eq ru + FH_help mstr \ + 'В задании найдите начальную клетку и проведите',\ + 'линию, которая проходит через пустые клетки по',\ + 'одному разу.',\ + ' Каждый раз красный квадрат двигается прямо,',\ + 'останавливаясь только у края, перед черными',\ + 'квадратами или уже посещенными клетками.','',\ + 'http://www.clickmazes.com' +else + FH_help mstr \ + 'For each puzzle find the starting square and draw',\ + 'a path moving horizontally and vertically that',\ + 'passes through each open square exactly once.','',\ + 'At each move the red runner will always run',\ + 'straight, as far as possible, stopping only when',\ + "blocked by the grid's edge, a black square, or a",\ + 'square already visited.','',\ + 'http://www.clickmazes.com' +end if diff --git a/programs/games/megamaze/trunk/loops.bin b/programs/games/megamaze/trunk/loops.bin new file mode 100644 index 0000000000000000000000000000000000000000..b851d36c55624f9367f6ca5e10215e45f0f39da7 GIT binary patch literal 2291 zcmW+&!EWQc5grn>{*kcwOQ~|I4HiGfg5t_P_W>wX3A8>bffJ-XIl=DM@iY7fN{|iN zCnrr8**(cZ5;#HMqc742DP3MP^UXIyaAr8vFG3)I_{DsrAlnk6Buo!N56qew0hs0* zK3Enh03U#%k&z1{lcodS+!*RvD2yyQ6RFhdz+sTNkcXiDfEEP+=d1gbi6D$RsD-SO zG(kCNj2a0MfMO661x7`(P$VVELXc4bDwrVMKnn0jL?Jz>&m%wZ&s@laG>}cMSPq~+ zh5D9iQ5cAXS0lN#o1+XfDGrV#s92lh(v8^y4~_$@-6&#;tH7^4%Kzjbkll-hJ}ouB z7tvExYy})(ZPOhm$IINT5PBiD`~cf76OS&?k!IHd>W@<8GXo>oL6Je5xOM74X!|pe zhae2vsjNLO53}0CVGlHXava*`pakPw;T| z!S>+i;~mIU@f4+xveK+VxHF=$fmQoTejdW3nt{#xaD9#}3XA{m*J!rYg5|iM!|{n6 zDB`x_Ar3w`m{1v1lw$3>o@@q~Wr0VPNTSl13?X{=6G&62qSU_(e!Rs${4`1-HDLTb zHUtr9w`!o`UZC=PVw9+tyypvUlcCAt+6QaZ z1qzgt>;R+ySSAGn7M$)1h(nI%BQ)0U22=&An6?=)zZNX_uW!LpVgU2;Ax{ zlmjB4pgOreeyjj}fjQ>4Wdm4V+SQR{gzx?_u z@Co~wWt9j%D?pq}#Xbi5hgUW~Su|Bl3{4XF&ZpEHT&V{Qf0YtFse3^;0~}0dvc!?P z15kSN__@IF?`={!KXP(zh8<%7SL|Ar!nvp=SfBltV@*@fLr#TWk1Ak8l=osTW%I-v zE}lxCm+%#`(SBjLSV^4Z_8@3-PHvIjcqc-tn|@WAq*I6j)^HDN&Ux7lVWW`2 zKZ5`xbNN6>(Kf(C5|BF`NKjBU`>}@298JR{FrG2`-r>8UR&@i}(K{M`#?S#$$-4&N z@2Q!bThgHdk6!mKgkebl3))->W$mGqJx=2tu=zMF&AbqBT6m^$GYxJ}3JGTU^54hD zh&&*K!09HlRz#5L*CSEkV2`2_*RoZMYP+jr4=%=hG9Cyj8FaU=FGENab4L9f;#&%f zmDQm4WK$M9H)D9-Y$H!>k85(`A$8qp^3w_l`go0 zeX2-~8(Gow8xJ9tj`gtK#y}$0MF08piL)GPNsxsi?#UbEvz2*B+IjQph2gW)4u9rx z-BReO&6Xdh7D6&MDNU@$r`(CtSGH~5o5m|>8CE*MPUr`M7^$DOJNxIbHzgd+p8wTO zobpjn47g@Ap^BIJEjo?oE<8uQC4TGnhi%E|cwYf+)48@DcwM98M&Y+ds~zV}{o;-t zfN19^xxzN0+B28agHY@L{`MPVh)gcoa|rtjZb8-0;0&xYJuQU&N|S!35~VqPO+h{M z?#XQmY3APbLj!Cygp)=VR7R3FH+p{6?64R6p0!+6a6P!uVQ3Xc^|i<^;GRCu&rZmO zt=M-b7h(x#1M0i`UfVS6G#^89ao^@~T*#$+dBRU!g?@>SaObdp))1bW;+CQ}$i=c< zbEvLRF`jU5elG52WFN8fEp#y0r?6F z`&P#XmAWC2ZuZh-ur+T@2OC7KKT79Iuwl{H&;s>lXe8c3a%O literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/loops.inc b/programs/games/megamaze/trunk/loops.inc new file mode 100644 index 0000000000..8faa40b2dc --- /dev/null +++ b/programs/games/megamaze/trunk/loops.inc @@ -0,0 +1,245 @@ +LP_levelp: + mcall 40,100111b + inc [drag_flag] + lodsb + lodsw + mov byte[fx],al + mov byte[fy],ah + and dword[player],0 + and dword[finish],0 + call get_xy_sf.count + call erase_field +; mov [levptr],esi + .bit2: + mov edx,8/2 + mov edi,field + lodsb + mov ecx,[cell_count] + .lp: + mov bl,al + rol al,2 + and bl,11000000b + mov [edi],bl + inc edi + dec edx + test edx,edx + jnz .nxt + mov edx,8/2 + lodsb + .nxt: + loop .lp + ret + +LP_key: + cmp eax,0 + jl LP_mouse + cmp eax,8 + jne .nobsp + cmp [stepptr],0 + jne .no1st + mov [jump],run.game + ret + .no1st: + mov [win_flag],0 + sub [cur_step],2 + mov esi,[cur_step] + mov edi,[finish] + mov eax,3 + movzx ebx,byte[esi] + sub eax,ebx + movzx ecx,byte[esi+1] + .lp0: + and byte[field+edi],0 + add edi,[dirs+eax*4] + loop .lp0 + mov [finish],edi + dec [stepptr] + ret + .nobsp: + cmp eax,176 + jb .ex + cmp eax,179 + ja .ex + sub eax,176 + .ex: + ret + +LP_drawm: + and [pause_time],0 + mov ecx,[cell_count] + .lp: + push ecx + mov bl,byte[field+ecx-1] + push ebx + lea eax,[ecx-1] + mov ecx,eax + call get_xy + + mov al,bl + and al,0xf + test bl,11000000b + jnz .noempty + mov esi,LP_aw + mov ecx,11 + call LP_draw_alert + jmp .no + .noempty: + mov edx,0 + test bl,10000000b + je .stable + mov edx,0xffffff + mov esi,LP_aw + mov ecx,7 + jmp .d13 + .stable: + mov esi,LP_em + mov ecx,9 + .d13: + call LP_draw_alert + mcall 13,[lx],[ly] + .no: + mov esi,[esp+4] + dec esi + mov edi,esi + mov edx,0x0000FF + ; ecx - cell # + test byte[esp],10b + je .no_dn + add edi,[dirs+4*1] + call getline + .no_dn: + test byte[esp],1000b + je .no_right + mov edi,esi + add edi,[dirs+4*3] + call getline + .no_right: + pop ebx + pop ecx + .valid: + loop .lp2 + jmp .exlp + .lp2: + jmp .lp + .exlp: + + mov esi,[player] + mov edi,[finish] + cmp esi,edi + je .ex + mov edx,0x7777FF + call getline + .ex: + cmp [pause_time],0 + jne .ex2 + xor ecx,ecx + xor ebx,ebx + mov edx,5 +; eax - cur cell content, ebx - cell #, ecx - cell counter, edx - dir + .chwin: + movzx eax,byte[field+ebx] + and eax,0xf + btr eax,edx + bsf edx,eax + je .ex3 + inc ecx + add ebx,[dirs+edx*4] + jz .ex3 + xor edx,11b + jmp .chwin + .ex3: + cmp ecx,[cell_count] + jne .ex2 + mov [win_flag],1 + .ex2: + ret + +LP_mouse: + cmp [win_flag],1 + je .ex + mov [jump],still + mov edx,eax + call get_last_mclick + cmp edx,-2 + jne .no1st + test eax,eax + jnz .noempty + mov eax,[player] + mov ebx,[finish] + call get_offset + mov ecx,eax + mov edx,0x101 + shl dl,cl + xor ecx,11b + shl dh,cl + mov ecx,ebx + jecxz LP_drawm.ex2 + mov esi,[player] + .lp: + xor [field+esi],dl + add esi,[dirs+eax*4] + xor [field+esi],dh + loop .lp + xor ebx,ebx + .noempty: + mov [player],ebx + jmp .exx + .no1st: + test eax,eax + jz .ex + mov eax,[player] + push ebx + call get_offset + pop ebx + cmp eax,-1 + je .ex + .exx: + mov [finish],ebx + mov [jump],drw +; ud2 + .ex: + ret + + +LP_aw db 1001b,0110b +LP_em db 0000b,0001b,0010b,0100b,1000b +LP_ab db 0011b,0101b,1100b,1010b,1001b,0110b + +LP_draw_alert: +; al-cell, esi - ptr,ecx - len + .lp: + cmp al,[esi] + je .ex + inc esi + loop .lp + pusha + mov ebx,[lx] + mov ecx,[ly] + add ebx,4-2 shl 16 + add ecx,4-2 shl 16 + mcall 13,,,0xFFAAAA + mov [pause_time],eax + popa + .ex: + ret + +LP_level: +file 'loops.bin' + +if lang eq ru + LP_help mstr \ + 'Через все клетки прямоугольника необходимо',\ + 'провести замкнутую ломаную. Проходя через черный',\ + 'кружок, ломаная обязана повернуть, а проходя',\ + 'через белый кружок, ломаная поворачивать не',\ + 'может. В пустых же клетках ломаная ведет себя как',\ + 'захочет.','',\ + 'http://puzzleprograms.narod.ru' +else + LP_help mstr \ + 'You have to draw closed line over every grid',\ + 'cell. On black square line must turn, and it must',\ + 'go straight when over white square. The line may',\ + 'behave anyhow elsewhere.','',\ + 'http://puzzleprograms.narod.ru' +end if diff --git a/programs/games/megamaze/trunk/marble.bin b/programs/games/megamaze/trunk/marble.bin new file mode 100644 index 0000000000000000000000000000000000000000..20d126b6924e3abb6e727f5841cdff847a3fe1f4 GIT binary patch literal 346 zcmYk2%}&BV6oorb5XZ3vTG}B@OlV2^3IrPik=iGi1xYtr%2T))vBtzi{DH!NU69~I zXyQ`iJDBLRI8_&J@45Hf@0FmuXT?Ql$ z*0!Z&!-`mq`b6eH!gy?-Ktj>Z)kM9$*Jic3$-O?2!~vF=ZNWN4rSe@>7XtSBDah=@ zRXBnsMa7$`o-FX67YCV_PEkHF7T(a6(hGodJhULDXiNPi^oA*jLGG!?9Sdp{<>15* z0?hK`L6_MbxJS`0iwoNV=O4^j0}Is>KlS27s~IN#^wUEY@# literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/marble.inc b/programs/games/megamaze/trunk/marble.inc new file mode 100644 index 0000000000..7865cd4668 --- /dev/null +++ b/programs/games/megamaze/trunk/marble.inc @@ -0,0 +1,138 @@ +; level format +; [fx|fy][hole xy][balls #]..[1-red,0-black xy]..[maze walls] + +; internal format +; [stepptr]= balls # +; [finish]= hole cell +; area: ..[1-red,0-black xy].. ( -1 if empty) + +MAR_levelp: + call get_xy_sf + movzx eax,byte[esi-2] + mov [finish],eax + movzx ecx,byte[esi-1] + mov [stepptr],ecx + mov edi,area + rep movsb + mov [pause_time],10 + call unpack_level + ret + +MAR_key: + cmp eax,176 + jb .ex + cmp eax,179 + ja .ex + mov esi,area-1 + lea ebx,[eax-176] + .again: + and [cur_step],0 + mov ecx,[stepptr] + .lp: + movzx eax,byte[esi+ecx] + cmp al,-1 + je .ex1 + mov byte[player],al + and byte[player],0x80 + and eax,0x7f + call check_move + jc .ex1 + add eax,[dirs+ebx*4] + cmp eax,[finish] + jne .nohole + mov byte[esi+ecx],-1 + jmp .ex2 + .nohole: + push ecx + mov ecx,[stepptr] + mov edi,area + .lp2: + mov dl,[edi] + and dl,0x7f + cmp al,dl + je .exlp2 + inc edi + loop .lp2 + .exlp2: + pop ecx + je .ex1 + or al,byte[player] + mov [esi+ecx],al + .ex2: + inc [cur_step] + .ex1: + loop .lp + cmp [cur_step],0 + je .exx + call delay + call drwfld + jmp .again + .exx: + mov ecx,[stepptr] + inc esi + .lp3: + lodsb + cmp al,-1 + je .nxt + test al,0x80 + jne .ex + .nxt: + loop .lp3 + mov [win_flag],1 + .ex: + ret + +MAR_drawm: + shl [sq_size],1 + mov eax,[finish] + call get_xy + shr [sq_size],1 + mcall 13,[lx],[ly],0xa0a0a0 + movzx ecx,byte[stepptr] + mov edi,area + .lp: + push ecx + movzx eax,byte[edi] + mov edx,0x0 + cmp al,-1 + je .exlp + test eax,0x80 + je .no + mov edx,0xff00000 + .no: + and eax,0x7f + call get_xy + mcall 13,[lx],[ly] + .exlp: + pop ecx + inc edi + loop .lp + .ex: + ret + +MAR_level: +file 'marble.bin' + +if lang eq ru + MAR_help mstr \ + 'Несколько красных и черных плашек лежат на доске,',\ + 'дырка обозначена серой клеткой. Когда плашка',\ + 'проходит над дыркой, она падает туда и исчезает.',\ + 'Используйте стрелки для наклона доски.',\ + ' Ваша задача - сбросить все красные плашки.',\ + 'Количество упавших черных плашек роли не играет.','',\ + 'http://www.clickmazes.com' +else + MAR_help mstr \ + 'Several red and black marbles sit on a flat tray,',\ + 'a grey square indicate a hole in the tray. If a',\ + 'marble rolls onto or over the hole it drops',\ + 'through and disappears. Use the cursor keys to',\ + 'tilt the tray and start the marbles rolling, the',\ + 'marbles roll in a straight line until they come',\ + 'to rest, you can then roll again. Your challenge',\ + 'is to drop all the red marbles, it does not',\ + 'matter how many black marbles you lose in the',\ + 'process.','',\ + 'http://www.clickmazes.com' +end if diff --git a/programs/games/megamaze/trunk/megamaze.asm b/programs/games/megamaze/trunk/megamaze.asm new file mode 100644 index 0000000000..7d3912a6df --- /dev/null +++ b/programs/games/megamaze/trunk/megamaze.asm @@ -0,0 +1,855 @@ +IDA equ 1 ; We're running debugida.exe + +STRIP equ 40 +LEVNUM equ 500 + XFOFS equ 10 + YFOFS equ 55 + MSGXO equ 32 +GAMES_ALL equ 12 +WNDCOLOR equ 0x03c0c0c0;0x03f6f6f6; +MINCS equ 40 +MAXCS equ 80 +macro icall lbl +{ + call [lbl+ebp*4] +} + + use32 + org 0x0 + + db 'MENUET01' ; 8 byte id + dd 0x01 ; header version + dd run ; start of code + dd I_END ; size of image + dd end_mem ; memory for app + dd stack_end ; esp + dd 0x0 , 0x0 ; I_Param , I_Icon +lang fix ru +include "MACROS.INC" +purge mov +;include "DEBUG.INC" +COLOR_ORDER equ MENUETOS + +include 'gif_lite.inc' + +include 'tam.inc' +include 'smz.inc' +include 'tilt.inc' +include 'tilt2.inc' +include 'fhouse.inc' +include 'loops.inc' +include 'wriggle.inc' +include 'blackbox.inc' +include 'marble.inc' +include 'cstep.inc' +include 'orient.inc' +include 'nolt.inc' +include 'colzone.inc' + +run: + mov [Ces],STRIP;20 + mcall 3 + mov cl,16 + ror eax,cl + mov [generator],eax ; random generator from Tetris + + and [mpress_flag],0 + and [gif_unp],0 + xor ebp,ebp ; game_t +; mov ebp,10 + mcall 64,1,end_mem + mov [pause_time],40 + call resize + .game1: + mov [levnum],LEVNUM + .game: + and [win_flag],0 + and [drag_flag],0 + mov ecx,[levnum] + mov esi,[levels+ebp*4] + jecxz .skip + .nxt: + movzx eax,byte[esi] + add esi,eax + xor eax,eax + cmp al,byte[esi] + jne .noz + mov esi,LEVNUM;500 + sub esi,ecx + mov [levcount],esi + and [levnum],0 + jmp .game + .noz: + loop .nxt + .skip: + mcall 40,111b + mov [mouse_processed],1 + xor eax,eax + icall prepare_level +wnd_size: + mov eax,[Ces] + shr eax,2 + sub eax,2 + mov [sq_size],eax + if ~ IDA eq 1 + mov edx,[fx] + imul edx,[Ces] + add edx,XFOFS*2+20 + mov esi,[fy] + imul esi,[Ces] + add esi,YFOFS+30 + mov ecx,-1 + mcall 67,ecx + end if +red: + call draw_window + +drw: + call drwfld + +still: + mcall 2 + test al,al + jz still + mcall 10 + cmp eax,2 + je key + cmp eax,1 ; redraw request ? + je red + cmp eax,3 ; button in buffer ? + je button + cmp eax,6 ; mouse event ? + je mouse +key: + mcall 2 +; movzx ebx,ah +; dpd ebx + cmp ebp,10 + je .noplus + mov ebx,5 + cmp ah,184 + jne .nomin + cmp [Ces],MINCS + je still + .ces: + sub [Ces],ebx + call resize + jmp wnd_size + .nomin: + cmp ah,183 + jne .noplus + cmp [Ces],MAXCS + je still + neg ebx + jmp .ces + .noplus: + cmp ah,'h' + jne .nohlp +; if IDA eq 1 +; cmp [child],0 +; jne still +; else + call kill_help +; end if + mov [pack],ebp + mcall 51,1,show_help,chs_end +; dpd eax + mov [child],eax + jmp still + .nohlp: + cmp [win_flag],10 + je .levover + cmp [win_flag],2 + je .no_win + cmp [win_flag],1 + jne .now + .levover: + call lev_next + .no_win: + and [win_flag],al + jmp run.game + .now: + shr eax,8 + mov [jump],drw;red + cmp eax,13 + je run.game + icall key_handler + jmp [jump] + +button: + mcall 17 + cmp ah,1 + je close + cmp ah,2 + je .game_type + cmp ah,4 + je .inclev + cmp ah,3 + je .declev + jmp still + .declev: + dec [levnum] + cmp [levnum],0 + jge run.game + push [levcount] + pop [levnum] + jmp run.game + .inclev: + call lev_next + jmp run.game + .game_type: + inc ebp + cmp ebp,GAMES_ALL + jbe run.game1 + xor ebp,ebp + jmp run.game1 + close: + if ~ IDA eq 1 + call kill_help + end if + mcall -1 + +;if ~ IDA eq 1 + +kill_help: + mcall 9,prc_info2,-1 + mov edx,[child] + mov ecx,eax + .lp: + mcall 9 + cmp edx,[ebx+30] + jne .nochild + mcall 18,2 + and [child],0 + ret + .nochild: + loop .lp + ret + +;end if + +mouse: + cmp [mouse_processed],1 + jne .ex + mcall 37,1 + sub eax,XFOFS shl 16+YFOFS + xor edx,edx + mov ebx,[Ces] + mov ecx,eax + and eax,0xffff + div ebx + xor edx,edx + mov [mouse_y],eax + cmp eax,[fy] + jae .ex + mov eax,ecx + shr eax,16 + div ebx + mov [mouse_x],eax + cmp eax,[fx] + jae .ex + mcall 37,2 ; get buttons + cmp [drag_flag],0 + je .nodrag + mov ebx,eax + cmp eax,[mpress_flag] + mov eax,-1 + je .nochg + dec eax + .nochg: + mov [mpress_flag],ebx + jmp .call_hnd + .nodrag: + test eax,eax + jz .ex1 + cmp eax,[mpress_flag] + je .ex + mov [mpress_flag],eax + mov eax,-1 + .call_hnd: + mov [mouse_processed],0 + icall key_handler + jmp [jump] + .ex1: + mov [mpress_flag],0 + .ex: + jmp still + +lev_next: + push eax + inc [levnum] + mov eax,[levnum] + cmp eax,[levcount] + jbe .ex + and [levnum],0 + .ex: + pop eax + ret + +; ********************************************* +; ******* WINDOW DEFINITIONS AND DRAW ******** +; ********************************************* +draw_window: + pusha + mcall 12,1 + mov ebx,[fx] + imul ebx,[Ces] + push ebx + add ebx,50 shl 16+XFOFS*2+20 + mov ecx,[fy] + imul ecx,[Ces] + add ecx,10 shl 16+YFOFS+30 + mcall 0,,,WNDCOLOR + mov esi,edx + and esi,0xffffff + mcall 9,prc_info,-1 + mov ebx,[esp] + pop ebx + add ebx,XFOFS shl 16+XFOFS*2 + + mcall 8,,<25,12>,2 + + mcall 8,,<40,12>,3 + add ebx,14 shl 16 + inc edx + mcall + mcall 4,<8,8>,0x10ffffff,header,header.size + mov ecx,ebp + mov edx,game_names+4 + call get_mstr + mcall ,,0x8000 + imul esi,6 + add esi,3 + shl esi,16 + lea edx,[ebx+esi] + mcall 47,0x020001,levnum,,0x8000 + + mcall 4,,0x108000,next_msg,3 + mcall 12,2 + popa + ret + +unpack_level: + mov ecx,[cell_count] + mov edi,field + .lp: + movzx eax,byte[esi] + inc esi + shl ax,4 + shr al,4 + stosw + loop .lp + ret + +get_xy: +; eax-coord +; out: [lx]-[x+2][CS-4],[ly]-[y+2][CS-4] + pusha + xor edx,edx + mov esi,[sq_size] + lea edi,[esi*2] + neg edi + add edi,[Ces] + mov [lx],edi + mov [ly],edi + mov ebx,[fx] + div bx + imul eax,[Ces] + imul edx,[Ces] + lea edx,[edx+XFOFS+esi] + lea eax,[eax+YFOFS+esi] + mov word[ly+2],ax + mov word[lx+2],dx + popa + ret + +check_move: +; eax-coord, ebx-direction +; CF=0 if move is valid + bt dword[field+eax],ebx + ret + +delay: + pusha + mcall 5,[pause_time] + popa + ret + +get_mstr: +; in: edx,ecx +; out: edx,esi + mov esi,[edx-4] + jecxz .ex + lea edx,[edx+esi+4] + dec ecx + jmp get_mstr + .ex: + ret + +maze_field: + mov edi,field + mov [ly],YFOFS shl 16+YFOFS + mov eax,38 + mov ecx,[fy] + .lp1: + push ecx + mov [lx],XFOFS shl 16+XFOFS + mov ecx,[fx] + .lp2: + push ecx + xor esi,esi + .lp3: + mov edx,0xd0d0d0 + bt dword[edi],esi + jnc .gray + mov edx,0 + .gray: + mov ebx,[lx] + add ebx,[dir_ofs+esi*4] + mov ecx,[ly] + add ecx,[dir_ofs+esi*4+8] + mcall + inc esi + cmp esi,4 + jb .lp3 + inc edi + mov ecx,[Ces] + add word[lx],cx + add word[lx+2],cx + pop ecx + loop .lp2 + mov ecx,[Ces] + add word[ly],cx + add word[ly+2],cx + pop ecx + loop .lp1 + ret + +grid_field: + mov edx,0xa0a0a0 + mov eax,38 + + mov ecx,[fy] + mov ebx,[fx] + imul ebx,[Ces] + add ebx,XFOFS shl 16+XFOFS + mov esi,YFOFS shl 16+YFOFS + inc ecx + .lp1: + push ecx + mov ecx,esi + mcall + mov ecx,[Ces] + add esi,ecx + shl ecx,16 + add esi,ecx + pop ecx + loop .lp1 + + mov ecx,[fx] + mov esi,[fy] + imul esi,[Ces] + add esi,YFOFS shl 16+YFOFS + mov ebx,XFOFS shl 16+XFOFS + inc ecx + .lp2: + push ecx + mov ecx,esi + mcall + mov ecx,[Ces] + add ebx,ecx + shl ecx,16 + add ebx,ecx + pop ecx + loop .lp2 + ret + +get_xy_sf: + xor eax,eax + and [player],eax + mov [fx],eax + mov [fy],eax + lodsb + lodsb + mov ah,al + shr ah,4 + and al,0xf + mov byte[fx],ah + mov byte[fy],al + lodsb + mov byte[player],al + lodsb + mov byte[finish],al + .count: + mov eax,[fx] + mov [dirs+4],eax + neg eax + mov [dirs+8],eax + mov eax,[fx] + imul eax,[fy] + mov [cell_count],eax + + ret + +get_last_mclick: +; out - eax=0 no click or outside field +; eax>0 button pressed, ebx=[xy] + mov [mouse_processed],1 + mov eax,[mpress_flag] + mov ebx,[mouse_y] + imul ebx,[fx] + add ebx,[mouse_x] + ret + +erase_field: + pusha + mov ecx,[cell_count] + xor eax,eax + mov edi,field + rep stosb + popa + ret + +get_pxy: +; in: [pack] - cell#, out: word[pack] - packed [xy] + pusha + mov eax,[pack] + cdq + mov ebx,[fx] + div ebx + shl edx,8 + add eax,edx + mov [pack],eax + popa + ret + +check_bounds: +; in: eax - cell, ebx - dir +; out: ebx=-1 if bounds crossed + push eax ecx + mov ecx,eax + add ecx,[dirs+ebx*4] + mov ebx,ecx + call get_offset + mov ebx,eax + pop ecx eax + cmp ebx,-1 + ret + +get_offset: +; in: eax - start, ebx-end +; out: eax - dir or -1 if not straight +; ebx - distance + push ecx edx + mov ecx,-1 + mov edx,[cell_count] + cmp eax,edx + jae .ex + cmp ebx,edx + jae .ex + mov [pack],eax + call get_pxy + mov eax,[pack] + mov [pack],ebx + call get_pxy + mov ebx,[pack] + cmp ah,bh ; compare X + jne .noX + mov ecx,1 + sub bl,al + ja .ok + inc ecx + .ok2: + neg bl + jmp .ok + .noX: + cmp al,bl ; compare Y + jne .ex + inc ecx + sub bh,ah + mov bl,bh + jb .ok2 + add ecx,3 + .ok: + movzx ebx,bl + .ex: + mov eax,ecx + pop edx ecx + ret + +show_help: + mov ebp,[pack] + .red: + mcall 12,1 + mov ebx,[prc_info.x_start] + add ebx,[prc_info.x_size] + shl ebx,16 + add ebx,310 + mov ecx,[prc_info.y_start] + shl ecx,16 + add ecx,220 + mcall 0,,,0x03c0c0c0 + mcall 4,<8,8>,0x00ffffff,help_hdr,help_hdr.size + mov ecx,ebp + mov edx,game_names+4 + call get_mstr + sub esi,2 + mcall 4,<6*help_hdr.size+15,8>,0x00ffffff + + mov edx,[help_msg+ebp*4] + add edx,4 + xor ecx,ecx + mov ebx,10 shl 16+30 + .nxt: + mov esi,[edx-4] + jecxz .drw + dec ecx + lea edx,[edx+esi+4] + jmp .nxt + .drw: + cmp esi,-1 + je .edraw + mcall ,,0x000000ff + mov ecx,1 + add ebx,12 + jmp .nxt + .edraw: + mcall 12,2 + .still: + mcall 10 + cmp eax,2 + jne .nokey + mcall + jmp .close + .nokey: + cmp eax,1 ; redraw request ? + je .red + cmp eax,3 ; button in buffer ? + jne .still + mcall 17 + cmp ah,1 + jne .still + .close: + and [child],0 + mcall -1 + +getline: +; in: esi,edi + pusha + mov eax,esi + call get_xy + mov ebx,[lx] + mov ecx,[ly] + mov eax,edi + call get_xy + mov bx,word[lx+2] + mov cx,word[ly+2] + mov eax,[Ces] + shr eax,1 + sub eax,[sq_size] + add ebx,eax + add ecx,eax + shl eax,16 + add ebx,eax + add ecx,eax + mov [lx],ebx + mov [ly],ecx + mcall 38 + popa + ret + +bold_line: + WGSPC equ 1 + pusha + mov edi,WGSPC shl 16+WGSPC + add [lx],edi + add [ly],edi + mcall 38,[lx],[ly] + shl edi,1 + sub ebx,edi + sub ecx,edi + mcall + popa + ret + +get_rnd: + mov eax, [generator] + sub eax,0x43ab45b5 ; next random number + ror eax,1 + xor eax,0x32c4324f + ror eax,1 + mov [generator],eax + ret + +drwfld: + pusha + mov ebx,[fx] + imul ebx,[Ces] + add ebx,XFOFS shl 16 + mov ecx,[fy] + imul ecx,[Ces] + add ecx,YFOFS shl 16 + mcall 13,,,WNDCOLOR + add ebx,26 shl 16-26 + sub ecx,16 shl 16 + mov cx,16 + mcall + icall draw_field + icall draw_more + cmp [win_flag],0 + jz .edraw + movzx ecx,[win_flag] + mov edx,msgs+4 + call get_mstr + mcall 4,,0x100000ff + .edraw: + popa + ret + +resize: + mov eax,[Ces] + mov edi,dir_ofs+4 + stosd + stosd + stosw + stosw + mov [edi+4],eax + ret + +need_image: +; in: eax - gif pointer + cmp [gif_unp],0 + jne .skip + push esi edi + mov esi,eax + mov eax,field + mov edi,raw_area + call ReadGIF + mov [gif_unp],1 + pop edi esi + .skip: + ret + +out_image: +; in: eax - coord, ebx - image # + +STRIP2 = STRIP-2 + pusha + call get_xy + mov edx,[lx] + mov dx,word[ly+2] + add edx,1 shl 16+1 + imul ebx,STRIP2*STRIP2*3 + add ebx,raw_area+12 + mcall 7,,STRIP2 shl 16+STRIP2 + popa + ret + +OR_strip: +;file 'orient2.gif' +file 'orientg2.gif' + rd 2 + gif_unp dd 0 + +; DATA AREA +help_hdr db 'MegaMaze Help -' + .size=$-help_hdr + +dirs dd -1,0,0,1 +dir_ofs dd 0, 1, 1, 1 shl 16+1, 0, 1 + +dir_rotate db 2,0,3,1,1,3,0,2 + +w_colors dd 0x0404CA,0xCC0404,0x00CC00 +f_colors dd 0x9494FC,0xFC9494,0x99FF99,0xFFFF00 + +levnum dd LEVNUM + +prepare_level dd TM_levelp,SMZ_levelp,TILT_levelp,TILT2_levelp,FH_levelp,\ + LP_levelp,WG_levelp,BB_levelp,MAR_levelp,TM_levelp,OR_levelp,NLT_levelp,\ + CZ_levelp +key_handler dd TM_key,SMZ_key,TILT_key,TILT2_key,FH_key,LP_key,WG_key,BB_key,\ + MAR_key,CSTEP_key,OR_key,NLT_key,CZ_key +draw_more dd TM_drawm,SMZ_drawm,TILT_drawm,TILT2_drawm,FH_drawm,LP_drawm,\ + WG_drawm,BB_drawm,MAR_drawm,CSTEP_drawm,OR_drawm,NLT_drawm,CZ_drawm +draw_field dd maze_field,maze_field,maze_field,maze_field,grid_field,\ + grid_field,grid_field,grid_field,maze_field,maze_field,OR_drawf,maze_field,\ + grid_field +levels dd TM_level,SMZ_level,TILT_level,TILT2_level,FH_level,LP_level,\ + WG_level,BB_level,MAR_level,CSTEP_level,OR_level,NLT_level,CZ_level +help_msg dd TM_help,SMZ_help,TILT_help,TILT2_help,FH_help,LP_help,WG_help,\ + BB_help,MAR_help,CSTEP_help,OR_help,NLT_help,CZ_help + +if lang eq ru + header db 'Mega Maze' +else + header db 'Mega Maze' +end if + .size = $ - header + +next_msg db '< >' + +game_names mstr \ + 'Teseus & Minotaur #',\ + '1-2-3 Maze #',\ + 'Tilt Maze #',\ + 'Double Tilt #',\ + 'Full-house #',\ + 'Loops #',\ + 'Wriggle #',\ + 'BlackBox #',\ + 'Marble #',\ + 'Counter Step #',\ + 'Orientation #',\ + 'No left turn #',\ + 'Colour-zone #' + +msgs mstr ' ','You win!!!','Game over.','Start cell?','Dead end!',\ + " atoms hidden.",'Ray emerged.','Ray absorbed.','Ray reflected.',\ + 'Mark exactly guesses','Your score is','Guess mark toggled' + +I_END: +main_pid dd ? +child_stack rb 256 + chs_end: +drag_flag db ? +sq_size dd ? +mouse_processed dd ? +mpress_flag dd ? +mouse_x dd ? +mouse_y dd ? + +Ces dd ? +pack dd ? +fy dd ? +fx dd ? +lx dd ? +ly dd ? +generator dd ? +cell_count dd ? +levptr dd ? +levcount dd ? + +score dd ? +player: +teseus dd ? +finish: +minotaur dd ? + +stepptr dd ? +cur_step dd ? + +win_flag db ? +jump dd ? +pause_time dd ? +child dd ? +area rb 1024 +stak rb 1024 +stack_end: +prc_info process_information +prc_info2 process_information +field: + rb 128*128 +raw_area: + rb STRIP*STRIP*12*3+16 +end_mem: diff --git a/programs/games/megamaze/trunk/nolt.bin b/programs/games/megamaze/trunk/nolt.bin new file mode 100644 index 0000000000000000000000000000000000000000..fc6d2167081de60daa36d51a52cb857a7307f142 GIT binary patch literal 474 zcmWlT-)_=S0LD*&&I`?$mvw_f(bQ*{4k>KISFq`{htq$r&`c8x1G(4>oYK-$>cw6G z42f*%^cCu|kdbAO_ync#!tU<-eZPFkXBCTg;0oxPp&7TjM|EHKU8)kD=m=R^bVrox z7-7;zL(?~XhpyWi)-v=)rvIp&w)UurL#gSx86xDhF>&dLx~A7gL`693M{2gdSAVDm zHt@E*{cI1MgNI}7R*!zmm1O#d@t!1y;v`RMb6A~2vSfM>{3{|=Y&qFDT*?=k;?Pl& zF|-GqASP^X=B)G05Z>)al&;yE`uVUR|^Oy{BS9i1M^+aBz?K7L?zMVP}0av_`o@<7ZScl2g}Pk z_*O!5hrNQaGloMhZFF5%vB-u^8c3{oZ-uH5*2AAqzZQ4?f*WwWxK^}C*|T0CyMzL! z6~M`ORF6AKrFU^jcaaUz)~OiOaJb$;`*q7WDSQFVNSZMLOqof((ES**)qhMn?d+bG ng_J!IQ~kq=?Uv#`mAA4N91@c=ciR76%PrJ50v1-E@e2G0;yux; literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/nolt.inc b/programs/games/megamaze/trunk/nolt.inc new file mode 100644 index 0000000000..1af437bb4b --- /dev/null +++ b/programs/games/megamaze/trunk/nolt.inc @@ -0,0 +1,92 @@ +NLT_levelp: + mov eax,OR_strip + call need_image + xor eax,eax + lodsb + lodsb + mov [fx],eax + lodsb + mov [fy],eax + lodsw + mov [player],eax + mov dword[area],5 + lodsw + mov [finish],eax + call get_xy_sf.count + mov [levptr],esi + call unpack_level + ret + +NLT_key: + mov [jump],still + cmp eax,176 + jb .ex + cmp eax,179 + ja .ex + lea ebx,[eax-176] + mov eax,[player] + call check_move + jc .ex + mov ecx,ebx + mov edx,ebx + movzx ecx,byte[dir_rotate+ecx] + cmp ecx,dword[area] + je .ex + xor edx,11b + cmp edx,dword[area] + je .ex + add eax,[dirs+ebx*4] + mov dword[area],ebx + mov [player],eax + cmp eax,[finish] + jne .nowin + mov [win_flag],1 + .nowin: + mov [jump],drw + .ex: + ret + +NLT_drawm: + push [sq_size] + mov [sq_size],0 + mov eax,[finish] + mov ebx,6 + call out_image +; mcall 13,[lx],[ly],0xff0000 + mov ebx,dword[area] + cmp ebx,5 + jne .skip + mov eax,[player] + mov edi,eax + pop [sq_size] + call get_xy + mcall 13,[lx],[ly],0x8000 + jmp .ex + .skip: + add ebx,8 + mov eax,[player] + call out_image + pop [sq_size] + .ex: + ret + +NLT_level: +file 'nolt.bin' + +if lang eq ru + NLT_help mstr \ + 'Ваша задача - провести зеленый квадрат к красному',\ + 'без поворота налево и движения назад. Это труднее',\ + 'чем кажется. Внимание: если Вы примете плохое',\ + 'решение, можете попасть в тупик и будете',\ + 'вынуждены начать сначала.','',\ + 'http://puzzleprograms.narod.ru' +else + NLT_help mstr \ + 'Your challenge is to manouvre the green dot to',\ + 'the red square without ever turning left, or',\ + 'making a U-turn. Harder than it looks. Beware, if',\ + 'you make a bad decision in this maze you may get',\ + 'completely stuck and have to restart.','',\ + 'http://www.clickmazes.com' +end if diff --git a/programs/games/megamaze/trunk/omaze.bin b/programs/games/megamaze/trunk/omaze.bin new file mode 100644 index 0000000000000000000000000000000000000000..f645bedd43fa745886219a3456b1ad233f6026ca GIT binary patch literal 29 lcmd-v7de}K_q!G3-LH&LeNe_anSHZV3YFWUc{0RWGk3YY)@ literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/or2.bin b/programs/games/megamaze/trunk/or2.bin new file mode 100644 index 0000000000000000000000000000000000000000..b2ee0b558b1a4f5ce47c1a6bc5f99a1193407050 GIT binary patch literal 798 zcmYk5+in6u3`28m3oR^#$KL+`FMFJ2VI`zl#S_PNhO61~vUpZUhZWz~sbm?YjHL4A zws2HrxutWnD@u1ah4c93U=TS4a0mU~EqAwn}6b5H1yWH)^t!Pky3IxEc$ zwTVK>f5_17GPyA^?4Yjnuqe(}tDu|t3#ZgUI?}$~Kjbw>HM+p?I!s_S7%6zc*JZdJ z0bnO#*k`&KR=b~li!fIXO;mFI#16vH>}5Dsl4L?@`5~}%Akoo991M>3J9v0oSyL0W z5`4u59$O%!p6#4ej_#YxdN^D?yfQ^cs1vf0kB=d#Mh zJ1X^7aCFb-&+B&mT$@{h1+j=Hd_JBg31V=zq}>+iBoFuPGMee+QKHz_7$pnt<$Rj8 k@diz+BVs*;hw2qfnWdMww!u>U3dj5fNN;^NT926RACis~j{pDw literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/orient.bin b/programs/games/megamaze/trunk/orient.bin new file mode 100644 index 0000000000000000000000000000000000000000..9ea38c2d8809cfa923c92f7bae288872d5af7ec9 GIT binary patch literal 100 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 literal 0 HcmV?d00001 diff --git a/programs/games/megamaze/trunk/smz.inc b/programs/games/megamaze/trunk/smz.inc new file mode 100644 index 0000000000..5a7770b893 --- /dev/null +++ b/programs/games/megamaze/trunk/smz.inc @@ -0,0 +1,94 @@ +SMZ_levelp: + call get_xy_sf + xor eax,eax + mov [stepptr],esi + lodsb + mov [cur_step],esi + add esi,eax + mov [levptr],esi + call unpack_level + ret + +SMZ_key: + cmp eax,176 + jb .ex + cmp eax,179 + ja .ex + mov ecx,[cur_step] + movzx ecx,byte[ecx] + lea ebx,[eax-176] + mov eax,[player] + .lp: + call check_move + jc .exl + add eax,[dirs+ebx*4] + loop .lp + .exl: + test ecx,ecx + jne .ex + mov [player],eax + cmp eax,[finish] + jne .nowin + mov [win_flag],1 + .nowin: + mov esi,[stepptr] + movzx eax,byte[esi] + inc esi + lea ebx,[esi+eax] + inc [cur_step] + cmp [cur_step],ebx + jb .ex + mov [cur_step],esi + .ex: + ret + +SMZ_drawm: + mov eax,[player] + call get_xy + mcall 13,[lx],[ly],0xff00 + mov eax,[finish] + call get_xy + mcall 13,[lx],[ly],0xff0000 + cmp [win_flag],1 + je .ex + mov edi,[stepptr] + movzx ecx,byte[edi] + inc edi + mov edx,(XFOFS+MSGXO) shl 16+42 + mov ebx,0x010000 + mov eax,47 + .lp: + push ecx + mov esi,0x10000000 + movzx ecx,byte[edi] + cmp edi,[cur_step] + jne .nocur + mov esi,0x100000ff + mcall + add edx,1 shl 16 + .nocur: + mcall + pop ecx + add edx,10 shl 16 + inc edi + loop .lp + .ex: + ret + +SMZ_level: +file 'smz.bin' + +if lang eq ru + SMZ_help mstr \ + 'Повторяйте последовательность ходов, двигая',\ + 'зеленый квадрат на подсвеченное количество клеток',\ + 'по прямой, пока не достигнете красного квадрата.','',\ + 'http://puzzleprograms.narod.ru' +else + SMZ_help mstr \ + 'Repeat sequence shown above the field moving the',\ + 'green square by highlighted count of spaces as',\ + 'many times as you like, until you finish at the',\ + 'red square.','',\ + 'http://puzzleprograms.narod.ru' +end if diff --git a/programs/games/megamaze/trunk/tam.INC b/programs/games/megamaze/trunk/tam.INC new file mode 100644 index 0000000000..023c734230 --- /dev/null +++ b/programs/games/megamaze/trunk/tam.INC @@ -0,0 +1,164 @@ +TM_levelp: + call get_xy_sf + mov [levptr],esi + call unpack_level + ret + +TM_key: + cmp eax,' ' + je .mm + cmp eax,176 + jb .still + cmp eax,179 + ja .still + lea ebx,[eax-176] + mov eax,[teseus] + call check_move + jc .still + call move_teseus + cmp [win_flag],0 + jne .ex + .nowin: + call drwfld + .mm: + call move_minotaur + cmp eax,[teseus] + jne .still + mov [win_flag],2 + jmp .ex + .still: + mov [jump],still + .ex: + ret + +move_minotaur: + xor esi,esi + mov eax,[teseus] + mov ebx,[fx] + div bl + mov ecx,eax ;teseus: ch-x, cl-y + mov eax,[minotaur] + .again: + call mino_xy + xor ebx,ebx + cmp dh,ch + je .stand2 + ja .ok1 + add ebx,3 + .ok1: + call check_move + jc .stand2 + add eax,[dirs+ebx*4] + mov [minotaur],eax + inc esi + call delay + call drwfld + cmp esi,2 + jb .again + jmp .ex + .stand1: + call mino_xy + .stand2: + mov ebx,2 + cmp dl,cl + je .ex + ja .ok2 + dec ebx + .ok2: + call check_move + jc .ex + add eax,[dirs+ebx*4] + mov [minotaur],eax + inc esi + call delay + call drwfld + cmp esi,2 + jb .again + .ex: + ret + +mino_xy: + push eax + div byte[fx] + mov edx,eax ;minotaur: dh-x, dl-y + pop eax + ret + +move_teseus: + pusha + cdq + mov ecx,[fx] + div cl + add ax,1 shl 8+1 + test ebx,ebx + jne .no0 + cmp ah,1 + jne .move + .win: + inc [win_flag] + jmp .ex + .no0: + cmp ebx,1 + jne .no1 + cmp al,byte[fy] + je .win + jmp .move + .no1: + cmp ebx,2 + jne .no2 + cmp al,1 + je .win + jmp .move + .no2: + cmp ebx,3 + jne .move + cmp ah,byte[fx] + je .win + .move: + mov eax,[esp+28] + add eax,[dirs+ebx*4] + mov [teseus],eax + .ex: + popa + ret + +TM_drawm: + mov eax,[teseus] + call get_xy + mcall 13,[lx],[ly],0xff00 + mov eax,[minotaur] + call get_xy + mcall 13,[lx],[ly],0xff0000 + ret + +TM_level: +file 'tam.bin' + +if lang eq ru + TM_help mstr \ + ' Тесей (зеленый квадрат) должен убежать из',\ + 'лабиринта. За ним гонится механический Минотавр',\ + '(красный квадрат). На каждый ход Тесей Минотавр',\ + 'делает 2 хода по такой схеме:',\ + ' Сначала он пытается приблизиться к Тесею по',\ + 'горизонтали на 1 квадрат. Если это невозможно,',\ + 'он пытается подойти по вертикали на 1 квадрат.',\ + 'Если невозможно сделать ни того, ни другого,',\ + 'Минотавр пропускает данный ход.','',\ + 'http://puzzleprograms.narod.ru' +else + TM_help mstr \ + ' Theseus (the green dot) must escape from a maze.',\ + 'There is also a mechanical Minotaur (the red',\ + 'dot) in each maze. For every turn that Theseus',\ + 'takes, the Minotaur takes two turns.',\ + ' Each turn he decides following:',\ + 'First he tests if he can move horizontally and',\ + 'get closer to Theseus. If he can, he will move',\ + "one square horizontally. If he can't, he will",\ + 'test if he could move vertically and get closer',\ + 'to Theseus. If he can, he will move one square',\ + "vertically. If he can't move either horizontally",\ + 'or vertically, then he just skips that turn.','',\ + 'http://puzzleprograms.narod.ru' +end if diff --git a/programs/games/megamaze/trunk/tam.bin b/programs/games/megamaze/trunk/tam.bin new file mode 100644 index 0000000000000000000000000000000000000000..e94f1a1584cae45447e9481d219631e9ca2d4646 GIT binary patch literal 1475 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 diff --git a/programs/games/pig/trunk/COPYING b/programs/games/pig/trunk/COPYING new file mode 100644 index 0000000000..dc63aaca03 --- /dev/null +++ b/programs/games/pig/trunk/COPYING @@ -0,0 +1,340 @@ + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program 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 + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/programs/games/pig/trunk/ChangeLog b/programs/games/pig/trunk/ChangeLog new file mode 100644 index 0000000000..11eacb641b --- /dev/null +++ b/programs/games/pig/trunk/ChangeLog @@ -0,0 +1,2 @@ + +20040124: First release. diff --git a/programs/games/pig/trunk/INSTALL b/programs/games/pig/trunk/INSTALL new file mode 100644 index 0000000000..b42a17ac46 --- /dev/null +++ b/programs/games/pig/trunk/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/programs/games/pig/trunk/INSTRUCTIONS b/programs/games/pig/trunk/INSTRUCTIONS new file mode 100644 index 0000000000..04c5a87cb1 --- /dev/null +++ b/programs/games/pig/trunk/INSTRUCTIONS @@ -0,0 +1,54 @@ + + Fixed Rate Pig + -------------- + Instructions + +The Story +--------- +Aw, come on! Like anyone actually cares... :-) Oh +well, here it is, anyway: + You're a cute, bouncy rubber pig, caught in some +weird toy world in a parallel universe. As always, +the only way out is through. Or at least, that's +your best bet, as you can't seem to figure out any +other way - and you probably don't want to be a toy +rubber pig for the rest of your life. (How long do +toy rubber pigs live, anyway?) + So, off you go, to run, jump and stomp your way +through this strange looking toy world. Hopefully, +you will find a portal back to your universe or +something eventually. + Or maybe you'll just wake up, have a big cup of +black coffee, and realize that the layer of toys +covering the floor reminds a great deal of +something you dreamt. + Better not waste your limited supply of lives +until you know for sure, tough. What if it *isn't* +a dream...? + + +The Game +-------- +Well, Fixed Rate Pig is just another retro style +platform game, inspired by the 8 bit generation. +Controls are very simple: Left and right arrows to +move left/right, and the up arrow to jump. + The enemies are the evil looking spinning heads. +Some bounce around, just to be a bit more annoying. +Jump and stomp'em all in the head! When all enemies +are gone, the level is clear. + Jumping when stomping an enemy gives you an +extra high jump from the point of impact. Note that +you get knocked if you're hit by an enemy while +standing or walking on a platform - even if the +enemy hits you from below. You need to be falling +downwards with some speed to stomp someone. + Watch out for the holes in the floor! Falling +off the map means you lose one life. Avoid running +into enemies or getting stomped, as that knocks you +out and has you falling past platforms for a brief +moment. That's actually no big deal - provided you +wake up before you fall off the screen... + At certain score intervals, powerups icons are +dropped into the level. Pick these up before they +fall off the screen! (No need to stomp them.) diff --git a/programs/games/pig/trunk/Makefile.am b/programs/games/pig/trunk/Makefile.am new file mode 100644 index 0000000000..73d66e3b07 --- /dev/null +++ b/programs/games/pig/trunk/Makefile.am @@ -0,0 +1,6 @@ +AUTOMAKE_OPTIONS = foreign + +bin_PROGRAMS = pig +pig_SOURCES = pig.c engine.c dirty.c + +EXTRA_DIST = *.h *.txt *.png INSTRUCTIONS pig-linux-x86 pig-win32.exe diff --git a/programs/games/pig/trunk/Makefile.in b/programs/games/pig/trunk/Makefile.in new file mode 100644 index 0000000000..fd997e9a75 --- /dev/null +++ b/programs/games/pig/trunk/Makefile.in @@ -0,0 +1,494 @@ +# Makefile.in generated by automake 1.7.1 from Makefile.am. +# @configure_input@ + +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . + +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_triplet = @host@ +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EXEEXT = @EXEEXT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +SDL_CFLAGS = @SDL_CFLAGS@ +SDL_CONFIG = @SDL_CONFIG@ +SDL_LIBS = @SDL_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__quote = @am__quote@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +AUTOMAKE_OPTIONS = foreign + +bin_PROGRAMS = pig +pig_SOURCES = pig.c engine.c dirty.c + +EXTRA_DIST = *.h *.txt *.png INSTRUCTIONS pig-linux-x86 pig-win32.exe +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_CLEAN_FILES = +bin_PROGRAMS = pig$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) + +am_pig_OBJECTS = pig.$(OBJEXT) engine.$(OBJEXT) dirty.$(OBJEXT) +pig_OBJECTS = $(am_pig_OBJECTS) +pig_LDADD = $(LDADD) +pig_DEPENDENCIES = +pig_LDFLAGS = + +DEFAULT_INCLUDES = -I. -I$(srcdir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/dirty.Po ./$(DEPDIR)/engine.Po \ +@AMDEP_TRUE@ ./$(DEPDIR)/pig.Po +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DIST_SOURCES = $(pig_SOURCES) +DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \ + Makefile.in NEWS aclocal.m4 config.guess config.sub configure \ + configure.in depcomp install-sh missing mkinstalldirs +SOURCES = $(pig_SOURCES) + +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj + +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe) + +$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +$(ACLOCAL_M4): configure.in + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f"; \ + $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) $$p $(DESTDIR)$(bindir)/$$f || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f $(DESTDIR)$(bindir)/$$f"; \ + rm -f $(DESTDIR)$(bindir)/$$f; \ + done + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +pig$(EXEEXT): $(pig_OBJECTS) $(pig_DEPENDENCIES) + @rm -f pig$(EXEEXT) + $(LINK) $(pig_LDFLAGS) $(pig_OBJECTS) $(pig_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/engine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pig.Po@am__quote@ + +distclean-depend: + -rm -rf ./$(DEPDIR) + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \ +@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \ +@am__fastdepCC_TRUE@ -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'`; \ +@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \ +@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \ +@am__fastdepCC_TRUE@ fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'` +uninstall-info-am: + +ETAGS = etags +ETAGSFLAGS = + +CTAGS = ctags +CTAGSFLAGS = + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$tags$$unique" \ + || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique + +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + +top_distdir = . +distdir = $(PACKAGE)-$(VERSION) + +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } + +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkinstalldirs) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist dist-all: distdir + $(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + $(am__remove_distdir) + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf - + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/=inst && pwd` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/=build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \ + && rm -f $(distdir).tar.gz \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @echo "$(distdir).tar.gz is ready for distribution" | \ + sed 'h;s/./=/g;p;x;p;x' +distuninstallcheck: + cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) + +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) +distclean-am: clean-am distclean-compile distclean-depend \ + distclean-generic distclean-tags + +dvi: dvi-am + +dvi-am: + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf autom4te.cache +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags dist dist-all dist-gzip distcheck distclean \ + distclean-compile distclean-depend distclean-generic \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/programs/games/pig/trunk/NEWS b/programs/games/pig/trunk/NEWS new file mode 100644 index 0000000000..e69de29bb2 diff --git a/programs/games/pig/trunk/README b/programs/games/pig/trunk/README new file mode 100644 index 0000000000..243806b69a --- /dev/null +++ b/programs/games/pig/trunk/README @@ -0,0 +1,269 @@ + + Fixed Rate Pig - a fixed logic frame rate demo + ---------------------------------------------- + + This SDL programming example - a simple + platform game - demonstrates the use of + a fixed virtual logic frame rate + together with interpolation, for smooth + and accurate game logic that is + independent of the rendering frame rate. + + The example also demonstrates sprite + animation and partial display updating + techniques, suitable for games and + applications that need high frame rates + but can do without updating the whole + screen every frame. + + +Fixed Logic Frame Rate +---------------------- +Having a fixed logic frame rate means that the game +logic (that is, what defines the gameplay in terms +of object behavior and user input handling) runs a +fixed number of times per unit of time. This makes +it possible to use "frame count" as a unit of time. + More interestingly, since the logic frame rate +can be set at any sufficient value (say, 20 Hz for +a slow turn based game, or 100 Hz for fast action) +the logic code will run exactly once per frame. +Thus, there is no need to take delta times in +account, solving equations, making calculations on +velocity, acceleration, jerk and stuff like that. +You can just deal with hardcoded "step" values and +simple tests. + Perhaps most importantly, you can *still* rely +on the game behaving *exactly* the same way, +regardless of the rendering frame rate or other +system dependent parameters - something that is +virtually impossible with delta times, since you +cannot have infinite accuracy in the calculations. + + +Virtual Logic Frame Rate +------------------------ +By "virtual", I mean that the actual frame rate is +not necessarily stable at the nominal value at all +times. Rather, the *average* logic frame rate is +kept at the nominal value by means of controlling +the number of logic frames processed for each +rendered frame. + That is, if the rendering frame rate is lower +than the nominal logic frame rate, the engine will +run the game logic several times before rendering +each frame. Thus, the game logic may actually be +running at tens of kHz for a few frames at a time, +but this doesn't matter, as long as the game logic +code relies entirely on logic time. + So, do not try to read time using SDL_GetTicks() +or similar in the game logic code! Instead, just +count logic frames, like we did back in the C64 and +Amiga days, where video frames were actually a +reliable time unit. It really works! + + +Resampling Distortion +--------------------- +Now, there is one problem with fixed logic frame +rates: Resampling distortion. (The same phenomena +that cause poor audio engines to squeal and feep +when playing back waveforms at certain pitches.) + The object coordinates generated by the game +logic engine can be thought of as streams of values +describing signals (in electrical engineering/DSP +terms) with a fixed sample rate. Each coordinate +value is one stream. + Since the logic frame rate is fixed, and the +game logic runs an integer number of times per +rendered frame, what we get is a "nearest point" +resampling from the logic frame rate to the +rendering frame rate. That's not very nice, since +only the last set of coordinates after each run of +logic frames is actually used - the rest are thrown +away! + What's maybe even worse, especially if the logic +frame rate is low, is that you get new coordinates +only every now and then, when the rendering frame +rate is higher than the logic frame rate. + + +Getting Smooth Animation +------------------------ +So, what do we do? Well, given my hint above, the +answer is probably obvious: interpolation! We just +need to replace the basic "nearest sample" method +with something better. + Resampling is a science and an art in the audio +field, and countless papers have been written on +the subject, most of which are probably totally +incomprehensible for anyone who hasn't got a degree +in maths. + However, our requirements for the resampling can +be kept reasonably low by keeping the logic frame +rate reatively high (ie in the same order of +magnitude as the expected rendering frame rate) - +and we generally want to do that anyway, to reduce +the game's control latency. + + +Chosing An Interpolator +----------------------- +Since the rendering frame rate can vary constantly +in unpredictable ways, we will have to recalculate +the input/output ratio of the resampling filter for +every rendered frame. + However, using a polynomial interpolator (as +opposed to a FIR resampling filter), we can get +away without actually doing anything special. We +just feed the interpolator the coordinates and the +desired fractional frame time, and get the +coordinates calculated. + DSP people will complain that a polynomial +resampler (that is, without a brickwall filter, or +oversampling + bandlimited downsampling) doesn't +really solve the whole problem. Right, it doesn't +remove frequencies above Nyqvist of the rendering +frame rate, so those can cause aliasing distortion. +But let's consider this: + Do we actually *have* significant amounts of +energy at such frequencies in the data from the +game logic? Most probably not! You would have to +have objects bounce around or oscillate at insane +speed to get anywhere near Nyqvist of (that is, 50% +of) any reasonable (ie playable) rendering frame +rate. In fact, we can probably assume that we're +dealing with signals in the range 0..10 Hz. Not +even the transients caused by abrupt changes in +speed and direction will cause visible side +effects. + So, in this programming example, I'm just using +a simple linear interpolator. No filters, no +oversampling or anything like that. As simple as it +gets, but still an incredible improvement over +"nearest sample" resampling. You can enable/disable +interpolation with the F1 key when running the +example. + + +Rendering Sprites +----------------- +In order to cover another animation related FAQ, +this example includes "smart" partial updates of +the screen. Only areas that are affected by moving +and/or animated sprites are updated. + To keep things simple and not annoyingly non- +deterministic, updates are done by removing all +sprites, updating their positions and animation +frames, and then rendering all sprites. This is +done every frame, and includes all sprites, whether +they move or not. + So, why not update only the sprites that +actually moved? That would allow for cheap but +powerful animated "backgrounds" and the like. + Well, the problem is that sprites can overlap, +and when they do, they start dragging each other +into the update loop, leading to recursion and +potentially circular dependencies. A non-recursive +two-pass (mark + render) algorithm is probably a +better idea than actual recursion. It's quite +doable and neat, if the updates are restricted by +clipping - but I'll leave that for another example. +Pretty much all sprites in Fixed Rate Pig move all +the time, so there's nothing to gain by using a +smarter algorithm. + + +Efficient Software Rendering +---------------------------- +To make it a bit more interesting, I also added +alpha blending for sprite anti-aliasing and effects. +Most 2D graphics APIs and drivers (and as a result, +most SDL backends) lack h/w acceleration of alpha +blended blits, which means the CPU has to perform +the blending. That's relatively expensive, but +SDL's software blitters are pretty fast, and it +turns out *that's* usually not a problem. + However, there is one problem: Alpha blending +requires that data is read from the target surface, +modified, and then written back. Unfortunately, +modern video cards handle CPU reads from VRAM very +poorly. The bandwidth for CPU reads - even on the +latest monster AGP 8x card - is on par with that of +an old hard drive. (I'm not kidding!) + This is why I wanted to demonstrate how to avoid +this problem, by rendering into a s/w back buffer +instead of the h/w display surface. If you're on a +system that supports hardware display surfaces, you +can see the difference by hitting F2 in the game, +to enable/disable rendering directly into VRAM. + Indeed, SDL can set that up for you, but *only* +if you ask for a single buffered display - and we +do NOT want that! Single buffered displays cannot +sync animation with the retrace, and as a result, +we end up hogging the CPU (since we never block, +but just pump out new frames) and still getting +unsmooth animation. + Accidentally, this approach of using a s/w back +buffer for rendering mixes very well with partial +update strategies, so it fits right in. + + +Smart Dirty Rectangle Management +-------------------------------- +The most complicated part of this implementation +is keeping track of the exact areas of the screen +that need updating. Just maintaining one rectangle +per sprite would not be sufficient. A moving sprite +has to be removed, animated and then re-rendered. +That's two rectangles that need to be pushed to the +screen; one to remove the old sprite image, and one +for the new position. + On a double buffered display, it gets even worse, +as the rendering is done into two alternating +buffers. When we update a buffer, the old sprites +in it are actually *two* frames old - not one. + I've chosen to implement a "smart" rectangle +merging algorithm that can deal with all of this +with a minimum of support from higher levels. The +algorithm merges rectangles in order to minimize +overdraw and rectangle count when blitting to and +updating the screen. See the file dirtyrects.txt for +details. You can (sort of) see what's going on by +hitting F3 in the game. Here's what's going on: + + 1. All sprites are removed from the rendering + buffer. The required information is found + in the variables that store the results of + the interpolation. + 2. The dirtyrect table for the display surface + is swapped into a work dirtyrect table. The + display surface dirtyrect table is cleared. + 3. New graphic coordinates are calculated, and + all sprites are rendered into the rendering + buffer. The bounding rectangles are fed + into the display surface dirtyrect table. + 4. The dirtyrect table compiled in step 3 is + merged into the work dirtyrect table. The + result covers all areas that need to be + updated to remove old sprites and make the + new ones visible. + 5. The dirtyrect table compiled in step 4 is + used to blit from the rendering buffer to + the display surface. + + On a double buffered display, there is one +dirtyrect table for each display page, and there +is (obviously) a page flip operation after step 5, +but other than that, the algorithm is the same. + + +Command Line Options +-------------------- + + -f Fullscreen + -s Single buffer + Depth = bits + + + //David Olofson diff --git a/programs/games/pig/trunk/aclocal.m4 b/programs/games/pig/trunk/aclocal.m4 new file mode 100644 index 0000000000..065f6b5317 --- /dev/null +++ b/programs/games/pig/trunk/aclocal.m4 @@ -0,0 +1,961 @@ +# generated automatically by aclocal 1.7.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Do all the work for Automake. -*- Autoconf -*- + +# This macro actually does too much some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 8 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +AC_PREREQ([2.54]) + +# Autoconf 2.50 wants to disallow AM_ names. We explicitly allow +# the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], [AC_PACKAGE_TARNAME])dnl + AC_SUBST([VERSION], [AC_PACKAGE_VERSION])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_MISSING_PROG(AMTAR, tar) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl + +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[_am_stamp_count=`expr ${_am_stamp_count-0} + 1` +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.7.1])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# +# Check to make sure that the build environment is sane. +# + +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# -*- Autoconf -*- + + +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 3 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# AM_AUX_DIR_EXPAND + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +# Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50]) + +AC_DEFUN([AM_AUX_DIR_EXPAND], [ +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# AM_PROG_INSTALL_STRIP + +# Copyright 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# serial 4 -*- Autoconf -*- + +# Copyright 1999, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + echo '#include "conftest.h"' > conftest.c + echo 'int i;' > conftest.h + echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=conftest.c object=conftest.o \ + depfile=conftest.Po tmpdepfile=conftest.TPo \ + $SHELL ./depcomp $depcc -c -o conftest.o conftest.c >/dev/null 2>&1 && + grep conftest.h conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[rm -f .deps 2>/dev/null +mkdir .deps 2>/dev/null +if test -d .deps; then + DEPDIR=.deps +else + # MS-DOS does not allow filenames that begin with a dot. + DEPDIR=_deps +fi +rmdir .deps 2>/dev/null +AC_SUBST([DEPDIR]) +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +#serial 2 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 2 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +doit: + @echo done +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST(am__include) +AC_SUBST(am__quote) +AC_MSG_RESULT($_am_result) +rm -f confinc confmf +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# serial 5 + +AC_PREREQ(2.52) + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]) +fi])]) + +# Configure paths for SDL +# Sam Lantinga 9/21/99 +# stolen from Manish Singh +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS +dnl +AC_DEFUN(AM_PATH_SDL, +[dnl +dnl Get the cflags and libraries from the sdl-config script +dnl +AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], + sdl_prefix="$withval", sdl_prefix="") +AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], + sdl_exec_prefix="$withval", sdl_exec_prefix="") +AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], + , enable_sdltest=yes) + + if test x$sdl_exec_prefix != x ; then + sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_args="$sdl_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi + fi + + AC_REQUIRE([AC_CANONICAL_TARGET]) + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) + min_sdl_version=ifelse([$1], ,0.11.0,$1) + AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) + no_sdl="" + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" +dnl +dnl Now check if the installed SDL is sufficiently new. (Also sanity +dnl checks the results of sdl-config to some extent +dnl + rm -f conf.sdltest + AC_TRY_RUN([ +#include +#include +#include +#include "SDL.h" + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + AC_TRY_LINK([ +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(SDL_CFLAGS) + AC_SUBST(SDL_LIBS) + rm -f conf.sdltest +]) + diff --git a/programs/games/pig/trunk/config.guess b/programs/games/pig/trunk/config.guess new file mode 100644 index 0000000000..f1657bbc46 --- /dev/null +++ b/programs/games/pig/trunk/config.guess @@ -0,0 +1,1363 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. + +timestamp='2002-09-03' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# This shell variable is my proudest work .. or something. --bje + +set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ; +(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old) + || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ; +dummy=$tmpdir/dummy ; +files="$dummy.c $dummy.o $dummy.rel $dummy" ; +trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + rm -f $files ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; +unset files' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + eval $set_cc_for_build + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + case `$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + 3-1307) + UNAME_MACHINE="alphaev7" + ;; + esac + fi + rm -f $dummy.s $dummy && rmdir $tmpdir + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`$dummy` + if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi + rm -f $dummy.c $dummy && rmdir $tmpdir + fi ;; + esac + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 + rm -f $dummy.c $dummy && rmdir $tmpdir + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3D:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c && rmdir $tmpdir + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i386-pc-interix3 + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + rm -f $dummy.c && rmdir $tmpdir + test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + rm -f $dummy.c && rmdir $tmpdir + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + echo `uname -p`-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0 +rm -f $dummy.c $dummy && rmdir $tmpdir + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/programs/games/pig/trunk/config.sub b/programs/games/pig/trunk/config.sub new file mode 100644 index 0000000000..1dea9b79d5 --- /dev/null +++ b/programs/games/pig/trunk/config.sub @@ -0,0 +1,1470 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002 Free Software Foundation, Inc. + +timestamp='2002-09-05' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program 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 +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39 | mipstx39el \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3d) + basic_machine=alpha-cray + os=-unicos + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic4x | c4x*) + basic_machine=tic4x-unknown + os=-coff + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + windows32) + basic_machine=i386-pc + os=-windows32-msvcrt + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto*) + os=-nto-qnx + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/programs/games/pig/trunk/configure b/programs/games/pig/trunk/configure new file mode 100644 index 0000000000..60c4be2c95 --- /dev/null +++ b/programs/games/pig/trunk/configure @@ -0,0 +1,4713 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59. +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="pig.c" +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP SDL_CONFIG SDL_CFLAGS SDL_LIBS LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] + --target=TARGET configure for building compilers for TARGET [HOST] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking Speeds up one-time builds + --enable-dependency-tracking Do not reject slow dependency extractors + --disable-sdltest Do not try to compile and run a test SDL program + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-sdl-prefix=PFX Prefix where SDL is installed (optional) + --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking target system type" >&5 +echo $ECHO_N "checking target system type... $ECHO_C" >&6 +if test "${ac_cv_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_target_alias=$target_alias +test "x$ac_cv_target_alias" = "x" && + ac_cv_target_alias=$ac_cv_host_alias +ac_cv_target=`$ac_config_sub $ac_cv_target_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_target_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_target_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_target" >&5 +echo "${ECHO_T}$ac_cv_target" >&6 +target=$ac_cv_target +target_cpu=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +target_vendor=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +target_os=`echo $ac_cv_target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +am__api_version="1.7" +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + # test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE=pig + VERSION=1.0 + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +rm -f .deps 2>/dev/null +mkdir .deps 2>/dev/null +if test -d .deps; then + DEPDIR=.deps +else + # MS-DOS does not allow filenames that begin with a dot. + DEPDIR=_deps +fi +rmdir .deps 2>/dev/null + + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +doit: + @echo done +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + echo '#include "conftest.h"' > conftest.c + echo 'int i;' > conftest.h + echo "${am__include} ${am__quote}conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=conftest.c object=conftest.o \ + depfile=conftest.Po tmpdepfile=conftest.TPo \ + $SHELL ./depcomp $depcc -c -o conftest.o conftest.c >/dev/null 2>&1 && + grep conftest.h conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +echo "$as_me:$LINENO: checking return type of signal handlers" >&5 +echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 +if test "${ac_cv_type_signal+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#ifdef signal +# undef signal +#endif +#ifdef __cplusplus +extern "C" void (*signal (int, void (*)(int)))(int); +#else +void (*signal ()) (); +#endif + +int +main () +{ +int i; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_signal=void +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_signal=int +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 +echo "${ECHO_T}$ac_cv_type_signal" >&6 + +cat >>confdefs.h <<_ACEOF +#define RETSIGTYPE $ac_cv_type_signal +_ACEOF + + + +SDL_VERSION=1.2.0 + +# Check whether --with-sdl-prefix or --without-sdl-prefix was given. +if test "${with_sdl_prefix+set}" = set; then + withval="$with_sdl_prefix" + sdl_prefix="$withval" +else + sdl_prefix="" +fi; + +# Check whether --with-sdl-exec-prefix or --without-sdl-exec-prefix was given. +if test "${with_sdl_exec_prefix+set}" = set; then + withval="$with_sdl_exec_prefix" + sdl_exec_prefix="$withval" +else + sdl_exec_prefix="" +fi; +# Check whether --enable-sdltest or --disable-sdltest was given. +if test "${enable_sdltest+set}" = set; then + enableval="$enable_sdltest" + +else + enable_sdltest=yes +fi; + + if test x$sdl_exec_prefix != x ; then + sdl_args="$sdl_args --exec-prefix=$sdl_exec_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config + fi + fi + if test x$sdl_prefix != x ; then + sdl_args="$sdl_args --prefix=$sdl_prefix" + if test x${SDL_CONFIG+set} != xset ; then + SDL_CONFIG=$sdl_prefix/bin/sdl-config + fi + fi + + + PATH="$prefix/bin:$prefix/usr/bin:$PATH" + # Extract the first word of "sdl-config", so it can be a program name with args. +set dummy sdl-config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_SDL_CONFIG+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $SDL_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" + ;; +esac +fi +SDL_CONFIG=$ac_cv_path_SDL_CONFIG + +if test -n "$SDL_CONFIG"; then + echo "$as_me:$LINENO: result: $SDL_CONFIG" >&5 +echo "${ECHO_T}$SDL_CONFIG" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + min_sdl_version=$SDL_VERSION + echo "$as_me:$LINENO: checking for SDL - version >= $min_sdl_version" >&5 +echo $ECHO_N "checking for SDL - version >= $min_sdl_version... $ECHO_C" >&6 + no_sdl="" + if test "$SDL_CONFIG" = "no" ; then + no_sdl=yes + else + SDL_CFLAGS=`$SDL_CONFIG $sdlconf_args --cflags` + SDL_LIBS=`$SDL_CONFIG $sdlconf_args --libs` + + sdl_major_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + sdl_minor_version=`$SDL_CONFIG $sdl_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_sdltest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + rm -f conf.sdltest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +#include +#include "SDL.h" + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main (int argc, char *argv[]) +{ + int major, minor, micro; + char *tmp_version; + + /* This hangs on some systems (?) + system ("touch conf.sdltest"); + */ + { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_sdl_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_sdl_version"); + exit(1); + } + + if (($sdl_major_version > major) || + (($sdl_major_version == major) && ($sdl_minor_version > minor)) || + (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); + printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); + printf("*** to point to the correct copy of sdl-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + + +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +no_sdl=yes +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_sdl" = x ; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + : + else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + if test "$SDL_CONFIG" = "no" ; then + echo "*** The sdl-config script installed by SDL could not be found" + echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the SDL_CONFIG environment variable to the" + echo "*** full path to sdl-config." + else + if test -f conf.sdltest ; then + : + else + echo "*** Could not run SDL test program, checking why..." + CFLAGS="$CFLAGS $SDL_CFLAGS" + LIBS="$LIBS $SDL_LIBS" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include "SDL.h" + +int main(int argc, char *argv[]) +{ return 0; } +#undef main +#define main K_and_R_C_main + +int +main () +{ + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding SDL or finding the wrong" + echo "*** version of SDL. If it is not finding SDL, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means SDL was incorrectly installed" + echo "*** or that you have moved SDL since it was installed. In the latter case, you" + echo "*** may want to edit the sdl-config script: $SDL_CONFIG" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + SDL_CFLAGS="" + SDL_LIBS="" + { { echo "$as_me:$LINENO: error: *** SDL version $SDL_VERSION required!" >&5 +echo "$as_me: error: *** SDL version $SDL_VERSION required!" >&2;} + { (exit 1); exit 1; }; } + + fi + + + rm -f conf.sdltest + +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS $SDL_LIBS" + + +echo "$as_me:$LINENO: checking for IMG_Load in -lSDL_image" >&5 +echo $ECHO_N "checking for IMG_Load in -lSDL_image... $ECHO_C" >&6 +if test "${ac_cv_lib_SDL_image_IMG_Load+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lSDL_image -lSDL + $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char IMG_Load (); +int +main () +{ +IMG_Load (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_SDL_image_IMG_Load=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_SDL_image_IMG_Load=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_SDL_image_IMG_Load" >&5 +echo "${ECHO_T}$ac_cv_lib_SDL_image_IMG_Load" >&6 +if test $ac_cv_lib_SDL_image_IMG_Load = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSDL_IMAGE 1 +_ACEOF + + LIBS="-lSDL_image $LIBS" + +else + { { echo "$as_me:$LINENO: error: You need the SDL_image library to compile this software. + Get it at http://www.libsdl.org/projects/SDL_image/" >&5 +echo "$as_me: error: You need the SDL_image library to compile this software. + Get it at http://www.libsdl.org/projects/SDL_image/" >&2;} + { (exit 1); exit 1; }; } +fi + +LIBS="$LIBS -lSDL_image" + +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS $SDL_LIBS" + + ac_config_files="$ac_config_files Makefile" +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then we branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +cat >confdef2opt.sed <<\_ACEOF +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +t quote +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +t quote +d +: quote +s,[ `~#$^&*(){}\\|;'"<>?],\\&,g +s,\[,\\&,g +s,\],\\&,g +s,\$,$$,g +p +_ACEOF +# We use echo to avoid assuming a particular line-breaking character. +# The extra dot is to prevent the shell from consuming trailing +# line-breaks from the sub-command output. A line-break within +# single-quotes doesn't work because, if this script is created in a +# platform that uses two characters for line-breaks (e.g., DOS), tr +# would break. +ac_LF_and_DOT=`echo; echo .` +DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` +rm -f confdef2opt.sed + + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by $as_me, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@target@,$target,;t t +s,@target_cpu@,$target_cpu,;t t +s,@target_vendor@,$target_vendor,;t t +s,@target_os@,$target_os,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@AMTAR@,$AMTAR,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@CPP@,$CPP,;t t +s,@SDL_CONFIG@,$SDL_CONFIG,;t t +s,@SDL_CFLAGS@,$SDL_CFLAGS,;t t +s,@SDL_LIBS@,$SDL_LIBS,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue + # Extract the definition of DEP_FILES from the Makefile without + # running `make'. + DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"` + test -z "$DEPDIR" && continue + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n -e '/^U = / s///p' < "$mf"` + test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR" + # We invoke sed twice because it is the simplest approach to + # changing $(DEPDIR) to its actual value in the expansion. + for file in `sed -n -e ' + /^DEP_FILES = .*\\\\$/ { + s/^DEP_FILES = // + :loop + s/\\\\$// + p + n + /\\\\$/ b loop + p + } + /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/programs/games/pig/trunk/configure.in b/programs/games/pig/trunk/configure.in new file mode 100644 index 0000000000..b7e280199b --- /dev/null +++ b/programs/games/pig/trunk/configure.in @@ -0,0 +1,43 @@ +dnl Process this file with autoconf to produce a configure script. + +dnl Simple Automake init +AC_INIT(pig.c) + +AC_CANONICAL_HOST +AC_CANONICAL_TARGET + +AM_INIT_AUTOMAKE(pig, 1.0) + +dnl Check for various tools +AC_PROG_CC +AC_PROG_CPP + +dnl Check some compiler/platform stuff +AC_TYPE_SIGNAL + +dnl------------------------------------------------------- +dnl Checks for SDL +dnl------------------------------------------------------- +SDL_VERSION=1.2.0 +AM_PATH_SDL($SDL_VERSION,:, + AC_MSG_ERROR([*** SDL version $SDL_VERSION required!]) +) +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS $SDL_LIBS" + +dnl------------------------------------------------------- +dnl Checks for SDL_image +dnl------------------------------------------------------- +AC_CHECK_LIB(SDL_image, IMG_Load,, + AC_MSG_ERROR([You need the SDL_image library to compile this software. + Get it at http://www.libsdl.org/projects/SDL_image/]), + -lSDL +) +LIBS="$LIBS -lSDL_image" + +dnl Get compile and linking flags +CFLAGS="$CFLAGS $SDL_CFLAGS" +LIBS="$LIBS $SDL_LIBS" + +dnl Generate Makefile +AC_OUTPUT(Makefile) diff --git a/programs/games/pig/trunk/depcomp b/programs/games/pig/trunk/depcomp new file mode 100644 index 0000000000..65899658ee --- /dev/null +++ b/programs/games/pig/trunk/depcomp @@ -0,0 +1,411 @@ +#! /bin/sh + +# depcomp - compile a program generating dependencies as side-effects +# Copyright 1999, 2000 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi +# `libtool' can also be set to `yes' or `no'. + +depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. This file always lives in the current directory. + # Also, the AIX compiler puts `$object:' at the start of each line; + # $object doesn't have directory information. + stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + outname="$stripped.o" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 AIX compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + + tmpdepfile1="$object.d" + tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'` + if test "$libtool" = yes; then + "$@" -Wc,-MD + else + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + if test -f "$tmpdepfile1"; then + tmpdepfile="$tmpdepfile1" + else + tmpdepfile="$tmpdepfile2" + fi + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a space and a tab in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + test -z "$dashmflag" && dashmflag=-M + ( IFS=" " + case " $* " in + *" --mode=compile "*) # this is libtool, let us make it quiet + for arg + do # cycle over the arguments + case "$arg" in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + # X makedepend + ( + shift + cleared=no + for arg in "$@"; do + case $cleared in no) + set ""; shift + cleared=yes + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift;; + -*) + ;; + *) + set fnord "$@" "$arg"; shift;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tail +3 "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the proprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + ( IFS=" " + case " $* " in + *" --mode=compile "*) + for arg + do # cycle over the arguments + case $arg in + "--mode=compile") + # insert --quiet before "--mode=compile" + set fnord "$@" --quiet + shift # fnord + ;; + esac + set fnord "$@" "$arg" + shift # fnord + shift # "$arg" + done + ;; + esac + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + ) & + proc=$! + "$@" + stat=$? + wait "$proc" + if test "$stat" != 0; then exit $stat; fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 diff --git a/programs/games/pig/trunk/dirty.c b/programs/games/pig/trunk/dirty.c new file mode 100644 index 0000000000..5722c929dc --- /dev/null +++ b/programs/games/pig/trunk/dirty.c @@ -0,0 +1,176 @@ +/* +------------------------------------------------------------ + Fixed Rate Pig - a fixed logic frame rate demo +------------------------------------------------------------ + * Copyright (C) 2004 David Olofson + * + * This software is released under the terms of the GPL. + * + * Contact author for permission if you want to use this + * software, or work derived from it, under other terms. + */ + +#include +#include "engine.h" + +/* Approximate worth of one dirtyrect in pixels. */ +#define PIG_WORST_MERGE 300 + +/* + * If the merged result gets at most this many percent + * bigger than the larger of the two input rects, + * accept it as Perfect. + */ +#define PIG_INSTANT_MERGE 10 + + +PIG_dirtytable *pig_dirty_open(int size) +{ + PIG_dirtytable *pdt = (PIG_dirtytable *)malloc(sizeof(PIG_dirtytable)); + if(!pdt) + return NULL; + + pdt->size = size; + pdt->rects = (SDL_Rect *)calloc(size, sizeof(SDL_Rect)); + if(!pdt->rects) + { + free(pdt); + return NULL; + } + + pdt->count = 0; + pdt->best = 0; + return pdt; +} + + +void pig_dirty_close(PIG_dirtytable *pdt) +{ + free(pdt->rects); + free(pdt); +} + + +void pig_mergerect(SDL_Rect *from, SDL_Rect *to) +{ + int x1 = from->x; + int y1 = from->y; + int x2 = from->x + from->w; + int y2 = from->y + from->h; + if(to->x < x1) + x1 = to->x; + if(to->y < y1) + y1 = to->y; + if(to->x + to->w > x2) + x2 = to->x + to->w; + if(to->y + to->h > y2) + y2 = to->y + to->h; + to->x = x1; + to->y = y1; + to->w = x2 - x1; + to->h = y2 - y1; +} + + +void pig_intersectrect(SDL_Rect *from, SDL_Rect *to) +{ + int Amin, Amax, Bmin, Bmax; + Amin = to->x; + Amax = Amin + to->w; + Bmin = from->x; + Bmax = Bmin + from->w; + if(Bmin > Amin) + Amin = Bmin; + to->x = Amin; + if(Bmax < Amax) + Amax = Bmax; + to->w = Amax - Amin > 0 ? Amax - Amin : 0; + + Amin = to->y; + Amax = Amin + to->h; + Bmin = from->y; + Bmax = Bmin + from->h; + if(Bmin > Amin) + Amin = Bmin; + to->y = Amin; + if(Bmax < Amax) + Amax = Bmax; + to->h = Amax - Amin > 0 ? Amax - Amin : 0; +} + + +void pig_dirty_add(PIG_dirtytable *pdt, SDL_Rect *dr) +{ + int i, j, best_i, best_loss; + /* + * Look for merger candidates. + * + * We start right before the best match we + * had the last time around. This can give + * us large numbers of direct or quick hits + * when dealing with old/new rects for moving + * objects and the like. + */ + best_i = -1; + best_loss = 100000000; + if(pdt->count) + i = (pdt->best + pdt->count - 1) % pdt->count; + for(j = 0; j < pdt->count; ++j) + { + int a1, a2, am, ratio, loss; + SDL_Rect testr; + + a1 = dr->w * dr->h; + + testr = pdt->rects[i]; + a2 = testr.w * testr.h; + + pig_mergerect(dr, &testr); + am = testr.w * testr.h; + + /* Perfect or Instant Pick? */ + ratio = 100 * am / (a1 > a2 ? a1 : a2); + if(ratio < PIG_INSTANT_MERGE) + { + /* Ok, this is good enough! Stop searching. */ + pig_mergerect(dr, &pdt->rects[i]); + pdt->best = i; + return; + } + + loss = am - a1 - a2; + if(loss < best_loss) + { + best_i = i; + best_loss = loss; + pdt->best = i; + } + + ++i; + i %= pdt->count; + } + /* ...and if the best result is good enough, merge! */ + if((best_i >= 0) && (best_loss < PIG_WORST_MERGE)) + { + pig_mergerect(dr, &pdt->rects[best_i]); + return; + } + + /* Try to add to table... */ + if(pdt->count < pdt->size) + { + pdt->rects[pdt->count++] = *dr; + return; + } + + /* Emergency: Table full! Grab best candidate... */ + pig_mergerect(dr, &pdt->rects[best_i]); +} + + +void pig_dirty_merge(PIG_dirtytable *pdt, PIG_dirtytable *from) +{ + int i; + for(i = 0; i < from->count; ++i) + pig_dirty_add(pdt, from->rects + i); +} diff --git a/programs/games/pig/trunk/dirty.h b/programs/games/pig/trunk/dirty.h new file mode 100644 index 0000000000..56dc5e19d2 --- /dev/null +++ b/programs/games/pig/trunk/dirty.h @@ -0,0 +1,41 @@ +/* +------------------------------------------------------------ + Fixed Rate Pig - a fixed logic frame rate demo +------------------------------------------------------------ + * Copyright (C) 2004 David Olofson + * + * This software is released under the terms of the GPL. + * + * Contact author for permission if you want to use this + * software, or work derived from it, under other terms. + */ + +#ifndef PIG_DIRTY_H +#define PIG_DIRTY_H + +/* A table of dirtyrects for one display page */ +typedef struct PIG_dirtytable +{ + int size; /* Table size */ + SDL_Rect *rects; /* Table of rects */ + int count; /* # of rects currently used */ + int best; /* Merge testing starts here! */ +} PIG_dirtytable; + + +PIG_dirtytable *pig_dirty_open(int size); +void pig_dirty_close(PIG_dirtytable *pdt); + +/* Add rectangle 'dr' to table 'pdt' */ +void pig_dirty_add(PIG_dirtytable *pdt, SDL_Rect *dr); + +/* Merge table 'from' into 'pdt' */ +void pig_dirty_merge(PIG_dirtytable *pdt, PIG_dirtytable *from); + +/* Extend 'to' to a new rect that includes both 'from' and 'to' */ +void pig_mergerect(SDL_Rect *from, SDL_Rect *to); + +/* Clip 'to' into a rect that is the intersection of 'from' and 'to' */ +void pig_intersectrect(SDL_Rect *from, SDL_Rect *to); + +#endif /* PIG_DIRTY_H */ diff --git a/programs/games/pig/trunk/dirtyrects.txt b/programs/games/pig/trunk/dirtyrects.txt new file mode 100644 index 0000000000..2c45ce692e --- /dev/null +++ b/programs/games/pig/trunk/dirtyrects.txt @@ -0,0 +1,83 @@ + + Smart Dirty Rectangle Management + -------------------------------- + +pig_dirty() contains an algorithm that tries to find +the the best dirtyrect candidates for merging. While +searching, it looks out for perfect or sufficiently +good candidates. + +(Perfect candidate:) + The merged rectangle is of the same size + as the largest of the two input rectangles: + + Amerged <= MAX(A1, A2) + + We don't actually test for this, but rather for... + +Instant Pick candidate: + Not Perfect, but good enough to be treated + as such, considering the cost of going on + searching for a better candidate: + Amerged 100 / MAX(A1, A2) - 100 <= PIG_INSTANT_MERGE + + (That is, the area of the merged rect must be + no more than PIG_INSTANT_MERGE % bigger than + the area of the larger of the two input rects.) + + Note that this is also about how likely it is + that thereis* a better candidate. Assuming + that PIG_INSTANT_MERGE is set to a sensible + value, it is not very likely at all. There + would have to be another dirtyrect nearby, and + the chance of that being a better match is + rather low, since that would most likely have + caused it to be merged with the tested dirtyrect + long before our new rect came in. + +(Good candidate:) + The area of the merged rectangle is smaller + than the total area of the two input rectangles: + + (Amerged - A1 - A2) < 0 + + We don't actually test for this, but rather for... + +Acceptable candidate: + The area of the merged rectangle is larger + than the total of the two input rectangles, but + since there is some per-rectangle overhead, + merging is still a win: + + (Amerged - A1 - A2) <= PIG_WORST_MERGE + + The default setting assumes that the cost of a + rectangle is in the range of 300 pixels. One + should probably benchmark a few different systems + to see if that's reasonable. + +Unacceptable candidate: + The area of the merged rectangle is larger than + the total of the input rectangles to the degree + that merging is a definite loss: + + (Amerged - A1 - A2) > PIG_WORST_MERGE + +The algorithm instantly returns Perfect candidates as +solutions. If there are only Good and Acceptable +candidates, the best one (lowest number of wasted +pixels) is the solution. + +If there are only Unacceptable candidates, there is no +sensible merger solution, so pig_dirty() will try to add +a new dirtyrect. + +If that fails (table full), the best candidate is used, +even though it would have been Unacceptable under normal +circumstances. + + +TODO: Thereare* more alternatives than just "merge" or +TODO: "don't merge"! For example, it might pay off to +TODO: detect overlapping and clip dirtyrects to avoid +TODO: it, when merging is not a viable option. diff --git a/programs/games/pig/trunk/engine.c b/programs/games/pig/trunk/engine.c new file mode 100644 index 0000000000..054db63f9f --- /dev/null +++ b/programs/games/pig/trunk/engine.c @@ -0,0 +1,1156 @@ +/* +------------------------------------------------------------ + Fixed Rate Pig - a fixed logic frame rate demo +------------------------------------------------------------ + * Copyright (C) 2004 David Olofson + * + * This software is released under the terms of the GPL. + * + * Contact author for permission if you want to use this + * software, or work derived from it, under other terms. + */ + +#include +#include +#include "engine.h" +#include "SDL_image.h" + +/* Size of sprite frame table */ +#define PIG_MAX_SPRITES 1024 + + +/* + * Actually remove an objects. Used internally, + * to remove objects that have been marked for + * destruction. + */ +static void close_object(PIG_object *po); + + +/*---------------------------------------------------------- + Engine +----------------------------------------------------------*/ +PIG_engine *pig_open(SDL_Surface *screen) +{ + PIG_engine *pe = (PIG_engine *)calloc(1, sizeof(PIG_engine)); + if(!pe) + return NULL; + + pe->screen = screen; + if(!pe->screen) + { + pig_close(pe); + return NULL; + } + if((pe->screen->flags & SDL_HWSURFACE) == SDL_HWSURFACE) + { + pe->buffer = SDL_CreateRGBSurface(SDL_SWSURFACE, + screen->w, screen->h, + screen->format->BitsPerPixel, + screen->format->Rmask, + screen->format->Gmask, + screen->format->Bmask, + screen->format->Amask); + if(!pe->buffer) + { + pig_close(pe); + return NULL; + } + pe->surface = pe->buffer; + } + else + pe->surface = screen; + + pe->pages = 1 + ((screen->flags & SDL_DOUBLEBUF) == SDL_DOUBLEBUF); + + pe->interpolation = 1; + pe->time = 0.0; + pe->view.w = pe->surface->w; + pe->view.h = pe->surface->h; + + pe->sprites = (PIG_sprite **)calloc(PIG_MAX_SPRITES, + sizeof(PIG_sprite *)); + if(!pe->sprites) + { + pig_close(pe); + return NULL; + } + + pe->pagedirty[0] = pig_dirty_open(128); + pe->workdirty = pig_dirty_open(256); + if(!pe->pagedirty[0] || !pe->workdirty) + { + pig_close(pe); + return NULL; + } + if(pe->pages > 1) + { + pe->pagedirty[1] = pig_dirty_open(128); + if(!pe->pagedirty[1]) + { + pig_close(pe); + return NULL; + } + } + + return pe; +} + + +void pig_close(PIG_engine *pe) +{ + if(pe->sprites) + { + int i; + for(i = 0; i < pe->nsprites; ++i) + if(pe->sprites[i]) + { + if(pe->sprites[i]->surface) + SDL_FreeSurface(pe->sprites[i]->surface); + free(pe->sprites[i]); + } + free(pe->sprites); + } + while(pe->objects) + close_object(pe->objects); + if(pe->map) + pig_map_close(pe->map); + if(pe->buffer) + SDL_FreeSurface(pe->buffer); + if(pe->pagedirty[0]) + pig_dirty_close(pe->pagedirty[0]); + if(pe->pagedirty[1]) + pig_dirty_close(pe->pagedirty[1]); + if(pe->workdirty) + pig_dirty_close(pe->workdirty); + free(pe); +} + + +void pig_viewport(PIG_engine *pe, int x, int y, int w, int h) +{ + pe->view.x = x; + pe->view.y = y; + pe->view.w = w; + pe->view.h = h; +} + + +int pig_sprites(PIG_engine *pe, const char *filename, int sw, int sh) +{ + int x, y, count, handle; + SDL_Surface *tmp = IMG_Load(filename); + if(!tmp) + { + fprintf(stderr, "Could not load '%s'!\n", filename); + return -1; + } + + handle = pe->nsprites; + + if(!sw) + sw = tmp->w; + if(!sh) + sh = tmp->h; + + /* Disable blending, so we get the alpha channel COPIED! */ + SDL_SetAlpha(tmp, 0, 0); + + count = 0; + for(y = 0; y <= tmp->h - sh; y += sh) + for(x = 0; x <= tmp->w - sw; x += sw) + { + SDL_Rect r; + SDL_Surface *tmp2; + PIG_sprite *s; + if(pe->nsprites >= PIG_MAX_SPRITES) + { + fprintf(stderr, "Sprite bank full!\n"); + return -1; + } + s = (PIG_sprite *)calloc(1, sizeof(PIG_sprite)); + if(!s) + return -1; + s->w = sw; + s->h = sh; + s->hotx = sw / 2; + s->hoty = sh / 2; + s->radius = (sw + sh) / 5; + tmp2 = SDL_CreateRGBSurface(SDL_SWSURFACE, + sw, sh, 32, + 0xff000000, 0x00ff0000, + 0x0000ff00, 0x000000ff); + SDL_SetAlpha(tmp2, 0, 0); + r.x = x; + r.y = y; + r.w = sw; + r.h = sh; + SDL_BlitSurface(tmp, &r, tmp2, NULL); + SDL_SetAlpha(tmp2, SDL_SRCALPHA | SDL_RLEACCEL, + SDL_ALPHA_OPAQUE); + s->surface = SDL_DisplayFormatAlpha(tmp2); + if(!s->surface) + { + fprintf(stderr, "Could not convert sprite %d" + " of '%s'!\n", + count, filename); + return -1; + } + SDL_FreeSurface(tmp2); + pe->sprites[pe->nsprites] = s; + ++pe->nsprites; + ++count; + } + + SDL_FreeSurface(tmp); + return handle; +} + + +int pig_hotspot(PIG_engine *pe, int frame, int hotx, int hoty) +{ + if((frame < 0 ) || (frame >= pe->nsprites)) + return -1; + + switch(hotx) + { + case PIG_UNCHANGED: + break; + case PIG_MIN: + pe->sprites[frame]->hotx = 0; + break; + case PIG_CENTER: + pe->sprites[frame]->hotx = pe->sprites[frame]->w / 2; + break; + case PIG_MAX: + pe->sprites[frame]->hotx = pe->sprites[frame]->w; + break; + default: + pe->sprites[frame]->hotx = hotx; + break; + } + switch(hoty) + { + case PIG_UNCHANGED: + break; + case PIG_MIN: + pe->sprites[frame]->hoty = 0; + break; + case PIG_CENTER: + pe->sprites[frame]->hoty = pe->sprites[frame]->h / 2; + break; + case PIG_MAX: + pe->sprites[frame]->hoty = pe->sprites[frame]->h; + break; + default: + pe->sprites[frame]->hoty = hoty; + break; + } + return 0; +} + + +int pig_radius(PIG_engine *pe, int frame, int radius) +{ + if((frame < 0 ) || (frame >= pe->nsprites)) + return -1; + + pe->sprites[frame]->radius = radius; + return 0; +} + + +void pig_start(PIG_engine *pe, int frame) +{ + PIG_object *po = pe->objects; + pe->time = (double)frame; + pe->frame = frame; + while(po) + { + po->ip.gx = po->ip.ox = po->x; + po->ip.gy = po->ip.oy = po->y; + po->ip.gimage = po->ibase + po->image; + po = po->next; + } +} + + +static void run_timers(PIG_engine *pe, PIG_object *po) +{ + int i; + for(i = 0; i < PIG_TIMERS; ++i) + if(po->timer[i]) + { + --po->timer[i]; + if(!po->timer[i]) + { + PIG_event ev; + ev.type = PIG_TIMER0 + i; + po->handler(po, &ev); + if(!po->id) + return; + } + } +} + + +static void test_offscreen(PIG_engine *pe, PIG_object *po, PIG_sprite *s) +{ + PIG_event ev; + int hx, hy, w, h; + if(s) + { + hx = s->hotx; + hy = s->hoty; + w = s->w; + h = s->h; + } + else + hx = hy = w = h = 0; + ev.cinfo.sides = (po->y - hy < -h) << PIG_TOP_B; + ev.cinfo.sides |= (po->y - hy >= pe->view.h) << PIG_BOTTOM_B; + ev.cinfo.sides |= (po->x - hx < -w) << PIG_LEFT_B; + ev.cinfo.sides |= (po->x - hx >= pe->view.w) << PIG_RIGHT_B; + if(ev.cinfo.sides) + { + float dx = po->x - po->ip.ox; + float dy = po->y - po->ip.oy; + if(ev.cinfo.sides & PIG_TOP) + { + ev.cinfo.y = 0; + if(dy) + ev.cinfo.x = po->ip.ox - dx * po->ip.oy / dy; + } + else if(ev.cinfo.sides & PIG_BOTTOM) + { + ev.cinfo.y = pe->view.h - 1; + if(dy) + ev.cinfo.x = po->ip.ox + dx * + (ev.cinfo.y - po->ip.oy) / dy; + } + if(ev.cinfo.sides & PIG_LEFT) + { + ev.cinfo.x = 0; + if(dx) + ev.cinfo.y = po->ip.oy - dy * po->ip.ox / dx; + } + else if(ev.cinfo.sides & PIG_RIGHT) + { + ev.cinfo.x = pe->view.w - 1; + if(dx) + ev.cinfo.y = po->ip.oy + dy * + (ev.cinfo.x - po->ip.ox) / dx; + } + ev.type = PIG_OFFSCREEN; + po->handler(po, &ev); + } +} + + +/* Test for stationary sprite/sprite collision */ +static void sprite_sprite_one(PIG_object *po, PIG_object *po2, float t, float hitdist) +{ + float dx, dy, dsquare; + PIG_event ev; + int sides; + float ix = po->ip.ox * (1 - t) + po->x * t; + float iy = po->ip.oy * (1 - t) + po->y * t; + float ix2 = po2->ip.ox * (1 - t) + po2->x * t; + float iy2 = po2->ip.oy * (1 - t) + po2->y * t; + dx = ix - ix2; + dy = iy - iy2; + dsquare = dx*dx + dy*dy; + if(dsquare >= hitdist*hitdist) + return; /* Nothing... --> */ + + if(fabs(dsquare) < 1) + sides = PIG_ALL; + else + { + float d = sqrt(dsquare); + dx /= d; + dy /= d; + if(dx < -0.707) + sides = PIG_LEFT; + else if((dx > 0.707)) + sides = PIG_RIGHT; + else + sides = 0; + if(dy < -0.707) + sides |= PIG_TOP; + else if((dy > 0.707)) + sides |= PIG_BOTTOM; + } + ev.type = PIG_HIT_OBJECT; + ev.cinfo.ff = 0.0; + + ev.cinfo.x = ix; + ev.cinfo.y = iy; + ev.cinfo.sides = sides; + if(po->hitmask & po2->hitgroup) + { + ev.obj = po2; + po->handler(po, &ev); + } + + if(po2->id && (po2->hitmask & po->hitgroup)) + { + int s; + ev.cinfo.x = ix2; + ev.cinfo.y = iy2; + s = ((sides >> PIG_LEFT_B) & 1) << PIG_RIGHT_B; + s |= ((sides >> PIG_RIGHT_B) & 1) << PIG_LEFT_B; + s |= ((sides >> PIG_TOP_B) & 1) << PIG_BOTTOM_B; + s |= ((sides >> PIG_BOTTOM_B) & 1) << PIG_TOP_B; + ev.cinfo.sides = s; + ev.obj = po; + po2->handler(po2, &ev); + } +} + + +/* + * Check 'po' against all subsequent objects in the list. + * The testing is step size limited so that neither object + * moves more than 25% of the collision distance between tests. + * (25% should be sufficient for correct direction flags.) + */ +static void test_sprite_sprite(PIG_engine *pe, PIG_object *po, PIG_sprite *s) +{ + int image; + PIG_object *po2, *next2; + for(po2 = po->next; po2; po2 = next2) + { + float hitdist, d, dmax, t, dt; + next2 = po2->next; + if(!po->id || !po2->id) + break; + + /* Check collision groups and masks */ + if(!(po->hitmask & po2->hitgroup) && + !(po2->hitmask & po->hitgroup)) + continue; + + /* Calculate minimum distance */ + hitdist = s ? s->radius : 0; + image = po2->ibase + po2->image; + if((image >= 0) && (image < pe->nsprites)) + hitdist += pe->sprites[image]->radius; + if(hitdist < 1) + hitdist = 1; + + /* Calculate number of testing steps */ + dmax = fabs(po->ip.ox - po->x); + d = fabs(po->ip.oy - po->y); + dmax = d > dmax ? d : dmax; + d = fabs(po2->ip.ox - po2->x); + dmax = d > dmax ? d : dmax; + d = fabs(po2->ip.oy - po2->y); + dmax = d > dmax ? d : dmax; + if(dmax > 1) + dt = hitdist / (dmax * 4); + else + dt = 1; + + /* Sweep test! */ + for(t = 0; t < 1; t += dt) + sprite_sprite_one(po, po2, t, hitdist); + } +} + + +/* + * Returns a non-zero value if the tile at (x, y) is marked for + * collisions on the side indicated by 'mask'. + */ +static __inline__ int check_tile(PIG_map *m, int x, int y, int mask) +{ + int mx, my; + /* + * Must check < 0 first! (Division rounds + * towards zero - not downwards.) + */ + if(x < 0 || y < 0) + return PIG_NONE; + + mx = x / m->tw; + my = y / m->th; + if(mx >= m->w || my >= m->h) + return PIG_NONE; + + return m->hit[my * m->w + mx] & mask; +} + + +int pig_test_map(PIG_engine *pe, int x, int y) +{ + int mx, my; + if(x < 0 || y < 0) + return PIG_NONE; + + mx = x / pe->map->tw; + my = y / pe->map->th; + if(mx >= pe->map->w || my >= pe->map->h) + return PIG_NONE; + + return pe->map->hit[my * pe->map->w + mx]; +} + + +/* + * Simple implementation that checks only for top edge collisions. + * (Full top/bottom/left/right checks with proper handling of + * corners and rows of tiles is a lot more complicated, so I'll + * leave that out for now, rather than hacking something simple + * but incorrect.) + */ +int pig_test_map_vector(PIG_engine *pe, int x1, int y1, int x2, int y2, + int mask, PIG_cinfo *ci) +{ + PIG_cinfo lci; + PIG_map *m = pe->map; + int x, y; + int dist = 2000000000L; + if(!ci) + ci = &lci; + ci->sides = 0; + if((mask & PIG_TOP) && (y1 < y2)) + { + /* Test for tiles that can be hit from the top */ + for(y = y1 + m->th - y1 % m->th; y <= y2; y += m->th) + { + x = x1 + (x2 - x1) * (y - y1) / (y2 - y1); + if(check_tile(m, x, y + 1, PIG_TOP)) + { + dist = (x-x1) * (x-x1) + (y-y1) * (y-y1); + ci->x = x; + ci->y = y - 1; + ci->sides |= PIG_TOP; + break; + } + } + } + if(ci->sides) + ci->ff = sqrt((x2 - x1) * (x2 - x1) + + (y2 - y1) * (y2 - y1) / dist); + return ci->sides; +} + + +static void test_sprite_map(PIG_engine *pe, PIG_object *po, PIG_sprite *s) +{ + PIG_event ev; + if(pig_test_map_vector(pe, po->ip.ox, po->ip.oy, po->x, po->y, + po->tilemask, &ev.cinfo)) + { + ev.type = PIG_HIT_TILE; + po->handler(po, &ev); + } +} + + +static void run_logic(PIG_engine *pe) +{ + PIG_object *po, *next; + int image; + + /* Shift logic coordinates */ + for(po = pe->objects; po; po = po->next) + { + po->ip.ox = po->x; + po->ip.oy = po->y; + } + + if(pe->before_objects) + pe->before_objects(pe); + + for(po = pe->objects; po; po = next) + { + PIG_event ev; + /* + * We must grab the next pointer before + * we call any event handlers, as they + * may cause objects to remove themselves! + */ + next = po->next; + ev.type = PIG_PREFRAME; + po->handler(po, &ev); + } + + for(po = pe->objects; po; po = next) + { + PIG_sprite *s; + next = po->next; + image = po->ibase + po->image; + if((image >= 0) && (image < pe->nsprites)) + s = pe->sprites[image]; + else + s = NULL; + + /* Move! */ + po->vx += po->ax; + po->vy += po->ay; + po->x += po->vx; + po->y += po->vy; + + /* Check and handle events */ + if(po->handler) + { + run_timers(pe, po); + if(po->id) + test_offscreen(pe, po, s); + if(po->id && (po->hitmask || po->hitgroup)) + test_sprite_sprite(pe, po, s); + if(po->id && po->tilemask) + test_sprite_map(pe, po, s); + + } + } + + for(po = pe->objects; po; po = next) + { + next = po->next; + if(po->id) + { + PIG_event ev; + ev.type = PIG_POSTFRAME; + po->handler(po, &ev); + ++po->age; + } + } + + if(pe->after_objects) + pe->after_objects(pe); +} + + +void pig_animate(PIG_engine *pe, float frames) +{ + /* Advance logic time */ + int i = floor(pe->time + frames) - floor(pe->time); + while(i--) + { + run_logic(pe); + ++pe->frame; + } + pe->time += frames; +} + + +void pig_dirty(PIG_engine *pe, SDL_Rect *dr) +{ + SDL_Rect r; + r.x = 0; + r.y = 0; + r.w = pe->surface->w; + r.h = pe->surface->h; + if(dr) + pig_intersectrect(dr, &r); + if(r.w && r.h) + pig_dirty_add(pe->pagedirty[pe->page], &r); +} + + +static void tile_area(PIG_engine *pe, SDL_Rect *r) +{ + SDL_Rect cr; + int x, y, startx, starty, maxx, maxy, tilesperrow; + cr = *r; + cr.x += pe->view.x; + cr.y += pe->view.y; + SDL_SetClipRect(pe->surface, &cr); + + startx = r->x / pe->map->tw; + starty = r->y / pe->map->th; + maxx = (r->x + r->w + pe->map->tw - 1) / pe->map->tw; + maxy = (r->y + r->h + pe->map->th - 1) / pe->map->th; + if(maxx > pe->map->w - 1) + maxx = pe->map->w - 1; + if(maxy > pe->map->h - 1) + maxy = pe->map->h - 1; + tilesperrow = pe->map->tiles->w / pe->map->tw; + + for(y = starty; y <= maxy; ++y) + for(x = startx; x <= maxx; ++x) + { + SDL_Rect from, to; + int c = pe->map->map[y * pe->map->w + x]; + from.x = c % tilesperrow * pe->map->tw; + from.y = c / tilesperrow * pe->map->th; + from.w = pe->map->tw; + from.h = pe->map->th; + to.x = pe->view.x + x * pe->map->tw; + to.y = pe->view.y + y * pe->map->th; + SDL_BlitSurface(pe->map->tiles, &from, + pe->surface, &to); + } +} + + +void remove_sprites(PIG_engine *pe) +{ + SDL_Rect r; + PIG_sprite *s; + PIG_object *po, *next; + + /* + * Remove all objects, using the information that + * remains from the last frame. The actual removal + * is done by drawing over the sprites with tiles + * from the map. + * + * We assume that most objects don't overlap. If + * they do that a lot, we could use a "dirty map" + * to avoid rendering the same tiles multiple times + * in the overlapping areas. + */ + for(po = pe->objects; po; po = next) + { + next = po->next; + if((po->ip.gimage < 0) || (po->ip.gimage >= pe->nsprites)) + continue; + s = pe->sprites[po->ip.gimage]; + r.x = po->ip.gx - s->hotx; + r.y = po->ip.gy - s->hoty; + r.w = s->w; + r.h = s->h; + pig_intersectrect(&pe->view, &r); + if(r.w && r.h) + tile_area(pe, &r); + + /* + * Delete dead objects *after* they've + * been removed from the rendering buffer! + */ + if(!po->id) + close_object(po); + } +} + + +void draw_sprites(PIG_engine *pe) +{ + PIG_dirtytable *pdt; + PIG_sprite *s; + PIG_object *po; + float fframe = pe->time - floor(pe->time); + SDL_SetClipRect(pe->surface, &pe->view); + + /* Swap the work and display/back page dirtytables */ + pdt = pe->workdirty; + pe->workdirty = pe->pagedirty[pe->page]; + pe->pagedirty[pe->page] = pdt; + + /* Clear the display/back page dirtytable */ + pdt->count = 0; + + /* Update positions and render all objects */ + po = pe->objects; + while(po) + { + /* Calculate graphic coordinates */ + if(pe->interpolation) + { + po->ip.gx = po->ip.ox * (1 - fframe) + po->x * fframe; + po->ip.gy = po->ip.oy * (1 - fframe) + po->y * fframe; + } + else + { + po->ip.gx = po->x; + po->ip.gy = po->y; + } + po->ip.gimage = po->ibase + po->image; + + /* Render the sprite! */ + if((po->ip.gimage >= 0) && (po->ip.gimage < pe->nsprites)) + { + SDL_Rect dr; + s = pe->sprites[po->ip.gimage]; + dr.x = po->ip.gx - s->hotx + pe->view.x; + dr.y = po->ip.gy - s->hoty + pe->view.y; + SDL_BlitSurface(pe->sprites[po->ip.gimage]->surface, + NULL, pe->surface, &dr); + /* + * We use the clipped rect for the dirtyrect! + */ + if(dr.w && dr.h) + pig_dirty_add(pdt, &dr); + } + po = po->next; + } + + /* Merge the display/back page table into the work table */ + pig_dirty_merge(pe->workdirty, pdt); +} + + +void pig_refresh(PIG_engine *pe) +{ + remove_sprites(pe); + draw_sprites(pe); +} + + +void pig_refresh_all(PIG_engine *pe) +{ + tile_area(pe, &pe->view); + pig_dirty(pe, NULL); + draw_sprites(pe); +} + + +static void show_rects(PIG_engine *pe, PIG_dirtytable *pdt) +{ + int i; + Uint32 color; + if(!pe->buffer) + { + pe->buffer = SDL_CreateRGBSurface(SDL_SWSURFACE, + pe->screen->w, pe->screen->h, + pe->screen->format->BitsPerPixel, + pe->screen->format->Rmask, + pe->screen->format->Gmask, + pe->screen->format->Bmask, + pe->screen->format->Amask); + if(!pe->buffer) + return; + pe->surface = pe->buffer; + tile_area(pe, &pe->view); + } + if(!pe->buffer) + return; + + pe->direct = 0; + + for(i = 0; i < pdt->count; ++i) + { + SDL_Rect r; + r = pdt->rects[i]; + r.x -= 32; + r.y -= 32; + r.w += 64; + r.h += 64; + SDL_BlitSurface(pe->buffer, &r, pe->screen, &r); + } + + color = SDL_MapRGB(pe->screen->format, 255, 0, 255); + for(i = 0; i < pdt->count; ++i) + { + SDL_Rect r; + r = pdt->rects[i]; + r.h = 1; + SDL_FillRect(pe->screen, &r, color); + r.y += pdt->rects[i].h - 1; + SDL_FillRect(pe->screen, &r, color); + r = pdt->rects[i]; + r.w = 1; + SDL_FillRect(pe->screen, &r, color); + r.x += pdt->rects[i].w - 1; + SDL_FillRect(pe->screen, &r, color); + } +} + + +void pig_flip(PIG_engine *pe) +{ + PIG_dirtytable *pdt = pe->workdirty; + int i; + SDL_SetClipRect(pe->surface, NULL); + + if(pe->show_dirtyrects) + { + show_rects(pe, pdt); + for(i = 0; i < pdt->count; ++i) + { + pdt->rects[i].x -= 32; + pdt->rects[i].y -= 32; + pdt->rects[i].w += 64; + pdt->rects[i].h += 64; + pig_intersectrect(&pe->buffer->clip_rect, &pdt->rects[i]); + } + } + else if(pe->surface == pe->buffer) + for(i = 0; i < pdt->count; ++i) + SDL_BlitSurface(pe->buffer, pdt->rects + i, + pe->screen, pdt->rects + i); + + if((pe->screen->flags & SDL_HWSURFACE) == SDL_HWSURFACE) + { + SDL_Flip(pe->screen); + if(pe->pages > 1) + pe->page = 1 - pe->page; + } + else + SDL_UpdateRects(pe->screen, pdt->count, pdt->rects); + + if(pe->direct) + pe->surface = pe->screen; + else + pe->surface = pe->buffer ? pe->buffer : pe->screen; +} + + +void pig_draw_sprite(PIG_engine *pe, int frame, int x, int y) +{ + SDL_Rect dr; + if(frame >= pe->nsprites) + return; + dr.x = x - pe->sprites[frame]->hotx + pe->view.x; + dr.y = y - pe->sprites[frame]->hoty + pe->view.y; + SDL_BlitSurface(pe->sprites[frame]->surface, NULL, + pe->surface, &dr); +} + + +/*---------------------------------------------------------- + Map +----------------------------------------------------------*/ +PIG_map *pig_map_open(PIG_engine *pe, int w, int h) +{ + if(pe->map) + pig_map_close(pe->map); + + pe->map = (PIG_map *)calloc(1, sizeof(PIG_map)); + if(!pe->map) + return NULL; + + pe->map->owner = pe; + pe->map->w = w; + pe->map->h = h; + pe->map->hit = (unsigned char *)calloc(w, h); + if(!pe->map->hit) + { + pig_map_close(pe->map); + return NULL; + } + pe->map->map = (unsigned char *)calloc(w, h); + if(!pe->map->map) + { + pig_map_close(pe->map); + return NULL; + } + return pe->map; +} + + +void pig_map_close(PIG_map *pm) +{ + PIG_engine *pe = pm->owner; + if(pm->tiles) + SDL_FreeSurface(pm->tiles); + free(pm->hit); + free(pm->map); + free(pe->map); + pe->map = NULL; +} + + +int pig_map_tiles(PIG_map *pm, const char *filename, int tw, int th) +{ + SDL_Surface *tmp; + pm->tw = tw; + pm->th = th; + tmp = IMG_Load(filename); + if(!tmp) + { + fprintf(stderr, "Could not load '%s'!\n", filename); + return -1; + } + pm->tiles = SDL_DisplayFormat(tmp); + if(!pm->tiles) + { + fprintf(stderr, "Could not convert '%s'!\n", filename); + return -1; + } + SDL_FreeSurface(tmp); + return 0; +} + + +void pig_map_collisions(PIG_map *pm, unsigned first, unsigned count, PIG_sides sides) +{ + int i; + if(first > 255) + return; + if(first + count > 255) + count = 255 - first; + for(i = first; i < first + count; ++i) + pm->hitinfo[i] = sides; +} + + +/* + * Load a map from a string (one byte/tile). 'trans' + * is a string used for translating 'data' into integer + * tile indices. Each position in 'trans' corresponds + * to one tile in the tile palette. + */ +int pig_map_from_string(PIG_map *pm, const char *trans, const char *data) +{ + int x, y, z; + + /* Load the map */ + z = 0; + for(y = 0; y < pm->h; ++y) + for(x = 0; x < pm->w; ++x) + { + const char *f; + int c = data[z]; + if(!c) + { + fprintf(stderr, "Map string too short!\n"); + return -1; + } + f = strchr(trans, c); + if(!f) + { + fprintf(stderr, "Character '%c' not in" + " the translation string!\n", + c); + return -1; + } + pm->map[z] = f - trans; + ++z; + } + /* Generate collision map */ + for(y = 0; y < pm->h; ++y) + for(x = 0; x < pm->w; ++x) + pm->hit[y * pm->w + x] = + pm->hitinfo[pm->map[y * pm->w + x]]; + return 0; +} + + +/*---------------------------------------------------------- + Object +----------------------------------------------------------*/ + + +static PIG_object *get_object(PIG_engine *pe) +{ + PIG_object *po; + if(pe->object_pool) + { + po = pe->object_pool; + pe->object_pool = po->next; + memset(po, 0, sizeof(PIG_object)); + } + else + { + po = (PIG_object *)calloc(1, sizeof(PIG_object)); + if(!po) + return NULL; + } + po->id = ++pe->object_id_counter; + return po; +} + + +static void free_object(PIG_object *po) +{ + po->prev = NULL; + po->next = po->owner->object_pool; + po->owner->object_pool = po; + po->id = 0; +} + + +PIG_object *pig_object_open(PIG_engine *pe, int x, int y, int last) +{ + PIG_object *po = get_object(pe); + if(!po) + return NULL; + + po->owner = pe; + po->tilemask = PIG_ALL; + po->hitmask = 0; + po->hitgroup = 0; + + if(last && pe->objects) + { + PIG_object *lo = pe->objects; + while(lo->next) + lo = lo->next; + po->prev = lo; + po->next = NULL; + lo->next = po; + } + else + { + po->prev = NULL; + po->next = pe->objects; + if(po->next) + po->next->prev = po; + pe->objects = po; + } + + po->x = x; + po->y = y; + po->ip.ox = x; + po->ip.oy = y; + return po; +} + + +static void close_object(PIG_object *po) +{ + if(po == po->owner->objects) + po->owner->objects = po->next; + else if(po->prev) + po->prev->next = po->next; + if(po->next) + po->next->prev = po->prev; + free_object(po); +} + + +void pig_object_close(PIG_object *po) +{ + if(!po->id) + fprintf(stderr, "Object %p closed more than once!\n", po); + po->id = 0; /* Mark for eventual removal and destruction */ +} + + +void pig_object_close_all(PIG_engine *pe) +{ + while(pe->objects) + close_object(pe->objects); +} + + +PIG_object *pig_object_find(PIG_object *start, int id) +{ + PIG_object *pob, *pof; + if(start) + pob = pof = start; + else + { + pof = start->owner->objects; + while(pof) + { + if(pof->id == id) + return pof; + pof = pof->next; + } + return NULL; + } + while(1) + { + if(pob) + { + if(pob->id == id) + return pob; + pob = pob->prev; + } + if(pof) + { + if(pof->id == id) + return pof; + pof = pof->next; + } + else + if(!pob) + return NULL; + } +} diff --git a/programs/games/pig/trunk/engine.h b/programs/games/pig/trunk/engine.h new file mode 100644 index 0000000000..7a88ea1cf6 --- /dev/null +++ b/programs/games/pig/trunk/engine.h @@ -0,0 +1,404 @@ +/* +------------------------------------------------------------ + Fixed Rate Pig - a fixed logic frame rate demo +------------------------------------------------------------ + * Copyright (C) 2004 David Olofson + * + * This software is released under the terms of the GPL. + * + * Contact author for permission if you want to use this + * software, or work derived from it, under other terms. + */ + +#ifndef PIG_ENGINE_H +#define PIG_ENGINE_H + +#include "SDL.h" +#include +#ifndef M_PI +# define M_PI 3.14159265358979323846 /* pi */ +#endif +#include "dirty.h" + + +/*---------------------------------------------------------- + Game Engine +----------------------------------------------------------*/ + +typedef struct PIG_object PIG_object; +typedef struct PIG_engine PIG_engine; + + +/* Interpolated point */ +typedef struct PIG_ipoint +{ + /* From the last logic frame: */ + float ox, oy; /* Position */ + + /* From the last/current rendered frame: */ + int gimage; /* Sprite frame index */ + float gx, gy; /* Interpolated position */ +} PIG_ipoint; + + +/* + * Game logic events + * + * PREFRAME: + * Occurs once per logic frame, before collision and + * off-screen detection, and before timer handlers. + * + * TIMERx: + * Occurs whenever timer x expires. Timers are one- + * shot, but can be reloaded by the handler for + * periodic action. Timer events are handled before + * before collision and off-screen detection. + * + * HIT_TILE: + * Occurs when the hot-spot of an object hits a + * marked side of a tile, and the corresponding bit + * in 'tilemask' is set. + * + * HIT_OBJECT: + * Occurs when the collision circle of an object + * intersects the collision circle of another object, + * provided one or more bits in 'hitgroup' of the + * other object matches bits in 'hitmask'. + * + * OFFSCREEN: + * Occurs when an object is off-screen. This takes + * in account the hot-spot and bounding rectangle of + * the current sprite frame. + * + * POSTFRAME: + * Occurs once per logic frame, after collision + * detection, off-screen detection and all other + * events. + * + */ +#define PIG_TIMERS 3 +typedef enum +{ + PIG_PREFRAME, + PIG_TIMER0, + PIG_TIMER1, + PIG_TIMER2, + PIG_HIT_TILE, + PIG_HIT_OBJECT, + PIG_OFFSCREEN, + PIG_POSTFRAME +} PIG_events; + + +typedef enum +{ + PIG_NONE = 0, + + /* Bit positions */ + PIG_TOP_B = 0, + PIG_BOTTOM_B = 1, + PIG_LEFT_B = 2, + PIG_RIGHT_B = 3, + + /* Masks */ + PIG_TOP = 1 << PIG_TOP_B, + PIG_BOTTOM = 1 << PIG_BOTTOM_B, + PIG_LEFT = 1 << PIG_LEFT_B, + PIG_RIGHT = 1 << PIG_RIGHT_B, + + /* Combined masks */ + PIG_TL = PIG_TOP | PIG_LEFT, + PIG_TR = PIG_TOP | PIG_RIGHT, + PIG_BL = PIG_BOTTOM | PIG_LEFT, + PIG_BR = PIG_BOTTOM | PIG_RIGHT, + PIG_ALL = 0xf, +} PIG_sides; + + +typedef enum +{ + PIG_UNCHANGED = -10000000, + PIG_MIN = -10000001, + PIG_CENTER = -10000002, + PIG_MAX = -10000003 +} PIG_values; + + +/* Collision info */ +typedef struct +{ + float ff; /* Fractional frame */ + int x, y; /* Exact position */ + PIG_sides sides; /* Side of tile hit */ +} PIG_cinfo; + + +typedef struct PIG_event +{ + PIG_events type; + + /* For HIT_TILE, HIT_OBJECT and OFFSCREEN: */ + PIG_cinfo cinfo; /* Detailed collision info */ + + /* For HIT_OBJECT: */ + PIG_object *obj; /* Which object? */ +} PIG_event; + + +/* Logic object */ +struct PIG_object +{ + PIG_engine *owner; + PIG_object *next, *prev; + + int id; /* Unique ID. 0 means "free". */ + + int ibase; /* Sprite frame base index */ + int image; /* Sprite frame offset */ + float x, y; /* Position */ + float vx, vy; /* Speed */ + float ax, ay; /* Acceleration */ + PIG_ipoint ip; + int tilemask; /* Sprite/tile mask [PIG_ALL] */ + + int hitmask; /* Sprite/sprite mask [0] */ + int hitgroup; /* Sprite/sprite group [0] */ + + int timer[PIG_TIMERS]; /* Down-counting timers */ + int age; /* Age timer (logic frames) */ + + int score; + int power; + int target; + int state; + + void (*handler)(PIG_object *po, const PIG_event *ev); + + void *userdata; +}; + + +/* Level map */ +typedef struct PIG_map +{ + PIG_engine *owner; + + int w, h; /* Size of map (tiles) */ + unsigned char *map; /* 2D aray of tile indices */ + unsigned char *hit; /* 2D aray of collision flags */ + + int tw, th; /* Size of one tile (pixels) */ + SDL_Surface *tiles; /* Tile palette image */ + unsigned char hitinfo[256]; /* Collision info for the tiles */ +} PIG_map; + + +/* Sprite frame */ +typedef struct PIG_sprite +{ + int w, h; /* Size of sprite (pixels) */ + int hotx, hoty; /* Hot-spot offset (pixels) */ + int radius; /* Collision zone radius (pixels) */ + SDL_Surface *surface; +} PIG_sprite; + +/* Engine */ +struct PIG_engine +{ + /* Video stuff */ + SDL_Surface *screen; + SDL_Surface *buffer; /* For h/w surface displays */ + SDL_Surface *surface; /* Where to render to */ + int pages; /* # of display VRAM buffers */ + SDL_Rect view; /* Viewport pos & size (pixels) */ + int page; /* Current page (double buffer) */ + PIG_dirtytable *pagedirty[2]; /* One table for each page */ + PIG_dirtytable *workdirty; /* The work dirtytable */ + + /* "Live" switches */ + int interpolation; + int direct; /* 1 ==> render directly to screen */ + int show_dirtyrects; + + /* Time */ + double time; /* Logic time (frames) */ + int frame; /* Logic time; integer part */ + + /* Background graphics */ + PIG_map *map; + + /* Sprites and stuff */ + PIG_object *objects; + PIG_object *object_pool; + int object_id_counter; + int nsprites; + PIG_sprite **sprites; + + /* Logic frame global handlers */ + void (*before_objects)(PIG_engine *pe); + void (*after_objects)(PIG_engine *pe); + + /* Space for user data */ + void *userdata; +}; + + +/* + * Engine + */ +PIG_engine *pig_open(SDL_Surface *screen); +void pig_close(PIG_engine *pe); + +/* Set viewport size and position */ +void pig_viewport(PIG_engine *pe, int x, int y, int w, int h); + +/* Start engine at logic time 'frame' */ +void pig_start(PIG_engine *pe, int frame); + +/* + * Load a sprite palette image. The image is chopped up into + * sprites, based on 'sw' and 'sh', and added as new frames + * in the sprite bank. Default values: + * Hot-spot: (sw/2, sh/2) + * Collision radius: 0.2 * (sw + sh) + * + * Passing 0 for 'sw' and/or 'sh' makes pig_sprites() take + * the respective value from the image width and/or height. + * + * Returns the index of the first frame loaded. + */ +int pig_sprites(PIG_engine *pe, const char *filename, int sw, int sh); + +/* Set hot-spot of sprite 'frame' to (hotx, hoty) */ +int pig_hotspot(PIG_engine *pe, int frame, int hotx, int hoty); + +/* Set sprite/sprite collision zone radius of 'frame' */ +int pig_radius(PIG_engine *pe, int frame, int radius); + +/* Advance logic time by 'frames' logic frames */ +void pig_animate(PIG_engine *pe, float frames); + +/* + * Manually add a dirtyrect for pig_refresh(). + * 'dr' can be outside the engine viewport. + */ +void pig_dirty(PIG_engine *pe, SDL_Rect *dr); + +/* + * Do what's needed to deal with the dirtyrects + * and then make the new frame visible. + */ +void pig_flip(PIG_engine *pe); + +/* + * Refresh the viewport and any additional dirtyrects. + * + * Note that this does not refresh the entire viewport; + * only the areas that have actually changed! + */ +void pig_refresh(PIG_engine *pe); + +/* + * Refresh the whole viewport, including sprites. + */ +void pig_refresh_all(PIG_engine *pe); + +/* Render a sprite "manually", bypassing the engine */ +void pig_draw_sprite(PIG_engine *pe, int frame, int x, int y); + +/* + * Get the collision flags for the tile at (x, y), + * where the unit of x and y is pixels. The return + * is the PIG_sides flags for the tile, or PIG_NONE + * if (x, y) is outside the map. + */ +int pig_test_map(PIG_engine *pe, int x, int y); + +/* + * Find the first "collidable" tile side when going from + * (x1, y1) to (x2, y2). 'mask' determines which tile sides + * are considered for collisions. + * + * Returns the side(s) hit, if any tile was hit. If the return + * is non-zero, the PIG_cinfo struct at 'ci' contains detailed + * information about the collision. + */ +int pig_test_map_vector(PIG_engine *pe, int x1, int y1, int x2, int y2, + int mask, PIG_cinfo *ci); + + +/* + * Map + */ +PIG_map *pig_map_open(PIG_engine *pe, int w, int h); +void pig_map_close(PIG_map *pm); + +/* Load a tile palette image */ +int pig_map_tiles(PIG_map *pm, const char *filename, int tw, int th); + +/* + * Set tile collision info for 'count' tiles, starting at + * 'first'. Each tile in the tile palette has a set of + * PIG_sides flags that determine which sides the tile are + * considered for sprite/map collisions. + */ +void pig_map_collisions(PIG_map *pm, unsigned first, unsigned count, + PIG_sides sides); + +/* + * Load a map from a string (one byte/tile). 'trans' + * is a string used for translating 'data' into integer + * tile indices. Each position in 'trans' corresponds + * to one tile in the tile palette. + */ +int pig_map_from_string(PIG_map *pm, const char *trans, const char *data); + + +/* + * Object + */ + +/* + * Create an object with the initial position (x, y). If + * 'last' is 1, the object will end up last in the + * processing and rendering order, otherwise, first. + * + * Note that relative processing order is very important + * to objects that chase each other and stuff like that! + * If they're placed in the "wrong" order, the tracking + * objects get an extra frame of reaction time, which is + * annoying if it's not what you intend. + */ +PIG_object *pig_object_open(PIG_engine *pe, int x, int y, int last); + +/* + * Delete an object. + * + * Note that objects are never actually deleted. Instead, + * they are placed in a free pool, where pig_object_open() + * looks for objects to recycle. + * + * In fact, they are not even freed when you ask for it, + * but rather kept around until the next rendered frame, + * so they can be removed from the screen correctly. + */ +void pig_object_close(PIG_object *po); + +/* + * Close all objects. + */ +void pig_object_close_all(PIG_engine *pe); + +/* + * Find object by 'id', starting at object 'start'. + * + * The search starts at 'start' and is done in both + * directions in parallel, assuming that the matching + * object is near 'start' in the list. (It usually is + * when dealing with linked objects.) + * + * Returns NULL if the object was not found. + */ +PIG_object *pig_object_find(PIG_object *start, int id); + +#endif /* PIG_ENGINE_H */ diff --git a/programs/games/pig/trunk/evil.png b/programs/games/pig/trunk/evil.png new file mode 100644 index 0000000000000000000000000000000000000000..ca79c1dad68cf78b123aa119d38feb8c6c72fb43 GIT binary patch literal 58131 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�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 literal 0 HcmV?d00001 diff --git a/programs/games/pig/trunk/glassfont.png b/programs/games/pig/trunk/glassfont.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b491ef59439f64630f7b34148385a99659719b GIT binary patch literal 159490 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
    G6&7V85XJ+iM7#G@9i359# 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

    `ze%eX>jHZzP^|zo>-$iGSb8bho zdERXA_I7L5UHtk3C(pj&$%j0DMUe0Qoe>w)t(4Ov%mmK2aDJQqfd{zj+(o|fxU-+P zPdxT9c!p|K#6iW?#t8?)t%nFx-CPyq;|={8t{>+5Jp7bMF(W{Pnxo z`&Nq@ZR$yazeVB|D30;Xi3`9CxL?7$W9aAqPZQu-{Qrae?q7vYDjt7u`F}oiad_Y9 zbGn}5IXm2&vpM@k&ZTFq^empmvv?NI;_~5t0|G=e8`qXsX8-^I07*qoM6N<$f*Xb? ACjbBd literal 0 HcmV?d00001 diff --git a/programs/games/pig/trunk/slime.png b/programs/games/pig/trunk/slime.png new file mode 100644 index 0000000000000000000000000000000000000000..1b5c1002ad055cdd99734afa640298f542d1e03b GIT binary patch literal 69856 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 IM6N<$f(^b literal 0 HcmV?d00001 diff --git a/programs/games/pig/trunk/tiles.png b/programs/games/pig/trunk/tiles.png new file mode 100644 index 0000000000000000000000000000000000000000..822c9dde6b7419d0950b8da200e7ef1356e2942a GIT binary patch literal 44393 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 R4kp~&^HEMkwn`ct{C|)5K1Bck literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/100BOXES.LEV b/programs/games/soko/trunk/100BOXES.LEV new file mode 100644 index 0000000000000000000000000000000000000000..b7836270df83e684b013c43900215f1e6bc3072c GIT binary patch literal 609 zcmYjPTW;ep3?yYENZbdsz#c$H*dyrS7De}?KmFP-Ca&8WP;JF^&|W(y=nfO0Ci%P@^5apFMU2z&B8lSWIH5)~@A3p0CcLJ`rCuUh^(UaU8dACsG> z>Fu5F*c+_#Zv%wvv9yjyArGJ}QY?q{->>7Qxw;*4cFSw;Ubi`OTLG&dM=&NXws80n z)9xp6b0*Hi*uQhCBDovhnLvBH=U6AQvsDEvPj>{eP2C>0nQkG$sSNZXMLV^kc|n7X zj7tutn81-+N~*8=HxwLUjM96O+NrWdBFS%|V0;bTE95ro>qm&m!?NVwJxwo^>VPty zg#}1p%dY|#$`&3tfdQEtNZCNyL$zb3zgp@>+B}D&@2W3YVz11f_5gE2$KQV7A`Nf|872X!}IW|1Ht%F dKu8iJ0I3h+{3O&3v{8Anf~c9_=RY_@)PFj+fd>Ep literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/990602.LEV b/programs/games/soko/trunk/990602.LEV new file mode 100644 index 0000000000000000000000000000000000000000..541a5c72ff89a64753df7fdada93d7d4e3d8fe07 GIT binary patch literal 2377 zcmZ9OZF1W-5QZ0!Yp4I#JpqnDQ4}Tr13zR*?o7`BsTW|6o)e_c3$kgalZhu0fZg|N zSN{I`8k_xWIfc>7VnfI_>^^^df8+D^!sl_cM;I)-`S5b(;4LoXpD@i|IW4 zJnn3^fr26Puq+%052HEPX8ZB|8>Nqzkatsj=c8w;UEOXRQM|V~3~@5gR+8|5$d*ui z*xkYk>~u{F1xu~3x*qkIy65|DwD$-edk!%t=W|i{xO!S_ECDc)f&f~%?3-({_tA1O ze#9XZoi6{J?&pwWt{|qxO8^fQQgpq3jr;Z<(%`o6sLD`Q8k`(pm?{wIO6`I|zX;A- z+;=D&9FY8Rq~yq+Rfe<`K3>Bd7vJ!B(dQ7{_n&$R`3Dc7nS{x6*b1M(n{ekz$KNW` z&9nVk1*d|hBaI3{&xtZitPc3`g$94~Pu+a_weheb?d$mB-s zLwR3Owr#x07E2`#@h=i3=Tz}Qvx*(#+is;MQ3`)Y2jzMr$+V4Pd%QXX zbw@r8D5rRA`n1yL1;mML_!A6~K5IDI(=GYs5ed4=qvE}~(VqWfvfBe0LRRr)8=a54 z$1yw`K%@TPJ3V}jhvtS84Z6t_NY-+Pni=tn;GoxlS2iXUy{tFdTZDm+p}54YOsqQp z77quZshx-<(Sl&1X~Vw+ha25J89as{9=eIszgK+^nyX}sQGPf0gBhxs(<>=M)NQ06 z^(-^is4B9OR##4U<~dEapn>_Wf>6A+;^$dn`ux}psR*Ns@~=GnxWv3;PK5}pcNGTclEM6 zd>H|MXmDT(6w%!R+jaK_-$hRSy-qQy>{iw2wU}@f8WJ4e64&*&FslVdN;hr7r0fXt z=_lj`<`Ldem@*VM!~~@~*M;@0VpDk=lkVfrtg;@|G)EHjRf`@QMzwllL_PhvHkGur zR%5(6?(g9OUQL-AQb5>~$t+gPvE7!i)degpf*yw5RV$bajN;rxf>KD*gY|E|weNm% zlAB?1n@gyy> z5F(yK5fQ?+hN3@*iLc#BIT0!^+)ssD>&I)$k1+4}k^rk^4wOG#76i7jTB7txQnCS1 zA6GLoL$uW8HJoMy$k;0;g8PNRRpq~&d{QFb0LcR0Ni4-{ayCi=1cxZ9&c&Y?5 Hh(G=Y99GY+ literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/AENIGMA.LEV b/programs/games/soko/trunk/AENIGMA.LEV new file mode 100644 index 0000000000000000000000000000000000000000..5ebb8f6b825da585bd01ff3373c5c1704887a0b0 GIT binary patch literal 5650 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 AOaK4? literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/ALBG-BST.LEV b/programs/games/soko/trunk/ALBG-BST.LEV new file mode 100644 index 0000000000000000000000000000000000000000..3d7117a684a58267f48594cc32e20e375bf1b05f GIT binary patch literal 3239 zcmZve-E!Nu7KH(j)Q=MgwJ z1Oe`!wb$O*;AMW({rUTEzu%8GxM+gUb}-on6HPY3My>Xt3Dcdfmz&$7u(1b|kPS9h zJ(FG4Lfc9keZDYjkZQ4DViWER#!Ton=zWjDieTFecC^DB5E+Rq1hU=Z1>M17VHVb5 zmS)$>@?!z9OI`5M4)_awbgAe>ljK$Ygh^OxY{ZaE==jnR$EUku;vwAxe`pbNfV9B2 zj0JuMHp*J*%4oujF_k5+JfnLLXGy}#56J2kT zi;BSXCm;hG+A~&$hBu#@)LbvO%Yycc8-dUtkjY)LnV@~_!T7=*XGAfFh{dqDUKUm3 z$qh{)2i)S2e2JIf@eoL0#)Z(i@dvVJGd5%n<}hhv7K3OxgyjTpSm|SL$&&_e`>(iL z%t{@tO*hSFz z5>a0Wqdw5c4rVB>Z1zqNn}JtK#)TQdEpDovZE7hQlnIdUm?EsvW*fvQ4$=y;xCbh8 z^1VB_NG>FahCxrS30|Nsv0f5gxKZY<|JH^@m|rimd3E}5B*XeH#%%Tkcl`PF@n};M z`%@pAK0R-wo^@s>S4k_--&^ zH)@ATXpx5Uh${pfL)HB17gHk-3;idIUE0 z1E;hC90!@OC;+tV+C8v9SyQ%ANw_Q)kVb|VgiN@*q89A)LMkYN~-bk+I(^KJZmJM^#LJHjd#8(l43m-X8A zZ;C(0ch`vZUl%$2*NUirZ|!{_6CNnW;oHQ%z6Q#nmeY3aM)sX}&Tqv4iW9wtH8-}D zm0yupcx7AY@T_&Ty)TES^ypo3KxblhvL`V1zAxLle1T?;+3TghEy>$%=Eph4ZI}m_ z?Gd*b=QJ9tEt7HfOGjpz3Ipd{@&dO&&hj+b#zk;($;TTt_nW$*wp(p~{WiEvxIJPn zos>Zi4m0-ur{fvlj;p~*>+^(W*N#hMmcjU`b8rUJ3zWQ5b08p!^o}rvSnU_9@WYF0 z{*Ke#hCFn*UF^JGwJ=ZEr~f&jFiS#i+QT z%q-9p30eAfz0B*Ow|#s80nJwXy$4*tT;r2D8`}AD68h47wO+jfqeW7?wfZ%IEP*UJ z^@e5b;@hWh-C)jcIQQp*@N9<8bJWhKoIfAi=*`)J9_3*E;KsZ32$xwd|M&z9PKneeC+QgYSs8#l`=D({+ z9tL2WD1zXK26@y@(mPMyMjbS@kM4G95xlB5@qZ9ITv^J4C+DWg6cNu78DA@Kkx^_n z)L6smJ$3NiL-~n0BVQ!Z1Oa(dMyZtGIZH_DT?M>*eC3~2Ka}g*+ z2;YF_L-%4|It04-`88o`3gXLan#EacvdgpR$U?&nr#x+TGRi8(aDWTtK}*HHuU~Na zrqM|&&avgNIg_91jN3iYFsMwrgC}tWs=_Y(5-K|aXKE5>^UVbG`AEPD hHbY4$CdBXyn?xiDlotu23^V#6mID%pv1pFw`WLgwT`>Rv literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/ALBG1-1.LEV b/programs/games/soko/trunk/ALBG1-1.LEV new file mode 100644 index 0000000000000000000000000000000000000000..d300957a989c5983abc47e46e7d85e4b977cf2a5 GIT binary patch literal 5825 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/ALBG1-2.LEV b/programs/games/soko/trunk/ALBG1-2.LEV new file mode 100644 index 0000000000000000000000000000000000000000..2867ea5c039d6cee8d9b6de80d707c32b52466d1 GIT binary patch literal 4374 zcmYM2%XS;N5r%Q;=1r2-)Qoeo$f6&C7AaqL1)xcaif8-^m~68cpOYu&6DZ%0W-_PE zZrrNsufGZf$k)47|DQkq{pY81u-<~XntXN^lB+I{ey~cT483{V9)0QFuj@?{cn*^* ztT(R}nO`-Z+#k-WOWs`ddYjLq8*FPX{c8U7etr7Tr1uZyKDps{Kcud%2CN}5KiU1H z>nBP71PW7IlqP2bimS724RugQLblaVn?vaACIN~ySTMgWZge^1t@&wD?%uEe__Y~7 zJT8hmJ``Et_oK^^ZuPLWQ}r zMgdhFb9_$`y@7rkJ;oHQn|o7C@xqD{Q)g?e#?;$gifNJDTTDyycAr+ZAs*|CpB`g* zc)xDu0KB-fv||4T6PDjivKZp_6N?%3ET-OR>Sit*m833*T*@cU)Ga5v${QfMl-7gjgeHd%eBn_IK|c? zrjb;U&v2Ikh=IWm@G2qo#Hh^PMpMYcI86Pte7_Fc=E&E0Tw4@%iENw*y(#oqO!Cgx zuFfR68mzjbD>#Q!BqS4PSG!1n{I)hCi%&GG3I3CjOw+JK6{{>LX^`nlXDibA??Z#} z?ebvD@6cDBE!juVc%+v>g{D>R8Ap&F#MPiV>u^{(##oAEyIQQ_x6D410GQF78`+U^ zLbUk;3UUM_h{8W&@K>|}29ifpw3zx4-><(sF52GStzTD)sV&Lc-q6ho_IvxvW;c&i z(9L7CWJ2p4ZADFO*49v(bQO?sZW2mDqorEV+-T|2w6GcSy~W>2-1`~Mr&nhS^y8ZZ zOsO~ba4``iMl=qZfiKP}7exU*GJy8^{d&KdwLSNfKLXX3+K^DOEfu)i6su1|3e_kk zsHmZiDC%-Jc{aj_S$ZFieTvFG=2-b_g61-tpSox*R zZ`z!*-b42mj;^|KaxyPngoqE>%sUu#McbyX^nkeuy?BA)L6D*{>kTZ1W>hguiz)HJ zo)8N9!wC=r{!fd)?0+sQ*q=>dYd#8)}h6B178rWZm?BU9M*6U#KfS?c7gK z2738eNzYIMwg0x{D?6Qvn1xF&fk`_^{s}3a-C*HDb$D3MO27G6lDa4gOsjaankudz z?K)(djE?gt))a*tazByC_jgUp^Uf7&^s5{2DY@-}pbUj|hHX6s<9y|;RWKV`EKsQy z`1fH>zvoZkxU|Ur!`$gE0SG9Klev}U5!@w|y;an8R0~`2x=;t!<^6j1FvEFPCUoeM zQ8I!fXIGR916y*D!aNRtK*9pKsmN9BL?s+OrQQ)@KinMLyRtUVkeh7V?3Vp2*k78`{sFnztz)6a3==DpqQkowItP%z+QkiH$>H=OH*G zD^-#4lOOX^0e+fy!1I^m9p2m-s7J!NFkg!=(u!UV44`4HhN=UOQ55o1>9KGOPp6o- zZfhGV^DXh7zjmdYRB0DVgXI3zBAuf}8BndH%{%oX0T9WVg{c*zq)u&Y}O&xim%)$@8Xb=`O(}y4FCX>KMk4MEz zmI-?r@lgib=_hX5RMsvD%Cn%W2vrL&I=*3`DpBV0>hxF2?GOIEV3J>vZqO)r=Bukh z(y9q)?C49ptkaSJcGcB5QQeP~t0C#ZYV@^@ zUZ9^2N+UmX;wgGz5gSm`RhDD8Ix+sUV}%6Tyb1vO3yjK*!A)Whzgx(l0dhk16?{#G zB_Xjw@gA9OMKAm?ZI}7<+J9cWxzi3Ja+j7|8XHh*1%b&p*#dzhcd%_)1n|sTKFR>dDOIzP zR&W4B`gL}j2_u*9$RUWP5uos@ip!&Wz8f%q;{;bCf3>r=VbTF*}rUs?C>RC_`5nlfuto#`>69K>Kb$l``1tw#h;k2U6ono zi9>Od@l~B>*XB2w%@S@+>f;9}*p7}q&(ll}=OVMKolf?=ESw^Ln-8?Zx4YNyCcqrR zyhjXXUsp0oFe!y-X-cDC}u{qUZ@ p&UJ8dOGLpsd!4erl24Rpi&bv2EeWKwV@1P#*8ag4#5(?`;J<>T;$Z*) literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/ALBG1-3.LEV b/programs/games/soko/trunk/ALBG1-3.LEV new file mode 100644 index 0000000000000000000000000000000000000000..5adc82509370154903c0dffa2de70830065d82e0 GIT binary patch literal 2652 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 W?ADD-7=KSi;);p82f=7pJN*ZhCzo;n literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/BAGLE.LEV b/programs/games/soko/trunk/BAGLE.LEV new file mode 100644 index 0000000000000000000000000000000000000000..43e063aa43542ca2552218977dbf544011d08a4e GIT binary patch literal 1712 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/BOXXLE2.LEV b/programs/games/soko/trunk/BOXXLE2.LEV new file mode 100644 index 0000000000000000000000000000000000000000..9d58ce2da6389b44f1da3917b1135f0f1d21cbb9 GIT binary patch literal 8811 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 L^w2)}{oDTn_iqqQ literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/CANTRIP.LEV b/programs/games/soko/trunk/CANTRIP.LEV new file mode 100644 index 0000000000000000000000000000000000000000..c01226b50f01d82ed3a94ef810595094e8ebaf89 GIT binary patch literal 1214 zcmXw3ZEo8<3?^l#jolZ6x?Mn5aJT)ZB&P#*3MrY}22EonPB*;A?g_ew+6EyuB8hxH zNcye6ULEH7WiX=&CXi6VuTY>=Y+=vESn`eoZz#UM^<7u?$6rs=bofkhCD;{{oW=;9 zyrqzAVnnbNvL!T$g*Gg!NE*C;I8T=){~EqKD%P{7WD>`6E37L44`E`FREZ$1iGPE; z{(6^>`{VRwY{USzo_orcit{9VA`jLjXa?{H38W$43g0XA&2hf$o+|U9jXdHS&>0XU zE&;P@wuvl5LlKJ$veLv5-oC%xtozezK0hze|CwVOc*I#1t6n)tg#+1CkU&60I2bX$ z9ZeNJFE8`5Uxx2S8YE3%2LcXK3m9MrZ`~m&siewnHF7lZPxvlhp7+P)D~*je@RO2D zdihqgMiw;!i7EoDDN)wfXrvwA-@2|_%3*)GOw&O3C=IB!8hxUZ^A*4Pg=(lER0SMI zhUD)0;gBEafor_gA|^ zUdpf`+QTS@Ba$r|s_A81OH26Xil6y!>qX?$#fc zl6RBaAAjZ_(;1%-?Rh{UD&aocQ*}UlJeZ8o>Ub^mfBkAZAM!xsmEhAOZF1-+@>WWn bZH9E9DZY*c_;{p@XmQ4TF}?siw(q|IwTk%S literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/CANTRIP2.LEV b/programs/games/soko/trunk/CANTRIP2.LEV new file mode 100644 index 0000000000000000000000000000000000000000..a6f37f651d53844142b9b9e536221fa25ee367cc GIT binary patch literal 892 zcmX9+ZF1T$5Z#q91e_ltC-4#COw;~dSxy-ymsp25;F;Da;7%vU<^=RD9mbOJYTwuD za$nv}ry>99rze-@k!3Cv2&;=e;q8Tm#Ay{tIg@l08D(8l%63rkUtH_j;(96XijQvB z*RMV>8W;y8bHjN}4O&QoEi9}-u?kAUi4t8e%jKdQrrn{gxpmQrLs`)ThHL_8ojC;x zLa}-?Qn&Tj%l&fEkNaWlYv20h#0zPa`2}>5AvgdfaP&&*A_d3~^hpVV8{Y8svRbYB zVSkwNFxKB(J2TqUL690#Hf!KybDTw~f$?BTM8H8~^sR%4)jXd1?)izfkcG1*S2<=0 z4XX<|;4^#&4L4-TP{oZ}Ki(+LB2@^yg`nlqhVkBy6XZ~WOaT=_ux9Lb9PhZ|IlSfWc7MTagNak;`y5yNcx0ci#}LLLf8p%!^zhw^5Y;HWGYr$76*ull(y z#3jtgs*x244mj)oDI+AI3SRI%D=N+mGf+{mwxUJS<>D}m`@VkMLWWe%)SQe{kcg=1 z!!HMq4Wq*?uziMy6=9ikh-_@ma~mCuc4N0Yj_+Olyfs~}@#-6d`v7*u^#zL0k77gR z4j~vIh60)d#{#C1e8OE^-pxOb$LZ@kZAgmdHYwmhe~=I>#YzF6^>&{Nq0RLlusg7^ literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/CELLTYPE.INC b/programs/games/soko/trunk/CELLTYPE.INC new file mode 100644 index 0000000000..3d40f0153b --- /dev/null +++ b/programs/games/soko/trunk/CELLTYPE.INC @@ -0,0 +1,28 @@ + +EOF equ 0xf0 ; image index: +macro EndConf {db 0xff} +tEmpty equ 0000b ; (0xf) - missing +tPlace equ 0001b ; 9 +tPlayer equ 0010b ; 0 +tWall equ 0100b ; 1 +tBlock equ 0110b ; 5 + +tHole equ 0111b ; 2 +tConnect equ 1000b ; 7 +tStConnect equ 1001b ; 8 +tPlate equ 1010b ; 3 +tBroken equ 1011b ; 4 + +tLaserW equ 1100b ; 0xa +tLaserS equ 1101b ; 0xa +tLaserN equ 1110b ; 0xa +tLaserE equ 1111b ; 0xa + +tRedB equ 1000b ; 0xc +tBluB equ 1001b ; 0xb +tGrnB equ 1010b ; 0xd +tYelB equ 1011b ; 0xe + +sSokoban equ 0xf1 +sSokolor equ 0xf2 +sSokonex equ 0xf3 \ No newline at end of file diff --git a/programs/games/soko/trunk/CNF b/programs/games/soko/trunk/CNF new file mode 100644 index 0000000000000000000000000000000000000000..efde248014a9e51e3ea672e11ae70d6ed703d9b8 GIT binary patch literal 80 zcmey&#>NwzpPiqVTA@&qT3q7B*udb(?8wl_;Hbdl_WvU%2bWiAafw1fX>o=kqYI-G ilQW|bqa&jOg9D=zgF}J?gA+png8~pcGC44L{s#blu@kTW literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/CNF.ASM b/programs/games/soko/trunk/CNF.ASM new file mode 100644 index 0000000000..677a39fdfb --- /dev/null +++ b/programs/games/soko/trunk/CNF.ASM @@ -0,0 +1,102 @@ +include "celltype.inc" + +macro Header name, game_type, x, y +{ + db game_type,x,y + local ..label + db ..label-$-1 + db name + ..label: +} + +macro C cell,cnt +{ + if cnt eq + db (cell shl 4) + else + db (cell shl 4)+cnt-1 + end if +} + + +Header 'Sokonex test', sSokonex, 6, 6 + +; # Wall; + Connector; * Player; B Block + +; ###### +; # + # +; # # +; # ++ # +; #* # +; ###### + +C tWall,7 + +C tEmpty,2 +C tConnect +C tEmpty + +C tWall,2 +C tEmpty,4 +C tWall,2 +C tEmpty + +C tConnect,2 +C tEmpty +C tWall,2 +C tPlayer + +C tEmpty,3 +C tWall,7 + +EndConf + +Header 'Just push!', sSokoban, 9, 8 + +; ##### +; ### ### +; # @@@ # +; # # # # +; ## #B# ## +; # B * B # +; # # # +; ######### + +C tEmpty,2 +C tWall,5 +C tEmpty,2 + +C tWall,3 +C tEmpty,3 +C tWall,4 +C tEmpty,2 +C tPlace,3 +C tEmpty,2 +C tWall,2 +C tEmpty,2 + +C tWall +C tEmpty +C tWall +C tEmpty,2 +C tWall,3 +C tEmpty +C tWall +C tBlock +C tWall +C tEmpty +C tWall,3 +C tEmpty +C tBlock +C tEmpty +C tPlayer +C tEmpty +C tBlock +C tEmpty +C tWall,2 +C tEmpty,3 +C tWall +C tEmpty,3 +C tWall,10 + +EndConf diff --git a/programs/games/soko/trunk/DH1.LEV b/programs/games/soko/trunk/DH1.LEV new file mode 100644 index 0000000000000000000000000000000000000000..dc526c481882e7caec6996b239b2eb66d59a8dc3 GIT binary patch literal 1067 zcmYjQO>f&U45g$bP10tSyP; zf&gX0AIv}~$P9i_hA?NC*$Et~10>PhAOnh5#g_`KR3Wa)Ck#tvdvDpMiv%iFwfUKc zq3sS|k3BXUHwd^=bTgk|N}cK|N_1=l^C(&#bx4O#qA8;wwi@G=^?xo<*8utF1Ww(R z=x}s$l_rbCfsqOcHQzYIzb>d4fUX2cvOMQ`qAj>zU$1s~cqR?GO%4_$s7rb~)fL1irNX>0{0qA7QiEh`%N^p>wTx4Yrk zy@b#EL&#xh^W$6j65fAM#IxBF>!Su~EWMUG?rC8tYD;uC>N1XL^w}}S*Lask&>8kc Iqq2KDUnDOG9apA;9Id64_9heEzN6-isSLivmgEM^`Dn|^iO9DNve z!`Aw`1*^BMfdce6!|GKlOUbMC?vp+0?7m8fmMj-j19rmct|a^ytnf6m zwuC5~J3JtyDr{;nf*9?djN+|wxVZY$9KAiYbO)hnh_;`1Ou^8QkYeS@E}U}bI8$hq znt&Ls&uFO%4zfhRmji%aNMmMucec2 zKiFs|pr=+10@Rz@kRx2mVUol@$4UA73CW3`tG`ko;1XB0(-E$sIR892I$XNID8I;K z;Sxf?>zL!}^k8WnbIOj~?315r9l!^hxQQBo3TjJHcL;!F1Li_bBdpwLJikWItHt>b zn9UZ`tMwC1Ok#$D4$tto zqHhOJzxL}()vo-1tmVW&5n5aa4!658R{nYm?(I6-I@an9c#542qKYj;=iW{qznJY` DY;g#A literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/DIM-YORK.LEV b/programs/games/soko/trunk/DIM-YORK.LEV new file mode 100644 index 0000000000000000000000000000000000000000..45d4924208b74d24630d77dcd76065950b107d1f GIT binary patch literal 2156 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 V2&tCOjni;C&lH9d%(qUy{tHzKtmyy% literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/GRIG2002.LEV b/programs/games/soko/trunk/GRIG2002.LEV new file mode 100644 index 0000000000000000000000000000000000000000..084537addb503a2874f8745175a70a580dbca3b9 GIT binary patch literal 3085 zcmaKu+ioMd5r#>&jHC9H!1!1KTF2bP495h@0EZ)#gTFmiEGWnDk|Dya}c^eYLyurtC|7X9ZxfwLLL$ z{PKKwc=Wlut{xuSK>=Q`oX;BOi3_&(J+#ZJggS^&!Zssd{XBVaF>FyHnSNu=lvZUu zmwPXOjDl(JeW^s0bZPOdv@t7jf@#3mGXqYZhdW>rfwwm9c^k0~M-~N{CYw^>fxfx& zh>IsqnN0DAXC#Z(??wCaTuk!M-Q#w+Q*Yjl8oP2>&jgouOC*#`$?@OR{ z*mA56u52?>5A(RWdmLH?dyllN3Y8<)HuQwlgff`g`I%w0gp#ksyEQ8nAv<|_p5#Xt zL;J9Kyh#urT+C{u_sj`uZM3uLHAXtbmkFx!eHk($k46N}oLWDQFVE9_deT0A>xSxj zy}8!(Tg+WE3GU4KJ;YT|au8>|tw+8``_hPNbmixMfZk39KB$=1GjqlY*0FlegA*o= zgZG4xtRE8V#RBU%&KRo&4VyRply&I}XdpqLpS2bLgwC5Y^*z7rhJLNtu{i$OVFBgp z()Va)roE}S3@9GS5QXB`rpqq!Jh~H&=;6`Fr|MhR4v&hoba9_gqgWbZ?#e8hQp#2{ zK3b^+c2UYWV$Ob4SBm0d``8WNH3Ey*%?MOff=wnaB918EnP!BTl$k-Fct4* zIlaxAtZ{5SXrUgqXS%|OfdCj{qSRBw@|k3S7+ zP(G`_C{UXjE9xo8j;&BkCcm~{Q^Twf5ZkeWW;GOBF?a zwz=DEwfGz_8XK8PUKu}b)vz=>yr~gIu``w_K1E3?zoX@};Pak*;tN^sZK{s>$98D{ z`CWmJ?TJRtu8g3KRta(zo%xrtG5Rkam-SkCS5t8{f%l>|isInnms(MlRM=ECy_GE5 zATX)n+rorwE0qK{)G~pqu+e~|Ncs#qy!bRcwRdT69>0#1JA{XMO8mF7xD`ov}>@cbY zpnwN8)`K~tyG`>~zpigKe~#vXw0n_VxO3-vbd*VI{HGF{nT!6p}CyXzbiKaW>ht*zym>U)t;L_iGLJaxtNLX$;8+LaiM4#GD!e zty$>&A3=>3$R%k_fE@W*GS5Wge-a+qSYpJT+9-jB*k(9Fm9CW<`ZuGPCrM6jpVoI@ ztMzr43?Fk+sO^~*Th3F#Wf?io0Yk#fgRdEPrFqAFdSb_OPYsFt0OrMI`~7PDpj~CT z%y_Gj(m@*Nt)pS4F$1JFTA&n6JR;RrOcgR5-jyEIF^ZZW7N6-1w`pfBUpHp8+XuwA zHa-<4mJb3FZ6={t#<$qv2;;Oj7s zF1Nd*&+=XB-b}7=yC!h8ogxK8Qw3Pnn4^&A19x<1;ZJQdsHu9CIxH@?!}_L6#NIb! z5}kI2tTPJ*2E6nzB^9aQ{J7DUQG9H#t7h|6o%x`BzvgTO1uZQ`XV%!Bd33=Edas_R zP%@PZd#)#dm*-b`@$+_Qf84G?c|C6qIOf1q4x-e0B`Ey6fP1CBV9TgZQ_gl)EC*Kp QbbEQzR$l#aam?ZHUu-m4FaQ7m literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/HANDMADE.LEV b/programs/games/soko/trunk/HANDMADE.LEV new file mode 100644 index 0000000000000000000000000000000000000000..258ea3c79cacb7f7a79ed14109e68d25ff26c76e GIT binary patch literal 3064 zcmY+GO>!GI5QV!jR3ytz3Z#-fjv)TXvUUxCl%-^mMJ@o!*=3QjD>=AMpnMI^SW2-t zLt^^p_3MYmJYW5A{>R^c{e6AC{=J5kCS8RrPrBD9DZxKkvf2-PLp`tZ@_c?VIc&5_ z(Gr?uv1o~FlbAI&JhSYvy*Qt2x4LK1#H8^p(qfCa<)~ScJm|~wyV-O{?h>j*Ox?yX zHSX@%q)H;`{;k7}?gtBpXe1>rW;l(~G$#T)24cUPV0`SRSxO59oEUfL9$&{cYGv8T zU_;L^yWMs-(?W%&=AM3FLq^Kg0|(i3Ke-t z@+Tui9(b-rkL1N<;TZ0T`3Cr%940dwK@@WNHEOg5Dxq92#qTNWl7Ek{-s|hSFs*6} zzD_D0_<3I?jgrHt9=(G6VruSs-5Ul;gv{bCNS>#8*6CV;g*{njmrd|KP(qaEg}7~9 zlB~&BC5EPs>ZkW7a@O0$!@^c%0Gk7fT8Ce9XxKMf;#QZetGBAildn=7p!<*hx4g^p z8#MhmL)Z-mKmc@zNUMN52bhIe!Z?K740R$on4_*=DS6iO`bPG2(6r-MBZGO9ihOmd zl74>G^ZMgKDG{SM3Q~0?0az0i^Ps*wU(S$jky7nZv-2V#P>)Qn=u-(s^n)b44lmCi zX0K0D&rJ^j6j_q&0jr>wIC!coBO#haP(b+Sw~f1#8ZsWzMsJ;tWa3KoHWC3O53kDD zTuBr%vgc=l;NY_^Zes_#4_El4B$O9A*P z2gL}jnq|3Ro(vwSZ(o{qv?E?iLI4zj0N*9pE1Wj`=Ejwr$?O@_620ostPwoR3a{b> zo69}WxbNsb_8HeK^ZNITbJ>RXER%Ca=)vNJUiUNHql- zb}=LS^nH*XV`qr!;pz3W9A%%56a+GLWFJo3ZFA>x8feoIaNatSPd}!G#6yzC(beYF zMc@DIOew23rA|<`T|1JnrD=45lqe22^~iCADRf1|zCAM2!e`P1XS-G(O13Z@7r;6F z3YZrn#D=5E5!%_wk_sJw93Bv|w`z`qhO~r=ew{MU*{`UO6)(ua&`EgW#){w6*NP8B zl=Wen*4yn+nUKXFcLVd7k*#DgFA?0br6!)mSHXSX&3v>j>f+`3{nXp-E*wG`oR%-3 zH67`R-y7QiGVw=uPHtZS?{Va>L%$NVtI5uotCuq@&Nm23JT6a+7Yuz8xI_1GC?0ft zf&~ipJ-&E*d~G@P0z4)V>F9`%ZgWISK9aqf2Jhr<90sR0&B!RjRO_h?W}TI&syK!F=eu* zs(yU%6fd^?={N5gV+Ori&PBqH^R5{m2z{eDu-ZY_^u=fIWR{OX^d z8Qy=AaD=L{DnD8DZ3*SB9%?{84m0eTDQJ0W_->>3T}uU906I4BF``Y7OY9>tr!1`Y zLQa!|$vy9g-4=*B_+ys=pV{S0|4T`&qNvhb*Zx`dE8>iBV?*H`0rsXNWVZ`dToA~F zyS+~TG)&>RT!5FKldZz;TVT|JW_mv+@XhG{`aNKlhfyn1x?`}iy8}CGC`Cq;8X-@Lx< z7=HeSp{3Cb;)5lOF2dko>(rdnJJ|f{xx0G^KE3Gx*Kbm!`HTWnVko)?csYca59PfrbH^ zZ*I^8b@3azIlX1fkx@iHv5jVMn6L%edc;g#jvpFc*#Am+d)V=2qALte^|U~qP!Ml_ Gx&03#rAh(- literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/HEYTAK.LEV b/programs/games/soko/trunk/HEYTAK.LEV new file mode 100644 index 0000000000000000000000000000000000000000..55702f50c0cef2644adef438e32def4e74ca3c7a GIT binary patch literal 840 zcmYjPS#sMj3zd5LFwKI0=rI~WSUBbEnHbNh*( z?%J^gskAT>vMh?P6arspz)?CwZGa~3ffyTUT9dK~H%NKcWo{b&QcOHWLFFW_=$*2L zHPD!%_eny}xUQ7?%HygWRe3bPL>H;YWj-JHYXDX{83hM~t_a=QrOufwen!nu=UpQeU zJ$8_&Z}puFq9KJF*73mK<6G6UV-}E)`lx!8h#XAgn6+I?mI+wqbQEK!DA5>*?u1@x znNJ7)aUVkBO-Om9E9iKk8%;YYFUl6A7_e#VI%W?OTL7a2{h^zW*L<9DhoX=CldmN> z#Y>pHt&P>zz8Y5=Hl4(rk4xD`tgdW7e12K2#&4f#a*r)q4IPYaCw#4Cf8}LP4gaDy z|5scK8&&H3cQElSB1=o*lu-{jAu^V|)I)CIRzBGOu%+!RDx22f?!kan$qxtsr z>e4Rlvk7P3cu_V#laSI4ixzd~T* z4=8?o+r6|etqWx>e<>Wf0#qC6jCCI+|L-5mU#z|t9N#7 zKRSQvotFv{D8>NnTd?Vcri}cs%#+!mHP$=hV}J@7Sy`71AlH?F1`8%k(+kfsb1Xs+ zSz&2rwfTsG&M)l4$CE^M6#?Ii=|FVDN)x@5jVKaR6M9Ld@N-{mrRsCLaZh7kR0Wm} zsMIXhKG2&i|IKx~i;pr=Z)TyGx~UDNopi9WE4puA-@S8-8(i;H?6F^jT5tS-gD0~A z%WvP*@dID_fAsx-Bq7u@XTgN%4JsS^@eUU`J9mqPc|_+Gl1QKrz-nKFgdq+DNy~=W z3#(z)q3RA8<%L@;i;qP(K}I63;+OnGPnvvYAlhv62qeHOzckaZ%pET01i=jQk91D?)6f@FRY<8#Q?4*_B(|Jsm?-1Z*tc7{QC`6BA6rMEFZ*VtB33>D#tE}TG_pb5T|1(v=El-~5sn>y|U1tBM& zadWmx>k}si+L6?Dj@s4+D{&PD?(<$g8z6mO>tY9e7;R}HP@SKtn>PIXxE;egvVC|0 z&cNl5To3aO%Gqindq)iBn#}TG`|axmTHibuM7B(g_}ufA*St7OI<|4*M`#Ic`_YzQ z!|vtH^GWsNmbeGwW0L?Q7}H4LL?w(wL|l8PGUo6tZDfPm zTLSE2E#sc?v;JD0+;4~EE-&2j_7e$zzfB+pUVGp%^5&SR%7FG%|VFuB4nXKRV0U;ZXJw^(XS8jR#Ol0I$#qTG} z&|2FgQh-h0OoxS8L#V~yrtN!3E#Z!Dh~dFDqvnY4aPF4ty zfSQ6yZF>6obGFaT^AKeYG}CL#Hc`7FNLF3Y7cG>gOhy<}lHTVth@xA` zcaok490B8!Gu4Q;NRAGkWwQ4H&t5SH1e3Mu^j^??B)h0VdB!Dc&dV$O%!3 zC|8$mwX)AddaT&`0UJ+dnKLvAWr7^3+`#B5Ho;Kv(^oFUFip&iq67vr+WrL;h#*oP zyN`I_$(dW-LZYnz76F>|N!@8A3gsO^gGwH%-L{yPHr@Ss6JL8vo>4(|%9i^Nu7WtQ z&=MZ9QUeQ=@eqtuU`fKs1tAr;kWneD)v9v2~v<{_0um^ULD@LCpb8Dt4)C!Ci9M_LslgHw8ecf z75me8N*S9(bbIr&h{XLi3Xy76JtSZ7v$tpVc41prn+la8BUjsK;vhBTMS&<+!hYD3 zlNka4l#_)b=G&zLbcN-M9En4{6pG^Ihd#4_YqmJz89P=x#9!IwM^w@SMa>iO&hv;n?M1}D=B6)P{C2Sl)JB3X)*gBZ-N z@Z*k@a}I!eyEC<|9FlYFu{`-g4ckcGki8g%z?VQFDZ=o$!JGtO{dTPA(q1_t^gx@Q znhje;{KFISt1v{L5N4!3dI+Jkgl@6b14#ssVH`!!vGAXsyW3521kt>YPvTKp^0CGk zAlN2%OYVS?={e2*aC+(PZiwPCk;Y*fe}W_HNbrz^043mw#N=P(;JZc2!2+bVCrYyf zKCN~TN5I8wOA?qtGGjlXjY-Cojj%jcWIsD~cgv@u%K8(u9&V@Ni(S|to|(E%0s;T( z=g9CnPDn6~_>gpo6iLR+b>_y~g!9%sSu#M6tlw^HHqwk5+i7W}U_--`=pV5Ph`4*( zDh5L2@hA}n2+4SYN0h^mVz7gCLAmG9w)Xag=P5#a0=0bZ{MjrcC{3Epo&2{=@4!5adUr?R=7T9=VoUsDGw(8 zD>JZ-Y!lW~>>7Gbk3{JE8x9Jn+$KDz4rwM5TcY;pu*v;1#_07Q;0TdRnM|J}=WJ$D3NJ1c&|l{saF zvDVe>;kuxAz_COIR4$%v4K@sbnm-knNc7G=k+EcwKEn_cTI^?x-(26tE$+cq$j8m) zx11W0sD!~D5<~A$36>PIMWfK_E+moB=?n09>iBYN{wZwY7BF%&>BNU z9~LPH-l4b$4)&_izT*OCJZW6 zkDrHzwHGZxNw+vy7V4mPHM)|U0x>%pmpvZwq>G64jrq5Db+z%`SYKf}z{NVGi*?*r zbdmxzQf9*-@LetOwh(p%S&zgBX1!jRPqxxcUKYYZGz9*Bwa+V(a!M=!RBDlwhBQNh z5ln6**2~Wqy;LO}+8z*uVzbCxL~fxQ2{+HvG0c&+aZ=a_xG zK2Z08x$R!KYbumaFd>pkUHEAjw_+a%+^_N$+lQ!_n`LbKvB@_c%s6hmd@vD(s!W*q zaXmvD{1pApPTcy<8=NNUGE}D(oQ7W41wy+q|LVSAkLG}Mp*mQXsDnzADQ3U}CMZ}i zi}6oNQUbP zb9&@S>I3*rgg1A(oFnQzEdS~oZT9=+xVFrvXQBao#Io(Mjj+PPr~*P%!^OQ-JP{zq8#0M|A#L}Bq# z8RAiPcmBF|x|_a41Zzu1LEK&jRf!PB^r_i?Jw1NJWXo(2xQ^t5%c>@%y4`SP51o~3hTSg1>1jYmwJuj=wQ!{x|L~Dk zN5RSes4zFnolK>YQACbT4T>bqYBjd!WI+^i^PyseO4y~09?5PkZmmM`Gw=W@TWO4AO%vfw@4DI@3K;0 zFAG7SvYkNI&qqK99wHbgK;We#AojJn|36M#qC^44_5qAxpAd1@&H677lYl@_keZ(Y zIh_AC4}TR&`b4deDuFBF31EtO4EN7;3WT!FUmjsN03bk$F#7kL1Qa~ai^a{&zvtgA f_P}PPeM8}f-zqPmvA!ssP(?c8dp!v!l=}YzXl)yl literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/HOWARD2.LEV b/programs/games/soko/trunk/HOWARD2.LEV new file mode 100644 index 0000000000000000000000000000000000000000..a75f803484fa2fa7617ce739f660c76aac0c8895 GIT binary patch literal 3689 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/HOWARD4.LEV b/programs/games/soko/trunk/HOWARD4.LEV new file mode 100644 index 0000000000000000000000000000000000000000..83d4431b6d33af00e9162f6247b8d0c502fc170b GIT binary patch literal 3393 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 Wf~AL&f5hB?4x>{Xg#b#rkJ(4tngPcE literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/JCT.LEV b/programs/games/soko/trunk/JCT.LEV new file mode 100644 index 0000000000000000000000000000000000000000..ae21dfd63846d9f278744e14b4551ca82481cafc GIT binary patch literal 19577 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 y9uyms|1{8BG%XNEfpCJ9s zQnnbNAV^W-?#z2{-VF6Ht!8ifmA&k)?di*NU87PTzz|} ztJ%fkpRVjVQuB#3&iI_{Ts1ivueoZrH|!&vIoIDFs(QQSSkJXLPIC~|r#8uF(=|bH zFPp49F+t5`XH`GqJJWN+vw35@O5`9DcmPN+Z=(73Fs+}+9KF<$6_O-LnnJ{>)&`w* zO!9!oQRqycHk}+3Cdd=jsi=NrMQ5V2QJ3h|{`V+<9fY&7<$opS%KEXe1i&i41bq^5NB`3S=ng(PvEg zq+nuCCo5e$Z!!!Lr&AG;1l3+W{dMv8Vrh@a;LAEP1i_+Pud|AY*m6XnFk+1SWG1e* zT;w=_aRd2qS-$Q#^#(xC>W^O*wp*?Gd*gQegjnoKWecliDZ3ydTcd@WEZCf}lzfzx zGGZx-AR?n4*2+nEWq!98RQ)@YuZo;f!JMMXmX+vjf{{FfORDMq*1s=g{U&xoCx;SQ z1+^lBH5b@pWZl!^_9#>)oLvi;8;sI+;4g<1$(uQ->Y6Nh;}*o;aXM(!fP>Hvs#(DZ z?<5LgRbacHh|OkOKOVor@&Vr8IlV zXWOPcLT6NBHS8UpOF1DwT9cP(aNAhEioJ$2Xu9BXzW z^T-V22!X|H4bvq_6e@5|x6MW~04F0P^M@90V6291s34{Bc2>sEo`?W~(^56rUvHv41uJQ?b6RYnV@7V@m6? zfMRTjnYZ)%Y!cA~eTPjZW$9_{pdV%S3wwvwE}NW(B_AB}d(+@#IOtqKF0%d4c4lQgOooDt!Q zkDvCu<`>U!Yh*ePV5q&kqy|q`GS4piel6wR9QiOm-laU>1&qv!(J+2-2vNZiz|)B$ z41B_Kgyig?PUCb4~HePIDONU z>1VU~Mc&GE%ku8l{$zi%`P^8j47^#j`?j}t*~DEi0FFEQoF?R5 znV{ z`G~t$WVJ5gq$amwBL2Wg+qmQt!m;cv3e4(O5|_QU`>VUUwm(0{P{}0JLvOBO)!bM{ qFMpnhp~f-l`iByu?>^nG`+hk>pBxc1EC4{1(uH0pmH0chW$+)cTqhO) literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/LOMA.LEV b/programs/games/soko/trunk/LOMA.LEV new file mode 100644 index 0000000000000000000000000000000000000000..2f7e9e5876f55b0cae924d55da1fa0aa0c250643 GIT binary patch literal 3026 zcmZveX>Qv{5QVFovK%?dfVx3nV1Pv1%>3(xlInSS^JNrS+ zEvCmH^p#{DGJn9{=IhOF-xZt}bQDFv3k8uqTuSOah};t{9Wze+ylDbAXfq%?VAUT>L5}V+ zjkavq4rB~g42IM>+cPZtaPJDBHX5xOcJy~AG{!$4X#x7S>)yGvt4Z%4O9hrpw_`{B~q|U8J{QBVaqv%pm|{p z3A(#$`;1c|jocZXDI72$cNtXN55Etp%ORtHEAfEYqHc8s3z^T%9Ch%WzAl0w$njZ! zi=}o=0-$fqyO3-xa8-la)Z+Ve$A7Z&fH7~T8LY#VW(AHPK5r8vh0~fhk&``3zVjfR z;MV6Us;ibmKlYZbwkQqAM>$}*V;M?2}d# zKi+Z`tKv7nQrluPLx1V~8YWG6X@j|`AXDf*a|zRVw~P$-yIUt|wGM5nwJLU~n&P=x zucauqIDDn`c_-n$S3ziQg&A)h`7zYR*=5s&Ll0xa!8onl&okAyABKkrhpIbq7M@9% zyBGlcpe?&FfF&#Q#;U?+tJz`BxUe8(yzG69+lddUu2M}B0V=8ws)=9EBKSUje@j+v zD{AY~InG4xz154(D!M5>+(#Vy`N2ZX@@cdITgt?*B?{d5nvwMx`Tj9C2fzKxig2DZ zK8)nJ^szQx-6#h6h0*59zH;S}H8-CsxH7gp5MZnqjKUb{NGZo2&ONOI$|m{Z&yFKw z8CRT-ruteJ)lk++A#?F#AO?saX4$L@=Xjwyj^TppM))QNdx$QkM)$H){%Mi}F@d^V z$B=EDHk~23)-x&eX|4qGoei*18db3Y=ujH&Aff*(au(cl_Ui=oscSpz9$*iF>aKFq zT{)7oP*>tHEW0oxyn7r9K!#PafDI2_ZFOlbS{mW}pa&oxSFfBFG;xh2b4Nj9DPXVj zXi*x5tW${qK@C>*06@^dLnPj9bxhAu-@idpu@ay$*_9!w+UmynZkL63Yydb%w4vYRy6WI DTTV3r literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/MACROS.INC b/programs/games/soko/trunk/MACROS.INC new file mode 100644 index 0000000000..4cb0765ce7 --- /dev/null +++ b/programs/games/soko/trunk/MACROS.INC @@ -0,0 +1,189 @@ +; new application structure +macro meos_app_start + { + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd __start + dd __end + dd __memory + dd __stack + + if used __params & ~defined __params + dd __params + else + dd 0x0 + end if + + dd 0x0 + } +MEOS_APP_START fix meos_app_start + +macro code + { + __start: + } +CODE fix code + +macro data + { + __data: + } +DATA fix data + +macro udata + { + if used __params & ~defined __params + __params: + db 0 + __end: + rb 255 + else + __end: + end if + __udata: + } +UDATA fix udata + +macro meos_app_end + { + align 32 + rb 2048 + __stack: + __memory: + } +MEOS_APP_END fix meos_app_end + + + +; language for programs +lang fix ru ; ru en fr ge fi +;lang equ ru + + +; optimize the code for size +macro add arg1,arg2 + { + if arg1 in + if arg2 eqtype 0 + if arg2 = 1 + inc arg1 + else + add arg1,arg2 + end if + else + add arg1,arg2 + end if + else + add arg1,arg2 + end if + } + +macro sub arg1,arg2 + { + if arg2 eqtype 0 + if arg2 = 1 + dec arg1 + else + sub arg1,arg2 + end if + else + sub arg1,arg2 + end if + } + +macro mov arg1,arg2 + { + if arg1 in + if arg2 eqtype 0 + if arg2 = 0 + xor arg1,arg1 + else if arg2 = 1 + xor arg1,arg1 + inc arg1 + else if arg2 = -1 + or arg1,-1 + else if arg2 > -128 & arg2 < 128 + push arg2 + pop arg1 + else + mov arg1,arg2 + end if + else + mov arg1,arg2 + end if + else + mov arg1,arg2 + end if + } + + +macro struct name + { + virtual at 0 + name name + sizeof.#name = $ - name + end virtual + } + +; structures used in MeOS +struc process_information + { + .cpu_usage dd ? ; +0 + .window_stack_position dw ? ; +4 + .window_stack_value dw ? ; +6 + .not_used1 dw ? ; +8 + .process_name rb 12 ; +10 + .memory_start dd ? ; +22 + .used_memory dd ? ; +26 + .PID dd ? ; +30 + .x_start dd ? ; +34 + .y_start dd ? ; +38 + .x_size dd ? ; +42 + .y_size dd ? ; +46 + .slot_state dw ? ; +50 + rb (1024-52) + } +struct process_information + +struc system_colors + { + .frame dd ? + .grab dd ? + .grab_button dd ? + .grab_button_text dd ? + .grab_text dd ? + .work dd ? + .work_button dd ? + .work_button_text dd ? + .work_text dd ? + .work_graph dd ? + } +struct system_colors + + +; constants + +; events +EV_IDLE = 0 +EV_TIMER = 0 +EV_REDRAW = 1 +EV_KEY = 2 +EV_BUTTON = 3 +EV_EXIT = 4 +EV_BACKGROUND = 5 +EV_MOUSE = 6 +EV_IPC = 7 +EV_STACK = 8 + +; event mask bits for function 40 +EVM_REDRAW = 1b +EVM_KEY = 10b +EVM_BUTTON = 100b +EVM_EXIT = 1000b +EVM_BACKGROUND = 10000b +EVM_MOUSE = 100000b +EVM_IPC = 1000000b +EVM_STACK = 10000000b \ No newline at end of file diff --git a/programs/games/soko/trunk/MAELSTRM.LEV b/programs/games/soko/trunk/MAELSTRM.LEV new file mode 100644 index 0000000000000000000000000000000000000000..58c14b0e2ad3595aa863686c208a69a2552a934b GIT binary patch literal 2717 zcmZ{m-EJH=423Ca*Y-MgtXa26?m9qU!1<5wsL`&S1P%NOoD{hTkS62Q=zIGKwjZ@A zkOCRV9%(2Jd3Z=sd;j40(fje^=fCg1ef_JiUq65T_~+fHuV4D#pU73x#Sm2TBspl% zTtr8eGHFhOm}JQs3RAIIO{_O5L1T@Zw7c)R8M{x@n?sF^Lk(Fhiyjsmq@)ePZ77x} z>#T&bU<=2F3)5h{7#IZAyaCF9cbE8%JGPKbEl1#Br0dR9Di&Q_dV>{Qs*Fn)07YB{sa31%i3kvsfbYfo-Tf~Q zXPiElcSm|u7X{uom?UNmbupyTX;%3VaKa4x7L3KN1T&kCz@1j2u*_lxqzZh zctfX3A6X!Wg;df_+}+Ps*-KD)AXO|`@6=(E#9~sk^I6I0ex9;5x!2`(L5ZEspnr8! z78(^?*%)3#J`HeZo&#}02s`C+VlUTL?$QQQ!L7tu#Bb! z&9-!;`MZ}1j}Cw`-{aV$x+xIc8`+vr7 zpT;kD|1%edNukt@O^%fw@}H%%v&TQT^yFd%WB`%7NZ`H-1~eZK%VYAoXl!HAho>QQ z6NE50Gt-5q5>0*y*}hOVbIg>X)}IzoDpoGlf#!K!c@YoLqpV8`XqM1tVMC|w zw^$}WHgR6P`us?G1H+7H8feM8`|~_U>GK=1vT|)pJ&!i3X)q=89E~BUk9Kl3l`v50 zWx-vM`9CNf9=mc_I^*o{zL&G#^!7Kw{@XD8V3odwL(;`umKt?=Q-Rsd!F)j)t5gbZ zKR`uzBQh*R)vw2$?>E68C4)ldU)Klevgqrke2F7{Yqs!fXC0vREyT z?zFcxgo0j)Yd~oLFi;y|8_eg~yuM2HxP0MR^Hbx?8rIBhL}aKi zDD?@4)uU!9-Z2JDP^!iq)_a3!{TXyLLf{X4=$FOlCRsJol1?KOC2!$>&<>ARb9}sx zHP!&9oJoU4@2{BPzac2(VTx7w%|krBrdHMu=d4|Z`cT7WRgAn;4yeHcT{%+ekq+xK z{dKq)l7d#{SHHb;g5VQ<>(;76F@gMwF@lfz2(Z`0u)Cv9H|j@?KGI&au6BpDX~iq(lB9tsjP(Bv%pNx$U>23cts IZ_3H;U(^RKd;kCd literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/MARIOB.LEV b/programs/games/soko/trunk/MARIOB.LEV new file mode 100644 index 0000000000000000000000000000000000000000..62c13c787a86fa19eb95c70aa59817a88d91a1d4 GIT binary patch literal 2126 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 B4FdoG literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/MINICOSM.LEV b/programs/games/soko/trunk/MINICOSM.LEV new file mode 100644 index 0000000000000000000000000000000000000000..431a9f7276874a7c1c9e4b9da835c5c00670312e GIT binary patch literal 2117 zcma)7S#H}f5S=0I+HO&R=?QoQOY-{1MNOTLG#|MDofD`>&k52uRJ>4@fk2QY$n$1- z^Je%ypZ|P*`uh}LUY}oH?Xu#Qf^y_2;SS{3kk|Q5zFH2{^2hrCRo_D;XZSv>8H14^ z0)UdhCE%h+bEOaLRbtP^Atg^?>d89g`JjrSt8>K3CDzKDdh z8%1cS={{zE0B?SZD!`hCJitR=86JVLPj9zYv%G-F^e9LW*HM1Xs9CW}nk)@T1*9Pe z#)(mgK~dU4^w39XUq@*vISq-zI-qP|@d_XKNAgX0`O&PpZS_@Zq#`8>$3GXgHHM1nmY;s@O; z$D!HcBl1Dof%_nYAPh+UE@LIKbw5QLi???HeOaseJeo40>lMv7m8#6R8z=$wFhH}?sgujnKQEeNw|*xl7t z#h&+@>!1Hj`SthL?|;0059^IBKKf+In$6kXnoEv5%N95m_wj!7(-5$A#bsA~tHeYX zE%}ob7lZCk`iHBIHuneCD#`7TWOs0J(xOxg#Tpr#trb@lZLwvG;8Oj&F?9dJ`#H>& z^!-=8u1XYrbqUn7PcBb!N?T-u@+yIjz}H2%6|pC*}BDL zh|&_8bEh@y<;mK3)KB>?rC6r^8S-5rL2>Ci$(|w2R?&8bA%!WUls&5O;Q!6ujx;Im zS&XL;2IklWw16+8JBr;g=KkLpcN!xgD||*=-TmJ=n+NR>{U`t-0Y>3f+;Zq%4JPZP z4xZaQV#MeIucY|g_$61Z+M!}OGET@iI(+lg@dY+jRv)O|Nd;@AeDw$Jh}Hj-cG#Ej zXSYmo%{0IxLRFzY*8_nw{a zw!q}W)8GQ;q&XBTmFRD#dSnZ!+U?lm9)3K6OqG=+P<&hw|0XMi`J4J10p2f~vl7|W zEcvSg8{xn79Q2Ai&-U^5VfyCNRdTCnrNTxJS;u~@_t10FxE_ z3)`2-5TTKIZ9}}XAXApXVXXu(*e|7%<+4&`|m5(Y?W!8$uVhq zK%09L3xR!dM(=J5=P1TV>B`MgVO~=i7c#bhT9pDj>oYQ9-N^(j>{}$#W%yA=iSo$+ zH^T(j?U~4!*RY9eKG_@gY%}hJ5uL%xIV4{+qsCJAv`kn1qtUsC7?ejm&K00;g%6G@ zI=Eo>;0pwFK06sP^g@(sR_aM_U>ozZ?(0t8@#W%UK=UkydMZ?n1Z0$nT@9jc72R)V zc%L*tP(fG~*B}Px0f9^tGZM>^_>3dIT79BL$Y3WH#$E4_(B#4itC2-u6*_dfU$gsp W&FAh1{j@*`CTbPnGyu>Em;Md1jL2^Q literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/NOVOBAN.LEV b/programs/games/soko/trunk/NOVOBAN.LEV new file mode 100644 index 0000000000000000000000000000000000000000..245ff5b78fab4a1b599eb8f2b5f8de11d33aef13 GIT binary patch literal 2190 zcmY+F-E!hM5QSSZ0mIyg%nRrdF!{feWJ5AFmpcz2*sz(c+Dcs6%Edl*o*?_R2!<48 ze(e4^=k#guJ|0ig&Tlu*zFD*;nAT(;rFW8SknZDsJgq;U-|1t05hAG%E*dYfie_yH zn;gP!4q=3fZ)GFV8Mi(SX*vm14=&`SHJoHAy-$O#s2knJMF}Q~rz@R5-s|b~*Xw@; z@D=xxBC5EoTS@Rvn{LPmVB{Sd1bw_uCbK`@USD6{o*#FQ(n&l|vZZuhWZG{f&B8CUyo3tCvq8XR z)s2)l?14pL8*S#3EK0UsIwf<~Rv+)v$?U+gX-roIyYktYX!@W@PSz%jT7g(SjPJ6w z!F1v*YHer$PNz`OrbtjC6N6q{sscvoNM;C%Q^kUvc<#}HfPvoQ%aiStv5l^`i4+Yb zkdHNC$I)LiBj>qqTFDFzoO^f7z70dWvF#ZVdI5{Nl5xOj_vn3eQ+I!fY}<0K3B- zaMU5FIDE&u;L{&k%c*Qux3(T1ZFaK<>{xwB@bb|<*s?l<74Pmf*Qxr+XuTjC<;u*} zFq7dBxMd*%#G*}VMr8=#xxH7%4n3C(lveJ=ts4_ZDHmS4Yo%g++=C^1fD4HwhVDLV z*(#pP158fnU#_a4FXQsMU*t+#yR4b4C}a6Td%2W{vNAZRwD#D;m6Fr(py(|Yir;^-U(<*P?pn)9VB($O>*SG4nNGS9Q&6z$s)0QF*C1>9tCSaXYW zL8lM%T$%UG6oh9FUvz9P$;HaZq4S+b*?KmbEJQ%auPCq0z10YmONg`5!5wGP+#3sC<8aplV0`pIbJg;c9=V$FNnZ#>-hhaHHI6q|*f!AOj$7%7g;MHBtvgZ{(uo2M;?*3-KjS^Yno=N;pv zai~1i*)6oBN;c$BPK6}+u(;P%tN#Hkr!v#R$e-tB{*n9p?Kwm@HyX^Ek&xTDM?32C zPFngL>!rr(BX#PjUgH@u7)fG-7q~+Qg&~m=M>8CH zTIbn&H(og!Pfk2}Y6lAJg+dl6dBzosH<9OQUF3(`*GD(HS1uVK^7gS}>y6(ni@j^X zqLq4{@~u7nT&Xm{fXXfcqNLHWh6HxVVAs5&Bqms)Jzj2Br}Nl#`&Dp>TB?8mR%L}G z7}2x!rbJ`;CTp&@(MAg%gHLOcBJUi$z)|GYib>uApcaG zAeu0OK!3}jiPLr(p8o)`qh%Wa literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/ONLINE.LEV b/programs/games/soko/trunk/ONLINE.LEV new file mode 100644 index 0000000000000000000000000000000000000000..74e12269702cac17bbaec62a798b3b7c508e4a4e GIT binary patch literal 712 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/RULES.TXT b/programs/games/soko/trunk/RULES.TXT new file mode 100644 index 0000000000..3d929d6273 --- /dev/null +++ b/programs/games/soko/trunk/RULES.TXT @@ -0,0 +1,180 @@ +SOKOBAN FOR MENUET v0.1 July 2, 2004 + Written in pure assembler by Ivushkin Andrey aka Willow + Main idea, art & graphics + Sokofun for Windows 95 by Games 4 Brains + and Sokoban 2.3 by BjЎrn Kфllmark + + Level designers: + + Alberto Garcia, Aymeric du Peloux, Brian Kent, David Holland, + David W Skinner, Erim Sever, Evgeniy Grigoriev, Franчois Marques, + Frantisek Pokorny, Howard Abed,J franklin Mentzer, Jaques Duthen, + John C Davis, John Polhemus, Kobus Theron, Lee Haywood, Mario Bonenfant, + Martin P Holland, Mic (Jan Reineke), Phil Shapiro, Richard Weston, + Sven Egevad, Ken'ichiro Takahashi (takaken), Thinking Rabbit, + Yoshio Murase, ZICO (Zbigniew Kornas) + + Special thanks to Hirohiko Nakamiya + + More credits: + Masato Hiramatsu, Kazuo Fukushima, Klaus Clemens + + Game uses its own format of levelset files *.LEV + with simple run-length compression + +!!!!NB!!!! +It is strongly recommended that you place application files into C:\menuetos +directory. Otherwise you should change CUR_DIR (SOKO.ASM, line 30) to the +appropriate value! + +Interface + +When loaded, application opens skin file SKIN.RAW in the current directory. +It is an image 16x240 pt. Then so-named "standard" levels SOKO-?.LEV are +read in the same dir. ? means a number within 0 and 9. +You can navigate along the level list pressing PgUp and PgDn keys. User +selects the level desired by pressing keys 0-9. Space key moves focus to the +text field below, so you can enter filename there. +Additional levels are in program subfolder LEV. For example, you wish to load +a levelset file /HD/1/MENUETOS/LEV/AENIGMA.LEV. Then you should enter +lev/aenigma.lev +Within the textbox user can press Backspace. There's no cursor yet :-( +Pressing Enter in the text field is equvalent for button "Load file". + +When in game, pressing Esc restarts the level, pressing Home returns back to +the levelset selection mode. + +Game Rules + +You have a little PUSHER. You will guide him using the cursor-keys. + +SOKOBAN (same as SOKOBLUE or SOKOWAHN) + The pink pyramids have to be pushed onto the marked places. + The problem is: You can only push things, but not pull them. + A level is solved when every pyramid stands on a marked place. + +SOKOLOR + Tiles of the same colour need to be pushed together. + +SOKONEX + Push all CONNECTOR-TILES together! + + Game-items of SOKONEX and their properties: + + PLATE: undestructable, movable, covers holes + HOLE: you can push LASERS and BROKEN PLATES into them + BROKEN PLATE: destructable, movable + CONNECTOR: undestructable, movable + FIXED CONNECTOR: undestructable, not movable + LASER: destructable, movable + BEAM: eleminates LASERS and BROKEN PLATES, paralyses PUSHERS + +The objective is always the same: You must push boxes the right way. +Sometimes tasks seem to be impossible. +But, be sure: There is always a solution! + +To-Do list: + +1. Better interface - I saw XTREE and understood that it's really possible to + write wonderful programs for MenuetOS easily. +2. More skins. And lesser file size... +3. Improve user interaction, I think. +4. Level Editor. Having a great wish you may compose levelsets by yourself and + compile them with FASM - see files CNF.ASM and CNF. +5. Correct bugs, make improvements from opinions of you, respective users of + this application ;-) +6. Include support for XTREE dialogs. + +**************************************** +**************************************** + +СОКОБАН ДЛЯ MENUET v0.1 2 июля 2004 г. + + Написана на чистом ассемблере Ивушкиным Андреем (Willow) + Главная идея, рисунки и графика + Sokofun for Windows 95 от Games 4 Brains + и Sokoban 2.3 от BjЎrn Kфllmark + + Дизайнеры уровней: + + Alberto Garcia, Aymeric du Peloux, Brian Kent, David Holland, + David W Skinner, Erim Sever, Evgeniy Grigoriev, Franчois Marques, + Frantisek Pokorny, Howard Abed,J franklin Mentzer, Jaques Duthen, + John C Davis, John Polhemus, Kobus Theron, Lee Haywood, Mario Bonenfant, + Martin P Holland, Mic (Jan Reineke), Phil Shapiro, Richard Weston, + Sven Egevad, Ken'ichiro Takahashi (takaken), Thinking Rabbit, + Yoshio Murase, ZICO (Zbigniew Kornas) + + Особая благодарность Hirohiko Nakamiya + + Еще благодарности: + Masato Hiramatsu, Kazuo Fukushima, Klaus Clemens + + В игре используется специальный формат файлов уровней *.LEV + с тривиальным сжатием информации + +!!!!NB!!!! +Настоятельно рекомендуется поместить файлы программы в каталог C:\menuetos. +В противном случае Вам придется изменить константу CUR_DIR в файле +SOKO.ASM на строке 30 соответсвующим значением! + +Интерфейс + +При запуске программа открывает файл скинов для игровых объектов SKIN.RAW +в собственном каталоге. Это картинка размером 16х240 точек. Затем в этом +же каталоге читаются так называемые "стандартные" уровни SOKO-?.LEV, где +? - число от 0 до 9. +По списку уровней можно передвигаться клавишами PgUp и PgDn. Желаемый уровень +выбирается нажатием клавиш от 0 до 9. +Нажатие пробела переносит фокус на текстовое поле ввода имени файла уровня. +Дополнительные уровни находятся в подкаталоге LEV программы. Допустим, вы +хотите загрузить файл уровней /HD/1/MENUETOS/LEV/AENIGMA.LEV. Тогда следует +ввести строку lev/aenigma.lev +В поле действует клавиша Backspace. Курсор пока не реализован :-( Нажатие +Enter в строке ввода эквивалентно кнопке 'Загрузить'. + +В режиме игры нажатие Esc производит рестарт уровня, нажатие Home выводит +из игры обратно к списку уровней. + +Правила игры + +В этой игре у вас есть ТОЛКАТЕЛЬ, которым можно управлять клавишами стрелок. + +СОКОБАН (иначе СОКОБЛЮ :-) или СОКОВАН) + Розовые пирамидки нужно передвинуть на специальные клетки. + Проблема в том, что можно только толкать предметы, но не тащить их. + Уровень решен, когда каждая пирамидка находится на маркерной клетке. + +СОКОЛОР + Блоки одинакового цвета нужно подтолкать друг к другу. + +СОКОНЕКС + Все блоки-коннекторы нужно подтолкать друг к другу. + + Объекты в игре СОКОНЕКС и их свойства: + + ПЛИТА: неуничтожаемая, подвижная, закрывает ДЫРЫ + ДЫРА: туда можно сталкивать ЛАЗЕРЫ и РАЗБИТЫЕ ПЛИТЫ + РАЗБИТАЯ ПЛИТА: уничтожаемая, подвижная + КОННЕКТОР: неуничтожаемый, подвижный + ФИКС-КОННЕКТОР: неуничтожаемый, подвижный + ЛАЗЕР: уничтожаемый, подвижный + ЛАЗЕРНЫЙ ЛУЧ: уничтожает ЛАЗЕРЫ и РАЗБИТЫЕ ПЛИТЫ, парализует ТОЛКАТЕЛЯ (!) + +Цель игры всегда одинакова: Вы должны правильно переставлять блоки. +Иногда задание кажется невыполнимым. +Но будьте уверены: всегда есть решение! + +Что еще можно сделать: + +1. Покрасивше интерфейс - после XTREE я понял, что для Menuet можно + относительно легко писать очень красивые программы. +2. Дополнительные скины - для гурманов. И меньше размер файлов сделать: + 11 кб как-никак на дороге не валяются +3. Улучшить управление - мне так кажется. +4. Редактор уровней. При особом желании файлы уровней можно писать вручную и + компилировать FASM'ом - см. файлы CNF.ASM и CNF. +5. Исправить баги, внести улучшения и учесть пожелания Вас, уважаемых + пользователей данной программы ;-) +6. Включить поддержку диалогов из XTREE. + diff --git a/programs/games/soko/trunk/SASQ_.LEV b/programs/games/soko/trunk/SASQ_.LEV new file mode 100644 index 0000000000000000000000000000000000000000..d0dcbb6443adf7ee4ccc868a178e22735c6e8513 GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SASQ_III.LEV b/programs/games/soko/trunk/SASQ_III.LEV new file mode 100644 index 0000000000000000000000000000000000000000..94fd6a8f25c0a11f236fccf24572eeab202e5750 GIT binary patch literal 8098 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

    5cbh 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 B&*T6A literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SIMPLE.LEV b/programs/games/soko/trunk/SIMPLE.LEV new file mode 100644 index 0000000000000000000000000000000000000000..9bd04550957b40ca10056637de0e90994b7802c7 GIT binary patch literal 5559 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SKIN.RAW b/programs/games/soko/trunk/SKIN.RAW new file mode 100644 index 0000000000000000000000000000000000000000..2a57a4501af62d1e4583f589be9780c772103189 GIT binary patch literal 11520 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 IPUb)U2gK)`{r~^~ literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOKHARD.LEV b/programs/games/soko/trunk/SOKHARD.LEV new file mode 100644 index 0000000000000000000000000000000000000000..d0a77f68e9fffc63807d5accf16402bb6c11a13a GIT binary patch literal 1367 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 Dm2shv literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOKO-4.LEV b/programs/games/soko/trunk/SOKO-4.LEV new file mode 100644 index 0000000000000000000000000000000000000000..54d7c2f8d73e6a218f010cc95f491880be53a32d GIT binary patch literal 160 zcmWlRK?=e!6h!||TCFWY@dWWElcW?XxUmlG$Wlj2fU7lxd*a*uf){JBu rf&-cKq*Ani=wjGqMYkn*9A2$*RBLv18$(rQH@`0bvG4u-@P3Ow_8BKw literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOKO-5.LEV b/programs/games/soko/trunk/SOKO-5.LEV new file mode 100644 index 0000000000000000000000000000000000000000..ab118f88946129132384fb2e483cd5d5bcc02a94 GIT binary patch literal 2652 zcmZ`*%W~T`6a_#^A|=_Ps7$8mbOEip=*D%r4?t2c$B8qwr)y9)ZE>QAEGail|Jq;R zo(nOS)B_YP0P)qw}c+(o=l;j5&t4#ix->kOsth&mo6ITTc zjKokoiU$dsSZ*-Fa_W11%Un+Ls@{&>sjE1KtE|)%bIpdJCk3bpqhL4>Kva>ozIX7h z_y+FBudf5ywiF4S5|HF%XCeq%!?}juh?wUHJh>U!46o} z%tP$o-+A63UKcfai$XL@%Xv$)CHxysLWoMRZ_UBn|LMo*@|Y!DiI{{NU+s0UFcyj@ z(9`j|NnV#(MXDHOV8jB-f!!h4Z@xNP(tdK7!{c}~F}Y~}zIsoy|j2JboKHs9}_Z;H>?>-1xG%oD^w zBLz{7JTL**60spAb`@EQkPuWmNP(}cerGY&4N{~b24CP1?ATEo_&?jS*PCLy$}0Iy zR=bHi5z`i>m}ZwaH?qEj3ls|5I+pL}mjZuV;WJ|2@gLZ;Dbwzrc4;1H!(CH~+@A0; zdO*Y@^oJi4?)7?;wEoi6ok*O>whSeVAiI=_a9o8HF{8qi8UPm9#FSYnw6@4e1nR4I z@CZsC@4?y)lz9XN4?ck+S3U>!dJpDWkDG6qQJlFJM9u7|wf9(k|Ah_8b-rFpghk#^ z`HxSS@)TT8B|w-li$}1M<|B>1MK-GxOUX4lo^4dG4*cVzqa&HYXJ?B+TeISdf;d7f zF$~QE^tDHi-J|Bc-=?i)kYbpx4;^HIcp_v1=jqNPO{ChB{WIJiuMWEpynZ{2T{YlS zmN^+3gBfL`tlnpD0@sFNbE7$;Fhr|@_h};Gqqx~|7S8?M zLC@Y&vtoUfZDgF@WKQD7BE~gg97RTNaV?56M9bx-3}jGJn$SA3{~^L8$#KR_0NC{p zFRHXGaYv*#X})=rxN69z0hbPyJ=!MV43dS0K~>?G__8_5uGjT;1(5$cC(=Zl6FQ07 z2RV=5h*Asml;p|?5WzY`cMT^j!Clz%Ey{b`aB~8o!ImPC+^|%@CZ=%$Z=u~OO8^wA z*8Vj?$LjgL)1vq&^(srR#(c^n$KG{@NnBGzMdMfV8QDUv5e6(hnzp(>W^ z>{H!TNw@?*92GiLWDB22;D7>(M1x-nOa&^2upPwDozhoF|6rPaDsF3h6>Rc)J`*qwMd>w$+e!Gj{^ z6Ltyo$Bh=fmJ)+-F;leIwc3PJqYe5m-{+T^jIx`2vq1}Q95G(BfGx<=rZs0V2wG3X z_@Zeh3W#q5U%R6$99}u|Lg_&G4qB4f%RK;x4l^_k^H~~#vmjl(8dbV;>TXZ0Vaq8 z%yNQB!~r-0M_4!kP7W}9HTG`20*$7sf9mI}zuxwHgD7#||=JSj~;>gY^Z#nv5NG@H}+d+T$C^R|S zOeR?p(iuxCZTvKn;o7xbPAi_nmwHe-r>`i-`A9~z7v)(Rl6w2}_|V{Io5^X`I;T0@ zu}|z!eTQM-hLUdw5(*j)ITGVEBya=;2?W>9u?89=?eltjd~|60bTj!RyM!e4Oiq?z zgZ)})MsBp`z++(#l)1-6Pc!BD5)ls$jUeK)tbK`OK$mis6}cpbq-VfN1aJZi;34g_ z!VjnhYn938RsrYioG4r)ckzJg%sxy0^+c<)dgef#a;H3`5_D5cx-7JXPCCj404lsC$g%IMD0?+lHjrP}NF55k)09A0!W0!SpfA>Ku; zysA0YnlxMkC8>U@aJQ38Y;sXQ^mYk;_07hfO!06mQb#{SBpQ^`tc^!rr9j-68;b(| zSHbA4#6OKo;u?M$)=i1GMY@>9|z2-!;f~ zUA9Mtjx2BK&Y=j%1?r*x$VZCrP;-5r9(w)e4cjZg2h9L_hU*9(b^IWSggD0FgIT5E z_+ztr)ATMLGdiyyj*pup?=a*2IL-Jad9!YmEw4-T85%v^(UAO&?sI=3|3*#1Afgi_ zW3C<9MsIdPtA5ybd;rd#J;hlqZdnZ9ZAqH{{jWice(%o literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOKO-7.LEV b/programs/games/soko/trunk/SOKO-7.LEV new file mode 100644 index 0000000000000000000000000000000000000000..47d4dae73234045cb7884bdcf3536c519cd5d32d GIT binary patch literal 3980 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 literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOKO-8.LEV b/programs/games/soko/trunk/SOKO-8.LEV new file mode 100644 index 0000000000000000000000000000000000000000..62a85fe5abf1dccc448773d51e5515243b1522d0 GIT binary patch literal 415 zcmZ{g%S{6@5QhJmjq(r_VTlHS@JMbRZzR?^(*Q@LNJvq*PYI?2m*CpcKp3w$cq4J~ zVf_8yJkGQE&HMN1>-hO`aCZ+oBuNmLC1ZCvFWb*Y>M0=g1qlj4aT(fY1gjgmY&>h~ zSx6w15ZoWH$d=DzS-56aizf3#aVGPi!PFj}bbK9qyqUcvp9hpqxRBH_!pI6a9BXr50%l)n>>|*)j;r{xJ zoDqsj2BDx@Q9jXBNu?6P4h=L6EHuP>pck^L~k z1h0bfS+(CyCwBhuwCZX)A+Z7TB6*fvwATV{55PlSk%Nm$B?b1o>FV=b_!kTHU5|A} z0$3EX68_Dioj%|1CWTovFI|1A9jFo!TNAQiMPW_Y5PJ&N^k}hsUfzQjx#uWv2XLea z6*3@@Y#?ze2_|;d+}2&KE1ewAR-#_TZR2aIF#Ko0eQnf0iJY77P3oOF80~$eKD}ttbp6(ipy;OAA3TK*Z=?k literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOKO.ASM b/programs/games/soko/trunk/SOKO.ASM new file mode 100644 index 0000000000..4529556d5b --- /dev/null +++ b/programs/games/soko/trunk/SOKO.ASM @@ -0,0 +1,1161 @@ +; SOKOBAN FOR MENUET v0.1 +; Written in pure assembler by Ivushkin Andrey aka Willow +; +; Last changed: July 2, 2004 +; +; Main idea, art & graphics +; Sokofun for Windows 95 by Games 4 Brains +; and Sokoban 2.3 by BjЎrn Kфllmark +; +; Level designers: +; +; Alberto Garcia, Aymeric du Peloux, Brian Kent, David Holland, +; David W Skinner, Erim Sever, Evgeniy Grigoriev, Franчois Marques, +; Frantisek Pokorny, Howard Abed,J franklin Mentzer, Jaques Duthen, +; John C Davis, John Polhemus, Kobus Theron, Lee Haywood, Mario Bonenfant, +; Martin P Holland, Mic (Jan Reineke), Phil Shapiro, Richard Weston, +; Sven Egevad, Ken'ichiro Takahashi (takaken), Thinking Rabbit, +; Yoshio Murase, ZICO (Zbigniew Kornas) +; +; Special thanks to Hirohiko Nakamiya +; +; More credits: +; Masato Hiramatsu, Kazuo Fukushima, Klaus Clemens +; +; Game uses its own format of levelset files *.LEV +; with simple run-length compression + +; COMPILE WITH FASM + +CUR_DIR equ '/HD/1/MENUETOS/' ; change it to appropriate path + +SKIN_SIZE equ 11520 ; size of skin file (16x240) + +; field dimensions +FLD_LEFT equ 43 +FLD_LEFT2 equ FLD_LEFT shl 16 +FLD_TOP equ 40 +FLD_TOP2 equ FLD_TOP shl 16 +IMG_SIZE equ 16 shl 16+16 +SHIFT equ (16 shl 16) +WND_COLOR equ 0x03aabbcc + +; level list dimensions +LEVLIST_XY equ FLD_TOP shl 16+45 +LEVLIST_SPACING equ 10 +LEVWND_X equ 320 +LEVWND_Y equ 200 + +; input line dimensions +INP_X equ 10 shl 16+300 +INP_Y equ 160 shl 16+16 +INP_XY equ 15 shl 16+164 + +; load button dimensions +LOAD_X equ 130 shl 16+65 +LOAD_Y equ 180 shl 16+14 +LOAD_XY equ 135 shl 16+184 +CHOOSE_XY equ 40 shl 16+148 + + +WIN_XY equ 135 shl 16+25 + +; workmode constants, more defs in CELLTYPE.INC +WM_WINNER equ 0x10 +WM_READSET equ 0 +WM_LOSE equ 0x20 + +use32 + org 0x0 + db 'MENUET01' + dd 0x01 + dd START + dd I_END + dd 0x100000 + dd 0x7fff0 + dd 0x0 + dd 0x0 + +include 'macros.inc' ; decrease code size (optional) +include 'celltype.inc' ; object identifiers +;include 'debug.inc' +;lang equ ru ; russian interface; english if undefined + +START: + mov eax,58 ; load skin image-it is in RAW 16x240 BGR + mov ebx,file_info ; IrfanView recommended + int 0x40 + test ebx,ebx +; jmp load_level +; jz close + load_fail: ; clear input line, also if levelset load failed + mov [inp_pos],0 + load_std: + mov esi,stdlev + mov edi,path_end + mov ecx,stdlev_len-stdlev + rep movsb + mov ecx,10 + reset_fi: + mov dword[cnf_level],level_start + xor eax,eax + mov [levpage],eax + mov word[ll_num],'00' ; reset some counters + read_cnf: + mov eax,58 + mov ebx,file_info + int 0x40 + test ebx,ebx ; load standard levels SOKO-?.LEV instead of custom + jz nxt_cnf + add dword[cnf_level],ebx + nxt_cnf: + test ecx,ecx ; this check is for loading a custom levelset + jz no_increase + inc byte[file_num] ; next standard levelset + loop read_cnf + no_increase: + cmp dword[cnf_level],level_start + jne go_on + test ecx,ecx + jz load_fail + jmp close ; missing standard levels & exiting + go_on: + mov eax,[cnf_level] + mov byte[eax],0xf0 ; end-of-levels mark + + call read_levelset + backto_set: + mov byte[workmode],WM_READSET + mov byte[winmode],0 + jmp red +restart_level: + call decode_field ; uncompress level + +red: + call draw_window + +still: + + mov eax,10 + int 0x40 + cmp byte[winmode],WM_WINNER + je backto_set + cmp byte[winmode],WM_LOSE + je backto_set + cmp eax,1 + je red + cmp eax,2 + je key + cmp eax,3 + je button + + jmp still + + key: + mov eax,2 + int 0x40 + + cmp byte[workmode],WM_READSET + jne key_move + cmp ah,32 ; Space moves focus to input line + je is_input + cmp ah,184 + jne no_prev + cmp [levpage],0 ; PgUp + jz still + sub [levpage],10 + cmp byte[ll_num+1],'0' + jnz _pu + dec byte[ll_num] + mov byte[ll_num+1],'9'+1 + _pu: + dec byte[ll_num+1] + jmp red + no_prev: + cmp ah,183 ; PgDn + jne no_next + mov eax,[levpage] + add eax,10 + cmp eax,[levelcount] + jae still + mov [levpage],eax + cmp byte[ll_num+1],'9' + jnz _pd + inc byte[ll_num] + mov byte[ll_num+1],'0'-1 + _pd: + inc byte[ll_num+1] + jmp red + no_next: + sub ah,48 + cmp ah,9 + ja still + movzx eax,ah ; user selects a level + add eax,[levpage] + cmp eax,[levelcount] + jae still + mov eax,[levelmap+eax*4] + mov [levptr],eax ; current level pointer + mov al,byte[eax] + mov byte[workmode],al + jmp restart_level + + ; we're already in game + key_move: + cmp ah,180 ; Home + je backto_set + cmp ah,176 + jb no_arrows + sub ah,176 + cmp ah,3 + ja no_arrows + movzx ecx,ah + movzx edx,[player] + inc ch + call valid_move + cmp byte[winmode],WM_WINNER + jne no_winner + mov ecx,0x20ac0000 + mov edx,win_msg + mov esi,win_msg_end-win_msg ; print victory congratulations + print_msg: + mov ebx,WIN_XY + mov eax,4 + int 0x40 + jmp d_f + no_winner: + cmp byte[winmode],WM_LOSE + jne d_f + no_loser: + test al,al ; no move accepted + jnz still + d_f: + call draw_field ; move performed-redraw + jmp still + no_arrows: + cmp ah,27 + je restart_level + + jmp still + + button: + mov eax,17 + int 0x40 + + cmp ah,1 + jne noclose + close: + xor eax,eax + dec eax + int 0x40 ; shutdown. + + noclose: + cmp ah,2 + jne no_input + is_input: ; simple input line with backspace feature + mov ebx,[entered] ; sorry - no cursor + test ebx,ebx + jnz wait_input + mov [inp_pos],ebx + inc [entered] + wait_input: + call draw_input + mov eax,10 + int 0x40 + cmp eax,2 + jne still + mov edi,[inp_pos] + mov eax,2 + int 0x40 + shr eax,8 + cmp eax,27 + je still + cmp eax,13 + je load_level + cmp eax,8 + je backsp + mov [fn_input+edi],al + inc [inp_pos] + jmp wait_input + backsp: + test edi,edi + jz wait_input + dec [inp_pos] + jmp wait_input + no_input: + cmp ah,3 + jne no_load + load_level: + mov ecx,[inp_pos] + test ecx,ecx + je load_std + mov esi,fn_input + mov byte[esi+ecx],0 + inc ecx + mov edi,path_end + rep movsb + jmp reset_fi + no_load: + jmp still + + +; ********************************************* +; ** FILLS LEVEL POINTER MAP ****************** +; ********************************************* +read_levelset: + + mov dword[wnd_width],LEVWND_X + mov dword[wnd_height],LEVWND_Y + mov [levelcount],0 + mov edi,level_start + mov esi,levelmap + mov al,0xff + rls_cycle: + cmp byte[edi],EOF + je end_of_levelset + mov [esi],edi + add esi,4 + mov ecx,1024 + inc [levelcount] + repne scasb + jecxz eol ;end_of_levelset + jmp rls_cycle + end_of_levelset: + mov eax,[levelcount] +; debug_print_dec eax + ret + eol: +; debug_print '*** ' + jmp end_of_levelset + +; ********************************************* +; ******* DEFINE & DRAW WINDOW & OTHER STUFF * +; ********************************************* + +draw_window: + + mov eax,12 + mov ebx,1 + int 0x40 + + mov eax,0 + mov ebx,150*65536 + add ebx,[wnd_width] + mov ecx,50*65536 + add ecx,[wnd_height] + mov edx,WND_COLOR + mov esi,0x805080d0 + mov edi,0x005080d0 + int 0x40 + + mov eax,4 + mov ebx,8*65536+8 + mov ecx,0x10ddeeff + mov edx,zagolovok + mov esi,zag_konets-zagolovok + int 0x40 + + cmp byte[workmode],WM_READSET + je list_levels + + mov edi,[levptr] ; print custom level filename + add ebx,170*65536 + lea edx,[edi+4] + movzx esi,byte[edi+3] + int 0x40 + + call draw_field + cmp [entered],0 + jz end_of_draw + mov edx,fn_input ; print input line text + mov esi,[inp_pos] + mov ebx,FLD_LEFT2+FLD_TOP-15 + jmp draw_level_file + + list_levels: + + call draw_input + + mov eax,8 ; draw load button + mov ebx,LOAD_X + mov ecx,LOAD_Y + mov edx,3 + mov esi,WND_COLOR + int 0x40 + + mov eax,4 + mov ecx,0x20107a30 + mov ebx,LOAD_XY + mov edx,load_char + mov esi,loadlen-load_char + int 0x40 + + mov ebx,LEVLIST_XY + mov edi,0x204e00e7 + xor esi,esi + mov ecx,10 + ll_cycle: + push ecx esi ebx esi + lea ecx,[esi+'0'] + mov [ll_num+2],cl + mov ecx,edi + mov edx,ll_num + mov esi,4 + int 0x40 + add ebx,25 shl 16 + pop esi + add esi,[levpage] + mov edx,[levelmap+esi*4] + add edx,4 + movzx esi,byte[edx-1] + int 0x40 + pop ebx esi ecx + inc esi + mov edx,[levelcount] + sub edx,[levpage] + cmp edx,esi + jbe choose_print + add ebx,LEVLIST_SPACING + loop ll_cycle + choose_print: + mov edx,ll_msg + mov esi,ll_msg_end-ll_msg + mov ebx,CHOOSE_XY + draw_level_file: + mov eax,4 + int 0x40 + + end_of_draw: + mov eax,12 + mov ebx,2 + int 0x40 + + ret + +; ********************************************* +; ******* DRAW CELL IMAGES WITHIN FIELD ******* +; ********************************************* + +draw_field: + cmp byte[workmode],sSokonex + jne no_chl + call check_lasers ; Sokonex game + no_chl: + mov eax,13 ; clear field area + mov edx,WND_COLOR + mov edi,[levptr] + movzx ebx,byte[edi+1] + shl ebx,4 + lea ebx, [FLD_LEFT2+ebx] + movzx ecx,byte[edi+2] + shl ecx,4 + lea ecx, [FLD_TOP shl 16+ecx] + int 0x40 + + mov edx, FLD_LEFT2+FLD_TOP + movzx edi,byte[edi+1] + shl edi,20 + add edi, FLD_LEFT2 + + xor eax,eax + mov ecx,[fld_size] + mov esi,field + fld_cycle: + lodsb + call draw_img + add edx,SHIFT + cmp edx,edi + jl no_nl + add edx,16 + and edx,0xffff + add edx,FLD_LEFT2 + no_nl: + loop fld_cycle + cmp byte[workmode],sSokonex + jne end_of_df + call draw_lasers + end_of_df: + ret + +; ********************************************* +; *********** DRAW CELL IMAGE ***************** +; ********************************************* + +draw_img: ; in: eax-object index, edx-coordinates + pusha + cmp eax,tWall + jbe no_adjust + cmp [workmode],sSokolor + jne no_di_color + add eax,pm_col-pm_nex + jmp no_adjust + no_di_color: + cmp [workmode],sSokonex + jne no_adjust + inc eax + no_adjust: + movzx ebx,byte [pic_map+eax] + cmp ebx,0xf + je no_img + bl_place: + mov ecx, IMG_SIZE + imul ebx, 256*3 + add ebx,strip + mov eax,7 ; draw_image sysfunc + int 0x40 + no_img: + popa + ret + +;**************************************** +;******* DRAW CONTENTS OF INPUT LINE **** +;**************************************** +draw_input: + push edi + cmp eax,4 + jne highlight + mov esi,WND_COLOR + jmp di_draw + highlight: + mov esi,0xe0e0e0 + di_draw: + mov eax,8 + mov ebx,INP_X + mov ecx,INP_Y + mov edx,2 + int 0x40 + mov eax,4 + mov ecx,0x00107a30 ; шрифт 1 и цвет ( 0xF0RRGGBB ) + mov ebx,INP_XY + mov edx,fn_input + mov esi,[inp_pos] + int 0x40 + pop edi + ret + +; ******************************************************** +; * DECOMPRESS LEVEL & FILL SOME TABLES TO CHECK VICTORY * +; ******************************************************** + +decode_field: +; debug_print <13,10> + xor eax,eax + mov dword[checkpoint],eax + mov dword[checkpoint+4],eax + mov byte[checkcount],al + mov edi,[levptr] + mov dl,[edi] + mov [workmode],dl + movzx edx,byte[edi+1] + mov esi,edx + shl esi,4 + add esi,FLD_LEFT*2-25 + mov [wnd_width],esi + neg edx + mov [move_map+8],edx + neg edx + mov [move_map+4],edx + movzx eax,byte[edi+2] + mov esi,eax + shl esi,4 + add esi,FLD_TOP*2-18 + mov [wnd_height],esi + imul edx,eax + mov [fld_size],edx + lea esi,[edi+4] + movzx ecx,byte[edi+3] + add esi,ecx + cmp byte[esi],0xff + je backto_set + xor edi,edi + cld + dec_cycle: + lodsb + movzx ecx,al + and ecx,0xf ; ecx-count of objects + shr al,4 ; eax-index of object + inc ecx + sub edx,ecx + dc_cycle: + mov [field+edi],al + call chk_win_obj + jne no_register + push eax ecx esi + movzx ecx,al + shl eax,12 + or eax,edi + inc byte[checkcount] + cmp [workmode],sSokolor + jne chk_sokoban +; debug_print ':' +; debug_print_dec ecx + sub ecx,tRedB + shl ecx,1 + cmp word[checkpoint+ecx],0 + jnz no_new_check + mov [checkpoint+ecx],ax + and eax,0xfff +; debug_print_dec eax + jmp no_new_check + chk_sokoban: + cmp [workmode],sSokonex + jne no_nex + cmp byte[checkcount],1 + ja no_new_check + no_nex: + movzx ecx,byte[checkcount] + mov word[checkpoint-2+ecx*2],ax + no_new_check: + pop esi ecx eax + no_register: + inc edi + loop dc_cycle + cmp edx,0 + jg dec_cycle + mov ecx,[fld_size] + xor edx,edx + fp_cycle: + mov al,[field+edx] + and al,0xfe + cmp al,tPlayer + je pl_found + inc edx + loop fp_cycle + pl_found: + mov [player],dx + movzx eax,byte[checkcount] +; debug_print_dec eax + ret + +; ********************************************* +; * WHETHER OBJECT IS VICTORY DEPENDENT ******* +; ********************************************* + +chk_win_obj: ; al-object in a cell + push ecx eax + and al,0xf + mov cl,[workmode] + cmp cl,sSokoban + jne nota_sokoban + cmp al,tBlock + jmp cwo_exit + nota_sokoban: + cmp cl,sSokonex + jne nota_sokonex + cmp al,tConnect + je cwo_exit + cmp al,tStConnect + jmp cwo_exit + nota_sokonex: + push eax + and eax,tRedB + cmp eax,tRedB + pop eax + cwo_exit: + pop eax ecx + ret + +; ********************************************* +; ***** GET CELL AT CERTAIN DIRECTION ********* +; ********************************************* + +get_cell_at: ; in: dx - current cell, cl - direction + mov ebx,edx ; out: al - object at direction, bx - new position + movzx eax,cl + and eax,11b + mov eax, [move_map+eax*4] + add ebx,eax + mov al,[field+ebx] + ret + +; ********************************************* +; *** WHETHER A MOVE CAN BE DONE, & DO IT ***** +; ********************************************* + +valid_move: ; in: dx - current cell, cl - direction + push edx esi + call get_cell_at ; if ch>0 perform all moves + cmp al,tWall + jb result_ok + je vm_exit + cmp [workmode],sSokonex + jne n_vm_nex + cmp al,tStConnect + je vm_exit + cmp al,tHole + je vm_exit + n_vm_nex: + push edx ebx + mov edx,ebx + movzx esi,al + call get_cell_at + cmp al,tPlace + jbe push_it + cmp [workmode],sSokonex + jne no_plate + cmp al,tHole + jne no_plate + cmp esi,tBroken + jae vm_sink + cmp esi,tPlate + jne no_plate + and byte[field+ebx],0 + vm_sink: + and byte[field+edx],0 + jmp vm_hole + no_plate: + pop ebx edx esi edx + ret + push_it: + call do_move + vm_hole: + pop ebx edx + result_ok: + call do_move + xor al,al + vm_exit: + pop esi edx + ret + +; ********************************************* +; ******* ACTUALLY PERFORM MOVES ************** +; ********************************************* + +do_move: ; in: dx - source cell + test ch,ch ; bx - target cell + jz dm_exit ; ch = 0 don't perform moves + mov al,byte[field+edx] + cmp byte[workmode],sSokoban + jne no_dm_ban + and al,0xfe + no_dm_ban: + xor byte[field+edx],al + or byte[field+ebx],al + call chk_win_obj + jne no_check_win + pusha + movzx ecx,byte[checkcount] + xor edi,edi + dm_cycle: + movzx esi,word[checkpoint+edi*2] + and esi,0xfff + and edx,0xfff + cmp esi,edx + jnz not_an_obj + movzx eax,dl + movzx eax,byte[field+ebx] + shl eax,12 + or eax,ebx + mov word[checkpoint+edi*2],ax + jmp dm_ex + not_an_obj: + inc edi + loop dm_cycle + dm_ex: + popa + call check_win + jne no_check_win + mov byte[winmode],WM_WINNER + no_check_win: + cmp al,tPlayer + jne dm_exit + mov [player],bx + dm_exit: + ret + +; ********************************************* +; ******* CHECK VICTORY CONDITIONS ************ +; ********************************************* + +check_win: +; debug_print <13,10> + push eax ebx ecx esi + xor eax,eax + movzx ecx,byte[checkcount] + mov esi,checkpoint + mov bl,byte[workmode] + xor bh,bh + mov [colcount],bh + cld + cw_cycle: + lodsw + cmp bl,sSokoban + jne nocw_sokoban + test ax,1 shl 12 + jz cw_not_inplace + inc bh + cw_not_inplace: + loop cw_cycle +; movzx eax,bh + cmp [checkcount],bh + jmp cw_exit + nocw_sokoban: + cmp bl,sSokonex + jne nocw_sokonex + mov dx,ax + call scan_root + cmp al,[checkcount] + jmp cw_exit + + nocw_sokonex: + cmp esi,checkpoint+8 + ja cwlor_exit +; debug_print '*' + test ax,ax + jz cw_cycle + mov dx,ax + call scan_root + add [colcount],al +; debug_print '*->' +; debug_print_dec eax + jmp cw_cycle + cwlor_exit: + mov al,[colcount] + cmp al,[checkcount] + cw_exit: +; debug_print <13,10> + pop esi ecx ebx eax + ret + +; ********************************************* +; **** WHETHER LASERS DESTROY SOMETHING ******* +; ********************************************* + +check_lasers: + pusha + xor edx,edx + mov ecx,[fld_size] + cl_loop: + push ecx edx + mov cl,[field+edx] + sub cl,tLaserW + jl cl_exit + cl_begin: + call get_cell_at + cmp al,tLaserW + jae cl_destroy + cmp al,tBroken + je cl_destroy + cmp al,tEmpty + je no_cl_destroy + cmp al,tHole + je no_cl_destroy + cmp al,tPlayer + jne cl_exit + mov ecx,0x20ac0000 + mov edx,lose_msg + mov esi,lose_msg_end-lose_msg ; print loose message + mov byte[winmode],WM_LOSE + mov ebx,WIN_XY + mov eax,4 + int 0x40 + jmp cl_exit + cl_destroy: + mov byte[field+ebx],0 + no_cl_destroy: + mov edx,ebx + jmp cl_begin + cl_exit: + pop edx ecx + inc edx + loop cl_loop + popa + ret + +; ********************************************* +; *** USED BY CHECK_WIN IN SOKONEX & SOKOLOR ** +; ********************************************* + +scan_root: ; input: dx-beginning cell, ebx-what to search + push esi + mov edi,srch ; output: eax-number of win_obj found + mov eax,0xfff + movzx ecx,[checkcount] + inc ecx + cld + rep stosw ; clearing area for scan + movzx ebx,dx + and edx,eax ; dx-cell number to compare with + shr ebx,12 ; bl-obj id + mov [color],bl + mov esi,srch + mov edi,eax ; mask to extract cell + mov word[srch],dx + sr_loop: + lodsw + push esi ; saving scan pointer + movzx edx,ax ; edx-[dirs*4][cell*12] + and edx,edi +; debug_print ' >' + mov ecx,4 + sr_dir_loop1: +; debug_print '.' + push ecx ; saving dir counter + lea ebx,[ecx+11] + bts word[esi-2],bx + jc sr_endloop ; this entry is already processed +; debug_print '^' + dec ecx ; cl-direction + call get_cell_at ; bx-new position, al-object +; cmp [workmode],sSokonex +; jne no_sr_nex + call chk_win_obj + jne sr_endloop ; not a win_obj there +; debug_print '@' + cmp [workmode],sSokolor + jne no_sr_lor + cmp al,[color] + jne sr_endloop + no_sr_lor: + push esi + mov esi,srch ; let us search for existing entries + sr_loop1: + lodsw + and eax,edi ; eax-cell w/o dirs + cmp eax,ebx + je sr_foundentry ; this is the entry we're seeking for + cmp word[esi],0xfff + jnz sr_loop1 ; next entry + ; we reached empty area + mov [esi],bx + add esi,2 + sr_foundentry: + mov eax,15 + sub eax,ecx + bts [esi-2],ax ; mark entry as used + pop esi +; inc [e_fnd] ; one more obj found + sr_endloop: + pop ecx + loop sr_dir_loop1 +; jmp tttt +; sr_dir_loop: +; jmp sr_dir_loop1 +; tttt: + pop esi + cmp word[esi],0xfff + jne sr_loop + mov eax,esi + sub eax,srch + shr eax,1 + pop esi +; debug_print_dec eax + ret + +; ********************************************* +; *** SPECIAL ROUTINE TO DRAW LASERS ********** +; ********************************************* + +draw_lasers: + xor edx,edx + mov ecx,[fld_size] + dl_loop: + push ecx edx + mov cl,[field+edx] + sub cl,tLaserW + jl dl_eloop + inc ch + dl_gca: + call get_cell_at + cmp al,tEmpty + je dl_draw + cmp al,tHole + jne dl_eloop + dl_draw: + call draw_beams + mov edx,ebx + jmp dl_gca + dl_eloop: + pop edx + inc edx + pop ecx + loop dl_loop + ret + +; ********************************************* +; *** DRAWS LASER BEAMS IN CERTAIN DIRECTION ** +; ********************************************* + +draw_beams: + pusha + mov esi,[levptr] + movzx esi,byte[esi+1] + mov eax,ebx + xor edx,edx + div esi + movzx esi,cl + dec esi + shr esi,1 + and esi,1 + shl edx,20 + mov ebx,edx + shl eax,20 + mov ecx,eax + add ebx,dword[beam_xy+esi*8] + add ecx,dword[beam_xy+esi*8+4] + mov edx,0xe9e25c + mov eax,13 + int 0x40 + popa + ret + +ud: + ud2 ; debugging purposes only + + +; ********************************************* +; *** COMPRESS LEVEL - NOT READY YET ********** +; ********************************************* + +; push esi ebx ;ecx +; xchg ebx,edi +; mov esi,edi ; esi,edi - beginning +;; ebx - end of unpacked field +; first_enc: +; lodsb ; al - first byte +; shl ax,8 ; ah - this byte, al=0 +; next_enc: +; cmp esi,ebx +; jae exit_enc +;; movzx ecx,byte[esi] +;; debug_print_dec ecx +; cmp ah,byte[esi] +; jne newchar +; inc esi +; inc al +; cmp al,15 +; jb next_enc +; newchar: +; shl al,4 +; shr ax,4 +; stosb +; jmp first_enc +; exit_enc: +; shl al,4 +; shr ax,4 +; stosb +; mov al,0xff +; stosb +; pop ebx esi ecx +; +; dec ecx +; jcxz outcycle +; jmp next_lev +; outcycle: + + +; Здесь находятся данные программы: + +; интерфейс программы двуязычный - задайте язык в macros.inc +load_char: +if lang eq ru + db 'Загрузить' +else + db 'Open file' +end if +loadlen: + +ll_msg: +if lang eq ru + db 'Выберите уровень' +else + db 'Choose a level' +end if + db ' (0-9, PgUp, PgDn)' +ll_msg_end: + +fn_input: +; db 'cnf' +; db 'soko-4.lev' +if lang eq ru + db 'или введите имя файла' +else + db 'or enter a filename' +end if +inp_end: + rb 256-(inp_end-fn_input) + +win_msg: +if lang eq ru + db 'Ура!!! Вы прошли уровень!' +else + db "You've completed the level!" +end if +win_msg_end: + +lose_msg: +if lang eq ru + db 'Вы парализованы! Проигрыш...' +else + db "You're paralized! Game over..." +end if +lose_msg_end: + +zagolovok: ; строка заголовка +if lang eq ru + db 'СОКОБАН ДЛЯ' +else + db 'SOKOBAN FOR' +end if + db ' MENUET' +zag_konets: ; и её конец + +pic_map: + db 0xf,9,0,0,1,1,5,6 +pm_nex: + db 2,7,8,3,4,0xa,0xa,0xa,0xa +pm_col: + db 0xb,0xc,0xd,0xe + +beam_xy: + dd (FLD_LEFT+7) shl 16+2, FLD_TOP2+16 + dd FLD_LEFT2+16, (FLD_TOP+7) shl 16+2 + +ll_num db '00x.' + +move_map dd -1,+0,-0,1 ; 0 - W, 1 - S, 2 - N, 3 - E + +stdlev db 'SOKO-0.LEV',0 +stdlev_len: + +inp_pos dd inp_end-fn_input +entered dd 0 + +file_info: + dd 0 + dd 0 + dd 0x100 +cnf_level dd strip + dd workarea +file_name db CUR_DIR +path_end db 'SKIN.' +file_num db 'RAW',0 + + rb 256-($-file_name) + +I_END: ; конец программы + +winmode db ? +scanptr dd ? +levpage dd ? +workmode db ? +player dw ? +fld_size dd ? +levptr dd ? +wnd_height dd ? +wnd_width dd ? +color db ? +colcount db ? +levelcount dd ? +checkcount db ? +checkpoint: + times 256 dw ? +levelmap: + times 1024 dd ? +strip rb SKIN_SIZE + +workarea: + srch rb 0x10000-($-workarea) + +level_start rb 0x20000 +field: diff --git a/programs/games/soko/trunk/SOKOLATE.LEV b/programs/games/soko/trunk/SOKOLATE.LEV new file mode 100644 index 0000000000000000000000000000000000000000..81a7933b6e428ad16312d7b45b0ec46098649964 GIT binary patch literal 2135 zcmZXWPg5f|5XB`8#y0FhW)HdQmQ$**4eahI(r64$g+r>sf#swzOlqClg0W#!}0AWYz80_Ye2Ck z?qcg*&_FgqWiUL1O8M~IJi6&|4k4X#EXjHkY^qeU1_hD{dR{<&*!#Wxx_naSax{!d zCfHzV;o)0;V3JH!DawYuXaw2eym{{A9Zz-CrH-hRpwn8{64**A6(qPfC!l|@k?Qk} zs&pXVsFuV|mGDP5q0o`u?7X?o3IUQ6YtDlWbC17)+~Mj?AcbSxmJ>=r%1O25xma{4 zMrdCf?PF011A${oLR!k&!raLtxh2z{*CJIm&?fGai3)EC1w)gh=i}1}pp& zs~FfulMu9ap_sk0-XHWYo4=Z`?ySn_$i65^7$o9-D9*Ftw+POPIa2akxiwmnS(OGx zxskRCG@Bm9zbNmE zpiAB-en@)Uj#`f6PIHHHd8*;!O#_ZGjY!JNl+hqW4lTt#;=SBi{Vj*vgg+g}uBn_R2h;Ae>lx3PowE@E1T-S@m@+o4)ijr9AQ7^+!m$eAw zI8ThYGx;VH8RFoEvXn%&r4<(er$}i@&-yyawrp=cON%%lly&SulwK`mSTYWAJFY$4 zogvez$Fu?0NWK_dl@Pa(I+uDOxQy>r;`OaQC%FriohdPSf(@F-1xG>z);MDLuL6Hi zLS<$VNh}1I6%tqwy69ZEk$foWomKE+Y`v<#TI+ZT~ z!xvc4-e}{Q3dS^1UHGp=+oqn zAqi<7dGia^+SgaV%Dtr|I<>B)JYmnuqI;9Dok=;U!V{~&Z2R+)^6 H(yjjhU-Q8F literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/SOLOBAN.LEV b/programs/games/soko/trunk/SOLOBAN.LEV new file mode 100644 index 0000000000000000000000000000000000000000..0e67d8ea47a065096f396be64e42c48679aa5af2 GIT binary patch literal 1025 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 KPXZQKWBUVF^E}}I literal 0 HcmV?d00001 diff --git a/programs/games/soko/trunk/TITLSCRN.LEV b/programs/games/soko/trunk/TITLSCRN.LEV new file mode 100644 index 0000000000000000000000000000000000000000..0c7acf79a77a1be08f7242770b3fabf435e10202 GIT binary patch literal 1094 zcmZWoZEo5?5S=xUs#Vq6#3_xM79Sx;nDII!l|WWS53sw0AE+ou7C(AzPC(zR9WaeX z_U^oS^R+vBxXbe8?$0jxm*V$kzg-v0RkL2d)br`Bq@^!Cu`>>vR8l5v+m9Tz8Y^yG zq84v@m?Fxi))skZf8%;ogCuZv_&b9j2q^F}tQB2oY8TIhCE>juw0^SqZ5qd+XbzL71-^Y{XezV;ci(Rw6JdMRo?Eagi zRK2rQ5xj{L&w)`0QaQ95F`XT#2C#MjQwO&+#g%@x48U#KT?ovdIB^^}lg?-`mSMvWfgD6q$cAo%}M#JGY{3V3RfNRSTVUvw Rv1nb80wqA~=MQx)$A7~o&kX!41PO2*mVJSxP0+2_kucHeJBDkH}k)4ZON1aF4h;$>!iVpvMQNcje4V#zuuQ zP=dce$O1<8v<(#j_bhTcf9FOH1nlKw^cXqq)AH3$fmR?8D$TOB@@L4N2o

    ZB#!2vI^$H7+gaO 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∓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, 1996. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. + +# This program 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 +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/programs/games/pig/trunk/mkinstalldirs b/programs/games/pig/trunk/mkinstalldirs new file mode 100644 index 0000000000..4f58503ea4 --- /dev/null +++ b/programs/games/pig/trunk/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/programs/games/pig/trunk/pig-linux-x86 b/programs/games/pig/trunk/pig-linux-x86 new file mode 100644 index 0000000000000000000000000000000000000000..42e8d9e9c8f957ae9c2ebaa324f7b81d01783c31 GIT binary patch literal 26744 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μ!9Q_XBk72V|H|{QbSMuRs-= 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 literal 0 HcmV?d00001 diff --git a/programs/games/pig/trunk/pig.c b/programs/games/pig/trunk/pig.c new file mode 100644 index 0000000000..961cbc1ba0 --- /dev/null +++ b/programs/games/pig/trunk/pig.c @@ -0,0 +1,1332 @@ +/* +------------------------------------------------------------ + Fixed Rate Pig - a fixed logic frame rate demo +------------------------------------------------------------ + * Copyright (C) 2004 David Olofson + * + * This software is released under the terms of the GPL. + * + * Contact author for permission if you want to use this + * software, or work derived from it, under other terms. + */ + +#include +#include +#include +#include +#include +#include +#include "engine.h" + + +/* Graphics defines */ +#define SCREEN_W 800 +#define SCREEN_H 600 +#define TILE_W 32 +#define TILE_H 32 +#define MAP_W 25 +#define MAP_H 17 +#define FONT_SPACING 45 +#define PIG_FRAMES 12 + +/* World/physics constants */ +#define GRAV_ACC 4 +#define JUMP_SPEED 28 + +/* Sprite collision groups */ +#define GROUP_ENEMY 0x0001 +#define GROUP_POWERUP 0x0002 + +typedef enum +{ + POWER_LIFE, + POWER_BONUS1, + POWER_BONUS2 +} POWERUPS; + + +typedef struct GAMESTATE +{ + /* I/O */ + PIG_engine *pe; + Uint8 *keys; + int nice; + int refresh_screen; + int jump; + + /* Sprites */ + int lifepig; + int scorefont; + int glassfont; + int icons; + int stars; + int pigframes; + int evil; + int slime; + + /* Global game state */ + int running; + int level; + int lives; + float lives_wobble; + float lives_wobble_time; + int score; + float score_wobble; + float score_wobble_time; + float dashboard_time; + int fun_count; + int enemycount; + int messages; + + /* Objects */ + PIG_object *player; + + /* Statistics */ + int logic_frames; + int rendered_frames; +} GAMESTATE; + + +static void add_life(GAMESTATE *gs); +static void remove_life(GAMESTATE *gs); +static void inc_score(GAMESTATE *gs, int v); +static void inc_score_nobonus(GAMESTATE *gs, int v); +static PIG_object *new_player(GAMESTATE *gs); +static void message(GAMESTATE *gs, const char *s); +static PIG_object *new_powerup(GAMESTATE *gs, + int x, int y, int speed, POWERUPS type); +static PIG_object *new_star(GAMESTATE *gs, int x, int y, int vx, int vy); +static PIG_object *new_evil(GAMESTATE *gs, + int x, int y, int speed); +static PIG_object *new_slime(GAMESTATE *gs, + int x, int y, int speed); + + +/*---------------------------------------------------------- + Init, load stuff etc +----------------------------------------------------------*/ + +static int load_level(GAMESTATE *gs, int map) +{ + const char *m; + const char *k; + if(map > 4) + map = 1; + gs->level = map; + pig_object_close_all(gs->pe); + gs->enemycount = 0; + gs->messages = 0; + switch(map) + { + case 1: + case 2: + case 4: + k = "abcd" "efgh" "ijkl" /* Red, green, yellov */ + "0123456789ABCDEFG" /* Sky */ + "xyz"; /* Single R, G, Y */ + break; + case 0: + case 3: + k = "abcd" "efgh" "ijkl" /* Red, green, yellov */ + "................." + "xyz" /* Single R, G, Y */ + "-+012345..ABCDEF"; /* Night sky */ + break; + } + switch(map) + { + case 0: m = "-------------ad----------" + "-abcd-x-ad--ad-abcd-acd--" + "-x----x--abcd--x----x--x-" + "-abd--x---ad---abd--x--x-" + "-x----x--abcd--x----x--x-" + "-x----x-ad--ad-abcd-abd--" + "----efhad-eh--egh-efh----" + "----y--y-y--y--y--y------" + "++++efh++efgh++y++eh+++++" + "0123y50y2y45y12y45y123450" + "ABCDyFAyCyEFyBCyEFeghDEFA" + "----ijkjl-ijkl--ijkjl----" + "----il--il-il--il--------" + "----ijkjl--il--il-ikl----" + "----il-----il--il--il----" + "----il----ijkl--ijkjl----" + "-------------------------"; + break; + case 1: m = "0000000000000000000000000" + "1111111111111111111111111" + "2222222222222222222222222" + "3333333333333333333333333" + "4444444444444444444444444" + "5555555555555555555555555" + "6666666666666666666666666" + "7777777ijkjkjjkjkl7777777" + "8888888888888888888888888" + "9999999999999999999999999" + "abcdAAAAAAAAAAAAAAAAAabcd" + "BBBBBBBBBBBBBBBBBBBBBBBBB" + "CCCCCCCCCCCCCCCCCCCCCCCCC" + "efgfgffgfgfgfgfggffgfgfgh" + "EEEEEEEEEEEEEEEEEEEEEEEEE" + "FFFFFFFFFFFFFFFFFFFFFFFFF" + "GGGGGGGGGGGGGGGGGGGGGGGGG"; + new_evil(gs, 2, 0, 5); + new_evil(gs, 22, 0, 5); + new_evil(gs, 5, 0, 7); + new_evil(gs, 19, 0, 7); + break; + case 2: m = "0000000000000000000000000" + "1111111111111111111111111" + "2222222222222222222222222" + "3333333333333333333333333" + "4444444444xxxxx4444444444" + "5555555555x555x5555555555" + "6666666666x666x6666666666" + "7777777xxxx777xxxx7777777" + "8888888x888888888x8888888" + "9999999x999999999x9999999" + "AAAAAAAxxxxAAAxxxxAAAAAAA" + "BBBBBBBBBBxBBBxBBBBBBBBBB" + "CCCCCCCCCCxCCCxCCCCCCCCCC" + "DDDDDDDDDDxxxxxDDDDDDDDDD" + "EEEEEEEEEEEEEEEEEEEEEEEEE" + "ijklFFFFFFFFFFFFFFFFFijkl" + "GGGijlGilGilGilGilGiklGGG"; + new_slime(gs, 2, 0, -5); + new_slime(gs, 22, 0, 5); + new_evil(gs, 8, 0, 7); + new_evil(gs, 16, 0, -7); + break; + case 3: m = "-------------------------" + "-------------------------" + "-------------------------" + "-------------------------" + "ijkl----------efgh-------" + "-------------------------" + "-------------------------" + "z----------------abcbcbbd" + "+++++++++++++++++++++++++" + "01z3450123450123450123450" + "ABCDEFABCefgfgfghFABCDEFA" + "----z--------------------" + "-------------------------" + "------z--------------ijkl" + "-------------------------" + "-------------------------" + "abdefghijkl---efghijklabd"; + new_slime(gs, 5, 0, -5); + new_slime(gs, 20, 15, -5); + new_evil(gs, 1, 0, 7); + new_evil(gs, 20, 0, 10); + new_evil(gs, 15, 0, 7); + break; + case 4: m = "0000000000000000000000000" + "1111111111111111111111111" + "2222222222222222222222222" + "3333333333333333333333333" + "4444444444444444444444444" + "555555555555z555555555555" + "66666666666ijl66666666666" + "7777777777ijlil7777777777" + "888888888ijlikkl888888888" + "99999999ijkjklikl99999999" + "AAAAAAAikjlijkjkjlAAAAAAA" + "BBBBBBiklijkjlijkjlBBBBBB" + "CCCCCijkjlikkjklikklCCCCC" + "DDDDijklijjklikjkjkklDDDD" + "EEEijkkjkjlikjkjlijjklEEE" + "FFijkjlilijkjklikjlikklFF" + "efggfggfgfgfggfgfgfgfgfgh"; + new_evil(gs, 11, 0, 5); + new_evil(gs, 10, 0, 6); + new_evil(gs, 9, 0, 7); + new_evil(gs, 8, 0, 8); + new_evil(gs, 7, 0, 9); + new_evil(gs, 6, 0, 10); + new_evil(gs, 5, 0, 11); + new_evil(gs, 4, 0, 12); + new_evil(gs, 3, 0, 13); + new_slime(gs, 1, 0, 16); + new_slime(gs, 24, 0, -14); + break; + default: + return -1; + } + pig_map_from_string(gs->pe->map, k, m); + gs->refresh_screen = gs->pe->pages; + return 0; +} + + +static GAMESTATE *init_all(SDL_Surface *screen) +{ + int i; + PIG_map *pm; + GAMESTATE *gs = (GAMESTATE *)calloc(1, sizeof(GAMESTATE)); + if(!gs) + return NULL; + + gs->running = 1; + + gs->pe = pig_open(screen); + if(!gs->pe) + { + fprintf(stderr, "Could not open the Pig Engine!\n"); + free(gs); + return NULL; + } + gs->pe->userdata = gs; + + pig_viewport(gs->pe, 0, 0, SCREEN_W, MAP_H * TILE_H); + + i = gs->lifepig = pig_sprites(gs->pe, "lifepig.png", 0, 0); + i |= gs->scorefont = pig_sprites(gs->pe, "font.png", 44, 56); + i |= gs->glassfont = pig_sprites(gs->pe, "glassfont.png", 60, 60); + i |= gs->icons = pig_sprites(gs->pe, "icons.png", 48, 48); + i |= gs->stars = pig_sprites(gs->pe, "stars.png", 32, 32); + i |= gs->pigframes = pig_sprites(gs->pe, "pigframes.png", 64, 48); + i |= gs->evil = pig_sprites(gs->pe, "evil.png", 48, 48); + i |= gs->slime = pig_sprites(gs->pe, "slime.png", 48, 48); + if(i < 0) + { + fprintf(stderr, "Could not load graphics!\n"); + pig_close(gs->pe); + free(gs); + return NULL; + } + for(i = gs->icons; i < gs->icons + 3*8; ++i) + pig_hotspot(gs->pe, i, PIG_CENTER, 45); + for(i = gs->pigframes; i < gs->pigframes + 12; ++i) + pig_hotspot(gs->pe, i, PIG_CENTER, 43); + for(i = gs->evil; i < gs->evil + 16; ++i) + pig_hotspot(gs->pe, i, PIG_CENTER, 46); + for(i = gs->slime; i < gs->slime + 16; ++i) + pig_hotspot(gs->pe, i, PIG_CENTER, 46); + + pm = pig_map_open(gs->pe, MAP_W, MAP_H); + if(!pm) + { + fprintf(stderr, "Could not create map!\n"); + pig_close(gs->pe); + free(gs); + return NULL; + } + if(pig_map_tiles(pm, "tiles.png", TILE_W, TILE_H) < 0) + { + fprintf(stderr, "Could not load background graphics!\n"); + pig_close(gs->pe); + free(gs); + return NULL; + } + + /* Mark tiles for collision detection */ + pig_map_collisions(pm, 0, 12, PIG_ALL); /* Red, green, yellov */ + pig_map_collisions(pm, 12, 17, PIG_NONE);/* Sky */ + pig_map_collisions(pm, 29, 3, PIG_ALL); /* Single R, G, Y */ + + load_level(gs, 0); + return gs; +} + + +/*---------------------------------------------------------- + Render the dashboard +----------------------------------------------------------*/ +static void dashboard(GAMESTATE *gs) +{ + SDL_Rect r; + int i, v; + float x; + float t = SDL_GetTicks() * 0.001; + r.x = 0; + r.y = SCREEN_H - 56; + r.w = SCREEN_W; + r.h = 56; + SDL_SetClipRect(gs->pe->surface, &r); + + /* Render "plasma bar" */ + for(i = 0; i < 56; ++i) + { + float f1, f2, m; + SDL_Rect cr; + cr.x = 0; + cr.w = SCREEN_W; + cr.y = SCREEN_H - 56 + i; + cr.h = 1; + f1 = .25 + .25 * sin(t * 1.7 + (float)i / SCREEN_H * 42); + f1 += .25 + .25 * sin(-t * 2.1 + (float)i / SCREEN_H * 66); + f2 = .25 + .25 * sin(t * 3.31 + (float)i / SCREEN_H * 90); + f2 += .25 + .25 * sin(-t * 1.1 + (float)i / SCREEN_H * 154); + m = sin((float)i * M_PI / 56.0); + m = sin(m * M_PI * 0.5); + m = sin(m * M_PI * 0.5); + SDL_FillRect(gs->pe->surface, + &cr, SDL_MapRGB(gs->pe->surface->format, + ((int)128.0 * f1 + 64) * m, + ((int)64.0 * f1 * f2 + 64) * m, + ((int)128.0 * f2 + 32) * m + )); + } + + /* Draw pigs... uh, lives! */ + x = -10; + for(i = 0; i < gs->lives; ++i) + { + x += 48 + gs->lives_wobble * + sin(gs->lives_wobble_time * 12) * .2; + pig_draw_sprite(gs->pe, gs->lifepig, + (int)x + gs->lives_wobble * + sin(gs->lives_wobble_time * 20 + i * 1.7), + SCREEN_H - 56/2); + } + + /* Print score */ + x = SCREEN_W + 5; + v = gs->score; + for(i = 9; i >= 0; --i) + { + int n = v % 10; + x -= 39 - gs->score_wobble * + sin(gs->score_wobble_time * 15 + i * .5); + pig_draw_sprite(gs->pe, gs->scorefont + n, (int)x, + SCREEN_H - 56/2); + v /= 10; + if(!v) + break; + } + + pig_dirty(gs->pe, &r); +} + + +/*---------------------------------------------------------- + Game logic event handlers +----------------------------------------------------------*/ +static void before_objects(PIG_engine *pe) +{ + GAMESTATE *gs = (GAMESTATE *)pe->userdata; + if(gs->lives_wobble > 0) + { + gs->lives_wobble *= 0.95; + gs->lives_wobble -= 0.3; + if(gs->lives_wobble < 0) + gs->lives_wobble = 0; + } + if(gs->score_wobble > 0) + { + gs->score_wobble *= 0.95; + gs->score_wobble -= 0.3; + if(gs->score_wobble < 0) + gs->score_wobble = 0; + } + ++gs->logic_frames; + + if(0 == gs->level) + { + switch(gs->fun_count % 60) + { + case 17: + new_powerup(gs, 250, -20, -10, POWER_LIFE); + break; + case 29: + new_powerup(gs, 550, -20, 10, POWER_LIFE); + break; + case 37: + new_powerup(gs, 250, -20, 10, POWER_BONUS2); + break; + case 51: + new_powerup(gs, 550, -20, -10, POWER_BONUS1); + break; + } + if(150 == gs->fun_count % 300) + message(gs, "Press Space!"); + ++gs->fun_count; + } +} + + +typedef enum +{ + WAITING, + WALKING, + FALLING, + KNOCKED, + NEXT_LEVEL, + DEAD +} OBJECT_states; + + +static void player_handler(PIG_object *po, const PIG_event *ev) +{ + GAMESTATE *gs = (GAMESTATE *)po->owner->userdata; + switch(ev->type) + { + case PIG_PREFRAME: + switch(po->state) + { + case WAITING: + if(1 == po->age) + message(gs, "Get ready!"); + else if(po->age > 50) + po->state = FALLING; + break; + case WALKING: + if(gs->keys[SDLK_LEFT]) + { + po->ax = -(20 + po->vx) * .4; + po->target = 3 + po->age % 4 - 1; + if(5 == po->target) + po->target = 3; + } + else if(gs->keys[SDLK_RIGHT]) + { + po->ax = (20 - po->vx) * .4; + po->target = 9 + po->age % 4 - 1; + if(11 == po->target) + po->target = 9; + } + else + { + po->ax = -po->vx * .8; + if(po->target >= 6) + po->target = (po->target + 1) % + PIG_FRAMES; + else if(po->target) + --po->target; + } + break; + case FALLING: + if(gs->keys[SDLK_LEFT]) + po->ax = -(20 + po->vx) * .2; + else if(gs->keys[SDLK_RIGHT]) + po->ax = (20 - po->vx) * .2; + else + po->ax = -po->vx * .2; + po->target = (po->target + 1) % PIG_FRAMES; + break; + } + po->timer[0] = 1; + break; + case PIG_TIMER0: + if(po->x < 0) + po->x = 0; + else if(po->x > po->owner->view.w - 1) + po->x = po->owner->view.w - 1; + switch(po->state) + { + case WALKING: + if(po->power) + --po->power; + po->image = po->target % PIG_FRAMES; + if(!pig_test_map(gs->pe, po->x, po->y + 1)) + { + po->state = FALLING; + po->ay = GRAV_ACC; + } + if(gs->jump || gs->keys[SDLK_UP]) + { + po->ay = 0; + po->vy = -JUMP_SPEED; + po->state = FALLING; + gs->jump = 0; + } + break; + case FALLING: + if(po->vy > 2) + po->power = 3; + po->ay = GRAV_ACC; + po->image = po->target; + break; + case KNOCKED: + po->power = 0; + po->ay = GRAV_ACC; + po->target = (po->target + 2) % PIG_FRAMES; + po->image = po->target; + po->ax = -po->vx * .2; + break; + case NEXT_LEVEL: + po->vx = (SCREEN_W / 2 - po->x) * .1; + po->target = (po->target + 1) % PIG_FRAMES; + po->image = po->target; + break; + case DEAD: + po->ax = po->ay = 0; + po->vx = po->vy = 0; + break; + } + if(gs->jump) + --gs->jump; + if(NEXT_LEVEL != po->state) + { + if(gs->enemycount <= 0) + { + message(gs, "Well Done!"); + po->state = NEXT_LEVEL; + po->vy = 0; + po->ay = -1; + po->tilemask = 0; + po->hitgroup = 0; + po->timer[2] = 50; + } + } + break; + + case PIG_TIMER1: + /* Snap out of KNOCKED mode */ + po->state = FALLING; + break; + + case PIG_TIMER2: + switch(po->state) + { + case NEXT_LEVEL: + add_life(gs); + pig_object_close(po); + load_level(gs, gs->level + 1); + new_player(gs); + break; + default: + pig_object_close(po); + if(!new_player(gs)) + load_level(gs, 0); + break; + } + break; + + case PIG_HIT_TILE: + if(KNOCKED == po->state) + break; + + if(ev->cinfo.sides & PIG_TOP) + { + po->y = ev->cinfo.y; + po->vy = 0; + po->ay = 0; + } + po->state = WALKING; + break; + + case PIG_HIT_OBJECT: + if(KNOCKED == po->state) + break; + + switch(ev->obj->hitgroup) + { + case GROUP_ENEMY: + if((po->power && ev->cinfo.sides & PIG_TOP) || + (po->vy - ev->obj->vy) >= 15) + { + /* Win: Stomp! */ + inc_score(gs, ev->obj->score); + ev->obj->y = ev->cinfo.y + 10; + if(po->vy > 0) + ev->obj->vy = po->vy; + else + ev->obj->vy = 10; + ev->obj->ay = GRAV_ACC; + ev->obj->tilemask = 0; + ev->obj->hitgroup = 0; + if(gs->jump || gs->keys[SDLK_UP]) + { + /* Mega jump! */ + po->vy = -(JUMP_SPEED + 7); + gs->jump = 0; + } + else + { + /* Bounce a little */ + po->vy = -15; + } + po->y = ev->cinfo.y; + po->ay = 0; + po->state = FALLING; + } + else + { + /* Lose: Knocked! */ + po->vy = -15; + po->ay = GRAV_ACC; + po->state = KNOCKED; + po->timer[1] = 11; + new_star(gs, po->x, po->y - 20, -5, 3); + new_star(gs, po->x, po->y - 20, 2, -6); + new_star(gs, po->x, po->y - 20, 4, 4); + } + break; + case GROUP_POWERUP: + switch(ev->obj->score) + { + case POWER_LIFE: + add_life(gs); + message(gs, "Extra Life!"); + break; + case POWER_BONUS1: + /* Double or 100k bonus! */ + if(gs->score < 100000) + { + inc_score_nobonus(gs, gs->score); + message(gs, "Double Score!"); + } + else + { + inc_score_nobonus(gs, 100000); + message(gs, "100 000!"); + } + break; + case POWER_BONUS2: + inc_score_nobonus(gs, 1000); + message(gs, "1000!"); + break; + } + ev->obj->state = DEAD; + ev->obj->tilemask = 0; + ev->obj->hitgroup = 0; + ev->obj->vy = -20; + ev->obj->ay = -2; + break; + } + break; + case PIG_OFFSCREEN: + /* + * Dead pigs don't care about being off-screen. + * A timer is used to remove them, and to continue + * the game with a new life. + */ + if(DEAD == po->state) + break; + if(po->y < 0) /* Above the playfield is ok. */ + break; + if(gs->lives) + message(gs, "Oiiiiiiink!!!"); + else + message(gs, "Game Over!"); + po->state = DEAD; + po->timer[2] = 50; + default: + break; + } +} + + +static void powerup_handler(PIG_object *po, const PIG_event *ev) +{ + GAMESTATE *gs = (GAMESTATE *)po->owner->userdata; + switch(ev->type) + { + case PIG_PREFRAME: + if(DEAD == po->state) + break; + po->ax = (po->target - po->vx) * .3; + po->ay = GRAV_ACC; + po->image = po->age % 8; + ++po->power; + break; + case PIG_HIT_TILE: + if(DEAD == po->state) + break; + if(po->power > 2) + po->target = -po->target; + po->power = 0; + po->vy = 0; + po->ay = 0; + po->x = ev->cinfo.x + po->vx; + po->y = ev->cinfo.y; + break; + case PIG_OFFSCREEN: + if(po->y > SCREEN_H || (po->y < -100)) + { + pig_object_close(po); + --gs->enemycount; + } + default: + break; + } +} + + +static void star_handler(PIG_object *po, const PIG_event *ev) +{ + switch(ev->type) + { + case PIG_PREFRAME: + if(po->age >= 8) + pig_object_close(po); + else + po->image = po->age; + default: + break; + } +} + + +static void evil_handler(PIG_object *po, const PIG_event *ev) +{ + GAMESTATE *gs = (GAMESTATE *)po->owner->userdata; + int look_x; + switch(ev->type) + { + case PIG_PREFRAME: + if(DEAD == po->state) + break; + po->ax = (po->target - po->vx) * .5; + po->ay = GRAV_ACC; + po->image = po->age % 16; + break; + case PIG_HIT_TILE: + if(DEAD == po->state) + break; + po->vy = 0; + po->ay = 0; + po->x = ev->cinfo.x + po->vx; + po->y = ev->cinfo.y; + break; + case PIG_OFFSCREEN: + if(po->y > SCREEN_H) + { + pig_object_close(po); + --gs->enemycount; + } + break; + case PIG_POSTFRAME: + if(DEAD == po->state) + break; + look_x = 10 + fabs(po->vx * 2); + if(po->target < 0) + look_x = -look_x; + if(!pig_test_map(po->owner, po->x + look_x, po->y + 1)) + po->target = -po->target; + default: + break; + } +} + + +static void slime_handler(PIG_object *po, const PIG_event *ev) +{ + GAMESTATE *gs = (GAMESTATE *)po->owner->userdata; + int look_x; + switch(ev->type) + { + case PIG_PREFRAME: + if(DEAD == po->state) + break; + po->ax = (po->target - po->vx) * .2; + po->ay = GRAV_ACC; + po->image = po->age % 16; + break; + case PIG_HIT_TILE: + po->vy = -(JUMP_SPEED + GRAV_ACC); + po->ay = 0; + po->y = ev->cinfo.y; + break; + case PIG_OFFSCREEN: + if(po->y > SCREEN_H) + { + pig_object_close(po); + --gs->enemycount; + } + break; + case PIG_POSTFRAME: + if(DEAD == po->state) + break; + /* Don't bother looking if we're close to a floor. */ + if(pig_test_map_vector(po->owner, + po->x, po->y, + po->x, po->y + 48, + PIG_TOP, NULL)) + break; + /* Turn around if there's no floor! */ + look_x = 10 + fabs(po->vx * 4); + if(po->target < 0) + look_x = -look_x; + if(!pig_test_map_vector(po->owner, + po->x + look_x, po->y, + po->x + look_x, SCREEN_H, + PIG_TOP, NULL)) + po->target = -po->target; + default: + break; + } +} + + +static void chain_head_handler(PIG_object *po, const PIG_event *ev) +{ + GAMESTATE *gs = (GAMESTATE *)po->owner->userdata; + switch(ev->type) + { + case PIG_PREFRAME: + po->vx = (po->target - po->x) * .3; + po->vy = 15 * cos(po->age * .3) - 9; + if((gs->messages > 1) && (1 == po->state)) + po->timer[1] = 0; + if(po->timer[1]) + break; + case PIG_TIMER1: + switch(po->state) + { + case 0: + po->timer[1] = 35; + ++po->state; + break; + case 1: + po->target = -SCREEN_W; + po->timer[1] = 50; + ++po->state; + if(gs->messages > 0) + --gs->messages; + break; + case 2: + pig_object_close(po); + break; + } + default: + break; + } +} + +static void chain_link_handler(PIG_object *po, const PIG_event *ev) +{ + PIG_object *target = pig_object_find(po, po->target); + switch(ev->type) + { + case PIG_PREFRAME: + if(target) + { + po->vx = ((target->x + FONT_SPACING) - po->x) * .6; + po->vy = (target->y - po->y) * .6 - 9; + } + else + pig_object_close(po); + default: + break; + } +} + + +/*---------------------------------------------------------- + Accounting (score, lives etc) +----------------------------------------------------------*/ + +static void add_life(GAMESTATE *gs) +{ + ++gs->lives; + gs->lives_wobble += 10; + if(gs->lives_wobble > 15) + gs->lives_wobble = 15; + gs->lives_wobble_time = 0; +} + + +static void remove_life(GAMESTATE *gs) +{ + --gs->lives; + gs->lives_wobble += 10; + if(gs->lives_wobble > 15) + gs->lives_wobble = 15; + gs->lives_wobble_time = 0; +} + + +static void inc_score_nobonus(GAMESTATE *gs, int v) +{ + int os = gs->score; + gs->score += v; + while(v) + { + gs->score_wobble += 1; + v /= 10; + } + if(gs->score_wobble > 15) + gs->score_wobble = 15; + gs->score_wobble_time = 0; + if(os / 10000 != gs->score / 10000) + new_powerup(gs, SCREEN_W / 2, -20, -4, POWER_LIFE); +} + +static void inc_score(GAMESTATE *gs, int v) +{ + int os = gs->score; + inc_score_nobonus(gs, v); + if(os / 5000 != gs->score / 5000) + new_powerup(gs, SCREEN_W / 2, -20, 8, POWER_BONUS1); + else if(os / 1000 != gs->score / 1000) + new_powerup(gs, SCREEN_W / 2, -20, -6, POWER_BONUS2); +} + + +static PIG_object *new_player(GAMESTATE *gs) +{ + PIG_object *po; + if(!gs->lives) + return NULL; + + po = pig_object_open(gs->pe, SCREEN_W / 2, -50, 1); + if(!po) + return NULL; + + remove_life(gs); + po->ibase = gs->pigframes; + po->handler = player_handler; + po->hitmask = GROUP_POWERUP | GROUP_ENEMY; + return po; +} + + +static PIG_object *new_powerup(GAMESTATE *gs, + int x, int y, int speed, POWERUPS type) +{ + PIG_object *po = pig_object_open(gs->pe, x, y, 1); + if(!po) + return NULL; + + ++gs->enemycount; + po->score = type; + po->ibase = gs->icons + 8 * po->score; + po->target = speed; + po->handler = powerup_handler; + po->tilemask = PIG_TOP; + po->hitgroup = GROUP_POWERUP; + return po; +} + + +static PIG_object *new_star(GAMESTATE *gs, int x, int y, int vx, int vy) +{ + PIG_object *po = pig_object_open(gs->pe, x + vx, y + vy, 1); + if(!po) + return NULL; + + po->ibase = gs->stars; + po->ax = -vx * 0.3; + po->vx = vx * 3; + po->ay = -vy * 0.3; + po->vy = vy * 3; + po->handler = star_handler; + return po; +} + + +static PIG_object *new_evil(GAMESTATE *gs, + int x, int y, int speed) +{ + PIG_object *po = pig_object_open(gs->pe, + x * TILE_W, y * TILE_H, 1); + if(!po) + return NULL; + + ++gs->enemycount; + po->ibase = gs->evil; + po->target = speed; + po->handler = evil_handler; + po->score = 200; + po->tilemask = PIG_TOP; + po->hitgroup = GROUP_ENEMY; + return po; +} + + +static PIG_object *new_slime(GAMESTATE *gs, + int x, int y, int speed) +{ + PIG_object *po = pig_object_open(gs->pe, + x * TILE_W, y * TILE_H, 1); + if(!po) + return NULL; + + ++gs->enemycount; + po->ibase = gs->slime; + po->target = speed; + po->handler = slime_handler; + po->score = 300; + po->tilemask = PIG_TOP; + po->hitgroup = GROUP_ENEMY; + return po; +} + + +static PIG_object *new_chain_head(GAMESTATE *gs, + int x, int y, int image, int target_x) +{ + PIG_object *po = pig_object_open(gs->pe, x, y, 1); + if(!po) + return NULL; + + po->ibase = image; + po->handler = chain_head_handler; + po->target = target_x; + return po; +} + + +static PIG_object *new_chain_link(GAMESTATE *gs, + int x, int y, int image, int target) +{ + PIG_object *po = pig_object_open(gs->pe, x, y, 1); + if(!po) + return NULL; + + po->ibase = image; + po->handler = chain_link_handler; + po->target = target; + return po; +} + + +static void message(GAMESTATE *gs, const char *s) +{ + int i = 0; + const int x = SCREEN_W + FONT_SPACING; + const int y = MAP_H * TILE_H - 30; + int tx = (SCREEN_W - ((signed)strlen(s) - 1) * FONT_SPACING) / 2; + PIG_object *po = NULL; + while(s[i]) + { + int c = toupper(s[i]) - 32 + gs->glassfont; + if(0 == i) + po = new_chain_head(gs, x, y, c, tx); + else + po = new_chain_link(gs, x, y, c, po->id); + if(!po) + return; + ++i; + } + ++gs->messages; +} + + +static int start_game(GAMESTATE *gs) +{ + if(0 != gs->level) + return 0; /* Already playing! --> */ + + gs->score = 0; + gs->lives = 5; + + if(load_level(gs, 1) < 0) + return -1; + + gs->player = new_player(gs); + if(!gs->player) + return -1; + + return 0; +} + + +/*---------------------------------------------------------- + Input; events and game control keys +----------------------------------------------------------*/ +static void handle_input(GAMESTATE *gs, SDL_Event *ev) +{ + switch(ev->type) + { + case SDL_MOUSEBUTTONUP: + break; + case SDL_KEYDOWN: + switch(ev->key.keysym.sym) + { + case SDLK_UP: + gs->jump = 3; + break; + case SDLK_F1: + gs->pe->interpolation = !gs->pe->interpolation; + if(gs->pe->interpolation) + message(gs, "Interpolation: ON"); + else + message(gs, "Interpolation: OFF"); + break; + case SDLK_F2: + gs->pe->direct = !gs->pe->direct; + if(gs->pe->direct) + message(gs, "Rendering: Direct"); + else + message(gs, "Rendering: Buffered"); + break; + case SDLK_F3: + gs->pe->show_dirtyrects = !gs->pe->show_dirtyrects; + if(gs->pe->show_dirtyrects) + message(gs, "Dirtyrects: ON"); + else + message(gs, "Dirtyrects: OFF"); + break; + case SDLK_F4: + gs->nice = !gs->nice; + if(gs->nice) + message(gs, "Be Nice: ON"); + else + message(gs, "Be Nice: OFF"); + break; + case SDLK_SPACE: + start_game(gs); + default: + break; + } + break; + case SDL_KEYUP: + switch(ev->key.keysym.sym) + { + case SDLK_ESCAPE: + gs->running = 0; + default: + break; + } + break; + case SDL_QUIT: + gs->running = 0; + break; + } +} + + +static void handle_keys(GAMESTATE *gs) +{ +} + + +static int break_received = 0; + +#ifndef RETSIGTYPE +#define RETSIGTYPE void +#endif +static RETSIGTYPE breakhandler(int sig) +{ + /* For platforms that drop the handlers on the first signal... */ + signal(SIGTERM, breakhandler); + signal(SIGINT, breakhandler); + break_received = 1; +#if (RETSIGTYPE != void) + return 0; +#endif +} + + +/*---------------------------------------------------------- + main() +----------------------------------------------------------*/ +int main(int argc, char* argv[]) +{ + SDL_Surface *screen; + GAMESTATE *gs; + int i; + int bpp = 0; + int last_tick, start_time, end_time; + int dashframe; + float logic_fps = 20.0; + int flags = SDL_DOUBLEBUF | SDL_HWSURFACE; + + SDL_Init(SDL_INIT_VIDEO); + atexit(SDL_Quit); + signal(SIGTERM, breakhandler); + signal(SIGINT, breakhandler); + + for(i = 1; i < argc; ++i) + { + if(strncmp(argv[i], "-s", 2) == 0) + flags &= ~SDL_DOUBLEBUF; + else if(strncmp(argv[i], "-f", 2) == 0) + flags |= SDL_FULLSCREEN; + else + bpp = atoi(&argv[i][1]); + } + + screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, bpp, flags); + if(!screen) + { + fprintf(stderr, "Failed to open screen!\n"); + return 1; + } + + SDL_WM_SetCaption("Fixed Rate Pig", "Pig"); + SDL_ShowCursor(0); + + gs = init_all(screen); + if(!gs) + return 1; + + gs->keys = SDL_GetKeyState(&i); + + gs->logic_frames = 0; + gs->rendered_frames = 0; + gs->pe->before_objects = before_objects; + + pig_start(gs->pe, 0); + gs->refresh_screen = gs->pe->pages; + start_time = last_tick = SDL_GetTicks(); + while(gs->running) + { + int tick; + float frames, dt; + SDL_Event ev; + + /* Handle input */ + while(SDL_PollEvent(&ev) > 0) + handle_input(gs, &ev); + handle_keys(gs); + if(break_received) + gs->running = 0; + + /* Calculate time since last update */ + tick = SDL_GetTicks(); + dt = (tick - last_tick) * 0.001; + frames = dt * logic_fps; + + /* Run the game logic */ + pig_animate(gs->pe, frames); + + /* + * Limit the dashboard frame rate to 15 fps + * when there's no wobbling going on. + * + * The 'dashframe' deal is about keeping the + * pages in sync on a double buffered display. + */ + if(gs->lives_wobble || gs->score_wobble || + (gs->dashboard_time > 1.0/15.0)) + { + dashframe = gs->pe->pages; + gs->dashboard_time = 0; + } + if(dashframe) + { + --dashframe; + dashboard(gs); + } + + /* Update sprites */ + if(gs->refresh_screen) + { + --gs->refresh_screen; + pig_refresh_all(gs->pe); + } + else + pig_refresh(gs->pe); + + /* Make the new frame visible */ + pig_flip(gs->pe); + + /* Update statistics, timers and stuff */ + ++gs->rendered_frames; + gs->lives_wobble_time += dt; + gs->score_wobble_time += dt; + gs->dashboard_time += dt; + + last_tick = tick; + if(gs->nice) + SDL_Delay(10); + } + + /* Print some statistics */ + end_time = SDL_GetTicks(); + i = end_time - start_time; + printf(" Total time running: %d ms\n", i); + if(!i) + i = 1; + printf("Average rendering frame rate: %.2f fps\n", + gs->rendered_frames * 1000.0 / i); + printf(" Average logic frame rate: %.2f fps\n", + gs->logic_frames * 1000.0 / i); + + pig_close(gs->pe); + return 0; +} diff --git a/programs/games/pig/trunk/pigframes.png b/programs/games/pig/trunk/pigframes.png new file mode 100644 index 0000000000000000000000000000000000000000..fbeb0a69362a5e891287fc219a7f2eac49e081c9 GIT binary patch literal 53743 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