* New upstream release, whivh includes hack, back fron bsdgames-nonfree.

* Conflict and replace with old versions of bsdgames-nonfree that include
     hack.
   * Add hack to package description and menu file.
   * Add in hack's two READ_ME files to binay package.
   * Patched hack config.h as it is patched in bsdgames-nonfree.
   * Unlike bsdgames-nonfree, put the help, hh, rumors, and data files in
     /usr/share/games/bsdgames/hack, as the patched config.h makes it look
     there.
   * postinst moves over hack state files to new directory
   * Patched phantasia to use strerror and not segfault if it cannot open the
     var files. Closes: #187251 (patch sent upstream)


git-svn-id: file:///srv/svn/joey/bsdgames-trunk@5206 a4a2c43b-8ac3-0310-8836-e0e880c912e2
This commit is contained in:
joey
2003-04-03 02:10:44 +00:00
parent 0e204a0ae1
commit e5b45776e7
42 changed files with 504 additions and 2553 deletions

20
NEWS
View File

@@ -11,6 +11,26 @@ changes in installation instructions. Packagers should also reread
the PACKAGING file each version (or do a diff between the old and new the PACKAGING file each version (or do a diff between the old and new
versions of the package and read that). versions of the package and read that).
Version 2.14 (2003-04-01)
============
* Hack is now BSD-licensed
<http://www.cwi.nl/~aeb/games/hack/hack.html>, so moves from
bsd-games-non-free to bsd-games.
* Updated from NetBSD CVS of 2003-03-29. This includes:
+ Security fix for rogue (in bsd-games-non-free); see NetBSD
Security Advisory 2002-021.
+ Optional support for large numbers in factor using libcrypto from
OpenSSL. This can handle larger numbers than GNU factor (which is
limited to 64-bit numbers) but not that much larger efficiently, as
the algorithm used (Pollard rho) is O(n^{1/4}) in the number
factored.
* Some bugs fixed, though a backlog of bug reports remains.
Version 2.13 (2001-08-30) Version 2.13 (2001-08-30)
============ ============

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: atc.6,v 1.11 2001/06/05 11:14:30 wiz Exp $ .\" $NetBSD: atc.6,v 1.16 2003/02/25 10:34:44 wiz Exp $
.\" .\"
.\" Copyright (c) 1990, 1993 .\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -52,8 +52,7 @@
.Sh DESCRIPTION .Sh DESCRIPTION
.Nm .Nm
lets you try your hand at the nerve wracking duties of the air traffic lets you try your hand at the nerve wracking duties of the air traffic
controller without endangering the lives of millions of controller without endangering the lives of millions of travelers each year.
travelers each year.
Your responsibilities require you to direct the flight of jets Your responsibilities require you to direct the flight of jets
and prop planes into and out of the flight arena and airports. and prop planes into and out of the flight arena and airports.
The speed (update time) and frequency of the planes depend on the The speed (update time) and frequency of the planes depend on the
@@ -62,7 +61,7 @@ difficulty of the chosen arena.
.Bl -tag -width flag .Bl -tag -width flag
.It Fl u .It Fl u
Print the usage line and exit. Print the usage line and exit.
.It Fl ? .It Fl \&?
Same as Same as
.Fl u . .Fl u .
.It Fl l .It Fl l
@@ -76,18 +75,19 @@ Same as
.It Fl p .It Fl p
Print the path to the special directory where Print the path to the special directory where
.Nm .Nm
expects to find its private files. This is used during the expects to find its private files.
installation of the program. This is used during the installation of the program.
.It Fl g Ar game .It Fl g Ar game
Play the named game. If the game listed is not one of the Play the named game.
ones printed from the If the game listed is not one of the ones printed from the
.Fl l .Fl l
option, the default game is played. option, the default game is played.
.It Fl f Ar game .It Fl f Ar game
Same as Same as
.Fl g . .Fl g .
.It Fl r Ar seed .It Fl r Ar seed
Set the random seed. The purpose of this flag is questionable. Set the random seed.
The purpose of this flag is questionable.
.El .El
.Sh GOALS .Sh GOALS
Your goal in Your goal in
@@ -102,28 +102,29 @@ out of exit points.
Several things will cause the end of the game. Several things will cause the end of the game.
Each plane has a destination (see information area), and Each plane has a destination (see information area), and
sending a plane to the wrong destination is an error. sending a plane to the wrong destination is an error.
Planes can run out of fuel, or can collide. Collision is defined as Planes can run out of fuel, or can collide.
adjacency in all three dimensions. A plane leaving the arena Collision is defined as adjacency in all three dimensions.
A plane leaving the arena
in any other way than through its destination exit is an error as well. in any other way than through its destination exit is an error as well.
.Pp .Pp
Scores are sorted in order of the number of planes safe. The other Scores are sorted in order of the number of planes safe.
statistics are provided merely for fun. There is no penalty for The other statistics are provided merely for fun.
There is no penalty for
taking longer than another player (except in the case of ties). taking longer than another player (except in the case of ties).
.Pp .Pp
Suspending a game is not permitted. If you get a talk message, tough. Suspending a game is not permitted.
When was the last time an Air Traffic Controller got called away to If you get a talk message, tough.
the phone? When was the last time an Air Traffic Controller got called away to the phone?
.Sh "THE DISPLAY" .Sh THE DISPLAY
.Pp .Pp
Depending on the terminal you run Depending on the terminal you run
.Nm .Nm
on, the screen will be divided into 4 areas. on, the screen will be divided into 4 areas.
It should be stressed that the terminal driver portion of the It should be stressed that the terminal driver portion of the
game was designed to be reconfigurable, so the display format can vary game was designed to be reconfigurable, so the display format can vary
depending the version you are playing. The descriptions here are based depending the version you are playing.
on the ascii version The descriptions here are based on the ascii version of the game.
of the game. The game rules and input format, however, The game rules and input format, however, should remain consistent.
should remain consistent.
Control-L redraws the screen, should it become muddled. Control-L redraws the screen, should it become muddled.
.Ss RADAR .Ss RADAR
The first screen area is the radar display, showing the relative locations The first screen area is the radar display, showing the relative locations
@@ -131,39 +132,41 @@ of the planes, airports, standard entry/exit points, radar
beacons, and ``lines'' which simply serve to aid you in guiding beacons, and ``lines'' which simply serve to aid you in guiding
the planes. the planes.
.Pp .Pp
Planes are shown as a single letter with an altitude. If Planes are shown as a single letter with an altitude.
the numerical altitude is a single digit, then it represents If the numerical altitude is a single digit, then it represents
thousands of feet. thousands of feet.
Some distinction is made between the prop Some distinction is made between the prop planes and the jets.
planes and the jets. On ascii terminals, prop planes are On ascii terminals, prop planes are
represented by a upper case letter, jets by a lower case letter. represented by a upper case letter, jets by a lower case letter.
.Pp .Pp
Airports are shown as a number and some indication of the direction Airports are shown as a number and some indication of the direction
planes must be going to land at the airport. planes must be going to land at the airport.
On ascii terminals, this is one of `^', `>', `<', and `v', to indicate On ascii terminals, this is one of `^', `\*[Gt]', `\*[Lt]', and `v', to indicate
north (0 degrees), east (90), west (270) and south (180), respectively. north (0 degrees), east (90), west (270) and south (180), respectively.
The planes will also The planes will also take off in this direction.
take off in this direction.
.Pp .Pp
Beacons are represented as circles or asterisks and a number. Beacons are represented as circles or asterisks and a number.
Their purpose is to offer a place of easy reference to the plane pilots. Their purpose is to offer a place of easy reference to the plane pilots.
See ``the delay command'' under the input section of this manual. See
.Sx THE DELAY COMMAND
section below.
.Pp .Pp
Entry/exit points are displayed as numbers along the border of the Entry/exit points are displayed as numbers along the border of the
radar screen. Planes will enter the arena from these points without radar screen.
warning. These points have a direction associated with them, and Planes will enter the arena from these points without warning.
planes will always enter the arena from this direction. On the These points have a direction associated with them, and
ascii version of planes will always enter the arena from this direction.
.Nm "" , On the ascii version of
this direction is not displayed. It will become apparent .Nm ,
what this direction is as the game progresses. this direction is not displayed.
It will become apparent what this direction is as the game progresses.
.Pp .Pp
Incoming planes will always enter at the same altitude: 7000 feet. Incoming planes will always enter at the same altitude: 7000 feet.
For a plane to successfully depart through an entry/exit point, For a plane to successfully depart through an entry/exit point,
it must be flying at 9000 feet. it must be flying at 9000 feet.
It is not necessary for the planes to be flying in any particular It is not necessary for the planes to be flying in any particular
direction when they leave the arena (yet). direction when they leave the arena (yet).
.Ss "INFORMATION AREA" .Ss INFORMATION AREA
The second area of the display is the information area, which lists The second area of the display is the information area, which lists
the time (number of updates since start), and the number of planes you the time (number of updates since start), and the number of planes you
have directed safely out of the arena. have directed safely out of the arena.
@@ -171,46 +174,50 @@ Below this is a list of planes currently in the air, followed by a
blank line, and then a list of planes on the ground (at airports). blank line, and then a list of planes on the ground (at airports).
Each line lists the plane name and its current altitude, Each line lists the plane name and its current altitude,
an optional asterisk indicating low fuel, the plane's destination, an optional asterisk indicating low fuel, the plane's destination,
and the plane's current command. Changing altitude is not considered and the plane's current command.
to be a command and is therefore not displayed. The following are Changing altitude is not considered
some possible information lines: to be a command and is therefore not displayed.
The following are some possible information lines:
.Pp .Pp
.Bd -literal -offset indent .Bd -literal -offset indent
B4*A0: Circle @ b1 B4*A0: Circle @ b1
g7 E4: 225 g7 E4: 225
.Ed .Ed
.Pp .Pp
The first example shows a prop plane named `B' that is flying at 4000 The first example shows a prop plane named `B' that is flying at 4000 feet.
feet. It is low on fuel (note the `*'). Its destination is It is low on fuel (note the `*').
Airport #0. Its destination is Airport #0.
The next command it expects The next command it expects to do is circle when it reaches Beacon #1.
to do is circle when it reaches Beacon #1.
The second example shows a jet named `g' at 7000 feet, destined for The second example shows a jet named `g' at 7000 feet, destined for
Exit #4. It is just now executing a turn to 225 degrees (South-West). Exit #4.
.Ss "INPUT AREA" It is just now executing a turn to 225 degrees (South-West).
The third area of the display is the input area. It is here that .Ss INPUT AREA
your input is reflected. See the INPUT heading of this manual The third area of the display is the input area.
for more details. It is here that your input is reflected.
.Ss "AUTHOR AREA" See the
.Sx INPUT
heading of this manual for more details.
.Ss AUTHOR AREA
This area is used simply to give credit where credit is due. :-) This area is used simply to give credit where credit is due. :-)
.Sh INPUT .Sh INPUT
A command completion interface is built into A command completion interface is built into the game.
the game. At any time, typing `?' will list possible input characters. At any time, typing `?' will list possible input characters.
Typing a backspace (your erase character) backs up, erasing the last part Typing a backspace (your erase character) backs up, erasing the last part
of the command. When a command is complete, a return enters it, and of the command.
any semantic checking is done at that time. If no errors are detected, When a command is complete, a return enters it, and
the command is sent to the appropriate plane. If an error is discovered any semantic checking is done at that time.
If no errors are detected, the command is sent to the appropriate plane.
If an error is discovered
during the check, the offending statement will be underscored and a during the check, the offending statement will be underscored and a
(hopefully) descriptive message will be printed under it. (hopefully) descriptive message will be printed under it.
.Pp .Pp
The command syntax is broken into two parts: The command syntax is broken into two parts:
.Em "Immediate Only" .Em Immediate Only
and and
.Em Delayable .Em Delayable
commands. commands.
.Em "Immediate Only" .Em Immediate Only
commands happen on the next commands happen on the next update.
update.
.Em Delayable .Em Delayable
commands also happen on the next update unless they commands also happen on the next update unless they
are followed by an optional predicate called the are followed by an optional predicate called the
@@ -220,16 +227,17 @@ command.
In the following tables, the syntax In the following tables, the syntax
.Em [0\-9] .Em [0\-9]
means any single digit, and means any single digit, and
.Em <dir> .Aq Em dir
refers to a direction, given by the keys around the `s' key: ``wedcxzaq''. refers to a direction, given by the keys around the `s' key: ``wedcxzaq''.
In absolute references, `q' refers to North-West or 315 degrees, and `w' In absolute references, `q' refers to North-West or 315 degrees, and `w'
refers to North, or 0 degrees. refers to North, or 0 degrees.
In relative references, `q' refers to -45 degrees or 45 degrees left, and `w' In relative references, `q' refers to \-45 degrees or 45 degrees left, and `w'
refers to 0 degrees, or no change in direction. refers to 0 degrees, or no change in direction.
.Pp .Pp
All commands start with a plane letter. This indicates the recipient All commands start with a plane letter.
of the command. Case is ignored. This indicates the recipient of the command.
.Ss "IMMEDIATE ONLY COMMANDS" Case is ignored.
.Ss IMMEDIATE ONLY COMMANDS
.Bl -tag -width "aaaa" .Bl -tag -width "aaaa"
.It "a [ cd+- ]" Em number .It "a [ cd+- ]" Em number
Altitude: Change a plane's altitude, possibly requesting takeoff. Altitude: Change a plane's altitude, possibly requesting takeoff.
@@ -243,18 +251,18 @@ Climb: relative altitude change.
Descend: relative altitude change. Descend: relative altitude change.
.El .El
.It m .It m
Mark: Display in highlighted mode. Plane and command information Mark: Display in highlighted mode.
is displayed normally. Plane and command information is displayed normally.
.It i .It i
Ignore: Do not display highlighted. Command is displayed as a Ignore: Do not display highlighted.
line of dashes if there is no command. Command is displayed as a line of dashes if there is no command.
.It u .It u
Unmark: Same as ignore, but if a delayed command is processed, Unmark: Same as ignore, but if a delayed command is processed,
the plane will become marked. This is useful if you want the plane will become marked.
to forget about a plane during part, but not all, of its This is useful if you want to forget about a plane during part,
journey. but not all, of its journey.
.El .El
.Ss "DELAYABLE COMMANDS" .Ss DELAYABLE COMMANDS
.Bl -tag -width "aaaa" .Bl -tag -width "aaaa"
.It "c [ lr ]" .It "c [ lr ]"
Circle: Have the plane circle. Circle: Have the plane circle.
@@ -267,20 +275,24 @@ Right: Circle clockwise (default).
.It "t [ l-r+LR ] [ dir ] or tt [ abe* ]" Em number .It "t [ l-r+LR ] [ dir ] or tt [ abe* ]" Em number
Turn: Change direction. Turn: Change direction.
.Bl -tag -width "aaaaaaaaaa" -compact .Bl -tag -width "aaaaaaaaaa" -compact
.It "t<dir>" .It "t\*[Lt]dir\*[Gt]"
Turn to direction: Turn to the absolute compass heading given. Turn to direction: Turn to the absolute compass heading given.
The shortest turn will be taken. The shortest turn will be taken.
.It "tl [ dir ]" .It "tl [ dir ]"
Left: Turn counterclockwise: 45 degrees by default, or the amount Left: Turn counterclockwise: 45 degrees by default, or the amount
specified in <dir> (not specified in
.Aq dir
(not
.Em to .Em to
<dir>.) `w' (0 degrees) is no turn. `e' is 45 degrees; `q' gives -45 .Aq dir . )
degrees counterclockwise, that is, 45 degrees clockwise. `w' (0 degrees) is no turn.
`e' is 45 degrees; `q' gives \-45 degrees counterclockwise, that is,
45 degrees clockwise.
.It "t- [ dir ]" .It "t- [ dir ]"
Same as left. Same as left.
.It "tr [ dir ]" .It "tr [ dir ]"
Right: Turn clockwise, 45 degrees by default, or the amount specified Right: Turn clockwise, 45 degrees by default, or the amount specified in
in <dir>. .Aq dir .
.It "t+ [ dir ]" .It "t+ [ dir ]"
Same as right. Same as right.
.It tL .It tL
@@ -288,8 +300,8 @@ Hard left: Turn counterclockwise 90 degrees.
.It tR .It tR
Hard right: Turn clockwise 90 degrees. Hard right: Turn clockwise 90 degrees.
.It "tt [abe*]" .It "tt [abe*]"
Towards: Turn towards a beacon, airport or exit. The turn is Towards: Turn towards a beacon, airport or exit.
just an estimate. The turn is just an estimate.
.It "tta" Em number .It "tta" Em number
Turn towards the given airport. Turn towards the given airport.
.It "ttb" Em number .It "ttb" Em number
@@ -303,33 +315,33 @@ Same as ttb.
.Ss THE DELAY COMMAND .Ss THE DELAY COMMAND
The The
.Em Delay .Em Delay
(a/@) (a/@) command may be appended to any
command may be appended to any
.Em Delayable .Em Delayable
command. It allows the controller to instruct a plane to do an action command.
when the plane reaches a particular beacon (or other objects in future It allows the controller to instruct a plane to do an action when the
versions). plane reaches a particular beacon (or other objects in future versions).
.Bl -tag -width "aaaa" .Bl -tag -width "aaaa"
.It ab Em number .It ab Em number
Do the delayable command when the plane reaches the specified Do the delayable command when the plane reaches the specified beacon.
beacon. The `b' for ``beacon'' is redundant to allow for expansion. The `b' for ``beacon'' is redundant to allow for expansion.
`@' can be used instead of `a'. `@' can be used instead of `a'.
.El .El
.Ss "MARKING, UNMARKING AND IGNORING" .Ss MARKING, UNMARKING AND IGNORING
Planes are Planes are
.Em marked .Em marked
by default when they enter the arena. This means they are displayed by default when they enter the arena.
in highlighted mode on the radar display. A plane may also be either This means they are displayed in highlighted mode on the radar display.
A plane may also be either
.Em unmarked .Em unmarked
or or
.Em ignored . .Em ignored .
An An
.Em ignored .Em ignored
plane is drawn in unhighlighted mode, and a line of dashes is displayed in plane is drawn in unhighlighted mode, and a line of dashes is displayed in
the command field of the information area. The plane will remain this the command field of the information area.
way until a mark command has been issued. Any other command will be issued, The plane will remain this way until a mark command has been issued.
but the command line will return to a line of dashes when the command Any other command will be issued, but the command line will return to a
is completed. line of dashes when the command is completed.
.Pp .Pp
An An
.Em unmarked .Em unmarked
@@ -337,12 +349,13 @@ plane is treated the same as an
.Em ignored .Em ignored
plane, except that it will automatically switch to plane, except that it will automatically switch to
.Em marked .Em marked
status when a delayed command has been processed. This is useful if status when a delayed command has been processed.
you want to forget about a plane for a while, but its flight path has This is useful if you want to forget about a plane for a while, but its
not yet been completely set. flight path has not yet been completely set.
.Pp .Pp
As with all of the commands, marking, unmarking and ignoring will take effect As with all of the commands, marking, unmarking and ignoring will take effect
at the beginning of the next update. Do not be surprised if the plane does at the beginning of the next update.
Do not be surprised if the plane does
not immediately switch to unhighlighted mode. not immediately switch to unhighlighted mode.
.Ss EXAMPLES .Ss EXAMPLES
.Bl -tag -width gtte4ab2 -offset indent .Bl -tag -width gtte4ab2 -offset indent
@@ -359,7 +372,7 @@ Plane S: turn to 315
.It xi .It xi
Plane X: ignore Plane X: ignore
.El .El
.Sh "OTHER INFORMATION" .Sh OTHER INFORMATION
.Bl -bullet .Bl -bullet
.It .It
Jets move every update; prop planes move every other update. Jets move every update; prop planes move every other update.
@@ -372,16 +385,17 @@ Planes flying at an altitude of 0 crash if they are not over an airport.
.It .It
Planes waiting at airports can only be told to take off (climb in altitude). Planes waiting at airports can only be told to take off (climb in altitude).
.El .El
.Sh "NEW GAMES" .Sh NEW GAMES
The The
.Pa Game_List .Pa Game_List
file lists the currently available play fields. New field description file lists the currently available play fields.
file names must be placed in this file to be playable. If a player New field description file names must be placed in this file to be playable.
specifies a game not in this file, his score will not be logged. If a player specifies a game not in this file, his score will not be logged.
.Pp .Pp
The game field description files are broken into two parts. The first The game field description files are broken into two parts.
part is the definition section. Here, the four tunable game parameters The first part is the definition section.
must be set. These variables are set with the syntax: Here, the four tunable game parameters must be set.
These variables are set with the syntax:
.Pp .Pp
.Dl "variable = number;" .Dl "variable = number;"
.Pp .Pp
@@ -412,32 +426,32 @@ The syntax is as follows:
.El .El
.Ed .Ed
.Pp .Pp
For beacons, a simple x, y coordinate pair is used (enclosed in For beacons, a simple x, y coordinate pair is used (enclosed in parenthesis).
parenthesis). Airports and exits require a third value, which is one Airports and exits require a third value, which is one of the directions
of the directions
.Em wedcxzaq . .Em wedcxzaq .
For airports, this is the direction that planes must be going to take For airports, this is the direction that planes must be going to take
off and land, and for exits, this is the direction that planes will going off and land, and for exits, this is the direction that planes will going
when they when they
.Em enter .Em enter
the arena. This may not seem intuitive, but as there is no restriction on the arena.
This may not seem intuitive, but as there is no restriction on
direction of exit, this is appropriate. direction of exit, this is appropriate.
Lines are slightly different, since they need two coordinate pairs to Lines are slightly different, since they need two coordinate pairs to
specify the line endpoints. These endpoints must be enclosed in specify the line endpoints.
square brackets. These endpoints must be enclosed in square brackets.
.Pp .Pp
All statements are semi-colon (;) terminated. Multiple item statements All statements are semi-colon (;) terminated.
accumulate. Each definition must occur exactly once, before any Multiple item statements accumulate.
item statements. Comments begin with a hash (#) symbol Each definition must occur exactly once, before any item statements.
and terminate with a newline. Comments begin with a hash (#) symbol and terminate with a newline.
The coordinates are between zero and width-1 and height-1 The coordinates are between zero and width-1 and height-1 inclusive.
inclusive. All of the exit coordinates must lie on the borders, and All of the exit coordinates must lie on the borders, and
all of the beacons and airports must lie inside of the borders. all of the beacons and airports must lie inside of the borders.
Line endpoints may be anywhere within the field, so long as Line endpoints may be anywhere within the field, so long as
the lines are horizontal, vertical or the lines are horizontal, vertical or
.Em exactly .Em exactly
diagonal. diagonal.
.Ss "FIELD FILE EXAMPLE" .Ss FIELD FILE EXAMPLE
.Bd -literal .Bd -literal
# This is the default game. # This is the default game.
@@ -465,14 +479,16 @@ line: [ ( 1 1 ) ( 6 6 ) ]
.Ed .Ed
.Sh FILES .Sh FILES
Files are kept in a special directory. See the OPTIONS for a way to Files are kept in a special directory.
print this path out. It is normally See the
.Sx OPTIONS
section for a way to print this path out.
It is normally
.Pa @atc_dir@ . .Pa @atc_dir@ .
.Pp .Pp
This directory contains the file This directory contains the file
.Pa Game_List , .Pa Game_List ,
which holds the list of playable games, as well as the games which holds the list of playable games, as well as the games themselves.
themselves.
.Pp .Pp
The scores are kept in The scores are kept in
.Pa @atc_scorefile@ . .Pa @atc_scorefile@ .
@@ -483,8 +499,3 @@ This game is based on someone's description of the overall flavor
of a game written for some unknown PC many years ago, maybe. of a game written for some unknown PC many years ago, maybe.
.Sh BUGS .Sh BUGS
The screen sometimes refreshes after you have quit. The screen sometimes refreshes after you have quit.
.Pp
Yet Another Curses Bug was discovered during the development of this game.
If your curses library clrtobot.o is version 5.1 or earlier,
you will have erase problems with the backspace operator in the input
window.

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.16 2000/05/08 07:56:01 mycroft Exp $ */ /* $NetBSD: main.c,v 1.17 2001/09/18 18:15:49 wiz Exp $ */
/* /*
* Copyright (c) 1980, 1993 * Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0 #if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else #else
__RCSID("$NetBSD: main.c,v 1.16 2000/05/08 07:56:01 mycroft Exp $"); __RCSID("$NetBSD: main.c,v 1.17 2001/09/18 18:15:49 wiz Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@@ -270,7 +270,7 @@ main(argc, argv)
cturn = -1; cturn = -1;
} }
} }
/* initalize variables according to whose turn it is */ /* initialize variables according to whose turn it is */
if (cturn == 1) { /* red */ if (cturn == 1) { /* red */
home = 25; home = 25;

View File

@@ -1,266 +0,0 @@
/* $NetBSD: com1.c,v 1.6 1997/10/11 02:06:58 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com1.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com1.c,v 1.6 1997/10/11 02:06:58 lukem Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
move(thataway, token)
int thataway, token;
{
wordnumber++;
if ((!notes[CANTMOVE] && !notes[LAUNCHED]) ||
testbit(location[position].objects, LAND) ||
(fuel > 0 && notes[LAUNCHED]))
if (thataway) {
position = thataway;
newway(token);
ourtime++;
} else {
puts("You can't go this way.");
newway(token);
whichway(location[position]);
return (0);
}
else
if (notes[CANTMOVE] && !notes[LAUNCHED])
puts("You aren't able to move; you better drop something.");
else
puts("You are out of fuel; now you will rot in space forever!");
return (1);
}
void
convert(tothis) /* Converts day to night and vice versa. */
int tothis; /* Day objects are permanent. Night objects
* are added */
{ /* at dusk, and subtracted at dawn. */
const struct objs *p;
unsigned int i, j;
if (tothis == TONIGHT) {
for (i = 1; i <= NUMOFROOMS; i++)
for (j = 0; j < NUMOFWORDS; j++)
nightfile[i].objects[j] = dayfile[i].objects[j];
for (p = nightobjs; p->room != 0; p++)
setbit(nightfile[p->room].objects, p->obj);
location = nightfile;
} else {
for (i = 1; i <= NUMOFROOMS; i++)
for (j = 0; j < NUMOFWORDS; j++)
dayfile[i].objects[j] = nightfile[i].objects[j];
for (p = nightobjs; p->room != 0; p++)
clearbit(dayfile[p->room].objects, p->obj);
location = dayfile;
}
}
void
news()
{
int n;
int hurt;
if (ourtime > 30 && position < 32) {
puts("An explosion of shuddering magnitude splinters bulkheads and");
puts("ruptures the battlestar's hull. You are sucked out into the");
puts("frozen void of space and killed.");
die();
}
if (ourtime > 20 && position < 32)
puts("Explosions rock the battlestar.");
if (ourtime > snooze) {
puts("You drop from exhaustion...");
zzz();
}
if (ourtime > snooze - 5)
puts("You're getting tired.");
if (ourtime > (rythmn + CYCLE)) {
if (location == nightfile) {
convert(TODAY);
if (OUTSIDE && ourtime - rythmn - CYCLE < 10) {
puts("Dew lit sunbeams stretch out from a watery sunrise and herald the dawn.");
puts("You awake from a misty dream-world into stark reality.");
puts("It is day.");
}
} else {
convert(TONIGHT);
clearbit(location[POOLS].objects, BATHGOD);
if (OUTSIDE && ourtime - rythmn - CYCLE < 10) {
puts("The dying sun sinks into the ocean, leaving a blood stained sunset.");
puts("The sky slowly fades from orange to violet to black. A few stars");
puts("flicker on, and it is night.");
puts("The world seems completly different at night.");
}
}
rythmn = ourtime - ourtime % CYCLE;
}
if (!wiz && !tempwiz)
if ((testbit(inven, TALISMAN) || testbit(wear, TALISMAN)) && (testbit(inven, MEDALION) || testbit(wear, MEDALION)) && (testbit(inven, AMULET) || testbit(wear, AMULET))) {
tempwiz = 1;
puts("The three amulets glow and reenforce each other in power.\nYou are now a wizard.");
}
if (testbit(location[position].objects, ELF)) {
printf("%s\n", objdes[ELF]);
fight(ELF, rnd(30));
}
if (testbit(location[position].objects, DARK)) {
printf("%s\n", objdes[DARK]);
fight(DARK, 100);
}
if (testbit(location[position].objects, WOODSMAN)) {
printf("%s\n", objdes[WOODSMAN]);
fight(WOODSMAN, 50);
}
switch (position) {
case 267:
case 257: /* entering a cave */
case 274:
case 246:
notes[CANTSEE] = 1;
break;
case 160:
case 216: /* leaving a cave */
case 230:
case 231:
case 232:
notes[CANTSEE] = 0;
break;
}
if (testbit(location[position].objects, GIRL))
meetgirl = 1;
if (meetgirl && CYCLE * 1.5 - ourtime < 10) {
setbit(location[GARDEN].objects, GIRLTALK);
setbit(location[GARDEN].objects, LAMPON);
setbit(location[GARDEN].objects, ROPE);
}
if (position == DOCK && (beenthere[position] || ourtime > CYCLE)) {
clearbit(location[DOCK].objects, GIRL);
clearbit(location[DOCK].objects, MAN);
}
if (meetgirl && ourtime - CYCLE * 1.5 > 10) {
clearbit(location[GARDEN].objects, GIRLTALK);
clearbit(location[GARDEN].objects, LAMPON);
clearbit(location[GARDEN].objects, ROPE);
meetgirl = 0;
}
if (testbit(location[position].objects, CYLON)) {
puts("Oh my God, you're being shot at by an alien spacecraft!");
printf("The targeting computer says we have %d seconds to attack!\n",
ourclock);
fflush(stdout);
sleep(1);
if (!visual()) {
hurt = rnd(NUMOFINJURIES);
injuries[hurt] = 1;
puts("Laser blasts sear the cockpit, and the alien veers off in a victory roll.");
puts("The viper shudders under a terrible explosion.");
printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
} else
clearbit(location[position].objects, CYLON);
}
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]) {
puts("I'm afraid you have suffered fatal injuries.");
die();
}
for (n = 0; n < NUMOFINJURIES; n++)
if (injuries[n] == 1) {
injuries[n] = 2;
if (WEIGHT > 5)
WEIGHT -= 5;
else
WEIGHT = 0;
}
if (injuries[ARM] == 2) {
CUMBER -= 5;
injuries[ARM]++;
}
if (injuries[RIBS] == 2) {
CUMBER -= 2;
injuries[RIBS]++;
}
if (injuries[SPINE] == 2) {
WEIGHT = 0;
injuries[SPINE]++;
}
if (carrying > WEIGHT || encumber > CUMBER)
notes[CANTMOVE] = 1;
else
notes[CANTMOVE] = 0;
}
void
crash()
{
int hurt1, hurt2;
fuel--;
if (!location[position].flyhere ||
(testbit(location[position].objects, LAND) && fuel <= 0)) {
if (!location[position].flyhere)
puts("You're flying too low. We're going to crash!");
else {
puts("You're out of fuel. We'll have to crash land!");
if (!location[position].down) {
puts("Your viper strikes the ground and explodes into firey fragments.");
puts("Thick black smoke billows up from the wreckage.");
die();
}
position = location[position].down;
}
notes[LAUNCHED] = 0;
setbit(location[position].objects, CRASH);
ourtime += rnd(CYCLE / 4);
puts("The viper explodes into the ground and you lose consciousness...");
zzz();
hurt1 = rnd(NUMOFINJURIES - 2) + 2;
hurt2 = rnd(NUMOFINJURIES - 2) + 2;
injuries[hurt1] = 1;
injuries[hurt2] = 1;
injuries[0] = 1;/* abrasions */
injuries[1] = 1;/* lacerations */
printf("I'm afraid you have suffered %s and %s.\n",
ouch[hurt1], ouch[hurt2]);
}
}

View File

@@ -1,353 +0,0 @@
/* $NetBSD: com2.c,v 1.22 2001/06/02 17:30:28 christos Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com2.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com2.c,v 1.22 2001/06/02 17:30:28 christos Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
wearit()
{ /* synonyms = {sheathe, sheath} */
int firstnumber, value;
firstnumber = wordnumber;
wordnumber++;
while (wordnumber <= wordcount && (wordtype[wordnumber] == OBJECT ||
wordtype[wordnumber] == NOUNS) && wordvalue[wordnumber] != DOOR) {
value = wordvalue[wordnumber];
if (value >= 0 && objsht[value] == NULL)
break;
switch (value) {
case -1:
puts("Wear what?");
return (firstnumber);
default:
printf("You can't wear %s%s!\n",
A_OR_AN_OR_BLANK(value), objsht[value]);
return (firstnumber);
case KNIFE:
/* case SHIRT: */
case ROBE:
case LEVIS: /* wearable things */
case SWORD:
case MAIL:
case HELM:
case SHOES:
case PAJAMAS:
case COMPASS:
case LASER:
case AMULET:
case TALISMAN:
case MEDALION:
case ROPE:
case RING:
case BRACELET:
case GRENADE:
if (testbit(inven, value)) {
clearbit(inven, value);
setbit(wear, value);
carrying -= objwt[value];
encumber -= objcumber[value];
ourtime++;
printf("You are now wearing %s%s.\n",
A_OR_AN_OR_THE(value), objsht[value]);
} else
if (testbit(wear, value))
printf("You are already wearing the %s.\n",
objsht[value]);
else
printf("You aren't holding the %s.\n",
objsht[value]);
if (wordnumber < wordcount - 1 &&
wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
} /* end switch */
} /* end while */
puts("Don't be ridiculous.");
return (firstnumber);
}
int
put()
{ /* synonyms = {buckle, strap, tie} */
if (wordvalue[wordnumber + 1] == ON) {
wordvalue[++wordnumber] = PUTON;
wordtype[wordnumber] = VERB;
return (cypher());
}
if (wordvalue[wordnumber + 1] == DOWN) {
wordvalue[++wordnumber] = DROP;
wordtype[wordnumber] = VERB;
return (cypher());
}
puts("I don't understand what you want to put.");
return (-1);
}
int
draw()
{ /* synonyms = {pull, carry} */
return (take(wear));
}
int
use()
{
wordnumber++;
if (wordvalue[wordnumber] == AMULET && testbit(inven, AMULET) &&
position != FINAL) {
puts("The amulet begins to glow.");
if (testbit(inven, MEDALION)) {
puts("The medallion comes to life too.");
if (position == 114) {
location[position].down = 160;
whichway(location[position]);
puts("The waves subside and it is possible to descend to the sea cave now.");
ourtime++;
return (-1);
}
}
puts("A light mist falls over your eyes and the sound of purling water trickles in");
puts("your ears. When the mist lifts you are standing beside a cool stream.");
if (position == 229)
position = 224;
else
position = 229;
ourtime++;
notes[CANTSEE] = 0;
return (0);
} else if (position == FINAL)
puts("The amulet won't work in here.");
else if (wordvalue[wordnumber] == COMPASS && testbit(inven, COMPASS))
printf("Your compass points %s.\n", truedirec(NORTH, '-'));
else if (wordvalue[wordnumber] == COMPASS)
puts("You aren't holding the compass.");
else if (wordvalue[wordnumber] == AMULET)
puts("You aren't holding the amulet.");
else
puts("There is no apparent use.");
return (-1);
}
void
murder()
{
int n;
for (n = 0; !((n == SWORD || n == KNIFE || n == TWO_HANDED || n == MACE || n == CLEAVER || n == BROAD || n == CHAIN || n == SHOVEL || n == HALBERD) && testbit(inven, n)) && n < NUMOFOBJECTS; n++);
if (n == NUMOFOBJECTS) {
if (testbit(inven, LASER)) {
printf("Your laser should do the trick.\n");
wordnumber++;
switch(wordvalue[wordnumber]) {
case NORMGOD:
case TIMER:
case NATIVE:
case MAN:
wordvalue[--wordnumber] = SHOOT;
cypher();
break;
case -1:
puts("Kill what?");
break;
default:
if (wordtype[wordnumber] != OBJECT ||
wordvalue[wordnumber] == EVERYTHING)
puts("You can't kill that!");
else
printf("You can't kill %s%s!\n",
A_OR_AN_OR_BLANK(wordvalue[wordnumber]),
objsht[wordvalue[wordnumber]]);
break;
}
} else
puts("You don't have suitable weapons to kill.");
} else {
printf("Your %s should do the trick.\n", objsht[n]);
wordnumber++;
switch (wordvalue[wordnumber]) {
case NORMGOD:
if (testbit(location[position].objects, BATHGOD)) {
puts("The goddess's head slices off. Her corpse floats in the water.");
clearbit(location[position].objects, BATHGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
notes[JINXED]++;
} else
if (testbit(location[position].objects, NORMGOD)) {
puts("The goddess pleads but you strike her mercilessly. Her broken body lies in a\npool of blood.");
clearbit(location[position].objects, NORMGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
notes[JINXED]++;
if (wintime)
live();
} else
puts("I don't see her anywhere.");
break;
case TIMER:
if (testbit(location[position].objects, TIMER)) {
puts("The old man offers no resistance.");
clearbit(location[position].objects, TIMER);
setbit(location[position].objects, DEADTIME);
power++;
notes[JINXED]++;
} else
puts("Who?");
break;
case NATIVE:
if (testbit(location[position].objects, NATIVE)) {
puts("The girl screams as you cut her body to shreds. She is dead.");
clearbit(location[position].objects, NATIVE);
setbit(location[position].objects, DEADNATIVE);
power += 5;
notes[JINXED]++;
} else
puts("What girl?");
break;
case MAN:
if (testbit(location[position].objects, MAN)) {
puts("You strike him to the ground, and he coughs up blood.");
puts("Your fantasy is over.");
die();
}
case -1:
puts("Kill what?");
break;
default:
if (wordtype[wordnumber] != OBJECT ||
wordvalue[wordnumber] == EVERYTHING)
puts("You can't kill that!");
else
printf("You can't kill the %s!\n",
objsht[wordvalue[wordnumber]]);
}
}
}
void
ravage()
{
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount)
continue;
if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects, wordvalue[wordnumber])
|| (wordvalue[wordnumber] == NORMGOD && testbit(location[position].objects, BATHGOD)))) {
ourtime++;
switch (wordvalue[wordnumber]) {
case NORMGOD:
puts("You attack the goddess, and she screams as you beat her. She falls down");
if (testbit(location[position].objects, BATHGOD))
puts("crying and tries to cover her nakedness.");
else
puts("crying and tries to hold her torn and bloodied dress around her.");
power += 5;
pleasure += 8;
ego -= 10;
wordnumber--;
godready = -30000;
murder();
win = -30000;
break;
case NATIVE:
puts("The girl tries to run, but you catch her and throw her down. Her face is");
puts("bleeding, and she screams as you tear off her clothes.");
power += 3;
pleasure += 5;
ego -= 10;
wordnumber--;
murder();
if (rnd(100) < 50) {
puts("Her screams have attracted attention. I think we are surrounded.");
setbit(location[ahead].objects, WOODSMAN);
setbit(location[ahead].objects, DEADWOOD);
setbit(location[ahead].objects, MALLET);
setbit(location[back].objects, WOODSMAN);
setbit(location[back].objects, DEADWOOD);
setbit(location[back].objects, MALLET);
setbit(location[left].objects, WOODSMAN);
setbit(location[left].objects, DEADWOOD);
setbit(location[left].objects, MALLET);
setbit(location[right].objects, WOODSMAN);
setbit(location[right].objects, DEADWOOD);
setbit(location[right].objects, MALLET);
}
break;
default:
puts("You are perverted.");
}
} else
puts("Who?");
}
int
follow()
{
if (followfight == ourtime) {
puts("The Dark Lord leaps away and runs down secret tunnels and corridors.");
puts("You chase him through the darkness and splash in pools of water.");
puts("You have cornered him. His laser sword extends as he steps forward.");
position = FINAL;
fight(DARK, 75);
setbit(location[position].objects, TALISMAN);
setbit(location[position].objects, AMULET);
return (0);
} else
if (followgod == ourtime) {
puts("The goddess leads you down a steamy tunnel and into a high, wide chamber.");
puts("She sits down on a throne.");
position = 268;
setbit(location[position].objects, NORMGOD);
notes[CANTSEE] = 1;
return (0);
} else
puts("There is no one to follow.");
return (-1);
}

View File

@@ -1,321 +0,0 @@
/* $NetBSD: com3.c,v 1.7 1998/08/24 00:19:25 hubertf Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com3.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com3.c,v 1.7 1998/08/24 00:19:25 hubertf Exp $");
#endif
#endif /* not lint */
#include "extern.h"
void
dig()
{
if (testbit(inven, SHOVEL)) {
puts("OK");
ourtime++;
switch (position) {
case 144: /* copse near beach */
if (!notes[DUG]) {
setbit(location[position].objects, DEADWOOD);
setbit(location[position].objects, COMPASS);
setbit(location[position].objects, KNIFE);
setbit(location[position].objects, MACE);
notes[DUG] = 1;
}
break;
default:
puts("Nothing happens.");
}
} else
puts("You don't have a shovel.");
}
int
jump()
{
int n;
switch (position) {
default:
puts("Nothing happens.");
return (-1);
case 242:
position = 133;
break;
case 214:
case 215:
case 162:
case 159:
position = 145;
break;
case 232:
position = 275;
break;
case 3:
position = 1;
break;
case 172:
position = 201;
}
puts("Ahhhhhhh...");
injuries[12] = injuries[8] = injuries[7] = injuries[6] = 1;
for (n = 0; n < NUMOFOBJECTS; n++)
if (testbit(inven, n)) {
clearbit(inven, n);
setbit(location[position].objects, n);
}
carrying = 0;
encumber = 0;
return (0);
}
void
bury()
{
int value;
if (testbit(inven, SHOVEL)) {
while (wordtype[++wordnumber] != OBJECT && wordtype[wordnumber] != NOUNS && wordnumber < wordcount);
value = wordvalue[wordnumber];
if (wordtype[wordnumber] == NOUNS && (testbit(location[position].objects, value) || value == BODY))
switch (value) {
case BODY:
wordtype[wordnumber] = OBJECT;
if (testbit(inven, MAID) || testbit(location[position].objects, MAID))
value = MAID;
if (testbit(inven, DEADWOOD) || testbit(location[position].objects, DEADWOOD))
value = DEADWOOD;
if (testbit(inven, DEADGOD) || testbit(location[position].objects, DEADGOD))
value = DEADGOD;
if (testbit(inven, DEADTIME) || testbit(location[position].objects, DEADTIME))
value = DEADTIME;
if (testbit(inven, DEADNATIVE) || testbit(location[position].objects, DEADNATIVE))
value = DEADNATIVE;
break;
case NATIVE:
case NORMGOD:
puts("She screams as you wrestle her into the hole.");
case TIMER:
power += 7;
ego -= 10;
case AMULET:
case MEDALION:
case TALISMAN:
wordtype[wordnumber] = OBJECT;
break;
default:
puts("Wha..?");
}
if (wordtype[wordnumber] == OBJECT && position > 88 && (testbit(inven, value) || testbit(location[position].objects, value))) {
puts("Buried.");
if (testbit(inven, value)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
}
clearbit(location[position].objects, value);
switch (value) {
case MAID:
case DEADWOOD:
case DEADNATIVE:
case DEADTIME:
case DEADGOD:
ego += 2;
printf("The %s should rest easier now.\n", objsht[value]);
}
} else
puts("It doesn't seem to work.");
} else
puts("You aren't holding a shovel.");
}
void
drink()
{
int n;
if (testbit(inven, POTION)) {
puts("The cool liquid runs down your throat but turns to fire and you choke.");
puts("The heat reaches your limbs and tingles your spirit. You feel like falling");
puts("asleep.");
clearbit(inven, POTION);
WEIGHT = MAXWEIGHT;
CUMBER = MAXCUMBER;
for (n = 0; n < NUMOFINJURIES; n++)
injuries[n] = 0;
ourtime++;
zzz();
} else
puts("I'm not thirsty.");
}
int
shoot()
{
int firstnumber, value;
int n;
firstnumber = wordnumber;
if (!testbit(inven, LASER))
puts("You aren't holding a blaster.");
else {
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) {
value = wordvalue[wordnumber];
printf("%s:\n", objsht[value]);
for (n = 0; objsht[value][n]; n++);
if (testbit(location[position].objects, value)) {
clearbit(location[position].objects, value);
ourtime++;
printf("The %s explode%s\n", objsht[value], (objsht[value][n - 1] == 's' ? (objsht[value][n - 2] == 's' ? "s." : ".") : "s."));
if (value == BOMB)
die();
} else
printf("I dont see any %s around here.\n", objsht[value]);
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
}
/* special cases with their own return()'s */
if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS) {
ourtime++;
switch (wordvalue[wordnumber]) {
case DOOR:
switch (position) {
case 189:
case 231:
puts("The door is unhinged.");
location[189].north = 231;
location[231].south = 189;
whichway(location[position]);
break;
case 30:
puts("The wooden door splinters.");
location[30].west = 25;
whichway(location[position]);
break;
case 31:
puts("The laser blast has no effect on the door.");
break;
case 20:
puts("The blast hits the door and it explodes into flame. The magnesium burns");
puts("so rapidly that we have no chance to escape.");
die();
default:
puts("Nothing happens.");
}
break;
case NORMGOD:
if (testbit(location[position].objects, BATHGOD)) {
puts("The goddess is hit in the chest and splashes back against the rocks.");
puts("Dark blood oozes from the charred blast hole. Her naked body floats in the");
puts("pools and then off downstream.");
clearbit(location[position].objects, BATHGOD);
setbit(location[180].objects, DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
} else
if (testbit(location[position].objects, NORMGOD)) {
puts("The blast catches the goddess in the stomach, knocking her to the ground.");
puts("She writhes in the dirt as the agony of death taunts her.");
puts("She has stopped moving.");
clearbit(location[position].objects, NORMGOD);
setbit(location[position].objects, DEADGOD);
power += 5;
ego -= 10;
notes[JINXED]++;
if (wintime)
live();
break;
} else
puts("I don't see any goddess around here.");
break;
case TIMER:
if (testbit(location[position].objects, TIMER)) {
puts("The old man slumps over the bar.");
power++;
ego -= 2;
notes[JINXED]++;
clearbit(location[position].objects, TIMER);
setbit(location[position].objects, DEADTIME);
} else
puts("What old timer?");
break;
case MAN:
if (testbit(location[position].objects, MAN)) {
puts("The man falls to the ground with blood pouring all over his white suit.");
puts("Your fantasy is over.");
die();
} else
puts("What man?");
break;
case NATIVE:
if (testbit(location[position].objects, NATIVE)) {
puts("The girl is blown backwards several feet and lies in a pool of blood.");
clearbit(location[position].objects, NATIVE);
setbit(location[position].objects, DEADNATIVE);
power += 5;
ego -= 2;
notes[JINXED]++;
} else
puts("There is no girl here.");
break;
case -1:
puts("Shoot what?");
break;
default:
printf("You can't shoot the %s.\n", objsht[wordvalue[wordnumber]]);
}
} else
puts("You must be a looney.");
}
return (firstnumber);
}

View File

@@ -1,395 +0,0 @@
/* $NetBSD: com4.c,v 1.6 1997/10/11 02:07:04 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com4.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com4.c,v 1.6 1997/10/11 02:07:04 lukem Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
take(from)
unsigned int from[];
{
int firstnumber, heavy, bulky, value;
int n;
firstnumber = wordnumber;
if (wordnumber < wordcount && wordvalue[wordnumber + 1] == OFF) {
wordnumber++;
wordvalue[wordnumber] = TAKEOFF;
return (cypher());
} else {
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount && wordtype[wordnumber] == OBJECT) {
value = wordvalue[wordnumber];
printf("%s:\n", objsht[value]);
for (n = 0; objsht[value][n]; n++);
heavy = (carrying + objwt[value]) <= WEIGHT;
bulky = (encumber + objcumber[value]) <= CUMBER;
if ((testbit(from, value) || wiz || tempwiz) && heavy && bulky && !testbit(inven, value)) {
setbit(inven, value);
carrying += objwt[value];
encumber += objcumber[value];
ourtime++;
if (testbit(from, value))
printf("Taken.\n");
else
printf("Zap! Taken from thin air.\n");
clearbit(from, value);
if (value == MEDALION)
win--;
} else
if (testbit(inven, value))
printf("You're already holding%s%s.\n", (objsht[value][n - 1] == 's' ? " " : " a "), objsht[value]);
else
if (!heavy)
printf("The %s %s too heavy.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is"));
else
if (!bulky)
printf("The %s %s too cumbersome to hold.\n", objsht[value], (objsht[value][n - 1] == 's' ? "are" : "is"));
else
printf("I dont see any %s around here.\n", objsht[value]);
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
}
}
/* special cases with their own return()'s */
if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS)
switch (wordvalue[wordnumber]) {
case SWORD:
if (testbit(from, SWORD)) {
wordtype[wordnumber--] = OBJECT;
return (take(from));
}
if (testbit(from, TWO_HANDED)) {
wordvalue[wordnumber] = TWO_HANDED;
wordtype[wordnumber--] = OBJECT;
return (take(from));
}
wordvalue[wordnumber] = BROAD;
wordtype[wordnumber--] = OBJECT;
return (take(from));
case BODY:
if (testbit(from, MAID)) {
wordvalue[wordnumber] = MAID;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else
if (testbit(from, DEADWOOD)) {
wordvalue[wordnumber] = DEADWOOD;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else
if (testbit(from, DEADNATIVE)) {
wordvalue[wordnumber] = DEADNATIVE;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else
if (testbit(from, DEADGOD)) {
wordvalue[wordnumber] = DEADGOD;
wordtype[wordnumber--] = OBJECT;
return (take(from));
} else {
wordvalue[wordnumber] = DEADTIME;
wordtype[wordnumber--] = OBJECT;
return (take(from));
}
break;
case AMULET:
if (testbit(location[position].objects, AMULET)) {
puts("The amulet is warm to the touch, and its beauty catches your breath.");
puts("A mist falls over your eyes, but then it is gone. Sounds seem clearer");
puts("and sharper but far away as if in a dream. The sound of purling water reaches");
puts("you from afar. The mist falls again, and your heart leaps in horror. The gold");
puts("freezes your hands and fathomless darkness engulfs your soul.");
}
wordtype[wordnumber--] = OBJECT;
return (take(from));
case MEDALION:
if (testbit(location[position].objects, MEDALION)) {
puts("The medallion is warm, and it rekindles your spirit with the warmth of life.");
puts("Your amulet begins to glow as the medallion is brought near to it, and together\nthey radiate.");
}
wordtype[wordnumber--] = OBJECT;
return (take(from));
case TALISMAN:
if (testbit(location[position].objects, TALISMAN)) {
puts("The talisman is cold to the touch, and it sends a chill down your spine.");
}
wordtype[wordnumber--] = OBJECT;
return (take(from));
case NORMGOD:
if (testbit(location[position].objects, BATHGOD) && (testbit(wear, AMULET) || testbit(inven, AMULET))) {
puts("She offers a delicate hand, and you help her out of the sparkling springs.");
puts("Water droplets like liquid silver bedew her golden skin, but when they part");
puts("from her, they fall as teardrops. She wraps a single cloth around her and");
puts("ties it at the waist. Around her neck hangs a golden amulet.");
puts("She bids you to follow her.");
pleasure++;
followgod = ourtime;
clearbit(location[position].objects, BATHGOD);
} else
if (!testbit(location[position].objects, BATHGOD))
puts("You're in no position to take her.");
else
puts("She moves away from you.");
break;
default:
puts("It doesn't seem to work.");
}
else
puts("You've got to be kidding.");
return (firstnumber);
}
int
throw(name)
const char *name;
{
unsigned int n;
int deposit = 0;
int first, value;
first = wordnumber;
if (drop(name) != -1) {
switch (wordvalue[wordnumber]) {
case AHEAD:
deposit = ahead;
break;
case BACK:
deposit = back;
break;
case LEFT:
deposit = left;
break;
case RIGHT:
deposit = right;
break;
case UP:
deposit = location[position].up * (location[position].access || position == FINAL);
break;
case DOWN:
deposit = location[position].down;
break;
}
wordnumber = first;
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount) {
value = wordvalue[wordnumber];
if (deposit && testbit(location[position].objects, value)) {
clearbit(location[position].objects, value);
if (value != GRENADE)
setbit(location[deposit].objects, value);
else {
puts("A thundering explosion nearby sends up a cloud of smoke and shrapnel.");
for (n = 0; n < NUMOFWORDS; n++)
location[deposit].objects[n] = 0;
setbit(location[deposit].objects, CHAR);
}
if (value == ROPE && position == FINAL)
location[position].access = 1;
switch (deposit) {
case 189:
case 231:
puts("The stone door is unhinged.");
location[189].north = 231;
location[231].south = 189;
break;
case 30:
puts("The wooden door is blown open.");
location[30].west = 25;
break;
case 31:
puts("The door is not damaged.");
}
} else
if (value == GRENADE && testbit(location[position].objects, value)) {
puts("You are blown into shreds when your grenade explodes.");
die();
}
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (first);
}
return (first);
}
return (first);
}
int
drop(name)
const char *name;
{
int firstnumber, value;
firstnumber = wordnumber;
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount && (wordtype[wordnumber] == OBJECT || wordtype[wordnumber] == NOUNS)) {
value = wordvalue[wordnumber];
printf("%s:\n", objsht[value]);
if (testbit(inven, value)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
if (value == BOMB) {
puts("The bomb explodes. A blinding white light and immense concussion obliterate us.");
die();
}
if (value != AMULET && value != MEDALION && value != TALISMAN)
setbit(location[position].objects, value);
else
tempwiz = 0;
ourtime++;
if (*name == 'K')
puts("Drop kicked.");
else
printf("%s.\n", name);
} else {
if (*name != 'K') {
printf("You aren't holding the %s.\n", objsht[value]);
if (testbit(location[position].objects, value)) {
if (*name == 'T')
puts("Kicked instead.");
else
if (*name == 'G')
puts("Given anyway.");
}
} else
puts("Kicked.");
}
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
}
puts("Do what?");
return (-1);
}
int
takeoff()
{
wordnumber = take(wear);
return (drop("Dropped"));
}
int
puton()
{
wordnumber = take(location[position].objects);
return (wearit());
}
int
eat()
{
int firstnumber, value;
firstnumber = wordnumber;
while (wordtype[++wordnumber] == ADJS);
while (wordnumber <= wordcount) {
value = wordvalue[wordnumber];
switch (value) {
case -1:
puts("Eat what?");
return (firstnumber);
default:
printf("You can't eat%s%s!\n",
wordtype[wordnumber] == OBJECT &&
objsht[value]
[strlen(objsht[value]) - 1] == 's' ?
" " : " a ",
words[wordnumber]);
return (firstnumber);
case PAPAYAS:
case PINEAPPLE:
case KIWI:
case COCONUTS: /* eatable things */
case MANGO:
printf("%s:\n", objsht[value]);
if (testbit(inven, value) &&
ourtime > ate - CYCLE &&
testbit(inven, KNIFE)) {
clearbit(inven, value);
carrying -= objwt[value];
encumber -= objcumber[value];
ate = max(ourtime, ate) + CYCLE / 3;
snooze += CYCLE / 10;
ourtime++;
puts("Eaten. You can explore a little longer now.");
} else
if (ourtime < ate - CYCLE)
puts("You're stuffed.");
else
if (!testbit(inven, KNIFE))
puts("You need a knife.");
else
printf("You aren't holding the %s.\n", objsht[value]);
if (wordnumber < wordcount - 1 && wordvalue[++wordnumber] == AND)
wordnumber++;
else
return (firstnumber);
} /* end switch */
} /* end while */
return (firstnumber);
}

View File

@@ -1,351 +0,0 @@
/* $NetBSD: com5.c,v 1.9 1998/08/30 09:19:36 veego Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com5.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com5.c,v 1.9 1998/08/30 09:19:36 veego Exp $");
#endif
#endif /* not lint */
#include "extern.h"
void
kiss()
{
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS &&
testbit(location[position].objects, wordvalue[wordnumber])) {
pleasure++;
printf("Kissed.\n");
switch (wordvalue[wordnumber]) {
case NORMGOD:
switch (godready++) {
case 0:
puts("She squirms and avoids your advances.");
break;
case 1:
puts("She is coming around; she didn't fight it as much.");
break;
case 2:
puts("She's begining to like it.");
break;
default:
puts("She's gone limp.");
}
break;
case NATIVE:
puts("The lips are warm and her body robust. She pulls you down to the ground.");
break;
case TIMER:
puts("The old man blushes.");
break;
case MAN:
puts("The dwarf punches you in the kneecap.");
break;
default:
pleasure--;
}
} else
puts("I'd prefer not to.");
}
void
love()
{
int n;
while (wordtype[++wordnumber] != NOUNS && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS && testbit(location[position].objects, wordvalue[wordnumber])) {
if (wordvalue[wordnumber] == NORMGOD && !loved) {
if (godready >= 2) {
puts("She cuddles up to you, and her mouth starts to work:\n'That was my sister's amulet. The lovely goddess, Purl, was she. The Empire\ncaptured her just after the Darkness came. My other sister, Vert, was killed\nby the Dark Lord himself. He took her amulet and warped its power.\nYour quest was foretold by my father before he died, but to get the Dark Lord's\namulet you must use cunning and skill. I will leave you my amulet.");
puts("which you may use as you wish. As for me, I am the last goddess of the\nwaters. My father was the Island King, and the rule is rightfully mine.'\n\nShe pulls the throne out into a large bed.");
power++;
pleasure += 15;
ego++;
if (card(injuries, NUMOFINJURIES)) {
puts("Her kisses revive you; your wounds are healed.\n");
for (n = 0; n < NUMOFINJURIES; n++)
injuries[n] = 0;
WEIGHT = MAXWEIGHT;
CUMBER = MAXCUMBER;
}
printf("Goddess:\n");
if (!loved)
setbit(location[position].objects, MEDALION);
loved = 1;
ourtime += 10;
zzz();
} else {
puts("You wish!");
return;
}
}
if (wordvalue[wordnumber] == NATIVE) {
puts("The girl is easy prey. She peals off her sarong and indulges you.");
power++;
pleasure += 5;
printf("Girl:\n");
ourtime += 10;
zzz();
}
printf("Loved.\n");
} else
puts("It doesn't seem to work.");
}
int
zzz()
{
int oldtime;
int n;
oldtime = ourtime;
if ((snooze - ourtime) < (0.75 * CYCLE)) {
ourtime += 0.75 * CYCLE - (snooze - ourtime);
printf("<zzz>");
for (n = 0; n < ourtime - oldtime; n++)
printf(".");
printf("\n");
snooze += 3 * (ourtime - oldtime);
if (notes[LAUNCHED]) {
fuel -= (ourtime - oldtime);
if (location[position].down) {
position = location[position].down;
crash();
} else
notes[LAUNCHED] = 0;
}
if (OUTSIDE && rnd(100) < 50) {
puts("You are awakened abruptly by the sound of someone nearby.");
switch (rnd(4)) {
case 0:
if (ucard(inven)) {
n = rnd(NUMOFOBJECTS);
while (!testbit(inven, n))
n = rnd(NUMOFOBJECTS);
clearbit(inven, n);
if (n != AMULET && n != MEDALION && n != TALISMAN)
setbit(location[position].objects, n);
carrying -= objwt[n];
encumber -= objcumber[n];
}
puts("A fiendish little Elf is stealing your treasures!");
fight(ELF, 10);
break;
case 1:
setbit(location[position].objects, DEADWOOD);
break;
case 2:
setbit(location[position].objects, HALBERD);
break;
default:
break;
}
}
} else
return (0);
return (1);
}
void
chime()
{
if ((ourtime / CYCLE + 1) % 2 && OUTSIDE)
switch ((ourtime % CYCLE) / (CYCLE / 7)) {
case 0:
puts("It is just after sunrise.");
break;
case 1:
puts("It is early morning.");
break;
case 2:
puts("It is late morning.");
break;
case 3:
puts("It is near noon.");
break;
case 4:
puts("It is early afternoon.");
break;
case 5:
puts("It is late afternoon.");
break;
case 6:
puts("It is near sunset.");
break;
}
else
if (OUTSIDE)
switch ((ourtime % CYCLE) / (CYCLE / 7)) {
case 0:
puts("It is just after sunset.");
break;
case 1:
puts("It is early evening.");
break;
case 2:
puts("The evening is getting old.");
break;
case 3:
puts("It is near midnight.");
break;
case 4:
puts("These are the wee hours of the morning.");
break;
case 5:
puts("The night is waning.");
break;
case 6:
puts("It is almost morning.");
break;
}
else
puts("I can't tell the time in here.");
}
int
give()
{
int obj = -1, result = -1, person = 0, firstnumber, last1, last2;
last1 = last2 = 0;
firstnumber = wordnumber;
while (wordtype[++wordnumber] != OBJECT && wordvalue[wordnumber] != AMULET && wordvalue[wordnumber] != MEDALION && wordvalue[wordnumber] != TALISMAN && wordnumber <= wordcount);
if (wordnumber <= wordcount) {
obj = wordvalue[wordnumber];
if (obj == EVERYTHING)
wordtype[wordnumber] = -1;
last1 = wordnumber;
}
wordnumber = firstnumber;
while ((wordtype[++wordnumber] != NOUNS || wordvalue[wordnumber] == obj) && wordnumber <= wordcount);
if (wordtype[wordnumber] == NOUNS) {
person = wordvalue[wordnumber];
last2 = wordnumber;
}
/* Setting wordnumber to last1 - 1 looks wrong if last1 is 0, e.g.,
* plain `give'. However, detecting this case is liable to detect
* `give foo' as well, which would give a confusing error. We
* need to make sure the -1 value can cause no problems if it arises.
* If in the below we get to the drop("Given") then drop will look
* at word 0 for an object to give, and fail, which is OK; then
* result will be -1 and we get to the end, where wordnumber gets
* set to something more sensible. If we get to "I don't think
* that is possible" then again wordnumber is set to something
* sensible. The wordnumber we leave with still isn't right if
* you include words the game doesn't know in your command, but
* that's no worse than what other commands than give do in
* the same place. */
wordnumber = last1 - 1;
if (person && testbit(location[position].objects, person))
if (person == NORMGOD && godready < 2 && !(obj == RING || obj == BRACELET))
puts("The goddess won't look at you.");
else
result = drop("Given");
else {
puts("I don't think that is possible.");
wordnumber = max(last1, last2) + 1;
return (0);
}
if (result != -1 && (testbit(location[position].objects, obj) || obj == AMULET || obj == MEDALION || obj == TALISMAN)) {
clearbit(location[position].objects, obj);
ourtime++;
ego++;
switch (person) {
case NATIVE:
puts("She accepts it shyly.");
ego += 2;
break;
case NORMGOD:
if (obj == RING || obj == BRACELET) {
puts("She takes the charm and puts it on. A little kiss on the cheek is");
puts("your reward.");
ego += 5;
godready += 3;
}
if (obj == AMULET || obj == MEDALION || obj == TALISMAN) {
win++;
ego += 5;
power -= 5;
if (win >= 3) {
puts("The powers of the earth are now legitimate. You have destroyed the Darkness");
puts("and restored the goddess to her thrown. The entire island celebrates with");
puts("dancing and spring feasts. As a measure of her gratitude, the goddess weds you");
puts("in the late summer and crowns you Prince Liverwort, Lord of Fungus.");
puts("\nBut, as the year wears on and autumn comes along, you become restless and");
puts("yearn for adventure. The goddess, too, realizes that the marriage can't last.");
puts("She becomes bored and takes several more natives as husbands. One evening,");
puts("after having been out drinking with the girls, she kicks the throne particulary");
puts("hard and wakes you up. (If you want to win this game, you're going to have to\nshoot her!)");
clearbit(location[position].objects, MEDALION);
wintime = ourtime;
}
}
break;
case TIMER:
if (obj == COINS) {
puts("He fingers the coins for a moment and then looks up agape. `Kind you are and");
puts("I mean to repay you as best I can.' Grabbing a pencil and cocktail napkin...\n");
printf("+-----------------------------------------------------------------------------+\n");
printf("| xxxxxxxx\\ |\n");
printf("| xxxxx\\ CLIFFS |\n");
printf("| FOREST xxx\\ |\n");
printf("| \\\\ x\\ OCEAN |\n");
printf("| || x\\ |\n");
printf("| || ROAD x\\ |\n");
printf("| || x\\ |\n");
printf("| SECRET || ......... |\n");
printf("| - + - || ........ |\n");
printf("| ENTRANCE || ... BEACH |\n");
printf("| || ... E |\n");
printf("| || ... | |\n");
printf("| // ... N <-- + --- S |\n");
printf("| PALM GROVE // ... | |\n");
printf("| // ... W |\n");
printf("+-----------------------------------------------------------------------------+\n");
puts("\n`This map shows a secret entrance to the catacombs.");
puts("You will know when you arrive because I left an old pair of shoes there.'");
}
break;
}
}
wordnumber = max(last1, last2) + 1;
return (firstnumber);
}

