* 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.
- *
- * $Id: util.c,v 1.29 1999/05/16 06:56:33 mhw Exp $
*/
#include "netris.h"
#include "util.h"
static MyEventType AlarmGenFunc(EventGenRec *gen, MyEvent *event);
-static EventGenRec alarmGen =
- { &alarmGen, 0, FT_read, -1, AlarmGenFunc, EM_alarm };
+static EventGenRec alarmGen = {
+ &alarmGen, 0, FT_read, -1, AlarmGenFunc, EM_alarm
+};
static EventGenRec *nextGen = &alarmGen;
static int myRandSeed = 1;
void Header(void)
{
fprintf(stderr,
- "NETRIS %s\t(c) 1994-1996,1999 Mark H. Weaver <mhw@netris.org>\n"
- " \t(c) 2002 Shiar <shiar@shiar.org>\n\n",
- version_string);
-} //Header
+ "NETRIS %s\t(c) 1994-1996,1999 Mark H. Weaver <mhw@netris.org>\n"
+ " \t(c) 2002 Shiar <shiar@shiar.org>\n\n",
+ version_string
+ );
+}
void Usage(void)
{
Header();
fprintf(stderr,
- "Usage: netris <options>\n"
- "\n"
- " -h, --help\t\tPrint this usage information\n"
- " -H, --info\t\tShow distribution and warranty information\n"
- " -R, --rules\t\tShow game rules\n"
- "\n"
- " -S, --slowterm\tDisable inverse/bold/color for slow terminals\n"
- " -a, --ascii\t\tUse ascii characters\n"
- " -C, --color=0\t\tDisable color\n"
- "\n"
- " -c, --connect <host>\tInitiate connection\n"
- " -p, --port <port>\tSet port number (default is %d)\n"
- "\n"
- " -t, --team <team>\tJoin a team (don't receive lines from your teammates)\n"
- " -l, --level <lvl>\tBegin at a higher level (can be used as handicap)\n"
- " -k, --keys <keys>\tRemap keys (default is \"%s\" for cursors)\n"
- " -d, --dropmode\tDrops go into drop mode\n"
- " -D, --instadrop\tInstant drop\n"
- "\n"
- " -r, --robot <cmd>\tExecute program to control the game instead of keyboard\n"
- " -F, --fair-robot\tUse fair robot interface\n"
- "\n", DEFAULT_PORT, DEFAULT_KEYS);
+ "Usage: netris <options>\n"
+ "\n"
+ " -h, --help\t\tPrint this usage information\n"
+ " -H, --info\t\tShow distribution and warranty information\n"
+ " -R, --rules\t\tShow game rules\n"
+ "\n"
+ " -S, --slowterm\tDisable inverse/bold/color for slow terminals\n"
+ " -a, --ascii\t\tUse ascii characters\n"
+ " -C, --color=0\t\tDisable color\n"
+ "\n"
+ " -c, --connect <host>\tInitiate connection\n"
+ " -p, --port <port>\tSet port number (default is %d)\n"
+ "\n"
+ " -t, --team <team>\tJoin a team (don't receive lines from your teammates)\n"
+ " -l, --level <lvl>\tBegin at a higher level (can be used as handicap)\n"
+ " -k, --keys <keys>\tRemap keys (default is \"%s\" for cursors)\n"
+ " -d, --dropmode\tDrops go into drop mode\n"
+ " -D, --instadrop\tInstant drop\n"
+ "\n"
+ " -r, --robot <cmd>\tExecute program to control the game instead of keyboard\n"
+ " -F, --fair-robot\tUse fair robot interface\n"
+ "\n", DEFAULT_PORT, DEFAULT_KEYS
+ );
}
void DistInfo(void)
{
- Header();
fprintf(stderr,
- "This program is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
- "the Free Software Foundation; either version 2 of the License, or\n"
- "(at your option) any later version.\n"
- "\n"
- "This program is distributed in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- "GNU General Public License for more details.\n"
- "\n"
- "You should have received a copy of the GNU General Public License\n"
- "along with this program; if not, write to the Free Software\n"
- "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n"
- "\n");
-} //DistInfo
+ "This program is free software; you can redistribute it and/or modify\n"
+ "it under the terms of the GNU General Public License as published by\n"
+ "the Free Software Foundation; either version 2 of the License, or\n"
+ "(at your option) any later version.\n"
+ "\n"
+ "This program is distributed in the hope that it will be useful,\n"
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
+ "GNU General Public License for more details.\n"
+ "\n"
+ "You should have received a copy of the GNU General Public License\n"
+ "along with this program; if not, write to the Free Software\n"
+ "Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n"
+ "\n"
+ );
+}
void Rules(void)
{
Header();
fprintf(stderr,
- "One player mode\n"
- "---------------\n"
- "Good old Tetris. Scoring is like on the GameBoy version (so try to\n"
- "remove as many lines at once as you can). After removing ten lines\n"
- "you go to the next level, which will be faster thus making the game\n"
- "harder to play.\n"
- "\n"
- "Two player mode\n"
- "---------------\n"
- "It's just like normal T*tris except that when you clear more than\n"
- "one row with a single piece, the other player receives penalty lines\n"
- "For clearing 2, 3 or 4 rows, respectively 1, 2 or 4 junk rows will\n"
- "be added to the bottom of your opponent's board respectively.\n"
- "The junk rows have exactly one empty column, which will line up for\n"
- "multiple rows.\n"
- "\n"
- "The longest surviving player wins the game.\n"
- "\n");
-} //Rules
+ "One player mode\n"
+ "---------------\n"
+ "Good old Tetris. Scoring is like on the GameBoy version (so try to\n"
+ "remove as many lines at once as you can). After removing ten lines\n"
+ "you go to the next level, which will be faster thus making the game\n"
+ "harder to play.\n"
+ "\n"
+ "Two player mode\n"
+ "---------------\n"
+ "It's just like normal T*tris except that when you clear more than\n"
+ "one row with a single piece, the other player receives penalty lines\n"
+ "For clearing 2, 3 or 4 rows, respectively 1, 2 or 4 junk rows will\n"
+ "be added to the bottom of your opponent's board respectively.\n"
+ "The junk rows have exactly one empty column, which will line up for\n"
+ "multiple rows.\n"
+ "\n"
+ "The longest surviving player wins the game.\n"
+ "\n"
+ );
+}
///////////// RANDOM /////////////
{
Game.seed = seed;
myRandSeed = seed % 31751 + 1;
-} //SRandom
+}
int Random(int min, int max1)
{ //return a random value
myRandSeed = (myRandSeed * 31751 + 15437) % 32767;
return myRandSeed % (max1 - min) + min;
-} //Random
+}
///////////// I/O /////////////
return result;
}
return len;
-} //MyRead
+}
int MyWrite(int fd, void *data, int len)
{
return result;
}
return len;
-} //MyWrite
+}
///////////// TIME /////////////
{
tv->tv_sec = usec / 1000000;
tv->tv_usec = usec % 1000000;
-} //SetTimeval
+}
long GetTimeval(struct timeval *tv)
{
return tv->tv_sec * 1000000 + tv->tv_usec;
-} //GetTimeval
+}
long AbsTimeval(void)
{
gettimeofday(&tv, NULL);
return GetTimeval(&tv);
-} //CurTimeval
+}
void ResetBaseTime(void)
{ //Reset the timer
baseTimeval = AbsTimeval();
-} //ResetBaseTime
+}
void PauseTime(void)
{ //Pause the timer
baseTimeval -= AbsTimeval();
-} //PauseTime
+}
void ResumeTime(void)
{ //Unpause timer
baseTimeval += AbsTimeval();
-} //ResumeTime
+}
long CurTimeval(void)
{
gettimeofday(&tv, NULL);
return GetTimeval(&tv) - baseTimeval;
-} //CurTimeval
+}
static long SetITimer1(long interval, long value)
{
{
fprintf(stderr, "%s\n", msg);
exit(1);
-} //fatal
+}
void BlockSignals(MySigSet *saved, ...)
{
*saved = sigblock(set);
#endif
va_end(args);
-} //BlockSignals
+}
void RestoreSignals(MySigSet *saved, MySigSet *set)
{
else
sigsetmask(*set);
#endif
-} //RestoreSignals
+}
///////////// EVENTS /////////////
assert(gen->next == NULL);
gen->next = nextGen->next;
nextGen->next = gen;
-} //AddEventGen
+}
void RemoveEventGen(EventGenRec *gen)
{
nextGen->next = gen->next;
gen->next = NULL;
}
-} //RemoveEventGen
+}
MyEventType WaitMyEvent(MyEvent *event, int mask)
{ //poll
tv.tv_sec = 0;
tv.tv_usec = (retry && !anyReady) ? 500000 : 0;
result = select(FD_SETSIZE, &fds[FT_read], &fds[FT_write],
- &fds[FT_except], anyReady ? &tv : NULL);
+ &fds[FT_except], anyReady ? &tv : NULL);
}
else {
if (retry && !anyReady)
}
gen = nextGen;
do {
- if ((gen->mask & mask)
- && (gen->ready || (result > 0 && gen->fd >= 0
- && FD_ISSET(gen->fd, &fds[gen->fdType])))) {
+ if ((gen->mask & mask) && (gen->ready || (
+ result > 0 && gen->fd >= 0
+ && FD_ISSET(gen->fd, &fds[gen->fdType])
+ ))) {
gen->ready = 0;
event->type = gen->func(gen, event);
if (event->type != E_none) {
} while (gen != nextGen);
retry = 1;
}
-} //WaitMyEvent
+}
-/*
- * vi: ts=4 ai
- * vim: noai si
- */