mirror of
https://github.com/vattam/BSDGames.git
synced 2025-12-21 03:14:50 +00:00
* New upstream version.
* Patch from Malcolm to fix tetris-bsd score formatting if there are more
than 10 scores. (Closes: #50031)
* Include /var/games/bsdgames/sail, (Closes: #50074)
* Fixed robots spelling mistake, (Closes: #50075)
* tetris-bsd now uses its name, (Closes: #50077)
* Fixed phantasia/characs permissions so it's not world-readable
(passwords) (Closes: #50076)
git-svn-id: file:///srv/svn/joey/bsdgames-trunk@5110 a4a2c43b-8ac3-0310-8836-e0e880c912e2
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* $NetBSD: tetris.c,v 1.5 1998/09/13 15:27:30 hubertf Exp $ */
|
||||
/* $NetBSD: tetris.c,v 1.12 1999/09/12 09:02:24 jsm Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993
|
||||
@@ -50,6 +50,7 @@ __COPYRIGHT("@(#) Copyright (c) 1992, 1993\n\
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -61,6 +62,21 @@ __COPYRIGHT("@(#) Copyright (c) 1992, 1993\n\
|
||||
#include "screen.h"
|
||||
#include "tetris.h"
|
||||
|
||||
cell board[B_SIZE]; /* 1 => occupied, 0 => empty */
|
||||
|
||||
int Rows, Cols; /* current screen size */
|
||||
|
||||
const struct shape *curshape;
|
||||
const struct shape *nextshape;
|
||||
|
||||
long fallrate; /* less than 1 million; smaller => faster */
|
||||
|
||||
int score; /* the obvious thing */
|
||||
gid_t gid, egid;
|
||||
|
||||
char key_msg[100];
|
||||
int showpreview;
|
||||
|
||||
static void elide __P((void));
|
||||
static void setup_board __P((void));
|
||||
int main __P((int, char **));
|
||||
@@ -80,11 +96,7 @@ setup_board()
|
||||
|
||||
p = board;
|
||||
for (i = B_SIZE; i; i--)
|
||||
#ifndef mips
|
||||
*p++ = i <= (2 * B_COLS) || (i % B_COLS) < 2;
|
||||
#else /* work around compiler bug */
|
||||
*p++ = i <= (2 * B_COLS) || (i % B_COLS) < 2 ? 1 : 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -121,19 +133,24 @@ main(argc, argv)
|
||||
char *argv[];
|
||||
{
|
||||
register int pos, c;
|
||||
register struct shape *curshape;
|
||||
register char *keys;
|
||||
register const char *keys;
|
||||
register int level = 2;
|
||||
char key_write[6][10];
|
||||
int ch, i, j;
|
||||
int fd;
|
||||
|
||||
gid = getgid();
|
||||
egid = getegid();
|
||||
setegid(gid);
|
||||
|
||||
fd = open("/dev/null", O_RDONLY);
|
||||
if (fd < 3)
|
||||
exit(1);
|
||||
close(fd);
|
||||
|
||||
keys = "jkl pq";
|
||||
|
||||
while ((ch = getopt(argc, argv, "k:l:s")) != -1)
|
||||
while ((ch = getopt(argc, argv, "k:l:ps")) != -1)
|
||||
switch(ch) {
|
||||
case 'k':
|
||||
if (strlen(keys = optarg) != 6)
|
||||
@@ -143,11 +160,14 @@ main(argc, argv)
|
||||
level = atoi(optarg);
|
||||
if (level < MINLEVEL || level > MAXLEVEL) {
|
||||
(void)fprintf(stderr,
|
||||
"tetris: level must be from %d to %d",
|
||||
"tetris-bsd: level must be from %d to %d\n",
|
||||
MINLEVEL, MAXLEVEL);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
showpreview = 1;
|
||||
break;
|
||||
case 's':
|
||||
showscores(0);
|
||||
exit(0);
|
||||
@@ -168,7 +188,7 @@ main(argc, argv)
|
||||
for (j = i+1; j <= 5; j++) {
|
||||
if (keys[i] == keys[j]) {
|
||||
(void)fprintf(stderr,
|
||||
"%s: Duplicate command keys specified.\n",
|
||||
"%s: duplicate command keys specified.\n",
|
||||
argv[0]);
|
||||
exit (1);
|
||||
}
|
||||
@@ -194,6 +214,7 @@ main(argc, argv)
|
||||
scr_set();
|
||||
|
||||
pos = A_FIRST*B_COLS + (B_COLS/2)-1;
|
||||
nextshape = randshape();
|
||||
curshape = randshape();
|
||||
|
||||
scr_msg(key_msg, 1);
|
||||
@@ -224,7 +245,8 @@ main(argc, argv)
|
||||
* Choose a new shape. If it does not fit,
|
||||
* the game is over.
|
||||
*/
|
||||
curshape = randshape();
|
||||
curshape = nextshape;
|
||||
nextshape = randshape();
|
||||
pos = A_FIRST*B_COLS + (B_COLS/2)-1;
|
||||
if (!fits_in(curshape, pos))
|
||||
break;
|
||||
@@ -262,7 +284,7 @@ main(argc, argv)
|
||||
}
|
||||
if (c == keys[1]) {
|
||||
/* turn */
|
||||
struct shape *new = &shapes[curshape->rot];
|
||||
const struct shape *new = &shapes[curshape->rot];
|
||||
|
||||
if (fits_in(new, pos))
|
||||
curshape = new;
|
||||
@@ -282,8 +304,10 @@ main(argc, argv)
|
||||
}
|
||||
continue;
|
||||
}
|
||||
if (c == '\f')
|
||||
if (c == '\f') {
|
||||
scr_clear();
|
||||
scr_msg(key_msg, 1);
|
||||
}
|
||||
}
|
||||
|
||||
scr_clear();
|
||||
@@ -306,7 +330,7 @@ main(argc, argv)
|
||||
|
||||
void
|
||||
onintr(signo)
|
||||
int signo __attribute__((unused));
|
||||
int signo __attribute__((__unused__));
|
||||
{
|
||||
scr_clear();
|
||||
scr_end();
|
||||
@@ -316,6 +340,6 @@ onintr(signo)
|
||||
void
|
||||
usage()
|
||||
{
|
||||
(void)fprintf(stderr, "usage: tetris [-s] [-l level] [-keys]\n");
|
||||
(void)fprintf(stderr, "usage: tetris-bsd [-ps] [-k keys] [-l level]\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user