View File

@@ -1,249 +0,0 @@
/* $NetBSD: com6.c,v 1.9 1997/10/13 21:05:36 cjs Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com6.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com6.c,v 1.9 1997/10/13 21:05:36 cjs Exp $");
#endif
#endif /* not lint */
#include <time.h>
#include "extern.h"
#include "pathnames.h"
int
launch()
{
if (testbit(location[position].objects, VIPER) && !notes[CANTLAUNCH]) {
if (fuel > 4) {
clearbit(location[position].objects, VIPER);
position = location[position].up;
notes[LAUNCHED] = 1;
ourtime++;
fuel -= 4;
puts("You climb into the viper and prepare for launch.");
puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat.");
return (1);
} else
puts("Not enough fuel to launch.");
} else
puts("Can't launch.");
return (0);
}
int
land()
{
if (notes[LAUNCHED] && testbit(location[position].objects, LAND) &&
location[position].down) {
notes[LAUNCHED] = 0;
position = location[position].down;
setbit(location[position].objects, VIPER);
fuel -= 2;
ourtime++;
puts("You are down.");
return (1);
} else
puts("You can't land here.");
return (0);
}
void
die()
{ /* endgame */
printf("bye.\nYour rating was %s.\n", rate());
post(' ');
exit(0);
}
void
diesig(dummy)
int dummy __attribute__((unused));
{
die();
}
void
live()
{
puts("\nYou win!");
post('!');
exit(0);
}
static FILE *score_fp;
void
open_score_file()
{
score_fp = fopen(_PATH_SCORE, "a");
if (score_fp == NULL)
warn("open %s for append", _PATH_SCORE);
}
void
post(ch)
char ch;
{
time_t tv;
char *date;
sigset_t sigset, osigset;
sigemptyset(&sigset);
sigaddset(&sigset, SIGINT);
sigprocmask(SIG_BLOCK, &sigset, &osigset);
tv = time(NULL);
date = ctime(&tv);
date[24] = '\0';
if (score_fp != NULL) {
fprintf(score_fp, "%s %8s %c%20s", date, username, ch, rate());
if (wiz)
fprintf(score_fp, " wizard\n");
else
if (tempwiz)
fprintf(score_fp, " WIZARD!\n");
else
fprintf(score_fp, "\n");
}
sigprocmask(SIG_SETMASK, &osigset, (sigset_t *) 0);
}
const char *
rate()
{
int score;
score = max(max(pleasure, power), ego);
if (score == pleasure) {
if (score < 5)
return ("novice");
else
if (score < 20)
return ("junior voyeur");
else
if (score < 35)
return ("Don Juan");
else
return ("Marquis De Sade");
} else
if (score == power) {
if (score < 5)
return ("serf");
else
if (score < 8)
return ("Samurai");
else
if (score < 13)
return ("Klingon");
else
if (score < 22)
return ("Darth Vader");
else
return ("Sauron the Great");
} else {
if (score < 5)
return ("Polyanna");
else
if (score < 10)
return ("philanthropist");
else
if (score < 20)
return ("Tattoo");
else
return ("Mr. Roarke");
}
}
int
drive()
{
if (testbit(location[position].objects, CAR)) {
puts("You hop in the car and turn the key. There is a perceptible grating noise,");
puts("and an explosion knocks you unconscious...");
clearbit(location[position].objects, CAR);
setbit(location[position].objects, CRASH);
injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1;
ourtime += 15;
zzz();
return (0);
} else
puts("There is nothing to drive here.");
return (-1);
}
int
ride()
{
if (testbit(location[position].objects, HORSE)) {
puts("You climb onto the stallion and kick it in the guts. The stupid steed launches");
puts("forward through bush and fern. You are thrown and the horse gallups off.");
clearbit(location[position].objects, HORSE);
while (!(position = rnd(NUMOFROOMS + 1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
setbit(location[position].objects, HORSE);
if (location[position].north)
position = location[position].north;
else
if (location[position].south)
position = location[position].south;
else
if (location[position].east)
position = location[position].east;
else
position = location[position].west;
return (0);
} else
puts("There is no horse here.");
return (-1);
}
void
light()
{ /* synonyms = {strike, smoke} *//* for
* matches, cigars */
if (testbit(inven, MATCHES) && matchcount) {
puts("Your match splutters to life.");
ourtime++;
matchlight = 1;
matchcount--;
if (position == 217) {
puts("The whole bungalow explodes with an intense blast.");
die();
}
} else
puts("You're out of matches.");
}

View File

@@ -1,276 +0,0 @@
/* $NetBSD: com7.c,v 1.6 1997/10/11 02:07:10 lukem Exp $ */
/*
* Copyright (c) 1983, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)com7.c 8.2 (Berkeley) 4/28/95";
#else
__RCSID("$NetBSD: com7.c,v 1.6 1997/10/11 02:07:10 lukem Exp $");
#endif
#endif /* not lint */
#include "extern.h"
int
fight(enemy, strength)
int enemy, strength;
{
int lifeline = 0;
int hurt;
char auxbuf[LINELENGTH];
char *next;
int i;
int exhaustion;
exhaustion = 0;
fighton:
ourtime++;
snooze -= 5;
if (snooze > ourtime)
exhaustion = CYCLE / (snooze - ourtime);
else {
puts("You collapse exhausted, and he pulverizes your skull.");
die();
}
if (snooze - ourtime < 20)
puts("You look tired! I hope you're able to fight.");
next = getcom(auxbuf, LINELENGTH, "<fight!>-: ", 0);
for (i = 0; next && i < 10; i++)
next = getword(next, words[i], -1);
parse();
switch (wordvalue[wordnumber]) {
case KILL:
case SMITE:
if (testbit(inven, TWO_HANDED))
hurt = rnd(70) - 2 * card(injuries, NUMOFINJURIES) - ucard(wear) - exhaustion;
else
if (testbit(inven, SWORD) || testbit(inven, BROAD))
hurt = rnd(50) % (WEIGHT - carrying) - card(injuries, NUMOFINJURIES) - encumber - exhaustion;
else
if (testbit(inven, KNIFE) || testbit(inven, MALLET) || testbit(inven, CHAIN) || testbit(inven, MACE) || testbit(inven, HALBERD))
hurt = rnd(15) - card(injuries, NUMOFINJURIES) - exhaustion;
else
hurt = rnd(7) - encumber;
if (hurt < 5)
switch (rnd(3)) {
case 0:
puts("You swung wide and missed.");
break;
case 1:
puts("He checked your blow. CLASH! CLANG!");
break;
case 2:
puts("His filthy tunic hangs by one less thread.");
break;
}
else
if (hurt < 10) {
switch (rnd(3)) {
case 0:
puts("He's bleeding.");
break;
case 1:
puts("A trickle of blood runs down his face.");
break;
case 2:
puts("A huge purple bruise is forming on the side of his face.");
break;
}
lifeline++;
} else
if (hurt < 20) {
switch (rnd(3)) {
case 0:
puts("He staggers back quavering.");
break;
case 1:
puts("He jumps back with his hand over the wound.");
break;
case 2:
puts("His shirt falls open with a swath across the chest.");
break;
}
lifeline += 5;
} else
if (hurt < 30) {
switch (rnd(3)) {
case 0:
printf("A bloody gash opens up on his %s side.\n", (rnd(2) ? "left" : "right"));
break;
case 1:
puts("The steel bites home and scrapes along his ribs.");
break;
case 2:
puts("You pierce him, and his breath hisses through clenched teeth.");
break;
}
lifeline += 10;
} else
if (hurt < 40) {
switch (rnd(3)) {
case 0:
puts("You smite him to the ground.");
if (strength - lifeline > 20)
puts("But in a flurry of steel he regains his feet!");
break;
case 1:
puts("The force of your blow sends him to his knees.");
puts("His arm swings lifeless at his side.");
break;
case 2:
puts("Clutching his blood drenched shirt, he collapses stunned.");
break;
}
lifeline += 20;
} else {
switch (rnd(3)) {
case 0:
puts("His ribs crack under your powerful swing, flooding his lungs with blood.");
break;
case 1:
puts("You shatter his upheld arm in a spray of blood. The blade continues deep");
puts("into his back, severing the spinal cord.");
lifeline += 25;
break;
case 2:
puts("With a mighty lunge the steel slides in, and gasping, he falls to the ground.");
lifeline += 25;
break;
}
lifeline += 30;
}
break;
case BACK:
if (enemy == DARK && lifeline > strength * 0.33) {
puts("He throws you back against the rock and pummels your face.");
if (testbit(inven, AMULET) || testbit(wear, AMULET)) {
printf("Lifting the amulet from you, ");
if (testbit(inven, MEDALION) || testbit(wear, MEDALION)) {
puts("his power grows and the walls of\nthe earth tremble.");
puts("When he touches the medallion, your chest explodes and the foundations of the\nearth collapse.");
puts("The planet is consumed by darkness.");
die();
}
if (testbit(inven, AMULET)) {
clearbit(inven, AMULET);
carrying -= objwt[AMULET];
encumber -= objcumber[AMULET];
} else
clearbit(wear, AMULET);
puts("he flees down the dark caverns.");
clearbit(location[position].objects, DARK);
injuries[SKULL] = 1;
followfight = ourtime;
return (0);
} else {
puts("I'm afraid you have been killed.");
die();
}
} else {
puts("You escape stunned and disoriented from the fight.");
puts("A victorious bellow echoes from the battlescene.");
if (back && position != back)
move(back, BACK);
else
if (ahead && position != ahead)
move(ahead, AHEAD);
else
if (left && position != left)
move(left, LEFT);
else
if (right && position != right)
move(right, RIGHT);
else
move(location[position].down, AHEAD);
return (0);
}
case SHOOT:
if (testbit(inven, LASER)) {
if (strength - lifeline <= 50) {
printf("The %s took a direct hit!\n", objsht[enemy]);
lifeline += 50;
} else {
puts("With his bare hand he deflects the laser blast and whips the pistol from you!");
clearbit(inven, LASER);
setbit(location[position].objects, LASER);
carrying -= objwt[LASER];
encumber -= objcumber[LASER];
}
} else
puts("Unfortunately, you don't have a blaster handy.");
break;
case DROP:
case DRAW:
cypher();
ourtime--;
break;
default:
puts("You don't have a chance, he is too quick.");
break;
}
if (lifeline >= strength) {
printf("You have killed the %s.\n", objsht[enemy]);
if (enemy == ELF || enemy == DARK)
puts("A watery black smoke consumes his body and then vanishes with a peal of thunder!");
clearbit(location[position].objects, enemy);
power += 2;
notes[JINXED]++;
return (0);
}
puts("He attacks...");
/* some embellisments */
hurt = rnd(NUMOFINJURIES) - (testbit(inven, SHIELD) != 0) - (testbit(wear, MAIL) != 0) - (testbit(wear, HELM) != 0);
hurt += (testbit(wear, AMULET) != 0) + (testbit(wear, MEDALION) != 0) + (testbit(wear, TALISMAN) != 0);
hurt = hurt < 0 ? 0 : hurt;
hurt = hurt >= NUMOFINJURIES ? NUMOFINJURIES - 1 : hurt;
if (!injuries[hurt]) {
injuries[hurt] = 1;
printf("I'm afraid you have suffered %s.\n", ouch[hurt]);
} else
puts("You emerge unscathed.");
if (injuries[SKULL] && injuries[INCISE] && injuries[NECK]) {
puts("I'm afraid you have suffered fatal injuries.");
die();
}
goto fighton;
}

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: bcd.6,v 1.12 2001/06/05 12:41:04 wiz Exp $ .\" $NetBSD: bcd.6,v 1.15 2003/02/25 10:34:45 wiz Exp $
.\" .\"
.\" Copyright (c) 1988, 1991, 1993 .\" Copyright (c) 1988, 1991, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -33,7 +33,7 @@
.\" .\"
.\" @(#)bcd.6 8.1 (Berkeley) 5/31/93 .\" @(#)bcd.6 8.1 (Berkeley) 5/31/93
.\" .\"
.Dd May 31, 1993 .Dd November 26, 2002
.Dt BCD 6 .Dt BCD 6
.Os .Os
.Sh NAME .Sh NAME
@@ -45,12 +45,13 @@
.Nm .Nm
.Op Ar string ... .Op Ar string ...
.Nm ppt .Nm ppt
.Op Ar string ... .Op Fl d Ns \&| Ns Ar string ...
.Nm morse .Nm morse
.Op Fl ds Ar string ... .Op Fl ds Ar string ...
.Sh DESCRIPTION .Sh DESCRIPTION
The The
.Nm bcd , .Nm bcd ,
.Nm ,
.Nm ppt .Nm ppt
and and
.Nm morse .Nm morse
@@ -65,10 +66,13 @@ The
.Fl s .Fl s
option for morse produces dots and dashes rather than words. option for morse produces dots and dashes rather than words.
.It Fl d .It Fl d
Decode morse output consisting of dots and slashes (as generated Decode
by using the .Nm ppt
output, or
.Nm morse
output consisting of dots and slashes (as generated by using the
.Fl s .Fl s
option. option).
.El .El
.Sh SEE ALSO .Sh SEE ALSO
.Rs .Rs

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: boggle.6,v 1.3 2001/04/02 22:46:18 wiz Exp $ .\" $NetBSD: boggle.6,v 1.5 2002/09/26 18:31:59 wiz Exp $
.\" .\"
.\" Copyright (c) 1993 .\" Copyright (c) 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -103,8 +103,8 @@ Help is available during play by typing
More detailed information on the game is given there. More detailed information on the game is given there.
.Sh BUGS .Sh BUGS
If there are a great many words in the cube the final display of the words If there are a great many words in the cube the final display of the words
may scroll off of the screen. (On a 25 line screen about 130 words can be may scroll off of the screen.
displayed.) (On a 25 line screen about 130 words can be displayed.)
.Pp .Pp
No word can contain a No word can contain a
.Sq q .Sq q
@@ -115,8 +115,7 @@ When using the
.Ar + .Ar +
or or
.Ar ++ .Ar ++
options the display of words found in the board options the display of words found in the board doesn't indicate reused cubes.
doesn't indicate reused cubes.
.Sh AUTHOR .Sh AUTHOR
Boggle is a trademark of Parker Brothers. Boggle is a trademark of Parker Brothers.
.Pp .Pp

41
configure vendored
View File

@@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# configure - home-grown configuration script for bsd-games. # configure - home-grown configuration script for bsd-games.
# #
# Copyright (c) 1997, 1998, 1999, 2000 Joseph Samuel Myers. # Copyright (c) 1997, 1998, 1999, 2000, 2003 Joseph Samuel Myers.
# All rights reserved. # All rights reserved.
# #
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
@@ -338,6 +338,28 @@ echo "this blank. Leave it blank if /usr/include/ncurses is a symbolic link"
echo "to /usr/include." echo "to /usr/include."
ask "Ncurses includes" ncurses_includes '' ask "Ncurses includes" ncurses_includes ''
openssl_lib=
openssl_includes=
if building_in factor; then
echo
echo "factor can use libcrypto from OpenSSL to handle large numbers."
ask_yn "Use libcrypto" use_libcrypto y
if [ $use_libcrypto = y ]; then
echo "If the OpenSSL includes (with files such as bn.h) are not in"
echo "/usr/include/openssl, then you will need to specify a -I option"
echo "here, naming a directory containing an \"openssl\" subdirectory"
echo "with the OpenSSL headers."
ask "OpenSSL includes" openssl_includes ''
echo "If the OpenSSL libcrypto library is not in a location searched"
echo "by the compiler by default, or has a strange name, you will"
echo "need to specify the appropriate options to find it here"
echo "(for example, -L/usr/ssl/lib -lcrypto); otherwise, leave the"
echo "default, which is probably correct."
ask "OpenSSL libcrypto library" openssl_lib -lcrypto
fi
fi
subst_vars="$subst_vars openssl_lib openssl_includes"
ask "Other CFLAGS" other_cflags '' ask "Other CFLAGS" other_cflags ''
ask "Other LDFLAGS" other_ldflags '' ask "Other LDFLAGS" other_ldflags ''
@@ -345,6 +367,10 @@ ask "Other LDFLAGS" other_ldflags ''
echo "#ifndef LINUX_BSD_GAMES_H" >include/bsd-games.h echo "#ifndef LINUX_BSD_GAMES_H" >include/bsd-games.h
echo "#define LINUX_BSD_GAMES_H 1" >>include/bsd-games.h echo "#define LINUX_BSD_GAMES_H 1" >>include/bsd-games.h
if [ "$use_libcrypto" = "y" ]; then
echo "#define HAVE_OPENSSL 1" >>include/bsd-games.h
fi
check_func getloadavg <<EOF check_func getloadavg <<EOF
#include <stdlib.h> #include <stdlib.h>
@@ -370,6 +396,19 @@ main(void)
} }
EOF EOF
check_func strlcpy <<EOF
#include <string.h>
int
main(void)
{
char s[1] = "";
char d[1];
strlcpy(d, s, 1);
return 0;
}
EOF
echo "#endif /* !defined(LINUX_BSD_GAMES_H) */" >>include/bsd-games.h echo "#endif /* !defined(LINUX_BSD_GAMES_H) */" >>include/bsd-games.h

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: countmail.6,v 1.5 1999/03/22 18:49:11 garbled Exp $ .\" $NetBSD: countmail.6,v 1.8 2002/09/26 18:32:00 wiz Exp $
.\" .\"
.\" Copyright (c) 1997 Matthew R. Green .\" Copyright (c) 1997 Matthew R. Green
.\" All rights reserved. .\" All rights reserved.
@@ -44,8 +44,11 @@ The
program first appeared in program first appeared in
.Nx 1.3 . .Nx 1.3 .
.Nm .Nm
was first written by Noah Friedman <friedman@splode.com> in 1993. was first written by
This version was written by Charles M. Hannum <mycroft@netbsd.org>. .An Noah Friedman Aq friedman@splode.com
in 1993.
This version was written by Charles M. Hannum
.Aq mycroft@netbsd.org .
.Sh CAVEATS .Sh CAVEATS
The read loop is horrendously slow on every shell implementation tried. The read loop is horrendously slow on every shell implementation tried.
.Nm .Nm

17
debian/changelog vendored
View File

@@ -1,3 +1,20 @@
bsdgames (2.14-1) unstable; urgency=low
* New upstream release, whivh includes hack, back fron bsdgames-nonfree.
* Conflict and replace with old versions of bsdgames-nonfree that include
hack.
* Add hack to package description and menu file.
* Add in hack's two READ_ME files to binay package.
* Patched hack config.h as it is patched in bsdgames-nonfree.
* Unlike bsdgames-nonfree, put the help, hh, rumors, and data files in
/usr/share/games/bsdgames/hack, as the patched config.h makes it look
there.
* postinst moves over hack state files to new directory
* Patched phantasia to use strerror and not segfault if it cannot open the
var files. Closes: #187251 (patch sent upstream)
-- Joey Hess <joeyh@debian.org> Wed, 2 Apr 2003 20:44:19 -0500
bsdgames (2.13-11) unstable; urgency=low bsdgames (2.13-11) unstable; urgency=low
* Fixed silly typo in wargames man page. Closes: #169307 * Fixed silly typo in wargames man page. Closes: #169307

14
debian/control vendored
View File

@@ -3,19 +3,19 @@ Section: games
Priority: optional Priority: optional
Build-Depends: debhelper (>= 4), libncurses5-dev, flex, bison, wenglish, wbritish, dpkg-dev (>= 1.9.0) Build-Depends: debhelper (>= 4), libncurses5-dev, flex, bison, wenglish, wbritish, dpkg-dev (>= 1.9.0)
Maintainer: Joey Hess <joeyh@debian.org> Maintainer: Joey Hess <joeyh@debian.org>
Standards-Version: 3.5.7.1 Standards-Version: 3.5.9.0
Package: bsdgames Package: bsdgames
Architecture: any Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, wenglish | wordlist Depends: ${shlibs:Depends}, ${misc:Depends}, wenglish | wordlist
Conflicts: bsdgames-nonfree (<< 2.5), suidmanager (<< 0.50) Conflicts: bsdgames-nonfree (<< 2.14), suidmanager (<< 0.50)
Replaces: bsdgames-nonfree (<< 2.5) Replaces: bsdgames-nonfree (<< 2.14)
Description: collection of text games from BSD systems Description: a collection of classic textual unix games
This is a collection of some of the text-based games and amusements that have This is a collection of some of the text-based games and amusements that have
been enjoyed for decades on unix systems. been enjoyed for decades on unix systems.
. .
Includes these programs: adventure, arithmetic, atc, backgammon, battlestar, Includes these programs: adventure, arithmetic, atc, backgammon, battlestar,
bcd, boggle, caesar, canfield, countmail, cribbage, fish, gomoku, hangman, bcd, boggle, caesar, canfield, countmail, cribbage, fish, gomoku, hack,
hunt, mille, monop, morse, number, pig, phantasia, pom, ppt, primes, quiz, hangman, hunt, mille, monop, morse, number, pig, phantasia, pom, ppt, primes,
random, rain, robots, sail, snake, tetris, trek, wargames, worm, worms, quiz, random, rain, robots, sail, snake, tetris, trek, wargames, worm, worms,
wump, wtf wump, wtf

2
debian/menu vendored
View File

@@ -5,6 +5,8 @@
command="sh -c '/usr/games/atc ; echo;echo PRESS ENTER;read line'" command="sh -c '/usr/games/atc ; echo;echo PRESS ENTER;read line'"
?package(bsdgames):needs="text" section="Games/Adventure" \ ?package(bsdgames):needs="text" section="Games/Adventure" \
title="Battlestar" command="sh -c '/usr/games/battlestar;echo PRESS ENTER;read line'" title="Battlestar" command="sh -c '/usr/games/battlestar;echo PRESS ENTER;read line'"
?package(bsdgames):needs="text" section="Games/Adventure" \
title="Hack" command=/usr/games/hack
?package(bsdgames):needs="text" section="Games/Card" \ ?package(bsdgames):needs="text" section="Games/Card" \
title="Canfield" command="/usr/games/canfield" title="Canfield" command="/usr/games/canfield"
?package(bsdgames):needs="text" section="Games/Card" \ ?package(bsdgames):needs="text" section="Games/Card" \

18
debian/postinst vendored
View File

@@ -17,8 +17,24 @@ SCOREFILES="
/var/games/bsdgames/phantasia/motd /var/games/bsdgames/phantasia/motd
/var/games/bsdgames/phantasia/scoreboard /var/games/bsdgames/phantasia/scoreboard
/var/games/bsdgames/phantasia/void /var/games/bsdgames/phantasia/void
/var/games/bsdgames/phantasia/monsters" /var/games/bsdgames/phantasia/monsters
/var/games/bsdgames/hack/perm
/var/games/bsdgames/hack/record"
# Hack moved over from bsdgames-nonfree.
if [ -d /var/games/bsdgames-nonfree ]; then
for file in perm record; do
if [ -e /var/games/bsdgames-nonfree/hack/$file ]; then
mv -f /var/games/bsdgames-nonfree/hack/$file \
/var/games/bsdgames/hack/$file
fi
done
cp -a -f /var/games/bsdgames-nonfree/hack/save/* \
/var/games/bsdgames/hack/save/ 2>/dev/null || true
rm -f /var/games/bsdgames-nonfree/hack/save/* 2>/dev/null || true
rmdir -p /var/games/bsdgames-nonfree/hack/save 2>/dev/null || true
fi
# These files cannot just be zero-byte files: # These files cannot just be zero-byte files:
if [ ! -e /var/games/bsdgames/phantasia/void ]; then if [ ! -e /var/games/bsdgames/phantasia/void ]; then
cp /usr/share/games/bsdgames/phantasia/void \ cp /usr/share/games/bsdgames/phantasia/void \

6
debian/postrm vendored
View File

@@ -17,13 +17,17 @@ SCOREFILES="
/var/games/bsdgames/phantasia/motd /var/games/bsdgames/phantasia/motd
/var/games/bsdgames/phantasia/scoreboard /var/games/bsdgames/phantasia/scoreboard
/var/games/bsdgames/phantasia/void /var/games/bsdgames/phantasia/void
/var/games/bsdgames/phantasia/monsters" /var/games/bsdgames/phantasia/monsters
/var/games/bsdgames/hack/perm
/var/games/bsdgames/hack/record"
# Remove high score files on purge. # Remove high score files on purge.
if [ "$1" = "purge" ]; then if [ "$1" = "purge" ]; then
rm -f $SCOREFILES rm -f $SCOREFILES
rmdir /var/games/bsdgames/phantasia /var/games/bsdgames/sail \ rmdir /var/games/bsdgames/phantasia /var/games/bsdgames/sail \
/var/games/bsdgames /var/games 2>/dev/null || true /var/games/bsdgames /var/games 2>/dev/null || true
rm -f /var/games/bsdgames/hack/save/* 2>/dev/null || true
rmdir -p /var/games/bsdgames/hack/save 2>/dev/null || true
fi fi
#DEBHELPER# #DEBHELPER#

19
debian/rules vendored
View File

@@ -27,7 +27,8 @@ binary-arch: build
dh_testroot dh_testroot
dh_clean dh_clean
dh_installdirs usr/share/doc/bsdgames \ dh_installdirs usr/share/doc/bsdgames \
usr/share/games/bsdgames/phantasia usr/share/games/bsdgames/phantasia \
var/games/bsdgames/hack/save
$(MAKE) install $(MAKE) install
cp atc/BUGS debian/bsdgames/usr/share/doc/bsdgames/BUGS.atc cp atc/BUGS debian/bsdgames/usr/share/doc/bsdgames/BUGS.atc
@@ -36,6 +37,8 @@ binary-arch: build
cp phantasia/README debian/bsdgames/usr/share/doc/bsdgames/README.phantasia cp phantasia/README debian/bsdgames/usr/share/doc/bsdgames/README.phantasia
cp boggle/README debian/bsdgames/usr/share/doc/bsdgames/README.boggle cp boggle/README debian/bsdgames/usr/share/doc/bsdgames/README.boggle
cp boggle/README.linux debian/bsdgames/usr/share/doc/bsdgames/README.linux.boggle cp boggle/README.linux debian/bsdgames/usr/share/doc/bsdgames/README.linux.boggle
cp hack/Original_READ_ME debian/bsdgames/usr/share/doc/bsdgames/Original_READ_ME.hack
cp hack/READ_ME debian/bsdgames/usr/share/doc/bsdgames/READ_ME.hack
# Since factor is not installed, and primes.6 is a symlink to # Since factor is not installed, and primes.6 is a symlink to
# factor.6, I need to change that to the actual man page. # factor.6, I need to change that to the actual man page.
-rm -f debian/bsdgames/usr/share/man/man6/factor.6.gz \ -rm -f debian/bsdgames/usr/share/man/man6/factor.6.gz \
@@ -68,7 +71,8 @@ binary-arch: build
debian/bsdgames/usr/games/snake \ debian/bsdgames/usr/games/snake \
debian/bsdgames/usr/games/tetris-bsd \ debian/bsdgames/usr/games/tetris-bsd \
debian/bsdgames/usr/games/phantasia \ debian/bsdgames/usr/games/phantasia \
debian/bsdgames/usr/games/sail debian/bsdgames/usr/games/sail \
debian/bsdgames/usr/games/hack
chmod g+s debian/bsdgames/usr/games/atc \ chmod g+s debian/bsdgames/usr/games/atc \
debian/bsdgames/usr/games/battlestar \ debian/bsdgames/usr/games/battlestar \
debian/bsdgames/usr/games/canfield \ debian/bsdgames/usr/games/canfield \
@@ -77,15 +81,20 @@ binary-arch: build
debian/bsdgames/usr/games/snake \ debian/bsdgames/usr/games/snake \
debian/bsdgames/usr/games/tetris-bsd \ debian/bsdgames/usr/games/tetris-bsd \
debian/bsdgames/usr/games/phantasia \ debian/bsdgames/usr/games/phantasia \
debian/bsdgames/usr/games/sail debian/bsdgames/usr/games/sail \
debian/bsdgames/usr/games/hack
# The game directories need to be sgid too, and let's # The game directories need to be sgid too, and let's
# remove all the zero byte score files in them. # remove all the zero byte score files in them.
chown root.games debian/bsdgames/var/games/bsdgames/ \ chown root.games debian/bsdgames/var/games/bsdgames/ \
debian/bsdgames/var/games/bsdgames/sail \ debian/bsdgames/var/games/bsdgames/sail \
debian/bsdgames/var/games/bsdgames/phantasia debian/bsdgames/var/games/bsdgames/phantasia \
debian/bsdgames/var/games/bsdgames/hack \
debian/bsdgames/var/games/bsdgames/hack/save
chmod g+rws debian/bsdgames/var/games/bsdgames/ \ chmod g+rws debian/bsdgames/var/games/bsdgames/ \
debian/bsdgames/var/games/bsdgames/sail \ debian/bsdgames/var/games/bsdgames/sail \
debian/bsdgames/var/games/bsdgames/phantasia debian/bsdgames/var/games/bsdgames/phantasia \
debian/bsdgames/var/games/bsdgames/hack \
debian/bsdgames/var/games/bsdgames/hack/save
find debian/bsdgames/var/games/bsdgames -size 0 -exec rm {} \; find debian/bsdgames/var/games/bsdgames -size 0 -exec rm {} \;
dh_installdeb dh_installdeb

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: factor.6,v 1.5 1997/10/10 12:51:27 lukem Exp $ .\" $NetBSD: factor.6,v 1.7 2002/09/26 18:32:01 wiz Exp $
.\" .\"
.\" Copyright (c) 1989, 1993 .\" Copyright (c) 1989, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -46,8 +46,7 @@
.Os .Os
.Sh NAME .Sh NAME
.Nm primes .Nm primes
.Nd .Nd generate primes
generate primes
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Ar number ... .Op Ar number ...
@@ -86,6 +85,10 @@ The
.Ar start .Ar start
value is terminated by a non-digit character (such as a newline). value is terminated by a non-digit character (such as a newline).
The input line must not be longer than 255 characters. The input line must not be longer than 255 characters.
.Sh DIAGNOSTICS
Out of range or invalid input results in
.Sq ouch
being written to standard error.
.Sh BUGS .Sh BUGS
.Nm primes .Nm primes
won't get you a world record. won't get you a world record.

View File

@@ -56,7 +56,8 @@ hack_install: hack_all
$(INSTALL_SCORE_GAME) hack/hack $(INSTALL_PREFIX)$(GAMESDIR)/hack $(INSTALL_SCORE_GAME) hack/hack $(INSTALL_PREFIX)$(GAMESDIR)/hack
$(HIDE_GAME) hack $(HIDE_GAME) hack
$(INSTALL_HACK_DIR) $(INSTALL_PREFIX)$(HACK_DIR) $(INSTALL_HACK_DIR) $(INSTALL_PREFIX)$(HACK_DIR)
set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)$(HACK_DIR)/$$f; done install -d $(INSTALL_PREFIX)/usr/share/games/bsdgames/hack
set -e; for f in data help hh rumors; do $(INSTALL_DATA) hack/$$f $(INSTALL_PREFIX)/usr/share/games/bsdgames/hack/$$f; done
$(INSTALL_SCORE_FILE) $(HACK_DIR)/perm $(INSTALL_SCORE_FILE) $(HACK_DIR)/perm
$(INSTALL_SCORE_FILE) $(HACK_DIR)/record $(INSTALL_SCORE_FILE) $(HACK_DIR)/record
$(INSTALL_MANUAL) hack/hack.6 $(INSTALL_MANUAL) hack/hack.6

View File

@@ -88,13 +88,19 @@
/* #define PYRAMID_BUG */ /* avoid a bug on the Pyramid */ /* #define PYRAMID_BUG */ /* avoid a bug on the Pyramid */
/* #define NOWAITINCLUDE */ /* neither <wait.h> nor <sys/wait.h> exists */ /* #define NOWAITINCLUDE */ /* neither <wait.h> nor <sys/wait.h> exists */
#define WIZARD "bruno" /* the person allowed to use the -D option */ //#define WIZARD "bruno" /* the person allowed to use the -D option */
/*
* Debian mods: use root for WIZARD, and move files that are static to
* /usr/share/ -- JEH
*/
#define WIZARD "root" /* the person allowed to use the -D option */
#define SHAREDIR "/usr/share/games/bsdgames/hack/"
#define RECORD "record"/* the file containing the list of topscorers */ #define RECORD "record"/* the file containing the list of topscorers */
#define NEWS "news" /* the file containing the latest hack news */ #define NEWS "news" /* the file containing the latest hack news */
#define HELP "help" /* the file containing a description of the commands */ #define HELP SHAREDIR "help" /* the file containing a description of the commands */
#define SHELP "hh" /* abbreviated form of the same */ #define SHELP SHAREDIR "hh" /* abbreviated form of the same */
#define RUMORFILE "rumors" /* a file with fortune cookies */ #define RUMORFILE SHAREDIR "rumors" /* a file with fortune cookies */
#define DATAFILE "data" /* a file giving the meaning of symbols used */ #define DATAFILE SHAREDIR "data" /* a file giving the meaning of symbols used */
#define FMASK 0660 /* file creation mask */ #define FMASK 0660 /* file creation mask */
#define HLOCK "perm" /* an empty file used for locking purposes */ #define HLOCK "perm" /* an empty file used for locking purposes */
#define LLOCK "safelock" /* link to previous */ #define LLOCK "safelock" /* link to previous */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: extern.c,v 1.6 1999/09/17 20:45:48 jsm Exp $ */ /* $NetBSD: extern.c,v 1.7 2002/01/20 00:42:51 jsm Exp $ */
/* /*
* Copyright (c) 1983, 1993 * Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
#if 0 #if 0
static char sccsid[] = "@(#)extern.c 8.1 (Berkeley) 5/31/93"; static char sccsid[] = "@(#)extern.c 8.1 (Berkeley) 5/31/93";
#else #else
__RCSID("$NetBSD: extern.c,v 1.6 1999/09/17 20:45:48 jsm Exp $"); __RCSID("$NetBSD: extern.c,v 1.7 2002/01/20 00:42:51 jsm Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: getword.c,v 1.6 1999/09/08 21:57:17 jsm Exp $ */ /* $NetBSD: getword.c,v 1.7 2002/01/20 00:42:51 jsm Exp $ */
/* /*
* Copyright (c) 1983, 1993 * Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
#if 0 #if 0
static char sccsid[] = "@(#)getword.c 8.1 (Berkeley) 5/31/93"; static char sccsid[] = "@(#)getword.c 8.1 (Berkeley) 5/31/93";
#else #else
__RCSID("$NetBSD: getword.c,v 1.6 1999/09/08 21:57:17 jsm Exp $"); __RCSID("$NetBSD: getword.c,v 1.7 2002/01/20 00:42:51 jsm Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: hangman.6,v 1.7 1999/09/17 20:45:49 jsm Exp $ .\" $NetBSD: hangman.6,v 1.11 2003/02/25 10:34:46 wiz Exp $
.\" .\"
.\" Copyright (c) 1983, 1993 .\" Copyright (c) 1983, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -38,14 +38,14 @@
.Os .Os
.Sh NAME .Sh NAME
.Nm hangman .Nm hangman
.Nd Computer version of the game hangman .Nd computer version of the game hangman
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl d Ar wordlist .Op Fl d Ar wordlist
.Op Fl m Ar minlen .Op Fl m Ar minlen
.Sh DESCRIPTION .Sh DESCRIPTION
In In
.Nm "" , .Nm ,
the computer picks a word from the on-line word list the computer picks a word from the on-line word list
and you must try to guess it. and you must try to guess it.
The computer keeps track of which letters have been guessed The computer keeps track of which letters have been guessed
@@ -57,12 +57,13 @@ Use the specified
.Ar wordlist .Ar wordlist
instead of the default one named below. instead of the default one named below.
.It Fl m .It Fl m
Set the minimum word length to use. The default is 6 letters. Set the minimum word length to use.
The default is 6 letters.
.El .El
.Sh FILES .Sh FILES
.Bl -tag -width @hangman_wordsfile@ -compact .Bl -tag -width @hangman_wordsfile@ -compact
.It Pa @hangman_wordsfile@ .It Pa @hangman_wordsfile@
On-line word list On-line word list
.El .El
.Sh AUTHOR .Sh AUTHORS
Ken Arnold .An Ken Arnold

View File

@@ -1,4 +1,4 @@
/* $NetBSD: hangman.h,v 1.10 1999/09/17 20:45:49 jsm Exp $ */ /* $NetBSD: hangman.h,v 1.11 2002/01/20 00:42:51 jsm Exp $ */
/* /*
* Copyright (c) 1983, 1993 * Copyright (c) 1983, 1993

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.9 2000/05/08 07:56:04 mycroft Exp $ */ /* $NetBSD: main.c,v 1.10 2002/01/20 00:42:51 jsm Exp $ */
/* /*
* Copyright (c) 1983, 1993 * Copyright (c) 1983, 1993
@@ -43,10 +43,11 @@ __COPYRIGHT("@(#) Copyright (c) 1983, 1993\n\
#if 0 #if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else #else
__RCSID("$NetBSD: main.c,v 1.9 2000/05/08 07:56:04 mycroft Exp $"); __RCSID("$NetBSD: main.c,v 1.10 2002/01/20 00:42:51 jsm Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#include <err.h>
#include "hangman.h" #include "hangman.h"
/* /*
@@ -62,17 +63,15 @@ main(argc, argv)
/* Revoke setgid privileges */ /* Revoke setgid privileges */
setregid(getgid(), getgid()); setregid(getgid(), getgid());
while ((ch = getopt(argc, argv, "m:d:")) != -1) { while ((ch = getopt(argc, argv, "d:m:")) != -1) {
switch (ch) { switch (ch) {
case 'd': case 'd':
Dict_name = optarg; Dict_name = optarg;
break; break;
case 'm': case 'm':
Minlen = atoi(optarg); Minlen = atoi(optarg);
if (Minlen < 2) { if (Minlen < 2)
fprintf(stderr, "minlen too short\n"); errx(1, "minimum word length too short");
exit(1);
}
break; break;
case '?': case '?':
default: default:

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: hunt.6,v 1.4 2001/04/04 11:41:01 wiz Exp $ .\" $NetBSD: hunt.6,v 1.9 2003/02/25 10:34:46 wiz Exp $
.\" .\"
.\" hunt .\" hunt
.\" Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold .\" Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
@@ -31,8 +31,7 @@ walls and players.
The more players you kill before you die, the better your score is. The more players you kill before you die, the better your score is.
If the If the
.Fl m .Fl m
flag is given, flag is given, you enter the game as a monitor
you enter the game as a monitor
(you can see the action but you cannot play). (you can see the action but you cannot play).
.Pp .Pp
.Nm .Nm
@@ -44,8 +43,7 @@ argument.
This presupposes that a hunt game is already running on that host, see This presupposes that a hunt game is already running on that host, see
.Xr huntd 6 .Xr huntd 6
for details on how to setup a game on a specific host. for details on how to setup a game on a specific host.
If more than one game if found, If more than one game if found, you may pick which game to play in.
you may pick which game to play in.
.Pp .Pp
If the If the
.Fl q .Fl q
@@ -53,8 +51,9 @@ flag is given,
.Nm .Nm
queries the local network (or specific host) queries the local network (or specific host)
and reports on all active games found. and reports on all active games found.
This is useful for shell startup scripts, e.g.\& This is useful for shell startup scripts, e.g.,
.Xr csh 1 Ns 's No .login . .Xr csh 1 Ns 's
.Pa .login .
.Pp .Pp
The player name may be specified on the command line by using the The player name may be specified on the command line by using the
.Fl n .Fl n
@@ -107,23 +106,18 @@ mailing list (see
.Xr huntd 6 ) . .Xr huntd 6 ) .
.Sh PLAYING HINTS .Sh PLAYING HINTS
.Nm .Nm
only works on crt (vdt) terminals with at least 24 lines, 80 columns, and only works on CRT (vdt) terminals with at least 24 lines, 80 columns, and
cursor addressing. cursor addressing.
The screen is divided in to 3 areas. The screen is divided in to 3 areas.
On the right hand side is the status area. On the right hand side is the status area.
It shows damage sustained, It shows damage sustained, charges remaining, who's in the game,
charges remaining,
who's in the game,
who's scanning (the who's scanning (the
.Dq * .Dq *
in front of the name), in front of the name), who's cloaked (the
who's cloaked (the
.Dq + .Dq +
in front of the name), in front of the name), and other players' scores.
and other players' scores.
The rest of the screen is taken up by your map of the maze. The rest of the screen is taken up by your map of the maze.
The 24th line The 24th line is used for longer messages that don't fit in the status area.
is used for longer messages that don't fit in the status area.
.Pp .Pp
.Nm .Nm
uses the same keys to move as uses the same keys to move as
@@ -205,7 +199,7 @@ bomb
small slime small slime
.It $ .It $
big slime big slime
.It ><^v .It \*[Gt]\*[Lt]^v
you facing right, left, up, or down you facing right, left, up, or down
.It }{i! .It }{i!
other players facing right, left, up, or down other players facing right, left, up, or down
@@ -226,8 +220,7 @@ You can only fire three shots in a row, then the gun must cool off.
.It .It
Shots move 5 times faster than you do. Shots move 5 times faster than you do.
.It .It
To stab someone, To stab someone, you face that player and move at them.
you face that player and move at them.
.It .It
Stabbing does 2 points worth of damage and shooting does 5 points. Stabbing does 2 points worth of damage and shooting does 5 points.
.It .It
@@ -246,8 +239,7 @@ The number of squares is equal to the number of charges used.
.It .It
One small mine and one large mine is placed in the maze for every new player. One small mine and one large mine is placed in the maze for every new player.
A mine has a 2% probability of tripping when you walk forward on to it; A mine has a 2% probability of tripping when you walk forward on to it;
50% when going sideways; 50% when going sideways; 95% when backing up.
95% when backing up.
Tripping a mine costs you 5 points or 10 points respectively. Tripping a mine costs you 5 points or 10 points respectively.
Defusing a mine is worth 1 charge or 9 charges respectively. Defusing a mine is worth 1 charge or 9 charges respectively.
.It .It
@@ -280,17 +272,16 @@ Slime goes around walls, not through them.
Walls regenerate, reappearing in the order they were destroyed. Walls regenerate, reappearing in the order they were destroyed.
One percent of the regenerated walls will be diagonal walls or doors. One percent of the regenerated walls will be diagonal walls or doors.
When a wall is generated directly beneath a player, he is thrown in When a wall is generated directly beneath a player, he is thrown in
a random direction for a random period of time. When he lands, he a random direction for a random period of time.
sustains damage (up to 20 percent of the amount of damage already When he lands, he sustains damage (up to 20 percent of the amount of
sustained); i.e., damage already sustained); i.e., the less damage he had, the more nimble
the less damage he had, the more nimble he is and he is and therefore less likely to hurt himself on landing.
therefore less likely to hurt himself on landing.
.\"MP .\"MP
.\"There is a volcano close to the center of the maze which goes off .\"There is a volcano close to the center of the maze which goes off
.\"close to every 30 deaths. .\"close to every 30 deaths.
.It .It
Every 30 deaths or so, a Every 30 deaths or so, a
.Dq ? .Dq \&?
will appear. will appear.
It is a wandering bomb which will explode when it hits someone, or It is a wandering bomb which will explode when it hits someone, or
when it is slimed. when it is slimed.
@@ -306,10 +297,8 @@ will ask you what name you want to play under.
If you wish to set other options than just your name, If you wish to set other options than just your name,
you can enumerate the options as follows: you can enumerate the options as follows:
.Dl setenv HUNT "name=Sneaky,team=1,cloak,mapkey=zoFfGg1f2g3F4G" .Dl setenv HUNT "name=Sneaky,team=1,cloak,mapkey=zoFfGg1f2g3F4G"
sets the player name to Sneaky, sets the player name to Sneaky, sets the team to one,
sets the team to one, sets the enter game attribute to cloaked, and the maps
sets the enter game attribute to cloaked,
and the maps
.Ic z .Ic z
to to
.Ic o , F .Ic o , F
@@ -333,8 +322,8 @@ option must be last.
Other options are: Other options are:
.Ar scan , fly , nobeep , port=string , host=string , .Ar scan , fly , nobeep , port=string , host=string ,
and and
.Ar message=string .Ar message=string ,
\(em which correspond to the command line options. which correspond to the command line options.
String options cannot contain commas since commas String options cannot contain commas since commas
are used to separate options. are used to separate options.
.It .It
@@ -396,7 +385,6 @@ We thank Don Kneller,
John Thomason, Eric Pettersen, Mark Day, John Thomason, Eric Pettersen, Mark Day,
and Scott Weiner for providing and Scott Weiner for providing
endless hours of play-testing to improve the character of the game. endless hours of play-testing to improve the character of the game.
We hope their significant others will forgive them; We hope their significant others will forgive them; we certainly don't.
we certainly don't.
.Sh BUGS .Sh BUGS
To keep up the pace, not everything is as realistic as possible. To keep up the pace, not everything is as realistic as possible.

View File

@@ -1,4 +1,4 @@
/* $NetBSD: hunt.c,v 1.12 2001/02/05 00:40:45 christos Exp $ */ /* $NetBSD: hunt.c,v 1.16 2002/12/06 01:50:56 thorpej Exp $ */
/* /*
* Hunt * Hunt
* Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold * Copyright (c) 1985 Conrad C. Huang, Gregory S. Couch, Kenneth C.R.C. Arnold
@@ -7,12 +7,13 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
__RCSID("$NetBSD: hunt.c,v 1.12 2001/02/05 00:40:45 christos Exp $"); __RCSID("$NetBSD: hunt.c,v 1.16 2002/12/06 01:50:56 thorpej Exp $");
#endif /* not lint */ #endif /* not lint */
# include <sys/param.h> # include <sys/param.h>
# include <sys/stat.h> # include <sys/stat.h>
# include <sys/time.h> # include <sys/time.h>
# include <sys/poll.h>
# include <ctype.h> # include <ctype.h>
# include <err.h> # include <err.h>
# include <errno.h> # include <errno.h>
@@ -48,10 +49,6 @@ static struct termios saved_tty;
# define put_str addstr # define put_str addstr
# endif # endif
#if !defined(BSD_RELEASE) || BSD_RELEASE < 44
extern int _putchar();
#endif
#ifndef MAXHOSTNAMELEN #ifndef MAXHOSTNAMELEN
#define MAXHOSTNAMELEN 256 #define MAXHOSTNAMELEN 256
#endif #endif
@@ -411,8 +408,7 @@ list_drivers()
static SOCKET *listv; static SOCKET *listv;
static unsigned int listmax; static unsigned int listmax;
unsigned int listc; unsigned int listc;
fd_set mask; struct pollfd set[1];
struct timeval wait;
if (initial) { /* do one time initialization */ if (initial) { /* do one time initialization */
# ifndef BROADCAST # ifndef BROADCAST
@@ -465,13 +461,7 @@ list_drivers()
# ifdef BROADCAST # ifdef BROADCAST
if (initial) if (initial)
brdc = broadcast_vec(test_socket, (struct sockaddr **) &brdv); brdc = broadcast_vec(test_socket, (void *) &brdv);
if (brdc <= 0) {
initial = FALSE;
test.sin_addr = local_address;
goto test_one_host;
}
# ifdef SO_BROADCAST # ifdef SO_BROADCAST
/* Sun's will broadcast even though this option can't be set */ /* Sun's will broadcast even though this option can't be set */
@@ -495,6 +485,13 @@ list_drivers()
/* NOTREACHED */ /* NOTREACHED */
} }
} }
test.sin_addr = local_address;
if (sendto(test_socket, (char *) &msg, sizeof msg, 0,
(struct sockaddr *) &test, DAEMON_SIZE) < 0) {
warn("sendto");
leave(1, "sendto");
/* NOTREACHED */
}
# else /* !BROADCAST */ # else /* !BROADCAST */
/* loop thru all hosts on local net and send msg to them. */ /* loop thru all hosts on local net and send msg to them. */
msg = htons(C_TESTMSG()); msg = htons(C_TESTMSG());
@@ -512,9 +509,9 @@ list_drivers()
get_response: get_response:
namelen = DAEMON_SIZE; namelen = DAEMON_SIZE;
errno = 0; errno = 0;
set[0].fd = test_socket;
set[0].events = POLLIN;
for (;;) { for (;;) {
wait.tv_sec = 1;
wait.tv_usec = 0;
if (listc + 1 >= listmax) { if (listc + 1 >= listmax) {
listmax += 20; listmax += 20;
listv = (SOCKET *) realloc((char *) listv, listv = (SOCKET *) realloc((char *) listv,
@@ -523,9 +520,7 @@ get_response:
leave(1, "Out of memory!"); leave(1, "Out of memory!");
} }
FD_ZERO(&mask); if (poll(set, 1, 1000) == 1 &&
FD_SET(test_socket, &mask);
if (select(test_socket + 1, &mask, NULL, NULL, &wait) == 1 &&
recvfrom(test_socket, (char *) &port_num, sizeof(port_num), recvfrom(test_socket, (char *) &port_num, sizeof(port_num),
0, (struct sockaddr *) &listv[listc], &namelen) > 0) { 0, (struct sockaddr *) &listv[listc], &namelen) > 0) {
/* /*
@@ -543,8 +538,8 @@ get_response:
} }
if (errno != 0 && errno != EINTR) { if (errno != 0 && errno != EINTR) {
warn("select/recvfrom"); warn("poll/recvfrom");
leave(1, "select/recvfrom"); leave(1, "poll/recvfrom");
/* NOTREACHED */ /* NOTREACHED */
} }

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.5 1998/08/30 09:19:39 veego Exp $ */ /* $NetBSD: main.c,v 1.10 2001/12/06 12:15:37 blymn Exp $ */
/* /*
* Phantasia 3.3.2 -- Interterminal fantasy game * Phantasia 3.3.2 -- Interterminal fantasy game
@@ -288,6 +288,8 @@ initialstate()
if ((Playersfp = fopen(_PATH_PEOPLE, "r+")) == NULL) if ((Playersfp = fopen(_PATH_PEOPLE, "r+")) == NULL)
error(_PATH_PEOPLE); error(_PATH_PEOPLE);
/* NOTREACHED */ /* NOTREACHED */
if (fileno(Playersfp) < 3)
exit(1);
if ((Monstfp = fopen(_PATH_MONST, "r+")) == NULL) if ((Monstfp = fopen(_PATH_MONST, "r+")) == NULL)
error(_PATH_MONST); error(_PATH_MONST);
@@ -384,7 +386,7 @@ rollnewplayer()
do { do {
mvaddstr(20, 0, "Give your character a password [up to 8 characters] ? "); mvaddstr(20, 0, "Give your character a password [up to 8 characters] ? ");
getstring(Player.p_password, SZ_PASSWORD); getstring(Player.p_password, SZ_PASSWORD);
mvaddstr(21, 0, "One more time to verify ? "); mvaddstr(21, 0, "Enter again to verify: ");
getstring(Databuf, SZ_PASSWORD); getstring(Databuf, SZ_PASSWORD);
} }
while (strcmp(Player.p_password, Databuf) != 0); while (strcmp(Player.p_password, Databuf) != 0);
@@ -627,7 +629,7 @@ titlelist()
fclose(fp); fclose(fp);
} }
/* search for king */ /* search for king */
fseek(Playersfp, 0L, 0); fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_KING && if (Other.p_specialtype == SC_KING &&
Other.p_status != S_NOTUSED) Other.p_status != S_NOTUSED)
@@ -643,7 +645,7 @@ titlelist()
mvaddstr(4, 24, "There is no ruler at this time."); mvaddstr(4, 24, "There is no ruler at this time.");
/* search for valar */ /* search for valar */
fseek(Playersfp, 0L, 0); fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_VALAR && Other.p_status != S_NOTUSED) if (Other.p_specialtype == SC_VALAR && Other.p_status != S_NOTUSED)
/* found the valar */ /* found the valar */
@@ -653,7 +655,7 @@ titlelist()
break; break;
} }
/* search for council of the wise */ /* search for council of the wise */
fseek(Playersfp, 0L, 0); fseek(Playersfp, 0L, SEEK_SET);
Lines = 10; Lines = 10;
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_COUNCIL && Other.p_status != S_NOTUSED) if (Other.p_specialtype == SC_COUNCIL && Other.p_status != S_NOTUSED)
@@ -672,7 +674,7 @@ titlelist()
hiexp = 0.0; hiexp = 0.0;
nxtlvl = hilvl = 0; nxtlvl = hilvl = 0;
fseek(Playersfp, 0L, 0); fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_experience > hiexp && Other.p_specialtype <= SC_KING && Other.p_status != S_NOTUSED) if (Other.p_experience > hiexp && Other.p_specialtype <= SC_KING && Other.p_status != S_NOTUSED)
/* highest found so far */ /* highest found so far */
@@ -874,7 +876,7 @@ genchar(type)
int type; int type;
{ {
int subscript; /* used for subscripting into Stattable */ int subscript; /* used for subscripting into Stattable */
struct charstats *statptr; /* for pointing into Stattable */ const struct charstats *statptr; /* for pointing into Stattable */
subscript = type - '1'; subscript = type - '1';
@@ -983,7 +985,7 @@ playinit()
initscr(); /* turn on curses */ initscr(); /* turn on curses */
noecho(); /* do not echo input */ noecho(); /* do not echo input */
crmode(); /* do not process erase, kill */ cbreak(); /* do not process erase, kill */
#ifdef NCURSES_VERSION /* Ncurses needs some terminal mode fiddling */ #ifdef NCURSES_VERSION /* Ncurses needs some terminal mode fiddling */
tcgetattr(0, &tty); tcgetattr(0, &tty);
tty.c_iflag |= ICRNL; tty.c_iflag |= ICRNL;
@@ -1001,13 +1003,17 @@ cleanup(doexit)
if (Windows) { if (Windows) {
move(LINES - 2, 0); move(LINES - 2, 0);
refresh(); refresh();
nocrmode(); nocbreak();
endwin(); endwin();
} }
fclose(Playersfp); if (Playersfp)
fclose(Monstfp); fclose(Playersfp);
fclose(Messagefp); if (Monstfp)
fclose(Energyvoidfp); fclose(Monstfp);
if (Messagefp)
fclose(Messagefp);
if (Energyvoidfp)
fclose(Energyvoidfp);
if (doexit) if (doexit)
exit(0); exit(0);

View File

@@ -1,16 +1,16 @@
/* $NetBSD: misc.c,v 1.4 1998/08/30 09:19:39 veego Exp $ */ /* $NetBSD: misc.c,v 1.8 2003/01/20 05:29:55 simonb Exp $ */
/* /*
* misc.c Phantasia miscellaneous support routines * misc.c Phantasia miscellaneous support routines
*/ */
#include "include.h" #include "include.h"
#include <string.h>
void void
movelevel() movelevel()
{ {
struct charstats *statptr; /* for pointing into Stattable */ const struct charstats *statptr; /* for pointing into Stattable */
double new; /* new level */ double new; /* new level */
double inc; /* increment between new and old levels */ double inc; /* increment between new and old levels */
@@ -60,15 +60,15 @@ movelevel()
death("Old age"); death("Old age");
} }
char * const char *
descrlocation(playerp, shortflag) descrlocation(playerp, shortflag)
struct player *playerp; struct player *playerp;
bool shortflag; bool shortflag;
{ {
double circle; /* corresponding circle for coordinates */ double circle; /* corresponding circle for coordinates */
int quadrant; /* quandrant of grid */ int quadrant; /* quandrant of grid */
char *label; /* pointer to place name */ const char *label; /* pointer to place name */
static char *nametable[4][4] = /* names of places */ static const char *const nametable[4][4] = /* names of places */
{ {
{"Anorien", "Ithilien", "Rohan", "Lorien"}, {"Anorien", "Ithilien", "Rohan", "Lorien"},
{"Gondor", "Mordor", "Dunland", "Rovanion"}, {"Gondor", "Mordor", "Dunland", "Rovanion"},
@@ -412,7 +412,7 @@ displaystats()
void void
allstatslist() allstatslist()
{ {
static char *flags[] = /* to print value of some bools */ static const char *const flags[] = /* to print value of some bools */
{ {
"False", "False",
" True" " True"
@@ -426,7 +426,7 @@ allstatslist()
mvprintw(13, 0, "Sin : %9.5f", Player.p_sin); mvprintw(13, 0, "Sin : %9.5f", Player.p_sin);
mvprintw(14, 0, "Poison : %9.5f", Player.p_poison); mvprintw(14, 0, "Poison : %9.5f", Player.p_poison);
mvprintw(15, 0, "Gems : %9.0f", Player.p_gems); mvprintw(15, 0, "Gems : %9.0f", Player.p_gems);
mvprintw(16, 0, "Age : %9d", Player.p_age); mvprintw(16, 0, "Age : %9ld", Player.p_age);
mvprintw(10, 40, "Holy Water: %9d", Player.p_holywater); mvprintw(10, 40, "Holy Water: %9d", Player.p_holywater);
mvprintw(11, 40, "Amulets : %9d", Player.p_amulets); mvprintw(11, 40, "Amulets : %9d", Player.p_amulets);
mvprintw(12, 40, "Charms : %9d", Player.p_charms); mvprintw(12, 40, "Charms : %9d", Player.p_charms);
@@ -442,13 +442,13 @@ allstatslist()
flags[(int)Player.p_palantir]); flags[(int)Player.p_palantir]);
} }
char * const char *
descrtype(playerp, shortflag) descrtype(playerp, shortflag)
struct player *playerp; struct player *playerp;
bool shortflag; bool shortflag;
{ {
int type; /* for caluculating result subscript */ int type; /* for caluculating result subscript */
static char *results[] =/* description table */ static const char *const results[] =/* description table */
{ {
" Magic User", " MU", " Magic User", " MU",
" Fighter", " F ", " Fighter", " F ",
@@ -508,12 +508,12 @@ descrtype(playerp, shortflag)
long long
findname(name, playerp) findname(name, playerp)
char *name; const char *name;
struct player *playerp; struct player *playerp;
{ {
long loc = 0; /* location in the file */ long loc = 0; /* location in the file */
fseek(Playersfp, 0L, 0); fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) { while (fread((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) {
if (strcmp(playerp->p_name, name) == 0) { if (strcmp(playerp->p_name, name) == 0) {
if (playerp->p_status != S_NOTUSED || Wizard) if (playerp->p_status != S_NOTUSED || Wizard)
@@ -531,7 +531,7 @@ allocrecord()
{ {
long loc = 0L; /* location in file */ long loc = 0L; /* location in file */
fseek(Playersfp, 0L, 0); fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) { while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1) {
if (Other.p_status == S_NOTUSED) if (Other.p_status == S_NOTUSED)
/* found an empty record */ /* found an empty record */
@@ -576,11 +576,11 @@ leavegame()
void void
death(how) death(how)
char *how; const char *how;
{ {
FILE *fp; /* for updating various files */ FILE *fp; /* for updating various files */
int ch; /* input */ int ch; /* input */
static char *deathmesg[] = static const char *const deathmesg[] =
/* add more messages here, if desired */ /* add more messages here, if desired */
{ {
"You have been wounded beyond repair. ", "You have been wounded beyond repair. ",
@@ -638,10 +638,10 @@ death(how)
{ {
mvaddstr(4, 0, mvaddstr(4, 0,
"Your ring has taken control of you and turned you into a monster!\n"); "Your ring has taken control of you and turned you into a monster!\n");
fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, 0); fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, SEEK_SET);
fread((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp); fread((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
strcpy(Curmonster.m_name, Player.p_name); strcpy(Curmonster.m_name, Player.p_name);
fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, 0); fseek(Monstfp, 13L * SZ_MONSTERSTRUCT, SEEK_SET);
fwrite((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp); fwrite((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
fflush(Monstfp); fflush(Monstfp);
} }
@@ -684,7 +684,7 @@ writerecord(playerp, place)
struct player *playerp; struct player *playerp;
long place; long place;
{ {
fseek(Playersfp, place, 0); fseek(Playersfp, place, SEEK_SET);
fwrite((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp); fwrite((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp);
fflush(Playersfp); fflush(Playersfp);
} }
@@ -768,7 +768,7 @@ readrecord(playerp, loc)
struct player *playerp; struct player *playerp;
long loc; long loc;
{ {
fseek(Playersfp, loc, 0); fseek(Playersfp, loc, SEEK_SET);
fread((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp); fread((char *) playerp, SZ_PLAYERSTRUCT, 1, Playersfp);
} }
@@ -790,7 +790,7 @@ adjuststats()
/* calculate effective quickness */ /* calculate effective quickness */
dtemp = ((Player.p_gold + Player.p_gems / 2.0) - 1000.0) / Statptr->c_goldtote dtemp = ((Player.p_gold + Player.p_gems / 2.0) - 1000.0) / Statptr->c_goldtote
- Player.p_level;; - Player.p_level;
dtemp = MAX(0.0, dtemp);/* gold slows player down */ dtemp = MAX(0.0, dtemp);/* gold slows player down */
Player.p_speed = Player.p_quickness + Player.p_quksilver - dtemp; Player.p_speed = Player.p_quickness + Player.p_quksilver - dtemp;
@@ -928,14 +928,14 @@ readmessage()
{ {
move(3, 0); move(3, 0);
clrtoeol(); clrtoeol();
fseek(Messagefp, 0L, 0); fseek(Messagefp, 0L, SEEK_SET);
if (fgets(Databuf, SZ_DATABUF, Messagefp) != NULL) if (fgets(Databuf, SZ_DATABUF, Messagefp) != NULL)
addstr(Databuf); addstr(Databuf);
} }
void void
error(whichfile) error(whichfile)
char *whichfile; const char *whichfile;
{ {
int (*funcp) __P((const char *,...)); int (*funcp) __P((const char *,...));
@@ -945,7 +945,7 @@ error(whichfile)
} else } else
funcp = printf; funcp = printf;
(*funcp) ("An unrecoverable error has occurred reading %s. (errno = %d)\n", whichfile, errno); (*funcp) ("An unrecoverable error has occurred reading %s. (%s)\n", whichfile, strerror(errno));
(*funcp) ("Please run 'setup' to determine the problem.\n"); (*funcp) ("Please run 'setup' to determine the problem.\n");
cleanup(TRUE); cleanup(TRUE);
/* NOTREACHED */ /* NOTREACHED */
@@ -973,7 +973,7 @@ ill_sig(whichsig)
/* NOTREACHED */ /* NOTREACHED */
} }
char * const char *
descrstatus(playerp) descrstatus(playerp)
struct player *playerp; struct player *playerp;
{ {
@@ -1064,7 +1064,7 @@ collecttaxes(gold, gems)
dtemp = 0.0; dtemp = 0.0;
fread((char *) &dtemp, sizeof(double), 1, fp); fread((char *) &dtemp, sizeof(double), 1, fp);
dtemp += floor(taxes); dtemp += floor(taxes);
fseek(fp, 0L, 0); fseek(fp, 0L, SEEK_SET);
fwrite((char *) &dtemp, sizeof(double), 1, fp); fwrite((char *) &dtemp, sizeof(double), 1, fp);
fclose(fp); fclose(fp);
} }

View File

@@ -27,13 +27,14 @@ Luxembourg:Luxembourg
Malta:Valletta Malta:Valletta
Moldova:Chisinau|Kishinev Moldova:Chisinau|Kishinev
Monaco:Monaco Monaco:Monaco
Netherlands|Holland:The Hague|'sGravenhage|den Haag|Amsterdam Netherlands|Holland:Amsterdam
Norway:Oslo Norway:Oslo
Poland:Wars[aw|zawa] Poland:Wars[aw|zawa]
Portugal:Lisbo[n|a] Portugal:Lisbo[n|a]
R[u|o]mania:Bucharest|Bucuresti R[u|o]mania:Bucharest|Bucuresti
Russia:Mos[cow|kva] Russia:Mos[cow|kva]
San Marino:San Marino San Marino:San Marino
Serbia and Montenegro:Belgrade|Beograd
Slovakia|Slovak Republic:Bratislava Slovakia|Slovak Republic:Bratislava
Slovenia:Ljubljana Slovenia:Ljubljana
Spain:Madrid Spain:Madrid
@@ -41,4 +42,3 @@ Sweden:Stockholm
Switzerland:Bern{e} Switzerland:Bern{e}
Turkey:Ankara Turkey:Ankara
Ukraine:Kiev|Kyiv Ukraine:Kiev|Kyiv
Yugoslavia:Belgrade|Beograd

View File

@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.17 2001/02/05 01:02:45 christos Exp $ */ /* $NetBSD: main.c,v 1.18 2001/12/06 12:17:57 blymn Exp $ */
/* /*
* Copyright (c) 1980, 1993 * Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0 #if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93"; static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else #else
__RCSID("$NetBSD: main.c,v 1.17 2001/02/05 01:02:45 christos Exp $"); __RCSID("$NetBSD: main.c,v 1.18 2001/12/06 12:17:57 blymn Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
@@ -152,7 +152,7 @@ main(ac, av)
initscr(); initscr();
signal(SIGINT, quit); signal(SIGINT, quit);
crmode(); cbreak();
noecho(); noecho();
nonl(); nonl();
if (LINES != Y_SIZE || COLS != X_SIZE) { if (LINES != Y_SIZE || COLS != X_SIZE) {

View File

@@ -1,4 +1,4 @@
/* $NetBSD: snake.c,v 1.16 2000/05/08 07:56:05 mycroft Exp $ */ /* $NetBSD: snake.c,v 1.17 2001/08/31 07:17:02 jsm Exp $ */
/* /*
* Copyright (c) 1980, 1993 * Copyright (c) 1980, 1993
@@ -43,7 +43,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\n\
#if 0 #if 0
static char sccsid[] = "@(#)snake.c 8.2 (Berkeley) 1/7/94"; static char sccsid[] = "@(#)snake.c 8.2 (Berkeley) 1/7/94";
#else #else
__RCSID("$NetBSD: snake.c,v 1.16 2000/05/08 07:56:05 mycroft Exp $"); __RCSID("$NetBSD: snake.c,v 1.17 2001/08/31 07:17:02 jsm Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */

View File

@@ -1,4 +1,4 @@
/* $NetBSD: scores.c,v 1.10 2000/01/21 02:10:56 jsm Exp $ */ /* $NetBSD: scores.c,v 1.11 2002/06/02 22:17:38 wiz Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
@@ -153,8 +153,8 @@ void
savescore(level) savescore(level)
int level; int level;
{ {
register struct highscore *sp; struct highscore *sp;
register int i; int i;
int change; int change;
FILE *sf; FILE *sf;
const char *me; const char *me;
@@ -219,9 +219,9 @@ savescore(level)
static char * static char *
thisuser() thisuser()
{ {
register const char *p; const char *p;
register struct passwd *pw; struct passwd *pw;
register size_t l; size_t l;
static char u[sizeof(scores[0].hs_name)]; static char u[sizeof(scores[0].hs_name)];
if (u[0]) if (u[0])
@@ -252,8 +252,8 @@ static int
cmpscores(x, y) cmpscores(x, y)
const void *x, *y; const void *x, *y;
{ {
register const struct highscore *a, *b; const struct highscore *a, *b;
register long l; long l;
a = x; a = x;
b = y; b = y;
@@ -280,17 +280,17 @@ cmpscores(x, y)
*/ */
static int static int
checkscores(hs, num) checkscores(hs, num)
register struct highscore *hs; struct highscore *hs;
int num; int num;
{ {
register struct highscore *sp; struct highscore *sp;
register int i, j, k, numnames; int i, j, k, numnames;
int levelfound[NLEVELS]; int levelfound[NLEVELS];
struct peruser { struct peruser {
char *name; char *name;
int times; int times;
} count[NUMSPOTS]; } count[NUMSPOTS];
register struct peruser *pu; struct peruser *pu;
/* /*
* Sort so that highest totals come first. * Sort so that highest totals come first.
@@ -356,8 +356,8 @@ void
showscores(level) showscores(level)
int level; int level;
{ {
register struct highscore *sp; struct highscore *sp;
register int i, n, c; int i, n, c;
const char *me; const char *me;
int levelfound[NLEVELS]; int levelfound[NLEVELS];
@@ -408,11 +408,11 @@ showscores(level)
static void static void
printem(level, offset, hs, n, me) printem(level, offset, hs, n, me)
int level, offset; int level, offset;
register struct highscore *hs; struct highscore *hs;
register int n; int n;
const char *me; const char *me;
{ {
register struct highscore *sp; struct highscore *sp;
int nrows, row, col, item, i, highlight; int nrows, row, col, item, i, highlight;
char buf[100]; char buf[100];
#define TITLE "Rank Score Name (points/level)" #define TITLE "Rank Score Name (points/level)"

View File

@@ -1,4 +1,4 @@
/* $NetBSD: screen.c,v 1.15 2000/05/24 14:43:00 blymn Exp $ */ /* $NetBSD: screen.c,v 1.16 2001/11/02 18:27:00 christos Exp $ */
/* For Linux: still using old termcap interface from version 1.13. */ /* For Linux: still using old termcap interface from version 1.13. */
/*- /*-
@@ -182,13 +182,13 @@ scr_init()
stop("cannot find your termcap"); stop("cannot find your termcap");
fill = combuf; fill = combuf;
{ {
register struct tcsinfo *p; struct tcsinfo *p;
for (p = tcstrings; p->tcaddr; p++) for (p = tcstrings; p->tcaddr; p++)
*p->tcaddr = tgetstr(p->tcname, &fill); *p->tcaddr = tgetstr(p->tcname, &fill);
} }
{ {
register struct tcninfo *p; struct tcninfo *p;
for (p = tcflags; p->tcaddr; p++) for (p = tcflags; p->tcaddr; p++)
*p->tcaddr = tgetflag(p->tcname); *p->tcaddr = tgetflag(p->tcname);
@@ -292,8 +292,8 @@ scr_set()
newtt = oldtt; newtt = oldtt;
newtt.c_lflag &= ~(ICANON|ECHO); newtt.c_lflag &= ~(ICANON|ECHO);
newtt.c_oflag &= ~OXTABS; newtt.c_oflag &= ~OXTABS;
newtt.c_cc[VMIN] = 1; /* don't lag behind 3 keystrokes on sun */ newtt.c_cc[VMIN] = 1;
newtt.c_cc[VTIME] = 0; /* systems -- JEH */ newtt.c_cc[VTIME] = 0;
if (tcsetattr(0, TCSADRAIN, &newtt) < 0) if (tcsetattr(0, TCSADRAIN, &newtt) < 0)
stop("tcsetattr() fails"); stop("tcsetattr() fails");
ospeed = cfgetospeed(&newtt); ospeed = cfgetospeed(&newtt);
@@ -378,9 +378,9 @@ typedef cell regcell;
void void
scr_update() scr_update()
{ {
register cell *bp, *sp; cell *bp, *sp;
register regcell so, cur_so = 0; regcell so, cur_so = 0;
register int i, ccol, j; int i, ccol, j;
sigset_t sigset, osigset; sigset_t sigset, osigset;
static const struct shape *lastshape; static const struct shape *lastshape;
@@ -490,12 +490,12 @@ scr_update()
*/ */
void void
scr_msg(s, set) scr_msg(s, set)
register char *s; char *s;
int set; int set;
{ {
if (set || CEstr == NULL) { if (set || CEstr == NULL) {
register int l = strlen(s); int l = strlen(s);
moveto(Rows - 2, ((Cols - l) >> 1) - 1); moveto(Rows - 2, ((Cols - l) >> 1) - 1);
if (set) if (set)

View File

@@ -1,4 +1,4 @@
/* $NetBSD: tetris.c,v 1.14 2000/01/21 02:10:57 jsm Exp $ */ /* $NetBSD: tetris.c,v 1.15 2002/06/02 22:17:38 wiz Exp $ */
/*- /*-
* Copyright (c) 1992, 1993 * Copyright (c) 1992, 1993
@@ -92,8 +92,8 @@ static void setup_board __P((void));
static void static void
setup_board() setup_board()
{ {
register int i; int i;
register cell *p; cell *p;
p = board; p = board;
for (i = B_SIZE; i; i--) for (i = B_SIZE; i; i--)
@@ -106,8 +106,8 @@ setup_board()
static void static void
elide() elide()
{ {
register int i, j, base; int i, j, base;
register cell *p; cell *p;
for (i = A_FIRST; i < A_LAST; i++) { for (i = A_FIRST; i < A_LAST; i++) {
base = i * B_COLS + 1; base = i * B_COLS + 1;
@@ -133,9 +133,9 @@ main(argc, argv)
int argc; int argc;
char *argv[]; char *argv[];
{ {
register int pos, c; int pos, c;
register const char *keys; const char *keys;
register int level = 2; int level = 2;
char key_write[6][10]; char key_write[6][10];
int ch, i, j; int ch, i, j;
int fd; int fd;

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: trek.6,v 1.8 2001/04/02 22:42:39 wiz Exp $ .\" $NetBSD: trek.6,v 1.10 2002/09/26 18:32:05 wiz Exp $
.\" .\"
.\" Copyright (c) 1980, 1993 .\" Copyright (c) 1980, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -40,14 +40,15 @@
.Nm trek .Nm trek
.Nd trekkie game .Nd trekkie game
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm @gamesdir@/trek .Nm
.Oo .Oo
.Op Fl a .Op Fl a
.Ar file .Ar file
.Oc .Oc
.Sh DESCRIPTION .Sh DESCRIPTION
.Nm .Nm
is a game of space glory and war. Below is a summary of commands. is a game of space glory and war.
Below is a summary of commands.
For complete documentation, see For complete documentation, see
.Em Trek .Em Trek
by Eric Allman. by Eric Allman.
@@ -79,9 +80,9 @@ You should normally start out with a novice and work up.
In general, throughout the game, if you forget what is appropriate In general, throughout the game, if you forget what is appropriate
the game will tell you what it expects if you just type in a question mark. the game will tell you what it expects if you just type in a question mark.
.Sh AUTHOR .Sh AUTHOR
Eric Allman .An Eric Allman
.Sh SEE ALSO .Sh SEE ALSO
.Pa /usr/share/doc/bsdgames/trek.me.gz .Pa /usr/share/doc/usd/31.trek
.Sh COMMAND SUMMARY .Sh COMMAND SUMMARY
.Bl -item -compact .Bl -item -compact
.It .It

View File

@@ -1,5 +1,5 @@
#!/bin/sh - #!/bin/sh -
# $NetBSD: wargames.sh,v 1.3 1999/11/16 17:27:14 abs Exp $ # $NetBSD: wargames.sh,v 1.4 2001/09/19 04:54:06 lukem Exp $
# #
# Copyright (c) 1985, 1993 # Copyright (c) 1985, 1993
# The Regents of the University of California. All rights reserved. # The Regents of the University of California. All rights reserved.
@@ -43,7 +43,10 @@ if [ -f /usr/games/$x ] ; then
tput clear tput clear
exec /usr/games/$x exec /usr/games/$x
else else
# Original quote "Strange game, the only winning move is not to play." exec cat <<QUOTE
echo "Strange, the only winning move is not to play." A strange game.
The only winning move is
not to play.
QUOTE
fi fi
exit 0 exit 0

View File

@@ -1,4 +1,4 @@
.\" $NetBSD: wargames.6,v 1.1 2000/01/23 21:04:56 jsm Exp $ .\" $NetBSD: wargames.6,v 1.4 2002/09/26 18:32:05 wiz Exp $
.\" .\"
.\" Copyright (c) 1998 Joey Hess .\" Copyright (c) 1998 Joey Hess
.\" All rights reserved. .\" All rights reserved.
@@ -39,11 +39,11 @@
-- computer, -- computer,
.Nm wargames .Nm wargames
.Pp .Pp
Just like in the movie, the computer will happily play a Just like in the movie, the computer will happily play a game with you.
game with you. The likelihood of Global Thermonuclear Warfare The likelihood of Global Thermonuclear Warfare resulting is much smaller....
resulting is much smaller....
.Sh SEE ALSO .Sh SEE ALSO
.Sy Wargames , .Sy Wargames ,
the movie (an MGM production, PG 13, directed by John Badham, 1983). the movie (an MGM production, PG 13, directed by John Badham, 1983).
.Sh AUTHOR .Sh AUTHOR
This manual page was written by Joey Hess <joeyh@kitenet.net>. This manual page was written by Joey Hess
.Aq joeyh@kitenet.net .

View File

@@ -1,10 +1,14 @@
$NetBSD: acronyms,v 1.89 2001/08/11 11:57:35 wennmach Exp $ $NetBSD: acronyms,v 1.113 2003/02/05 20:11:04 mason Exp $
AFAICR as far as I can recall AFAICR as far as I can recall
AFAICT as far as I can tell AFAICT as far as I can tell
AFAIK as far as I know AFAIK as far as I know
AFAIR as far as I recall AFAIR as far as I recall
AFAIU as far as I understand
AFD away from desktop
AFK away from keyboard AFK away from keyboard
AFW away from window
AIU as I understand
AIUI as I understand it AIUI as I understand it
AKA also known as AKA also known as
ASAP as soon as possible ASAP as soon as possible
@@ -20,34 +24,43 @@ BIALW back in a little while
BIAS back in a second BIAS back in a second
BIAW back in a while BIAW back in a while
BOFH bastard operator from hell BOFH bastard operator from hell
BOGAHICA bend over, grab ankles, here it comes again
BOHICA bend over here it comes again BOHICA bend over here it comes again
BRB [I'll] be right back BRB [I'll] be right back
BTDT been there, done that BTDT been there, done that
BTTH butt to the head BTTH boot to the head
BTW by the way BTW by the way
CMIIW correct me if I'm wrong CMIIW correct me if I'm wrong
CNP continued [in my] next post CNP continued [in my] next post
COB close of business [day]
CYA see you around CYA see you around
DNDK don't know, don't care DKDC don't know, don't care
DSTM don't shoot the messenger
DTRT do the right thing DTRT do the right thing
DTWT do the wrong thing DTWT do the wrong thing
DWIM do what I mean DWIM do what I mean
EG evil grin EG evil grin
EMSG email message EMSG email message
EOB end of business [day]
EOL end of life
ETLA extended three letter acronym ETLA extended three letter acronym
EWAG experienced wild-ass guess EWAG experienced wild-ass guess
FAQ frequently asked question FAQ frequently asked question
FIIK fuck[ed] if I know FIIK fuck[ed] if I know
FIIR fuck[ed] if I remember FIIR fuck[ed] if I remember
FM fucking magic
FOAD fall over and die FOAD fall over and die
FSDO for some definition of FSDO for some definition of
FSVO for some value of FSVO for some value of
FTFM fuck the fuckin' manual!
FUBAR fucked up beyond all recognition FUBAR fucked up beyond all recognition
FUD fear, uncertainty and doubt FUD fear, uncertainty and doubt
FWIW for what it's worth FWIW for what it's worth
FYI for your information FYI for your information
G grin G grin
GIGO garbage in, garbage out
GMTA great minds think alike GMTA great minds think alike
GTFO get the fuck out
HAND have a nice day HAND have a nice day
HHIS hanging head in shame HHIS hanging head in shame
HTH hope this helps HTH hope this helps
@@ -56,15 +69,18 @@ IHAFC I haven't a fucking clue
IHNFC I have no fucking clue IHNFC I have no fucking clue
IIANM if I am not mistaken IIANM if I am not mistaken
IIRC if I recall correctly IIRC if I recall correctly
IMAO in my arrogant opinion
IMCO in my considered opinion IMCO in my considered opinion
IMHO in my humble opinion IMHO in my humble opinion
IMNSHO in my not so humble opinion IMNSHO in my not so humble opinion
IMO in my opinion IMO in my opinion
IOW in other words IOW in other words
IRL in real life IRL in real life
ISAGN I see a great need
ISTM it seems to me ISTM it seems to me
ISTR I seem to recall ISTR I seem to recall
ITYM I think you mean ITYM I think you mean
IYSS If you say so
JIC just in case JIC just in case
JK just kidding JK just kidding
JMO just my opinion JMO just my opinion
@@ -75,9 +91,11 @@ KNF kernel normal form
L8R later L8R later
LART luser attitude readjustment tool (ie, hammer) LART luser attitude readjustment tool (ie, hammer)
LJBF let's just be friends LJBF let's just be friends
LMAO laughing my ass off
LMSO laughing my socks off LMSO laughing my socks off
LOL laughing out loud LOL laughing out loud
LTNS long time no see LTNS long time no see
MMU memory management unit
MOTAS member of the appropriate sex MOTAS member of the appropriate sex
MOTOS member of the opposite sex MOTOS member of the opposite sex
MOTSS member of the same sex MOTSS member of the same sex
@@ -94,17 +112,25 @@ NRN no reply necessary
OIC oh, I see OIC oh, I see
OTL out to lunch OTL out to lunch
OTOH on the other hand OTOH on the other hand
OTT over the top
OTTOMH off the top of my head OTTOMH off the top of my head
PFO please fuck off
PFY pimply faced youth PFY pimply faced youth
PITA pain in the ass PITA pain in the ass
PKSP pound keys and spew profanity
PNG persona non grata PNG persona non grata
PNP plug and pray
POC point of contact POC point of contact
POLA principle of least astonishment POLA principle of least astonishment
POS piece of shit
PPL pretty please PPL pretty please
PTV parental tunnel vision
QED quod erat demonstrandum QED quod erat demonstrandum
RFC request for comments RFC request for comments
RL real life RL real life
RLC rod length check RLC rod length check
ROFL rolling on floor laughing
ROFLMAO rolling on floor laughing my ass off
ROTFL rolling on the floor laughing ROTFL rolling on the floor laughing
RP responsible person RP responsible person
RSN real soon now RSN real soon now
@@ -116,6 +142,7 @@ SCNR sorry, could not resist
SEP someone else's problem SEP someone else's problem
SFA sweet fuck all SFA sweet fuck all
SHID slaps head in disgust SHID slaps head in disgust
SIMCA sitting in my chair amused
SMLSFB so many losers, so few bullets SMLSFB so many losers, so few bullets
SMOP simple matter of programming SMOP simple matter of programming
SNAFU situation normal, all fucked up SNAFU situation normal, all fucked up
@@ -123,17 +150,23 @@ SNERT snot-nosed egotistical rude teenager
SO significant other SO significant other
SOB son of [a] bitch SOB son of [a] bitch
SOL shit out [of] luck SOL shit out [of] luck
SOP standard operating procedure
SSIA subject says it all
SUS stupid user syndrome SUS stupid user syndrome
SWAG silly, wild-assed guess SWAG silly, wild-assed guess
SWAHBI silly, wild-assed hare-brained idea SWAHBI silly, wild-assed hare-brained idea
SWMBO she who must be obeyed
TANSTAAFL there ain't no such thing as a free lunch TANSTAAFL there ain't no such thing as a free lunch
TBD to be {decided,determined,done} TBD to be {decided,determined,done}
TIA thanks in advance TIA thanks in advance
TLA three letter acronym TLA three letter acronym
TLB translation lookaside buffer
TMA too many abbreviations TMA too many abbreviations
TMI too much information TMI too much information
TOEFL test of english as a foreign language
TTFN ta ta for now TTFN ta ta for now
TTYL talk to you later TTYL talk to you later
TWIAVBP the world is a very big place
TYVM thank you very much TYVM thank you very much
UTSL use the source, Luke UTSL use the source, Luke
VEG very evil grin VEG very evil grin
@@ -141,8 +174,10 @@ WAG wild-ass guess
WIBNI wouldn't it be nice if WIBNI wouldn't it be nice if
WOFTAM waste of fucking time and money WOFTAM waste of fucking time and money
WOMBAT waste of money, brain, and time WOMBAT waste of money, brain, and time
WRT with respect to
WTF {what,where,who,why} the fuck WTF {what,where,who,why} the fuck
WTH {what,where,who,why} the hell WTH {what,where,who,why} the hell
WYSIWYG what you see is what you get WYSIWYG what you see is what you get
YKWIM you know what I mean YKWIM you know what I mean
YMA yo momma's ass
YMMV your mileage may vary YMMV your mileage may vary