From: Alfredo Tupone Date: Tue, 14 Mar 2006 19:22:42 +0000 (+0000) Subject: Fixing bug #115351 (insane speed on linux 2.6) X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=1f9e0d34d5ab1051716ff2ecbdae9681e1c0a480;p=gentoo.git Fixing bug #115351 (insane speed on linux 2.6) Package-Manager: portage-2.1_pre5-r4 --- diff --git a/games-arcade/xboing/ChangeLog b/games-arcade/xboing/ChangeLog index 0230867830cd..aba7faa2430e 100644 --- a/games-arcade/xboing/ChangeLog +++ b/games-arcade/xboing/ChangeLog @@ -1,6 +1,12 @@ # ChangeLog for games-arcade/xboing # Copyright 1999-2006 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/games-arcade/xboing/ChangeLog,v 1.8 2006/01/29 00:00:27 joshuabaergen Exp $ +# $Header: /var/cvsroot/gentoo-x86/games-arcade/xboing/ChangeLog,v 1.9 2006/03/14 19:22:42 tupone Exp $ + +*xboing-2.4-r2 (14 Mar 2006) + + 14 Mar 2006; +files/01_all_insaneSpeed.patch, + +xboing-2.4-r2.ebuild: + Fixing Bug #115351 (insane speed on linux 2.6). Thanks to bakker Bart 28 Jan 2006; Joshua Baergen xboing-2.4-r1.ebuild: diff --git a/games-arcade/xboing/Manifest b/games-arcade/xboing/Manifest index 09d81ebcd9a0..a46aeef431f0 100644 --- a/games-arcade/xboing/Manifest +++ b/games-arcade/xboing/Manifest @@ -1,12 +1,21 @@ -MD5 8bb363e497cd705806a82ef015dfe626 ChangeLog 984 -RMD160 5d5f8d2b636b17813b751c427c622fa4d94bec21 ChangeLog 984 -SHA256 5c47848e6a293f5f1a29fb958643b82d2edf60b652cf5bdf2ae3871fa3448809 ChangeLog 984 +MD5 5893c0d3ee3f75f7289665e797d21e10 ChangeLog 1173 +RMD160 238d7003e728887425bed137707ce44eb6cc08cf ChangeLog 1173 +SHA256 cd1b2aa1d58ec5299d8c27816b2566f5bb12739fe2fea75086fe2fd56ed5ac88 ChangeLog 1173 +MD5 35113230bee9c55b340e5bb701938d77 files/01_all_insaneSpeed.patch 11554 +RMD160 863965cbcf364124ae206d7d8e2cdcf7e5dd75c9 files/01_all_insaneSpeed.patch 11554 +SHA256 c1061e87471290d862817474f560943a8794f062938af916c7d61f6ab1ba956f files/01_all_insaneSpeed.patch 11554 MD5 1624963aea6e3f0dfabfb6d9a447c942 files/digest-xboing-2.4-r1 131 RMD160 7d405b5057bd5b36c75df3ec1c67db11c5077457 files/digest-xboing-2.4-r1 131 SHA256 d0b017284fb2b067f1745f8b39ef39090cba8f5c9d2f91b1fddc59b811752b08 files/digest-xboing-2.4-r1 131 +MD5 8ef4dccbe0be4466ce9e425c0240802b files/digest-xboing-2.4-r2 485 +RMD160 216bb007322dd5c87e66edf69fc345b0540613d0 files/digest-xboing-2.4-r2 485 +SHA256 1c2f047ddb7abc448cfc111e2782e77194eeec60b89e3ae97be25cc7ba301778 files/digest-xboing-2.4-r2 485 MD5 f17b9b8fa07a38914fe1c03268f51678 metadata.xml 158 RMD160 cbd9984bb6b426c8c9cee5022fe0a26261612fea metadata.xml 158 SHA256 1423a4fdd4a79b1728a2056d9e300f7e1074253095d82726218d9e9b953888a3 metadata.xml 158 MD5 ef87481a559ce7ab5a0572010b9ed54f xboing-2.4-r1.ebuild 1276 RMD160 5dad9cb579011248b301840002b061c0537ca8f0 xboing-2.4-r1.ebuild 1276 SHA256 c121656a230ea57b0df047f86329534a76632992ce401387dc16cb94b2634f9b xboing-2.4-r1.ebuild 1276 +MD5 ea0caa63b740692f82d6feb162af48ae xboing-2.4-r2.ebuild 1315 +RMD160 f02b1c092553f4dfc0fa8ef7da3cf38d4e50c2b7 xboing-2.4-r2.ebuild 1315 +SHA256 35d7c7b0a5ab1348b27f8f5950acb8e419e3d1f83e81909ac89cb59a1cb4f13d xboing-2.4-r2.ebuild 1315 diff --git a/games-arcade/xboing/files/01_all_insaneSpeed.patch b/games-arcade/xboing/files/01_all_insaneSpeed.patch new file mode 100644 index 000000000000..e5d28d8740b8 --- /dev/null +++ b/games-arcade/xboing/files/01_all_insaneSpeed.patch @@ -0,0 +1,470 @@ +diff -u --recursive xboing/bonus.c xbpatch/bonus.c +--- xboing/bonus.c Fri Nov 22 01:28:46 1996 ++++ xbpatch/bonus.c Tue Jan 14 18:48:28 1997 +@@ -311,7 +311,7 @@ + XFlush(display); + + SetBonusWait(BONUS_SCORE, frame + 5); +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + DEBUG("set bonus mode to BONUS_SCORE.") + } +@@ -326,7 +326,7 @@ + { + DEBUG("in function DoScore() in bonus.c") + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Nice message rewarding you for your efforts */ + strcpy(string, "Congratulations on finishing this level."); +@@ -336,7 +336,7 @@ + + ypos += (35 + GAP); + SetBonusWait(BONUS_BONUS, frame + LINE_DELAY); +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + DEBUG("set bonus mode to BONUS_BONUS.") + } + +@@ -363,7 +363,7 @@ + DrawShadowCentredText(display, window, textFont, + string, ypos, blue, TOTAL_WIDTH); + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Now skip to the next sequence */ + SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY); +@@ -387,7 +387,7 @@ + DrawShadowCentredText(display, window, textFont, + string, ypos, blue, TOTAL_WIDTH); + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Now skip to the next sequence */ + SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY); +@@ -411,7 +411,7 @@ + bonusScore += ComputeScore(SUPER_BONUS_SCORE); + DisplayScore(display, scoreWindow, bonusScore); + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Now skip to the next sequence */ + SetBonusWait(BONUS_LEVEL, frame + LINE_DELAY); +@@ -454,7 +454,7 @@ + ypos += (int) (textFont->ascent + GAP * 1.5); + firstTime = True; + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + } + } + +@@ -468,7 +468,7 @@ + { + int secs, theLevel; + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Get the number of seconds left on the clock */ + secs = GetLevelTimeBonus(); +@@ -533,7 +533,7 @@ + /* Play the sound for the super bonus */ + if (noSound == False) playSoundFile("Doh3", 80); + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Get ready for the next sequence */ + SetBonusWait(BONUS_TIME, frame + LINE_DELAY); +@@ -569,7 +569,7 @@ + SetBonusWait(BONUS_TIME, frame + LINE_DELAY); + ypos += (textFont->ascent + GAP/2); + firstTime = True; +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + } + } + +@@ -583,7 +583,7 @@ + { + int secs = 0; + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Get the number of seconds left on the clock */ + secs = GetLevelTimeBonus(); +@@ -627,7 +627,7 @@ + int myrank = 0; + char str[5]; + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Obtain current ranking for this score */ + myrank = GetHighScoreRanking(score); +@@ -680,7 +680,7 @@ + { + DEBUG("DoEndText in bonus screen.") + +- SetGameSpeed(SLOW_SPEED); ++ SetGameSpeed(MEDIUM_SPEED); + + /* Finishing sentence - so you know what level to do */ + sprintf(string, "Prepare for level %ld", level+1); +diff -u --recursive xboing/main.c xbpatch/main.c +--- xboing/main.c Fri Nov 22 01:28:46 1996 ++++ xbpatch/main.c Tue Jan 14 18:32:30 1997 +@@ -156,7 +156,7 @@ + + /* Set an entire game speedup or slowdown speed */ + temp = (speed / (long) userDelay); +- userDelay = delay; ++ userDelay = delay/2 + 3; + speed = (long) (temp * userDelay); + speedLevel = 10 - delay; + } +diff -u --recursive xboing/misc.c xbpatch/misc.c +--- xboing/misc.c Fri Nov 22 01:28:46 1996 ++++ xbpatch/misc.c Tue Jan 14 18:54:45 1997 +@@ -89,8 +89,8 @@ + #ifdef SYSV + #ifdef __clipper__ + struct timeval tv; +- tv.tv_sec=((usec)/1000); +- tv.tv_usec=(((usec)%1000)*1000); ++ tv.tv_sec=((usec)/1000000); ++ tv.tv_usec=((usec)%1000000); + select(1,NULL,NULL,NULL,&tv); + #else + poll((struct poll *) 0, (size_t) 0, usec / 1000); /* ms resolution */ +@@ -105,6 +105,68 @@ + #endif + + #if NeedFunctionPrototypes ++static int kudelay(unsigned long count) ++#else ++static int kudelay(count) ++unsigned long count; ++#endif ++{ ++ unsigned int bluff = 1; ++ ++ while( count-- != 0 ) /* this can hardly be "optimised out" */ ++ bluff = (bluff ^ ((bluff & 1) * 0x6110)) >> 1; ++ ++ return( bluff ); ++} ++ ++#if NeedFunctionPrototypes ++static void kusleep(unsigned long usec) ++#else ++static void kusleep(usec) ++ unsigned long usec; ++#endif ++{ ++ static float kuliber_time = 0.0; ++ static float kuliber_count = 0.0; ++ static unsigned long kutimerswap = (1000000 / 15); ++ struct timeval st, et; ++ long gap; ++ unsigned long count; ++ ++ if( kuliber_time == 0.0 ) ++ { ++ count = 0x1000; /* calibrate delay loop */ ++ gettimeofday(&st, NULL); ++ ++ while( True ) ++ { ++ kudelay( count ); ++ count = (count << 1); ++ gettimeofday(&et, NULL); ++ gap = (((et.tv_sec - st.tv_sec) * 1000000) + ++ (et.tv_usec - st.tv_usec) ); ++ ++ if( gap > 400*1000 ) ++ break; ++ } ++ ++ kuliber_time = (float)(gap/4); ++ kuliber_count = (float)(((count-1)&~0xFFF)>>2); ++ } ++ ++ if( usec > kutimerswap ) ++ { ++ kutimerswap = (1000000 / 30); ++ usleep( usec ); /* using usleep() for low resolution only */ ++ } ++ else ++ { ++ kutimerswap = (1000000 / 15); ++ kudelay( (unsigned long)(kuliber_count*((float)usec/kuliber_time)) ); ++ } ++} ++ ++#if NeedFunctionPrototypes + void sleepSync(Display *display, unsigned long ms) + #else + void sleepSync(display, ms) +@@ -112,27 +174,85 @@ + unsigned long ms; + #endif + { +- struct timeval st, et; +- long SyncTime; +- static unsigned long accu; ++ static long Expected_time = 0; ++ static long Ref_sec = 0; ++ static long Ref_usec = 0; ++ static long Sleeping_time = 0; ++ static int PLL_filter = 0; ++ struct timeval st; ++ long elapsed; ++ long dodelay; ++ float x; + +- gettimeofday(&st, NULL); + XSync(display, False); +- gettimeofday(&et, NULL); + +- SyncTime = (((et.tv_sec - st.tv_sec) * 1000) + +- ((et.tv_usec - st.tv_usec) / 1000) ); ++ gettimeofday(&st, NULL); ++ ++ if( Ref_sec == 0 ) ++ { ++ Ref_sec = st.tv_sec; /* take the initial reference point */ ++ Ref_usec = st.tv_usec; ++ Sleeping_time = ms * 1000; ++ } ++ ++ elapsed = (st.tv_sec - Ref_sec) * 1000000 + (st.tv_usec - Ref_usec); ++ dodelay = Sleeping_time; ++ ++ if( PLL_filter > 0 && elapsed != 0 ) /* Phase lock loop */ ++ { ++ dodelay = Expected_time + Sleeping_time - elapsed; ++ ++ if( dodelay < 0 ) ++ { ++ dodelay = 0; PLL_filter--; ++ } ++ else ++ if( dodelay > 2*Sleeping_time ) ++ { ++ dodelay = 2*Sleeping_time; PLL_filter--; ++ } ++ else ++ PLL_filter = 3; ++ ++ if( elapsed > 40*Sleeping_time && Expected_time > 40*Sleeping_time ) ++ { ++ elapsed -= 20*Sleeping_time; /* Ref. point shouldn't be far away*/ ++ Expected_time -= 20*Sleeping_time; ++ Ref_usec += 20*Sleeping_time; ++ Ref_sec += Ref_usec/1000000; Ref_usec %= 1000000; ++ } ++ } + +-/* if ((ms) > ((1000 / 60) + SyncTime)) +- usleep(ms - SyncTime); +-*/ +- if ((ms + accu) > ((1000 / 30) + SyncTime)) ++ if( PLL_filter <= 0 && elapsed > 40000 ) /* Frequency lock loop */ + { +- usleep(ms +accu - SyncTime); +- accu = 0; ++ /* feedback filter */ ++ x = 0.5 + 0.5 * (float)Expected_time / (float)elapsed; ++ ++ if( x < 0.966 ) /* Acceleration must be strongly limited */ ++ x = 0.966; ++ ++ if( x > 2.0 ) ++ x = 2.0; ++ ++ Sleeping_time = (long)((float)Sleeping_time * x); ++ ++ if( Sleeping_time < 500 ) ++ Sleeping_time = 500; ++ ++ if( x > 0.99 && x < 1.01 && Sleeping_time > ms*500 ) ++ PLL_filter = -1 - 4*PLL_filter; /* locked - it's time to try PLL */ ++ else ++ PLL_filter = 0; ++ ++ Ref_sec = st.tv_sec; ++ Ref_usec = st.tv_usec; ++ Expected_time = 0; ++ dodelay = Sleeping_time; + } +- else if (ms > SyncTime) +- accu += (ms - SyncTime); ++ ++ kusleep( dodelay ); ++ ++ Expected_time += ms * 1000; + } + + #if NeedFunctionPrototypes +diff -u --recursive xboing/presents.c xbpatch/presents.c +--- xboing/presents.c Fri Nov 22 01:28:46 1996 ++++ xbpatch/presents.c Tue Jan 14 18:35:40 1997 +@@ -287,7 +287,7 @@ + } + #endif + +- SetPresentWait(PRESENT_TEXT1, frame + 800); ++ SetPresentWait(PRESENT_TEXT1, frame + 200); + } + + #if NeedFunctionPrototypes +@@ -309,7 +309,7 @@ + RenderShape(display, window, justin, justinM, + x, y, 285, 44, True); + +- SetPresentWait(PRESENT_TEXT2, frame + 300); ++ SetPresentWait(PRESENT_TEXT2, frame + 100); + } + + #if NeedFunctionPrototypes +@@ -331,7 +331,7 @@ + RenderShape(display, window, kibell, kibellM, + x, y, 260, 40, True); + +- SetPresentWait(PRESENT_TEXT3, frame + 500); ++ SetPresentWait(PRESENT_TEXT3, frame + 200); + } + + #if NeedFunctionPrototypes +@@ -355,7 +355,7 @@ + RenderShape(display, window, presents, presentsM, + x, y, 410, 44, True); + +- SetPresentWait(PRESENT_TEXT_CLEAR, frame + 750); ++ SetPresentWait(PRESENT_TEXT_CLEAR, frame + 250); + } + + #if NeedFunctionPrototypes +@@ -375,7 +375,7 @@ + + FadeAwayArea(display, window, x, y, 410, 44); + +- SetPresentWait(PRESENT_LETTERS, frame + 10); ++ SetPresentWait(PRESENT_LETTERS, frame + 5); + } + + /* The distances for the gap inbetwen blocks */ +@@ -404,7 +404,7 @@ + DrawLetter(display, window, i, x, y); + x += 10 + dists[i]; + +- SetPresentWait(PRESENT_LETTERS, frame + 300); ++ SetPresentWait(PRESENT_LETTERS, frame + 100); + } + else + { +@@ -416,7 +416,7 @@ + x += dists[3]; + DrawLetter(display, window, 3, x, y); + +- SetPresentWait(PRESENT_SHINE, frame + 200); ++ SetPresentWait(PRESENT_SHINE, frame + 100); + } + + i++; +@@ -463,7 +463,7 @@ + if (in == 11) + { + XCopyArea(display, store, window, gc, 0, 0, 20, 20, x, y); +- SetPresentWait(PRESENT_SPECIAL_TEXT1, frame + 500); ++ SetPresentWait(PRESENT_SPECIAL_TEXT1, frame + 100); + } + } + } +@@ -499,7 +499,7 @@ + len = strlen(wisdom); + x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) - + (XTextWidth(dataFont, wisdom, len) / 2); +- nextFrame = frame + 10; ++ nextFrame = frame + 5; + first = False; + } + +@@ -508,11 +508,11 @@ + if (noSound == False) playSoundFile("key", 60); + DrawText(display, window, x, y, dataFont, red, wisdom, i); + +- nextFrame = frame + 30; ++ nextFrame = frame + 15; + + i++; + if (i > len) +- SetPresentWait(PRESENT_SPECIAL_TEXT2, frame + 700); ++ SetPresentWait(PRESENT_SPECIAL_TEXT2, frame + 150); + } + } + +@@ -542,7 +542,7 @@ + len = strlen(wisdom2); + x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) - + (XTextWidth(dataFont, wisdom2, len) / 2); +- nextFrame = frame + 10; ++ nextFrame = frame + 5; + first = False; + } + +@@ -551,11 +551,11 @@ + if (noSound == False) playSoundFile("key", 60); + DrawText(display, window, x, y, dataFont, red, wisdom2, i); + +- nextFrame = frame + 30; ++ nextFrame = frame + 15; + + i++; + if (i > len) +- SetPresentWait(PRESENT_SPECIAL_TEXT3, frame + 700); ++ SetPresentWait(PRESENT_SPECIAL_TEXT3, frame + 150); + } + } + +@@ -584,7 +584,7 @@ + len = strlen(wisdom3); + x = ((PLAY_WIDTH + MAIN_WIDTH) / 2) - + (XTextWidth(dataFont, wisdom3, len) / 2); +- nextFrame = frame + 10; ++ nextFrame = frame + 5; + first = False; + } + +@@ -593,11 +593,11 @@ + if (noSound == False) playSoundFile("key", 60); + DrawText(display, window, x, y, dataFont, red, wisdom3, i); + +- nextFrame = frame + 30; ++ nextFrame = frame + 15; + + i++; + if (i > len) +- SetPresentWait(PRESENT_CLEAR, frame + 800); ++ SetPresentWait(PRESENT_CLEAR, frame + 200); + } + } + +@@ -642,7 +642,7 @@ + yb -= 10; + + if (yt > ((PLAY_HEIGHT + MAIN_HEIGHT) / 2)) +- SetPresentWait(PRESENT_FINISH, frame + 20); ++ SetPresentWait(PRESENT_FINISH, frame + 10); + + nextFrame = frame + 20; + } + diff --git a/games-arcade/xboing/files/digest-xboing-2.4-r2 b/games-arcade/xboing/files/digest-xboing-2.4-r2 new file mode 100644 index 000000000000..a5551be55758 --- /dev/null +++ b/games-arcade/xboing/files/digest-xboing-2.4-r2 @@ -0,0 +1,6 @@ +MD5 b0567f3833c7c2152cce8526b06e07cf xboing-2.4-debian.patch.bz2 7740 +RMD160 90ab378da5bf13c2e8c880191d82faec6ec4c66d xboing-2.4-debian.patch.bz2 7740 +SHA256 14461b3684c8a651fb9cff864931f1e56600c373a16b8ea61a98f689173c893e xboing-2.4-debian.patch.bz2 7740 +MD5 d596d29e53cf0deceb18f3b646787709 xboing2.4.tar.gz 588811 +RMD160 3aa027dd7a7abe9b4119362a1c8b5fb968971567 xboing2.4.tar.gz 588811 +SHA256 67019cb8c8a4da0b1177dcc8bed063afe3b8f1853b18345dbc1deaca51d4a29a xboing2.4.tar.gz 588811 diff --git a/games-arcade/xboing/xboing-2.4-r2.ebuild b/games-arcade/xboing/xboing-2.4-r2.ebuild new file mode 100644 index 000000000000..a1cb8e55b849 --- /dev/null +++ b/games-arcade/xboing/xboing-2.4-r2.ebuild @@ -0,0 +1,56 @@ +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/games-arcade/xboing/xboing-2.4-r2.ebuild,v 1.1 2006/03/14 19:22:42 tupone Exp $ + +inherit eutils games + +DESCRIPTION="blockout type game where you bounce a proton ball trying to destroy blocks" +HOMEPAGE="http://www.techrescue.org/xboing/" +SRC_URI="http://www.techrescue.org/xboing/${PN}${PV}.tar.gz + mirror://gentoo/xboing-${PV}-debian.patch.bz2" + +LICENSE="xboing" +SLOT="0" +KEYWORDS="~ppc ~sparc ~x86" +IUSE="" + +RDEPEND="|| ( x11-libs/libXpm virtual/x11 )" +DEPEND="${RDEPEND} + || ( ( app-text/rman + x11-misc/gccmakedep + x11-misc/imake ) + virtual/x11 )" + +S=${WORKDIR}/${PN} + +src_unpack() { + unpack ${A} + cd "${S}" + epatch "${FILESDIR}"/01_all_insaneSpeed.patch \ + "${WORKDIR}"/xboing-${PV}-debian.patch + sed -i '/^#include/s:xpm\.h:X11/xpm.h:' *.c +} + +src_compile() { + xmkmf -a || die + sed -i \ + -e "s:GENTOO_VER:${PF/${PN}-/}:" \ + Imakefile + emake \ + CXXOPTIONS="${CXXFLAGS}" \ + CDEBUGFLAGS="${CFLAGS}" \ + XBOING_DIR=${GAMES_DATADIR}/${PN} \ + || die +} + +src_install() { + make \ + PREFIX=${D} \ + XBOING_DIR=${GAMES_DATADIR}/${PN} \ + install \ + || die + newman xboing.man xboing.6 + dodoc README docs/*.doc + prepgamesdirs + fperms 660 ${GAMES_STATEDIR}/xboing.score +}