diff --git a/cross.mk b/cross.mk
index 8dec173..89b37ac 100644
--- a/cross.mk
+++ b/cross.mk
@@ -1,7 +1,7 @@
DESTDIR = /usr/local/retrobsd
MACHINE = mips
-CC = gcc
+CC = gcc -m32
AS = $(CC) -x assembler-with-cpp
LD = ld
diff --git a/etc/.gitignore b/etc/.gitignore
index c447476..c602e3a 100644
--- a/etc/.gitignore
+++ b/etc/.gitignore
@@ -1,3 +1,4 @@
phones
remote
termcap
+termcap.full
diff --git a/etc/ttys b/etc/ttys
index 80edd05..55106e4 100644
--- a/etc/ttys
+++ b/etc/ttys
@@ -1,16 +1,16 @@
#
# name getty type status comments
#
-console "/libexec/getty std.default" vt100 on secure #special
+console "/libexec/getty std.default" xterm on secure #special
# Enable some of these for additional logins. Do NOT enable the same one as the
# console port, or strange things will happen. You can turn off the console port
# if you would rather use the getty on the real tty - it's up to you.
-tty0 "/libexec/getty std.default" vt100 off secure
-tty1 "/libexec/getty std.default" vt100 off secure
-tty2 "/libexec/getty std.default" vt100 off secure
-tty3 "/libexec/getty std.default" vt100 off secure
-tty4 "/libexec/getty std.default" vt100 off secure
-tty5 "/libexec/getty std.default" vt100 off secure
-ttyUSB0 "/libexec/getty std.default" vt100 off secure
+tty0 "/libexec/getty std.default" xterm off secure
+tty1 "/libexec/getty std.default" xterm off secure
+tty2 "/libexec/getty std.default" xterm off secure
+tty3 "/libexec/getty std.default" xterm off secure
+tty4 "/libexec/getty std.default" xterm off secure
+tty5 "/libexec/getty std.default" xterm off secure
+ttyUSB0 "/libexec/getty std.default" xterm off secure
diff --git a/include/curses.h b/include/curses.h
index 0370865..28bf21c 100644
--- a/include/curses.h
+++ b/include/curses.h
@@ -181,6 +181,10 @@ int waddstr (WINDOW *, char *);
int wgetstr (WINDOW *, char *);
int wdeleteln (WINDOW *);
void mvcur(int ly, int lx, int y, int x);
+void overwrite(WINDOW *win1, WINDOW *win2);
+void wclrtobot(WINDOW *win);
+int mvprintw(int y, int x, char *fmt, ...);
+int mvwprintw(WINDOW *win, int y, int x, char *fmt, ...);
/*
* Used to be in unctrl.h.
diff --git a/rootfs.manifest b/rootfs.manifest
index 47cc8d6..d4b2244 100644
--- a/rootfs.manifest
+++ b/rootfs.manifest
@@ -417,13 +417,21 @@ file /games/canfield
file /games/cfscores
file /games/factor
file /games/fish
+file /games/fortune
+file /games/hangman
+file /games/mille
+file /games/monop
file /games/morse
file /games/number
file /games/ppt
file /games/primes
+file /games/quiz
file /games/rain
+file /games/robots
file /games/rogue
file /games/sail
+file /games/snake
+file /games/snscore
file /games/teachgammon
file /games/trek
file /games/worm
@@ -433,13 +441,52 @@ file /games/wump
#
# Files: /games/lib
#
+default
+filemode 0444
dir /games/lib
file /games/lib/adventure.dat
-mode 0444
file /games/lib/battle_strings
-mode 0444
file /games/lib/cfscores
mode 0666
+file /games/lib/fortunes.dat
+file /games/lib/cards.pck
+file /games/lib/robots_roll
+mode 0666
+file /games/lib/snakerawscores
+mode 0666
+dir /games/lib/quiz.k
+file /games/lib/quiz.k/africa
+file /games/lib/quiz.k/america
+file /games/lib/quiz.k/areas
+file /games/lib/quiz.k/arith
+file /games/lib/quiz.k/asia
+file /games/lib/quiz.k/babies
+file /games/lib/quiz.k/bard
+file /games/lib/quiz.k/chinese
+file /games/lib/quiz.k/collectives
+file /games/lib/quiz.k/ed
+file /games/lib/quiz.k/elements
+file /games/lib/quiz.k/europe
+file /games/lib/quiz.k/greek
+file /games/lib/quiz.k/inca
+file /games/lib/quiz.k/index
+file /games/lib/quiz.k/latin
+file /games/lib/quiz.k/locomotive
+file /games/lib/quiz.k/midearth
+file /games/lib/quiz.k/morse
+file /games/lib/quiz.k/murders
+file /games/lib/quiz.k/poetry
+file /games/lib/quiz.k/posneg
+file /games/lib/quiz.k/pres
+file /games/lib/quiz.k/province
+file /games/lib/quiz.k/seq-easy
+file /games/lib/quiz.k/seq-hard
+file /games/lib/quiz.k/sexes
+file /games/lib/quiz.k/sov
+file /games/lib/quiz.k/spell
+file /games/lib/quiz.k/state
+file /games/lib/quiz.k/trek
+file /games/lib/quiz.k/ucc
#
# Files: /include
@@ -627,9 +674,12 @@ file /libexec/smlrc
default
filemode 0444
dir /share
+dir /share/dict
dir /share/misc
file /share/emg.keys
file /share/re.help
+file /share/dict/words
+file /share/misc/more.help
#
# Files: /share/example
@@ -716,16 +766,26 @@ file /share/man/cat5/crontab.0
file /share/man/cat5/ranlib.0
file /share/man/cat6/adventure.0
file /share/man/cat6/arithmetic.0
+file /share/man/cat6/atc.0
file /share/man/cat6/backgammon.0
file /share/man/cat6/banner.0
file /share/man/cat6/battlestar.0
file /share/man/cat6/bcd.0
file /share/man/cat6/canfield.0
+file /share/man/cat6/crib.0
+file /share/man/cat6/cribbage.0
file /share/man/cat6/fish.0
+file /share/man/cat6/fortune.0
+file /share/man/cat6/hangman.0
+file /share/man/cat6/mille.0
+file /share/man/cat6/monop.0
file /share/man/cat6/number.0
+file /share/man/cat6/quiz.0
file /share/man/cat6/rain.0
+file /share/man/cat6/robots.0
file /share/man/cat6/rogue.0
file /share/man/cat6/sail.0
+file /share/man/cat6/snake.0
file /share/man/cat6/trek.0
file /share/man/cat6/worm.0
file /share/man/cat6/worms.0
diff --git a/share/dict/words b/share/dict/words
new file mode 100644
index 0000000..b810c33
--- /dev/null
+++ b/share/dict/words
@@ -0,0 +1,25486 @@
+a
+AAA
+AAAS
+aardvark
+Aarhus
+Aaron
+ABA
+Ababa
+aback
+abacus
+abalone
+abandon
+abase
+abash
+abate
+abbas
+abbe
+abbey
+abbot
+Abbott
+abbreviate
+abc
+abdicate
+abdomen
+abdominal
+abduct
+Abe
+abed
+Abel
+Abelian
+Abelson
+Aberdeen
+Abernathy
+aberrant
+aberrate
+abet
+abetted
+abetting
+abeyance
+abeyant
+abhor
+abhorred
+abhorrent
+abide
+Abidjan
+Abigail
+abject
+abjure
+ablate
+ablaze
+able
+ablution
+abnegation
+Abner
+abnormal
+Abo
+aboard
+abode
+abolish
+abolition
+abominable
+abominate
+aboriginal
+aborigine
+aborning
+abort
+abound
+about
+above
+aboveboard
+aboveground
+abovementioned
+abrade
+Abraham
+Abram
+Abramson
+abrasion
+abrasive
+abreact
+abreast
+abridge
+abridgment
+abroad
+abrogate
+abrupt
+abscess
+abscissa
+abscissae
+abscond
+absent
+absentee
+absenteeism
+absentia
+absentminded
+absinthe
+absolute
+absolution
+absolve
+absorb
+absorbent
+absorption
+absorptive
+abstain
+abstention
+abstinent
+abstract
+abstractor
+abstruse
+absurd
+absurdum
+abuilding
+abundant
+abusable
+abuse
+abusive
+abut
+abutted
+abutting
+abysmal
+abyss
+Abyssinia
+AC
+acacia
+academia
+academic
+academician
+academy
+Acadia
+acanthus
+Acapulco
+accede
+accelerate
+accelerometer
+accent
+accentual
+accentuate
+accept
+acceptant
+acceptor
+access
+accessible
+accession
+accessory
+accident
+accidental
+accipiter
+acclaim
+acclamation
+acclimate
+accolade
+accommodate
+accompaniment
+accompanist
+accompany
+accomplice
+accomplish
+accord
+accordant
+accordion
+accost
+account
+accountant
+accouter
+Accra
+accredit
+accreditation
+accretion
+accrual
+accrue
+acculturate
+accumulate
+accuracy
+accurate
+accusation
+accusative
+accusatory
+accuse
+accustom
+ace
+acerbic
+acerbity
+acetaminophen
+acetate
+acetic
+acetone
+acetylene
+Achaean
+ache
+achieve
+Achilles
+aching
+achromatic
+acid
+acidic
+acidify
+acidulate
+acidulous
+Ackerman
+Ackley
+acknowledge
+acknowledgeable
+ACM
+acme
+acolyte
+acorn
+acoustic
+acquaint
+acquaintance
+acquiesce
+acquiescent
+acquire
+acquisition
+acquisitive
+acquit
+acquittal
+acquitting
+acre
+acreage
+acrid
+acrimonious
+acrimony
+acrobacy
+acrobat
+acrobatic
+acronym
+acrophobia
+acrophobic
+acropolis
+across
+acrylate
+acrylic
+act
+Actaeon
+actinic
+actinide
+actinium
+actinolite
+actinometer
+activate
+Acton
+actor
+actress
+actual
+actuarial
+actuate
+acuity
+acumen
+acupuncture
+acute
+acyclic
+ad
+Ada
+adage
+adagio
+Adair
+Adam
+adamant
+Adamson
+adapt
+adaptation
+adaptive
+add
+addend
+addenda
+addendum
+addict
+Addis
+Addison
+addition
+additive
+addle
+address
+addressee
+Addressograph
+adduce
+Adelaide
+Adele
+Adelia
+Aden
+adenine
+adenoma
+adenosine
+adept
+adequacy
+adequate
+adhere
+adherent
+adhesion
+adhesive
+adiabatic
+adieu
+adipic
+Adirondack
+adjacent
+adject
+adjectival
+adjoin
+adjoint
+adjourn
+adjudge
+adjudicate
+adjunct
+adjust
+adjutant
+Adkins
+Adler
+Adlerian
+administer
+administrable
+administrate
+administratrix
+admiral
+admiralty
+admiration
+admire
+admissible
+admission
+admit
+admittance
+admitted
+admitting
+admix
+admixture
+admonish
+admonition
+ado
+adobe
+adolescent
+Adolph
+Adolphus
+Adonis
+adopt
+adoption
+adoptive
+adoration
+adore
+adorn
+adposition
+adrenal
+adrenalin
+adrenaline
+Adrian
+Adriatic
+Adrienne
+adrift
+adroit
+adsorb
+adsorbate
+adsorption
+adsorptive
+adulate
+adult
+adulterate
+adulterous
+adultery
+advance
+advantage
+advantageous
+advent
+adventitious
+adventure
+adventurous
+adverb
+adverbial
+adversary
+adverse
+advert
+advertise
+advice
+advisable
+advise
+advisee
+advisor
+advisory
+advocacy
+advocate
+Aegean
+aegis
+Aeneas
+Aeneid
+aeolian
+Aeolus
+aerate
+aerial
+aerie
+Aerobacter
+aerobic
+aerodynamic
+aerofoil
+aerogene
+aeronautic
+aerosol
+aerospace
+Aeschylus
+Aesop
+aesthete
+aesthetic
+afar
+affable
+affair
+affect
+affectate
+affectionate
+afferent
+affiance
+affidavit
+affiliate
+affine
+affirm
+affirmation
+affirmative
+affix
+afflict
+affluent
+afford
+afforest
+afforestation
+affricate
+affront
+Afghan
+Afghanistan
+aficionado
+afield
+afire
+aflame
+afloat
+afoot
+aforementioned
+aforesaid
+aforethought
+afraid
+afreet
+afresh
+Africa
+Afrikaans
+Afrikaner
+afro
+aft
+afterbirth
+aftereffect
+afterglow
+afterimage
+afterlife
+aftermath
+afternoon
+afterthought
+afterward
+afterword
+again
+against
+Agamemnon
+agar
+agate
+Agatha
+agave
+age
+Agee
+agenda
+agent
+agglomerate
+agglutinate
+agglutinin
+aggravate
+aggregate
+aggression
+aggressive
+aggressor
+aggrieve
+aghast
+agile
+agitate
+agleam
+Agnes
+Agnew
+agnomen
+agnostic
+ago
+agog
+agone
+agony
+agouti
+agrarian
+agree
+agreeable
+agreeing
+agribusiness
+Agricola
+agricultural
+agriculture
+agrimony
+agronomist
+agronomy
+ague
+Agway
+ah
+ahead
+ahem
+Ahmedabad
+ahoy
+aid
+Aida
+aide
+Aides
+Aiken
+ail
+ailanthus
+aile
+aileron
+aim
+ain't
+Ainu
+air
+airborne
+airbrush
+aircraft
+airdrop
+airedale
+Aires
+airfare
+airfield
+airflow
+airframe
+airlift
+airline
+airlock
+airmail
+airman
+airmass
+airmen
+airpark
+airplane
+airport
+airspeed
+airstrip
+airtight
+airway
+airy
+aisle
+Aitken
+ajar
+Ajax
+AK
+Akers
+akin
+Akron
+AL
+ala
+Alabama
+Alabamian
+alabaster
+alacrity
+Aladdin
+alai
+Alameda
+Alamo
+alan
+alarm
+Alasdair
+Alaska
+Alastair
+alb
+alba
+albacore
+Albania
+Albany
+albatross
+albeit
+Alberich
+Albert
+Alberta
+Alberto
+albino
+Albrecht
+Albright
+album
+albumin
+Albuquerque
+Alcestis
+alchemist
+alchemy
+Alcmena
+Alcoa
+alcohol
+alcoholic
+Alcott
+alcove
+Aldebaran
+aldehyde
+Alden
+alder
+alderman
+aldermen
+Aldrich
+aldrin
+ale
+Alec
+Aleck
+aleph
+alert
+Aleutian
+alewife
+Alex
+Alexander
+Alexandra
+Alexandre
+Alexandria
+Alexei
+Alexis
+alfalfa
+alfonso
+Alfred
+Alfredo
+alfresco
+alga
+algae
+algaecide
+algal
+algebra
+algebraic
+Algenib
+Alger
+Algeria
+Algiers
+alginate
+Algol
+Algonquian
+Algonquin
+algorithm
+algorithmic
+Alhambra
+Ali
+alia
+alias
+alibi
+Alice
+Alicia
+alien
+alienate
+alight
+align
+alike
+alimentary
+alimony
+aliphatic
+aliquot
+Alison
+Alistair
+alive
+alizarin
+alkali
+alkaline
+alkaloid
+all
+Allah
+Allan
+allay
+allegate
+allege
+Allegheny
+allegiant
+allegoric
+allegory
+Allegra
+allegro
+allele
+allemand
+Allen
+Allentown
+allergic
+allergy
+alleviate
+alley
+alleyway
+alliance
+alligator
+Allis
+Allison
+alliterate
+allmsgs
+allocable
+allocate
+allot
+allotropic
+allotted
+allotting
+allow
+allowance
+alloy
+allspice
+Allstate
+allude
+allure
+allusion
+allusive
+alluvial
+alluvium
+ally
+allyl
+Allyn
+alma
+Almaden
+almagest
+almanac
+almighty
+almond
+almost
+aloe
+aloft
+aloha
+alone
+along
+alongside
+aloof
+aloud
+alp
+alpaca
+alpenstock
+Alpert
+alpha
+alphabet
+alphabetic
+alphanumeric
+Alpheratz
+Alphonse
+alpine
+already
+Alsatian
+also
+Alsop
+Altair
+altar
+alter
+alterate
+altercate
+altern
+alternate
+althea
+although
+altimeter
+altitude
+alto
+altogether
+Alton
+altruism
+altruist
+alum
+alumina
+aluminate
+alumna
+alumnae
+alumni
+alumnus
+alundum
+Alva
+Alvarez
+alveolar
+alveoli
+alveolus
+Alvin
+alway
+alyssum
+A&M
+am
+AMA
+Amadeus
+amalgam
+amalgamate
+amanita
+amanuensis
+amaranth
+Amarillo
+amass
+amateur
+amateurish
+amatory
+amaze
+Amazon
+ambassador
+amber
+ambiance
+ambidextrous
+ambient
+ambiguity
+ambiguous
+ambition
+ambitious
+ambivalent
+amble
+ambrose
+ambrosia
+ambrosial
+ambulant
+ambulatory
+ambuscade
+ambush
+Amelia
+ameliorate
+amen
+amend
+amende
+Amerada
+America
+Americana
+americium
+Ames
+amethyst
+amethystine
+Amharic
+Amherst
+ami
+amicable
+amid
+amide
+amidst
+amigo
+amino
+aminobenzoic
+amiss
+amity
+Amman
+Ammerman
+ammeter
+ammo
+ammonia
+ammoniac
+ammonite
+ammonium
+ammunition
+amnesia
+amnesiac
+amnesty
+amniocentesis
+amniotic
+Amoco
+amoeba
+amoebae
+amoeboid
+amok
+among
+amongst
+amoral
+amorphous
+amort
+Amos
+amount
+amp
+amperage
+ampere
+ampersand
+Ampex
+amphetamine
+amphibian
+amphibious
+amphibole
+amphibology
+amphioxis
+ample
+amplify
+amplitude
+amply
+amputate
+amra
+Amsterdam
+Amtrak
+amulet
+amuse
+amy
+amygdaloid
+an
+ana
+Anabaptist
+Anabel
+anachronism
+anachronistic
+anaconda
+Anacreon
+anaerobic
+anaglyph
+anagram
+Anaheim
+Analects
+analeptic
+analgesic
+analogous
+analogue
+analogy
+analyses
+analysis
+analyst
+analytic
+anamorphic
+anaphora
+anaphoric
+anaplasmosis
+anarch
+anarchic
+anarchy
+Anastasia
+anastigmat
+anastigmatic
+anastomosis
+anastomotic
+anathema
+Anatole
+anatomic
+anatomist
+anatomy
+ancestor
+ancestral
+ancestry
+anchor
+anchorage
+anchorite
+anchovy
+ancient
+ancillary
+and
+Andalusia
+Andean
+Andersen
+Anderson
+Andes
+andesine
+andesite
+Andorra
+Andover
+Andre
+Andrea
+Andrei
+Andrew
+androgen
+Andromache
+Andromeda
+Andy
+anecdotal
+anecdote
+anemone
+anent
+anew
+angel
+Angela
+Angeles
+angelfish
+angelic
+Angelica
+Angelina
+Angeline
+Angelo
+anger
+Angie
+angiosperm
+angle
+Angles
+Anglican
+Anglo
+Anglophobia
+Angola
+Angora
+angry
+angst
+angstrom
+anguish
+angular
+Angus
+anharmonic
+Anheuser
+anhydride
+anhydrite
+anhydrous
+ani
+aniline
+animadversion
+animadvert
+animal
+animate
+animism
+animist
+animosity
+anion
+anionic
+anise
+aniseikonic
+anisotropic
+anisotropy
+Anita
+Ankara
+ankle
+Ann
+Anna
+annal
+Annale
+Annalen
+Annapolis
+Anne
+anneal
+annelid
+Annette
+annex
+Annie
+annihilate
+anniversary
+annotate
+announce
+annoy
+annoyance
+annual
+annuity
+annul
+annular
+annuli
+annulled
+annulling
+annulus
+annum
+annunciate
+anode
+anodic
+anoint
+anomalous
+anomaly
+anomie
+anonymity
+anonymous
+anorexia
+anorthic
+anorthite
+anorthosite
+another
+Anselm
+Anselmo
+ANSI
+answer
+ant
+antacid
+Antaeus
+antagonism
+antagonist
+antarctic
+Antarctica
+Antares
+ante
+anteater
+antebellum
+antecedent
+antedate
+antelope
+antenna
+antennae
+anterior
+anthem
+anther
+anthology
+Anthony
+anthracite
+anthracnose
+anthropocentric
+anthropogenic
+anthropoid
+anthropology
+anthropomorphic
+anthropomorphism
+anti
+antic
+anticipate
+anticipatory
+anticonvulsant
+Antietam
+antigen
+Antigone
+antigorite
+Antilles
+antimony
+Antioch
+antipasto
+antipathy
+antiperspirant
+antiphonal
+antipodal
+antipode
+antiquarian
+antiquary
+antiquated
+antique
+antiquity
+antisemite
+antisemitic
+antithetic
+antivenin
+antler
+Antoine
+Antoinette
+Anton
+Antonio
+Antony
+antonym
+Antwerp
+anus
+anvil
+anxiety
+anxious
+any
+anybody
+anybody'd
+anyhow
+anyone
+anyplace
+anything
+anyway
+anywhere
+aorta
+A&P
+apache
+apart
+apartheid
+apathetic
+apathy
+apatite
+ape
+aperiodic
+aperture
+apex
+aphasia
+aphasic
+aphelion
+aphid
+aphorism
+aphrodisiac
+Aphrodite
+apiary
+apical
+apices
+apiece
+aplomb
+apocalypse
+apocalyptic
+Apocrypha
+apocryphal
+apogee
+Apollo
+Apollonian
+apologetic
+apologia
+apology
+apoplectic
+apoplexy
+apostasy
+apostate
+apostle
+apostolic
+apostrophe
+apothecary
+apothegm
+apotheosis
+Appalachia
+appall
+appanage
+apparatus
+apparel
+apparent
+apparition
+appeal
+appear
+appearance
+appeasable
+appease
+appellant
+appellate
+append
+appendage
+appendices
+appendix
+appertain
+appetite
+Appian
+applaud
+applause
+apple
+Appleby
+applejack
+Appleton
+appliance
+applicable
+applicant
+applicate
+applique
+apply
+appoint
+appointe
+appointee
+apport
+apposite
+apposition
+appraisal
+appraise
+appreciable
+appreciate
+apprehend
+apprehension
+apprehensive
+apprentice
+apprise
+approach
+approbation
+appropriable
+appropriate
+approval
+approve
+approximable
+approximant
+approximate
+apricot
+April
+apron
+apropos
+apse
+apt
+aptitude
+aqua
+aquarium
+Aquarius
+aquatic
+aqueduct
+aqueous
+aquifer
+Aquila
+Aquinas
+AR
+Arab
+arabesque
+Arabia
+Arabic
+Araby
+Arachne
+arachnid
+Arapaho
+arbiter
+arbitrage
+arbitrary
+arbitrate
+arboreal
+arborescent
+arboretum
+arbutus
+arc
+arcade
+Arcadia
+arcana
+arcane
+arccos
+arccosine
+arch
+archae
+archaic
+archaism
+archangel
+archbishop
+archdiocese
+archenemy
+archery
+archetype
+archetypical
+archfool
+Archibald
+Archimedes
+archipelago
+architect
+architectonic
+architectural
+architecture
+archival
+archive
+arcing
+arclength
+arcsin
+arcsine
+arctan
+arctangent
+arctic
+Arcturus
+Arden
+ardent
+arduous
+are
+area
+areaway
+areawide
+arena
+arenaceous
+aren't
+Arequipa
+Ares
+Argentina
+Argentine
+Argentinian
+argillaceous
+arginine
+Argive
+argo
+argon
+Argonaut
+Argonne
+argot
+argue
+argument
+argumentation
+argumentative
+Argus
+arhat
+aria
+Ariadne
+Arianism
+arid
+Aries
+arise
+arisen
+aristocracy
+aristocrat
+aristocratic
+Aristotelean
+Aristotelian
+Aristotle
+arithmetic
+Arizona
+ark
+Arkansan
+Arkansas
+Arlen
+Arlene
+Arlington
+arm
+armada
+armadillo
+Armageddon
+armament
+Armata
+armature
+armchair
+Armco
+Armenia
+armful
+armhole
+armillaria
+armistice
+armload
+armoire
+Armonk
+Armour
+armpit
+Armstrong
+army
+Arnold
+aroma
+aromatic
+arose
+around
+arousal
+arouse
+ARPA
+arpeggio
+arrack
+Arragon
+arraign
+arrange
+arrangeable
+array
+arrear
+arrest
+Arrhenius
+arrival
+arrive
+arrogant
+arrogate
+arrow
+arrowhead
+arrowroot
+arroyo
+arsenal
+arsenate
+arsenic
+arsenide
+arsine
+arson
+art
+Artemis
+artemisia
+arterial
+arteriole
+arteriolosclerosis
+arteriosclerosis
+artery
+artful
+arthritis
+arthropod
+Arthur
+artichoke
+article
+articulate
+articulatory
+Artie
+artifact
+artifice
+artificial
+artillery
+artisan
+artistry
+Arturo
+artwork
+arty
+Aruba
+arum
+aryl
+a's
+as
+asbestos
+ascend
+ascendant
+ascension
+ascent
+ascertain
+ascetic
+ascii
+ascomycetes
+ascribe
+ascription
+aseptic
+ash
+ashame
+ashen
+Asher
+Asheville
+Ashland
+Ashley
+ashman
+ashmen
+Ashmolean
+ashore
+ashram
+ashtray
+ashy
+Asia
+Asiatic
+aside
+Asilomar
+asinine
+ask
+askance
+askew
+asleep
+asocial
+asparagine
+asparagus
+aspartic
+aspect
+aspen
+asperity
+aspersion
+asphalt
+aspheric
+asphyxiate
+aspidistra
+aspirant
+aspirate
+aspire
+aspirin
+asplenium
+ass
+assai
+assail
+assailant
+Assam
+assassin
+assassinate
+assault
+assay
+assemblage
+assemble
+assent
+assert
+assess
+assessor
+asset
+assiduity
+assiduous
+assign
+assignation
+assignee
+assimilable
+assimilate
+assist
+assistant
+associable
+associate
+assonant
+assort
+assuage
+assume
+assumption
+assurance
+assure
+Assyria
+Assyriology
+Astarte
+astatine
+aster
+asteria
+asterisk
+asteroid
+asteroidal
+asthma
+astigmat
+astigmatic
+ASTM
+astonish
+Astor
+Astoria
+astound
+astraddle
+astral
+astray
+astride
+astringent
+astrologer
+astrology
+astronaut
+astronautic
+astronomer
+astronomic
+astronomy
+astrophysical
+astrophysicist
+astrophysics
+astute
+Asuncion
+asunder
+asylum
+asymmetry
+asymptomatic
+asymptote
+asymptotic
+asynchronous
+asynchrony
+at
+Atalanta
+atavism
+atavistic
+Atchison
+ate
+Athabascan
+atheism
+atheist
+Athena
+Athenian
+Athens
+athlete
+athletic
+athwart
+Atkins
+Atkinson
+Atlanta
+atlantes
+atlantic
+Atlantis
+atlas
+atmosphere
+atmospheric
+atoll
+atom
+atomic
+atonal
+atone
+atonic
+atop
+Atreus
+atrocious
+atrocity
+atrophic
+atrophy
+Atropos
+AT&T
+attach
+attache
+attack
+attain
+attainder
+attempt
+attend
+attendant
+attendee
+attention
+attentive
+attenuate
+attest
+attestation
+attic
+Attica
+attire
+attitude
+Attlee
+attorney
+attract
+attribute
+attribution
+attributive
+attrition
+attune
+Atwater
+Atwood
+atypic
+Auberge
+Aubrey
+auburn
+Auckland
+auction
+auctioneer
+audacious
+audacity
+audible
+audience
+audio
+audiotape
+audiovisual
+audit
+audition
+auditor
+auditorium
+auditory
+Audrey
+Audubon
+Auerbach
+Aug
+Augean
+auger
+augite
+augment
+augmentation
+augur
+august
+Augusta
+Augustine
+Augustus
+auk
+aunt
+auntie
+aura
+aural
+Aurelius
+aureomycin
+auric
+Auriga
+aurochs
+aurora
+Auschwitz
+auspice
+auspices
+auspicious
+austenite
+austere
+Austin
+austral
+Australia
+Australis
+australite
+Austria
+authentic
+authenticate
+author
+authoritarian
+authoritative
+autism
+autistic
+auto
+autobiography
+autochthonous
+autoclave
+autocollimate
+autocorrelate
+autocracy
+autocrat
+autocratic
+autograph
+automat
+automata
+automate
+automatic
+automaton
+automobile
+automorphism
+automotive
+autonomic
+autonomous
+autonomy
+autopilot
+autopsy
+autosuggestible
+autotransformer
+autumn
+autumnal
+auxiliary
+auxin
+avail
+avalanche
+avarice
+avaricious
+Ave
+avenge
+Aventine
+avenue
+aver
+average
+Avernus
+averred
+averring
+averse
+aversion
+avert
+Avery
+Avesta
+avian
+aviary
+aviate
+aviatrix
+avid
+Avignon
+avionic
+Avis
+Aviv
+avocado
+avocate
+avocet
+Avogadro
+avoid
+avoidance
+Avon
+avow
+avowal
+await
+awake
+awaken
+award
+aware
+awash
+away
+awe
+awesome
+awful
+awhile
+awkward
+awl
+awn
+awoke
+awry
+ax
+axe
+axial
+axiology
+axiom
+axiomatic
+axis
+axisymmetric
+axle
+axolotl
+axon
+aye
+Ayers
+Aylesbury
+AZ
+azalea
+Azerbaijan
+azimuth
+azimuthal
+Azores
+Aztec
+Aztecan
+azure
+b
+babbitt
+babble
+Babcock
+babe
+Babel
+baboon
+baby
+Babylon
+babysat
+babysit
+babysitting
+baccalaureate
+baccarat
+bacchanalian
+Bacchus
+Bach
+bachelor
+bacilli
+bacillus
+back
+backboard
+backbone
+backdrop
+backfill
+backgammon
+background
+backhand
+backlash
+backlog
+backorder
+backpack
+backpedal
+backplane
+backplate
+backscatter
+backside
+backslash
+backslide
+backspace
+backstage
+backstitch
+backstop
+backtrack
+backup
+backward
+backwash
+backwater
+backwood
+backyard
+bacon
+bacteria
+bacterial
+bacterium
+bad
+bade
+Baden
+badge
+badinage
+badland
+badminton
+Baffin
+baffle
+bag
+bagatelle
+baggage
+bagging
+baggy
+Baghdad
+Bagley
+bagpipe
+bah
+Bahama
+Bahrein
+bail
+Bailey
+bailiff
+bainite
+Baird
+bait
+Baja
+bake
+Bakelite
+Bakersfield
+bakery
+Bakhtiari
+baklava
+Baku
+balance
+Balboa
+balcony
+bald
+baldpate
+Baldwin
+baldy
+bale
+baleen
+baleful
+Balfour
+Bali
+Balinese
+balk
+Balkan
+balky
+ball
+ballad
+Ballard
+ballast
+ballerina
+ballet
+balletomane
+ballfield
+balloon
+ballot
+ballroom
+ballyhoo
+balm
+balmy
+balsa
+balsam
+Baltic
+Baltimore
+Baltimorean
+balustrade
+Balzac
+bam
+Bamako
+Bamberger
+Bambi
+bamboo
+ban
+Banach
+banal
+banana
+Banbury
+band
+bandage
+bandgap
+bandit
+bandpass
+bandstand
+bandstop
+bandwagon
+bandwidth
+bandy
+bane
+baneberry
+baneful
+bang
+bangkok
+Bangladesh
+bangle
+Bangor
+Bangui
+banish
+banister
+banjo
+bank
+bankrupt
+bankruptcy
+bannock
+banquet
+banshee
+bantam
+banter
+Bantu
+Bantus
+baobab
+baptism
+baptismal
+Baptist
+Baptiste
+baptistery
+bar
+barb
+Barbados
+Barbara
+barbarian
+barbaric
+barbarism
+barbarous
+barbecue
+barbell
+barber
+barberry
+barbital
+barbiturate
+Barbour
+barbudo
+Barcelona
+Barclay
+bard
+bare
+bareback
+barefaced
+barefoot
+barfly
+bargain
+barge
+baritone
+barium
+bark
+barkeep
+barley
+Barlow
+barn
+Barnabas
+barnacle
+Barnard
+Barnes
+Barnet
+Barnett
+Barney
+Barnhard
+barnstorm
+Barnum
+barnyard
+barometer
+baron
+baroness
+baronet
+baronial
+barony
+baroque
+Barr
+barrack
+barracuda
+barrage
+barre
+barrel
+barren
+Barrett
+barrette
+barricade
+barrier
+Barrington
+barrow
+Barry
+Barrymore
+Barstow
+bartend
+bartender
+barter
+Barth
+Bartholomew
+Bartlett
+Bartok
+Barton
+barycentric
+baryon
+basal
+basalt
+basaltic
+base
+baseball
+baseband
+baseboard
+Basel
+baseline
+baseman
+basemen
+baseplate
+basepoint
+bash
+bashaw
+bashful
+basic
+basidiomycetes
+basil
+basilar
+basilica
+basilisk
+basin
+basis
+bask
+basket
+basketball
+basketry
+basophilic
+Basque
+bass
+Bassett
+bassi
+bassinet
+basso
+bassoon
+basswood
+bastard
+baste
+bastion
+bat
+Batavia
+batch
+Batchelder
+bate
+bateau
+Bateman
+bater
+bath
+bathe
+bathos
+bathrobe
+bathroom
+bathtub
+Bathurst
+batik
+baton
+Bator
+batt
+battalion
+Battelle
+batten
+battery
+battle
+battlefield
+battlefront
+battleground
+batwing
+bauble
+baud
+Baudelaire
+Bauer
+Bauhaus
+Bausch
+bauxite
+Bavaria
+bawd
+bawdy
+bawl
+Baxter
+bay
+bayberry
+Bayda
+Bayesian
+Baylor
+bayonet
+Bayonne
+bayou
+Bayport
+Bayreuth
+bazaar
+be
+beach
+beachhead
+beacon
+bead
+beadle
+beady
+beagle
+beak
+beam
+bean
+bear
+bearberry
+beard
+Beardsley
+bearish
+beast
+beastie
+beat
+beaten
+beater
+beatific
+beatify
+beatitude
+beatnik
+Beatrice
+beau
+Beaujolais
+Beaumont
+Beauregard
+beauteous
+beautiful
+beautify
+beauty
+beaux
+beaver
+bebop
+becalm
+became
+because
+Bechtel
+beck
+becket
+Beckman
+beckon
+Becky
+become
+bed
+bedazzle
+bedbug
+bedevil
+bedfast
+bedfellow
+Bedford
+bedim
+bedimmed
+bedimming
+bedlam
+bedpost
+bedraggle
+bedridden
+bedrock
+bedroom
+bedside
+bedspread
+bedspring
+bedstraw
+bedtime
+bee
+Beebe
+beebread
+beech
+Beecham
+beechwood
+beef
+beefsteak
+beefy
+beehive
+been
+beep
+beer
+beeswax
+beet
+Beethoven
+beetle
+befall
+befallen
+befell
+befit
+befitting
+befog
+befogging
+before
+beforehand
+befoul
+befriend
+befuddle
+beg
+began
+begat
+beget
+begetting
+beggar
+beggary
+begging
+begin
+beginner
+beginning
+begonia
+begot
+begotten
+begrudge
+beguile
+begun
+behalf
+behave
+behead
+beheld
+behind
+behold
+beige
+Beijing
+being
+Beirut
+bel
+Bela
+belate
+belch
+Belfast
+belfry
+Belgian
+Belgium
+Belgrade
+belie
+belief
+believe
+belittle
+Belize
+bell
+Bella
+belladonna
+Bellamy
+Bellatrix
+bellboy
+belle
+bellflower
+bellhop
+bellicose
+belligerent
+Bellingham
+Bellini
+bellman
+bellmen
+bellow
+bellum
+bellwether
+belly
+bellyache
+bellyaching
+bellyful
+Belmont
+Beloit
+belong
+belove
+below
+Belshazzar
+belt
+Beltsville
+beluga
+belvedere
+BEMA
+bemadden
+beman
+bemoan
+bemuse
+Ben
+Benares
+bench
+benchmark
+bend
+Bendix
+beneath
+Benedict
+Benedictine
+benediction
+Benedikt
+benefactor
+benefice
+beneficent
+beneficial
+beneficiary
+benefit
+Benelux
+benevolent
+Bengal
+Bengali
+benight
+benign
+Benjamin
+Bennett
+Bennington
+Benny
+Benson
+bent
+Bentham
+benthic
+Bentley
+Benton
+Benz
+Benzedrine
+benzene
+Beograd
+Beowulf
+beplaster
+bequeath
+bequest
+berate
+Berea
+bereave
+bereft
+Berenices
+Beresford
+beret
+berg
+bergamot
+Bergen
+Bergland
+Berglund
+Bergman
+Bergson
+Bergstrom
+beribbon
+beriberi
+Berkeley
+berkelium
+Berkowitz
+Berkshire
+Berlin
+Berlioz
+Berlitz
+Berman
+Bermuda
+Bern
+Bernadine
+Bernard
+Bernardino
+Bernardo
+berne
+Bernet
+Bernhard
+Bernice
+Bernie
+Berniece
+Bernini
+Bernoulli
+Bernstein
+Berra
+berry
+berserk
+Bert
+berth
+Bertha
+Bertie
+Bertram
+Bertrand
+Berwick
+beryl
+beryllium
+beseech
+beset
+besetting
+beside
+besiege
+besmirch
+besotted
+bespeak
+bespectacled
+bespoke
+Bess
+Bessel
+Bessemer
+Bessie
+best
+bestial
+bestiary
+bestir
+bestirring
+bestow
+bestowal
+bestseller
+bestselling
+bestubble
+bet
+beta
+betatron
+betel
+Betelgeuse
+beth
+bethel
+Bethesda
+Bethlehem
+bethought
+betide
+betoken
+betony
+betray
+betrayal
+betroth
+betrothal
+Betsey
+Betsy
+Bette
+bettor
+Betty
+between
+betwixt
+bevel
+beverage
+Beverly
+bevy
+bewail
+beware
+bewhisker
+bewilder
+bewitch
+bey
+beyond
+bezel
+Bhagavadgita
+bhoy
+Bhutan
+Bialystok
+bianco
+bias
+biaxial
+bib
+bibb
+Bible
+biblical
+bibliography
+bibliophile
+bicameral
+bicarbonate
+bicep
+bichromate
+bicker
+biconcave
+biconnected
+bicycle
+bid
+bidden
+biddy
+bide
+bidiagonal
+bidirectional
+bien
+biennial
+biennium
+bifocal
+bifurcate
+big
+bigamy
+Bigelow
+Biggs
+bighorn
+bigot
+bigotry
+biharmonic
+bijection
+bijective
+bijouterie
+bike
+bikini
+bilabial
+bilateral
+bilayer
+Bilbao
+bile
+bilge
+bilharziasis
+bilinear
+bilingual
+bilk
+bill
+billboard
+billet
+billfold
+billiard
+Billie
+Billiken
+billion
+billionth
+billow
+billy
+Biltmore
+bimetallic
+bimetallism
+Bimini
+bimodal
+bimolecular
+bimonthly
+bin
+binary
+binaural
+bind
+bindery
+bindle
+bindweed
+bing
+binge
+Bingham
+Binghamton
+bingle
+Bini
+binocular
+binomial
+binuclear
+biochemic
+biography
+biology
+biometry
+biopsy
+biota
+biotic
+biotite
+bipartisan
+bipartite
+bipedal
+biplane
+bipolar
+biracial
+birch
+bird
+birdbath
+birdcage
+birdie
+birdseed
+birdwatch
+birefringent
+Birgit
+Birmingham
+birth
+birthday
+birthplace
+birthrate
+birthright
+biscuit
+bisect
+bisexual
+bishop
+bishopric
+Bismarck
+Bismark
+bismuth
+bison
+bisque
+Bissau
+bistable
+bistate
+bit
+bitch
+bite
+bitnet
+bitt
+bitten
+bittern
+bitternut
+bitterroot
+bittersweet
+bitumen
+bituminous
+bitwise
+bivalve
+bivariate
+bivouac
+biz
+bizarre
+Bizet
+blab
+black
+blackball
+blackberry
+blackbird
+blackboard
+blackbody
+Blackburn
+blacken
+Blackfeet
+Blackfoot
+blackguard
+blackjack
+blackmail
+Blackman
+blackout
+blacksmith
+Blackstone
+blacktop
+Blackwell
+bladder
+bladdernut
+bladderwort
+blade
+Blaine
+Blair
+Blake
+blame
+blameworthy
+blanc
+blanch
+Blanchard
+Blanche
+bland
+blandish
+blank
+blanket
+blare
+blaspheme
+blasphemous
+blasphemy
+blast
+blastula
+blat
+blatant
+blather
+Blatz
+blaze
+blazon
+bleach
+bleak
+bleary
+bleat
+bled
+bleed
+Bleeker
+blemish
+blend
+Blenheim
+bless
+blest
+blew
+blight
+blimp
+blind
+blindfold
+blink
+Blinn
+blip
+bliss
+blissful
+blister
+blithe
+blitz
+blitzkrieg
+blizzard
+bloat
+blob
+bloc
+Bloch
+block
+blockade
+blockage
+blockhouse
+blocky
+bloke
+Blomberg
+Blomquist
+blond
+blonde
+blood
+bloodbath
+bloodhound
+bloodletting
+bloodline
+bloodroot
+bloodshed
+bloodshot
+bloodstain
+bloodstone
+bloodstream
+bloody
+bloom
+Bloomfield
+Bloomington
+bloop
+blossom
+blot
+blotch
+blouse
+blow
+blowfish
+blown
+blowup
+blubber
+bludgeon
+blue
+blueback
+blueberry
+bluebill
+bluebird
+bluebonnet
+bluebook
+bluebush
+bluefish
+bluegill
+bluegrass
+bluejacket
+blueprint
+bluestocking
+bluet
+bluff
+bluish
+Blum
+Blumenthal
+blunder
+blunderbuss
+blunt
+blur
+blurb
+blurry
+blurt
+blush
+bluster
+blustery
+blutwurst
+Blvd
+Blythe
+BMW
+boa
+boar
+board
+boardinghouse
+boast
+boastful
+boat
+boathouse
+boatload
+boatman
+boatmen
+boatswain
+boatyard
+bob
+Bobbie
+bobbin
+bobble
+bobby
+bobcat
+bobolink
+Boca
+bock
+bode
+bodhisattva
+bodice
+Bodleian
+body
+bodybuilder
+bodybuilding
+bodyguard
+Boeing
+Boeotia
+bog
+bogey
+bogeyman
+bogeymen
+bogging
+boggle
+boggy
+Bogota
+bogus
+bogy
+Bohemia
+Bohr
+boil
+Bois
+Boise
+boisterous
+bold
+boldface
+bole
+boletus
+bolivar
+Bolivia
+bolo
+Bologna
+bolometer
+Bolshevik
+Bolshevism
+Bolshevist
+Bolshoi
+bolster
+bolt
+Bolton
+Boltzmann
+bomb
+bombard
+bombast
+bombastic
+Bombay
+bombproof
+bon
+bona
+bonanza
+Bonaparte
+Bonaventure
+bond
+bondage
+bondsman
+bondsmen
+bone
+bonfire
+bong
+bongo
+Boniface
+bonito
+Bonn
+bonnet
+Bonneville
+Bonnie
+bonus
+bony
+bonze
+boo
+booby
+boogie
+book
+bookbind
+bookcase
+bookend
+bookie
+bookish
+bookkeep
+booklet
+bookmark
+bookplate
+bookseller
+bookshelf
+bookshelves
+bookstore
+bookworm
+booky
+boolean
+boom
+boomerang
+boon
+Boone
+boor
+boorish
+boost
+boot
+Bootes
+booth
+bootleg
+bootlegger
+bootlegging
+bootstrap
+bootstrapping
+booty
+booze
+bop
+borate
+borax
+Bordeaux
+bordello
+Borden
+border
+borderland
+borderline
+bore
+boreal
+Borealis
+Boreas
+boredom
+Borg
+boric
+Boris
+born
+borne
+Borneo
+boron
+borosilicate
+borough
+Borroughs
+borrow
+Bosch
+Bose
+bosom
+boson
+bosonic
+Bosporus
+boss
+bossy
+Boston
+Boswell
+botanic
+botanist
+botany
+botch
+botfly
+both
+bothersome
+Botswana
+bottle
+bottlecap
+bottleneck
+bottom
+bottommost
+botulin
+botulism
+Boucher
+bouffant
+bough
+bought
+bouillabaisse
+bouillon
+boulder
+boulevard
+bounce
+bouncy
+bound
+boundary
+bountiful
+bounty
+bouquet
+Bourbaki
+bourbon
+bourgeois
+bourgeoisie
+bourn
+boustrophedon
+bout
+boutique
+bovine
+bow
+Bowditch
+Bowdoin
+bowel
+Bowen
+bowerbird
+bowfin
+bowie
+bowl
+bowline
+bowman
+bowmen
+bowstring
+box
+boxcar
+boxwood
+boxy
+boy
+boyar
+Boyce
+boycott
+Boyd
+boyish
+Boyle
+Boylston
+BP
+brace
+bracelet
+bracken
+bracket
+brackish
+bract
+brad
+Bradbury
+Bradford
+Bradley
+Bradshaw
+Brady
+brae
+brag
+Bragg
+bragging
+Brahmaputra
+Brahms
+Brahmsian
+braid
+Braille
+brain
+Brainard
+brainchild
+brainstorm
+brainwash
+brainy
+brake
+brakeman
+brakemen
+bramble
+bran
+branch
+brand
+Brandeis
+Brandenburg
+brandish
+Brandon
+Brandt
+brandy
+brandywine
+Braniff
+brant
+brash
+Brasilia
+brass
+brassiere
+brassy
+bratwurst
+Braun
+bravado
+brave
+bravery
+bravo
+bravura
+brawl
+bray
+brazen
+brazier
+Brazil
+Brazilian
+Brazzaville
+breach
+bread
+breadboard
+breadfruit
+breadroot
+breadth
+break
+breakage
+breakaway
+breakdown
+breakfast
+breakneck
+breakoff
+breakpoint
+breakthrough
+breakup
+breakwater
+bream
+breast
+breastplate
+breastwork
+breath
+breathe
+breathtaking
+breathy
+breccia
+bred
+breech
+breed
+breeze
+breezy
+Bremen
+bremsstrahlung
+Brenda
+Brendan
+Brennan
+Brenner
+Brent
+Brest
+brethren
+Breton
+Brett
+breve
+brevet
+brevity
+brew
+brewery
+Brewster
+Brian
+briar
+bribe
+bribery
+Brice
+brick
+brickbat
+bricklayer
+bricklaying
+bridal
+bride
+bridegroom
+bridesmaid
+bridge
+bridgeable
+bridgehead
+Bridgeport
+Bridget
+Bridgetown
+Bridgewater
+bridgework
+bridle
+Brie
+brief
+briefcase
+brig
+brigade
+brigadier
+brigand
+brigantine
+Briggs
+Brigham
+bright
+brighten
+Brighton
+brilliant
+Brillouin
+brim
+brimful
+brimstone
+Brindisi
+brindle
+brine
+bring
+brink
+brinkmanship
+briny
+Brisbane
+brisk
+bristle
+bristlecone
+bristly
+Bristol
+Britain
+Britannic
+Britannica
+britches
+British
+Briton
+Brittany
+Britten
+brittle
+broach
+broad
+broadcast
+broaden
+broadloom
+broadminded
+broadside
+Broadway
+brocade
+broccoli
+brochure
+Brock
+brockle
+Broglie
+broil
+broke
+broken
+brokerage
+Bromfield
+bromide
+bromine
+Bromley
+bronchi
+bronchial
+bronchiolar
+bronchiole
+bronchitis
+bronchus
+bronco
+Brontosaurus
+Bronx
+bronze
+bronzy
+brood
+broody
+brook
+Brooke
+Brookhaven
+Brookline
+Brooklyn
+brookside
+broom
+broomcorn
+broth
+brothel
+brother
+brought
+brouhaha
+brow
+browbeaten
+brown
+Browne
+Brownell
+Brownian
+brownie
+brownish
+browse
+Bruce
+brucellosis
+Bruckner
+Bruegel
+bruise
+bruit
+Brumidi
+brunch
+brunette
+Brunhilde
+Bruno
+Brunswick
+brunt
+brush
+brushfire
+brushstroke
+brushwork
+brushy
+brusque
+Brussels
+brutal
+brute
+Bryan
+Bryant
+Bryce
+Bryn
+bryophyta
+bryophyte
+bryozoa
+b's
+BSTJ
+BTL
+bub
+bubble
+bubonic
+buccaneer
+Buchanan
+Bucharest
+Buchenwald
+Buchwald
+buck
+buckaroo
+buckboard
+bucket
+bucketful
+buckeye
+buckhorn
+buckle
+Buckley
+Bucknell
+buckshot
+buckskin
+buckthorn
+buckwheat
+bucolic
+bud
+Budapest
+Budd
+Buddha
+Buddhism
+Buddhist
+buddy
+budge
+budget
+budgetary
+Budweiser
+Buena
+Buenos
+buff
+buffalo
+buffet
+bufflehead
+buffoon
+bug
+bugaboo
+bugeyed
+bugging
+buggy
+bugle
+Buick
+build
+buildup
+built
+builtin
+Bujumbura
+bulb
+bulblet
+bulbous
+Bulgaria
+bulge
+bulk
+bulkhead
+bulky
+bull
+bulldog
+bulldoze
+bullet
+bulletin
+bullfinch
+bullfrog
+bullhead
+bullhide
+bullish
+bullock
+bullrush
+bullseye
+bullwhack
+bully
+bullyboy
+bulrush
+bulwark
+bum
+bumble
+bumblebee
+bump
+bumpkin
+bumptious
+bumpy
+bun
+bunch
+Bundestag
+bundle
+Bundoora
+bundy
+bungalow
+bungle
+bunk
+bunkmate
+bunny
+Bunsen
+bunt
+Bunyan
+buoy
+buoyant
+burbank
+Burch
+burden
+burdensome
+burdock
+bureau
+bureaucracy
+bureaucrat
+bureaucratic
+buret
+burette
+burg
+burgeon
+burgess
+burgher
+burglar
+burglarproof
+burglary
+Burgundian
+Burgundy
+burial
+Burke
+burl
+burlap
+burlesque
+burley
+Burlington
+burly
+Burma
+Burmese
+burn
+Burnett
+Burnham
+burnish
+burnout
+Burnside
+burnt
+burp
+Burr
+burro
+Burroughs
+burrow
+bursitis
+burst
+bursty
+Burt
+Burton
+Burtt
+Burundi
+bury
+bus
+busboy
+Busch
+bush
+bushel
+bushland
+bushmaster
+Bushnell
+bushwhack
+bushy
+business
+businessman
+businessmen
+businesswoman
+businesswomen
+busload
+buss
+bust
+bustard
+bustle
+busy
+busywork
+but
+butadiene
+butane
+butch
+butchery
+butene
+buteo
+butler
+butt
+butte
+butterball
+buttercup
+butterfat
+Butterfield
+butterfly
+buttermilk
+butternut
+butterscotch
+buttery
+buttock
+button
+buttonhole
+buttonweed
+buttress
+Buttrick
+butyl
+butyrate
+butyric
+buxom
+Buxtehude
+Buxton
+buy
+buzz
+buzzard
+buzzing
+buzzword
+buzzy
+by
+bye
+bygone
+bylaw
+byline
+bypass
+bypath
+byproduct
+Byrd
+Byrne
+byroad
+Byron
+Byronic
+bystander
+byte
+byway
+byword
+Byzantine
+Byzantium
+c
+CA
+cab
+cabal
+cabana
+cabaret
+cabbage
+cabdriver
+cabin
+cabinet
+cabinetmake
+cabinetry
+cable
+Cabot
+cacao
+cachalot
+cache
+caching
+cackle
+CACM
+cacophonist
+cacophonous
+cacophony
+cacti
+cactus
+cadaver
+cadaverous
+caddis
+caddy
+cadent
+cadenza
+cadet
+Cadillac
+cadmium
+cadre
+Cady
+Caesar
+Caesarian
+cafe
+cafeteria
+cage
+cagey
+Cahill
+cahoot
+caiman
+Cain
+Caine
+cairn
+Cairo
+cajole
+Cajun
+cake
+Cal
+calabash
+Calais
+calamitous
+calamity
+calamus
+calcareous
+calcify
+calcite
+calcium
+calculable
+calculate
+calculi
+calculus
+Calcutta
+Calder
+caldera
+Caldwell
+Caleb
+calendar
+calendrical
+calf
+calfskin
+Calgary
+Calhoun
+caliber
+calibrate
+calibre
+calico
+California
+californium
+caliper
+caliph
+caliphate
+calisthenic
+Calkins
+call
+calla
+Callaghan
+Callahan
+calligraph
+calligraphy
+calliope
+Callisto
+callosity
+callous
+callus
+calm
+caloric
+calorie
+calorimeter
+Calumet
+calumniate
+calumny
+Calvary
+calve
+Calvert
+Calvin
+calypso
+calyx
+cam
+camaraderie
+camber
+Cambodia
+Cambrian
+cambric
+Cambridge
+Camden
+came
+camel
+camelback
+camellia
+camelopard
+Camelot
+Camembert
+cameo
+camera
+cameraman
+cameramen
+Cameron
+Cameroon
+Cameroun
+camilla
+Camille
+Camino
+camouflage
+camp
+campaign
+campanile
+Campbell
+campfire
+campground
+campion
+campsite
+campus
+can
+Canaan
+Canada
+Canadian
+canal
+canary
+Canaveral
+Canberra
+cancel
+cancellate
+cancelled
+cancelling
+cancer
+cancerous
+candela
+candelabra
+candid
+candidacy
+candidate
+Candide
+candle
+candlelight
+candlestick
+candlewick
+candy
+cane
+Canfield
+canine
+Canis
+canister
+canker
+cankerworm
+canna
+cannabis
+cannel
+cannery
+cannibal
+cannister
+cannon
+cannonball
+cannot
+canny
+canoe
+canoeist
+Canoga
+canon
+canonic
+Canopus
+canopy
+can't
+cant
+Cantabrigian
+cantaloupe
+canteen
+Canterbury
+canterelle
+canticle
+cantilever
+cantle
+canto
+canton
+Cantonese
+cantor
+canvas
+canvasback
+canvass
+canyon
+cap
+capacious
+capacitance
+capacitate
+capacitive
+capacitor
+capacity
+cape
+capella
+caper
+Capetown
+capillary
+Capistrano
+capita
+capital
+capitol
+Capitoline
+capitulate
+capo
+caprice
+capricious
+Capricorn
+capsize
+capstan
+capstone
+capsule
+captain
+captaincy
+caption
+captious
+captivate
+captive
+captor
+capture
+capuchin
+Caputo
+capybara
+car
+carabao
+Caracas
+caramel
+carapace
+caravan
+caraway
+carbide
+carbine
+carbohydrate
+Carboloy
+carbon
+carbonaceous
+carbonate
+Carbondale
+Carbone
+carbonic
+Carboniferous
+carbonium
+carbonyl
+carborundum
+carboxy
+carboxylic
+carboy
+carbuncle
+carcass
+carcinogen
+carcinogenic
+carcinoma
+card
+cardamom
+cardboard
+cardiac
+Cardiff
+cardigan
+cardinal
+cardioid
+cardiology
+cardiovascular
+care
+careen
+career
+carefree
+careful
+caress
+caret
+caretaker
+careworn
+Carey
+Cargill
+cargo
+cargoes
+Carib
+Caribbean
+caribou
+caricature
+Carl
+Carla
+Carleton
+Carlin
+Carlisle
+Carlo
+carload
+Carlsbad
+Carlson
+Carlton
+Carlyle
+Carmela
+Carmen
+Carmichael
+carmine
+carnage
+carnal
+carnation
+carne
+Carnegie
+carney
+carnival
+carob
+carol
+Carolina
+Caroline
+Carolingian
+Carolinian
+Carolyn
+carouse
+carousel
+carp
+carpal
+Carpathia
+carpenter
+carpentry
+carpet
+carpetbag
+carpetbagger
+carpetbagging
+carport
+Carr
+carrageen
+Carrara
+carrel
+carriage
+Carrie
+carrion
+Carroll
+carrot
+Carruthers
+carry
+carryover
+Carson
+cart
+carte
+cartel
+Cartesian
+Carthage
+cartilage
+cartilaginous
+cartographer
+cartography
+carton
+cartoon
+cartridge
+cartwheel
+Caruso
+carve
+carven
+Casanova
+casbah
+cascade
+cascara
+case
+casebook
+casein
+casework
+Casey
+cash
+cashew
+cashier
+cashmere
+casino
+cask
+casket
+Cassandra
+cassava
+casserole
+cassette
+Cassiopeia
+Cassius
+cassock
+cast
+castanet
+caste
+casteth
+castigate
+Castillo
+castle
+castor
+castrate
+Castro
+casual
+casualty
+cat
+cataclysmic
+cataleptic
+Catalina
+catalogue
+Catalonia
+catalpa
+catalysis
+catalyst
+catalytic
+catapult
+cataract
+catastrophe
+catastrophic
+catatonia
+catatonic
+catawba
+catbird
+catch
+catchup
+catchword
+catchy
+catechism
+categoric
+category
+catenate
+cater
+caterpillar
+catfish
+catharsis
+cathedral
+Catherine
+Catherwood
+catheter
+cathode
+cathodic
+catholic
+Cathy
+cation
+cationic
+catkin
+catnip
+Catskill
+catsup
+cattail
+cattle
+cattleman
+cattlemen
+catwalk
+Caucasian
+Caucasus
+Cauchy
+caucus
+caudal
+caught
+cauliflower
+caulk
+causal
+causate
+cause
+caustic
+caution
+cautionary
+cautious
+cavalcade
+cavalier
+cavalry
+cave
+caveat
+caveman
+cavemen
+Cavendish
+cavern
+cavernous
+caviar
+cavil
+cavilling
+Caviness
+cavort
+caw
+cayenne
+Cayley
+Cayuga
+CBS
+CDC
+cease
+ceasefire
+Cecil
+Cecilia
+Cecropia
+cedar
+cede
+cedilla
+Cedric
+ceil
+celandine
+Celanese
+Celebes
+celebrant
+celebrate
+celebratory
+celebrity
+celerity
+celery
+celesta
+celestial
+Celia
+cell
+cellar
+cellophane
+cellular
+celluloid
+cellulose
+Celsius
+Celt
+Celtic
+cement
+cemetery
+Cenozoic
+censor
+censorial
+censure
+census
+cent
+centaur
+centenary
+centennial
+centerline
+centerpiece
+centigrade
+centipede
+central
+centrex
+centric
+centrifugal
+centrifugate
+centrifuge
+centripetal
+centrist
+centroid
+centum
+century
+Cepheus
+ceramic
+ceramium
+Cerberus
+cereal
+cerebellum
+cerebral
+cerebrate
+ceremonial
+ceremonious
+ceremony
+Ceres
+cereus
+cerise
+cerium
+CERN
+certain
+certainty
+certificate
+certify
+certiorari
+certitude
+cerulean
+Cervantes
+cervix
+Cesare
+cesium
+cessation
+cession
+Cessna
+cetacean
+cetera
+Cetus
+Ceylon
+Cezanne
+cf
+Chablis
+Chad
+Chadwick
+chafe
+chaff
+chagrin
+chain
+chair
+chairlady
+chairman
+chairmen
+chairperson
+chairwoman
+chairwomen
+chaise
+chalcedony
+chalcocite
+chalice
+chalk
+chalkline
+chalky
+challenge
+Chalmers
+chamber
+chamberlain
+chambermaid
+chameleon
+chamfer
+chamois
+chamomile
+champ
+champagne
+Champaign
+champion
+Champlain
+chance
+chancel
+chancellor
+chancery
+chancy
+chandelier
+Chandigarh
+chandler
+Chang
+change
+changeable
+changeover
+channel
+chanson
+chant
+chantey
+Chantilly
+chantry
+Chao
+chaos
+chaotic
+chap
+chaparral
+chapati
+chapel
+chaperon
+chaperone
+chaplain
+Chaplin
+Chapman
+chapter
+char
+character
+characteristic
+charcoal
+charcuterie
+chard
+charge
+chargeable
+chariot
+charisma
+charismatic
+charitable
+charity
+Charlemagne
+Charles
+Charleston
+Charley
+Charlie
+Charlotte
+Charlottesville
+charm
+Charon
+chart
+Charta
+Chartres
+chartreuse
+chartroom
+Charybdis
+chase
+chasm
+chassis
+chaste
+chastise
+chastity
+chat
+chateau
+chateaux
+Chatham
+Chattanooga
+chattel
+chatty
+Chaucer
+chauffeur
+Chauncey
+Chautauqua
+chauvinism
+chauvinist
+chaw
+cheap
+cheat
+cheater
+check
+checkbook
+checkerberry
+checkerboard
+checklist
+checkout
+checkpoint
+checksum
+checksummed
+checksumming
+checkup
+Cheddar
+cheek
+cheekbone
+cheeky
+cheer
+cheerful
+cheerleader
+cheery
+cheese
+cheesecake
+cheesecloth
+cheesemaking
+cheesy
+cheetah
+chef
+chelate
+Chelsea
+chemic
+chemise
+chemisorb
+chemisorption
+chemist
+chemistry
+chemotherapy
+Chen
+Cheney
+chenille
+cherish
+Cherokee
+cherry
+chert
+cherub
+cherubim
+Cheryl
+Chesapeake
+Cheshire
+chess
+chest
+Chester
+Chesterton
+chestnut
+chevalier
+Chevrolet
+chevron
+chevy
+chew
+chewy
+Cheyenne
+chi
+Chiang
+chianti
+chic
+Chicago
+Chicagoan
+chicanery
+Chicano
+chick
+chickadee
+chicken
+chickpea
+chickweed
+chicory
+chide
+chief
+chiefdom
+chieftain
+chiffon
+chigger
+chignon
+chilblain
+child
+childbearing
+childbirth
+childish
+childrearing
+children
+Chile
+chili
+chill
+chilly
+chime
+chimera
+chimeric
+Chimique
+chimney
+chimpanzee
+chin
+china
+Chinaman
+Chinamen
+Chinatown
+chinch
+chinchilla
+chine
+Chinese
+chink
+Chinook
+chinquapin
+chintz
+chintzy
+chip
+chipboard
+chipmunk
+Chippendale
+chiropractor
+chirp
+chisel
+Chisholm
+chit
+chitin
+chitinous
+chiton
+chivalrous
+chivalry
+chive
+Chloe
+chlorate
+chlordane
+chloride
+chlorine
+chloroform
+chlorophyll
+chloroplast
+chloroplatinate
+chock
+chocolate
+Choctaw
+choice
+choir
+choirmaster
+choke
+chokeberry
+cholera
+cholesterol
+choline
+cholinesterase
+chomp
+Chomsky
+chondrite
+choose
+choosy
+chop
+Chopin
+choppy
+chopstick
+choral
+chorale
+chord
+chordal
+chordata
+chordate
+chore
+choreograph
+choreography
+chorine
+chortle
+chorus
+choryza
+chose
+chosen
+Chou
+chow
+chowder
+Chris
+Christ
+christen
+Christendom
+Christensen
+Christenson
+Christian
+Christiana
+Christianson
+Christie
+Christina
+Christine
+Christmas
+Christoffel
+Christoph
+Christopher
+Christy
+chromate
+chromatic
+chromatin
+chromatogram
+chromatograph
+chromatography
+chrome
+chromic
+chromium
+chromosomal
+chromosome
+chromosphere
+chronic
+chronicle
+chronograph
+chronography
+chronology
+chrysalis
+chrysanthemum
+Chrysler
+chrysolite
+chub
+chubby
+chuck
+chuckle
+chuckwalla
+chuff
+chug
+chugging
+chum
+chummy
+chump
+Chungking
+chunk
+chunky
+church
+churchgoer
+churchgoing
+Churchill
+Churchillian
+churchman
+churchmen
+churchwoman
+churchwomen
+churchyard
+churn
+chute
+chutney
+CIA
+cicada
+Cicero
+Ciceronian
+cider
+cigar
+cigarette
+cilia
+ciliate
+cinch
+Cincinnati
+cinder
+Cinderella
+Cindy
+cinema
+cinematic
+Cinerama
+cinnabar
+cinnamon
+cinquefoil
+cipher
+circa
+circadian
+Circe
+circle
+circlet
+circuit
+circuitous
+circuitry
+circulant
+circular
+circulate
+circulatory
+circumcircle
+circumcise
+circumcision
+circumference
+circumferential
+circumflex
+circumlocution
+circumpolar
+circumscribe
+circumscription
+circumspect
+circumsphere
+circumstance
+circumstantial
+circumvent
+circumvention
+circus
+cistern
+cit
+citadel
+citation
+cite
+citizen
+citizenry
+citrate
+citric
+Citroen
+citron
+citrus
+city
+cityscape
+citywide
+civet
+civic
+civil
+civilian
+clad
+cladophora
+claim
+claimant
+Claire
+clairvoyant
+clam
+clamber
+clammy
+clamp
+clamshell
+clan
+clandestine
+clang
+clank
+clannish
+clap
+clapboard
+Clapeyron
+Clara
+Clare
+Claremont
+Clarence
+Clarendon
+claret
+clarify
+clarinet
+clarity
+Clark
+Clarke
+clash
+clasp
+class
+classic
+classificatory
+classify
+classmate
+classroom
+classy
+clatter
+clattery
+Claude
+Claudia
+Claudio
+Claus
+clause
+Clausen
+Clausius
+claustrophobia
+claustrophobic
+clavicle
+claw
+clay
+Clayton
+clean
+cleanse
+cleanup
+clear
+clearance
+clearheaded
+Clearwater
+cleat
+cleavage
+cleave
+clef
+cleft
+Clemens
+clement
+Clemson
+clench
+clergy
+clergyman
+clergymen
+cleric
+clerk
+Cleveland
+clever
+cliche
+click
+client
+clientele
+cliff
+cliffhang
+Clifford
+Clifton
+climactic
+climate
+climatic
+climatology
+climax
+climb
+clime
+clinch
+cling
+clinic
+clinician
+clink
+Clint
+Clinton
+Clio
+clip
+clipboard
+clique
+clitoris
+Clive
+cloaca
+cloacal
+cloak
+cloakroom
+clobber
+clock
+clockwatcher
+clockwise
+clockwork
+clod
+cloddish
+clog
+clogging
+cloister
+clomp
+clone
+clonic
+close
+closet
+closeup
+closure
+clot
+cloth
+clothbound
+clothe
+clothesbrush
+clotheshorse
+clothesline
+clothesman
+clothesmen
+clothier
+Clotho
+cloture
+cloud
+cloudburst
+cloudy
+clout
+clove
+clown
+clownish
+cloy
+club
+clubhouse
+clubroom
+cluck
+clue
+Cluj
+clump
+clumsy
+clung
+cluster
+clutch
+clutter
+Clyde
+Clytemnestra
+CO
+co
+coach
+coachman
+coachmen
+coachwork
+coadjutor
+coagulable
+coagulate
+coal
+coalesce
+coalescent
+coalition
+coarse
+coarsen
+coast
+coastal
+coastline
+coat
+Coates
+coattail
+coauthor
+coax
+coaxial
+cob
+cobalt
+Cobb
+cobble
+cobblestone
+Cobol
+cobra
+cobweb
+coca
+cocaine
+coccidiosis
+cochineal
+cochlea
+Cochran
+Cochrane
+cock
+cockatoo
+cockcrow
+cockeye
+cockfight
+cockle
+cocklebur
+cockleshell
+cockpit
+cockroach
+cocksure
+cocktail
+cocky
+coco
+cocoa
+coconut
+cocoon
+cod
+coda
+Coddington
+coddle
+code
+codebreak
+codeposit
+codetermine
+codeword
+codex
+codfish
+codicil
+codify
+codomain
+codon
+codpiece
+Cody
+coed
+coeditor
+coeducation
+coefficient
+coequal
+coerce
+coercible
+coercion
+coercive
+coevolution
+coexist
+coexistent
+coextensive
+cofactor
+coffee
+coffeecup
+coffeepot
+coffer
+Coffey
+coffin
+Coffman
+cog
+cogent
+cogitate
+cognac
+cognate
+cognition
+cognitive
+cognoscenti
+Cohen
+cohere
+coherent
+cohesion
+cohesive
+Cohn
+cohomology
+cohort
+cohosh
+coiffure
+coil
+coin
+coinage
+coincide
+coincident
+coincidental
+coke
+col
+cola
+colander
+colatitude
+Colby
+cold
+coldhearted
+Cole
+Coleman
+Coleridge
+Colette
+coleus
+Colgate
+colic
+colicky
+coliform
+coliseum
+collaborate
+collage
+collagen
+collapse
+collapsible
+collar
+collarbone
+collard
+collate
+collateral
+colleague
+collect
+collectible
+collector
+college
+collegian
+collegiate
+collet
+collide
+collie
+Collier
+collimate
+collinear
+Collins
+collision
+collocate
+colloidal
+Colloq
+colloquia
+colloquial
+colloquium
+colloquy
+collude
+collusion
+cologne
+Colombia
+Colombo
+colon
+colonel
+colonial
+colonist
+colonnade
+colony
+Colorado
+colorate
+coloratura
+colorimeter
+colossal
+Colosseum
+colossi
+colossus
+colt
+coltish
+coltsfoot
+Columbia
+columbine
+Columbus
+column
+columnar
+colza
+coma
+Comanche
+comatose
+comb
+combat
+combatant
+combatted
+combinate
+combinatorial
+combinatoric
+combine
+combustible
+combustion
+come
+comeback
+comedian
+comedy
+comestible
+comet
+cometary
+cometh
+comfort
+comic
+Cominform
+comma
+command
+commandant
+commandeer
+commando
+commemorate
+commend
+commendation
+commendatory
+commensal
+commensurable
+commensurate
+comment
+commentary
+commentator
+commerce
+commercial
+commingle
+commiserate
+commissariat
+commissary
+commission
+commit
+committable
+committal
+committed
+committee
+committeeman
+committeemen
+committeewoman
+committeewomen
+committing
+commodious
+commodity
+commodore
+common
+commonality
+commonplace
+commonweal
+commonwealth
+commotion
+communal
+commune
+communicable
+communicant
+communicate
+communion
+communique
+commutate
+commute
+compact
+compactify
+Compagnie
+companion
+companionway
+company
+comparative
+comparator
+compare
+comparison
+compartment
+compass
+compassion
+compassionate
+compatible
+compatriot
+compel
+compellable
+compelled
+compelling
+compendia
+compendium
+compensable
+compensate
+compensatory
+compete
+competent
+competition
+competitive
+competitor
+compilation
+compile
+complacent
+complain
+complainant
+complaint
+complaisant
+complement
+complementarity
+complementary
+complementation
+complete
+completion
+complex
+complexion
+compliant
+complicate
+complicity
+compliment
+complimentary
+compline
+comply
+component
+componentry
+comport
+compose
+composite
+composition
+compositor
+compost
+composure
+compote
+compound
+comprehend
+comprehensible
+comprehension
+comprehensive
+compress
+compressible
+compression
+compressive
+compressor
+comprise
+compromise
+Compton
+comptroller
+compulsion
+compulsive
+compulsory
+compunction
+computation
+compute
+comrade
+con
+Conakry
+Conant
+concatenate
+concave
+conceal
+concede
+conceit
+conceive
+concentrate
+concentric
+concept
+conception
+conceptual
+concern
+concert
+concerti
+concertina
+concertmaster
+concerto
+concession
+concessionaire
+conch
+concierge
+conciliate
+conciliatory
+concise
+concision
+conclave
+conclude
+conclusion
+conclusive
+concoct
+concomitant
+concord
+concordant
+concourse
+concrete
+concretion
+concubine
+concur
+concurred
+concurrent
+concurring
+concussion
+condemn
+condemnate
+condemnatory
+condensate
+condense
+condensible
+condescend
+condescension
+condiment
+condition
+condolence
+condominium
+condone
+conduce
+conducive
+conduct
+conductance
+conductor
+conduit
+cone
+coneflower
+Conestoga
+coney
+confabulate
+confect
+confectionery
+confederacy
+confederate
+confer
+conferee
+conference
+conferrable
+conferred
+conferring
+confess
+confession
+confessor
+confidant
+confidante
+confide
+confident
+confidential
+configuration
+configure
+confine
+confirm
+confirmation
+confirmatory
+confiscable
+confiscate
+confiscatory
+conflagrate
+conflict
+confluent
+confocal
+conform
+conformal
+conformance
+conformation
+confound
+confrere
+confront
+confrontation
+Confucian
+Confucius
+confuse
+confusion
+confute
+congeal
+congener
+congenial
+congenital
+congest
+congestion
+congestive
+conglomerate
+Congo
+Congolese
+congratulate
+congratulatory
+congregate
+congress
+congressional
+congressman
+congressmen
+congresswoman
+congresswomen
+congruent
+conic
+conifer
+coniferous
+conjectural
+conjecture
+conjoin
+conjoint
+conjugacy
+conjugal
+conjugate
+conjunct
+conjuncture
+conjure
+Conklin
+Conley
+conn
+Connally
+connect
+Connecticut
+connector
+Conner
+Connie
+connivance
+connive
+connoisseur
+Connors
+connotation
+connotative
+connote
+connubial
+conquer
+conqueror
+conquest
+conquistador
+Conrad
+Conrail
+consanguine
+consanguineous
+conscience
+conscientious
+conscionable
+conscious
+conscript
+conscription
+consecrate
+consecutive
+consensus
+consent
+consequent
+consequential
+conservation
+conservatism
+conservative
+conservator
+conservatory
+conserve
+consider
+considerate
+consign
+consignee
+consignor
+consist
+consistent
+consolation
+console
+consolidate
+consonant
+consonantal
+consort
+consortium
+conspecific
+conspicuous
+conspiracy
+conspirator
+conspiratorial
+conspire
+constant
+Constantine
+Constantinople
+constellate
+consternate
+constipate
+constituent
+constitute
+constitution
+constitutive
+constrain
+constraint
+constrict
+constrictor
+construal
+construct
+constructible
+constructor
+construe
+consul
+consular
+consulate
+consult
+consultant
+consultation
+consultative
+consume
+consummate
+consumption
+consumptive
+contact
+contagion
+contagious
+contain
+contaminant
+contaminate
+contemplate
+contemporaneous
+contemporary
+contempt
+contemptible
+contemptuous
+contend
+content
+contention
+contentious
+contest
+contestant
+context
+contextual
+contiguity
+contiguous
+continent
+continental
+contingent
+continua
+continual
+continuant
+continuation
+continue
+continuity
+continuo
+continuous
+continuum
+contort
+contour
+contraband
+contrabass
+contraception
+contraceptive
+contract
+contractor
+contractual
+contradict
+contradictory
+contradistinct
+contradistinguish
+contraindicate
+contralateral
+contralto
+contrapositive
+contraption
+contrariety
+contrary
+contrast
+contravariant
+contravene
+contravention
+contretemps
+contribute
+contribution
+contributor
+contributory
+contrite
+contrition
+contrivance
+contrive
+control
+controllable
+controlled
+controller
+controlling
+controversial
+controversy
+controvertible
+contumacy
+contusion
+conundrum
+Convair
+convalesce
+convalescent
+convect
+convene
+convenient
+convent
+convention
+converge
+convergent
+conversant
+conversation
+converse
+conversion
+convert
+convertible
+convex
+convey
+conveyance
+conveyor
+convict
+convince
+convivial
+convocate
+convoke
+convolute
+convolution
+convolve
+convoy
+convulse
+convulsion
+convulsive
+Conway
+cony
+coo
+cook
+cookbook
+Cooke
+cookery
+cookie
+cooky
+cool
+coolant
+Cooley
+coolheaded
+Coolidge
+coon
+coop
+cooperate
+coordinate
+Coors
+coot
+cop
+cope
+Copeland
+Copenhagen
+Copernican
+Copernicus
+copious
+coplanar
+copolymer
+copperas
+Copperfield
+copperhead
+coppery
+copra
+coprinus
+coprocessor
+coproduct
+copter
+copulate
+copy
+copybook
+copyright
+copywriter
+coquette
+coquina
+coral
+coralberry
+coralline
+corbel
+Corbett
+Corcoran
+cord
+cordage
+cordial
+cordite
+cordon
+corduroy
+core
+Corey
+coriander
+Corinth
+Corinthian
+Coriolanus
+cork
+corkscrew
+cormorant
+corn
+cornbread
+cornea
+Cornelia
+Cornelius
+Cornell
+cornerstone
+cornet
+cornfield
+cornflower
+cornish
+cornmeal
+cornstarch
+cornucopia
+Cornwall
+corny
+corolla
+corollary
+corona
+Coronado
+coronary
+coronate
+coroner
+coronet
+coroutine
+Corp
+corpora
+corporal
+corporate
+corporeal
+corps
+corpse
+corpsman
+corpsmen
+corpulent
+corpus
+corpuscle
+corpuscular
+corral
+corralled
+correct
+corrector
+correlate
+correspond
+correspondent
+corridor
+corrigenda
+corrigendum
+corrigible
+corroborate
+corroboree
+corrode
+corrodible
+corrosion
+corrosive
+corrugate
+corrupt
+corruptible
+corruption
+corsage
+corset
+Corsica
+cortege
+cortex
+Cortez
+cortical
+Cortland
+corundum
+coruscate
+Corvallis
+corvette
+Corvus
+cos
+cosec
+coset
+Cosgrove
+cosh
+cosine
+cosmetic
+cosmic
+cosmology
+cosmopolitan
+cosmos
+cosponsor
+Cossack
+cost
+Costa
+Costello
+costume
+cosy
+cot
+cotangent
+coterie
+cotillion
+cotman
+cotoneaster
+cotta
+cottage
+cotton
+cottonmouth
+cottonseed
+cottontail
+cottonwood
+cottony
+Cottrell
+cotty
+cotyledon
+couch
+cougar
+cough
+could
+couldn't
+coulomb
+Coulter
+council
+councilman
+councilmen
+councilwoman
+councilwomen
+counsel
+counselor
+count
+countdown
+countenance
+counteract
+counterargument
+counterattack
+counterbalance
+counterclockwise
+counterexample
+counterfeit
+counterflow
+counterintuitive
+counterman
+countermand
+countermeasure
+countermen
+counterpart
+counterpoint
+counterpoise
+counterproductive
+counterproposal
+counterrevolution
+counterrevolutionary
+countersink
+countersunk
+counterthreat
+countervail
+counterweight
+countrify
+country
+countryman
+countrymen
+countryside
+countrywide
+county
+countywide
+coup
+coupe
+couple
+couplet
+coupon
+courage
+courageous
+courier
+course
+court
+courteous
+courtesan
+courtesy
+courthouse
+courtier
+Courtney
+courtroom
+courtyard
+couscous
+cousin
+couturier
+covalent
+covariant
+covariate
+covary
+cove
+coven
+covenant
+Coventry
+cover
+coverage
+coverall
+coverlet
+covert
+covet
+covetous
+cow
+Cowan
+coward
+cowardice
+cowbell
+cowbird
+cowboy
+cowhand
+cowherd
+cowhide
+cowl
+cowlick
+cowman
+cowmen
+coworker
+cowpea
+cowpoke
+cowpony
+cowpox
+cowpunch
+cowry
+cowslip
+cox
+coxcomb
+coy
+coyly
+coyote
+coypu
+cozen
+cozy
+CPA
+cpu
+crab
+crabapple
+crack
+crackle
+crackpot
+cradle
+craft
+craftsman
+craftsmen
+craftspeople
+craftsperson
+crafty
+crag
+craggy
+Craig
+cram
+Cramer
+cramp
+crampon
+cranberry
+Crandall
+crane
+Cranford
+crania
+cranium
+crank
+crankcase
+crankshaft
+cranky
+cranny
+Cranston
+crap
+crappie
+crash
+crass
+crate
+crater
+cravat
+crave
+craven
+craw
+Crawford
+crawl
+crawlspace
+crayfish
+crayon
+craze
+crazy
+creak
+creaky
+cream
+creamery
+creamy
+crease
+create
+creature
+creche
+credent
+credential
+credenza
+credible
+credit
+creditor
+credo
+credulity
+credulous
+creed
+creedal
+creek
+creekside
+creep
+creepy
+cremate
+crematory
+Creole
+Creon
+creosote
+crepe
+crept
+crescendo
+crescent
+cress
+crest
+crestfallen
+Crestview
+Cretaceous
+Cretan
+Crete
+cretin
+cretinous
+crevice
+crew
+crewcut
+crewel
+crewman
+crewmen
+crib
+cribbage
+cricket
+crime
+Crimea
+criminal
+crimp
+crimson
+cringe
+crinkle
+crinoid
+cripple
+crises
+crisis
+crisp
+Crispin
+criss
+crisscross
+criteria
+criterion
+critic
+critique
+critter
+croak
+Croatia
+crochet
+crock
+crockery
+Crockett
+crocodile
+crocodilian
+crocus
+croft
+Croix
+Cromwell
+Cromwellian
+crone
+crony
+crook
+croon
+crop
+cropland
+crore
+Crosby
+cross
+crossarm
+crossbar
+crossbill
+crosscut
+crosshatch
+crosslink
+crossover
+crosspoint
+crossroad
+crosstalk
+crosswalk
+crossway
+crosswise
+crossword
+crosswort
+crotch
+crotchety
+crouch
+croupier
+crow
+crowbait
+crowbar
+crowberry
+crowd
+crowfoot
+Crowley
+crown
+croydon
+CRT
+crucial
+crucible
+crucifix
+crucifixion
+crucify
+crud
+cruddy
+crude
+cruel
+cruelty
+Cruickshank
+cruise
+crumb
+crumble
+crummy
+crump
+crumple
+crunch
+crunchy
+crupper
+crusade
+crush
+Crusoe
+crust
+crustacean
+crusty
+crutch
+crux
+Cruz
+cry
+cryogenic
+cryostat
+crypt
+cryptanalysis
+cryptanalyst
+cryptanalytic
+cryptic
+crypto
+cryptogram
+cryptographer
+cryptography
+crystal
+crystalline
+crystallite
+crystallographer
+crystallography
+c's
+csnet
+CT
+cub
+Cuba
+cubby
+cubbyhole
+cube
+cubic
+cubicle
+cubit
+cuckoo
+cucumber
+cud
+cuddle
+cuddly
+cudgel
+cue
+cuff
+cufflink
+cuisine
+Culbertson
+culinary
+cull
+culminate
+culpa
+culpable
+culprit
+cult
+cultivable
+cultivar
+cultivate
+cultural
+culture
+Culver
+culvert
+Cumberland
+cumbersome
+cumin
+Cummings
+Cummins
+cumulate
+cumulus
+Cunard
+cuneiform
+cunning
+Cunningham
+CUNY
+cup
+cupboard
+cupful
+Cupid
+cupidity
+cupric
+cuprous
+cur
+curate
+curb
+curbside
+curd
+curdle
+cure
+curfew
+curia
+curie
+curio
+curiosity
+curious
+curium
+curl
+curlew
+curlicue
+curmudgeon
+Curran
+currant
+current
+curricula
+curricular
+curriculum
+curry
+curse
+cursive
+cursor
+cursory
+curt
+curtail
+curtain
+Curtis
+curtsey
+curvaceous
+curvature
+curve
+curvilinear
+Cushing
+cushion
+Cushman
+cusp
+Custer
+custodial
+custodian
+custody
+custom
+customary
+customhouse
+cut
+cutaneous
+cutback
+cute
+cutlass
+cutler
+cutlet
+cutoff
+cutout
+cutover
+cutset
+cutthroat
+cuttlebone
+cuttlefish
+cutworm
+Cuvier
+Cuzco
+Cyanamid
+cyanate
+cyanic
+cyanide
+cybernetic
+cycad
+Cyclades
+cycle
+cyclic
+cyclist
+cyclone
+cyclopean
+Cyclops
+cyclorama
+cyclotomic
+cyclotron
+cygnet
+Cygnus
+cylinder
+cylindric
+cymbal
+cynic
+Cynthia
+cypress
+Cyprian
+Cypriot
+Cyprus
+Cyril
+Cyrillic
+Cyrus
+cyst
+cysteine
+cytochemistry
+cytolysis
+cytoplasm
+cytosine
+CZ
+czar
+czarina
+Czech
+Czechoslovakia
+Czerniak
+d
+dab
+dabble
+Dacca
+dachshund
+dactyl
+dactylic
+dad
+Dada
+daddy
+Dade
+Daedalus
+daemon
+daffodil
+daffy
+dagger
+daguerreotype
+Dahl
+dahlia
+Dahomey
+Dailey
+Daimler
+dainty
+dairy
+Dairylea
+dairyman
+dairymen
+dais
+daisy
+Dakar
+Dakota
+dal
+dale
+Daley
+Dalhousie
+Dallas
+dally
+Dalton
+Daly
+Dalzell
+dam
+damage
+Damascus
+damask
+dame
+damn
+damnation
+Damocles
+Damon
+damp
+dampen
+damsel
+damselfly
+Dan
+Dana
+Danbury
+dance
+dandelion
+dandy
+Dane
+dang
+danger
+dangerous
+dangle
+Daniel
+Danielson
+Danish
+dank
+Danny
+Dante
+Danube
+Danubian
+Danzig
+Daphne
+dapper
+dapple
+Dar
+dare
+Darius
+dark
+darken
+darkle
+Darlene
+darling
+darn
+DARPA
+Darrell
+Darry
+d'art
+dart
+Dartmouth
+Darwin
+Darwinian
+dash
+dashboard
+dastard
+data
+database
+date
+dateline
+dater
+Datsun
+datum
+datura
+daub
+Daugherty
+daughter
+daunt
+dauphin
+dauphine
+Dave
+davenport
+David
+Davidson
+Davies
+Davis
+Davison
+davit
+Davy
+dawdle
+dawn
+Dawson
+day
+daybed
+daybreak
+daydream
+daylight
+daytime
+Dayton
+Daytona
+daze
+dazzle
+DC
+de
+deacon
+deaconess
+deactivate
+dead
+deaden
+deadhead
+deadline
+deadlock
+deadwood
+deaf
+deafen
+deal
+deallocate
+dealt
+dean
+Deane
+Deanna
+dear
+Dearborn
+dearie
+dearth
+death
+deathbed
+deathward
+debacle
+debar
+debarring
+debase
+debate
+debater
+debauch
+debauchery
+Debbie
+Debby
+debenture
+debilitate
+debility
+debit
+debonair
+Deborah
+Debra
+debrief
+debris
+debt
+debtor
+debug
+debugged
+debugger
+debugging
+debunk
+Debussy
+debut
+debutante
+Dec
+decade
+decadent
+decal
+decant
+decapitate
+decapod
+decathlon
+Decatur
+decay
+Decca
+decease
+decedent
+deceit
+deceitful
+deceive
+decelerate
+December
+decennial
+decent
+deception
+deceptive
+decertify
+decibel
+decide
+deciduous
+decile
+decimal
+decimate
+decipher
+decision
+decisive
+deck
+declaim
+declamation
+declamatory
+declaration
+declarative
+declarator
+declaratory
+declare
+declassify
+declination
+decline
+declivity
+decode
+decolletage
+decollimate
+decompile
+decomposable
+decompose
+decomposition
+decompress
+decompression
+decontrol
+decontrolled
+decontrolling
+deconvolution
+deconvolve
+decor
+decorate
+decorous
+decorticate
+decorum
+decouple
+decoy
+decrease
+decree
+decreeing
+decrement
+decry
+decrypt
+decryption
+dedicate
+deduce
+deducible
+deduct
+deductible
+Dee
+deed
+deem
+deep
+deepen
+deer
+Deere
+deerskin
+deerstalker
+deface
+default
+defeat
+defecate
+defect
+defector
+defend
+defendant
+defensible
+defensive
+defer
+deferent
+deferrable
+deferred
+deferring
+defiant
+deficient
+deficit
+define
+definite
+definition
+definitive
+deflate
+deflater
+deflect
+deflector
+defocus
+defoliate
+deforest
+deforestation
+deform
+deformation
+defraud
+defray
+defrost
+deft
+defunct
+defy
+degas
+degassing
+degeneracy
+degenerate
+degradation
+degrade
+degrease
+degree
+degum
+degumming
+dehumidify
+dehydrate
+deify
+deign
+Deimos
+Deirdre
+deity
+deja
+deject
+Del
+Delaney
+Delano
+Delaware
+delay
+delectable
+delectate
+delegable
+delegate
+delete
+deleterious
+deletion
+Delft
+Delhi
+Delia
+deliberate
+delicacy
+delicate
+delicatessen
+delicious
+delicti
+delight
+delightful
+Delilah
+delimit
+delimitation
+delineament
+delineate
+delinquent
+deliquesce
+deliquescent
+delirious
+delirium
+deliver
+deliverance
+delivery
+deliveryman
+deliverymen
+dell
+Della
+Delmarva
+delouse
+Delphi
+Delphic
+delphine
+delphinium
+Delphinus
+delta
+deltoid
+delude
+deluge
+delusion
+delusive
+deluxe
+delve
+demagnify
+demagogue
+demand
+demarcate
+demark
+demean
+demented
+dementia
+demerit
+Demeter
+demi
+demigod
+demijohn
+demiscible
+demise
+demit
+demitted
+demitting
+democracy
+democrat
+democratic
+demodulate
+demographer
+demography
+demolish
+demolition
+demon
+demoniac
+demonic
+demonstrable
+demonstrate
+demote
+demountable
+Dempsey
+demultiplex
+demur
+demure
+demurred
+demurrer
+demurring
+demystify
+den
+denature
+dendrite
+dendritic
+Deneb
+Denebola
+deniable
+denial
+denigrate
+denizen
+Denmark
+Dennis
+Denny
+denominate
+denotation
+denotative
+denote
+denouement
+denounce
+dense
+densitometer
+dent
+dental
+dentistry
+dentition
+Denton
+denture
+denudation
+denude
+denumerable
+denunciate
+Denver
+deny
+deodorant
+deoxyribonucleic
+deoxyribose
+depart
+departure
+depend
+dependent
+depict
+deplane
+deplete
+depletion
+deplore
+deploy
+deport
+deportation
+deportee
+depose
+deposit
+depositary
+deposition
+depositor
+depository
+depot
+deprave
+deprecate
+deprecatory
+depreciable
+depreciate
+depredation
+depress
+depressant
+depressible
+depression
+depressive
+depressor
+deprivation
+deprive
+depth
+deputation
+depute
+deputy
+derail
+derange
+derate
+derby
+Derbyshire
+dereference
+deregulate
+Derek
+derelict
+deride
+derision
+derisive
+derivate
+derive
+dermatology
+derogate
+derogatory
+derrick
+derriere
+dervish
+Des
+descant
+Descartes
+descend
+descendant
+descendent
+descent
+describe
+description
+descriptive
+descriptor
+desecrate
+desecrater
+desegregate
+desert
+deserve
+desiccant
+desiccate
+desiderata
+desideratum
+design
+designate
+desire
+desirous
+desist
+desk
+Desmond
+desolate
+desolater
+desorption
+despair
+desperado
+desperate
+despicable
+despise
+despite
+despoil
+despond
+despondent
+despot
+despotic
+dessert
+destinate
+destine
+destiny
+destitute
+destroy
+destruct
+destructor
+desuetude
+desultory
+detach
+detail
+detain
+d'etat
+detect
+detector
+detent
+detente
+detention
+deter
+detergent
+deteriorate
+determinacy
+determinant
+determinate
+determine
+deterred
+deterrent
+deterring
+detest
+detestation
+detonable
+detonate
+detour
+detoxify
+detract
+detractor
+detriment
+detritus
+Detroit
+deuce
+deus
+deuterate
+deuterium
+deuteron
+devastate
+develop
+deviant
+deviate
+device
+devil
+devilish
+devious
+devise
+devisee
+devoid
+devolve
+Devon
+Devonshire
+devote
+devotee
+devotion
+devour
+devout
+dew
+dewar
+dewdrop
+Dewey
+Dewitt
+dewy
+dexter
+dexterity
+dextrose
+dextrous
+dey
+Dhabi
+dharma
+diabase
+diabetes
+diabetic
+diabolic
+diachronic
+diacritic
+diadem
+diagnosable
+diagnose
+diagnosis
+diagnostic
+diagnostician
+diagonal
+diagram
+diagrammatic
+diagrammed
+diagramming
+dial
+dialect
+dialectic
+dialogue
+dialup
+dialysis
+diamagnetic
+diamagnetism
+diameter
+diamond
+Diana
+Diane
+Dianne
+diaper
+diaphanous
+diaphragm
+diary
+diathermy
+diathesis
+diatom
+diatomaceous
+diatomic
+diatonic
+diatribe
+dibble
+dice
+dichloride
+dichondra
+dichotomy
+dick
+dickcissel
+dickens
+Dickerson
+dickey
+Dickinson
+Dickson
+dicotyledon
+dicta
+dictate
+dictatorial
+diction
+dictionary
+dictum
+did
+didactic
+diddle
+didn't
+Dido
+die
+Diebold
+Diego
+diehard
+dieldrin
+dielectric
+diem
+dieresis
+diesel
+diet
+dietary
+dietetic
+diethylstilbestrol
+dietician
+Dietrich
+diety
+Dietz
+diffeomorphic
+diffeomorphism
+differ
+different
+differentiable
+differential
+differentiate
+difficult
+difficulty
+diffident
+diffract
+diffractometer
+diffuse
+diffusible
+diffusion
+diffusive
+difluoride
+dig
+digamma
+digest
+digestible
+digestion
+digestive
+digging
+digit
+digital
+digitalis
+dignify
+dignitary
+dignity
+digram
+digress
+digression
+dihedral
+dilapidate
+dilatation
+dilate
+dilatory
+dilemma
+dilettante
+diligent
+dill
+Dillon
+dilogarithm
+diluent
+dilute
+dilution
+dim
+dime
+dimension
+dimethyl
+diminish
+diminuendo
+diminution
+diminutive
+dimorphic
+dimorphism
+dimple
+din
+Dinah
+dine
+ding
+dinghy
+dingo
+dingy
+dinnertime
+dinnerware
+dinosaur
+dint
+diocesan
+diocese
+Diocletian
+diode
+Diogenes
+Dionysian
+Dionysus
+Diophantine
+diopter
+diorama
+diorite
+dioxide
+dip
+diphtheria
+diphthong
+diploid
+diploidy
+diploma
+diplomacy
+diplomat
+diplomatic
+dipole
+Dirac
+dire
+direct
+director
+directorate
+directory
+directrices
+directrix
+dirge
+Dirichlet
+dirt
+dirty
+Dis
+disaccharide
+disambiguate
+disastrous
+disburse
+disc
+discern
+discernible
+disciple
+disciplinary
+discipline
+discoid
+discomfit
+discordant
+discovery
+discreet
+discrepant
+discrete
+discretion
+discretionary
+discriminable
+discriminant
+discriminate
+discriminatory
+discus
+discuss
+discussant
+discussion
+disdain
+disdainful
+disembowel
+disgruntle
+disgustful
+dish
+dishevel
+dishwasher
+dishwater
+disjunct
+disk
+dismal
+dismissal
+Disney
+Disneyland
+disparage
+disparate
+dispel
+dispelled
+dispelling
+dispensable
+dispensary
+dispensate
+dispense
+dispersal
+disperse
+dispersible
+dispersion
+dispersive
+disposable
+disposal
+disputant
+dispute
+disquietude
+disquisition
+disrupt
+disruption
+disruptive
+dissemble
+disseminate
+dissension
+dissertation
+dissident
+dissipate
+dissociate
+dissuade
+distaff
+distal
+distant
+distillate
+distillery
+distinct
+distinguish
+distort
+distraught
+distribution
+distributive
+distributor
+district
+disturb
+disturbance
+disulfide
+disyllable
+ditch
+dither
+ditto
+ditty
+diurnal
+diva
+divalent
+divan
+dive
+diverge
+divergent
+diverse
+diversify
+diversion
+diversionary
+divert
+divest
+divestiture
+divide
+dividend
+divination
+divine
+divisible
+division
+divisive
+divisor
+divorce
+divorcee
+divulge
+Dixie
+dixieland
+Dixon
+dizzy
+Djakarta
+DNA
+Dnieper
+do
+Dobbin
+Dobbs
+doberman
+dobson
+docile
+dock
+docket
+dockside
+dockyard
+doctor
+doctoral
+doctorate
+doctrinaire
+doctrinal
+doctrine
+document
+documentary
+documentation
+DOD
+Dodd
+doddering
+dodecahedra
+dodecahedral
+dodecahedron
+dodge
+dodo
+Dodson
+doe
+doesn't
+d'oeuvre
+doff
+dog
+dogbane
+dogberry
+Doge
+dogfish
+dogging
+doggone
+doghouse
+dogleg
+dogma
+dogmatic
+dogmatism
+dogmatist
+dogtooth
+dogtrot
+dogwood
+Doherty
+Dolan
+dolce
+doldrum
+dole
+doleful
+doll
+dollar
+dollop
+dolly
+dolomite
+dolomitic
+Dolores
+dolphin
+dolt
+doltish
+domain
+dome
+Domenico
+Domesday
+domestic
+domesticate
+domicile
+dominant
+dominate
+domineer
+Domingo
+Dominic
+Dominican
+Dominick
+dominion
+Dominique
+domino
+don
+Donahue
+Donald
+Donaldson
+donate
+done
+Doneck
+donkey
+Donna
+Donnelly
+Donner
+donnybrook
+donor
+Donovan
+don't
+doodle
+Dooley
+Doolittle
+doom
+doomsday
+door
+doorbell
+doorkeep
+doorkeeper
+doorknob
+doorman
+doormen
+doorstep
+doorway
+dopant
+dope
+Doppler
+Dora
+Dorado
+Dorcas
+Dorchester
+Doreen
+Doria
+Doric
+Doris
+dormant
+dormitory
+dormouse
+Dorothea
+Dorothy
+dorsal
+Dorset
+Dortmund
+dosage
+dose
+dosimeter
+dossier
+Dostoevsky
+dot
+dote
+double
+Doubleday
+doubleheader
+doublet
+doubleton
+doubloon
+doubt
+doubtful
+douce
+Doug
+dough
+Dougherty
+doughnut
+Douglas
+Douglass
+dour
+douse
+dove
+dovekie
+dovetail
+Dow
+dowager
+dowel
+dowitcher
+Dowling
+down
+downbeat
+downcast
+downdraft
+Downey
+downfall
+downgrade
+downhill
+downplay
+downpour
+downright
+downside
+downslope
+downspout
+downstairs
+downstream
+downtown
+downtrend
+downtrodden
+downturn
+downward
+downwind
+downy
+dowry
+Doyle
+doze
+dozen
+Dr
+drab
+drably
+Draco
+Draconian
+draft
+draftee
+draftsman
+draftsmen
+draftsperson
+drafty
+drag
+dragging
+dragnet
+dragon
+dragonfly
+dragonhead
+dragoon
+drain
+drainage
+drake
+dram
+drama
+dramatic
+dramatist
+dramaturgy
+drank
+drape
+drapery
+drastic
+draught
+Dravidian
+draw
+drawback
+drawbridge
+drawl
+drawn
+drawstring
+drayman
+dread
+dreadful
+dreadnought
+dream
+dreamboat
+dreamt
+dreamy
+dreary
+dredge
+dreg
+drench
+dress
+dressmake
+dressy
+drew
+Drexel
+Dreyfuss
+drib
+dribble
+drift
+driftwood
+drill
+drink
+drip
+drippy
+Driscoll
+drive
+driven
+driveway
+drizzle
+drizzly
+droll
+dromedary
+drone
+drool
+droop
+droopy
+drop
+drophead
+droplet
+dropout
+drosophila
+dross
+drought
+drove
+drown
+drowse
+drowsy
+drub
+drudge
+drudgery
+drug
+drugging
+drugstore
+druid
+drum
+drumhead
+drumlin
+Drummond
+drunk
+drunkard
+drunken
+drupe
+Drury
+dry
+dryad
+Dryden
+d's
+du
+dual
+Duane
+dub
+Dubhe
+dubious
+dubitable
+Dublin
+ducat
+duchess
+duck
+duckbilled
+duckling
+duckweed
+duct
+ductile
+ductwork
+dud
+Dudley
+due
+duel
+duet
+duff
+duffel
+Duffy
+dug
+Dugan
+dugong
+dugout
+duke
+dulcet
+dull
+dully
+dulse
+Duluth
+duly
+Duma
+dumb
+dumbbell
+dumbly
+dummy
+dump
+dumpling
+dumpster
+Dumpty
+dumpy
+dun
+Dunbar
+Duncan
+dunce
+dune
+Dunedin
+dung
+dungeon
+Dunham
+dunk
+Dunkirk
+Dunlap
+Dunlop
+Dunn
+duodenal
+duodenum
+duopolist
+duopoly
+dupe
+duplex
+duplicable
+duplicate
+duplicity
+DuPont
+Duquesne
+durable
+durance
+Durango
+duration
+Durer
+duress
+Durham
+during
+Durkee
+Durkin
+Durrell
+Durward
+Dusenberg
+Dusenbury
+dusk
+dusky
+Dusseldorf
+dust
+dustbin
+dusty
+Dutch
+dutchess
+Dutchman
+Dutchmen
+dutiable
+dutiful
+Dutton
+duty
+dwarf
+dwarves
+dwell
+dwelt
+Dwight
+dwindle
+Dwyer
+dyad
+dyadic
+dye
+dyeing
+dyestuff
+dying
+Dyke
+Dylan
+dynamic
+dynamism
+dynamite
+dynamo
+dynast
+dynastic
+dynasty
+dyne
+dysentery
+dyspeptic
+dysplasia
+dysprosium
+dystrophy
+e
+each
+Eagan
+eager
+eagle
+ear
+eardrum
+earl
+earmark
+earn
+earnest
+earphone
+earring
+earshot
+earsplitting
+earth
+earthen
+earthenware
+Earthman
+Earthmen
+earthmover
+earthmoving
+earthquake
+earthworm
+earthy
+earwig
+ease
+easel
+east
+eastbound
+eastern
+easternmost
+Eastland
+Eastman
+eastward
+Eastwood
+easy
+easygoing
+eat
+eaten
+eater
+Eaton
+eave
+eavesdrop
+eavesdropping
+ebb
+Eben
+ebony
+ebullient
+eccentric
+Eccles
+ecclesiastic
+echelon
+echidna
+echinoderm
+echo
+echoes
+echolocation
+eclat
+eclectic
+eclipse
+ecliptic
+eclogue
+Ecole
+ecology
+econometric
+economic
+economist
+economy
+ecosystem
+ecstasy
+ecstatic
+ectoderm
+ectopic
+Ecuador
+ecumenic
+ecumenist
+Ed
+Eddie
+eddy
+edelweiss
+edematous
+Eden
+Edgar
+edge
+Edgerton
+edgewise
+edgy
+edible
+edict
+edifice
+edify
+Edinburgh
+Edison
+edit
+Edith
+edition
+editor
+editorial
+Edmonds
+Edmondson
+Edmonton
+Edmund
+Edna
+EDT
+Eduardo
+educable
+educate
+Edward
+Edwardian
+Edwardine
+Edwin
+Edwina
+eel
+eelgrass
+EEOC
+e'er
+eerie
+eerily
+efface
+effaceable
+effect
+effectual
+effectuate
+effeminate
+efferent
+effete
+efficacious
+efficacy
+efficient
+Effie
+effloresce
+efflorescent
+effluent
+effluvia
+effluvium
+effort
+effusion
+effusive
+eft
+e.g
+egalitarian
+Egan
+egg
+egghead
+eggplant
+eggshell
+ego
+egocentric
+egotism
+egotist
+egregious
+egress
+egret
+Egypt
+Egyptian
+Egyptology
+eh
+Ehrlich
+eider
+eidetic
+eigenfunction
+eigenspace
+eigenstate
+eigenvalue
+eigenvector
+eight
+eighteen
+eighteenth
+eightfold
+eighth
+eightieth
+eighty
+eightyfold
+Eileen
+Einstein
+Einsteinian
+einsteinium
+Eire
+Eisenhower
+Eisner
+either
+ejaculate
+eject
+ejector
+eke
+Ekstrom
+Ektachrome
+el
+elaborate
+Elaine
+elan
+elapse
+elastic
+elastomer
+elate
+Elba
+elbow
+elder
+eldest
+Eldon
+Eleanor
+Eleazar
+elect
+elector
+electoral
+electorate
+Electra
+electress
+electret
+electric
+electrician
+electrify
+electro
+electrocardiogram
+electrocardiograph
+electrode
+electroencephalogram
+electroencephalograph
+electroencephalography
+electrolysis
+electrolyte
+electrolytic
+electron
+electronic
+electrophoresis
+electrophorus
+elegant
+elegiac
+elegy
+element
+elementary
+Elena
+elephant
+elephantine
+elevate
+eleven
+elevenfold
+eleventh
+elfin
+Elgin
+Eli
+elicit
+elide
+eligible
+Elijah
+eliminable
+eliminate
+Elinor
+Eliot
+Elisabeth
+Elisha
+elision
+elite
+Elizabeth
+Elizabethan
+elk
+Elkhart
+ell
+Ella
+Ellen
+Elliot
+Elliott
+ellipse
+ellipsis
+ellipsoid
+ellipsoidal
+ellipsometer
+elliptic
+Ellis
+Ellison
+Ellsworth
+Ellwood
+elm
+Elmer
+Elmhurst
+Elmira
+Elmsford
+Eloise
+elongate
+elope
+eloquent
+else
+Elsevier
+elsewhere
+Elsie
+Elsinore
+Elton
+eluate
+elucidate
+elude
+elusive
+elute
+elution
+elver
+elves
+Ely
+Elysee
+elysian
+em
+emaciate
+emacs
+emanate
+emancipate
+Emanuel
+emasculate
+embalm
+embank
+embarcadero
+embargo
+embargoes
+embark
+embarrass
+embassy
+embattle
+embed
+embeddable
+embedded
+embedder
+embedding
+embellish
+ember
+embezzle
+embitter
+emblazon
+emblem
+emblematic
+embodiment
+embody
+embolden
+emboss
+embouchure
+embower
+embrace
+embraceable
+embrittle
+embroider
+embroidery
+embroil
+embryo
+embryology
+embryonic
+emcee
+emendable
+emerald
+emerge
+emergent
+emeriti
+emeritus
+Emerson
+Emery
+emetic
+emigrant
+emigrate
+emigre
+emigree
+Emil
+Emile
+Emilio
+Emily
+eminent
+emirate
+emissary
+emission
+emissive
+emit
+emittance
+emitted
+emitter
+emitting
+emma
+Emmanuel
+Emmett
+emolument
+Emory
+emotion
+empathic
+empathy
+emperor
+emphases
+emphasis
+emphatic
+emphysema
+emphysematous
+empire
+empiric
+emplace
+employ
+employee
+emporium
+empower
+empress
+empty
+emptyhanded
+emulate
+emulsify
+emulsion
+en
+enamel
+encapsulate
+encephalitis
+enchantress
+enclave
+encomia
+encomium
+encore
+encroach
+encryption
+encumber
+encumbrance
+encyclopedic
+end
+endemic
+endgame
+Endicott
+endoderm
+endogamous
+endogamy
+endogenous
+endometrial
+endometriosis
+endomorphism
+endorse
+endosperm
+endothelial
+endothermic
+endow
+endpoint
+endure
+enemy
+energetic
+energy
+enervate
+enfant
+enforceable
+enforcible
+Eng
+engage
+Engel
+engine
+engineer
+England
+Englander
+Engle
+Englewood
+English
+Englishman
+Englishmen
+enhance
+Enid
+enigma
+enigmatic
+enjoinder
+enlargeable
+enmity
+Enoch
+enol
+enormity
+enormous
+Enos
+enough
+enquire
+enquiry
+Enrico
+enrollee
+ensconce
+ensemble
+enstatite
+entendre
+enter
+enterprise
+entertain
+enthalpy
+enthusiasm
+enthusiast
+enthusiastic
+entice
+entire
+entirety
+entity
+entomology
+entourage
+entranceway
+entrant
+entrepreneur
+entrepreneurial
+entropy
+entry
+enumerable
+enumerate
+enunciable
+enunciate
+envelop
+envelope
+enviable
+envious
+environ
+envoy
+envy
+enzymatic
+enzyme
+enzymology
+Eocene
+eohippus
+eosine
+EPA
+epaulet
+ephemeral
+ephemerides
+ephemeris
+Ephesian
+Ephesus
+Ephraim
+epic
+epicure
+Epicurean
+epicycle
+epicyclic
+epidemic
+epidemiology
+epidermic
+epidermis
+epigenetic
+epigram
+epigrammatic
+epigraph
+epilepsy
+epileptic
+epilogue
+epimorphism
+Epiphany
+epiphany
+epiphyseal
+epiphysis
+epiphyte
+epiphytic
+episcopal
+Episcopalian
+episcopate
+episode
+episodic
+epistemology
+epistle
+epistolatory
+epitaph
+epitaxial
+epitaxy
+epithelial
+epithelium
+epithet
+epitome
+epoch
+epochal
+eponymous
+epoxy
+epsilon
+Epsom
+Epstein
+equable
+equal
+equanimity
+equate
+equatorial
+equestrian
+equidistant
+equilateral
+equilibrate
+equilibria
+equilibrium
+equine
+equinoctial
+equinox
+equip
+equipoise
+equipotent
+equipped
+equipping
+equitable
+equitation
+equity
+equivalent
+equivocal
+equivocate
+era
+eradicable
+eradicate
+erasable
+erase
+Erasmus
+Erastus
+erasure
+Erato
+Eratosthenes
+erbium
+ERDA
+ere
+erect
+erg
+ergative
+ergodic
+Eric
+Erich
+Erickson
+Ericsson
+Erie
+Erik
+Erlenmeyer
+ermine
+Ernest
+Ernestine
+Ernie
+Ernst
+erode
+erodible
+Eros
+erosible
+erosion
+erosive
+erotic
+erotica
+err
+errand
+errant
+errantry
+errata
+erratic
+erratum
+Errol
+erroneous
+error
+ersatz
+Erskine
+erudite
+erudition
+erupt
+eruption
+Ervin
+Erwin
+e's
+escadrille
+escalate
+escapade
+escape
+escapee
+escarpment
+escheat
+Escherichia
+eschew
+escort
+escritoire
+escrow
+escutcheon
+Eskimo
+Esmark
+esophagi
+esoteric
+especial
+espionage
+esplanade
+Esposito
+espousal
+espouse
+esprit
+esquire
+essay
+Essen
+essence
+essential
+Essex
+EST
+establish
+estate
+esteem
+Estella
+ester
+Estes
+Esther
+estimable
+estimate
+Estonia
+estop
+estoppal
+estrange
+estrogen
+estrous
+estrus
+estuarine
+estuary
+et
+eta
+etc
+etch
+eternal
+eternity
+Ethan
+ethane
+ethanol
+Ethel
+ether
+ethereal
+ethernet
+ethic
+Ethiopia
+ethnic
+ethnography
+ethnology
+ethnomusicology
+ethology
+ethos
+ethyl
+ethylene
+etiology
+etiquette
+Etruria
+Etruscan
+etude
+etymology
+eucalyptus
+Eucharist
+Euclid
+Euclidean
+eucre
+Eugene
+Eugenia
+eugenic
+euglena
+eukaryote
+eukaryotic
+Euler
+Eulerian
+eulogy
+Eumenides
+Eunice
+euphemism
+euphemist
+euphonious
+euphony
+euphorbia
+euphoria
+euphoric
+Euphrates
+Eurasia
+eureka
+Euridyce
+Euripides
+Europa
+Europe
+European
+europium
+Eurydice
+eutectic
+Euterpe
+euthanasia
+eutrophication
+Eva
+evacuate
+evade
+evaluable
+evaluate
+evanescent
+evangel
+evangelic
+Evans
+Evanston
+Evansville
+evaporate
+evasion
+evasive
+eve
+Evelyn
+even
+evenhanded
+evensong
+event
+eventful
+eventide
+eventual
+eventuate
+Eveready
+Everett
+Everglade
+evergreen
+Everhart
+everlasting
+every
+everybody
+everyday
+everyman
+everyone
+everything
+everywhere
+evict
+evident
+evidential
+evil
+evildoer
+evince
+eviscerate
+evocable
+evocate
+evoke
+evolution
+evolutionary
+evolve
+evzone
+ewe
+ex
+exacerbate
+exact
+exactitude
+exaggerate
+exalt
+exaltation
+exam
+examination
+examine
+example
+exasperate
+exasperater
+excavate
+exceed
+excel
+excelled
+excellent
+excelling
+excelsior
+except
+exception
+excerpt
+excess
+excessive
+exchange
+exchangeable
+exchequer
+excisable
+excise
+excision
+excitation
+excitatory
+excite
+exciton
+exclaim
+exclamation
+exclamatory
+exclude
+exclusion
+exclusionary
+exclusive
+excommunicate
+excoriate
+excrement
+excrescent
+excrete
+excretion
+excretory
+excruciate
+exculpate
+exculpatory
+excursion
+excursus
+excusable
+excuse
+exec
+execrable
+execrate
+execute
+execution
+executive
+executor
+executrix
+exegesis
+exegete
+exemplar
+exemplary
+exemplify
+exempt
+exemption
+exercisable
+exercise
+exert
+Exeter
+exfoliate
+exhale
+exhaust
+exhaustible
+exhaustion
+exhaustive
+exhibit
+exhibition
+exhibitor
+exhilarate
+exhort
+exhortation
+exhumation
+exhume
+exigent
+exile
+exist
+existent
+existential
+exit
+exodus
+exogamous
+exogamy
+exogenous
+exonerate
+exorbitant
+exorcise
+exorcism
+exorcist
+exoskeleta
+exoskeleton
+exothermic
+exotic
+exotica
+expand
+expanse
+expansible
+expansion
+expansive
+expatiate
+expatriate
+expect
+expectant
+expectation
+expectorant
+expectorate
+expedient
+expedite
+expedition
+expeditious
+expel
+expellable
+expelled
+expelling
+expend
+expenditure
+expense
+expensive
+experience
+experiential
+experiment
+experimentation
+expert
+expertise
+expiable
+expiate
+expiration
+expire
+expiry
+explain
+explanation
+explanatory
+expletive
+explicable
+explicate
+explicit
+explode
+exploit
+exploitation
+exploration
+exploratory
+explore
+explosion
+explosive
+exponent
+exponential
+exponentiate
+export
+exportation
+expose
+exposit
+exposition
+expositor
+expository
+exposure
+expound
+express
+expressible
+expression
+expressive
+expressway
+expropriate
+expulsion
+expunge
+expurgate
+exquisite
+extant
+extemporaneous
+extempore
+extend
+extendible
+extensible
+extension
+extensive
+extensor
+extent
+extenuate
+exterior
+exterminate
+external
+extinct
+extinguish
+extirpate
+extol
+extolled
+extoller
+extolling
+extort
+extra
+extracellular
+extract
+extractor
+extracurricular
+extradite
+extradition
+extralegal
+extramarital
+extramural
+extraneous
+extraordinary
+extrapolate
+extraterrestrial
+extraterritorial
+extravagant
+extravaganza
+extrema
+extremal
+extreme
+extremum
+extricable
+extricate
+extrinsic
+extroversion
+extrovert
+extrude
+extrusion
+extrusive
+exuberant
+exudate
+exude
+exult
+exultant
+exultation
+Exxon
+eye
+eyeball
+eyebright
+eyebrow
+eyeful
+eyeglass
+eyelash
+eyelet
+eyelid
+eyepiece
+eyesight
+eyesore
+eyewitness
+Ezekiel
+Ezra
+f
+FAA
+Faber
+Fabian
+fable
+fabric
+fabricate
+fabulous
+facade
+face
+faceplate
+facet
+facetious
+facial
+facile
+facilitate
+facsimile
+fact
+factious
+facto
+factor
+factorial
+factory
+factual
+faculty
+fad
+fade
+fadeout
+faery
+Fafnir
+fag
+Fahey
+Fahrenheit
+faience
+fail
+failsafe
+failsoft
+failure
+fain
+faint
+fair
+Fairchild
+Fairfax
+Fairfield
+fairgoer
+Fairport
+fairway
+fairy
+faith
+faithful
+fake
+falcon
+falconry
+Falkland
+fall
+fallacious
+fallacy
+fallen
+fallible
+falloff
+Fallopian
+fallout
+fallow
+Falmouth
+false
+falsetto
+falsify
+Falstaff
+falter
+fame
+familial
+familiar
+familism
+family
+famine
+famish
+famous
+fan
+fanatic
+fanciful
+fancy
+fanfare
+fanfold
+fang
+fangled
+Fanny
+fanout
+fantasia
+fantasist
+fantastic
+fantasy
+fantod
+far
+farad
+Faraday
+Farber
+farce
+farcical
+fare
+farewell
+farfetched
+Fargo
+farina
+Farkas
+Farley
+farm
+farmhouse
+Farmington
+farmland
+Farnsworth
+faro
+Farrell
+farsighted
+farther
+farthest
+fascicle
+fasciculate
+fascinate
+fascism
+fascist
+fashion
+fast
+fasten
+fastidious
+fat
+fatal
+fate
+fateful
+father
+fathom
+fatigue
+Fatima
+fatten
+fatty
+fatuous
+faucet
+Faulkner
+fault
+faulty
+faun
+fauna
+faunal
+Faust
+Faustian
+Faustus
+fawn
+fay
+Fayette
+Fayetteville
+faze
+FBI
+FCC
+FDA
+Fe
+fealty
+fear
+fearful
+fearsome
+feasible
+feast
+feat
+feather
+featherbed
+featherbedding
+featherbrain
+feathertop
+featherweight
+feathery
+feature
+Feb
+febrile
+February
+fecal
+feces
+feckless
+fecund
+fed
+federal
+federate
+Fedora
+fee
+feeble
+feed
+feedback
+feel
+Feeney
+feet
+feign
+feint
+feisty
+Feldman
+feldspar
+Felice
+Felicia
+felicitous
+felicity
+feline
+Felix
+fell
+fellow
+felon
+felonious
+felony
+felsite
+felt
+female
+feminine
+feminism
+feminist
+femoral
+femur
+fence
+fencepost
+fend
+fennec
+fennel
+Fenton
+fenugreek
+Ferber
+Ferdinand
+Ferguson
+Fermat
+ferment
+fermentation
+Fermi
+fermion
+fermium
+fern
+Fernando
+fernery
+ferocious
+ferocity
+Ferreira
+Ferrer
+ferret
+ferric
+ferris
+ferrite
+ferroelectric
+ferromagnet
+ferromagnetic
+ferrous
+ferruginous
+ferrule
+ferry
+fertile
+fervent
+fervid
+fescue
+fest
+festival
+festive
+festoon
+fetal
+fetch
+fete
+fetid
+fetish
+fetter
+fettle
+fetus
+feud
+feudal
+feudatory
+fever
+feverish
+few
+fiance
+fiancee
+fiasco
+fiat
+fib
+fiberboard
+Fiberglas
+Fibonacci
+fibration
+fibrin
+fibrosis
+fibrous
+fiche
+fickle
+fiction
+fictitious
+fictive
+fiddle
+fiddlehead
+fiddlestick
+fide
+fidelity
+fidget
+fiducial
+fief
+fiefdom
+field
+fieldstone
+fieldwork
+fiend
+fiendish
+fierce
+fiery
+fiesta
+fife
+FIFO
+fifteen
+fifteenth
+fifth
+fiftieth
+fifty
+fiftyfold
+fig
+figaro
+fight
+figural
+figurate
+figure
+figurine
+Fiji
+Fijian
+filament
+filamentary
+filamentous
+filbert
+filch
+file
+filet
+filial
+filibuster
+filigree
+Filipino
+fill
+fillet
+fillip
+filly
+film
+filmdom
+filmmake
+filmstrip
+filmy
+filter
+filth
+filthy
+filtrate
+fin
+final
+finale
+finance
+financial
+financier
+finch
+find
+fine
+finery
+finesse
+finessing
+finger
+fingerling
+fingernail
+fingerprint
+fingertip
+finial
+finicky
+finish
+finite
+finitude
+fink
+Finland
+Finley
+Finn
+Finnegan
+Finnish
+finny
+fir
+fire
+firearm
+fireboat
+firebreak
+firebug
+firecracker
+firefly
+firehouse
+firelight
+fireman
+firemen
+fireplace
+firepower
+fireproof
+fireside
+Firestone
+firewall
+firewood
+firework
+firm
+firmware
+first
+firsthand
+fiscal
+Fischbein
+Fischer
+fish
+fisherman
+fishermen
+fishery
+fishmonger
+fishpond
+fishy
+Fisk
+Fiske
+fissile
+fission
+fissure
+fist
+fisticuff
+fit
+Fitch
+Fitchburg
+fitful
+Fitzgerald
+Fitzpatrick
+Fitzroy
+five
+fivefold
+fix
+fixate
+fixture
+Fizeau
+fizzle
+fjord
+FL
+flabbergast
+flack
+flag
+flagellate
+flageolet
+flagging
+Flagler
+flagpole
+flagrant
+Flagstaff
+flagstone
+flail
+flair
+flak
+flake
+flaky
+flam
+flamboyant
+flame
+flamingo
+flammable
+flan
+Flanagan
+Flanders
+flange
+flank
+flannel
+flap
+flare
+flash
+flashback
+flashlight
+flashy
+flask
+flat
+flatbed
+flathead
+flatiron
+flatland
+flatten
+flattery
+flatulent
+flatus
+flatworm
+flaunt
+flautist
+flaw
+flax
+flaxen
+flaxseed
+flea
+fleabane
+fleawort
+fleck
+fled
+fledge
+fledgling
+flee
+fleece
+fleeing
+fleet
+Fleming
+flemish
+flesh
+fleshy
+fletch
+Fletcher
+flew
+flex
+flexible
+flexural
+flexure
+flick
+flight
+flimsy
+flinch
+fling
+flint
+flintlock
+flinty
+flip
+flipflop
+flippant
+flirt
+flirtation
+flirtatious
+flit
+Flo
+float
+floc
+flocculate
+flock
+floe
+flog
+flogging
+flood
+floodgate
+floodlight
+floodlit
+floodwater
+floor
+floorboard
+flop
+floppy
+flora
+floral
+Florence
+Florentine
+florican
+florid
+Florida
+Floridian
+florin
+florist
+floruit
+flotation
+flotilla
+flounce
+flounder
+flour
+flourish
+floury
+flout
+flow
+flowchart
+flowerpot
+flowery
+flown
+Floyd
+flu
+flub
+fluctuate
+flue
+fluent
+fluff
+fluffy
+fluid
+fluke
+flung
+flunk
+flunky
+fluoresce
+fluorescein
+fluorescent
+fluoridate
+fluoride
+fluorine
+fluorite
+fluorocarbon
+fluorspar
+flurry
+flush
+fluster
+flute
+flutter
+flux
+fly
+flycatcher
+flyer
+Flynn
+flyway
+FM
+FMC
+foal
+foam
+foamflower
+foamy
+fob
+focal
+foci
+focus
+focussed
+fodder
+foe
+fog
+Fogarty
+fogging
+foggy
+fogy
+foible
+foil
+foist
+fold
+foldout
+Foley
+foliage
+foliate
+folic
+folio
+folk
+folklore
+folksinger
+folksinging
+folksong
+folksy
+folktale
+follicle
+follicular
+follow
+followeth
+folly
+Fomalhaut
+foment
+fond
+fondle
+font
+Fontaine
+Fontainebleau
+food
+foodstuff
+fool
+foolhardy
+foolish
+foolproof
+foolscap
+foot
+footage
+football
+footbridge
+Foote
+footfall
+foothill
+foothold
+footman
+footmen
+footnote
+footpad
+footpath
+footprint
+footstep
+footstool
+footwear
+footwork
+fop
+foppish
+for
+forage
+foraminifera
+foray
+forbade
+forbear
+forbearance
+Forbes
+forbid
+forbidden
+forbidding
+forbore
+forborne
+force
+forceful
+forcible
+ford
+Fordham
+fore
+foreign
+forensic
+forest
+forestry
+forever
+forfeit
+forfeiture
+forfend
+forgather
+forgave
+forge
+forgery
+forget
+forgetful
+forgettable
+forgetting
+forgive
+forgiven
+forgo
+forgone
+forgot
+forgotten
+fork
+forklift
+forlorn
+form
+formal
+formaldehyde
+formant
+format
+formate
+formatted
+formatting
+formic
+Formica
+formidable
+Formosa
+formula
+formulae
+formulaic
+formulate
+forsake
+forsaken
+forsook
+forswear
+forswore
+forsworn
+Forsythe
+fort
+forte
+Fortescue
+forth
+forthcome
+forthcoming
+forthright
+forthwith
+fortieth
+fortify
+fortin
+fortiori
+fortitude
+fortnight
+fortran
+fortress
+fortuitous
+fortunate
+fortune
+forty
+fortyfold
+forum
+forward
+forwent
+Foss
+fossil
+fossiliferous
+foster
+fosterite
+fought
+foul
+foulmouth
+found
+foundation
+foundling
+foundry
+fount
+fountain
+fountainhead
+four
+fourfold
+Fourier
+foursome
+foursquare
+fourteen
+fourteenth
+fourth
+fovea
+fowl
+fox
+foxglove
+Foxhall
+foxhole
+foxhound
+foxtail
+foxtrot
+foxy
+foyer
+FPC
+fractal
+fraction
+fractionate
+fractious
+fracture
+fragile
+fragment
+fragmentary
+fragmentation
+fragrant
+frail
+frailty
+frambesia
+frame
+framework
+Fran
+franc
+franca
+France
+Frances
+franchise
+Francine
+Francis
+Franciscan
+Francisco
+francium
+franco
+Francoise
+frangipani
+frank
+Frankel
+Frankfort
+Frankfurt
+frankfurter
+franklin
+frantic
+Franz
+Fraser
+fraternal
+fraternity
+Frau
+fraud
+fraudulent
+fraught
+fray
+Frazier
+frazzle
+freak
+freakish
+freckle
+Fred
+Freddie
+Freddy
+Frederic
+Frederick
+Fredericksburg
+Fredericton
+Fredholm
+Fredrickson
+free
+freeboot
+freedman
+freedmen
+freedom
+freehand
+freehold
+freeing
+freeload
+freeman
+freemen
+Freeport
+freestone
+freethink
+Freetown
+freeway
+freewheel
+freeze
+freight
+French
+Frenchman
+Frenchmen
+frenetic
+frenzy
+freon
+frequent
+fresco
+frescoes
+fresh
+freshen
+freshman
+freshmen
+freshwater
+Fresnel
+Fresno
+fret
+Freud
+Freudian
+Frey
+Freya
+friable
+friar
+fricative
+Frick
+friction
+Friday
+fridge
+Friedman
+Friedrich
+friend
+Friesland
+frieze
+frigate
+Frigga
+fright
+frighten
+frightful
+frigid
+Frigidaire
+frill
+frilly
+fringe
+Frisian
+frisky
+fritillary
+fritter
+Fritz
+frivolity
+frivolous
+frizzle
+frizzy
+fro
+frock
+frog
+frolic
+frolicked
+frolicking
+from
+frond
+front
+frontage
+frontal
+frontier
+frontiersman
+frontiersmen
+frost
+frostbite
+frostbitten
+frosty
+froth
+frothy
+frown
+frowzy
+froze
+frozen
+fructose
+Fruehauf
+frugal
+fruit
+fruitful
+fruition
+frustrate
+frustrater
+frustum
+fry
+Frye
+f's
+Ft
+FTC
+Fuchs
+Fuchsia
+fudge
+fuel
+fugal
+fugitive
+fugue
+Fuji
+Fujitsu
+Fulbright
+fulcrum
+fulfill
+full
+fullback
+Fullerton
+fully
+fulminate
+fulsome
+Fulton
+fum
+fumarole
+fumble
+fume
+fumigant
+fumigate
+fun
+function
+functionary
+functor
+functorial
+fund
+fundamental
+fundraiser
+fundraising
+funeral
+funerary
+funereal
+fungal
+fungi
+fungible
+fungicide
+fungoid
+fungus
+funk
+funky
+funnel
+funny
+fur
+furbish
+furious
+furl
+furlong
+furlough
+Furman
+furnace
+furnish
+furniture
+furrier
+furrow
+furry
+further
+furthermore
+furthermost
+furthest
+furtive
+fury
+furze
+fuse
+fuselage
+fusible
+fusiform
+fusillade
+fusion
+fuss
+fussy
+fusty
+futile
+future
+fuzz
+fuzzy
+g
+GA
+gab
+gabardine
+gabble
+gabbro
+Gaberones
+gable
+Gabon
+Gabriel
+Gabrielle
+gad
+gadfly
+gadget
+gadgetry
+gadolinium
+gadwall
+Gaelic
+gaff
+gaffe
+gag
+gage
+gagging
+gaggle
+gagwriter
+gaiety
+Gail
+gaillardia
+gain
+Gaines
+Gainesville
+gainful
+gait
+Gaithersburg
+gal
+gala
+galactic
+galactose
+Galapagos
+Galatea
+Galatia
+galaxy
+Galbreath
+gale
+Galen
+galena
+galenite
+Galilean
+Galilee
+Galileo
+gall
+Gallagher
+gallant
+gallantry
+gallberry
+gallery
+galley
+gallinule
+gallium
+gallivant
+gallon
+gallonage
+gallop
+Galloway
+gallows
+gallstone
+Gallup
+gallus
+Galois
+Galt
+galvanic
+galvanism
+galvanometer
+Galveston
+Galway
+gam
+Gambia
+gambit
+gamble
+gambol
+game
+gamecock
+gamesmanship
+gamete
+gamin
+gamma
+gamut
+gander
+Gandhi
+Gandhian
+gang
+Ganges
+gangland
+gangling
+ganglion
+gangplank
+gangster
+gangway
+gannet
+Gannett
+gantlet
+gantry
+Ganymede
+GAO
+gap
+gape
+gar
+garage
+garb
+garbage
+garble
+Garcia
+garden
+gardenia
+Gardner
+Garfield
+gargantuan
+gargle
+Garibaldi
+garish
+garland
+garlic
+garner
+garnet
+garnish
+Garrett
+garrison
+Garrisonian
+garrulous
+Garry
+garter
+Garth
+Garvey
+Gary
+gas
+Gascony
+gaseous
+gases
+gash
+gasify
+gasket
+gaslight
+gasoline
+gasp
+Gaspee
+gassy
+Gaston
+gastrointestinal
+gastronome
+gastronomic
+gastronomy
+gate
+gatekeeper
+Gates
+gateway
+gather
+Gatlinburg
+gator
+gauche
+gaucherie
+gaudy
+gauge
+gaugeable
+Gauguin
+Gaul
+gauleiter
+Gaulle
+gaunt
+gauntlet
+gaur
+gauss
+Gaussian
+Gautama
+gauze
+gauzy
+gave
+gavel
+Gavin
+gavotte
+gawk
+gawky
+gay
+Gaylord
+gaze
+gazebo
+gazelle
+gazette
+gazpacho
+GE
+gear
+gecko
+gee
+geese
+Gegenschein
+Geiger
+Geigy
+geisha
+gel
+gelable
+gelatin
+gelatine
+gelatinous
+geld
+gem
+geminate
+Gemini
+Geminid
+Gemma
+gemsbok
+gemstone
+gender
+gene
+genealogy
+genera
+general
+generate
+generic
+generosity
+generous
+Genesco
+genesis
+genetic
+Geneva
+Genevieve
+genial
+genie
+genii
+genital
+genitive
+genius
+Genoa
+genotype
+genre
+gent
+genteel
+gentian
+gentile
+gentle
+gentleman
+gentlemen
+gentlewoman
+gentlewomen
+gentry
+genuflect
+genuine
+genus
+geocentric
+geochemical
+geochemistry
+geochronology
+geode
+geodesic
+geodesy
+geodetic
+geoduck
+Geoffrey
+geographer
+geography
+geology
+geometer
+geometrician
+geophysical
+geophysics
+geopolitic
+George
+Georgetown
+Georgia
+geothermal
+Gerald
+Geraldine
+geranium
+Gerard
+Gerber
+gerbil
+Gerhard
+Gerhardt
+geriatric
+germ
+German
+germane
+Germanic
+germanium
+Germantown
+Germany
+germicidal
+germicide
+germinal
+germinate
+Gerry
+Gershwin
+Gertrude
+gerund
+gerundial
+gerundive
+gestalt
+Gestapo
+gestation
+gesticulate
+gestural
+gesture
+get
+getaway
+Getty
+Gettysburg
+geyser
+Ghana
+Ghanian
+ghastly
+Ghent
+gherkin
+ghetto
+ghost
+ghoul
+ghoulish
+Giacomo
+giant
+giantess
+gibberellin
+gibberish
+gibbet
+gibbon
+gibbous
+Gibbs
+gibby
+gibe
+giblet
+Gibraltar
+Gibson
+giddap
+giddy
+Gideon
+Gifford
+gift
+gig
+gigacycle
+gigahertz
+gigantic
+gigavolt
+gigawatt
+gigging
+giggle
+Gil
+gila
+gilbert
+Gilbertson
+Gilchrist
+gild
+Gilead
+Giles
+gill
+Gillespie
+Gillette
+Gilligan
+Gilmore
+gilt
+gimbal
+Gimbel
+gimlet
+gimpy
+gin
+Gina
+ginger
+gingham
+ginkgo
+ginmill
+Ginn
+Gino
+Ginsberg
+Ginsburg
+ginseng
+Giovanni
+giraffe
+gird
+girdle
+girl
+girlie
+girlish
+girt
+girth
+gist
+Giuliano
+Giuseppe
+give
+giveaway
+given
+giveth
+gizmo
+gizzard
+gjetost
+glacial
+glaciate
+glacier
+glacis
+glad
+gladden
+gladdy
+glade
+gladiator
+gladiolus
+Gladstone
+Gladys
+glamor
+glamorous
+glamour
+glance
+gland
+glandular
+glans
+glare
+Glasgow
+glass
+glassine
+glassware
+glasswort
+glassy
+Glaswegian
+glaucoma
+glaucous
+glaze
+gleam
+glean
+Gleason
+glee
+gleeful
+glen
+Glenda
+Glendale
+Glenn
+glib
+glibly
+Glidden
+glide
+glimmer
+glimpse
+glint
+glissade
+glisten
+glitch
+glitter
+gloat
+glob
+global
+globe
+globular
+globule
+globulin
+glom
+glomerular
+gloom
+gloomy
+Gloria
+Gloriana
+glorify
+glorious
+glory
+gloss
+glossary
+glossolalia
+glossy
+glottal
+glottis
+Gloucester
+glove
+glow
+glucose
+glue
+gluey
+glum
+glut
+glutamate
+glutamic
+glutamine
+gluten
+glutinous
+glutton
+gluttonous
+gluttony
+glyceride
+glycerin
+glycerinate
+glycerine
+glycerol
+glycine
+glycogen
+glycol
+glyph
+GM
+GMT
+gnarl
+gnash
+gnat
+gnaw
+gneiss
+gnome
+gnomon
+gnomonic
+gnostic
+GNP
+gnu
+go
+Goa
+goad
+goal
+goat
+gob
+gobble
+gobbledygook
+Gobi
+goblet
+god
+Goddard
+goddess
+godfather
+Godfrey
+godhead
+godkin
+godmother
+godparent
+godsend
+godson
+Godwin
+godwit
+goes
+Goethe
+Goff
+gog
+goggle
+Gogh
+gogo
+gold
+Goldberg
+golden
+goldeneye
+goldenrod
+goldenseal
+goldfinch
+goldfish
+Goldman
+goldsmith
+Goldstein
+Goldstine
+Goldwater
+Goleta
+golf
+Goliath
+golly
+gonad
+gonadotropic
+gondola
+gone
+gong
+Gonzales
+Gonzalez
+goober
+good
+goodbye
+Goode
+Goodman
+Goodrich
+goodwill
+Goodwin
+goody
+Goodyear
+goof
+goofy
+goose
+gooseberry
+GOP
+gopher
+Gordian
+Gordon
+gore
+Goren
+gorge
+gorgeous
+gorgon
+Gorham
+gorilla
+Gorky
+gorse
+Gorton
+gory
+gosh
+goshawk
+gosling
+gospel
+gossamer
+gossip
+got
+Gotham
+Gothic
+gotten
+Gottfried
+Goucher
+Gouda
+gouge
+Gould
+gourd
+gourmet
+gout
+govern
+governance
+governess
+governor
+gown
+GPO
+grab
+grace
+graceful
+gracious
+grackle
+grad
+gradate
+grade
+gradient
+gradual
+graduate
+Grady
+Graff
+graft
+graham
+grail
+grain
+grainy
+grammar
+grammarian
+grammatic
+gramophone
+granary
+grand
+grandchild
+grandchildren
+granddaughter
+grandeur
+grandfather
+grandiloquent
+grandiose
+grandma
+grandmother
+grandnephew
+grandniece
+grandpa
+grandparent
+grandson
+grandstand
+granite
+granitic
+granny
+granola
+grant
+grantee
+grantor
+granular
+granulate
+granule
+Granville
+grape
+grapefruit
+grapevine
+graph
+grapheme
+graphic
+graphite
+grapple
+grasp
+grass
+grasshopper
+grassland
+grassy
+grata
+grate
+grateful
+grater
+gratify
+gratis
+gratitude
+gratuitous
+gratuity
+grave
+gravel
+graven
+gravestone
+graveyard
+gravid
+gravitate
+gravitometer
+graviton
+gravy
+Grayson
+graze
+grease
+greasy
+great
+greatcoat
+greater
+grebe
+Grecian
+Greece
+greed
+greedy
+Greek
+green
+Greenbelt
+Greenberg
+Greenblatt
+Greenbriar
+Greene
+greenery
+Greenfield
+greengrocer
+greenhouse
+greenish
+Greenland
+Greensboro
+greensward
+greenware
+Greenwich
+greenwood
+Greer
+greet
+Greg
+gregarious
+Gregg
+Gregory
+gremlin
+grenade
+Grendel
+Grenoble
+grep
+Gresham
+Greta
+Gretchen
+grew
+grey
+greyhound
+greylag
+grid
+griddle
+gridiron
+gridlock
+grief
+grievance
+grieve
+grievous
+griffin
+Griffith
+grill
+grille
+grillwork
+grim
+grimace
+Grimaldi
+grime
+Grimm
+grimy
+grin
+grind
+grindstone
+grip
+gripe
+grippe
+grisly
+grist
+gristmill
+Griswold
+grit
+gritty
+grizzle
+grizzly
+groan
+groat
+grocer
+grocery
+groggy
+groin
+grommet
+groom
+groove
+grope
+grosbeak
+gross
+Grosset
+Grossman
+Grosvenor
+grotesque
+Groton
+grotto
+grottoes
+grouch
+grouchy
+ground
+groundhog
+groundsel
+groundskeep
+groundwork
+group
+groupoid
+grouse
+grout
+grove
+grovel
+Grover
+grow
+growl
+grown
+grownup
+growth
+grub
+grubby
+grudge
+gruesome
+gruff
+grumble
+Grumman
+grump
+grumpy
+grunt
+Gruyere
+gryphon
+g's
+GSA
+GU
+Guam
+guanidine
+guanine
+guano
+guarantee
+guaranteeing
+guaranty
+guard
+guardhouse
+Guardia
+guardian
+Guatemala
+gubernatorial
+Guelph
+Guenther
+guerdon
+guernsey
+guerrilla
+guess
+guesswork
+guest
+guffaw
+Guggenheim
+Guiana
+guidance
+guide
+guidebook
+guideline
+guidepost
+guignol
+guild
+guildhall
+guile
+Guilford
+guillemot
+guillotine
+guilt
+guilty
+guinea
+Guinevere
+guise
+guitar
+Gujarat
+Gujarati
+gulch
+gules
+gulf
+gull
+Gullah
+gullet
+gullible
+gully
+gulp
+gum
+gumbo
+gumdrop
+gummy
+gumption
+gumshoe
+gun
+Gunderson
+gunfight
+gunfire
+gunflint
+gunk
+gunky
+gunman
+gunmen
+gunnery
+gunny
+gunplay
+gunpoint
+gunpowder
+gunshot
+gunsling
+Gunther
+gurgle
+Gurkha
+guru
+Gus
+gush
+gusset
+gust
+Gustafson
+Gustav
+Gustave
+Gustavus
+gusto
+gusty
+gut
+Gutenberg
+Guthrie
+gutsy
+guttural
+guy
+Guyana
+guzzle
+Gwen
+Gwyn
+gym
+gymnasium
+gymnast
+gymnastic
+gymnosperm
+gyp
+gypsite
+gypsum
+gypsy
+gyrate
+gyrfalcon
+gyro
+gyrocompass
+gyroscope
+h
+ha
+Haag
+Haas
+habeas
+haberdashery
+Haberman
+Habib
+habit
+habitant
+habitat
+habitation
+habitual
+habituate
+hacienda
+hack
+hackberry
+Hackett
+hackle
+hackmatack
+hackney
+hacksaw
+had
+Hadamard
+Haddad
+haddock
+Hades
+Hadley
+hadn't
+Hadrian
+hadron
+hafnium
+Hagen
+Hager
+haggard
+haggis
+haggle
+hagiography
+Hagstrom
+Hague
+Hahn
+Haifa
+haiku
+hail
+hailstone
+hailstorm
+Haines
+hair
+haircut
+hairdo
+hairpin
+hairspring
+hairy
+Haiti
+Haitian
+Hal
+halcyon
+hale
+Haley
+half
+halfback
+halfhearted
+halftone
+halfway
+halibut
+halide
+Halifax
+halite
+hall
+hallelujah
+Halley
+hallmark
+hallow
+Halloween
+hallucinate
+hallucinatory
+hallucinogen
+hallucinogenic
+hallway
+halma
+halo
+halocarbon
+halogen
+Halpern
+Halsey
+Halstead
+halt
+halvah
+halve
+Halverson
+ham
+Hamal
+Hamburg
+hamburger
+Hamilton
+hamlet
+Hamlin
+hammerhead
+hammock
+Hammond
+hamper
+Hampshire
+Hampton
+hamster
+hamstrung
+Han
+Hancock
+hand
+handbag
+handbook
+handclasp
+handcuff
+Handel
+handful
+handgun
+handhold
+handicap
+handicapped
+handicapper
+handicapping
+handicraft
+handicraftsman
+handicraftsmen
+handiwork
+handkerchief
+handle
+handleable
+handlebar
+handline
+handmade
+handmaiden
+handout
+handpicked
+handprint
+handset
+handshake
+handsome
+handspike
+handstand
+handwaving
+handwrite
+handwritten
+handy
+handyman
+handymen
+Haney
+Hanford
+hang
+hangable
+hangar
+hangdog
+hangman
+hangmen
+hangnail
+hangout
+hangover
+hank
+Hankel
+Hanley
+Hanlon
+Hanna
+Hannah
+Hannibal
+Hanoi
+Hanover
+Hanoverian
+Hans
+Hansel
+Hansen
+hansom
+Hanson
+Hanukkah
+hap
+haphazard
+haploid
+haploidy
+haplology
+happen
+happenstance
+happy
+Hapsburg
+harangue
+harass
+Harbin
+harbinger
+Harcourt
+hard
+hardbake
+hardboard
+hardboiled
+hardbound
+hardcopy
+hardcover
+harden
+hardhat
+hardhearted
+Hardin
+hardscrabble
+hardtack
+hardtop
+hardware
+hardwire
+hardwood
+hardworking
+hardy
+hare
+harebrained
+harelip
+harem
+hark
+harken
+Harlan
+Harlem
+Harley
+harm
+harmful
+Harmon
+harmonic
+harmonica
+harmonious
+harmony
+harness
+Harold
+harp
+harpoon
+harpsichord
+harpy
+Harriet
+Harriman
+Harrington
+Harris
+Harrisburg
+Harrison
+harrow
+harry
+harsh
+harshen
+hart
+Hartford
+Hartley
+Hartman
+Harvard
+harvest
+harvestman
+Harvey
+has
+hash
+hashish
+hasn't
+hasp
+hassle
+hast
+haste
+hasten
+Hastings
+hasty
+hat
+hatch
+hatchery
+hatchet
+hatchway
+hate
+hateful
+hater
+Hatfield
+hath
+Hathaway
+hatred
+Hatteras
+Hattie
+Hattiesburg
+Haugen
+haughty
+haul
+haulage
+haunch
+haunt
+Hausa
+Hausdorff
+Havana
+have
+haven
+haven't
+haversack
+Havilland
+havoc
+haw
+Hawaii
+Hawaiian
+hawk
+Hawkins
+Hawley
+hawthorn
+Hawthorne
+hay
+Hayden
+Haydn
+Hayes
+hayfield
+Haynes
+haystack
+hayward
+hazard
+hazardous
+haze
+hazel
+hazelnut
+hazy
+he
+head
+headache
+headboard
+headcount
+headdress
+headland
+headlight
+headline
+headlong
+headman
+headmaster
+headmen
+headphone
+headquarter
+headroom
+headset
+headsman
+headsmen
+headstand
+headstone
+headstrong
+headwall
+headwater
+headway
+headwind
+heady
+heal
+Healey
+health
+healthful
+healthy
+Healy
+heap
+hear
+heard
+hearken
+hearsay
+hearse
+Hearst
+heart
+heartbeat
+heartbreak
+hearten
+heartfelt
+hearth
+heartland
+heartrending
+heartthrob
+hearty
+heat
+heater
+heath
+heathen
+heathenish
+Heathkit
+heave
+heaven
+heavenward
+heavy
+heavyset
+heavyweight
+Hebe
+hebephrenic
+Hebraic
+Hebrew
+Hebrides
+Hecate
+hecatomb
+heck
+heckle
+Heckman
+hectic
+hector
+Hecuba
+he'd
+hedge
+hedgehog
+hedonism
+hedonist
+heed
+heel
+heft
+hefty
+Hegelian
+hegemony
+Heidegger
+Heidelberg
+heifer
+heigh
+height
+heighten
+Heine
+Heinrich
+Heinz
+heir
+heiress
+Heisenberg
+held
+Helen
+Helena
+Helene
+Helga
+helical
+helicopter
+heliocentric
+heliotrope
+helium
+helix
+he'll
+hell
+hellbender
+hellebore
+Hellenic
+Hellespont
+hellfire
+hellgrammite
+hellish
+hello
+helm
+helmet
+Helmholtz
+helmsman
+helmsmen
+Helmut
+help
+helpful
+helpmate
+Helsinki
+Helvetica
+hem
+hematite
+Hemingway
+hemisphere
+hemispheric
+hemlock
+hemp
+Hempstead
+hen
+henbane
+hence
+henceforth
+henchman
+henchmen
+Henderson
+Hendrick
+Hendrickson
+henequen
+Henley
+henpeck
+Henri
+Henrietta
+henry
+hepatica
+hepatitis
+Hepburn
+heptane
+her
+Hera
+Heraclitus
+herald
+herb
+herbarium
+Herbert
+herbicide
+herbivore
+herbivorous
+Herculean
+Hercules
+herd
+herdsman
+herdsmen
+here
+hereabout
+hereafter
+hereby
+hereditary
+heredity
+Hereford
+herein
+hereinabove
+hereinafter
+hereinbelow
+hereof
+heresy
+heretic
+hereto
+heretofore
+hereunder
+hereunto
+herewith
+heritable
+heritage
+Herkimer
+Herman
+Hermann
+hermaphrodite
+hermaphroditic
+hermeneutic
+Hermes
+hermetic
+hermit
+hermitage
+Hermite
+hermitian
+Hermosa
+Hernandez
+hernia
+hero
+Herodotus
+heroes
+heroic
+heroin
+heroine
+heroism
+heron
+herpes
+herpetology
+Herr
+herringbone
+Herschel
+herself
+Hershel
+Hershey
+hertz
+Hertzog
+hesitant
+hesitate
+hesitater
+Hesperus
+Hess
+Hesse
+Hessian
+Hester
+heterocyclic
+heterodyne
+heterogamous
+heterogeneity
+heterogeneous
+heterosexual
+heterostructure
+heterozygous
+Hetman
+Hettie
+Hetty
+Heublein
+heuristic
+Heusen
+Heuser
+hew
+Hewett
+Hewitt
+Hewlett
+hewn
+hex
+hexachloride
+hexadecimal
+hexafluoride
+hexagon
+hexagonal
+hexameter
+hexane
+hey
+heyday
+hi
+Hiatt
+hiatus
+Hiawatha
+hibachi
+Hibbard
+hibernate
+Hibernia
+hick
+Hickey
+Hickman
+hickory
+hid
+hidalgo
+hidden
+hide
+hideaway
+hidebound
+hideous
+hideout
+hierarchal
+hierarchic
+hierarchy
+hieratic
+hieroglyphic
+Hieronymus
+hifalutin
+Higgins
+high
+highball
+highboy
+highfalutin
+highhanded
+highland
+highlight
+highroad
+hightail
+highway
+highwayman
+highwaymen
+hijack
+hike
+hilarious
+hilarity
+Hilbert
+Hildebrand
+hill
+hillbilly
+Hillcrest
+Hillel
+hillman
+hillmen
+hillock
+hillside
+hilltop
+hilly
+hilt
+Hilton
+hilum
+him
+Himalaya
+himself
+hind
+Hindi
+hindmost
+hindquarters
+hindrance
+hindsight
+Hindu
+Hindustan
+Hines
+hinge
+Hinman
+hint
+hinterland
+hip
+hippie
+hippo
+Hippocrates
+Hippocratic
+hippodrome
+hippopotamus
+hippy
+hipster
+Hiram
+hire
+hireling
+Hiroshi
+Hiroshima
+Hirsch
+hirsute
+his
+Hispanic
+hiss
+histamine
+histidine
+histochemic
+histochemistry
+histogram
+histology
+historian
+historic
+historiography
+history
+histrionic
+hit
+Hitachi
+hitch
+Hitchcock
+hither
+hitherto
+Hitler
+hive
+ho
+hoagie
+Hoagland
+hoagy
+hoar
+hoard
+hoarfrost
+hoarse
+hoax
+hob
+Hobart
+Hobbes
+hobble
+Hobbs
+hobby
+hobbyhorse
+hobo
+Hoboken
+hoc
+hock
+hockey
+hodge
+hodgepodge
+Hodges
+Hodgkin
+hoe
+Hoff
+Hoffman
+hog
+hogan
+hogging
+hoi
+Hokan
+Holbrook
+Holcomb
+hold
+holden
+holdover
+holdup
+hole
+holeable
+holiday
+Holland
+hollandaise
+holler
+Hollerith
+Hollingsworth
+Hollister
+hollow
+Holloway
+hollowware
+holly
+hollyhock
+Hollywood
+Holm
+Holman
+Holmdel
+Holmes
+holmium
+holocaust
+Holocene
+hologram
+holography
+Holst
+Holstein
+holster
+holt
+Holyoke
+holystone
+Hom
+homage
+home
+homebound
+homebuilder
+homebuilding
+homecoming
+homeland
+homemade
+homemake
+homeobox
+homeomorph
+homeomorphic
+homeopath
+homeopathic
+homeowner
+Homeric
+homesick
+homespun
+homestead
+homeward
+homework
+homicidal
+homicide
+homily
+hominid
+homo
+homogenate
+homogeneity
+homogeneous
+homologous
+homologue
+homology
+homomorphic
+homomorphism
+homonym
+homophobia
+homosexual
+homotopy
+homozygous
+homunculus
+Honda
+hondo
+Honduras
+hone
+honest
+honesty
+honey
+honeybee
+honeycomb
+honeydew
+honeymoon
+honeysuckle
+Honeywell
+hong
+honk
+honky
+Honolulu
+honoraria
+honorarium
+honorary
+honoree
+honorific
+Honshu
+hooch
+hood
+hoodlum
+hoof
+hoofmark
+hoofprint
+hook
+hookup
+hookworm
+hooligan
+hoop
+hoopla
+hoosegow
+Hoosier
+hoot
+Hoover
+hooves
+hop
+hope
+hopeful
+Hopi
+Hopkins
+Hopkinsian
+hopple
+hopscotch
+Horace
+Horatio
+horde
+horehound
+horizon
+horizontal
+hormonal
+hormone
+horn
+hornbeam
+hornblende
+Hornblower
+hornet
+hornmouth
+hornpipe
+horntail
+hornwort
+horny
+horology
+horoscope
+Horowitz
+horrendous
+horrible
+horrid
+horrify
+horror
+horse
+horseback
+horsedom
+horseflesh
+horsefly
+horsehair
+horseman
+horsemen
+horseplay
+horsepower
+horseshoe
+horsetail
+horsewoman
+horsewomen
+horticulture
+Horton
+Horus
+hose
+hosiery
+hospice
+hospitable
+hospital
+host
+hostage
+hostelry
+hostess
+hostile
+hostler
+hot
+hotbed
+hotbox
+hotel
+hotelman
+hotfoot
+hothead
+hothouse
+hotrod
+Hottentot
+Houdaille
+Houdini
+hough
+Houghton
+hound
+hour
+hourglass
+house
+houseboat
+housebreak
+housebroken
+housefly
+household
+housekeep
+housemate
+housewife
+housewives
+housework
+Houston
+hove
+hovel
+hover
+how
+Howard
+howdy
+Howe
+Howell
+however
+howl
+howsoever
+howsomever
+hoy
+hoyden
+hoydenish
+Hoyt
+Hrothgar
+h's
+hub
+Hubbard
+Hubbell
+hubbub
+hubby
+hubcap
+Huber
+Hubert
+hubris
+huck
+huckleberry
+huckster
+huddle
+Hudson
+hue
+huff
+Huffman
+hug
+huge
+hugging
+Huggins
+Hugh
+Hughes
+Hugo
+huh
+hulk
+hull
+hullaballoo
+hullabaloo
+hum
+human
+humane
+humanitarian
+humble
+Humboldt
+humdrum
+humerus
+humid
+humidify
+humidistat
+humiliate
+humility
+Hummel
+hummingbird
+hummock
+humorous
+hump
+humpback
+Humphrey
+humpty
+humus
+Hun
+hunch
+hunchback
+hundred
+hundredfold
+hundredth
+hung
+Hungarian
+Hungary
+hungry
+hunk
+hunt
+Huntington
+Huntley
+Huntsville
+Hurd
+hurdle
+hurl
+hurley
+Huron
+hurrah
+hurray
+hurricane
+hurry
+Hurst
+hurt
+hurtle
+hurty
+Hurwitz
+husband
+husbandman
+husbandmen
+husbandry
+hush
+husky
+hustle
+Huston
+hut
+hutch
+Hutchins
+Hutchinson
+Hutchison
+Huxley
+Huxtable
+huzzah
+hyacinth
+Hyades
+hyaline
+Hyannis
+hybrid
+Hyde
+hydra
+hydrangea
+hydrant
+hydrate
+hydraulic
+hydride
+hydro
+hydrocarbon
+hydrochemistry
+hydrochloric
+hydrochloride
+hydrocyanic
+hydrodynamic
+hydroelectric
+hydrofluoric
+hydrogen
+hydrogenate
+hydrology
+hydrolysis
+hydrometer
+hydronium
+hydrophilic
+hydrophobia
+hydrophobic
+hydrophone
+hydrosphere
+hydrostatic
+hydrothermal
+hydrous
+hydroxide
+hydroxy
+hydroxyl
+hydroxylate
+hyena
+hygiene
+hygrometer
+hygroscopic
+hying
+Hyman
+hymen
+hymn
+hymnal
+hyper
+hyperbola
+hyperbolic
+hyperboloid
+hyperboloidal
+hypertensive
+hyperthermia
+hyphen
+hyphenate
+hypnosis
+hypnotic
+hypoactive
+hypochlorite
+hypochlorous
+hypocrisy
+hypocrite
+hypocritic
+hypocycloid
+hypodermic
+hypophyseal
+hypotenuse
+hypothalamic
+hypothalamus
+hypothalmus
+hypothermia
+hypotheses
+hypothesis
+hypothetic
+hypothyroid
+hypotonic
+hysterectomy
+hysteresis
+hysteria
+hysteric
+hysteron
+i
+IA
+iambic
+Ian
+Iberia
+ibex
+ibid
+ibis
+IBM
+Ibn
+Icarus
+ICC
+ice
+iceberg
+icebox
+icecap
+iceland
+Icelandic
+iceman
+ichneumon
+icicle
+icky
+icon
+iconoclasm
+iconoclast
+iconography
+icosahedra
+icosahedral
+icosahedron
+icy
+I'd
+id
+Ida
+Idaho
+idea
+ideal
+ideate
+idempotent
+identical
+identify
+identity
+ideogram
+ideolect
+ideology
+idetic
+idiocy
+idiom
+idiomatic
+idiosyncrasy
+idiosyncratic
+idiot
+idiotic
+idle
+idly
+idol
+idolatry
+idyll
+idyllic
+i.e
+IEEE
+if
+iffy
+Ifni
+igloo
+igneous
+ignite
+ignition
+ignoble
+ignominious
+ignominy
+ignoramus
+ignorant
+ignore
+Igor
+ii
+iii
+Ike
+IL
+ileum
+iliac
+Iliad
+I'll
+ill
+illegal
+illegible
+illegitimacy
+illegitimate
+illicit
+illimitable
+Illinois
+illiteracy
+illiterate
+illogic
+illume
+illuminate
+illumine
+illusion
+illusionary
+illusive
+illusory
+illustrate
+illustrious
+Ilona
+Ilyushin
+I'm
+image
+imagen
+imagery
+imaginary
+imaginate
+imagine
+imbalance
+imbecile
+imbibe
+Imbrium
+imbroglio
+imbrue
+imbue
+imitable
+imitate
+immaculate
+immanent
+immaterial
+immature
+immeasurable
+immediacy
+immediate
+immemorial
+immense
+immerse
+immersion
+immigrant
+immigrate
+imminent
+immiscible
+immobile
+immobility
+immoderate
+immodest
+immodesty
+immoral
+immortal
+immovable
+immune
+immunoelectrophoresis
+immunology
+immutable
+imp
+impact
+impair
+impale
+impalpable
+impart
+impartation
+impartial
+impassable
+impasse
+impassion
+impassive
+impatient
+impeach
+impeccable
+impedance
+impede
+impediment
+impel
+impelled
+impeller
+impelling
+impend
+impenetrable
+imperate
+imperceivable
+imperceptible
+imperfect
+imperial
+imperil
+imperious
+imperishable
+impermeable
+impermissible
+impersonal
+impersonate
+impertinent
+imperturbable
+impervious
+impetuous
+impetus
+impiety
+impinge
+impious
+impish
+implacable
+implant
+implantation
+implausible
+implement
+implementation
+implementer
+implementor
+implicant
+implicate
+implicit
+implore
+impolite
+impolitic
+imponderable
+import
+important
+importation
+importunate
+importune
+impose
+imposition
+impossible
+impost
+imposture
+impotent
+impound
+impoverish
+impracticable
+impractical
+imprecate
+imprecise
+impregnable
+impregnate
+impresario
+impress
+impressible
+impression
+impressive
+imprimatur
+imprint
+imprison
+improbable
+impromptu
+improper
+impropriety
+improve
+improvident
+improvisate
+improvise
+imprudent
+impudent
+impugn
+impulse
+impulsive
+impunity
+impure
+imputation
+impute
+in
+inability
+inaccessible
+inaccuracy
+inaccurate
+inaction
+inactivate
+inactive
+inadequacy
+inadequate
+inadmissible
+inadvertent
+inadvisable
+inalienable
+inalterable
+inane
+inanimate
+inappeasable
+inapplicable
+inappreciable
+inapproachable
+inappropriate
+inapt
+inaptitude
+inarticulate
+inasmuch
+inattention
+inattentive
+inaudible
+inaugural
+inaugurate
+inauspicious
+inauthentic
+inboard
+inborn
+inbred
+inbreed
+Inc
+Inca
+incalculable
+incandescent
+incant
+incantation
+incapable
+incapacitate
+incapacity
+incarcerate
+incarnate
+incautious
+incendiary
+incense
+incentive
+inception
+inceptor
+incessant
+incest
+incestuous
+inch
+inchoate
+inchworm
+incident
+incidental
+incinerate
+incipient
+incise
+incisive
+incisor
+incite
+inclement
+inclination
+incline
+inclose
+include
+inclusion
+inclusive
+incognito
+incoherent
+incombustible
+income
+incommensurable
+incommensurate
+incommunicable
+incommutable
+incomparable
+incompatible
+incompetent
+incomplete
+incompletion
+incomprehensible
+incomprehension
+incompressible
+incomputable
+inconceivable
+inconclusive
+incondensable
+incongruity
+incongruous
+inconsequential
+inconsiderable
+inconsiderate
+inconsistent
+inconsolable
+inconspicuous
+inconstant
+incontestable
+incontrollable
+incontrovertible
+inconvenient
+inconvertible
+incorporable
+incorporate
+incorrect
+incorrigible
+incorruptible
+increasable
+increase
+incredible
+incredulity
+incredulous
+increment
+incriminate
+incubate
+incubi
+incubus
+inculcate
+inculpable
+incumbent
+incur
+incurred
+incurrer
+incurring
+incursion
+indebted
+indecent
+indecipherable
+indecision
+indecisive
+indecomposable
+indeed
+indefatigable
+indefensible
+indefinable
+indefinite
+indelible
+indelicate
+indemnity
+indent
+indentation
+indenture
+independent
+indescribable
+indestructible
+indeterminable
+indeterminacy
+indeterminate
+index
+India
+Indiana
+Indianapolis
+indicant
+indicate
+indices
+indict
+Indies
+indifferent
+indigene
+indigenous
+indigent
+indigestible
+indigestion
+indignant
+indignation
+indignity
+indigo
+Indira
+indirect
+indiscernible
+indiscoverable
+indiscreet
+indiscretion
+indiscriminate
+indispensable
+indispose
+indisposition
+indisputable
+indissoluble
+indistinct
+indistinguishable
+indium
+individual
+individuate
+indivisible
+Indo
+Indochina
+Indochinese
+indoctrinate
+Indoeuropean
+indolent
+indomitable
+Indonesia
+indoor
+indorse
+indubitable
+induce
+inducible
+induct
+inductance
+inductee
+inductor
+indulge
+indulgent
+Indus
+industrial
+industrious
+industry
+indwell
+indy
+inebriate
+inedible
+ineducable
+ineffable
+ineffective
+ineffectual
+inefficacy
+inefficient
+inelastic
+inelegant
+ineligible
+ineluctable
+inept
+inequality
+inequitable
+inequity
+inequivalent
+ineradicable
+inert
+inertance
+inertia
+inertial
+inescapable
+inessential
+inestimable
+inevitable
+inexact
+inexcusable
+inexhaustible
+inexorable
+inexpedient
+inexpensive
+inexperience
+inexpert
+inexpiable
+inexplainable
+inexplicable
+inexplicit
+inexpressible
+inextinguishable
+inextricable
+infallible
+infamous
+infamy
+infant
+infanticide
+infantile
+infantry
+infantryman
+infantrymen
+infarct
+infatuate
+infeasible
+infect
+infectious
+infelicitous
+infelicity
+infer
+inference
+inferential
+inferior
+infernal
+inferno
+inferred
+inferring
+infertile
+infest
+infestation
+infidel
+infield
+infighting
+infiltrate
+infima
+infimum
+infinite
+infinitesimal
+infinitive
+infinitude
+infinitum
+infinity
+infirm
+infirmary
+infix
+inflame
+inflammable
+inflammation
+inflammatory
+inflate
+inflater
+inflationary
+inflect
+inflexible
+inflict
+inflorescent
+inflow
+influence
+influent
+influential
+influenza
+influx
+info
+inform
+informal
+informant
+information
+informative
+infra
+infract
+infrared
+infrastructure
+infrequent
+infringe
+infuriate
+infuse
+infusible
+infusion
+infusoria
+ingather
+ingenious
+ingenuity
+ingenuous
+Ingersoll
+ingest
+ingestible
+ingestion
+inglorious
+ingot
+ingrained
+Ingram
+ingrate
+ingratiate
+ingratitude
+ingredient
+ingrown
+inhabit
+inhabitant
+inhabitation
+inhalation
+inhale
+inharmonious
+inhere
+inherent
+inherit
+inheritance
+inheritor
+inhibit
+inhibition
+inhibitor
+inhibitory
+inholding
+inhomogeneity
+inhomogeneous
+inhospitable
+inhuman
+inhumane
+inimical
+inimitable
+iniquitous
+iniquity
+initial
+initiate
+inject
+injudicious
+Injun
+injunct
+injure
+injurious
+injury
+injustice
+ink
+inkling
+inlaid
+inland
+inlay
+inlet
+Inman
+inmate
+inn
+innard
+innate
+innermost
+innkeeper
+innocent
+innocuous
+innovate
+innuendo
+innumerable
+inoculate
+inoperable
+inoperative
+inopportune
+inordinate
+inorganic
+input
+inputting
+inquest
+inquire
+inquiry
+inquisition
+inquisitive
+inquisitor
+inroad
+insane
+insatiable
+inscribe
+inscription
+inscrutable
+insect
+insecticide
+insectivore
+insectivorous
+insecure
+inseminate
+insensible
+insensitive
+inseparable
+insert
+inset
+inshore
+inside
+insidious
+insight
+insightful
+insignia
+insignificant
+insincere
+insinuate
+insipid
+insist
+insistent
+insofar
+insolate
+insolent
+insoluble
+insolvable
+insolvent
+insomnia
+insomniac
+insouciant
+inspect
+inspector
+inspiration
+inspire
+instable
+install
+installation
+instant
+instantaneous
+instantiate
+instar
+instead
+instep
+instigate
+instill
+instillation
+instinct
+instinctual
+institute
+institution
+instruct
+instructor
+instrument
+instrumentation
+insubordinate
+insubstantial
+insufferable
+insufficient
+insular
+insulate
+insulin
+insult
+insuperable
+insupportable
+insuppressible
+insurance
+insure
+insurgent
+insurmountable
+insurrect
+intact
+intake
+intangible
+integer
+integrable
+integral
+integrand
+integrate
+integrity
+integument
+intellect
+intellectual
+intelligent
+intelligentsia
+intelligible
+intemperance
+intemperate
+intend
+intendant
+intense
+intensify
+intensive
+intent
+intention
+inter
+intercalate
+intercept
+interception
+interceptor
+intercom
+interdict
+interdigitate
+interest
+interfere
+interference
+interferometer
+interferon
+interim
+interior
+interject
+interlude
+intermediary
+intermit
+intermittent
+intern
+internal
+internescine
+Interpol
+interpolate
+interpolatory
+interpret
+interpretation
+interpretive
+interregnum
+interrogate
+interrogatory
+interrupt
+interruptible
+interruption
+intersect
+intersperse
+interstice
+interstitial
+interval
+intervene
+intervenor
+intervention
+interviewee
+intestate
+intestinal
+intestine
+intimacy
+intimal
+intimate
+intimater
+intimidate
+into
+intolerable
+intolerant
+intonate
+intone
+intoxicant
+intoxicate
+intra
+intractable
+intransigent
+intransitive
+intrepid
+intricacy
+intricate
+intrigue
+intrinsic
+introduce
+introduction
+introductory
+introit
+introject
+introspect
+introversion
+introvert
+intrude
+intrusion
+intrusive
+intuit
+intuition
+intuitive
+inundate
+inure
+invade
+invalid
+invalidate
+invaluable
+invariable
+invariant
+invasion
+invasive
+invective
+inveigh
+inveigle
+invent
+invention
+inventive
+inventor
+inventory
+Inverness
+inverse
+inversion
+invert
+invertebrate
+invertible
+invest
+investigate
+investigatory
+investor
+inveterate
+inviable
+invidious
+invigorate
+invincible
+inviolable
+inviolate
+invisible
+invitation
+invite
+invitee
+invocable
+invocate
+invoice
+invoke
+involuntary
+involute
+involution
+involutorial
+involve
+invulnerable
+inward
+Io
+iodate
+iodide
+iodinate
+iodine
+ion
+ionic
+ionosphere
+ionospheric
+iota
+Iowa
+ipecac
+ipsilateral
+ipso
+IQ
+IR
+Ira
+Iran
+Iranian
+Iraq
+Iraqi
+irate
+ire
+Ireland
+Irene
+iridium
+iris
+Irish
+Irishman
+Irishmen
+irk
+irksome
+Irma
+iron
+ironbound
+ironic
+ironside
+ironstone
+ironwood
+irony
+Iroquois
+irradiate
+irrational
+Irrawaddy
+irreclaimable
+irreconcilable
+irreconciliable
+irrecoverable
+irredeemable
+irredentism
+irredentist
+irreducible
+irrefutable
+irregular
+irrelevant
+irremediable
+irremovable
+irreparable
+irreplaceable
+irrepressible
+irreproachable
+irreproducible
+irresistible
+irresolute
+irresolution
+irresolvable
+irrespective
+irresponsible
+irretrievable
+irreverent
+irreversible
+irrevocable
+irrigate
+irritable
+irritant
+irritate
+irruption
+IRS
+Irvin
+Irvine
+Irving
+Irwin
+i's
+is
+Isaac
+Isaacson
+Isabel
+Isabella
+Isadore
+Isaiah
+isentropic
+Isfahan
+Ising
+isinglass
+Isis
+Islam
+Islamabad
+Islamic
+island
+isle
+islet
+isn't
+isochronal
+isochronous
+isocline
+isolate
+Isolde
+isomer
+isomorph
+isomorphic
+isopleth
+isotherm
+isotope
+isotropy
+Israel
+Israeli
+Israelite
+issuant
+issue
+Istanbul
+isthmus
+Istvan
+it
+Italian
+italic
+Italy
+itch
+itchy
+it'd
+item
+iterate
+Ithaca
+itinerant
+itinerary
+it'll
+Ito
+itself
+IT&T
+ITT
+iv
+Ivan
+Ivanhoe
+I've
+Iverson
+ivory
+ivy
+ix
+Izvestia
+j
+jab
+Jablonsky
+jack
+jackal
+jackanapes
+jackass
+jackboot
+jackdaw
+jacket
+Jackie
+jackknife
+Jackman
+jackpot
+Jackson
+Jacksonville
+Jacky
+JACM
+Jacob
+Jacobean
+Jacobi
+Jacobian
+Jacobite
+Jacobsen
+Jacobson
+Jacobus
+Jacqueline
+Jacques
+jade
+Jaeger
+jag
+jagging
+jaguar
+Jaime
+Jakarta
+jake
+jalopy
+jam
+Jamaica
+jamboree
+James
+Jamestown
+Jan
+Jane
+Janeiro
+Janet
+jangle
+Janice
+janissary
+janitor
+janitorial
+Janos
+Jansenist
+January
+Janus
+Japan
+Japanese
+jar
+jargon
+Jarvin
+Jason
+jasper
+jaundice
+jaunty
+Java
+java
+javelin
+jaw
+jawbone
+jay
+jazz
+jazzy
+jealous
+jealousy
+jean
+Jeannie
+Jed
+jeep
+Jeff
+Jefferson
+Jeffrey
+Jehovah
+jejune
+jejunum
+jelly
+jellyfish
+Jenkins
+Jennie
+Jennifer
+Jennings
+jenny
+Jensen
+jeopard
+jeopardy
+Jeremiah
+Jeremy
+Jeres
+Jericho
+jerk
+jerky
+Jeroboam
+Jerome
+jerry
+jersey
+Jerusalem
+jess
+Jesse
+Jessica
+Jessie
+jest
+Jesuit
+Jesus
+jet
+jetliner
+jettison
+Jew
+jewel
+Jewell
+jewelry
+Jewett
+Jewish
+jibe
+jiffy
+jig
+jigging
+jiggle
+jigsaw
+Jill
+jilt
+Jim
+Jimenez
+Jimmie
+jimmy
+jingle
+jinx
+jitter
+jitterbug
+jittery
+jive
+Jo
+Joan
+Joanna
+Joanne
+Joaquin
+job
+jobholder
+jock
+jockey
+jockstrap
+jocose
+jocular
+jocund
+Joe
+Joel
+joey
+jog
+jogging
+joggle
+Johann
+Johanna
+Johannes
+Johannesburg
+Johansen
+Johanson
+John
+Johnny
+Johnsen
+Johnson
+Johnston
+Johnstown
+join
+joint
+joke
+Joliet
+Jolla
+jolly
+jolt
+Jon
+Jonas
+Jonathan
+Jones
+jonquil
+Jordan
+Jorge
+Jorgensen
+Jorgenson
+Jose
+Josef
+Joseph
+Josephine
+Josephson
+Josephus
+Joshua
+Josiah
+joss
+jostle
+jot
+joule
+jounce
+journal
+journalese
+journey
+journeyman
+journeymen
+joust
+Jovanovich
+Jove
+jovial
+Jovian
+jowl
+jowly
+joy
+Joyce
+joyful
+joyous
+joyride
+joystick
+Jr
+j's
+Juan
+Juanita
+jubilant
+jubilate
+Judaica
+Judaism
+Judas
+Judd
+Jude
+judge
+judicable
+judicatory
+judicature
+judicial
+judiciary
+judicious
+Judith
+judo
+Judson
+Judy
+jug
+jugate
+juggernaut
+jugging
+juggle
+Jugoslavia
+juice
+juicy
+juju
+jujube
+juke
+jukebox
+Jukes
+julep
+Jules
+Julia
+Julie
+Juliet
+Julio
+Julius
+July
+jumble
+jumbo
+jump
+jumpy
+junco
+junction
+junctor
+juncture
+June
+Juneau
+Jung
+Jungian
+jungle
+junior
+juniper
+junk
+junkerdom
+junketeer
+junky
+Juno
+junta
+Jupiter
+Jura
+Jurassic
+jure
+juridic
+jurisdiction
+jurisprudent
+jurisprudential
+juror
+jury
+just
+justice
+justiciable
+justify
+Justine
+Justinian
+jut
+jute
+Jutish
+Jutland
+juvenile
+juxtapose
+juxtaposition
+k
+Kabuki
+Kabul
+Kaddish
+Kafka
+Kafkaesque
+Kahn
+kaiser
+Kajar
+Kalamazoo
+kale
+kaleidescope
+kaleidoscope
+kalmia
+Kalmuk
+Kamchatka
+kamikaze
+Kampala
+Kampuchea
+Kane
+kangaroo
+Kankakee
+Kannada
+Kansas
+Kant
+kaolin
+kaolinite
+Kaplan
+kapok
+kappa
+Karachi
+Karamazov
+karate
+Karen
+Karl
+karma
+Karol
+Karp
+karyatid
+Kashmir
+Kaskaskia
+Kate
+Katharine
+Katherine
+Kathleen
+Kathy
+Katie
+Katmandu
+Katowice
+katydid
+Katz
+Kauffman
+Kaufman
+kava
+Kay
+kayo
+kazoo
+Keaton
+Keats
+keddah
+keel
+keelson
+keen
+Keenan
+keep
+keeshond
+keg
+Keith
+Keller
+Kelley
+Kellogg
+kelly
+kelp
+Kelsey
+Kelvin
+Kemp
+ken
+Kendall
+Kennan
+Kennecott
+Kennedy
+kennel
+Kenneth
+Kenney
+keno
+Kensington
+Kent
+Kenton
+Kentucky
+Kenya
+Kenyon
+Kepler
+kept
+kerchief
+Kermit
+kern
+kernel
+Kernighan
+kerosene
+Kerouac
+Kerr
+kerry
+kerygma
+Kessler
+kestrel
+ketch
+ketchup
+keto
+ketone
+ketosis
+Kettering
+kettle
+Kevin
+key
+keyboard
+Keyes
+keyhole
+Keynes
+Keynesian
+keynote
+keypunch
+keystone
+keyword
+khaki
+khan
+Khartoum
+Khmer
+Khrushchev
+kibbutzim
+kibitz
+kick
+kickback
+kickoff
+kid
+Kidde
+kiddie
+kidnap
+kidnapped
+kidnapping
+kidney
+Kieffer
+Kiev
+Kiewit
+Kigali
+Kikuyu
+Kilgore
+Kilimanjaro
+kill
+killdeer
+killjoy
+kilohm
+Kim
+Kimball
+Kimberly
+kimono
+kin
+kind
+kindergarten
+kindle
+kindred
+kinematic
+kinesic
+kinetic
+king
+kingbird
+kingdom
+kingfisher
+kinglet
+kingpin
+Kingsbury
+Kingsley
+Kingston
+kink
+kinkajou
+kinky
+Kinney
+Kinshasha
+kinsman
+kinsmen
+kiosk
+Kiowa
+Kipling
+Kirby
+Kirchner
+Kirchoff
+kirk
+Kirkland
+Kirkpatrick
+Kirov
+kiss
+kit
+Kitakyushu
+kitchen
+kitchenette
+kite
+kitten
+kittenish
+kittle
+kitty
+kiva
+kivu
+Kiwanis
+kiwi
+Klan
+Klaus
+klaxon
+kleenex
+Klein
+Kline
+Klux
+klystron
+knack
+Knapp
+knapsack
+Knauer
+knead
+knee
+kneecap
+kneel
+knelt
+knew
+knick
+Knickerbocker
+knife
+knight
+Knightsbridge
+knit
+knives
+knob
+knobby
+knock
+knockdown
+knockout
+knoll
+Knossos
+knot
+Knott
+knotty
+know
+knoweth
+knowhow
+knowledge
+knowledgeable
+Knowles
+Knowlton
+known
+Knox
+Knoxville
+knuckle
+knuckleball
+Knudsen
+Knudson
+knurl
+Knutsen
+Knutson
+koala
+Kobayashi
+Koch
+Kochab
+Kodachrome
+kodak
+Kodiak
+Koenig
+Koenigsberg
+kohlrabi
+koinonia
+kola
+kolkhoz
+kombu
+Kong
+Konrad
+Koppers
+Koran
+Korea
+kosher
+Kovacs
+Kowalewski
+Kowalski
+Kowloon
+kraft
+Krakatoa
+Krakow
+Kramer
+Krause
+kraut
+Krebs
+Kremlin
+Kresge
+Krieger
+krill
+Krishna
+Kristin
+Kronecker
+Krueger
+Kruger
+krummholz
+Kruse
+krypton
+KS
+k's
+Ku
+kudo
+kudzu
+Kuhn
+kulak
+Kumar
+kumquat
+Kurd
+Kurt
+Kuwait
+kwashiorkor
+KY
+Kyle
+Kyoto
+l
+la
+lab
+Laban
+label
+labia
+labial
+labile
+lability
+labium
+laboratory
+laborious
+labour
+Labrador
+labradorite
+labyrinth
+lac
+lace
+lacerate
+Lacerta
+lacewing
+Lachesis
+lachrymose
+lack
+lackadaisic
+lackey
+laconic
+lacquer
+lacrosse
+lactate
+lactose
+lacuna
+lacunae
+lacustrine
+lacy
+lad
+laden
+ladle
+lady
+ladybird
+ladybug
+ladyfern
+Lafayette
+lag
+lager
+lagging
+lagoon
+Lagos
+Lagrange
+Lagrangian
+Laguerre
+Lahore
+laid
+Laidlaw
+lain
+lair
+laissez
+laity
+lake
+Lakehurst
+lakeside
+lakh
+lam
+lama
+Lamar
+Lamarck
+lamb
+lambda
+lambert
+lame
+lamellar
+lament
+lamentation
+laminar
+laminate
+lamp
+lampblack
+lamplight
+lampoon
+lamprey
+Lana
+Lancashire
+Lancaster
+lance
+Lancelot
+lancet
+land
+landau
+landfill
+landhold
+Landis
+landlady
+landlocked
+landlord
+landlubber
+landmark
+landmass
+landowner
+landowning
+landscape
+landslide
+lane
+Lang
+Lange
+Langley
+Langmuir
+language
+languid
+languish
+langur
+Lanka
+lanky
+Lansing
+lantern
+lanthanide
+lanthanum
+Lao
+Laocoon
+Laos
+Laotian
+lap
+lapel
+lapelled
+lapidary
+Laplace
+lappet
+lapse
+Laramie
+larceny
+larch
+lard
+Laredo
+Lares
+large
+largemouth
+largesse
+lariat
+lark
+Larkin
+larkspur
+Larry
+Lars
+Larsen
+Larson
+larva
+larvae
+larval
+laryngeal
+larynges
+larynx
+lascar
+lascivious
+lase
+lash
+lass
+lasso
+last
+Laszlo
+latch
+late
+latent
+later
+latera
+lateral
+Lateran
+laterite
+latex
+lath
+lathe
+Lathrop
+Latin
+Latinate
+latitude
+latitudinal
+latitudinary
+Latrobe
+latter
+lattice
+latus
+Latvia
+laud
+laudanum
+laudatory
+Lauderdale
+Laue
+laugh
+laughingstock
+Laughlin
+laughter
+launch
+launder
+laundry
+laura
+laureate
+laurel
+Lauren
+Laurent
+Laurentian
+Laurie
+Lausanne
+lava
+lavabo
+lavatory
+lavender
+lavish
+Lavoisier
+law
+lawbreaker
+lawbreaking
+lawful
+lawgiver
+lawgiving
+lawmake
+lawman
+lawmen
+lawn
+Lawrence
+lawrencium
+Lawson
+lawsuit
+lawyer
+lax
+laxative
+lay
+layette
+layman
+laymen
+layoff
+layout
+layperson
+Layton
+layup
+Lazarus
+laze
+lazy
+lazybones
+lea
+leach
+leachate
+lead
+leaden
+leadeth
+leadsman
+leadsmen
+leaf
+leaflet
+leafy
+league
+leak
+leakage
+leaky
+lean
+Leander
+leap
+leapfrog
+leapt
+Lear
+learn
+lease
+leasehold
+leash
+least
+leather
+leatherback
+leatherneck
+leatherwork
+leathery
+leave
+leaven
+Leavenworth
+Lebanese
+Lebanon
+lebensraum
+Lebesgue
+lecher
+lechery
+lectern
+lectionary
+lecture
+led
+ledge
+lee
+leech
+Leeds
+leek
+leer
+leery
+Leeuwenhoek
+leeward
+leeway
+left
+leftmost
+leftover
+leftward
+lefty
+leg
+legacy
+legal
+legate
+legatee
+legato
+legend
+legendary
+Legendre
+legerdemain
+legging
+leggy
+leghorn
+legible
+legion
+legislate
+legislature
+legitimacy
+legitimate
+legume
+leguminous
+Lehigh
+Lehman
+Leibniz
+Leigh
+Leighton
+Leila
+leisure
+leitmotif
+leitmotiv
+Leland
+lemma
+lemming
+lemon
+lemonade
+Lemuel
+lemur
+Len
+Lena
+lend
+length
+lengthen
+lengthwise
+lengthy
+lenient
+Lenin
+Leningrad
+Lennox
+Lenny
+Lenore
+lens
+lent
+Lenten
+lenticular
+lentil
+Leo
+Leon
+Leona
+Leonard
+Leonardo
+Leone
+Leonid
+leonine
+leopard
+Leopold
+leper
+lepidolite
+lepidopterist
+leprosy
+Leroy
+Lesbian
+lesion
+Leslie
+Lesotho
+less
+lessee
+lessen
+lesson
+lessor
+lest
+Lester
+let
+lethal
+lethargy
+Lethe
+Letitia
+letterhead
+letterman
+lettermen
+lettuce
+leucine
+Lev
+levee
+level
+lever
+leverage
+Levi
+leviathan
+Levin
+Levine
+Levis
+levitate
+Leviticus
+Levitt
+levity
+levulose
+levy
+lew
+lewd
+lewis
+lexical
+lexicographer
+lexicography
+lexicon
+Lexington
+Leyden
+liable
+liaison
+liana
+liar
+libation
+libel
+libelous
+liberal
+liberate
+Liberia
+libertarian
+libertine
+liberty
+libidinous
+libido
+Libra
+librarian
+library
+librate
+librettist
+libretto
+Libreville
+Libya
+lice
+licensable
+licensee
+licensor
+licentious
+lichen
+lick
+licorice
+lid
+lie
+Lieberman
+Liechtenstein
+lien
+lieu
+lieutenant
+life
+lifeblood
+lifeboat
+lifeguard
+lifelong
+lifespan
+lifestyle
+lifetime
+LIFO
+lift
+ligament
+ligand
+ligature
+Ligget
+Liggett
+light
+lighten
+lightface
+lightfooted
+lighthearted
+lighthouse
+lightning
+lightproof
+lightweight
+lignite
+lignum
+like
+likeable
+liken
+likewise
+Lila
+lilac
+Lilian
+Lillian
+Lilliputian
+Lilly
+lilt
+lily
+lim
+Lima
+limb
+limbic
+limbo
+lime
+limelight
+limerick
+limestone
+limit
+limitate
+limnology
+limousine
+limp
+limpet
+limpid
+limpkin
+Lin
+linchpin
+Lincoln
+Lind
+Linda
+Lindberg
+Lindbergh
+linden
+Lindholm
+Lindquist
+Lindsay
+Lindsey
+Lindstrom
+line
+lineage
+lineal
+linear
+linebacker
+lineman
+linemen
+linen
+lineprinter
+lineup
+linger
+lingerie
+lingo
+lingua
+lingual
+linguist
+liniment
+link
+linkage
+Linnaeus
+linoleic
+linoleum
+Linotype
+linseed
+lint
+Linton
+Linus
+lion
+Lionel
+lioness
+lip
+lipid
+Lippincott
+Lipschitz
+Lipscomb
+lipstick
+Lipton
+liquefaction
+liquefy
+liqueur
+liquid
+liquidate
+liquor
+Lisa
+Lisbon
+Lise
+lisle
+lisp
+Lissajous
+list
+listen
+lit
+litany
+literacy
+literal
+literary
+literate
+literature
+lithe
+lithic
+lithium
+lithograph
+lithography
+lithology
+lithosphere
+lithospheric
+Lithuania
+litigant
+litigate
+litigious
+litmus
+litterbug
+littermate
+little
+littleneck
+Littleton
+Litton
+littoral
+liturgic
+liturgy
+live
+liven
+Livermore
+Liverpool
+Liverpudlian
+liverwort
+livery
+livestock
+liveth
+livid
+Livingston
+livre
+Liz
+lizard
+Lizzie
+llama
+Lloyd
+lo
+load
+loaf
+loam
+loamy
+loan
+loanword
+loath
+loathe
+loathsome
+loaves
+lob
+lobar
+lobby
+lobe
+Lobelia
+loblolly
+lobo
+lobscouse
+lobster
+lobular
+lobule
+local
+locale
+locate
+loch
+loci
+lock
+Locke
+Lockhart
+Lockheed
+Lockian
+locknut
+lockout
+locksmith
+lockup
+Lockwood
+locomote
+locomotion
+locomotive
+locomotor
+locomotory
+locoweed
+locus
+locust
+locutor
+lodestone
+lodge
+lodgepole
+Lodowick
+Loeb
+l'oeil
+loess
+loft
+lofty
+log
+Logan
+logarithm
+logarithmic
+loge
+loggerhead
+logging
+logic
+logician
+login
+logistic
+logjam
+loin
+loincloth
+Loire
+Lois
+loiter
+Loki
+Lola
+loll
+lollipop
+lolly
+Lomb
+Lombard
+Lombardy
+Lome
+London
+lone
+lonesome
+long
+longevity
+Longfellow
+longhand
+longhorn
+longish
+longitude
+longitudinal
+longleg
+longstanding
+longtime
+longue
+longwinded
+look
+lookout
+lookup
+loom
+Loomis
+loon
+loop
+loophole
+loose
+looseleaf
+loosen
+loosestrife
+loot
+lop
+lope
+Lopez
+lopseed
+lopsided
+loquacious
+loquacity
+loquat
+lord
+lordosis
+lore
+Lorelei
+Loren
+Lorenz
+Lorinda
+loris
+Lorraine
+lorry
+losable
+lose
+loss
+lossy
+lost
+lot
+lotion
+Lotte
+lottery
+Lottie
+lotus
+Lou
+loud
+loudspeaker
+loudspeaking
+Louis
+Louisa
+Louise
+Louisiana
+Louisville
+lounge
+Lounsbury
+Lourdes
+louse
+lousewort
+lousy
+Louvre
+love
+lovebird
+Lovelace
+Loveland
+lovelorn
+low
+lowboy
+lowdown
+Lowe
+Lowell
+lowland
+Lowry
+lox
+loy
+loyal
+loyalty
+lozenge
+l's
+LSI
+LTV
+Lubbock
+Lubell
+lubricant
+lubricate
+lubricious
+lubricity
+Lucas
+Lucerne
+Lucia
+Lucian
+lucid
+Lucifer
+Lucille
+Lucius
+luck
+lucky
+lucrative
+lucre
+Lucretia
+Lucretius
+lucy
+ludicrous
+Ludlow
+Ludwig
+Lufthansa
+Luftwaffe
+lug
+luge
+luger
+luggage
+lugging
+lugubrious
+Luis
+luke
+lukewarm
+lull
+lullaby
+lulu
+lumbago
+lumbar
+lumber
+lumberjack
+lumberman
+lumbermen
+lumen
+luminance
+luminary
+luminescent
+luminosity
+luminous
+lummox
+lump
+lumpish
+Lumpur
+lumpy
+lunacy
+lunar
+lunary
+lunate
+lunatic
+lunch
+luncheon
+lunchroom
+lunchtime
+Lund
+Lundberg
+Lundquist
+lung
+lunge
+lupine
+Lura
+lurch
+lure
+lurid
+lurk
+Lusaka
+luscious
+lush
+lust
+lustful
+lustrous
+lusty
+lutanist
+lute
+lutetium
+Luther
+Lutheran
+Lutz
+lux
+luxe
+Luxembourg
+luxuriant
+luxuriate
+luxurious
+luxury
+Luzon
+L'vov
+lycee
+lycopodium
+Lydia
+lye
+lying
+Lykes
+Lyle
+Lyman
+lymph
+lymphocyte
+lymphoma
+lynch
+Lynchburg
+Lynn
+lynx
+Lyon
+Lyra
+lyre
+lyrebird
+lyric
+Lysenko
+lysergic
+lysine
+m
+ma
+Mabel
+Mac
+macabre
+Macadamia
+macaque
+MacArthur
+Macassar
+macaw
+Macbeth
+MacDonald
+MacDougall
+mace
+Macedon
+Macedonia
+macerate
+MacGregor
+Mach
+machete
+Machiavelli
+machination
+machine
+machinery
+machismo
+macho
+macintosh
+mack
+MacKenzie
+mackerel
+Mackey
+Mackinac
+Mackinaw
+mackintosh
+MacMahon
+MacMillan
+Macon
+macro
+macromolecular
+macromolecule
+macrophage
+macroscopic
+macrostructure
+mad
+Madagascar
+madam
+Madame
+madcap
+madden
+Maddox
+made
+Madeira
+Madeleine
+Madeline
+madhouse
+Madhya
+Madison
+madman
+madmen
+Madonna
+Madras
+Madrid
+madrigal
+Madsen
+madstone
+Mae
+maelstrom
+maestro
+Mafia
+Mafioso
+magazine
+Magdalene
+Magellanic
+magenta
+Maggie
+maggot
+maggoty
+magi
+magic
+magician
+magisterial
+magistrate
+magma
+magna
+magnanimity
+magnanimous
+magnate
+magnesia
+magnesite
+magnesium
+magnet
+magnetic
+magnetite
+magneto
+magnetron
+magnificent
+magnify
+magnitude
+magnolia
+magnum
+Magnuson
+Magog
+magpie
+Magruder
+maharaja
+Maharashtra
+Mahayana
+Mahayanist
+mahogany
+Mahoney
+maid
+maiden
+maidenhair
+maidservant
+Maier
+mail
+mailbox
+mailman
+mailmen
+maim
+main
+Maine
+mainframe
+mainland
+mainline
+mainstay
+mainstream
+maintain
+maintenance
+maitre
+majestic
+majesty
+major
+Majorca
+make
+makeshift
+makeup
+Malabar
+maladapt
+maladaptive
+maladjust
+maladroit
+malady
+Malagasy
+malaise
+malaprop
+malaria
+malarial
+Malawi
+Malay
+Malaysia
+Malcolm
+malconduct
+malcontent
+Malden
+maldistribute
+Maldive
+male
+maledict
+malevolent
+malfeasant
+malformation
+malformed
+malfunction
+Mali
+malice
+malicious
+malign
+malignant
+mall
+mallard
+malleable
+mallet
+Mallory
+mallow
+malnourished
+malnutrition
+malocclusion
+Malone
+Maloney
+malposed
+malpractice
+Malraux
+malt
+Malta
+Maltese
+Malthus
+Malthusian
+Malton
+maltose
+maltreat
+maltster
+mambo
+mamma
+mammal
+mammalian
+mammary
+mammoth
+man
+mana
+manage
+manageable
+managerial
+Managua
+Manama
+manatee
+Manchester
+Manchuria
+mandamus
+mandarin
+mandate
+mandatory
+mandible
+mandrake
+mandrel
+mandrill
+mane
+maneuver
+Manfred
+manganese
+mange
+mangel
+mangle
+mango
+mangrove
+mangy
+Manhattan
+manhole
+mania
+maniac
+maniacal
+manic
+manicure
+manifest
+manifestation
+manifesto
+manifold
+manikin
+Manila
+manioc
+manipulable
+manipulate
+Manitoba
+mankind
+Manley
+Mann
+manna
+mannequin
+mannitol
+manometer
+manor
+manpower
+manse
+manservant
+Mansfield
+mansion
+manslaughter
+mantel
+mantelpiece
+mantic
+mantis
+mantissa
+mantle
+mantrap
+manual
+Manuel
+manufacture
+manumission
+manumit
+manumitted
+manure
+manuscript
+Manville
+many
+manzanita
+Mao
+Maori
+map
+maple
+mar
+marathon
+maraud
+marble
+Marc
+Marceau
+Marcel
+Marcello
+march
+Marcia
+Marco
+Marcus
+Marcy
+Mardi
+mare
+Margaret
+margarine
+Margery
+margin
+marginal
+marginalia
+Margo
+Marguerite
+maria
+Marianne
+Marie
+Marietta
+marigold
+marijuana
+Marilyn
+marimba
+Marin
+marina
+marinade
+marinate
+marine
+Marino
+Mario
+Marion
+marionette
+marital
+maritime
+marjoram
+Marjorie
+Marjory
+mark
+market
+marketeer
+marketplace
+marketwise
+Markham
+Markov
+Markovian
+marksman
+marksmen
+Marlboro
+Marlborough
+Marlene
+marlin
+Marlowe
+marmalade
+marmoset
+marmot
+maroon
+marque
+marquee
+marquess
+Marquette
+marquis
+marriage
+marriageable
+Marrietta
+Marriott
+marrow
+marrowbone
+marry
+Marseilles
+marsh
+Marsha
+marshal
+Marshall
+marshland
+marshmallow
+marshy
+marsupial
+mart
+marten
+martensite
+Martha
+martial
+Martian
+martin
+Martinez
+martingale
+martini
+Martinique
+Martinson
+Marty
+martyr
+martyrdom
+marvel
+marvelous
+Marvin
+Marx
+Mary
+Maryland
+marzipan
+mascara
+masculine
+maser
+Maseru
+mash
+mask
+masochism
+masochist
+mason
+Masonic
+Masonite
+masonry
+masque
+masquerade
+mass
+Massachusetts
+massacre
+massage
+masseur
+Massey
+massif
+massive
+mast
+masterful
+mastermind
+masterpiece
+mastery
+mastic
+mastiff
+mastodon
+mat
+match
+matchbook
+matchmake
+mate
+Mateo
+mater
+material
+materiel
+maternal
+maternity
+math
+mathematic
+mathematician
+Mathews
+Mathewson
+Mathias
+Mathieu
+Matilda
+matinal
+matinee
+matins
+Matisse
+matriarch
+matriarchal
+matriarchy
+matrices
+matriculate
+matrilineal
+matrimonial
+matrimony
+matrix
+matroid
+matron
+Matson
+Matsumoto
+matte
+Matthew
+mattock
+mattress
+Mattson
+maturate
+mature
+maudlin
+maul
+Maureen
+Maurice
+Mauricio
+Maurine
+Mauritania
+Mauritius
+mausoleum
+mauve
+maverick
+Mavis
+maw
+mawkish
+Mawr
+max
+maxim
+maxima
+maximal
+Maximilian
+maximum
+Maxine
+maxwell
+Maxwellian
+may
+Maya
+mayapple
+maybe
+Mayer
+Mayfair
+Mayflower
+mayfly
+mayhem
+Maynard
+Mayo
+mayonnaise
+mayor
+mayoral
+mayst
+Mazda
+maze
+mazurka
+MBA
+Mbabane
+McAdams
+McAllister
+McBride
+McCabe
+McCall
+McCallum
+McCann
+McCarthy
+McCarty
+McCauley
+McClain
+McClellan
+McClure
+McCluskey
+McConnel
+McConnell
+McCormick
+McCoy
+McCracken
+McCullough
+McDaniel
+McDermott
+McDonald
+McDonnell
+McDougall
+McDowell
+McElroy
+McFadden
+McFarland
+McGee
+McGill
+McGinnis
+McGovern
+McGowan
+McGrath
+McGraw
+McGregor
+McGuire
+McHugh
+McIntosh
+McIntyre
+McKay
+McKee
+McKenna
+McKenzie
+McKeon
+McKesson
+McKinley
+McKinney
+McKnight
+McLaughlin
+McLean
+McLeod
+McMahon
+McMillan
+McMullen
+McNally
+McNaughton
+McNeil
+McNulty
+McPherson
+MD
+me
+mead
+meadow
+meadowland
+meadowlark
+meadowsweet
+meager
+meal
+mealtime
+mealy
+mean
+meander
+meaningful
+meant
+meantime
+meanwhile
+measle
+measure
+meat
+meaty
+Mecca
+mechanic
+mechanism
+mechanist
+mecum
+medal
+medallion
+meddle
+Medea
+Medford
+media
+medial
+median
+mediate
+medic
+medicate
+Medici
+medicinal
+medicine
+medico
+mediocre
+mediocrity
+meditate
+Mediterranean
+medium
+medlar
+medley
+Medusa
+meek
+meet
+meetinghouse
+Meg
+megabit
+megabyte
+megahertz
+megalomania
+megalomaniac
+megalopolis
+megaton
+megavolt
+megawatt
+megaword
+megohm
+Meier
+Meiji
+meiosis
+Meistersinger
+Mekong
+Mel
+melamine
+melancholy
+Melanesia
+melange
+Melanie
+melanin
+melanism
+melanoma
+Melbourne
+Melcher
+meld
+melee
+Melinda
+meliorate
+Melissa
+Mellon
+mellow
+melodic
+melodious
+melodrama
+melodramatic
+melody
+melon
+Melpomene
+melt
+meltdown
+Melville
+Melvin
+member
+membrane
+memento
+memo
+memoir
+memorabilia
+memorable
+memoranda
+memorandum
+memorial
+memory
+Memphis
+men
+menace
+menagerie
+menarche
+mend
+mendacious
+mendacity
+Mendel
+mendelevium
+Mendelian
+Mendelssohn
+Menelaus
+menfolk
+menhaden
+menial
+meningitis
+meniscus
+Menlo
+Mennonite
+menopausal
+menopause
+Menorca
+menstrual
+menstruate
+mensurable
+mensuration
+mental
+mention
+mentor
+menu
+Menzies
+meow
+Mephistopheles
+mercantile
+Mercator
+Mercedes
+mercenary
+mercer
+merchandise
+merchant
+merciful
+Merck
+mercurial
+mercuric
+mercury
+mercy
+mere
+Meredith
+meretricious
+merganser
+merge
+meridian
+meridional
+meringue
+merit
+meritorious
+Merle
+merlin
+mermaid
+Merriam
+Merrill
+Merrimack
+merriment
+Merritt
+merry
+merrymake
+Mervin
+mesa
+mescal
+mescaline
+mesenteric
+mesh
+mesmeric
+mesoderm
+meson
+Mesopotamia
+Mesozoic
+mesquite
+mess
+message
+messenger
+Messiah
+messiah
+messianic
+messieurs
+Messrs
+messy
+mestizo
+met
+metabole
+metabolic
+metabolism
+metabolite
+metal
+metallic
+metalliferous
+metallography
+metalloid
+metallurgic
+metallurgist
+metallurgy
+metalwork
+metamorphic
+metamorphism
+metamorphose
+metamorphosis
+metaphor
+metaphoric
+metazoa
+metazoan
+Metcalf
+mete
+meteor
+meteoric
+meteorite
+meteoritic
+meteorology
+meter
+methacrylate
+methane
+methanol
+methionine
+method
+methodic
+methodology
+Methuen
+Methuselah
+methyl
+methylene
+meticulous
+metier
+metonymy
+metric
+metro
+metronome
+metropolis
+metropolitan
+mettle
+mettlesome
+Metzler
+mew
+Mexican
+Mexico
+Meyer
+mezzanine
+mezzo
+mi
+Miami
+miaow
+miasma
+miasmal
+mica
+mice
+Michael
+Michaelangelo
+Michel
+Michelangelo
+Michele
+Michelin
+Michelson
+michigan
+Mickelson
+Mickey
+Micky
+micro
+microbe
+microbial
+microcosm
+micrography
+micron
+Micronesia
+microscopy
+mid
+Midas
+midband
+midday
+middle
+Middlebury
+middleman
+middlemen
+Middlesex
+Middleton
+Middletown
+middleweight
+midge
+midget
+midland
+midmorn
+midnight
+midpoint
+midrange
+midscale
+midsection
+midshipman
+midshipmen
+midspan
+midst
+midstream
+midterm
+midway
+midweek
+Midwest
+Midwestern
+midwife
+midwinter
+midwives
+midyear
+mien
+miff
+mig
+might
+mightn't
+mighty
+mignon
+migrant
+migrate
+migratory
+Miguel
+mike
+mila
+Milan
+milch
+mild
+mildew
+Mildred
+mile
+mileage
+Miles
+milestone
+milieu
+militant
+militarism
+militarist
+military
+militate
+militia
+militiaman
+militiamen
+milk
+milkweed
+milky
+mill
+Millard
+millenarian
+millenia
+millennia
+millennium
+millet
+Millie
+Millikan
+millinery
+million
+millionaire
+millionfold
+millionth
+millipede
+millstone
+milord
+milt
+Milton
+Miltonic
+Milwaukee
+mimeograph
+mimesis
+mimetic
+Mimi
+mimic
+mimicked
+mimicking
+mimicry
+mimosa
+min
+minaret
+mince
+mincemeat
+mind
+Mindanao
+mindful
+mine
+minefield
+mineral
+mineralogy
+Minerva
+minestrone
+minesweeper
+mingle
+mini
+miniature
+minicomputer
+minim
+minima
+minimal
+minimax
+minimum
+minion
+ministerial
+ministry
+mink
+Minneapolis
+Minnesota
+Minnie
+minnow
+Minoan
+minor
+Minos
+minot
+Minotaur
+Minsk
+Minsky
+minstrel
+minstrelsy
+mint
+minuend
+minuet
+minus
+minuscule
+minute
+minuteman
+minutemen
+minutiae
+Miocene
+Mira
+miracle
+miraculous
+mirage
+Miranda
+mire
+Mirfak
+Miriam
+mirror
+mirth
+misanthrope
+misanthropic
+miscegenation
+miscellaneous
+miscellany
+mischievous
+miscible
+miscreant
+miser
+misery
+misnomer
+misogynist
+misogyny
+miss
+misshapen
+missile
+mission
+missionary
+Mississippi
+Mississippian
+missive
+Missoula
+Missouri
+Missy
+mist
+mistletoe
+mistress
+misty
+MIT
+Mitchell
+mite
+miterwort
+mitigate
+mitochondria
+mitosis
+mitral
+mitre
+mitt
+mitten
+mix
+mixture
+mixup
+Mizar
+MN
+mnemonic
+MO
+moan
+moat
+mob
+mobcap
+Mobil
+mobile
+mobility
+mobster
+moccasin
+mocha
+mock
+mockernut
+mockery
+mockingbird
+mockup
+modal
+mode
+model
+modem
+moderate
+modern
+modest
+Modesto
+modesty
+modicum
+modify
+modish
+modular
+modulate
+module
+moduli
+modulo
+modulus
+Moe
+Moen
+Mogadiscio
+Moghul
+Mohammed
+Mohammedan
+Mohawk
+Mohr
+moiety
+Moines
+moire
+Moiseyev
+moist
+moisten
+moisture
+molal
+molar
+molasses
+mold
+Moldavia
+moldboard
+moldy
+mole
+molecular
+molecule
+molehill
+molest
+Moliere
+Moline
+Moll
+Mollie
+mollify
+mollusk
+Molly
+mollycoddle
+Moloch
+molt
+molten
+Moluccas
+molybdate
+molybdenite
+molybdenum
+moment
+momenta
+momentary
+momentous
+momentum
+mommy
+Mona
+Monaco
+monad
+monadic
+monarch
+monarchic
+monarchy
+Monash
+monastery
+monastic
+monaural
+Monday
+monel
+monetarism
+monetary
+money
+moneymake
+moneywort
+Mongolia
+mongoose
+monic
+Monica
+monies
+monitor
+monitory
+monk
+monkey
+monkeyflower
+monkish
+Monmouth
+Monoceros
+monochromator
+monocular
+monogamous
+monogamy
+monolith
+monologist
+monologue
+monomer
+monomeric
+monomial
+Monongahela
+monopoly
+monotonous
+monotreme
+monoxide
+Monroe
+Monrovia
+Monsanto
+monsieur
+monsoon
+monster
+monstrosity
+monstrous
+Mont
+montage
+Montague
+Montana
+Montclair
+monte
+Montenegrin
+Monterey
+Monteverdi
+Montevideo
+Montgomery
+month
+Monticello
+Montmartre
+Montpelier
+Montrachet
+Montreal
+Monty
+monument
+moo
+mooch
+mood
+moody
+moon
+moonbeam
+Mooney
+moonlight
+moonlit
+moor
+Moore
+Moorish
+moose
+moot
+mop
+moraine
+moral
+morale
+Moran
+morass
+moratorium
+Moravia
+morbid
+more
+morel
+Moreland
+moreover
+Moresby
+Morgan
+morgen
+morgue
+Moriarty
+moribund
+Morley
+Mormon
+morn
+Moroccan
+Morocco
+moron
+morose
+morpheme
+morphemic
+morphine
+morphism
+morphology
+morphophonemic
+Morrill
+morris
+Morrison
+Morrissey
+Morristown
+morrow
+Morse
+morsel
+mort
+mortal
+mortar
+mortem
+mortgage
+mortgagee
+mortgagor
+mortician
+mortify
+mortise
+Morton
+mortuary
+mosaic
+Moscow
+Moser
+Moses
+Moslem
+mosque
+mosquito
+mosquitoes
+moss
+mossy
+most
+mot
+motel
+motet
+moth
+mother
+motherland
+motif
+motion
+motivate
+motive
+motley
+motor
+motorcade
+motorcar
+motorcycle
+Motorola
+mottle
+motto
+mould
+Moulton
+mound
+mount
+mountain
+mountaineer
+mountainous
+mountainside
+mountaintop
+mountebank
+mourn
+mournful
+mouse
+mousse
+moustache
+mousy
+mouth
+mouthful
+mouthpart
+mouthpiece
+Mouton
+move
+movie
+mow
+Moyer
+Mozart
+mozzarella
+MPH
+Mr
+Mrs
+Ms
+m's
+Mt
+mu
+much
+mucilage
+muck
+mucosa
+mucus
+mud
+Mudd
+muddle
+muddlehead
+muddy
+mudguard
+mudhole
+mudsling
+Mueller
+Muenster
+muezzin
+muff
+muffin
+muffle
+mug
+mugging
+muggy
+mugho
+Muir
+Mukden
+mukluk
+mulatto
+mulberry
+mulch
+mulct
+mule
+mulish
+mull
+mullah
+mullein
+Mullen
+mulligan
+mulligatawny
+mullion
+multi
+Multics
+multifarious
+multinomial
+multiple
+multiplet
+multiplex
+multiplexor
+multiplicand
+multiplication
+multiplicative
+multiplicity
+multitude
+multitudinous
+mum
+mumble
+Mumford
+mummify
+mummy
+munch
+Muncie
+mundane
+mung
+Munich
+municipal
+munificent
+munition
+Munson
+muon
+Muong
+mural
+murder
+murderous
+muriatic
+Muriel
+murk
+murky
+murmur
+Murphy
+Murray
+murre
+Muscat
+muscle
+Muscovite
+Muscovy
+muscular
+musculature
+muse
+museum
+mush
+mushroom
+mushy
+music
+musicale
+musician
+musicology
+musk
+Muskegon
+muskellunge
+musket
+muskmelon
+muskox
+muskoxen
+muskrat
+musky
+muslim
+muslin
+mussel
+must
+mustache
+mustachio
+mustang
+mustard
+mustn't
+musty
+mutagen
+mutandis
+mutant
+mutate
+mutatis
+mute
+mutilate
+mutineer
+mutiny
+mutt
+mutter
+mutton
+mutual
+mutuel
+Muzak
+Muzo
+muzzle
+my
+Mycenae
+Mycenaean
+mycobacteria
+mycology
+mycoplasma
+mycorrhiza
+myel
+myeline
+myeloid
+Myers
+mylar
+mynah
+Mynheer
+myocardial
+myocardium
+myofibril
+myoglobin
+myopia
+myopic
+myosin
+Myra
+myriad
+Myron
+myrrh
+myrtle
+myself
+Mysore
+mysterious
+mystery
+mystic
+mystify
+mystique
+myth
+mythic
+mythology
+n
+NAACP
+nab
+Nabisco
+Nadine
+nadir
+nag
+Nagasaki
+nagging
+Nagoya
+Nagy
+naiad
+nail
+Nair
+Nairobi
+naive
+naivete
+Nakayama
+naked
+name
+nameable
+nameplate
+namesake
+Nan
+Nancy
+Nanette
+Nanking
+nanosecond
+Nantucket
+Naomi
+nap
+napkin
+Naples
+Napoleon
+Napoleonic
+Narbonne
+narcissist
+narcissus
+narcosis
+narcotic
+Narragansett
+narrate
+narrow
+narrowminded
+narwhal
+nary
+NASA
+nasal
+nascent
+Nash
+Nashua
+Nashville
+Nassau
+nasturtium
+nasty
+Nat
+natal
+Natalie
+Natchez
+Nate
+Nathan
+Nathaniel
+nation
+nationwide
+native
+NATO
+natty
+natural
+nature
+naturopath
+naughty
+nausea
+nauseate
+nauseum
+nautical
+nautilus
+Navajo
+naval
+nave
+navel
+navigable
+navigate
+navy
+nawab
+nay
+Nazarene
+Nazareth
+Nazi
+Nazism
+NBC
+NBS
+NC
+NCAA
+NCO
+NCR
+ND
+Ndjamena
+ne
+Neal
+Neanderthal
+Neapolitan
+near
+nearby
+nearsighted
+neat
+neater
+neath
+Nebraska
+Nebuchadnezzar
+nebula
+nebulae
+nebular
+nebulous
+necessary
+necessitate
+necessity
+neck
+necklace
+neckline
+necktie
+necromancer
+necromancy
+necromantic
+necropsy
+necrosis
+necrotic
+nectar
+nectareous
+nectarine
+nectary
+Ned
+nee
+need
+needful
+needham
+needle
+needlepoint
+needn't
+needy
+nefarious
+Neff
+negate
+neglect
+negligee
+negligent
+negligible
+negotiable
+negotiate
+Negro
+Negroes
+Negroid
+Nehru
+neigh
+Neil
+neither
+Nell
+Nellie
+Nelsen
+Nelson
+nematocyst
+nematode
+nemesis
+neo
+neoclassic
+neodymium
+neolithic
+neologism
+neon
+neonatal
+neonate
+neophyte
+neoprene
+neoteny
+Nepal
+nepenthe
+nephew
+nepotism
+nepotistic
+Neptune
+neptunium
+nereid
+Nero
+nerve
+nervous
+Ness
+nest
+nestle
+Nestor
+net
+nether
+Netherlands
+netherworld
+nettle
+nettlesome
+network
+Neumann
+neural
+neuralgia
+neurasthenic
+neuritis
+neuroanatomic
+neuroanatomy
+neuroanotomy
+neurology
+neuromuscular
+neuron
+neuronal
+neuropathology
+neurophysiology
+neuropsychiatric
+neuroses
+neurosis
+neurotic
+neuter
+neutral
+neutrino
+neutron
+neutronium
+Neva
+Nevada
+neve
+nevertheless
+Nevins
+new
+Newark
+Newbold
+newborn
+Newcastle
+newcomer
+newel
+Newell
+newfound
+Newfoundland
+newline
+newlywed
+Newman
+Newport
+newsboy
+newscast
+newsletter
+newsman
+newsmen
+newspaper
+newspaperman
+newspapermen
+newsreel
+newsstand
+Newsweek
+newt
+newton
+Newtonian
+next
+Nguyen
+NH
+niacin
+Niagara
+Niamey
+nib
+nibble
+Nibelung
+Nicaragua
+nice
+nicety
+niche
+Nicholas
+Nicholls
+Nichols
+Nicholson
+nichrome
+nick
+nickel
+nickname
+Nicodemus
+Nicosia
+nicotinamide
+nicotine
+niece
+Nielsen
+Nielson
+Nietzsche
+nifty
+Niger
+Nigeria
+niggardly
+nigger
+niggle
+nigh
+night
+nightcap
+nightclub
+nightdress
+nightfall
+nightgown
+nighthawk
+nightingale
+nightmare
+nightmarish
+nightshade
+nightshirt
+nighttime
+NIH
+nihilism
+nihilist
+Nikko
+Nikolai
+nil
+Nile
+nilpotent
+nimble
+nimbus
+NIMH
+Nina
+nine
+ninebark
+ninefold
+nineteen
+nineteenth
+ninetieth
+ninety
+ninetyfold
+Nineveh
+ninth
+Niobe
+niobium
+nip
+nipple
+Nippon
+nirvana
+nit
+nitpick
+nitrate
+nitric
+nitride
+nitrite
+nitrogen
+nitrogenous
+nitroglycerine
+nitrous
+nitty
+Nixon
+NJ
+NM
+NNE
+NNW
+no
+NOAA
+Noah
+nob
+Nobel
+nobelium
+noble
+nobleman
+noblemen
+noblesse
+nobody
+nobody'd
+nocturnal
+nocturne
+nod
+nodal
+node
+nodular
+nodule
+Noel
+Noetherian
+noise
+noisemake
+noisome
+noisy
+Nolan
+Noll
+nolo
+nomad
+nomadic
+nomenclature
+nominal
+nominate
+nominee
+nomogram
+nomograph
+non
+nonce
+nonchalant
+nondescript
+none
+nonetheless
+nonogenarian
+nonsensic
+noodle
+nook
+noon
+noontime
+noose
+nor
+Nora
+Nordhoff
+Nordic
+Nordstrom
+Noreen
+Norfolk
+norm
+Norma
+normal
+normalcy
+Norman
+Normandy
+normative
+Norris
+Norse
+north
+Northampton
+northbound
+northeast
+northeastern
+northerly
+northern
+northernmost
+northland
+Northrop
+Northrup
+Northumberland
+northward
+northwest
+northwestern
+Norton
+Norwalk
+Norway
+Norwegian
+Norwich
+nose
+nosebag
+nosebleed
+nostalgia
+nostalgic
+Nostradamus
+Nostrand
+nostril
+nosy
+not
+notary
+notate
+notch
+note
+notebook
+noteworthy
+nothing
+notice
+noticeable
+notify
+notion
+notocord
+notoriety
+notorious
+Notre
+Nottingham
+notwithstanding
+Nouakchott
+nought
+noun
+nourish
+nouveau
+Nov
+nova
+novae
+Novak
+novel
+novelty
+November
+novice
+novitiate
+novo
+Novosibirsk
+now
+nowaday
+nowhere
+nowise
+noxious
+nozzle
+NRC
+nroff
+n's
+NSF
+NTIS
+nu
+nuance
+Nubia
+nubile
+nucleant
+nuclear
+nucleate
+nuclei
+nucleic
+nucleoli
+nucleolus
+nucleon
+nucleotide
+nucleus
+nuclide
+nude
+nudge
+nudibranch
+nugatory
+nugget
+nuisance
+null
+nullify
+Nullstellensatz
+numb
+numbly
+numerable
+numeral
+numerate
+numeric
+numerology
+numerous
+numinous
+numismatic
+numismatist
+nun
+nuptial
+nurse
+nursery
+nurturant
+nurture
+nut
+nutate
+nutcrack
+nuthatch
+nutmeg
+nutria
+nutrient
+nutrition
+nutritious
+nutritive
+nutshell
+nuzzle
+NV
+NW
+NY
+NYC
+nylon
+nymph
+nymphomania
+nymphomaniac
+Nyquist
+NYU
+o
+oaf
+oak
+oaken
+Oakland
+Oakley
+oakwood
+oar
+oases
+oasis
+oat
+oatcake
+oath
+oatmeal
+obduracy
+obdurate
+obedient
+obeisant
+obelisk
+Oberlin
+obese
+obey
+obfuscate
+obfuscatory
+obituary
+object
+objectify
+objector
+objet
+oblate
+obligate
+obligatory
+oblige
+oblique
+obliterate
+oblivion
+oblivious
+oblong
+obnoxious
+oboe
+oboist
+O'Brien
+obscene
+obscure
+obsequious
+obsequy
+observant
+observation
+observatory
+observe
+obsess
+obsession
+obsessive
+obsidian
+obsolescent
+obsolete
+obstacle
+obstetric
+obstetrician
+obstinacy
+obstinate
+obstruct
+obstruent
+obtain
+obtrude
+obtrusive
+obtuse
+obverse
+obviate
+obvious
+ocarina
+occasion
+occident
+occidental
+occipital
+occlude
+occlusion
+occlusive
+occult
+occultate
+occupant
+occupation
+occupy
+occur
+occurred
+occurrent
+occurring
+ocean
+Oceania
+oceanic
+oceanographer
+oceanography
+oceanside
+ocelot
+o'clock
+O'Connell
+O'Connor
+Oct
+octagon
+octagonal
+octahedra
+octahedral
+octahedron
+octal
+octane
+octant
+octave
+Octavia
+octennial
+octet
+octile
+octillion
+October
+octogenarian
+octopus
+octoroon
+ocular
+odd
+oddball
+ode
+O'Dell
+Odessa
+Odin
+odious
+odium
+odometer
+O'Donnell
+odorous
+O'Dwyer
+Odysseus
+odyssey
+oedipal
+Oedipus
+oenology
+o'er
+oersted
+of
+off
+offal
+offbeat
+Offenbach
+offend
+offensive
+offer
+offertory
+offhand
+office
+officeholder
+officemate
+official
+officialdom
+officiate
+officio
+officious
+offload
+offprint
+offsaddle
+offset
+offsetting
+offshoot
+offshore
+offspring
+offstage
+oft
+often
+oftentimes
+Ogden
+ogle
+ogre
+ogress
+oh
+O'Hare
+Ohio
+ohm
+ohmic
+ohmmeter
+oil
+oilcloth
+oilman
+oilmen
+oilseed
+oily
+oint
+Ojibwa
+OK
+okapi
+okay
+Okinawa
+Oklahoma
+okra
+Olaf
+Olav
+old
+olden
+Oldenburg
+Oldsmobile
+oldster
+Olduvai
+oldy
+oleander
+O'Leary
+olefin
+oleomargarine
+olfactory
+Olga
+oligarchic
+oligarchy
+Oligocene
+oligoclase
+oligopoly
+Olin
+olive
+Olivetti
+Olivia
+Olivier
+olivine
+Olsen
+Olson
+Olympia
+Olympic
+Omaha
+Oman
+ombudsman
+ombudsperson
+omega
+omelet
+omen
+omicron
+ominous
+omission
+omit
+omitted
+omitting
+omnibus
+omnipotent
+omnipresent
+omniscient
+omnivore
+omnivorous
+on
+once
+oncology
+oncoming
+one
+Oneida
+O'Neill
+onerous
+oneself
+onetime
+oneupmanship
+ongoing
+onion
+onlooker
+onlooking
+only
+onomatopoeia
+onomatopoeic
+Onondaga
+onrush
+onrushing
+onset
+onslaught
+Ontario
+onto
+ontogeny
+ontology
+onus
+onward
+onyx
+oocyte
+oodles
+ooze
+opacity
+opal
+opalescent
+opaque
+OPEC
+Opel
+open
+opera
+operable
+operand
+operant
+operate
+operatic
+operetta
+operon
+Ophiucus
+opiate
+opinion
+opinionate
+opium
+opossum
+Oppenheimer
+opponent
+opportune
+opposable
+oppose
+opposite
+opposition
+oppress
+oppression
+oppressive
+oppressor
+opprobrium
+opt
+opthalmic
+opthalmology
+optic
+optima
+optimal
+optimism
+optimist
+optimum
+option
+optoacoustic
+optoisolate
+optometrist
+optometry
+opulent
+opus
+or
+oracle
+oracular
+oral
+orange
+orangeroot
+orangutan
+orate
+oratoric
+oratorio
+oratory
+orb
+orbit
+orbital
+Orca
+orchard
+orchestra
+orchestral
+orchestrate
+orchid
+orchis
+ordain
+ordeal
+order
+ordinal
+ordinance
+ordinary
+ordinate
+ordnance
+ore
+oregano
+Oregon
+Oresteia
+Orestes
+organ
+organdy
+organic
+organismic
+organometallic
+orgasm
+orgiastic
+orgy
+orient
+oriental
+orifice
+origami
+origin
+original
+originate
+Orin
+Orinoco
+oriole
+Orion
+Orkney
+Orlando
+Orleans
+ornament
+ornamentation
+ornate
+ornery
+ornithology
+orography
+Orono
+orphan
+orphanage
+Orpheus
+Orphic
+Orr
+Ortega
+orthant
+orthicon
+orthoclase
+orthodontic
+orthodontist
+orthodox
+orthodoxy
+orthogonal
+orthography
+orthonormal
+orthopedic
+orthophosphate
+orthorhombic
+Orville
+Orwell
+Orwellian
+o's
+Osaka
+Osborn
+Osborne
+Oscar
+oscillate
+oscillatory
+oscilloscope
+Osgood
+O'Shea
+Oshkosh
+osier
+Osiris
+Oslo
+osmium
+osmosis
+osmotic
+osprey
+osseous
+ossify
+ostensible
+ostentation
+ostentatious
+osteology
+osteopath
+osteopathic
+osteopathy
+osteoporosis
+ostracism
+ostracod
+Ostrander
+ostrich
+O'Sullivan
+Oswald
+Othello
+other
+otherwise
+otherworld
+otiose
+Otis
+Ott
+Ottawa
+otter
+Otto
+Ottoman
+Ouagadougou
+ouch
+ought
+oughtn't
+ounce
+our
+ourselves
+oust
+out
+outermost
+outlandish
+outlawry
+outrageous
+ouvre
+ouzel
+ouzo
+ova
+oval
+ovary
+ovate
+oven
+ovenbird
+over
+overt
+overture
+Ovid
+oviduct
+oviform
+oviparous
+ovipositor
+ovoviviparous
+ovulate
+ovum
+ow
+owe
+Owens
+owl
+owlet
+owly
+own
+ox
+oxalate
+oxalic
+oxbow
+oxcart
+oxen
+oxeye
+Oxford
+oxidant
+oxidate
+oxide
+Oxnard
+Oxonian
+oxygen
+oxygenate
+oyster
+Ozark
+ozone
+p
+pa
+Pablo
+Pabst
+pace
+pacemake
+pacesetting
+pacific
+pacifism
+pacifist
+pacify
+pack
+package
+Packard
+packet
+pact
+pad
+paddle
+paddock
+paddy
+padlock
+padre
+paean
+pagan
+page
+pageant
+pageantry
+paginate
+pagoda
+paid
+pail
+pain
+Paine
+painful
+painstaking
+paint
+paintbrush
+pair
+pairwise
+Pakistan
+Pakistani
+pal
+palace
+palaeontology
+palate
+Palatine
+palazzi
+palazzo
+pale
+paleoanthropology
+Paleolithic
+Paleozoic
+Palermo
+Palestine
+palette
+palfrey
+palindrome
+palindromic
+palisade
+pall
+palladia
+Palladian
+palladium
+pallet
+palliate
+pallid
+palm
+palmate
+palmetto
+Palmolive
+Palmyra
+Palo
+Palomar
+palp
+palpate
+palsy
+Pam
+Pamela
+pampa
+pamper
+pamphlet
+pan
+panacea
+panama
+Panamanian
+pancake
+Pancho
+pancreas
+pancreatic
+panda
+Pandanus
+pandemic
+pandemonium
+pander
+Pandora
+pane
+panel
+pang
+Pangaea
+panhandle
+panic
+panicked
+panicking
+panicky
+panicle
+panjandrum
+panoply
+panorama
+panoramic
+pansy
+pant
+pantaloon
+pantheism
+pantheist
+pantheon
+panther
+pantomime
+pantomimic
+pantothenic
+pantry
+panty
+Paoli
+pap
+papa
+papacy
+papal
+papaw
+paper
+paperback
+paperweight
+paperwork
+papery
+papillary
+papoose
+Pappas
+pappy
+paprika
+Papua
+papyri
+papyrus
+par
+parabola
+parabolic
+paraboloid
+paraboloidal
+parachute
+parade
+paradigm
+paradigmatic
+paradise
+paradox
+paradoxic
+paraffin
+paragon
+paragonite
+paragraph
+Paraguay
+Paraguayan
+parakeet
+paralinguistic
+parallax
+parallel
+parallelepiped
+parallelogram
+paralysis
+paralytic
+paramagnet
+paramagnetic
+parameter
+paramilitary
+paramount
+Paramus
+paranoia
+paranoiac
+paranoid
+paranormal
+parapet
+paraphernalia
+paraphrase
+parapsychology
+parasite
+parasitic
+parasol
+parasympathetic
+paratroop
+paraxial
+parboil
+parcel
+parch
+pardon
+pare
+paregoric
+parent
+parentage
+parental
+parentheses
+parenthesis
+parenthetic
+Pareto
+pariah
+parimutuel
+Paris
+parish
+parishioner
+Parisian
+park
+parka
+Parke
+Parkinson
+parkish
+parkland
+parkway
+parlance
+parlay
+parley
+parliament
+parliamentarian
+parliamentary
+Parmesan
+parochial
+parody
+parole
+parolee
+paroxysm
+parquet
+Parr
+Parrish
+parrot
+parry
+parse
+Parsi
+Parsifal
+parsimonious
+parsimony
+parsley
+parsnip
+parson
+parsonage
+part
+partake
+Parthenon
+Parthia
+partial
+participant
+participate
+participle
+particle
+particular
+particulate
+partisan
+partition
+partner
+partook
+partridge
+party
+parvenu
+Pasadena
+Pascal
+paschal
+pasha
+Paso
+pass
+passage
+passageway
+Passaic
+passarine
+passband
+passbook
+passe
+passenger
+passerby
+passim
+passion
+passionate
+passivate
+passive
+Passover
+passport
+password
+past
+paste
+pasteboard
+pastel
+pasteup
+Pasteur
+pastiche
+pastime
+pastor
+pastoral
+pastry
+pasture
+pasty
+pat
+Patagonia
+patch
+patchwork
+patchy
+pate
+patent
+patentee
+pater
+paternal
+paternoster
+Paterson
+path
+pathbreaking
+pathetic
+pathogen
+pathogenesis
+pathogenic
+pathology
+pathos
+pathway
+patient
+patina
+patio
+patois
+patriarch
+patriarchal
+patriarchy
+Patrice
+Patricia
+patrician
+Patrick
+patrilineage
+patrilineal
+patrimonial
+patrimony
+patriot
+patriotic
+patristic
+patrol
+patrolled
+patrolling
+patrolman
+patrolmen
+patron
+patronage
+patroness
+Patsy
+pattern
+Patterson
+Patti
+Patton
+patty
+paucity
+Paul
+Paula
+Paulette
+Pauli
+Pauline
+Paulo
+Paulsen
+Paulson
+Paulus
+paunch
+paunchy
+pauper
+pause
+pavanne
+pave
+pavilion
+Pavlov
+Pavlovian
+paw
+pawn
+pawnbroker
+pawnshop
+pawpaw
+Pawtucket
+pax
+pay
+paycheck
+payday
+payload
+paymaster
+Payne
+payoff
+payroll
+Paz
+PBS
+PDP
+pea
+Peabody
+peace
+peaceable
+peaceful
+peacemake
+peacetime
+peach
+Peachtree
+peacock
+peafowl
+peahen
+peak
+peaky
+peal
+Peale
+peanut
+pear
+Pearce
+pearl
+pearlite
+pearlstone
+Pearson
+peasant
+Pease
+peat
+pebble
+pecan
+peccary
+peck
+Pecos
+pectoral
+pectoralis
+peculate
+peculiar
+pecuniary
+pedagogic
+pedagogue
+pedagogy
+pedal
+pedant
+pedantic
+pedantry
+peddle
+pedestal
+pedestrian
+pediatric
+pediatrician
+pedigree
+pediment
+Pedro
+pee
+peek
+peel
+peep
+peephole
+peepy
+peer
+peg
+Pegasus
+pegboard
+pegging
+Peggy
+pejorative
+Peking
+pelagic
+Pelham
+pelican
+pellagra
+pellet
+pellucid
+Peloponnese
+pelt
+peltry
+pelvic
+pelvis
+Pembroke
+pemmican
+pen
+penal
+penalty
+penance
+penates
+pence
+penchant
+pencil
+pencilled
+pend
+pendant
+pendulous
+pendulum
+Penelope
+penetrable
+penetrate
+penguin
+Penh
+penicillin
+peninsula
+peninsular
+penis
+penitent
+penitential
+penitentiary
+penman
+penmen
+Penn
+penna
+pennant
+Pennsylvania
+penny
+pennyroyal
+Penrose
+Pensacola
+pension
+pensive
+pent
+pentagon
+pentagonal
+pentagram
+pentane
+Pentateuch
+pentatonic
+Pentecost
+pentecostal
+penthouse
+penultimate
+penumbra
+penumbral
+penurious
+penury
+peon
+peony
+people
+Peoria
+pep
+peppercorn
+peppergrass
+peppermint
+pepperoni
+peppery
+peppy
+Pepsi
+PepsiCo
+peptide
+per
+perceive
+percent
+percentage
+percentile
+percept
+perceptible
+perception
+perceptive
+perceptual
+perch
+perchance
+perchlorate
+Percival
+percolate
+percussion
+percussive
+Percy
+perdition
+peregrine
+peremptory
+perennial
+Perez
+perfect
+perfectible
+perfidious
+perfidy
+perforate
+perforce
+perform
+performance
+perfume
+perfumery
+perfunctory
+perfusion
+Pergamon
+perhaps
+Periclean
+Pericles
+peridotite
+perigee
+perihelion
+peril
+Perilla
+perilous
+perimeter
+period
+periodic
+peripatetic
+peripheral
+periphery
+periphrastic
+periscope
+perish
+peritectic
+periwinkle
+perjure
+perjury
+perk
+Perkins
+perky
+Perle
+permafrost
+permalloy
+permanent
+permeable
+permeate
+Permian
+permissible
+permission
+permissive
+permit
+permitted
+permitting
+permutation
+permute
+pernicious
+peroxide
+perpendicular
+perpetrate
+perpetual
+perpetuate
+perpetuity
+perplex
+perquisite
+Perry
+persecute
+persecution
+persecutory
+Perseid
+Persephone
+Perseus
+perseverant
+persevere
+Pershing
+Persia
+persiflage
+persimmon
+persist
+persistent
+person
+persona
+personage
+personal
+personify
+personnel
+perspective
+perspicacious
+perspicacity
+perspicuity
+perspicuous
+perspiration
+perspire
+persuade
+persuasion
+persuasive
+pert
+pertain
+Perth
+pertinacious
+pertinent
+perturb
+perturbate
+Peru
+perusal
+peruse
+Peruvian
+pervade
+pervasion
+pervasive
+perverse
+perversion
+pervert
+pessimal
+pessimism
+pessimist
+pessimum
+pest
+peste
+pesticide
+pestilent
+pestilential
+pestle
+pet
+petal
+Pete
+peter
+Petersburg
+Petersen
+Peterson
+petiole
+petit
+petite
+petition
+petrel
+petri
+petrify
+petrochemical
+petroglyph
+petrol
+petroleum
+petrology
+petticoat
+petty
+petulant
+petunia
+Peugeot
+pew
+pewee
+pewter
+pfennig
+Pfizer
+pH
+phage
+phagocyte
+phalanger
+phalanges
+phalanx
+phalarope
+phantasm
+phantasy
+phantom
+pharmaceutic
+pharmacist
+pharmacology
+pharmacopoeia
+pharmacy
+phase
+Ph.D
+PhD
+pheasant
+Phelps
+phenol
+phenolic
+phenomena
+phenomenal
+phenomenology
+phenomenon
+phenotype
+phenyl
+phenylalanine
+pheromone
+phi
+Phil
+Philadelphia
+philanthrope
+philanthropic
+philanthropy
+philharmonic
+Philip
+Philippine
+Philistine
+Phillip
+philodendron
+philology
+philosoph
+philosophic
+philosophy
+Phipps
+phloem
+phlox
+phobic
+Phobos
+phoebe
+Phoenicia
+phoenix
+phon
+phone
+phoneme
+phonemic
+phonetic
+phonic
+phonograph
+phonology
+phonon
+phony
+phosgene
+phosphate
+phosphide
+phosphine
+phosphite
+phosphor
+phosphoresce
+phosphorescent
+phosphoric
+phosphorous
+phosphorus
+phosphorylate
+photo
+photogenic
+photography
+photolysis
+photolytic
+photometry
+photon
+phrase
+phrasemake
+phraseology
+phthalate
+phycomycetes
+phyla
+Phyllis
+phylogenetic
+phylogeny
+phylum
+physic
+physician
+physiochemical
+physiognomy
+physiology
+physiotherapist
+physiotherapy
+physique
+phytoplankton
+pi
+pianissimo
+pianist
+piano
+pianoforte
+piazza
+pica
+Picasso
+picayune
+Piccadilly
+piccolo
+pick
+pickaxe
+pickerel
+Pickering
+picket
+Pickett
+Pickford
+pickle
+Pickman
+pickoff
+pickup
+picky
+picnic
+picnicked
+picnicker
+picnicking
+picofarad
+picojoule
+picosecond
+Pict
+pictorial
+picture
+picturesque
+piddle
+pidgin
+pie
+piece
+piecemeal
+piecewise
+Piedmont
+pier
+pierce
+Pierre
+Pierson
+pietism
+piety
+piezoelectric
+pig
+pigeon
+pigeonberry
+pigeonfoot
+pigeonhole
+pigging
+piggish
+piggy
+pigment
+pigmentation
+pigpen
+pigroot
+pigskin
+pigtail
+pike
+Pilate
+pile
+pilewort
+pilfer
+pilferage
+pilgrim
+pilgrimage
+pill
+pillage
+pillar
+pillory
+pillow
+Pillsbury
+piloerection
+pilot
+pimp
+pimple
+pin
+pinafore
+pinball
+pincer
+pinch
+pincushion
+pine
+pineapple
+Pinehurst
+ping
+pinhead
+pinhole
+pinion
+pink
+pinkie
+pinkish
+pinnacle
+pinnate
+pinniped
+pinochle
+pinpoint
+pinscher
+Pinsky
+pint
+pintail
+pinto
+pinwheel
+pinxter
+pion
+pioneer
+Piotr
+pious
+pip
+pipe
+pipeline
+pipette
+pipetting
+pipsissewa
+piquant
+pique
+piracy
+Piraeus
+pirate
+pirogue
+pirouette
+pirouetting
+Piscataway
+Pisces
+piss
+pistachio
+pistol
+pistole
+piston
+pit
+pitch
+pitchblende
+pitchfork
+pitchstone
+piteous
+pitfall
+pith
+pithy
+pitiable
+pitiful
+pitman
+Pitney
+Pitt
+Pittsburgh
+Pittsfield
+Pittston
+pituitary
+pity
+Pius
+pivot
+pivotal
+pixel
+pixy
+Pizarro
+pizza
+pizzicato
+Pl
+placate
+placater
+place
+placeable
+placebo
+placeholder
+placemat
+placenta
+placental
+placid
+plagiarism
+plagiarist
+plagioclase
+plague
+plaguey
+plaid
+plain
+Plainfield
+plaintiff
+plaintive
+plait
+plan
+planar
+Planck
+plane
+planeload
+planet
+planetaria
+planetarium
+planetary
+planetesimal
+planetoid
+plank
+plankton
+planoconcave
+planoconvex
+plant
+plantain
+plantation
+plaque
+plasm
+plasma
+plasmid
+plasmon
+plaster
+plastic
+plastisol
+plastron
+plat
+plate
+plateau
+platelet
+platen
+platform
+platinum
+platitude
+platitudinous
+Plato
+platonic
+Platonism
+Platonist
+platoon
+Platte
+platypus
+plaudit
+plausible
+play
+playa
+playback
+playboy
+playful
+playground
+playhouse
+playmate
+playoff
+playpen
+playroom
+plaything
+playtime
+playwright
+playwriting
+plaza
+plea
+plead
+pleasant
+please
+pleasure
+pleat
+plebeian
+plebian
+plebiscite
+plectrum
+pledge
+Pleiades
+Pleistocene
+plenary
+plenipotentiary
+plenitude
+plentiful
+plenty
+plenum
+plethora
+pleura
+pleural
+pleurisy
+Plexiglas
+pliable
+pliant
+plight
+Pliny
+Pliocene
+plod
+plop
+plot
+plover
+plow
+plowman
+plowmen
+plowshare
+ploy
+pluck
+plucky
+plug
+plugboard
+pluggable
+plugging
+plum
+plumage
+plumb
+plumbago
+plumbate
+plume
+plummet
+plump
+plunder
+plunge
+plunk
+pluperfect
+plural
+plus
+plush
+plushy
+Plutarch
+Pluto
+pluton
+plutonium
+ply
+Plymouth
+plyscore
+plywood
+PM
+pneumatic
+pneumococcus
+pneumonia
+Po
+poach
+POBox
+pocket
+pocketbook
+pocketful
+Pocono
+pod
+podge
+podia
+podium
+Poe
+poem
+poesy
+poet
+poetic
+poetry
+pogo
+pogrom
+poi
+poignant
+Poincare
+poinsettia
+point
+pointwise
+poise
+poison
+poisonous
+Poisson
+poke
+pokerface
+pol
+Poland
+polar
+polarimeter
+Polaris
+polariscope
+polariton
+polarogram
+polarograph
+polarography
+Polaroid
+polaron
+pole
+polecat
+polemic
+police
+policeman
+policemen
+policewoman
+policy
+polio
+poliomyelitis
+polis
+polish
+Politburo
+polite
+politic
+politician
+politicking
+politico
+Polk
+polka
+polkadot
+poll
+Pollard
+pollen
+pollinate
+pollock
+polloi
+pollutant
+pollute
+pollution
+Pollux
+pollywog
+polo
+polonaise
+polonium
+polopony
+polyandrous
+polyandry
+polygamous
+polygamy
+polygon
+polygonal
+polygynous
+polygyny
+polyhedra
+polyhedral
+polyhedron
+Polyhymnia
+polymer
+polymerase
+polymeric
+polymorph
+polymorphic
+Polynesia
+polynomial
+Polyphemus
+polyphony
+polyploidy
+polysaccharide
+polysemous
+polysemy
+polytechnic
+polytope
+polytypy
+pomade
+pomegranate
+pomelo
+pomology
+Pomona
+pomp
+pompadour
+pompano
+Pompeii
+pompey
+pompon
+pomposity
+pompous
+Ponce
+Ponchartrain
+poncho
+pond
+ponder
+ponderosa
+ponderous
+pong
+pont
+Pontiac
+pontiff
+pontific
+pontificate
+pontification
+pony
+pooch
+poodle
+pooh
+pool
+Poole
+poop
+poor
+pop
+pope
+popish
+poplar
+poplin
+poppy
+populace
+popular
+populate
+populism
+populist
+populous
+porcelain
+porch
+porcine
+porcupine
+pore
+pork
+pornographer
+pornography
+porosity
+porous
+porphyry
+porpoise
+porridge
+port
+portage
+portal
+Porte
+portend
+portent
+portentous
+porterhouse
+portfolio
+Portia
+portico
+portland
+portmanteau
+Porto
+portrait
+portraiture
+portray
+portrayal
+Portsmouth
+Portugal
+Portuguese
+portulaca
+posable
+pose
+Poseidon
+poseur
+posey
+posh
+posit
+position
+positive
+positron
+Posner
+posse
+posseman
+possemen
+possess
+possession
+possessive
+possessor
+possible
+possum
+post
+postage
+postal
+postcard
+postcondition
+postdoctoral
+posterior
+posteriori
+posterity
+postfix
+postgraduate
+posthumous
+postlude
+postman
+postmark
+postmaster
+postmen
+postmodern
+postmortem
+postmultiply
+postoperative
+postorder
+postpone
+postposition
+postprocess
+postprocessor
+postscript
+postulate
+posture
+postwar
+posy
+pot
+potable
+potash
+potassium
+potato
+potatoes
+potbelly
+potboil
+potent
+potentate
+potential
+potentiometer
+pothole
+potion
+potlatch
+Potomac
+potpourri
+potsherd
+pottery
+Potts
+pouch
+Poughkeepsie
+poultice
+poultry
+pounce
+pound
+pour
+pout
+poverty
+pow
+powder
+powderpuff
+powdery
+Powell
+power
+powerful
+powerhouse
+Poynting
+ppm
+PR
+practicable
+practical
+practice
+practise
+practitioner
+Pradesh
+Prado
+praecox
+pragmatic
+pragmatism
+pragmatist
+Prague
+prairie
+praise
+praiseworthy
+praline
+pram
+prance
+prank
+praseodymium
+Pratt
+Pravda
+pray
+prayerful
+pre
+preach
+preachy
+Precambrian
+precarious
+precedent
+precept
+precess
+precinct
+precious
+precipice
+precipitable
+precipitate
+precipitous
+precise
+precision
+preclude
+precocious
+precocity
+predacious
+predatory
+predecessor
+predicament
+predicate
+predict
+predictor
+predilect
+preempt
+preemption
+preemptive
+preemptor
+preen
+prefab
+prefatory
+prefect
+prefecture
+prefer
+preference
+preferential
+preferred
+preferring
+pregnant
+prehensile
+prejudice
+preliminary
+prelude
+premier
+premiere
+premise
+premium
+premonition
+Prentice
+prep
+preparation
+preparative
+preparator
+preparatory
+prepare
+preponderant
+preponderate
+preposterous
+prerogative
+Presbyterian
+Prescott
+prescription
+prescriptive
+presentation
+preservation
+preside
+president
+presidential
+press
+pressure
+prestidigitate
+prestige
+prestigious
+presto
+Preston
+presume
+presumption
+presumptive
+pretentious
+Pretoria
+pretty
+prevail
+prevalent
+prevention
+preventive
+previous
+prexy
+prey
+Priam
+price
+prick
+prickle
+pride
+priest
+priestess
+Priestley
+prig
+priggish
+prim
+prima
+primacy
+primal
+primary
+primate
+prime
+primeval
+primitive
+primordial
+primp
+primrose
+prince
+princess
+Princeton
+principal
+Principia
+principle
+print
+printmake
+printout
+prior
+priori
+priory
+Priscilla
+prism
+prismatic
+prison
+prissy
+pristine
+Pritchard
+privacy
+private
+privet
+privilege
+privy
+prize
+prizewinning
+pro
+probabilist
+probate
+probationary
+probe
+problem
+problematic
+probosces
+proboscis
+procaine
+procedural
+procedure
+proceed
+process
+procession
+processor
+proclaim
+proclamation
+proclivity
+procrastinate
+procreate
+procrustean
+Procrustes
+Procter
+proctor
+procure
+Procyon
+prod
+prodigal
+prodigious
+prodigy
+produce
+producible
+product
+Prof
+profane
+profess
+profession
+professor
+professorial
+proffer
+proficient
+profile
+profit
+profiteer
+profligate
+profound
+profundity
+profuse
+profusion
+progenitor
+progeny
+prognosis
+prognosticate
+programmable
+programmatic
+programmed
+programmer
+programming
+progress
+progression
+progressive
+prohibit
+prohibition
+prohibitive
+prohibitory
+project
+projectile
+projector
+prokaryote
+prokaryotic
+Prokofieff
+prolate
+proletariat
+proliferate
+prolific
+proline
+prolix
+prologue
+prolong
+prolongate
+prolusion
+prom
+promenade
+Promethean
+Prometheus
+promethium
+prominent
+promiscuity
+promiscuous
+promise
+promote
+promotion
+prompt
+promptitude
+promulgate
+prone
+prong
+pronghorn
+pronominal
+pronoun
+pronounce
+pronounceable
+pronto
+pronunciation
+proof
+proofread
+prop
+propaganda
+propagandist
+propagate
+propane
+propel
+propellant
+propelled
+propeller
+propelling
+propensity
+proper
+property
+prophecy
+prophesy
+prophet
+prophetic
+propionate
+propitiate
+propitious
+proponent
+proportion
+proportionate
+propos
+proposal
+propose
+proposition
+proprietary
+proprietor
+propriety
+proprioception
+proprioceptive
+propulsion
+propyl
+propylene
+prorate
+prorogue
+prosaic
+proscenium
+prosciutto
+proscribe
+proscription
+prose
+prosecute
+prosecution
+prosecutor
+proselyte
+Proserpine
+prosodic
+prosody
+prosopopoeia
+prospect
+prospector
+prospectus
+prosper
+prosperous
+prostaglandin
+prostate
+prosthetic
+prostitute
+prostitution
+prostrate
+protactinium
+protagonist
+protean
+protease
+protect
+protector
+protectorate
+protege
+protein
+proteolysis
+proteolytic
+protest
+protestant
+protestation
+prothonotary
+Protista
+proto
+protocol
+proton
+Protophyta
+protoplasm
+protoplasmic
+prototype
+prototypic
+Protozoa
+protozoan
+protract
+protractor
+protrude
+protrusion
+protrusive
+protuberant
+proud
+Proust
+prove
+proven
+provenance
+Provence
+proverb
+proverbial
+provide
+provident
+providential
+province
+provincial
+provision
+proviso
+provocateur
+provocation
+provocative
+provoke
+provost
+prow
+prowess
+prowl
+proximal
+proximate
+proximity
+proxy
+prude
+prudent
+prudential
+prudish
+prune
+prurient
+Prussia
+prussic
+pry
+p's
+psalm
+psalter
+pseudo
+pseudonym
+pseudonymous
+psi
+psych
+psyche
+psychiatric
+psychiatrist
+psychiatry
+psychic
+psycho
+psychoacoustic
+psychoanalysis
+psychoanalyst
+psychoanalytic
+psychobiology
+psychology
+psychometry
+psychopath
+psychopathic
+psychophysic
+psychophysiology
+psychopomp
+psychoses
+psychosis
+psychosomatic
+psychotherapeutic
+psychotherapist
+psychotherapy
+psychotic
+psyllium
+PTA
+ptarmigan
+pterodactyl
+Ptolemaic
+Ptolemy
+pub
+puberty
+pubescent
+public
+publication
+publish
+Puccini
+puck
+puckish
+pudding
+puddingstone
+puddle
+puddly
+pueblo
+puerile
+Puerto
+puff
+puffball
+puffery
+puffin
+puffy
+pug
+Pugh
+puissant
+puke
+Pulaski
+Pulitzer
+pull
+pullback
+pulley
+Pullman
+pullover
+pulmonary
+pulp
+pulpit
+pulsar
+pulsate
+pulse
+pulverable
+puma
+pumice
+pummel
+pump
+pumpkin
+pumpkinseed
+pun
+punch
+punctilio
+punctilious
+punctual
+punctuate
+puncture
+pundit
+punditry
+pungent
+Punic
+punish
+punitive
+Punjab
+Punjabi
+punk
+punky
+punster
+punt
+puny
+pup
+pupa
+pupae
+pupal
+pupate
+pupil
+puppet
+puppeteer
+puppy
+puppyish
+Purcell
+purchasable
+purchase
+Purdue
+pure
+puree
+purgation
+purgative
+purgatory
+purge
+purify
+Purina
+purine
+Puritan
+puritanic
+purl
+purloin
+purple
+purport
+purpose
+purposeful
+purposive
+purr
+purse
+purslane
+pursuant
+pursue
+pursuit
+purvey
+purveyor
+purview
+pus
+Pusan
+Pusey
+push
+pushbutton
+pushout
+pushover
+pushpin
+pushy
+pussy
+pussycat
+put
+putative
+putdown
+Putnam
+putrefaction
+putrefy
+putrid
+putt
+putty
+puzzle
+PVC
+Pygmalion
+pygmy
+pyknotic
+Pyle
+Pyongyang
+pyracanth
+pyramid
+pyramidal
+pyre
+Pyrex
+pyridine
+pyridoxine
+pyrimidine
+pyrite
+pyroelectric
+pyrolyse
+pyrolysis
+pyrometer
+pyrophosphate
+pyrotechnic
+pyroxene
+pyroxenite
+Pyrrhic
+Pythagoras
+Pythagorean
+python
+q
+Qatar
+QED
+q's
+qua
+quack
+quackery
+quad
+quadrangle
+quadrangular
+quadrant
+quadratic
+quadrature
+quadrennial
+quadric
+quadriceps
+quadrilateral
+quadrille
+quadrillion
+quadripartite
+quadrivium
+quadrupedal
+quadruple
+quadruplet
+quadrupole
+quaff
+quagmire
+quahog
+quail
+quaint
+quake
+Quakeress
+qualify
+qualitative
+quality
+qualm
+quandary
+quanta
+Quantico
+quantify
+quantile
+quantitative
+quantity
+quantum
+quarantine
+quark
+quarrel
+quarrelsome
+quarry
+quarryman
+quarrymen
+quart
+quarterback
+quartermaster
+quartet
+quartic
+quartile
+quarto
+quartz
+quartzite
+quasar
+quash
+quasi
+quasiparticle
+quaternary
+quatrain
+quaver
+quay
+queasy
+Quebec
+queen
+Queensland
+queer
+quell
+quench
+quern
+querulous
+query
+quest
+question
+questionnaire
+quetzal
+queue
+queueing
+Quezon
+quibble
+Quichua
+quick
+quicken
+quickie
+quicklime
+quicksand
+quicksilver
+quickstep
+quid
+quiescent
+quiet
+quietus
+quill
+quillwort
+quilt
+quince
+quinine
+Quinn
+quint
+quintessence
+quintessential
+quintet
+quintic
+quintillion
+quintuplet
+quintus
+quip
+quipped
+quipping
+Quirinal
+quirk
+quirky
+quirt
+quit
+quite
+Quito
+quitter
+quitting
+quiver
+Quixote
+quixotic
+quiz
+quizzed
+quizzes
+quizzical
+quizzing
+quo
+quod
+quonset
+quorum
+quota
+quotation
+quote
+quotient
+r
+rabat
+rabbet
+rabbi
+rabbinate
+rabbinical
+rabbit
+rabble
+rabid
+rabies
+Rabin
+raccoon
+race
+racemose
+racetrack
+raceway
+Rachel
+Rachmaninoff
+racial
+rack
+racket
+racketeer
+rackety
+racy
+radar
+Radcliffe
+radial
+radian
+radiant
+radiate
+radical
+radices
+radii
+radio
+radioactive
+radioastronomy
+radiocarbon
+radiochemical
+radiochemistry
+radiography
+radiology
+radiometer
+radiophysics
+radiosonde
+radiotherapy
+radish
+radium
+radius
+radix
+radon
+Rae
+Rafael
+Rafferty
+raffia
+raffish
+raft
+rag
+rage
+ragging
+ragout
+Ragusan
+ragweed
+raid
+rail
+railbird
+railhead
+raillery
+railroad
+railway
+rain
+rainbow
+raincoat
+raindrop
+rainfall
+rainstorm
+rainwater
+rainy
+raise
+raisin
+raj
+rajah
+rake
+rakish
+Raleigh
+rally
+Ralph
+Ralston
+ram
+Ramada
+Raman
+ramble
+rambunctious
+ramify
+Ramo
+ramp
+rampage
+rampant
+rampart
+ramrod
+Ramsey
+ramshackle
+ran
+ranch
+rancho
+rancid
+rancorous
+Rand
+Randall
+Randolph
+random
+randy
+rang
+range
+rangeland
+Rangoon
+rangy
+Ranier
+rank
+Rankin
+Rankine
+rankle
+ransack
+ransom
+rant
+Raoul
+rap
+rapacious
+rapacity
+rape
+Raphael
+rapid
+rapier
+rapport
+rapprochement
+rapt
+raptor
+raptorial
+rapture
+rare
+rarefy
+Raritan
+rasa
+rascal
+rash
+Rasmussen
+rasp
+raspberry
+raster
+Rastus
+rat
+rata
+rate
+rater
+rather
+ratify
+ratio
+ratiocinate
+rationale
+rattail
+rattle
+rattlesnake
+raucous
+Raul
+raunchy
+ravage
+rave
+ravel
+raven
+ravenous
+ravine
+ravish
+raw
+rawboned
+rawhide
+Rawlinson
+ray
+Rayleigh
+Raymond
+Raytheon
+raze
+razor
+razorback
+RCA
+R&D
+Rd
+re
+reach
+reactant
+reactionary
+read
+readout
+ready
+Reagan
+real
+realm
+realtor
+realty
+ream
+reap
+rear
+reason
+reave
+reb
+Rebecca
+rebel
+rebellion
+rebellious
+rebuke
+rebuttal
+recalcitrant
+receipt
+receive
+receptacle
+reception
+receptive
+receptor
+recess
+recessive
+recherche
+Recife
+recipe
+recipient
+reciprocal
+reciprocate
+reciprocity
+recital
+recitative
+reck
+reckon
+reclamation
+recline
+recluse
+reclusive
+recompense
+reconcile
+recondite
+reconnaissance
+recovery
+recriminate
+recrudescent
+recruit
+rectangle
+rectangular
+rectifier
+rectify
+rectilinear
+rectitude
+rector
+rectory
+recumbent
+recuperate
+recursion
+recusant
+recuse
+red
+redact
+redactor
+redbird
+redbud
+redcoat
+redden
+reddish
+redemption
+redemptive
+redhead
+Redmond
+redneck
+redolent
+redound
+redpoll
+redshank
+redstart
+Redstone
+redtop
+reduce
+reducible
+reductio
+redundant
+redwood
+reed
+reedbuck
+reedy
+reef
+reek
+reel
+Reese
+refectory
+refer
+referee
+refereeing
+referenda
+referendum
+referent
+referential
+referral
+referred
+referring
+reflect
+reflectance
+reflector
+reflexive
+reformatory
+refract
+refractometer
+refractory
+refrain
+refrigerate
+refuge
+refugee
+refusal
+refutation
+refute
+regal
+regalia
+regard
+regatta
+regent
+regime
+regimen
+regiment
+regimentation
+Regina
+Reginald
+region
+Regis
+registrable
+registrant
+registrar
+registration
+registry
+regress
+regression
+regressive
+regret
+regretful
+regrettable
+regretted
+regretting
+regular
+regulate
+regulatory
+Regulus
+regurgitate
+rehabilitate
+rehearsal
+Reich
+Reid
+reign
+Reilly
+reimbursable
+reimburse
+rein
+reindeer
+reinforce
+Reinhold
+reinstate
+reject
+rejoice
+rejoinder
+relaxation
+releasable
+relevant
+reliant
+relic
+relict
+relief
+relieve
+religion
+religiosity
+religious
+relinquish
+reliquary
+relish
+reluctant
+remainder
+remand
+Rembrandt
+remediable
+remedy
+remembrance
+Remington
+reminisce
+reminiscent
+remit
+remittance
+remnant
+remonstrate
+remorse
+remorseful
+remote
+removal
+remunerate
+Rena
+renaissance
+renal
+Renault
+rend
+render
+rendezvous
+rendition
+Rene
+renewal
+rennet
+Renoir
+renounce
+renovate
+renown
+Rensselaer
+rent
+rental
+renunciate
+rep
+repairman
+repairmen
+reparation
+repartee
+repeater
+repel
+repelled
+repellent
+repelling
+repentant
+repertoire
+repertory
+repetitious
+repetitive
+replenish
+replete
+replica
+replicate
+reportorial
+repository
+reprehensible
+representative
+repression
+repressive
+reprieve
+reprimand
+reprisal
+reprise
+reproach
+reptile
+reptilian
+republican
+repudiate
+repugnant
+repulsion
+repulsive
+reputation
+repute
+require
+requisite
+requisition
+rescind
+rescue
+resemblant
+resemble
+resentful
+reserpine
+reservation
+reservoir
+resident
+residential
+residual
+residuary
+residue
+residuum
+resignation
+resilient
+resiny
+resist
+resistant
+resistible
+resistive
+resistor
+resonate
+resorcinol
+resourceful
+respect
+respectful
+respiration
+respirator
+respiratory
+resplendent
+respond
+respondent
+response
+responsible
+responsive
+rest
+restaurant
+restaurateur
+restful
+restitution
+restive
+restoration
+restorative
+restraint
+restroom
+result
+resultant
+resume
+resumption
+resurgent
+resurrect
+resuscitate
+ret
+retain
+retaliate
+retaliatory
+retard
+retardant
+retardation
+retch
+retention
+retentive
+reticent
+reticulate
+reticulum
+retina
+retinal
+retinue
+retiree
+retribution
+retrieval
+retrieve
+retroactive
+retrofit
+retrofitted
+retrofitting
+retrograde
+retrogress
+retrogressive
+retrorocket
+retrospect
+retrovision
+returnee
+Reub
+Reuben
+Reuters
+rev
+revel
+revelation
+revelatory
+revelry
+revenge
+revenue
+rever
+reverberate
+revere
+reverend
+reverent
+reverie
+reversal
+reversible
+revert
+revisable
+revisal
+revival
+revive
+revocable
+revoke
+revolution
+revolutionary
+revolve
+revulsion
+revved
+revving
+Rex
+Reykjavik
+Reynolds
+rhapsodic
+rhapsody
+Rhea
+Rhenish
+rhenium
+rheology
+rheostat
+rhesus
+rhetoric
+rhetorician
+rheum
+rheumatic
+rheumatism
+Rhine
+rhinestone
+rhino
+rhinoceros
+rhizome
+rho
+Rhoda
+Rhode
+Rhodes
+Rhodesia
+rhodium
+rhododendron
+rhodolite
+rhodonite
+rhombi
+rhombic
+rhombus
+rhubarb
+rhyme
+rhythm
+rhythmic
+RI
+rib
+ribald
+ribbon
+riboflavin
+ribonucleic
+ribose
+ribosome
+Rica
+rice
+rich
+Richard
+Richardson
+Richfield
+Richmond
+Richter
+rick
+rickets
+Rickettsia
+rickety
+rickshaw
+Rico
+ricochet
+ricotta
+rid
+riddance
+ridden
+riddle
+ride
+ridge
+ridgepole
+Ridgway
+ridicule
+ridiculous
+Riemann
+Riemannian
+rife
+riffle
+rifle
+rifleman
+riflemen
+rift
+rig
+Riga
+Rigel
+rigging
+Riggs
+right
+righteous
+rightful
+rightmost
+rightward
+rigid
+rigorous
+Riley
+rill
+rilly
+rim
+rime
+rimy
+Rinehart
+ring
+ringlet
+ringside
+rink
+rinse
+Rio
+Riordan
+riot
+riotous
+rip
+riparian
+ripe
+ripen
+Ripley
+ripoff
+ripple
+rise
+risen
+risible
+risk
+risky
+Ritchie
+rite
+Ritter
+ritual
+Ritz
+rival
+rivalry
+riven
+river
+riverbank
+riverfront
+riverine
+riverside
+rivet
+Riviera
+rivulet
+Riyadh
+RNA
+roach
+road
+roadbed
+roadblock
+roadhouse
+roadrunner
+roadside
+roadster
+roadway
+roam
+roar
+roast
+rob
+robbery
+robbin
+robe
+Robert
+Roberta
+Roberto
+Robertson
+robin
+Robinson
+robot
+robotics
+robust
+Rochester
+rock
+rockabye
+rockaway
+rockbound
+Rockefeller
+rocket
+Rockford
+Rockies
+Rockland
+Rockwell
+rocky
+rococo
+rod
+rode
+rodent
+rodeo
+Rodgers
+Rodney
+Rodriguez
+roe
+roebuck
+Roentgen
+Roger
+rogue
+roguish
+roil
+roister
+Roland
+role
+roll
+rollback
+rollick
+Rollins
+Roman
+romance
+Romanesque
+Romania
+Romano
+romantic
+Rome
+Romeo
+romp
+Romulus
+Ron
+Ronald
+rondo
+Ronnie
+rood
+roof
+rooftop
+rooftree
+rook
+rookie
+rooky
+room
+roomful
+roommate
+roomy
+Roosevelt
+Rooseveltian
+roost
+root
+rootstock
+rope
+ropy
+Rosa
+Rosalie
+rosary
+rose
+rosebud
+rosebush
+Roseland
+rosemary
+Rosen
+Rosenberg
+Rosenblum
+Rosenthal
+Rosenzweig
+Rosetta
+rosette
+Ross
+roster
+rostrum
+rosy
+rot
+Rotarian
+rotary
+rotate
+ROTC
+rote
+rotenone
+Roth
+Rothschild
+rotogravure
+rotor
+rototill
+rotten
+rotund
+rotunda
+rouge
+rough
+roughcast
+roughen
+roughish
+roughneck
+roughshod
+roulette
+round
+roundabout
+roundhead
+roundhouse
+roundoff
+roundtable
+roundup
+roundworm
+rouse
+Rousseau
+roustabout
+rout
+route
+routine
+rove
+row
+rowboat
+rowdy
+Rowe
+Rowena
+Rowland
+Rowley
+Roxbury
+Roy
+royal
+royalty
+Royce
+RPM
+r's
+RSVP
+Ruanda
+rub
+Rubaiyat
+rubbery
+rubbish
+rubble
+rubdown
+Rube
+Ruben
+rubicund
+rubidium
+Rubin
+rubric
+ruby
+ruckus
+rudder
+ruddy
+rude
+rudiment
+rudimentary
+Rudolf
+Rudolph
+Rudy
+Rudyard
+rue
+rueful
+ruffian
+ruffle
+rufous
+Rufus
+rug
+ruin
+ruination
+ruinous
+rule
+rum
+Rumania
+rumble
+rumen
+Rumford
+ruminant
+ruminate
+rummage
+rummy
+rump
+rumple
+rumpus
+run
+runabout
+runaway
+rundown
+rune
+rung
+Runge
+runic
+runneth
+runny
+Runnymede
+runoff
+runt
+runty
+runway
+Runyon
+rupee
+rupture
+rural
+ruse
+rush
+Rushmore
+rusk
+Russ
+Russell
+russet
+Russia
+Russo
+russula
+rust
+rustic
+rustle
+rustproof
+rusty
+rut
+rutabaga
+Rutgers
+Ruth
+ruthenium
+Rutherford
+ruthless
+rutile
+Rutland
+Rutledge
+rutty
+Rwanda
+Ryan
+Rydberg
+Ryder
+rye
+s
+sa
+sabbath
+sabbatical
+Sabina
+Sabine
+sable
+sabotage
+sabra
+sac
+saccharine
+sachem
+Sachs
+sack
+sacral
+sacrament
+Sacramento
+sacred
+sacrifice
+sacrificial
+sacrilege
+sacrilegious
+sacristan
+sacrosanct
+sad
+sadden
+saddle
+saddlebag
+Sadie
+sadism
+sadist
+Sadler
+safari
+safe
+safeguard
+safekeeping
+safety
+saffron
+sag
+saga
+sagacious
+sagacity
+sage
+sagebrush
+sagging
+Saginaw
+sagittal
+Sagittarius
+sago
+saguaro
+Sahara
+said
+Saigon
+sail
+sailboat
+sailfish
+sailor
+saint
+sake
+Sal
+salaam
+salacious
+salad
+salamander
+salami
+salary
+sale
+Salem
+Salerno
+salesgirl
+Salesian
+saleslady
+salesman
+salesmen
+salesperson
+salient
+Salina
+saline
+Salisbury
+Salish
+saliva
+salivary
+salivate
+Salk
+Salle
+sallow
+sally
+salmon
+salmonberry
+salmonella
+salon
+saloon
+saloonkeep
+salsify
+salt
+saltbush
+Salton
+saltwater
+salty
+salubrious
+salutary
+salutation
+salute
+salutory
+Salvador
+salvage
+salvageable
+salvation
+Salvatore
+salve
+salvo
+Sam
+samarium
+samba
+same
+Sammy
+Samoa
+samovar
+sample
+Sampson
+Samson
+Samuel
+Samuelson
+samurai
+San
+Sana
+sanatoria
+sanatorium
+Sanborn
+Sanchez
+Sancho
+sanctify
+sanctimonious
+sanction
+sanctity
+sanctuary
+sand
+sandal
+sandalwood
+sandbag
+sandblast
+Sandburg
+sanderling
+Sanderson
+sandhill
+Sandia
+sandman
+sandpaper
+sandpile
+sandpiper
+Sandra
+sandstone
+Sandusky
+sandwich
+sandy
+sane
+Sanford
+sang
+sangaree
+sanguinary
+sanguine
+sanguineous
+Sanhedrin
+sanicle
+sanitarium
+sanitary
+sanitate
+sank
+sans
+Sanskrit
+Santa
+Santayana
+Santiago
+Santo
+Sao
+sap
+sapiens
+sapient
+sapling
+saponify
+sapphire
+Sappho
+sappy
+saprophyte
+saprophytic
+sapsucker
+Sara
+Saracen
+Sarah
+Saran
+Sarasota
+Saratoga
+sarcasm
+sarcastic
+sarcoma
+sarcophagus
+sardine
+Sardinia
+sardonic
+Sargent
+sari
+sarong
+sarsaparilla
+sarsparilla
+sash
+sashay
+sashimi
+Saskatchewan
+Saskatoon
+sassafras
+sat
+satan
+satanic
+satellite
+satiable
+satiate
+satiety
+satin
+satire
+satiric
+satisfaction
+satisfactory
+satisfy
+saturable
+saturate
+saturater
+Saturday
+Saturn
+Saturnalia
+saturnine
+satyr
+sauce
+saucepan
+saucy
+Saud
+Saudi
+sauerkraut
+Saul
+Sault
+sauna
+Saunders
+saunter
+sausage
+saute
+sauterne
+savage
+savagery
+savanna
+Savannah
+savant
+save
+Saviour
+Savonarola
+savoy
+Savoyard
+savvy
+saw
+sawbelly
+sawdust
+sawfish
+sawfly
+sawmill
+sawtimber
+sawtooth
+sawyer
+sax
+saxifrage
+Saxon
+Saxony
+saxophone
+say
+SC
+scab
+scabbard
+scabious
+scabrous
+scad
+scaffold
+Scala
+scalar
+scald
+scale
+scallop
+scalp
+scaly
+scam
+scamp
+scan
+scandal
+scandalous
+Scandinavia
+scandium
+scant
+scanty
+scapegoat
+scapula
+scapular
+scar
+Scarborough
+scarce
+scare
+scarecrow
+scarf
+scarface
+scarify
+Scarlatti
+scarlet
+scarp
+Scarsdale
+scarves
+scary
+scat
+scathe
+scathing
+scatterbrain
+scattergun
+scaup
+scavenge
+scenario
+scene
+scenery
+scenic
+scent
+sceptic
+Schaefer
+Schafer
+Schantz
+schedule
+Scheherazade
+schelling
+schema
+schemata
+schematic
+scheme
+Schenectady
+scherzo
+Schiller
+schism
+schist
+schizoid
+schizomycetes
+schizophrenia
+schizophrenic
+Schlesinger
+schlieren
+Schlitz
+Schloss
+Schmidt
+Schmitt
+Schnabel
+schnapps
+Schneider
+Schoenberg
+Schofield
+scholar
+scholastic
+school
+schoolbook
+schoolboy
+schoolgirl
+schoolgirlish
+schoolhouse
+schoolmarm
+schoolmaster
+schoolmate
+schoolroom
+schoolteacher
+schoolwork
+schoolyard
+schooner
+Schottky
+Schroeder
+Schroedinger
+Schubert
+Schultz
+Schulz
+Schumacher
+Schumann
+Schuster
+Schuyler
+Schuylkill
+Schwab
+Schwartz
+Schweitzer
+Sci
+sciatica
+science
+scientific
+scientist
+scimitar
+scintillate
+scion
+scissor
+sclerosis
+sclerotic
+SCM
+scoff
+scold
+scoop
+scoot
+scope
+scopic
+scops
+scorch
+score
+scoreboard
+scorecard
+scoria
+scorn
+scornful
+Scorpio
+scorpion
+Scot
+scotch
+Scotia
+Scotland
+Scotsman
+Scotsmen
+Scott
+Scottish
+Scottsdale
+Scotty
+scoundrel
+scour
+scourge
+scout
+scowl
+scrabble
+scraggly
+scram
+scramble
+Scranton
+scrap
+scrapbook
+scrape
+scrappy
+scratch
+scratchy
+scrawl
+scrawny
+scream
+screech
+screechy
+screed
+screen
+screenful
+screenplay
+screw
+screwball
+screwbean
+screwdriver
+screwworm
+screwy
+scribble
+scribe
+Scribners
+scrim
+scrimmage
+Scripps
+script
+scription
+scriptural
+scripture
+scriptwriter
+scriven
+scroll
+scrooge
+scrotum
+scrounge
+scrub
+scrubby
+scruffy
+scrumptious
+scruple
+scrupulosity
+scrupulous
+scrutable
+scrutiny
+scuba
+scud
+scuff
+scuffle
+scull
+sculpin
+sculpt
+sculptor
+sculptural
+sculpture
+scum
+scurrilous
+scurry
+scurvy
+scuttle
+scutum
+Scylla
+scythe
+Scythia
+SD
+SE
+sea
+seabed
+seaboard
+Seaborg
+seacoast
+seafare
+seafood
+Seagram
+seagull
+seahorse
+seal
+sealant
+seam
+seaman
+seamen
+seamstress
+seamy
+Sean
+seance
+seaport
+seaquake
+sear
+search
+searchlight
+seashell
+seashore
+seaside
+season
+seasonal
+seat
+seater
+Seattle
+seaward
+seawater
+seaweed
+seaworthy
+sebaceous
+Sebastian
+sec
+secant
+secede
+secession
+seclude
+seclusion
+second
+secondary
+secondhand
+secrecy
+secret
+secretarial
+secretariat
+secretary
+secrete
+secretion
+secretive
+sect
+sectarian
+section
+sector
+secular
+secure
+sedan
+sedate
+sedentary
+seder
+sedge
+sediment
+sedimentary
+sedimentation
+sedition
+seditious
+seduce
+seduction
+seductive
+sedulous
+see
+seeable
+seed
+seedbed
+seedling
+seedy
+seeing
+seek
+seem
+seen
+seep
+seepage
+seersucker
+seethe
+seething
+segment
+segmentation
+Segovia
+segregant
+segregate
+Segundo
+Seidel
+seismic
+seismograph
+seismography
+seismology
+seize
+seizure
+seldom
+select
+selectman
+selectmen
+selector
+Selectric
+Selena
+selenate
+selenite
+selenium
+self
+selfadjoint
+selfish
+Selfridge
+Selkirk
+sell
+sellout
+Selma
+seltzer
+selves
+Selwyn
+semantic
+semaphore
+semblance
+semester
+semi
+seminal
+seminar
+seminarian
+seminary
+Seminole
+Semiramis
+Semite
+Semitic
+semper
+sen
+senate
+senatorial
+send
+Seneca
+Senegal
+senescent
+senile
+senior
+senor
+Senora
+senorita
+sensate
+sense
+sensible
+sensitive
+sensor
+sensory
+sensual
+sensuous
+sent
+sentence
+sentential
+sentient
+sentiment
+sentinel
+sentry
+Seoul
+sepal
+separable
+separate
+sepia
+Sepoy
+sept
+septa
+septate
+September
+septennial
+septic
+septillion
+septuagenarian
+septum
+sepulchral
+seq
+sequel
+sequent
+sequential
+sequester
+sequestration
+sequin
+sequitur
+Sequoia
+sera
+seraglio
+serape
+seraphim
+Serbia
+serenade
+serendipitous
+serendipity
+serene
+serf
+serge
+sergeant
+Sergei
+serial
+seriatim
+sericulture
+series
+serif
+serine
+serious
+sermon
+serology
+Serpens
+serpent
+serpentine
+serum
+servant
+serve
+service
+serviceable
+serviceberry
+serviceman
+servicemen
+serviette
+servile
+servitor
+servitude
+servo
+servomechanism
+sesame
+session
+set
+setback
+Seth
+Seton
+setscrew
+settle
+setup
+seven
+sevenfold
+seventeen
+seventeenth
+seventh
+seventieth
+seventy
+seventyfold
+sever
+several
+severalfold
+severalty
+severe
+Severn
+Seville
+sew
+sewage
+Seward
+sewerage
+sewn
+sex
+Sextans
+sextet
+sextic
+sextillion
+sexton
+sextuple
+sextuplet
+sexual
+sexy
+Seychelle
+Seymour
+sforzando
+shabby
+shack
+shackle
+shad
+shadbush
+shade
+shadflower
+shadow
+shadowy
+shady
+Shafer
+Shaffer
+shaft
+shag
+shagbark
+shagging
+shaggy
+shah
+shake
+shakeable
+shakedown
+shaken
+Shakespeare
+Shakespearean
+Shakespearian
+shako
+shaky
+shale
+shall
+shallot
+shallow
+shalom
+sham
+shaman
+shamble
+shame
+shameface
+shameful
+shampoo
+shamrock
+Shanghai
+shank
+Shannon
+shan't
+Shantung
+shanty
+shape
+Shapiro
+shard
+share
+sharecrop
+sharecropper
+shareholder
+Shari
+shark
+Sharon
+sharp
+Sharpe
+sharpen
+sharpshoot
+Shasta
+shatter
+shatterproof
+Shattuck
+shave
+shaven
+shaw
+shawl
+Shawnee
+shay
+she
+Shea
+sheaf
+shear
+Shearer
+sheath
+sheathe
+sheave
+shebang
+she'd
+shed
+Shedir
+Sheehan
+sheen
+sheep
+sheepherder
+sheepskin
+sheer
+sheet
+Sheffield
+sheik
+Sheila
+Shelby
+Sheldon
+shelf
+she'll
+shell
+Shelley
+shellfish
+shelter
+Shelton
+shelve
+Shenandoah
+shenanigan
+Shepard
+shepherd
+shepherdess
+Sheppard
+Sheraton
+sherbet
+Sheridan
+sheriff
+Sherlock
+Sherman
+Sherrill
+sherry
+Sherwin
+Sherwood
+shibboleth
+shield
+shift
+shifty
+shill
+Shiloh
+shim
+shimmy
+shin
+shinbone
+shine
+shingle
+Shinto
+shiny
+ship
+shipboard
+shipbuild
+shipbuilding
+shiplap
+Shipley
+shipload
+shipman
+shipmate
+shipmen
+shipshape
+shipwreck
+shipyard
+shire
+shirk
+Shirley
+shirt
+shirtmake
+shish
+shitepoke
+shiv
+Shiva
+shiver
+shivery
+Shmuel
+shoal
+shock
+Shockley
+shod
+shoddy
+shoe
+shoehorn
+shoelace
+shoemake
+shoestring
+shoji
+shone
+shoo
+shoofly
+shook
+shoot
+shop
+shopkeep
+shopworn
+shore
+shorebird
+shorefront
+shoreline
+short
+shortage
+shortcake
+shortcoming
+shortcut
+shorten
+shortfall
+shorthand
+shortish
+shortsighted
+shortstop
+Shoshone
+shot
+shotbush
+shotgun
+should
+shoulder
+shouldn't
+shout
+shove
+shovel
+show
+showboat
+showcase
+showdown
+showman
+showmen
+shown
+showpiece
+showplace
+showroom
+showy
+shrank
+shrapnel
+shred
+Shreveport
+shrew
+shrewd
+shrewish
+shriek
+shrift
+shrike
+shrill
+shrilly
+shrimp
+shrine
+shrink
+shrinkage
+shrive
+shrivel
+shroud
+shrove
+shrub
+shrubbery
+shrug
+shrugging
+shrunk
+shrunken
+Shu
+shuck
+shudder
+shuddery
+shuffle
+shuffleboard
+Shulman
+shun
+shunt
+shut
+shutdown
+shutoff
+shutout
+shuttle
+shuttlecock
+shy
+Shylock
+shyly
+sial
+SIAM
+Siamese
+Sian
+sib
+Siberia
+sibilant
+Sibley
+sibling
+sibyl
+sic
+Sicilian
+Sicily
+sick
+sickbed
+sicken
+sickish
+sickle
+sicklewort
+sickroom
+side
+sidearm
+sideband
+sideboard
+sidecar
+sidelight
+sideline
+sidelong
+sideman
+sidemen
+sidereal
+siderite
+sidesaddle
+sideshow
+sidestep
+sidestepped
+sidestepping
+sidetrack
+sidewalk
+sidewall
+sideway
+sidewinder
+sidewise
+sidle
+Sidney
+siege
+Siegel
+Siegfried
+Sieglinda
+Siegmund
+Siemens
+Siena
+sienna
+sierra
+siesta
+sieve
+sift
+sigh
+sight
+sightsee
+sightseeing
+sightseer
+sigma
+Sigmund
+sign
+signal
+signature
+signboard
+signet
+significant
+signify
+Signor
+Signora
+signpost
+Sikh
+Sikkim
+Sikorsky
+silage
+silane
+Silas
+silent
+silhouette
+silica
+silicate
+siliceous
+silicic
+silicide
+silicon
+silicone
+silicosis
+silk
+silken
+silkworm
+silky
+sill
+silly
+silo
+silt
+siltation
+siltstone
+silty
+silver
+Silverman
+silversmith
+silverware
+silvery
+sima
+simian
+similar
+simile
+similitude
+Simla
+simmer
+Simmons
+Simon
+Simonson
+simper
+simple
+simplectic
+simpleminded
+simpleton
+simplex
+simplicial
+simplicity
+simplify
+simplistic
+simply
+Simpson
+Sims
+simulate
+simulcast
+simultaneity
+simultaneous
+sin
+Sinai
+Sinbad
+since
+sincere
+Sinclair
+sine
+sinew
+sinewy
+sinful
+sing
+singable
+Singapore
+singe
+single
+singlehanded
+singleminded
+singlet
+singleton
+singsong
+singular
+sinh
+sinister
+sinistral
+sink
+sinkhole
+Sino
+Sinology
+sinter
+sinuous
+sinus
+sinusoid
+sinusoidal
+Sioux
+sip
+sir
+sire
+siren
+Sirius
+sis
+sisal
+siskin
+sister
+Sistine
+Sisyphean
+Sisyphus
+sit
+site
+situ
+situate
+situs
+siva
+six
+sixfold
+sixgun
+sixteen
+sixteenth
+sixth
+sixtieth
+sixty
+sixtyfold
+size
+sizzle
+skat
+skate
+skateboard
+skater
+skeet
+skein
+skeleta
+skeletal
+skeleton
+skeptic
+sketch
+sketchbook
+sketchpad
+sketchy
+skew
+ski
+skid
+skiddy
+skiff
+skill
+skillet
+skillful
+skim
+skimp
+skimpy
+skin
+skindive
+skinflint
+skinny
+skintight
+skip
+skipjack
+Skippy
+skirmish
+skirt
+skit
+skittle
+Skopje
+skulk
+skull
+skullcap
+skullduggery
+skunk
+sky
+Skye
+skyhook
+skyjack
+skylark
+skylight
+skyline
+skyrocket
+skyscrape
+skyward
+skywave
+skyway
+slab
+slack
+slacken
+sladang
+slag
+slain
+slake
+slam
+slander
+slanderous
+slang
+slant
+slap
+slapdash
+slapstick
+slash
+slat
+slate
+slater
+slaughter
+slaughterhouse
+Slav
+slave
+slavery
+Slavic
+slavish
+Slavonic
+slay
+sleazy
+sled
+sledge
+sledgehammer
+sleek
+sleep
+sleepwalk
+sleepy
+sleet
+sleety
+sleeve
+sleigh
+sleight
+slender
+slept
+sleuth
+slew
+slice
+slick
+slid
+slide
+slight
+slim
+slime
+slimy
+sling
+slingshot
+slink
+slip
+slippage
+slippery
+slipshod
+slit
+slither
+sliver
+slivery
+Sloan
+Sloane
+slob
+Slocum
+sloe
+slog
+slogan
+sloganeer
+slogging
+sloop
+slop
+slope
+sloppy
+slosh
+slot
+sloth
+slothful
+slouch
+slough
+Slovakia
+sloven
+Slovenia
+slow
+slowdown
+sludge
+slug
+slugging
+sluggish
+sluice
+slum
+slumber
+slump
+slung
+slunk
+slur
+slurp
+slurry
+slush
+slushy
+sly
+smack
+small
+Smalley
+smallish
+smallpox
+smalltime
+smart
+smash
+smattering
+smear
+smell
+smelly
+smelt
+smile
+smirk
+smite
+smith
+smithereens
+Smithfield
+Smithson
+smithy
+smitten
+smog
+smoke
+smokehouse
+smokescreen
+smokestack
+smoky
+smolder
+smooch
+smooth
+smoothbore
+smote
+smother
+Smucker
+smudge
+smudgy
+smug
+smuggle
+smut
+smutty
+Smyrna
+Smythe
+snack
+snafu
+snag
+snagging
+snail
+snake
+snakebird
+snakebite
+snakeroot
+snap
+snapback
+snapdragon
+snappish
+snappy
+snapshot
+snare
+snark
+snarl
+snatch
+snazzy
+sneak
+sneaky
+sneer
+sneeze
+snell
+snick
+Snider
+sniff
+sniffle
+snifter
+snigger
+snip
+snipe
+snippet
+snippy
+snivel
+snob
+snobbery
+snobbish
+snook
+snoop
+snoopy
+snore
+snorkel
+snort
+snotty
+snout
+snow
+snowball
+snowbank
+snowfall
+snowflake
+snowshoe
+snowstorm
+snowy
+snub
+snuff
+snuffle
+snug
+snuggle
+snuggly
+Snyder
+so
+soak
+soap
+soapstone
+soapsud
+soapy
+soar
+sob
+sober
+sobriety
+sobriquet
+Soc
+soccer
+sociable
+social
+societal
+Societe
+society
+socioeconomic
+sociolinguistic
+sociology
+sociometry
+sock
+socket
+sockeye
+Socrates
+Socratic
+sod
+soda
+sodden
+sodium
+sofa
+soffit
+Sofia
+soft
+softball
+softcover
+soften
+software
+softwood
+soggy
+soignee
+soil
+soiree
+sojourn
+Sol
+solace
+solar
+sold
+solder
+soldier
+soldiery
+sole
+solecism
+solemn
+solenoid
+solicit
+solicitation
+solicitor
+solicitous
+solicitude
+solid
+solidarity
+solidify
+soliloquy
+solipsism
+solitary
+soliton
+solitude
+solo
+Solomon
+Solon
+solstice
+soluble
+solute
+solution
+solvate
+solve
+solvent
+soma
+somal
+Somali
+Somalia
+somatic
+somber
+sombre
+some
+somebody
+somebody'll
+someday
+somehow
+someone
+someone'll
+someplace
+Somers
+somersault
+Somerset
+Somerville
+something
+sometime
+somewhat
+somewhere
+sommelier
+Sommerfeld
+somnolent
+son
+sonant
+sonar
+sonata
+song
+songbag
+songbird
+songbook
+songful
+sonic
+sonnet
+sonny
+Sonoma
+Sonora
+sonorant
+sonority
+sonorous
+Sony
+soon
+soot
+sooth
+soothe
+soothsay
+soothsayer
+sop
+sophia
+Sophie
+sophism
+sophisticate
+sophistry
+Sophoclean
+Sophocles
+sophomore
+sophomoric
+soprano
+sora
+sorb
+sorcery
+sordid
+sore
+Sorensen
+Sorenson
+sorghum
+sorority
+sorption
+sorrel
+sorrow
+sorrowful
+sorry
+sort
+sortie
+sou
+souffle
+sough
+sought
+soul
+soulful
+sound
+soundproof
+soup
+soupy
+sour
+sourberry
+source
+sourdough
+sourwood
+Sousa
+soutane
+south
+Southampton
+southbound
+southeast
+southeastern
+southern
+southernmost
+Southey
+southland
+southpaw
+southward
+southwest
+southwestern
+souvenir
+sovereign
+sovereignty
+soviet
+sovkhoz
+sow
+sowbelly
+sowbug
+sown
+soy
+soya
+soybean
+spa
+space
+spacecraft
+spacesuit
+spacetime
+spacious
+spade
+spaghetti
+Spain
+spalding
+span
+spandrel
+spangle
+Spaniard
+spaniel
+Spanish
+spar
+spare
+sparge
+spark
+sparkle
+Sparkman
+sparky
+sparling
+sparrow
+sparse
+Sparta
+spartan
+spasm
+spasmodic
+spastic
+spat
+spate
+spatial
+spatlum
+spatterdock
+spatula
+Spaulding
+spavin
+spawn
+spay
+speak
+speakeasy
+spear
+spearhead
+spearmint
+spec
+special
+speciate
+specie
+species
+specific
+specify
+specimen
+specious
+speck
+speckle
+spectacle
+spectacular
+spectator
+Spector
+spectra
+spectral
+spectrogram
+spectrograph
+spectrography
+spectrometer
+spectrophotometer
+spectroscope
+spectroscopic
+spectroscopy
+spectrum
+specular
+speculate
+sped
+speech
+speed
+speedboat
+speedometer
+speedup
+speedwell
+speedy
+spell
+spellbound
+Spencer
+Spencerian
+spend
+spent
+sperm
+spermatophyte
+spermatozoa
+spermatozoon
+Sperry
+spew
+sphagnum
+sphalerite
+sphere
+spheric
+spheroid
+spheroidal
+spherule
+sphinx
+sphygmomanometer
+Spica
+spice
+spicebush
+spicy
+spider
+spiderwort
+spidery
+Spiegel
+spigot
+spike
+spikenard
+spiky
+spill
+spillover
+spilt
+spin
+spinach
+spinal
+spindle
+spindly
+spine
+spinel
+spinnaker
+spinneret
+spinodal
+spinoff
+spinster
+spiny
+spiral
+spire
+spirit
+spiritual
+Spiro
+spirochaete
+Spirogyra
+spit
+spite
+spiteful
+spitfire
+spittle
+spitz
+splash
+splashy
+splat
+splay
+spleen
+spleenwort
+splendid
+splenetic
+splice
+spline
+splint
+splintery
+split
+splotch
+splotchy
+splurge
+splutter
+spoil
+spoilage
+Spokane
+spoke
+spoken
+spokesman
+spokesmen
+spokesperson
+sponge
+spongy
+sponsor
+spontaneity
+spontaneous
+spoof
+spook
+spooky
+spool
+spoon
+spoonful
+sporadic
+spore
+sport
+sportsman
+sportsmen
+sportswear
+sportswriter
+sportswriting
+sporty
+spot
+spotlight
+spotty
+spouse
+spout
+Sprague
+sprain
+sprang
+sprawl
+spray
+spread
+spree
+sprig
+sprightly
+spring
+springboard
+springe
+Springfield
+springtail
+springtime
+springy
+sprinkle
+sprint
+sprite
+sprocket
+Sproul
+sprout
+spruce
+sprue
+sprung
+spud
+spume
+spumoni
+spun
+spunk
+spunky
+spur
+spurge
+spurious
+spurn
+spurt
+sputnik
+sputter
+spy
+spyglass
+squabble
+squad
+squadron
+squalid
+squall
+squamous
+squander
+square
+squash
+squashberry
+squashy
+squat
+squatted
+squatter
+squatting
+squaw
+squawbush
+squawk
+squawroot
+squeak
+squeaky
+squeal
+squeamish
+squeegee
+squeeze
+squelch
+Squibb
+squid
+squill
+squint
+squire
+squirm
+squirmy
+squirrel
+squirt
+squishy
+Sri
+s's
+SSE
+SST
+SSW
+St
+stab
+stabile
+stable
+stableman
+stablemen
+staccato
+stack
+Stacy
+stadia
+stadium
+staff
+Stafford
+stag
+stage
+stagecoach
+stagnant
+stagnate
+stagy
+Stahl
+staid
+stain
+stair
+staircase
+stairway
+stairwell
+stake
+stalactite
+stalagmite
+stale
+stalemate
+Staley
+Stalin
+stalk
+stall
+stallion
+stalwart
+stamen
+Stamford
+stamina
+staminate
+stammer
+stamp
+stampede
+Stan
+stance
+stanch
+stanchion
+stand
+standard
+standby
+standeth
+Standish
+standoff
+standpoint
+standstill
+Stanford
+Stanhope
+stank
+Stanley
+stannic
+stannous
+Stanton
+stanza
+staph
+staphylococcus
+staple
+Stapleton
+star
+starboard
+starch
+starchy
+stardom
+stare
+starfish
+stargaze
+stark
+Starkey
+starlet
+starlight
+starling
+Starr
+starry
+start
+startle
+startup
+starvation
+starve
+stash
+stasis
+state
+Staten
+stater
+stateroom
+statesman
+statesmen
+statewide
+static
+stationarity
+stationary
+stationery
+stationmaster
+statistician
+Statler
+stator
+statuary
+statue
+statuesque
+statuette
+stature
+status
+statute
+statutory
+Stauffer
+staunch
+Staunton
+stave
+stay
+stead
+steadfast
+steady
+steak
+steal
+stealth
+stealthy
+steam
+steamboat
+steamy
+stearate
+stearic
+Stearns
+steed
+steel
+Steele
+steelmake
+steely
+Steen
+steep
+steepen
+steeple
+steeplebush
+steeplechase
+steer
+steeve
+Stefan
+Stegosaurus
+stein
+Steinberg
+Steiner
+stella
+stellar
+stem
+stench
+stencil
+stenographer
+stenography
+stenotype
+step
+stepchild
+Stephanie
+stephanotis
+Stephen
+Stephenson
+stepmother
+steppe
+steprelation
+stepson
+stepwise
+steradian
+stereo
+stereography
+stereoscopy
+sterile
+sterling
+stern
+sternal
+Sternberg
+Sterno
+sternum
+steroid
+stethoscope
+Stetson
+Steuben
+Steve
+stevedore
+Steven
+Stevenson
+stew
+steward
+stewardess
+Stewart
+stick
+stickle
+stickleback
+stickpin
+sticktight
+sticky
+stiff
+stiffen
+stifle
+stigma
+stigmata
+stile
+stiletto
+still
+stillbirth
+stillwater
+stilt
+stimulant
+stimulate
+stimulatory
+stimuli
+stimulus
+sting
+stingray
+stingy
+stink
+stinkbug
+stinkpot
+stinky
+stint
+stipend
+stipple
+stipulate
+stir
+Stirling
+stirrup
+stitch
+stoat
+stochastic
+stock
+stockade
+stockbroker
+stockholder
+Stockholm
+stockpile
+stockroom
+Stockton
+stocky
+stodgy
+stoic
+stoichiometry
+stoke
+Stokes
+stole
+stolen
+stolid
+stomach
+stomp
+stone
+stonecrop
+Stonehenge
+stonewall
+stoneware
+stonewort
+stony
+stood
+stooge
+stool
+stoop
+stop
+stopband
+stopcock
+stopgap
+stopover
+stoppage
+stopwatch
+storage
+store
+storefront
+storehouse
+storekeep
+storeroom
+Storey
+stork
+storm
+stormbound
+stormy
+story
+storyboard
+storyteller
+storytelling
+stout
+stove
+stow
+stowage
+stowaway
+strabismic
+strabismus
+straddle
+strafe
+straggle
+straight
+straightaway
+straighten
+straightforward
+straightway
+strain
+strait
+strand
+strange
+strangle
+strangulate
+strap
+strata
+stratagem
+strategic
+strategist
+strategy
+Stratford
+stratify
+stratosphere
+stratospheric
+Stratton
+stratum
+stratus
+Strauss
+straw
+strawberry
+strawflower
+stray
+streak
+stream
+streamline
+streamside
+street
+streetcar
+strength
+strengthen
+strenuous
+streptococcus
+streptomycin
+stress
+stressful
+stretch
+strewn
+striate
+stricken
+Strickland
+strict
+stricture
+stride
+strident
+strife
+strike
+strikebreak
+string
+stringent
+stringy
+strip
+stripe
+striptease
+strive
+striven
+strobe
+stroboscopic
+strode
+stroke
+stroll
+Strom
+Stromberg
+strong
+stronghold
+strongroom
+strontium
+strop
+strophe
+strove
+struck
+structural
+structure
+struggle
+strum
+strung
+strut
+strychnine
+Stuart
+stub
+stubble
+stubborn
+stubby
+stucco
+stuck
+stud
+Studebaker
+student
+studio
+studious
+study
+stuff
+stuffy
+stultify
+stumble
+stump
+stumpage
+stumpy
+stun
+stung
+stunk
+stunt
+stupa
+stupefy
+stupendous
+stupid
+stupor
+Sturbridge
+sturdy
+sturgeon
+Sturm
+stutter
+Stuttgart
+Stuyvesant
+Stygian
+style
+styli
+stylish
+stylites
+stylus
+stymie
+styrene
+Styrofoam
+Styx
+suave
+sub
+subject
+subjunctive
+sublimate
+subliminal
+submersible
+submit
+submittal
+submitted
+submitting
+subpoena
+subrogation
+subservient
+subsidiary
+subsidy
+subsist
+subsistent
+substantial
+substantiate
+substantive
+substituent
+substitute
+substitution
+substitutionary
+substrate
+subsume
+subterfuge
+subterranean
+subtle
+subtlety
+subtly
+subtrahend
+suburb
+suburbia
+subversive
+subvert
+succeed
+success
+successful
+succession
+successive
+successor
+succinct
+succubus
+succumb
+such
+suck
+suckle
+sucrose
+suction
+sud
+Sudan
+Sudanese
+sudden
+sudorific
+suds
+sue
+suet
+suey
+Suez
+suffer
+suffice
+sufficient
+suffix
+suffocate
+Suffolk
+suffrage
+suffragette
+suffuse
+sugar
+sugary
+suggest
+suggestible
+suggestion
+suggestive
+suicidal
+suicide
+suit
+suitcase
+suite
+suitor
+sukiyaki
+sulfa
+sulfanilamide
+sulfate
+sulfide
+sulfite
+sulfonamide
+sulfur
+sulfuric
+sulfurous
+sulk
+sulky
+sullen
+Sullivan
+sully
+sulphur
+sultan
+sultry
+sum
+sumac
+Sumatra
+Sumeria
+summand
+summary
+summate
+summertime
+summit
+summitry
+summon
+Sumner
+sumptuous
+Sumter
+sun
+sunbeam
+sunbonnet
+sunburn
+sunburnt
+Sunday
+sunder
+sundew
+sundial
+sundown
+sundry
+sunfish
+sunflower
+sung
+sunglasses
+sunk
+sunken
+sunlight
+sunlit
+sunny
+Sunnyvale
+sunrise
+sunscreen
+sunset
+sunshade
+sunshine
+sunshiny
+sunspot
+suntan
+suntanned
+suntanning
+SUNY
+sup
+super
+superannuate
+superb
+superbly
+supercilious
+superficial
+superfluity
+superfluous
+superintendent
+superior
+superlative
+superlunary
+supernatant
+supersede
+superstition
+superstitious
+supervene
+supervisory
+supine
+supplant
+supple
+supplementary
+supplicant
+supplicate
+supply
+support
+supposable
+suppose
+supposition
+suppress
+suppressible
+suppression
+suppressor
+supra
+supranational
+supremacy
+supreme
+supremum
+surah
+surcease
+surcharge
+sure
+surefire
+surety
+surf
+surface
+surfactant
+surfeit
+surge
+surgeon
+surgery
+surgical
+surjection
+surjective
+surly
+surmise
+surmount
+surname
+surpass
+surplus
+surprise
+surreal
+surrender
+surreptitious
+surrey
+surrogate
+surround
+surtax
+surtout
+surveillant
+survey
+surveyor
+survival
+survive
+survivor
+Sus
+Susan
+Susanne
+susceptance
+susceptible
+sushi
+Susie
+suspect
+suspend
+suspense
+suspension
+suspensor
+suspicion
+suspicious
+Sussex
+sustain
+sustenance
+Sutherland
+Sutton
+suture
+Suzanne
+suzerain
+suzerainty
+Suzuki
+svelte
+Svetlana
+SW
+swab
+swabby
+swag
+Swahili
+swain
+swallow
+swallowtail
+swam
+swami
+swamp
+swampland
+swampy
+swan
+swank
+swanky
+Swanson
+swap
+swarm
+swart
+Swarthmore
+Swarthout
+swarthy
+swastika
+swat
+swatch
+swath
+swathe
+sway
+Swaziland
+swear
+sweat
+sweatband
+sweater
+sweatpants
+sweatshirt
+sweatshop
+sweatsocks
+sweaty
+Swede
+Sweden
+Swedish
+Sweeney
+sweep
+sweepstake
+sweet
+sweetbread
+sweeten
+sweetheart
+sweetie
+sweetish
+swell
+swelt
+swelter
+Swenson
+swept
+swerve
+swidden
+swift
+swig
+swigging
+swill
+swim
+swimsuit
+swindle
+swine
+swing
+swingable
+swingy
+swipe
+swirl
+swirly
+swish
+swishy
+swiss
+switch
+switchback
+switchblade
+switchboard
+switchgear
+switchman
+switchmen
+Switzer
+Switzerland
+swivel
+swizzle
+swollen
+swoop
+sword
+swordfish
+swordplay
+swordtail
+swore
+sworn
+swum
+swung
+sybarite
+Sybil
+sycamore
+sycophant
+sycophantic
+Sydney
+syenite
+Sykes
+syllabi
+syllabic
+syllabify
+syllable
+syllabus
+syllogism
+syllogistic
+Sylow
+sylvan
+Sylvania
+Sylvester
+Sylvia
+symbiont
+symbiosis
+symbiote
+symbiotic
+symbol
+symbolic
+symmetry
+sympathetic
+sympathy
+symphonic
+symphony
+symplectic
+symposia
+symposium
+symptom
+symptomatic
+synagogue
+synapse
+synaptic
+synchronism
+synchronous
+synchrony
+synchrotron
+syncopate
+syndic
+syndicate
+syndrome
+synecdoche
+synergism
+synergistic
+synergy
+Synge
+synod
+synonym
+synonymous
+synonymy
+synopses
+synopsis
+synoptic
+syntactic
+syntax
+synthesis
+synthetic
+syphilis
+syphilitic
+Syracuse
+Syria
+syringa
+syringe
+syrinx
+syrup
+syrupy
+system
+systematic
+systemic
+systemwide
+syzygy
+Szilard
+t
+TA
+tab
+tabernacle
+table
+tableau
+tableaux
+tablecloth
+tableland
+tablespoon
+tablespoonful
+tablet
+tabletop
+tabloid
+taboo
+tabu
+tabula
+tabular
+tabulate
+tachinid
+tachometer
+tachyon
+tacit
+taciturn
+Tacitus
+tack
+tackle
+tacky
+Tacoma
+tact
+tactful
+tactic
+tactile
+tactual
+tad
+tadpole
+taffeta
+taffy
+taft
+tag
+tagging
+Tahiti
+Tahoe
+taiga
+tail
+tailgate
+taillight
+tailor
+tailspin
+tailwind
+taint
+Taipei
+Taiwan
+take
+taken
+takeoff
+takeover
+talc
+talcum
+tale
+talent
+talisman
+talismanic
+talk
+talkative
+talkie
+talky
+tall
+Tallahassee
+tallow
+tally
+tallyho
+Talmud
+Talmudic
+talon
+talus
+tam
+tamale
+tamarack
+tamarind
+tamarisk
+tambourine
+tame
+Tamil
+Tammany
+tamp
+Tampa
+tampon
+tan
+tanager
+Tanaka
+Tananarive
+tandem
+tang
+Tanganyika
+tangent
+tangential
+tangerine
+tangible
+tangle
+tango
+tangy
+tanh
+tank
+tankard
+tannin
+tansy
+tantalum
+Tantalus
+tantamount
+Tantric
+tantrum
+Tanya
+Tanzania
+tao
+tap
+tapa
+tape
+taper
+tapestry
+tapeworm
+tapioca
+tapir
+tapis
+tappa
+tappet
+taproot
+tar
+tara
+tarantara
+tarantula
+Tarbell
+tardy
+target
+tariff
+tarnish
+taro
+tarpaper
+tarpaulin
+tarpon
+tarry
+Tarrytown
+tarsier
+tart
+tartar
+Tartary
+Tarzan
+task
+taskmaster
+Tasmania
+Tass
+tassel
+taste
+tasteful
+tasting
+tasty
+tat
+tate
+tater
+tattle
+tattler
+tattletale
+tattoo
+tatty
+tau
+taught
+taunt
+Taurus
+taut
+tautology
+tavern
+taverna
+tawdry
+tawny
+tax
+taxa
+taxation
+taxi
+taxicab
+taxidermist
+taxidermy
+taxied
+taxiway
+taxon
+taxonomic
+taxonomist
+taxonomy
+taxpayer
+taxpaying
+Taylor
+tea
+teacart
+teach
+teacup
+teahouse
+teak
+teakettle
+teakwood
+teal
+team
+teammate
+teamster
+teamwork
+teapot
+tear
+teardrop
+tearful
+tease
+teasel
+teaspoon
+teaspoonful
+teat
+tech
+technetium
+technic
+technician
+Technion
+technique
+technology
+tectonic
+tecum
+Ted
+Teddy
+tedious
+tedium
+tee
+teeing
+teem
+teen
+teenage
+teensy
+teet
+teeth
+teethe
+teetotal
+Teflon
+Tegucigalpa
+Teheran
+Tehran
+tektite
+Tektronix
+Tel
+telecommunicate
+teleconference
+Teledyne
+Telefunken
+telegram
+telegraph
+telegraphy
+telekinesis
+telemeter
+teleology
+teleost
+telepathic
+telepathy
+telephone
+telephonic
+telephony
+telephoto
+telephotography
+teleprinter
+teleprocessing
+teleprompter
+telescope
+telescopic
+teletype
+teletypesetting
+teletypewrite
+televise
+television
+Telex
+tell
+telltale
+tellurium
+temerity
+temper
+tempera
+temperance
+temperate
+temperature
+tempest
+tempestuous
+template
+temple
+Templeton
+tempo
+temporal
+temporary
+tempt
+temptation
+temptress
+ten
+tenable
+tenacious
+tenacity
+tenant
+tend
+tendency
+tenderfoot
+tenderhearted
+tenderloin
+tendon
+tenebrous
+tenement
+tenet
+tenfold
+Tenneco
+Tennessee
+Tenney
+tennis
+Tennyson
+tenon
+tenor
+tense
+tensile
+tension
+tensor
+tenspot
+tent
+tentacle
+tentative
+tenth
+tenuous
+tenure
+tepee
+tepid
+teratogenic
+teratology
+terbium
+tercel
+Teresa
+term
+termcap
+terminable
+terminal
+terminate
+termini
+terminology
+terminus
+termite
+tern
+ternary
+Terpsichore
+terpsichorean
+Terra
+terrace
+terrain
+terramycin
+terrapin
+Terre
+terrestrial
+terrible
+terrier
+terrific
+terrify
+territorial
+territory
+terror
+terry
+terse
+tertiary
+Tess
+tessellate
+test
+testament
+testamentary
+testate
+testes
+testicle
+testicular
+testify
+testimonial
+testimony
+testosterone
+testy
+tetanus
+tete
+tether
+tetrachloride
+tetrafluoride
+tetragonal
+tetrahedra
+tetrahedral
+tetrahedron
+tetravalent
+Teutonic
+TEX
+Texaco
+Texan
+Texas
+text
+textbook
+textile
+Textron
+textual
+textural
+texture
+Thai
+Thailand
+Thalia
+thallium
+thallophyte
+than
+thank
+thankful
+thanksgiving
+that
+thatch
+that'd
+that'll
+thaw
+Thayer
+the
+Thea
+theatric
+Thebes
+thee
+theft
+their
+theism
+theist
+Thelma
+them
+thematic
+theme
+themselves
+then
+thence
+thenceforth
+theocracy
+theocratic
+Theodore
+Theodosian
+theologian
+theology
+theorem
+theoretic
+theoretician
+theorist
+theory
+therapeutic
+therapist
+therapy
+there
+thereabouts
+thereafter
+thereat
+thereby
+there'd
+therefor
+therefore
+therefrom
+therein
+there'll
+thereof
+thereon
+Theresa
+thereto
+theretofore
+thereunder
+thereupon
+therewith
+thermal
+thermionic
+thermistor
+thermo
+Thermofax
+thermophilic
+thermostat
+thesaurus
+these
+theses
+Theseus
+thesis
+thespian
+Thessalonian
+Thessaly
+theta
+Thetis
+they
+they'd
+they'll
+they're
+they've
+thiamin
+thick
+thicken
+thicket
+thickish
+thief
+thieves
+thieving
+thigh
+thimble
+thimbleful
+Thimbu
+thin
+thine
+thing
+think
+thinnish
+thiocyanate
+thiouracil
+third
+thirdhand
+thirst
+thirsty
+thirteen
+thirteenth
+thirtieth
+thirty
+thirtyfold
+this
+this'll
+thistle
+thistledown
+thither
+Thomas
+Thomistic
+Thompson
+Thomson
+thong
+Thor
+thoracic
+thorax
+Thoreau
+thoriate
+thorium
+thorn
+Thornton
+thorny
+thorough
+thoroughbred
+thoroughfare
+thoroughgoing
+Thorpe
+Thorstein
+those
+thou
+though
+thought
+thoughtful
+thousand
+thousandfold
+thousandth
+Thrace
+Thracian
+thrall
+thrash
+thread
+threadbare
+threat
+threaten
+three
+threefold
+threesome
+threonine
+thresh
+threshold
+threw
+thrice
+thrift
+thrifty
+thrill
+thrips
+thrive
+throat
+throaty
+throb
+throes
+thrombosis
+throne
+throng
+throttle
+through
+throughout
+throughput
+throw
+throwback
+thrown
+thrum
+thrush
+thrust
+Thruway
+Thuban
+thud
+thug
+thuggee
+Thule
+thulium
+thumb
+thumbnail
+thumbprint
+thump
+thunder
+thunderclap
+thundercloud
+thunderflower
+thunderous
+thundershower
+thunderstorm
+Thurman
+Thursday
+thus
+thwack
+thwart
+thy
+thyme
+thymine
+thymus
+thyratron
+thyroglobulin
+thyroid
+thyroidal
+thyronine
+thyrotoxic
+thyroxine
+thyself
+ti
+Tiber
+tibet
+Tibetan
+tibia
+tic
+tick
+ticket
+tickle
+ticklish
+tid
+tidal
+tidbit
+tide
+tideland
+tidewater
+tidy
+tie
+Tientsin
+tier
+Tiffany
+tift
+tiger
+tight
+tighten
+tightwad
+tigress
+Tigris
+til
+tilde
+tile
+till
+tilt
+tilth
+Tim
+timber
+timberland
+timbre
+time
+timeout
+timepiece
+timeshare
+timetable
+timeworn
+Timex
+timid
+Timon
+timothy
+tin
+Tina
+tincture
+tinder
+tine
+tinfoil
+tinge
+tingle
+tinker
+tinkle
+tinny
+tinsel
+tint
+tintype
+tiny
+Tioga
+tip
+tipoff
+Tipperary
+tipple
+tippy
+tipsy
+tiptoe
+tirade
+Tirana
+tire
+tiresome
+tissue
+tit
+Titan
+titanate
+titanic
+titanium
+tithe
+tithing
+titian
+titillate
+title
+titmice
+titmouse
+Tito
+titrate
+titular
+Titus
+tizzy
+TN
+TNT
+to
+toad
+toady
+toast
+tobacco
+Tobago
+Toby
+toccata
+today
+today'll
+Todd
+toddle
+toddy
+toe
+TOEFL
+toehold
+toenail
+toffee
+tofu
+tog
+together
+togging
+toggle
+Togo
+togs
+toil
+toilet
+toilsome
+tokamak
+token
+Tokyo
+told
+Toledo
+tolerable
+tolerant
+tolerate
+toll
+tollbooth
+tollgate
+tollhouse
+Tolstoy
+toluene
+Tom
+tomahawk
+tomato
+tomatoes
+tomb
+tombstone
+tome
+Tomlinson
+Tommie
+tommy
+tomography
+tomorrow
+Tompkins
+ton
+tonal
+tone
+tong
+tongue
+Toni
+tonic
+tonight
+tonk
+tonnage
+tonsil
+tonsillitis
+tony
+too
+toodle
+took
+tool
+toolkit
+toolmake
+toolsmith
+toot
+tooth
+toothache
+toothbrush
+toothpaste
+toothpick
+toothy
+tootle
+top
+topaz
+topcoat
+Topeka
+topgallant
+topheavy
+topic
+topmost
+topnotch
+topocentric
+topography
+topology
+toponym
+toponymy
+topple
+topsoil
+Topsy
+tor
+torah
+torch
+tore
+tori
+torn
+tornado
+toroid
+toroidal
+Toronto
+torpedo
+torpedoes
+torpid
+torpor
+torque
+torr
+Torrance
+torrent
+torrential
+torrid
+torsion
+torso
+tort
+tortoise
+tortoiseshell
+tortuous
+torture
+torus
+tory
+Toshiba
+toss
+tot
+total
+totalitarian
+tote
+totem
+totemic
+toto
+touch
+touchdown
+touchstone
+touchy
+tough
+tour
+tournament
+tousle
+tout
+tow
+toward
+towboat
+towel
+tower
+towhead
+towhee
+town
+townhouse
+Townsend
+townsman
+townsmen
+toxic
+toxicology
+toxin
+toy
+Toyota
+trace
+traceable
+tracery
+trachea
+tracheae
+track
+trackage
+tract
+tractor
+Tracy
+trade
+trademark
+tradeoff
+tradesman
+tradesmen
+tradition
+traffic
+trafficked
+trafficker
+trafficking
+trag
+tragedian
+tragedy
+tragic
+tragicomic
+trail
+trailblazer
+trailblazing
+trailhead
+trailside
+train
+trainee
+trainload
+trainman
+trainmen
+traipse
+trait
+traitor
+traitorous
+trajectory
+tram
+trammel
+tramp
+trample
+tramway
+trance
+tranquil
+tranquillity
+trans
+transact
+transalpine
+transatlantic
+transceiver
+transcend
+transcendent
+transcendental
+transconductance
+transcontinental
+transcribe
+transcript
+transcription
+transducer
+transduction
+transect
+transept
+transfer
+transferee
+transference
+transferor
+transferral
+transferred
+transferring
+transfinite
+transfix
+transform
+transformation
+transfusable
+transfuse
+transfusion
+transgress
+transgression
+transgressor
+transient
+transistor
+transit
+Transite
+transition
+transitive
+transitory
+translate
+transliterate
+translucent
+transmissible
+transmission
+transmit
+transmittable
+transmittal
+transmittance
+transmitted
+transmitter
+transmitting
+transmutation
+transmute
+transoceanic
+transom
+transonic
+transpacific
+transparent
+transpiration
+transpire
+transplant
+transplantation
+transport
+transportation
+transposable
+transpose
+transposition
+transship
+transshipping
+transudate
+Transvaal
+transversal
+transverse
+transvestite
+Transylvania
+trap
+trapezium
+trapezoid
+trapezoidal
+trash
+trashy
+Trastevere
+trauma
+traumatic
+travail
+travel
+travelogue
+traversable
+traversal
+traverse
+travertine
+travesty
+Travis
+trawl
+tray
+treacherous
+treachery
+tread
+treadle
+treadmill
+treason
+treasonous
+treasure
+treasury
+treat
+treatise
+treaty
+treble
+tree
+treetop
+trefoil
+trek
+trellis
+tremble
+tremendous
+tremolo
+tremor
+tremulous
+trench
+trenchant
+trencherman
+trenchermen
+trend
+trendy
+Trenton
+trepidation
+trespass
+tress
+trestle
+Trevelyan
+triable
+triad
+trial
+triangle
+triangular
+triangulate
+Triangulum
+Trianon
+Triassic
+triatomic
+tribal
+tribe
+tribesman
+tribesmen
+tribulate
+tribunal
+tribune
+tributary
+tribute
+Triceratops
+Trichinella
+trichloroacetic
+trichloroethane
+trichrome
+trick
+trickery
+trickle
+trickster
+tricky
+trident
+tridiagonal
+triennial
+trifle
+trifluoride
+trig
+trigonal
+trigonometry
+trigram
+trilingual
+trill
+trillion
+trillium
+trilobite
+trilogy
+trim
+trimer
+trimester
+Trinidad
+trinitarian
+trinity
+trinket
+trio
+triode
+trioxide
+trip
+tripartite
+tripe
+triphammer
+triphenylphosphine
+triple
+triplet
+Triplett
+triplex
+triplicate
+triploid
+triploidy
+tripod
+tripoli
+triptych
+trisodium
+Tristan
+tristate
+trisyllable
+trite
+tritium
+triton
+triumph
+triumphal
+triumphant
+triune
+trivalent
+trivia
+trivial
+trivium
+Trobriand
+trod
+trodden
+troff
+troglodyte
+troika
+Trojan
+troll
+trolley
+trollop
+trombone
+trompe
+troop
+trophic
+trophy
+tropic
+tropopause
+troposphere
+tropospheric
+trot
+trouble
+troubleshoot
+troublesome
+trough
+trounce
+troupe
+trouser
+trout
+Troutman
+troy
+truant
+truce
+truck
+truckload
+truculent
+trudge
+Trudy
+true
+truffle
+truism
+Truk
+truly
+Truman
+Trumbull
+trump
+trumpery
+trumpet
+truncate
+trundle
+trunk
+trunkful
+truss
+trust
+trustee
+trustful
+trustworthy
+trusty
+truth
+truthful
+TRW
+try
+trypsin
+trytophan
+t's
+tsar
+tsarina
+tset
+tsunami
+TTL
+TTY
+tty
+tub
+tuba
+tube
+tuberculin
+tuberculosis
+tuberous
+tubular
+tubule
+tuck
+Tucson
+Tudor
+Tuesday
+tuff
+tuft
+tug
+tugboat
+tugging
+tuition
+Tulane
+tularemia
+tulip
+tulle
+Tulsa
+tum
+tumble
+tumbrel
+tumult
+tumultuous
+tun
+tuna
+tundra
+tune
+tuneful
+tung
+tungstate
+tungsten
+tunic
+Tunis
+Tunisia
+tunnel
+tupelo
+tuple
+turban
+turbid
+turbidity
+turbinate
+turbine
+turbofan
+turbojet
+turbulent
+turf
+Turin
+Turing
+turk
+turkey
+Turkish
+turmeric
+turmoil
+turn
+turnabout
+turnaround
+turnery
+turnip
+turnkey
+turnoff
+turnout
+turnover
+turnpike
+turnstone
+turntable
+turpentine
+turpitude
+turquoise
+turret
+turtle
+turtleback
+turtleneck
+turvy
+Tuscaloosa
+Tuscan
+Tuscany
+Tuscarora
+tusk
+Tuskegee
+tussle
+tussock
+Tutankhamen
+tutelage
+Tutenkhamon
+tutor
+tutorial
+Tuttle
+tutu
+tuxedo
+TV
+TVA
+TWA
+twaddle
+twain
+tweak
+tweed
+tweedy
+tweeze
+twelfth
+twelve
+twelvefold
+twentieth
+twenty
+twentyfold
+twice
+twiddle
+twig
+twigging
+twilight
+twill
+twin
+twine
+twinge
+twinkle
+twirl
+twirly
+twist
+twisty
+twit
+twitch
+twitchy
+two
+twofold
+Twombly
+twosome
+TWX
+TX
+Tyburn
+tycoon
+tying
+tyke
+Tyler
+tympanum
+type
+typeface
+typescript
+typeset
+typesetter
+typesetting
+typewrite
+typewritten
+typhoid
+Typhon
+typhoon
+typhus
+typic
+typify
+typo
+typographer
+typography
+typology
+tyrannic
+tyrannicide
+Tyrannosaurus
+tyranny
+tyrant
+tyrosine
+Tyson
+Tzeltal
+u
+ubiquitous
+ubiquity
+UCLA
+Uganda
+ugh
+ugly
+UK
+Ukraine
+Ukrainian
+Ulan
+ulcer
+ulcerate
+Ullman
+ulna
+Ulster
+ulterior
+ultimate
+ultimatum
+ultra
+Ulysses
+umber
+umbilical
+umbilici
+umbilicus
+umbra
+umbrage
+umbrella
+umpire
+UN
+un
+unanimity
+unanimous
+unary
+unbeknownst
+unchristian
+uncle
+uncouth
+unction
+unctuous
+under
+underclassman
+underclassmen
+underivable
+underived
+underling
+undulate
+UNESCO
+ungulate
+uniaxial
+unicorn
+unidimensional
+unidirectional
+uniform
+unify
+unilateral
+unimodal
+uninominal
+union
+uniplex
+unipolar
+uniprocessor
+unique
+Uniroyal
+unisex
+unison
+unit
+unital
+unitarian
+unitary
+unite
+unity
+Univac
+univalent
+univariate
+universal
+universe
+Unix
+unkempt
+unruly
+until
+unwieldy
+up
+upbeat
+upbraid
+upbring
+upcome
+update
+updraft
+upend
+upgrade
+upheaval
+upheld
+uphill
+uphold
+upholster
+upholstery
+upkeep
+upland
+uplift
+upon
+upperclassman
+upperclassmen
+uppercut
+uppermost
+upraise
+upright
+uprise
+upriver
+uproar
+uproarious
+uproot
+upset
+upsetting
+upshot
+upside
+upsilon
+upslope
+upstage
+upstair
+upstand
+upstart
+upstate
+upstater
+upstream
+upsurge
+upswing
+uptake
+Upton
+uptown
+uptrend
+upturn
+upward
+upwell
+upwind
+uracil
+urania
+uranium
+Uranus
+uranyl
+urban
+Urbana
+urbane
+urbanite
+urchin
+Urdu
+urea
+uremia
+urethane
+urethra
+urge
+urgent
+Uri
+urinal
+urinary
+urinate
+urine
+Uris
+urn
+urology
+Urquhart
+Ursa
+Ursula
+Ursuline
+Uruguay
+urushiol
+U.S
+u's
+us
+U.S.A
+USA
+usable
+USAF
+usage
+USC
+USC&GS
+USDA
+use
+useful
+USGS
+usher
+USIA
+USN
+USPS
+USSR
+usual
+usurer
+usurious
+usurp
+usurpation
+usury
+UT
+Utah
+utensil
+uterine
+uterus
+Utica
+utile
+utilitarian
+utility
+utmost
+utopia
+utopian
+Utrecht
+utter
+utterance
+uttermost
+v
+VA
+vacant
+vacate
+vacationland
+vaccinate
+vaccine
+vacillate
+vacua
+vacuo
+vacuolate
+vacuole
+vacuous
+vacuum
+vade
+Vaduz
+vagabond
+vagary
+vagina
+vaginal
+vagrant
+vague
+Vail
+vain
+vainglorious
+vale
+valedictorian
+valedictory
+valent
+valentine
+Valerie
+Valery
+valet
+valeur
+Valhalla
+valiant
+valid
+validate
+valine
+Valkyrie
+Valletta
+valley
+Valois
+Valparaiso
+valuate
+value
+valve
+vamp
+vampire
+van
+vanadium
+Vance
+Vancouver
+vandal
+Vandenberg
+Vanderbilt
+Vanderpoel
+vane
+vanguard
+vanilla
+vanish
+vanity
+vanquish
+vantage
+variable
+variac
+Varian
+variant
+variate
+variegate
+variety
+various
+varistor
+Varitype
+varnish
+varsity
+vary
+vascular
+vase
+vasectomy
+vasoconstriction
+Vasquez
+vassal
+Vassar
+vast
+vat
+Vatican
+vaudeville
+Vaudois
+Vaughan
+Vaughn
+vault
+veal
+vector
+vectorial
+Veda
+vee
+veer
+veery
+Vega
+vegetable
+vegetarian
+vegetate
+vehement
+vehicle
+vehicular
+veil
+vein
+velar
+Velasquez
+veldt
+Vella
+vellum
+velocity
+velours
+velvet
+velvety
+venal
+vend
+vendetta
+vendible
+vendor
+veneer
+venerable
+venerate
+venereal
+Venetian
+venetian
+Veneto
+Venezuela
+vengeance
+vengeful
+venial
+Venice
+venison
+venom
+venomous
+venous
+vent
+ventilate
+ventral
+ventricle
+ventriloquism
+ventriloquist
+venture
+venturesome
+venturi
+Venus
+Venusian
+Vera
+veracious
+veracity
+veranda
+verandah
+verb
+verbal
+verbatim
+verbena
+verbiage
+verbose
+verdant
+Verde
+Verdi
+verdict
+verge
+veridic
+verify
+verisimilitude
+veritable
+verity
+Verlag
+vermeil
+vermiculite
+vermilion
+vermin
+Vermont
+vermouth
+Verna
+vernacular
+vernal
+Verne
+vernier
+Vernon
+Verona
+Veronica
+versa
+Versailles
+versatec
+versatile
+verse
+version
+versus
+vertebra
+vertebrae
+vertebral
+vertebrate
+vertex
+vertical
+vertices
+vertigo
+verve
+very
+vesicular
+vesper
+vessel
+vest
+vestal
+vestibule
+vestige
+vestigial
+vestry
+Vesuvius
+vet
+vetch
+veteran
+veterinarian
+veterinary
+veto
+vex
+vexation
+vexatious
+vi
+via
+viaduct
+vial
+vibrant
+vibrate
+vibrato
+viburnum
+vicar
+vicarious
+vice
+viceroy
+Vichy
+vicinal
+vicinity
+vicious
+vicissitude
+Vicksburg
+Vicky
+victim
+victor
+Victoria
+victorious
+victory
+victrola
+victual
+Vida
+video
+videotape
+vie
+Vienna
+Viennese
+Vientiane
+Viet
+Vietnam
+Vietnamese
+view
+viewpoint
+vigil
+vigilant
+vigilante
+vignette
+vigorous
+vii
+viii
+Viking
+Vikram
+vile
+vilify
+villa
+village
+villain
+villainous
+villein
+vinaigrette
+Vincent
+Vinci
+vindicate
+vindictive
+vine
+vinegar
+vineyard
+Vinson
+vintage
+vintner
+vinyl
+viola
+violate
+violent
+violet
+violin
+viper
+viral
+Virgil
+virgin
+virginal
+Virginia
+Virgo
+virgule
+virile
+virtual
+virtue
+virtuosi
+virtuosity
+virtuoso
+virtuous
+virulent
+virus
+visa
+visage
+viscera
+visceral
+viscid
+viscoelastic
+viscometer
+viscosity
+viscount
+viscous
+vise
+Vishnu
+visible
+Visigoth
+vision
+visionary
+visit
+visitation
+visitor
+visor
+vista
+visual
+vita
+vitae
+vital
+vitamin
+vitiate
+Vito
+vitreous
+vitrify
+vitriol
+vitriolic
+vitro
+viva
+vivace
+vivacious
+vivacity
+Vivaldi
+Vivian
+vivid
+vivify
+viviparous
+vivisection
+vivo
+vixen
+viz
+Vladimir
+Vladivostok
+vocable
+vocabularian
+vocabulary
+vocal
+vocalic
+vocate
+vociferous
+vodka
+Vogel
+vogue
+voice
+voiceband
+void
+volatile
+volcanic
+volcanism
+volcano
+volcanoes
+vole
+volition
+Volkswagen
+volley
+volleyball
+Volstead
+volt
+Volta
+voltage
+voltaic
+Voltaire
+Volterra
+voltmeter
+voluble
+volume
+volumetric
+voluminous
+voluntary
+volunteer
+voluptuous
+Volvo
+vomit
+von
+voodoo
+voracious
+voracity
+vortex
+vortices
+vorticity
+Voss
+votary
+vote
+votive
+vouch
+vouchsafe
+Vought
+vow
+vowel
+voyage
+Vreeland
+v's
+vs
+VT
+Vulcan
+vulgar
+vulnerable
+vulpine
+vulture
+vying
+w
+WA
+Waals
+Wabash
+WAC
+wack
+wacke
+wacky
+Waco
+wad
+waddle
+wade
+wadi
+Wadsworth
+wafer
+waffle
+wag
+wage
+wagging
+waggle
+Wagner
+wagoneer
+wagonload
+wah
+Wahl
+wail
+wainscot
+Wainwright
+waist
+waistcoat
+waistline
+wait
+Waite
+waitress
+waive
+wake
+Wakefield
+wakeful
+waken
+wakerobin
+wakeup
+Walcott
+Walden
+Waldo
+Waldorf
+Waldron
+wale
+Walgreen
+walk
+walkie
+walkout
+walkover
+walkway
+wall
+walla
+wallaby
+Wallace
+wallboard
+Waller
+wallet
+Wallis
+wallop
+wallow
+wallpaper
+wally
+walnut
+Walpole
+walrus
+Walsh
+Walt
+Walter
+Waltham
+Walton
+waltz
+wan
+wand
+wander
+wane
+Wang
+wangle
+want
+wanton
+wapato
+wapiti
+Wappinger
+war
+warble
+Warburton
+ward
+warden
+wardrobe
+wardroom
+ware
+warehouse
+warehouseman
+warehousemen
+warfare
+warhead
+Waring
+warm
+warmhearted
+warmish
+warmonger
+warmth
+warmup
+warn
+warp
+warplane
+warrant
+warranty
+warren
+warrior
+Warsaw
+wart
+wartime
+warty
+Warwick
+wary
+was
+wash
+washbasin
+washboard
+washbowl
+Washburn
+Washington
+washout
+washy
+wasn't
+wasp
+waspish
+Wasserman
+wast
+wastage
+waste
+wastebasket
+wasteful
+wasteland
+wastewater
+wasting
+wastrel
+Watanabe
+watch
+watchband
+watchdog
+watchful
+watchmake
+watchman
+watchmen
+watchword
+watchworks
+water
+Waterbury
+watercourse
+watercress
+waterfall
+waterfowl
+waterfront
+Watergate
+waterhole
+Waterhouse
+waterline
+Waterloo
+Waterman
+watermelon
+waterproof
+watershed
+waterside
+watertight
+Watertown
+waterway
+watery
+Watkins
+Watson
+watt
+wattage
+wattle
+wave
+waveform
+wavefront
+waveguide
+wavelength
+wavenumber
+wavy
+wax
+waxen
+waxwing
+waxwork
+waxy
+way
+waybill
+waylaid
+waylay
+Wayne
+wayside
+wayward
+we
+weak
+weaken
+weal
+wealth
+wealthy
+wean
+weapon
+weaponry
+wear
+wearisome
+weary
+weasel
+weather
+weatherbeaten
+weatherproof
+weatherstrip
+weatherstripping
+weave
+web
+Webb
+weber
+Webster
+WECo
+we'd
+wed
+wedge
+wedlock
+Wednesday
+wee
+weed
+weedy
+week
+weekday
+weekend
+weep
+Wehr
+Wei
+Weierstrass
+weigh
+weight
+weighty
+Weinberg
+Weinstein
+weir
+weird
+Weiss
+Welch
+welcome
+weld
+Weldon
+welfare
+we'll
+well
+wellbeing
+Weller
+Welles
+Wellesley
+wellington
+wellwisher
+welsh
+welt
+Wendell
+Wendy
+went
+wept
+we're
+were
+weren't
+Werner
+wert
+Werther
+Wesley
+Wesleyan
+west
+westbound
+Westchester
+westerly
+western
+westernmost
+Westfield
+Westinghouse
+Westminster
+Weston
+westward
+wet
+wetland
+we've
+Weyerhauser
+whack
+whale
+whalebone
+Whalen
+wham
+wharf
+Wharton
+wharves
+what
+what'd
+whatever
+Whatley
+whatnot
+what're
+whatsoever
+wheat
+Wheatstone
+whee
+wheedle
+wheel
+wheelbarrow
+wheelbase
+wheelchair
+wheelhouse
+wheeze
+wheezy
+Whelan
+whelk
+Wheller
+whelm
+whelp
+when
+whence
+whenever
+where
+whereabout
+whereas
+whereby
+where'd
+wherefore
+wherein
+whereof
+whereon
+where're
+wheresoever
+whereupon
+wherever
+wherewith
+whet
+whether
+whey
+which
+whichever
+whiff
+whig
+while
+whim
+whimper
+whimsey
+whimsic
+whimsy
+whine
+whinny
+whip
+whiplash
+Whippany
+whippet
+Whipple
+whipsaw
+whir
+whirl
+whirligig
+whirlpool
+whirlwind
+whisk
+whisper
+whistle
+whistleable
+whit
+Whitaker
+Whitcomb
+white
+whiteface
+Whitehall
+whitehead
+Whitehorse
+whiten
+whitetail
+whitewash
+whither
+whitish
+Whitlock
+Whitman
+Whitney
+Whittaker
+Whittier
+whittle
+whiz
+whizzing
+who
+whoa
+who'd
+whodunit
+whoever
+whole
+wholehearted
+wholesale
+wholesome
+who'll
+wholly
+whom
+whomever
+whomsoever
+whoop
+whoopee
+whoosh
+whop
+whore
+whorl
+whose
+whosoever
+whup
+why
+WI
+Wichita
+wick
+wicket
+wide
+widen
+widespread
+widgeon
+widget
+widow
+width
+widthwise
+wield
+wiener
+Wier
+wife
+wig
+wigging
+Wiggins
+wiggle
+wiggly
+Wightman
+wigmake
+wigwam
+Wilbur
+Wilcox
+wild
+wildcat
+wildcatter
+wildebeest
+wilderness
+wildfire
+wildflower
+wildlife
+wile
+Wiley
+Wilfred
+wilful
+Wilhelm
+Wilhelmina
+Wilkes
+Wilkie
+Wilkins
+Wilkinson
+will
+Willa
+Willard
+willful
+William
+Williamsburg
+Williamson
+Willie
+Willis
+Willoughby
+willow
+willowy
+Wilma
+Wilmington
+Wilshire
+Wilson
+wilt
+wily
+win
+wince
+winch
+Winchester
+wind
+windbag
+windblown
+windbreak
+windfall
+windmill
+window
+windowpane
+windowsill
+windshield
+Windsor
+windstorm
+windsurf
+windswept
+windup
+windward
+windy
+wine
+winemake
+winemaster
+winery
+wineskin
+Winfield
+wing
+wingback
+wingbeat
+wingman
+wingmen
+wingspan
+wingspread
+wingtip
+Winifred
+wink
+winkle
+Winnetka
+Winnie
+Winnipeg
+Winnipesaukee
+winnow
+wino
+Winslow
+winsome
+Winston
+winter
+wintergreen
+wintertime
+Winthrop
+wintry
+winy
+wipe
+wire
+wireman
+wiremen
+wiry
+Wisconsin
+wisdom
+wise
+wiseacre
+wisecrack
+wisenheimer
+wish
+wishbone
+wishful
+wishy
+wisp
+wispy
+wistful
+wit
+witch
+witchcraft
+with
+withal
+withdraw
+withdrawal
+withdrawn
+withdrew
+withe
+wither
+withheld
+withhold
+within
+without
+withstand
+withstood
+withy
+witness
+Witt
+Wittgenstein
+witty
+wive
+wizard
+wobble
+woe
+woebegone
+woeful
+wok
+woke
+Wolcott
+wold
+wolf
+Wolfe
+Wolff
+Wolfgang
+wolfish
+wolve
+wolverine
+woman
+womb
+wombat
+women
+won
+wonder
+wonderful
+wonderland
+wondrous
+Wong
+won't
+wont
+woo
+wood
+Woodard
+Woodbury
+woodcarver
+woodchuck
+woodcock
+woodcut
+wooden
+woodgrain
+woodhen
+woodland
+Woodlawn
+woodlot
+woodpeck
+woodrow
+woodruff
+woodshed
+woodside
+Woodstock
+woodward
+woodwind
+woodwork
+woody
+woodyard
+wool
+woolgather
+Woolworth
+Wooster
+wop
+Worcester
+Worcestershire
+word
+Wordsworth
+wordy
+wore
+work
+workbench
+workbook
+workday
+workforce
+workhorse
+workload
+workman
+workmen
+workout
+workpiece
+workplace
+worksheet
+workshop
+workspace
+workstation
+worktable
+world
+worldwide
+worm
+wormy
+worn
+worrisome
+worry
+worse
+worsen
+worship
+worshipful
+worst
+worth
+Worthington
+worthwhile
+worthy
+Wotan
+would
+wouldn't
+wound
+wove
+woven
+wow
+wrack
+wraith
+wrangle
+wrap
+wraparound
+wrapup
+wrasse
+wrath
+wrathful
+wreak
+wreath
+wreathe
+wreck
+wreckage
+wren
+wrench
+wrest
+wrestle
+wretch
+wriggle
+wright
+Wrigley
+wring
+wrinkle
+wrist
+wristband
+wristwatch
+writ
+write
+writeup
+writhe
+writhing
+written
+wrong
+wrongdoer
+wrongdoing
+wrongful
+Wronskian
+wrote
+wrought
+wry
+w's
+Wu
+Wuhan
+WV
+WY
+Wyandotte
+Wyatt
+Wyeth
+Wylie
+Wyman
+Wyner
+wynn
+Wyoming
+wysiwyg
+x
+Xavier
+xenon
+xenophobia
+xerography
+xerox
+Xerxes
+Xhosa
+xi
+x's
+xylem
+xylene
+xylophone
+y
+yacht
+yachtsman
+yachtsmen
+yah
+yak
+Yakima
+Yale
+Yalta
+yam
+Yamaha
+yang
+yank
+Yankee
+Yankton
+Yaounde
+yap
+yapping
+Yaqui
+yard
+yardage
+yardstick
+Yarmouth
+yarmulke
+yarn
+yarrow
+Yates
+yaw
+yawl
+yawn
+ye
+yea
+Yeager
+yeah
+year
+yearbook
+yearn
+yeast
+yeasty
+Yeats
+yell
+yellow
+yellowish
+Yellowknife
+Yellowstone
+yelp
+Yemen
+yen
+yeoman
+yeomanry
+yeomen
+yeshiva
+yesterday
+yesteryear
+yet
+yew
+Yiddish
+yield
+yin
+yip
+yipping
+YMCA
+yodel
+Yoder
+yoga
+yoghurt
+yogi
+yogurt
+yoke
+yokel
+Yokohama
+Yokuts
+yolk
+yon
+yond
+Yonkers
+yore
+York
+Yorkshire
+Yorktown
+Yosemite
+Yost
+you
+you'd
+you'll
+young
+youngish
+youngster
+Youngstown
+your
+you're
+yourself
+yourselves
+youth
+youthful
+you've
+yow
+Ypsilanti
+y's
+ytterbium
+yttrium
+Yucatan
+yucca
+yuck
+Yugoslav
+Yugoslavia
+yuh
+Yuki
+Yukon
+yule
+Yves
+Yvette
+YWCA
+z
+Zachary
+zag
+zagging
+Zagreb
+Zaire
+Zambia
+Zan
+Zanzibar
+zap
+zazen
+zeal
+Zealand
+zealot
+zealous
+zebra
+Zeiss
+Zellerbach
+Zen
+zenith
+zero
+zeroes
+zeroth
+zest
+zesty
+zeta
+Zeus
+Ziegler
+zig
+zigging
+zigzag
+zigzagging
+zilch
+zillion
+Zimmerman
+zinc
+zing
+zinnia
+Zion
+zip
+zircon
+zirconium
+zither
+zloty
+zodiac
+zodiacal
+Zoe
+Zomba
+zombie
+zone
+zoo
+zoology
+zoom
+zooplankton
+Zorn
+Zoroaster
+Zoroastrian
+zounds
+z's
+zucchini
+Zulu
+Zurich
+zygote
diff --git a/src/games/Makefile b/src/games/Makefile
index 62d2ae2..af8d2d5 100644
--- a/src/games/Makefile
+++ b/src/games/Makefile
@@ -11,10 +11,9 @@ CFLAGS += -Werror -Wall -Os
# Programs that live in subdirectories, and have makefiles of their own.
#
-SUBDIR = adventure backgammon battlestar rogue sail trek
-# TODO: atc boggle btlgammon cribbage
-# fortune hangman hunt mille monop phantasia quiz robots
-# sail snake warp
+SUBDIR = adventure atc backgammon battlestar boggle btlgammon \
+ cribbage fortune hangman mille monop quiz robots rogue \
+ sail snake trek
# C programs that live in the current directory and do not need
# explicit make lines.
diff --git a/src/games/atc/.gitignore b/src/games/atc/.gitignore
new file mode 100644
index 0000000..8130118
--- /dev/null
+++ b/src/games/atc/.gitignore
@@ -0,0 +1,2 @@
+atc
+y.tab.h
diff --git a/src/games/atc/Makefile b/src/games/atc/Makefile
index 285e11c..90735f0 100644
--- a/src/games/atc/Makefile
+++ b/src/games/atc/Makefile
@@ -5,26 +5,37 @@
#
# @(#)Makefile 5.1.2 (2.11BSD) 1999/10/25
#
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
-DESTDIR =
-CFLAGS = -O -DSYSV -DDEST=\"${DESTDIR}/usr/games/lib/atc/\"
-YFLAGS = -d
-LIBS = -ll -lm -lcurses -ltermcap
-OBJS = extern.o grammar.o input.o lex.o list.o log.o main.o tunable.o \
- graphics.o update.o
+CFLAGS = -Os -g -Werror -Wall
+CFLAGS += -DBSD -DDEST=\"/games/lib/atc/\"
+#CFLAGS += -DSYSV -DDEST=\"games/\"
+YFLAGS = -d
+LEX = lex
+LIBS = -lm -lcurses -ltermcap -lc
+OBJS = extern.o grammar.o input.o lex.o list.o log.o main.o tunable.o \
+ graphics.o update.o
+MAN = atc.0
+MANSRC = atc.6
-all: atc
+all: atc $(MAN)
-atc: ${OBJS}
- ${CC} ${OBJS} ${LIBS} -o $@
+atc: $(OBJS)
+ $(CC) $(LDFLAGS) -o atc.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S atc.elf > atc.dis
+ $(SIZE) atc.elf
+ $(ELF2AOUT) atc.elf $@ && rm atc.elf
+
+${MAN}: ${MANSRC}
+ ${MANROFF} $< > $@
clean:
- rm -f *.o core atc grammar.c y.tab.h y.tab.c lex.yy.c lex.c
+ rm -f *.o *.0 *.elf atc ${MAN} *.elf *.dis tags *~ grammar.c lex.c y.tab.h
-install:
- -[ -d ${DESTDIR}/usr/games/lib/atc ] || mkdir ${DESTDIR}/usr/games/lib/atc
- chmod 700 ${DESTDIR}/usr/games/lib/atc
- chown games.bin ${DESTDIR}/usr/games/lib/atc
- (cd games; install -c -o games -g bin -m 600 * ${DESTDIR}/usr/games/lib/atc)
- install -s -o games -g bin -m 4700 atc ${DESTDIR}/usr/games/hide/atc
- (cd ${DESTDIR}/usr/games; rm -f atc; ln -s dm atc; chown games.bin atc)
+install: all
+ install atc $(DESTDIR)/games/
+ mkdir -p ${DESTDIR}/games/lib/atc
+ cp -p games/* ${DESTDIR}/games/lib/atc
+ cp ${MAN} $(DESTDIR)/share/man/cat6/
diff --git a/src/games/atc/atc.6 b/src/games/atc/atc.6
new file mode 100644
index 0000000..f43a52b
--- /dev/null
+++ b/src/games/atc/atc.6
@@ -0,0 +1,597 @@
+.\" Copyright (c) 1990, 1993
+.\" The Regents of the University of California. All rights reserved.
+.\"
+.\" This code is derived from software contributed to Berkeley by
+.\" Ed James.
+.\"
+.\" 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.
+.\"
+.\" @(#)atc.6 8.1 (Berkeley) 5/31/93
+.\"
+. \" XP - exdented paragraph
+.de XP
+.RT
+.if \\n(1T .sp \\n(PDu
+.ne 1.1
+.if !\\n(IP .nr IP +1
+.in +\\n(I\\n(IRu
+.ti -\\n(I\\n(IRu
+..
+.\" Copyright (c) 1986 Ed James. All rights reserved.
+.\"
+.TH ATC 6 "May 31, 1993"
+.UC
+.SH NAME
+atc \- air traffic controller game
+.SH SYNOPSIS
+.B atc
+-[u?lstp] [-[gf] game_name] [-r random seed]
+.SH DESCRIPTION
+.LP
+.I Atc
+lets you try your hand at the nerve wracking duties of the air traffic
+controller without endangering the lives of millions of
+travelers each year.
+Your responsibilities require you to direct the flight of jets
+and prop planes into and out of the flight arena and airports.
+The speed (update time) and frequency of the planes depend on the
+difficulty of the chosen arena.
+.SH OPTIONS
+.LP
+.TP 8
+.B \-u
+Print the usage line and exit.
+.TP
+.B \-?
+Same as
+.B \-u.
+.TP
+.B \-l
+Print a list of available games and exit.
+The first game name printed is the default game.
+.TP
+.B \-s
+Print the score list (formerly the Top Ten list).
+.TP
+.B \-t
+Same as
+.B \-s.
+.TP
+.B \-p
+Print the path to the special directory where
+.I atc
+expects to find its private files. This is used during the
+installation of the program.
+.TP
+.B "\-g game"
+Play the named game. If the game listed is not one of the
+ones printed from the
+.B \-l
+option, the default game is played.
+.TP
+.B "\-f game"
+Same as
+.B \-g.
+.TP
+.B "\-r seed"
+Set the random seed. The purpose of this flag is questionable.
+.SH GOALS
+.LP
+Your goal in
+.I atc
+is to keep the game going as long as possible.
+There is no winning state, except to beat the times of other players.
+You will need to: launch planes at airports (by instructing them to
+increase their altitude); land planes at airports (by instructing them to
+go to altitude zero when exactly over the airport); and maneuver planes
+out of exit points.
+.LP
+Several things will cause the end of the game.
+Each plane has a destination (see information area), and
+sending a plane to the wrong destination is an error.
+Planes can run out of fuel, or can collide. Collision is defined as
+adjacency in any of the three dimensions. A plane leaving the arena
+in any other way than through its destination exit is an error as well.
+.LP
+Scores are sorted in order of the number of planes safe. The other
+statistics are provided merely for fun. There is no penalty for
+taking longer than another player (except in the case of ties).
+.LP
+Suspending a game is not permitted. If you get a talk message, tough.
+When was the last time an Air Traffic Controller got called away to
+the phone?
+.SH "THE DISPLAY"
+.LP
+Depending on the terminal you run
+.I atc
+on, the screen will be divided into 4 areas.
+It should be stressed that the terminal driver portion of the
+game was designed to be reconfigurable, so the display format can vary
+depending the version you are playing. The descriptions here are based
+on the ascii version
+of the game. The game rules and input format, however,
+should remain consistent.
+Control-L redraws the screen, should it become muddled.
+.SS RADAR
+.IP
+The first screen area is the radar display, showing the relative locations
+of the planes, airports, standard entry/exit points, radar
+beacons, and "lines" which simply serve to aid you in guiding
+the planes.
+.IP
+Planes are shown as a single letter with an altitude. If
+the numerical altitude is a single digit, then it represents
+thousands of feet.
+Some distinction is made between the prop
+planes and the jets. On ascii terminals, prop planes are
+represented by a upper case letter, jets by a lower case letter.
+.IP
+Airports are shown as a number and some indication of the direction
+planes must be going to land at the airport.
+On ascii terminals, this is one of '^', '>', '<', and 'v', to indicate
+north (0 degrees), east (90), west (270) and south (180), respectively.
+The planes will also
+take off in this direction.
+.IP
+Beacons are represented as circles or asterisks and a number.
+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.
+.IP
+Entry/exit points are displayed as numbers along the border of the
+radar screen. Planes will enter the arena from these points without
+warning. These points have a direction associated with them, and
+planes will always enter the arena from this direction. On the
+ascii version of
+.I atc,
+this direction is not displayed. It will become apparent
+what this direction is as the game progresses.
+.IP
+Incoming planes will always enter at the same altitude: 7000 feet.
+For a plane to successfully depart through an entry/exit point,
+it must be flying at 9000 feet.
+It is not necessary for the planes to be flying in any particular
+direction when they leave the arena (yet).
+.SS "INFORMATION AREA"
+.IP
+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
+have directed safely out of the arena.
+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).
+Each line lists the plane name and its current altitude,
+an optional asterisk indicating low fuel, the plane's destination,
+and the plane's current command. Changing altitude is not considered
+to be a command and is therefore not displayed. The following are
+some possible information lines:
+.IP
+ B4*A0: Circle @ b1
+.br
+ g7 E4: 225
+.IP
+The first example shows a prop plane named 'B' that is flying at 4000
+feet. It is low on fuel (note the '*'). It's destination is
+Airport #0.
+The next command it expects
+to do is circle when it reaches Beacon #1.
+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).
+.SS "INPUT AREA"
+.IP
+The third area of the display is the input area. It is here that
+your input is reflected. See the INPUT heading of this manual
+for more details.
+.SS "AUTHOR AREA"
+.IP
+This area is used simply to give credit where credit is due. :-)
+.SH INPUT
+.LP
+A command completion interface is built into
+the game. At any time, typing '?' will list possible input characters.
+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
+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
+(hopefully) descriptive message will be printed under it.
+.LP
+The command syntax is broken into two parts:
+.I "Immediate Only"
+and
+.I Delayable
+commands.
+.I "Immediate Only"
+commands happen on the next
+update.
+.I Delayable
+commands also happen on the next update unless they
+are followed by an optional predicate called the
+.I Delay
+command.
+.LP
+In the following tables, the syntax
+.B [0\-9]
+means any single digit, and
+.B
+refers to the keys around the 's' key, namely ``wedcxzaq''.
+In absolute references, 'q' refers to North-West or 315 degrees, and 'w'
+refers to North, or 0 degrees.
+In relative references, 'q' refers to -45 degrees or 45 degrees left, and 'w'
+refers to 0 degrees, or no change in direction.
+.LP
+All commands start with a plane letter. This indicates the recipient
+of the command. Case is ignored.
+.SS "IMMEDIATE ONLY COMMANDS"
+.RS
+.B "\- a Altitude:"
+.RS
+Affect a plane's altitude (and take off).
+.RE
+.RS
+.B "\- [0\-9] Number:"
+.RS
+Go to the given altitude (thousands of feet).
+.RE
+.B "\- c/+ Climb:"
+.RS
+Relative altitude change.
+.RE
+.RS
+.B "\- [0\-9] Number:"
+.RS
+Difference in thousands of feet.
+.RE
+.RE
+.B "\- d/\- Descend:"
+.RS
+Relative altitude change.
+.RE
+.RS
+.B "\- [0\-9] Number:"
+.RS
+Difference in thousands of feet.
+.RE
+.RE
+.RE
+.B "\- m Mark:"
+.RS
+Display in highlighted mode. Command is displayed normally.
+.RE
+.B "\- i Ignore:"
+.RS
+Do not display highlighted. Command is displayed as a
+line of dashes if there is no command.
+.RE
+.B "\- u Unmark:"
+.RS
+Same as ignore, but if a delayed command is processed,
+the plane will become marked. This is useful if you want
+to forget about a plane during part, but not all, of its
+journey.
+.RE
+.RE
+.SS "DELAYABLE COMMANDS"
+.RS
+.B "\- c Circle:"
+.RS
+Have the plane circle (clockwise by default).
+.RE
+.RS
+.B "\- l Left:"
+.RS
+Circle counterclockwise.
+.RE
+.B "\- r Right:"
+.RS
+Circle clockwise.
+.RE
+.RE
+.B "\- t Turn:"
+.RS
+Change direction.
+.RE
+.RS
+.B "\- l Left:"
+.RS
+Turn counterclockwise (45 degrees by default).
+.RE
+.RS
+.B "\- Direction:"
+.RS
+Turn ccw the given number of degrees.
+Zero degrees is no turn. A ccw turn
+of -45 degrees is 45 cw.
+.RE
+.RE
+.B "\- r Right:"
+.RS
+Turn clockwise (45 degrees by default).
+.RE
+.RS
+.B "\- Direction:"
+.RS
+Same as turn left .
+.RE
+.RE
+.B "\- L Left 90:"
+.RS
+Turn counterclockwise 90 degrees.
+.RE
+.B "\- R Right 90:"
+.RS
+Turn clockwise 90 degrees.
+.RE
+.B "\- Direction:"
+.RS
+Turn to the absolute compass heading given.
+The shortest turn will be taken.
+.RE
+.B "\- t Towards:"
+.RS
+Turn towards a beacon, airport or exit. The turn is
+just an estimate.
+.RE
+.RS
+.B "\- b/* Beacon:"
+.RS
+Turn towards the beacon.
+.RE
+.RS
+.B "\- [0-9] Number:"
+.RS
+The beacon number.
+.RE
+.RE
+.B "\- e Exit:"
+.RS
+Turn towards the exit.
+.RE
+.RS
+.B "\- [0-9] Number:"
+.RS
+The exit number.
+.RE
+.RE
+.B "\- a Airport:"
+.RS
+Turn towards the airport.
+.RE
+.RS
+.B "\- [0-9] Number:"
+.RS
+The airport number.
+.RE
+.RE
+.RE
+.RE
+.RE
+.SS THE DELAY COMMAND
+.LP
+The
+.B Delay
+(a/@)
+command may be appended to any
+.B Delayable
+command. It allows the controller to instruct a plane to do an action
+when the plane reaches a particular beacon (or other objects in future
+versions).
+.sp
+.RS
+.B "\- a/@ At:"
+.RS
+Do the given delayable command when the plane reaches the given beacon.
+.RE
+.RS
+.B "\- b/* Beacon:"
+.RS
+This is redundant to allow for expansion.
+.RE
+.RS
+.B "\- [0-9] Number:"
+.RS
+The beacon number.
+.RE
+.RE
+.RE
+.RE
+.SS "MARKING, UNMARKING AND IGNORING"
+.LP
+Planes are
+.B marked
+when they enter the arena. This means they are displayed in highlighted
+mode on the radar display. A plane may also be either
+.B unmarked
+or
+.B ignored.
+An
+.B unmarked
+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
+way until a mark command has been issued. Any other command will be issued,
+but the command line will return to a line of dashes when the command
+is completed.
+.LP
+An
+.B ignored
+plane is treated the same as an unmarked plane, except that it will
+automatically switch to
+.B marked
+status when a delayed command has been processed. This is useful if
+you want to forget about a plane for a while, but its flight path has
+not yet been completely set.
+.LP
+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
+not immediately switch to unhighlighted mode.
+.SS EXAMPLES
+.RS
+.TP 16
+atlab1
+a: turn left at beacon #1
+.TP 16
+cc
+C: circle
+.TP 16
+gtte4ab2
+g: turn towards exit #4 at beacon #2
+.TP 16
+ma+2
+m: altitude: climb 2000 feet
+.TP 16
+stq
+S: turn to 315
+.TP 16
+xi
+x: ignore
+.RE
+.SH "OTHER INFORMATION"
+.LP
+Jets move every update; prop planes move every other update.
+.LP
+All planes turn a most 90 degrees per movement.
+.LP
+Planes enter at 7000 feet and leave at 9000 feet.
+.LP
+Planes flying at an altitude of 0 crash if they are not over an airport.
+.LP
+Planes waiting at airports can only be told to take off (climb in altitude).
+.SH "NEW GAMES"
+.LP
+The
+.B Game_List
+file lists the currently available play fields. New field description
+file names must be placed in this file to be 'playable'. If a player
+specifies a game not in this file, his score will not be logged.
+.LP
+The game field description files are broken into two parts. The first
+part is the definition section. Here, the four tunable game parameters
+must be set. These variables are set with the syntax:
+.IP
+variable = number;
+.LP
+Variable may be one of:
+.B update,
+indicating the number of seconds between forced updates;
+.B newplane,
+indicating (about) the number of updates between new plane entries;
+.B width,
+indicating the width of the play field; and
+.B height,
+indicating the height of the play field.
+.LP
+The second part of the field description files describes the locations
+of the exits, the beacons, the airports and the lines.
+The syntax is as follows:
+.IP
+beacon: (x y) ... ;
+.br
+airport: (x y direction) ... ;
+.br
+exit: (x y direction) ... ;
+.br
+line: [ (x1 y1) (x2 y2) ] ... ;
+.LP
+For beacons, a simple x, y coordinate pair is used (enclosed in parenthesis).
+Airports and exits require a third value, a direction, which is one
+of
+.B wedcxzaq.
+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
+when they
+.B enter
+the arena. This may not seem intuitive, but as there is no restriction on
+direction of exit, this is appropriate.
+Lines are slightly different, since they need two coordinate pairs to
+specify the line endpoints. These endpoints must be enclosed in
+square brackets.
+.LP
+All statements are semi-colon (;) terminated. Multiple item statements
+accumulate. Each definition must occur exactly once, before any
+item statements. Comments begin with a hash (#) symbol
+and terminate with a newline.
+The coordinates are between zero and width-1 and height-1
+inclusive. All of the exit coordinates must lie on the borders, and
+all of the beacons and airports must lie inside of the borders.
+Line endpoints may be anywhere within the field, so long as
+the lines are horizontal, vertical or
+.B "exactly diagonal."
+.SS "FIELD FILE EXAMPLE"
+.RS
+.sp
+.nf
+.TA 1i 1i
+.ta 1i 1i
+# This is the default game.
+
+update = 5;
+newplane = 5;
+width = 30;
+height = 21;
+
+exit: ( 12 0 x ) ( 29 0 z ) ( 29 7 a ) ( 29 17 a )
+ ( 9 20 e ) ( 0 13 d ) ( 0 7 d ) ( 0 0 c ) ;
+
+beacon: ( 12 7 ) ( 12 17 ) ;
+
+airport: ( 20 15 w ) ( 20 18 d ) ;
+
+line: [ ( 1 1 ) ( 6 6 ) ]
+ [ ( 12 1 ) ( 12 6 ) ]
+ [ ( 13 7 ) ( 28 7 ) ]
+ [ ( 28 1 ) ( 13 16 ) ]
+ [ ( 1 13 ) ( 11 13 ) ]
+ [ ( 12 8 ) ( 12 16 ) ]
+ [ ( 11 18 ) ( 10 19 ) ]
+ [ ( 13 17 ) ( 28 17 ) ]
+ [ ( 1 7 ) ( 11 7 ) ] ;
+.fi
+.RE
+.SH FILES
+.LP
+Files are kept in a special directory. See the OPTIONS for a way to
+print this path out.
+.TP 16
+.B ATC_score
+Where the scores are kept.
+.TP 16
+.B Game_List
+The list of playable games.
+.SH AUTHOR
+.LP
+Ed James, UC Berkeley: edjames@ucbvax.berkeley.edu, ucbvax!edjames
+.LP
+This game is based on someone's description of the overall flavor
+of a game written for some unknown PC many years ago, maybe.
+.SH BUGS
+.LP
+The screen sometimes refreshes after you have quit.
+.LP
+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.
diff --git a/src/games/atc/extern.c b/src/games/atc/extern.c
index 203ee8b..94376e2 100644
--- a/src/games/atc/extern.c
+++ b/src/games/atc/extern.c
@@ -12,7 +12,7 @@
char GAMES[] = "Game_List",
LOG[] = "ATC_scores";
-int clock, safe_planes, start_time, test_mode;
+int clocktick, safe_planes, start_time, test_mode;
char *file;
diff --git a/src/games/atc/extern.h b/src/games/atc/extern.h
index c4ef642..3590f1c 100644
--- a/src/games/atc/extern.h
+++ b/src/games/atc/extern.h
@@ -9,7 +9,7 @@
extern char GAMES[], LOG[], *file;
-extern int clock, safe_planes, start_time, test_mode;
+extern int clocktick, safe_planes, start_time, test_mode;
extern FILE *filein, *fileout;
@@ -22,3 +22,29 @@ extern struct sgttyb tty_start, tty_new;
extern DISPLACEMENT displacement[MAXDIR];
extern PLANE *findplane(), *newplane();
+
+int dir_no(int ch);
+void ioclrtoeol(int pos);
+void iomove(int pos);
+void ioaddstr(int pos, char *str);
+void ioclrtobot(void);
+int getAChar(void);
+void done_screen(void);
+void redraw(void);
+void ioerror(int pos, int len, char *str);
+int number(int l);
+void loser(PLANE *p, char *s);
+void init_gr(void);
+int yyparse(void);
+void setup_screen(C_SCREEN *scp);
+int addplane(void);
+void log_score(int list_em);
+void quit(int sig);
+void update(int sig);
+int getcommand(void);
+void planewin(void);
+int name(PLANE *p);
+void erase_all(void);
+void append(LIST *l, PLANE *p);
+void delete(LIST *l, PLANE *p);
+void draw_all(void);
diff --git a/src/games/atc/grammar.y b/src/games/atc/grammar.y
index 519bfd7..5290f5e 100644
--- a/src/games/atc/grammar.y
+++ b/src/games/atc/grammar.y
@@ -27,12 +27,15 @@
int errors = 0;
int line = 1;
+
+int yylex(void);
+int yyerror(char *s);
%}
%%
file:
bunch_of_defs { if (checkdefs() < 0) return (errors); } bunch_of_lines
- {
+ {
if (sp->num_exits + sp->num_airports < 2)
yyerror("Need at least 2 airports and/or exits.");
return (errors);
@@ -83,7 +86,7 @@ hdef:
else if ($3 < 3)
return (yyerror("'height' is too small."));
else
- sp->height = $3;
+ sp->height = $3;
}
;
@@ -95,7 +98,7 @@ wdef:
else if ($3 < 3)
return (yyerror("'width' is too small."));
else
- sp->width = $3;
+ sp->width = $3;
}
;
@@ -133,7 +136,7 @@ Bpoint:
+ REALLOC) * sizeof (BEACON));
else
sp->beacon = (BEACON *) realloc(sp->beacon,
- (sp->num_beacons + REALLOC) *
+ (sp->num_beacons + REALLOC) *
sizeof (BEACON));
if (sp->beacon == NULL)
return (yyerror("No memory available."));
@@ -159,11 +162,11 @@ Epoint:
if (sp->num_exits % REALLOC == 0) {
if (sp->exit == NULL)
- sp->exit = (EXIT *) malloc((sp->num_exits +
+ sp->exit = (EXIT *) malloc((sp->num_exits +
REALLOC) * sizeof (EXIT));
else
sp->exit = (EXIT *) realloc(sp->exit,
- (sp->num_exits + REALLOC) *
+ (sp->num_exits + REALLOC) *
sizeof (EXIT));
if (sp->exit == NULL)
return (yyerror("No memory available."));
@@ -196,7 +199,7 @@ Apoint:
+ REALLOC) * sizeof(AIRPORT));
else
sp->airport = (AIRPORT *) realloc(sp->airport,
- (sp->num_airports + REALLOC) *
+ (sp->num_airports + REALLOC) *
sizeof(AIRPORT));
if (sp->airport == NULL)
return (yyerror("No memory available."));
@@ -223,7 +226,7 @@ Lline:
{
if (sp->num_lines % REALLOC == 0) {
if (sp->line == NULL)
- sp->line = (LINE *) malloc((sp->num_lines +
+ sp->line = (LINE *) malloc((sp->num_lines +
REALLOC) * sizeof (LINE));
else
sp->line = (LINE *) realloc(sp->line,
@@ -242,14 +245,14 @@ Lline:
;
%%
-check_edge(x, y)
+void check_edge(x, y)
{
- if (!(x == 0) && !(x == sp->width - 1) &&
+ if (!(x == 0) && !(x == sp->width - 1) &&
!(y == 0) && !(y == sp->height - 1))
yyerror("edge value not on edge.");
}
-check_point(x, y)
+void check_point(x, y)
{
if (x < 1 || x >= sp->width - 1)
yyerror("X value out of range.");
@@ -257,7 +260,7 @@ check_point(x, y)
yyerror("Y value out of range.");
}
-check_linepoint(x, y)
+void check_linepoint(x, y)
{
if (x < 0 || x >= sp->width)
yyerror("X value out of range.");
@@ -265,7 +268,7 @@ check_linepoint(x, y)
yyerror("Y value out of range.");
}
-check_line(x1, y1, x2, y2)
+void check_line(x1, y1, x2, y2)
{
int d1, d2;
@@ -279,7 +282,7 @@ check_line(x1, y1, x2, y2)
yyerror("Bad line endpoints.");
}
-yyerror(s)
+int yyerror(char *s)
{
fprintf(stderr, "\"%s\": line %d: %s\n", file, line, s);
errors++;
@@ -287,7 +290,7 @@ yyerror(s)
return (errors);
}
-check_edir(x, y, dir)
+void check_edir(x, y, dir)
{
int bad = 0;
@@ -299,7 +302,7 @@ check_edir(x, y, dir)
y = 2;
else if (y != 0)
y = 1;
-
+
switch (x * 10 + y) {
case 00: if (dir != 3) bad++; break;
case 01: if (dir < 1 || dir > 3) bad++; break;
@@ -318,11 +321,11 @@ check_edir(x, y, dir)
yyerror("Bad direction for entrance at exit.");
}
-check_adir(x, y, dir)
+void check_adir(x, y, dir)
{
}
-checkdefs()
+int checkdefs()
{
int err = 0;
diff --git a/src/games/atc/graphics.c b/src/games/atc/graphics.c
index f655f89..d72a0b9 100644
--- a/src/games/atc/graphics.c
+++ b/src/games/atc/graphics.c
@@ -22,7 +22,7 @@
WINDOW *radar, *cleanradar, *credit, *input, *planes;
-getAChar()
+int getAChar()
{
#ifdef BSD
return (getchar());
@@ -35,7 +35,7 @@ getAChar()
#endif
}
-erase_all()
+void erase_all()
{
PLANE *pp;
@@ -49,7 +49,7 @@ erase_all()
}
}
-draw_all()
+void draw_all()
{
PLANE *pp;
@@ -68,19 +68,37 @@ draw_all()
fflush(stdout);
}
-init_gr()
+void init_gr()
{
static char buffer[BUFSIZ];
initscr();
setbuf(stdout, buffer);
input = newwin(INPUT_LINES, COLS - PLANE_COLS, LINES - INPUT_LINES, 0);
- credit = newwin(INPUT_LINES, PLANE_COLS, LINES - INPUT_LINES,
+ credit = newwin(INPUT_LINES, PLANE_COLS, LINES - INPUT_LINES,
COLS - PLANE_COLS);
planes = newwin(LINES - INPUT_LINES, PLANE_COLS, 0, COLS - PLANE_COLS);
}
-setup_screen(scp)
+void draw_line(w, x, y, lx, ly, s)
+ WINDOW *w;
+ char *s;
+{
+ int dx, dy;
+
+ dx = SGN(lx - x);
+ dy = SGN(ly - y);
+ for (;;) {
+ wmove(w, y, x * 2);
+ waddstr(w, s);
+ if (x == lx && y == ly)
+ break;
+ x += dx;
+ y += dy;
+ }
+}
+
+void setup_screen(scp)
C_SCREEN *scp;
{
register int i, j;
@@ -164,32 +182,14 @@ setup_screen(scp)
wmove(radar, scp->airport[i].y, scp->airport[i].x * 2);
waddstr(radar, str);
}
-
+
overwrite(radar, cleanradar);
wrefresh(radar);
wrefresh(credit);
fflush(stdout);
}
-draw_line(w, x, y, lx, ly, s)
- WINDOW *w;
- char *s;
-{
- int dx, dy;
-
- dx = SGN(lx - x);
- dy = SGN(ly - y);
- for (;;) {
- wmove(w, y, x * 2);
- waddstr(w, s);
- if (x == lx && y == ly)
- break;
- x += dx;
- y += dy;
- }
-}
-
-ioclrtoeol(pos)
+void ioclrtoeol(pos)
{
wmove(input, 0, pos);
wclrtoeol(input);
@@ -197,14 +197,14 @@ ioclrtoeol(pos)
fflush(stdout);
}
-iomove(pos)
+void iomove(pos)
{
wmove(input, 0, pos);
wrefresh(input);
fflush(stdout);
}
-ioaddstr(pos, str)
+void ioaddstr(pos, str)
char *str;
{
wmove(input, 0, pos);
@@ -213,14 +213,14 @@ ioaddstr(pos, str)
fflush(stdout);
}
-ioclrtobot()
+void ioclrtobot()
{
wclrtobot(input);
wrefresh(input);
fflush(stdout);
}
-ioerror(pos, len, str)
+void ioerror(pos, len, str)
char *str;
{
int i;
@@ -234,7 +234,7 @@ ioerror(pos, len, str)
fflush(stdout);
}
-quit()
+void quit(int sig)
{
int c, y, x;
#ifdef BSD
@@ -271,10 +271,9 @@ quit()
wmove(input, y, x);
wrefresh(input);
fflush(stdout);
- return;
}
-planewin()
+void planewin()
{
PLANE *pp;
char *command();
@@ -289,7 +288,7 @@ planewin()
#ifdef SYSV
wclrtobot(planes);
#endif
- wprintw(planes, "Time: %-4d Safe: %d", clock, safe_planes);
+ wprintw(planes, "Time: %-4d Safe: %d", clocktick, safe_planes);
wmove(planes, 2, 0);
waddstr(planes, "pl dt comm");
@@ -317,7 +316,7 @@ planewin()
fflush(stdout);
}
-loser(p, s)
+void loser(p, s)
PLANE *p;
char *s;
{
@@ -351,7 +350,7 @@ loser(p, s)
exit(0);
}
-redraw()
+void redraw()
{
clear();
refresh();
@@ -370,7 +369,7 @@ redraw()
}
-done_screen()
+void done_screen()
{
clear();
refresh();
diff --git a/src/games/atc/include.h b/src/games/atc/include.h
index 084a3e5..66e3858 100644
--- a/src/games/atc/include.h
+++ b/src/games/atc/include.h
@@ -8,11 +8,20 @@
*/
#include
+#include
#include
-#ifdef SYSV
+#include
+#include
+#include
#include
+#include
+#include
+#include
+#ifdef SYSV
+#include
#endif
#include
+#include
#ifdef BSD
#include
@@ -21,25 +30,17 @@
#endif
#ifdef SYSV
-#include
-#include
-#include
-#include
+#include
#endif
#include
#include
-
#include
-#ifdef SYSV
-#define index strchr
-#define rindex strrchr
#define bcopy(a,b,c) memcpy((b), (a), (c))
#define bzero(a,b) memset((a), '\0', (b))
-#define srandom srand
-#define random rand
-#define sgttyb termio
+#ifdef SYSV
+#define sgttyb termios
#define sg_erase c_cc[2]
#define sg_kill c_cc[3]
#endif
diff --git a/src/games/atc/input.c b/src/games/atc/input.c
index 7a31b54..6965900 100644
--- a/src/games/atc/input.c
+++ b/src/games/atc/input.c
@@ -6,11 +6,6 @@
*
* For more info on this and all of my stuff, mail edjames@berkeley.edu.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)input.c 1.2 (Berkeley) 10/22/87";
-#endif not lint
-
#include "include.h"
#define MAXRULES 6
@@ -56,8 +51,8 @@ typedef struct {
#define NUMSTATES NUMELS(st)
-char *setplane(), *circle(), *left(), *right(), *Left(), *Right(),
- *beacon(), *ex_it(), *climb(), *descend(), *setalt(), *setrelalt(),
+char *setplane(), *circle(), *left(), *right(), *Left(), *Right(),
+ *beacon(), *ex_it(), *climb(), *descend(), *setalt(), *setrelalt(),
*benum(), *to_dir(), *rel_dir(), *delayb(), *mark(), *unmark(),
*airport(), *turn(), *ignore();
@@ -67,17 +62,17 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane},
{ CRTOKEN, -1, "", NULL },
#endif
{ HELPTOKEN, 12, " [a-z]", NULL }},
- state1[] = { { 't', 2, " turn", turn },
- { 'a', 3, " altitude:", NULL },
+ state1[] = { { 't', 2, " turn", turn },
+ { 'a', 3, " altitude:", NULL },
{ 'c', 4, " circle", circle },
{ 'm', 7, " mark", mark },
{ 'u', 7, " unmark", unmark },
{ 'i', 7, " ignore", ignore },
{ HELPTOKEN, 12, " tacmui", NULL }},
- state2[] = { { 'l', 6, " left", left },
- { 'r', 6, " right", right },
+ state2[] = { { 'l', 6, " left", left },
+ { 'r', 6, " right", right },
{ 'L', 4, " left 90", Left },
- { 'R', 4, " right 90", Right },
+ { 'R', 4, " right 90", Right },
{ 't', 11, " towards", NULL },
{ 'w', 4, " to 0", to_dir },
{ 'e', 4, " to 45", to_dir },
@@ -88,14 +83,14 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane},
{ 'a', 4, " to 270", to_dir },
{ 'q', 4, " to 315", to_dir },
{ HELPTOKEN, 12, " lrLRt", NULL }},
- state3[] = { { '+', 10, " climb", climb },
- { 'c', 10, " climb", climb },
- { '-', 10, " descend", descend },
- { 'd', 10, " descend", descend },
+ state3[] = { { '+', 10, " climb", climb },
+ { 'c', 10, " climb", climb },
+ { '-', 10, " descend", descend },
+ { 'd', 10, " descend", descend },
{ NUMTOKEN, 7, " %c000 feet", setalt },
{ HELPTOKEN, 12, " +-cd[0-9]", NULL }},
- state4[] = { { '@', 9, " at", NULL },
- { 'a', 9, " at", NULL },
+ state4[] = { { '@', 9, " at", NULL },
+ { 'a', 9, " at", NULL },
{ RETTOKEN, -1, "", NULL },
#ifdef SYSV
{ CRTOKEN, -1, "", NULL },
@@ -113,9 +108,9 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane},
{ 'z', 4, " 225", rel_dir },
{ 'a', 4, " 270", rel_dir },
{ 'q', 4, " 315", rel_dir },
- { RETTOKEN, -1, "", NULL },
+ { RETTOKEN, -1, "", NULL },
#ifdef SYSV
- { CRTOKEN, -1, "", NULL },
+ { CRTOKEN, -1, "", NULL },
#endif
{ HELPTOKEN, 12, " @a",NULL }},
state7[] = { { RETTOKEN, -1, "", NULL },
@@ -130,7 +125,7 @@ RULE state0[] = { { ALPHATOKEN, 1, "%c:", setplane},
{ HELPTOKEN, 12, " b*", NULL }},
state10[] = { { NUMTOKEN, 7, " %c000 ft", setrelalt},
{ HELPTOKEN, 12, " [0-9]", NULL }},
- state11[] = { { 'b', 8, " beacon #", beacon },
+ state11[] = { { 'b', 8, " beacon #", beacon },
{ '*', 8, " beacon #", beacon },
{ 'e', 8, " exit #", ex_it },
{ 'a', 8, " airport #", airport },
@@ -153,7 +148,7 @@ int level;
int tval;
int dest_type, dest_no, dir;
-pop()
+int pop()
{
if (level == 0)
return (-1);
@@ -167,7 +162,7 @@ pop()
return (0);
}
-rezero()
+void rezero()
{
iomove(0);
@@ -179,7 +174,7 @@ rezero()
strcpy(T_STR, "");
}
-push(ruleno, ch)
+void push(ruleno, ch)
{
int newstate, newpos;
@@ -200,7 +195,77 @@ push(ruleno, ch)
strcpy(T_STR, "");
}
-getcommand()
+int gettoken()
+{
+ while ((tval = getAChar()) == REDRAWTOKEN || tval == SHELLTOKEN)
+ {
+ if (tval == SHELLTOKEN)
+ {
+#ifdef BSD
+ struct itimerval itv;
+ itv.it_value.tv_sec = 0;
+ itv.it_value.tv_usec = 0;
+ setitimer(ITIMER_REAL, &itv, NULL);
+#endif
+#ifdef SYSV
+ int aval;
+ aval = alarm(0);
+#endif
+ if (fork() == 0) /* child */
+ {
+ char *shell, *base, *getenv(), *strrchr();
+
+ setuid(getuid()); /* turn off setuid bit */
+ done_screen();
+
+ /* run user's favorite shell */
+ if ((shell = getenv("SHELL")) != NULL)
+ {
+ base = strrchr(shell, '/');
+ if (base == NULL)
+ base = shell;
+ else
+ base++;
+ execl(shell, base, (char*)0);
+ }
+ else
+ execl("/bin/sh", "sh", (char*)0);
+
+ exit(0); /* oops */
+ }
+
+ wait(0);
+#ifdef BSD
+ ioctl(fileno(stdin), TIOCSETP, &tty_new);
+ itv.it_value.tv_sec = 0;
+ itv.it_value.tv_usec = 1;
+ itv.it_interval.tv_sec = sp->update_secs;
+ itv.it_interval.tv_usec = 0;
+ setitimer(ITIMER_REAL, &itv, NULL);
+#endif
+#ifdef SYSV
+ ioctl(fileno(stdin), TCSETAW, &tty_new);
+ alarm(aval);
+#endif
+ }
+ redraw();
+ }
+
+ if (isdigit(tval))
+ return (NUMTOKEN);
+ else if (isalpha(tval))
+ return (ALPHATOKEN);
+ else
+ return (tval);
+}
+
+void noise()
+{
+ putchar('\07');
+ fflush(stdout);
+}
+
+int getcommand()
{
int c, i, done;
char *s, *(*func)();
@@ -235,7 +300,7 @@ getcommand()
return (1); /* forced update */
dest_type = T_NODEST;
-
+
for (i = 0; i < level; i++) {
func = st[stack[i].state].rule[stack[i].rule].func;
if (func != NULL)
@@ -258,76 +323,6 @@ getcommand()
return (0);
}
-noise()
-{
- putchar('\07');
- fflush(stdout);
-}
-
-gettoken()
-{
- while ((tval = getAChar()) == REDRAWTOKEN || tval == SHELLTOKEN)
- {
- if (tval == SHELLTOKEN)
- {
-#ifdef BSD
- struct itimerval itv;
- itv.it_value.tv_sec = 0;
- itv.it_value.tv_usec = 0;
- setitimer(ITIMER_REAL, &itv, NULL);
-#endif
-#ifdef SYSV
- int aval;
- aval = alarm(0);
-#endif
- if (fork() == 0) /* child */
- {
- char *shell, *base, *getenv(), *strrchr();
-
- setuid(getuid()); /* turn off setuid bit */
- done_screen();
-
- /* run user's favorite shell */
- if ((shell = getenv("SHELL")) != NULL)
- {
- base = strrchr(shell, '/');
- if (base == NULL)
- base = shell;
- else
- base++;
- execl(shell, base, 0);
- }
- else
- execl("/bin/sh", "sh", 0);
-
- exit(0); /* oops */
- }
-
- wait(0);
-#ifdef BSD
- ioctl(fileno(stdin), TIOCSETP, &tty_new);
- itv.it_value.tv_sec = 0;
- itv.it_value.tv_usec = 1;
- itv.it_interval.tv_sec = sp->update_secs;
- itv.it_interval.tv_usec = 0;
- setitimer(ITIMER_REAL, &itv, NULL);
-#endif
-#ifdef SYSV
- ioctl(fileno(stdin), TCSETAW, &tty_new);
- alarm(aval);
-#endif
- }
- redraw();
- }
-
- if (isdigit(tval))
- return (NUMTOKEN);
- else if (isalpha(tval))
- return (ALPHATOKEN);
- else
- return (tval);
-}
-
char *
setplane(c)
{
@@ -604,10 +599,9 @@ ignore(c)
return (NULL);
}
-dir_no(ch)
- char ch;
+int dir_no(ch)
{
- int dir;
+ int dir = 0;
switch (ch) {
case 'w': dir = 0; break;
diff --git a/src/games/atc/lex.l b/src/games/atc/lex.l
index dde6315..d0b0520 100644
--- a/src/games/atc/lex.l
+++ b/src/games/atc/lex.l
@@ -8,9 +8,13 @@
* For more info on this and all of my stuff, mail edjames@berkeley.edu.
*/
+#define YY_NO_INPUT
+#define YY_SKIP_YYWRAP
#include "y.tab.h"
+#define yywrap() 0
extern int line;
%}
+%option nounput
%%
[0-9]+ { yylval.ival = atoi(yytext); return(ConstOp); }
height { return(HeightOp); }
diff --git a/src/games/atc/list.c b/src/games/atc/list.c
index 5498e59..d9d6f4f 100644
--- a/src/games/atc/list.c
+++ b/src/games/atc/list.c
@@ -15,7 +15,7 @@ newplane()
return ((PLANE *) calloc(1, sizeof (PLANE)));
}
-append(l, p)
+void append(l, p)
LIST *l;
PLANE *p;
{
@@ -53,13 +53,13 @@ append(l, p)
}
}
-delete(l, p)
+void delete(l, p)
LIST *l;
PLANE *p;
{
if (l->head == NULL)
loser(p, "deleted a non-existant plane! Get help!");
-
+
if (l->head == p && l->tail == p)
l->head = l->tail = NULL;
else if (l->head == p) {
diff --git a/src/games/atc/log.c b/src/games/atc/log.c
index cf92d85..9f96c4e 100644
--- a/src/games/atc/log.c
+++ b/src/games/atc/log.c
@@ -6,14 +6,9 @@
*
* For more info on this and all of my stuff, mail edjames@berkeley.edu.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)log.c 1.4 (Berkeley) 12/26/87";
-#endif not lint
-
#include "include.h"
-compar(a, b)
+int compar(a, b)
SCORE *a, *b;
{
if (b->planes == a->planes)
@@ -51,16 +46,14 @@ timestr(t)
return (s);
}
-log_score(list_em)
+void log_score(list_em)
{
register int i, fd, num_scores = 0, good, changed = 0, found = 0;
struct passwd *pw;
FILE *fp;
- char *cp, logstr[BUFSIZ], *index(), *rindex();
+ char *cp, logstr[BUFSIZ];
SCORE score[100], thisscore;
-#ifdef SYSV
struct utsname name;
-#endif
strcpy(logstr, SPECIAL_DIR);
strcat(logstr, LOG);
@@ -69,16 +62,16 @@ log_score(list_em)
fd = open(logstr, O_CREAT|O_RDWR, 0644);
if (fd < 0) {
perror(logstr);
- return (-1);
+ return;
}
/*
- * This is done to take advantage of stdio, while still
+ * This is done to take advantage of stdio, while still
* allowing a O_CREAT during the open(2) of the log file.
*/
fp = fdopen(fd, "r+");
if (fp == NULL) {
perror(logstr);
- return (-1);
+ return;
}
#ifdef BSD
if (flock(fileno(fp), LOCK_EX) < 0)
@@ -88,14 +81,14 @@ log_score(list_em)
#endif
{
perror("flock");
- return (-1);
+ return;
}
for (;;) {
good = fscanf(fp, "%s %s %s %d %d %d",
- score[num_scores].name,
- score[num_scores].host,
+ score[num_scores].name,
+ score[num_scores].host,
score[num_scores].game,
- &score[num_scores].planes,
+ &score[num_scores].planes,
&score[num_scores].time,
&score[num_scores].real_time);
if (good != 6 || ++num_scores >= NUM_SCORES)
@@ -103,32 +96,24 @@ log_score(list_em)
}
if (!test_mode && !list_em) {
if ((pw = (struct passwd *) getpwuid(getuid())) == NULL) {
- fprintf(stderr,
+ fprintf(stderr,
"getpwuid failed for uid %d. Who are you?\n",
getuid());
- return (-1);
+ return;
}
strcpy(thisscore.name, pw->pw_name);
-#ifdef BSD
- if (gethostname(thisscore.host, sizeof (thisscore.host)) < 0) {
- perror("gethostname");
- return (-1);
- }
-#endif
-#ifdef SYSV
uname(&name);
strcpy(thisscore.host, name.sysname);
-#endif
- cp = rindex(file, '/');
+ cp = strrchr(file, '/');
if (cp == NULL) {
fprintf(stderr, "log: where's the '/' in %s?\n", file);
- return (-1);
+ return;
}
cp++;
strcpy(thisscore.game, cp);
- thisscore.time = clock;
+ thisscore.time = clocktick;
thisscore.planes = safe_planes;
thisscore.real_time = time(0) - start_time;
@@ -153,7 +138,7 @@ log_score(list_em)
if (num_scores < NUM_SCORES)
num_scores++;
bcopy(&score[i],
- &score[num_scores - 1],
+ &score[num_scores - 1],
sizeof (score[i]));
bcopy(&thisscore, &score[i],
sizeof (score[i]));
@@ -163,7 +148,7 @@ log_score(list_em)
}
}
if (!found && !changed && num_scores < NUM_SCORES) {
- bcopy(&thisscore, &score[num_scores],
+ bcopy(&thisscore, &score[num_scores],
sizeof (score[num_scores]));
num_scores++;
changed++;
@@ -178,7 +163,7 @@ log_score(list_em)
rewind(fp);
for (i = 0; i < num_scores; i++)
fprintf(fp, "%s %s %s %d %d %d\n",
- score[i].name, score[i].host,
+ score[i].name, score[i].host,
score[i].game, score[i].planes,
score[i].time, score[i].real_time);
} else {
@@ -196,11 +181,11 @@ log_score(list_em)
/* lock will evaporate upon close */
#endif
fclose(fp);
- printf("%2s: %-8s %-8s %-18s %4s %9s %4s\n", "#", "name", "host",
+ printf("%2s: %-8s %-8s %-18s %4s %9s %4s\n", "#", "name", "host",
"game", "time", "real time", "planes safe");
puts("-------------------------------------------------------------------------------");
for (i = 0; i < num_scores; i++) {
- cp = index(score[i].host, '.');
+ cp = strchr(score[i].host, '.');
if (cp != NULL)
*cp = '\0';
printf("%2d: %-8s %-8s %-18s %4d %9s %4d\n", i + 1,
@@ -209,5 +194,4 @@ log_score(list_em)
score[i].planes);
}
putchar('\n');
- return (0);
}
diff --git a/src/games/atc/main.c b/src/games/atc/main.c
index 24218d7..a104595 100644
--- a/src/games/atc/main.c
+++ b/src/games/atc/main.c
@@ -9,169 +9,7 @@
#include "include.h"
-main(ac, av)
- char *av[];
-{
- int seed;
- int f_usage = 0, f_list = 0, f_showscore = 0;
- int f_printpath = 0;
- char *file = NULL;
- char *name, *ptr;
-#ifdef BSD
- struct itimerval itv;
-#endif
- extern int update(), quit(), log_score();
- extern char *default_game(), *okay_game();
-
- start_time = seed = time(0);
-
- name = *av++;
- while (*av) {
-#ifndef SAVEDASH
- if (**av == '-')
- *++*av;
- else
- break;
-#endif
- ptr = *av++;
- while (*ptr) {
- switch (*ptr) {
- case '?':
- case 'u':
- f_usage++;
- break;
- case 'l':
- f_list++;
- break;
- case 's':
- case 't':
- f_showscore++;
- break;
- case 'p':
- f_printpath++;
- break;
- case 'r':
- seed = atoi(*av);
- av++;
- break;
- case 'f':
- case 'g':
- file = *av;
- av++;
- break;
- default:
- fprintf(stderr, "Unknown option '%c'\n", *ptr,
- name);
- f_usage++;
- break;
- }
- ptr++;
- }
- }
- srandom(seed);
-
- if (f_usage)
- fprintf(stderr,
- "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n",
- name);
- if (f_showscore)
- log_score(1);
- if (f_list)
- list_games();
- if (f_printpath) {
- char buf[100];
-
- strcpy(buf, SPECIAL_DIR);
- buf[strlen(buf) - 1] = '\0';
- puts(buf);
- }
-
- if (f_usage || f_showscore || f_list || f_printpath)
- exit(0);
-
- if (file == NULL)
- file = default_game();
- else
- file = okay_game(file);
-
- if (file == NULL || read_file(file) < 0)
- exit(1);
-
- init_gr();
- setup_screen(sp);
-
- addplane();
-
- signal(SIGINT, quit);
- signal(SIGQUIT, quit);
-#ifdef BSD
- signal(SIGTSTP, SIG_IGN);
- signal(SIGSTOP, SIG_IGN);
-#endif
- signal(SIGHUP, log_score);
- signal(SIGTERM, log_score);
-
-#ifdef BSD
- ioctl(fileno(stdin), TIOCGETP, &tty_start);
- bcopy(&tty_start, &tty_new, sizeof(tty_new));
- tty_new.sg_flags |= CBREAK;
- tty_new.sg_flags &= ~ECHO;
- ioctl(fileno(stdin), TIOCSETP, &tty_new);
-#endif
-
-#ifdef SYSV
- ioctl(fileno(stdin), TCGETA, &tty_start);
- bcopy(&tty_start, &tty_new, sizeof(tty_new));
- tty_new.c_lflag &= ~ICANON;
- tty_new.c_lflag &= ~ECHO;
- tty_new.c_cc[VMIN] = 1;
- tty_new.c_cc[VTIME] = 0;
- ioctl(fileno(stdin), TCSETAW, &tty_new);
-#endif
-
- signal(SIGALRM, update);
-
-#ifdef BSD
- itv.it_value.tv_sec = 0;
- itv.it_value.tv_usec = 1;
- itv.it_interval.tv_sec = sp->update_secs;
- itv.it_interval.tv_usec = 0;
- setitimer(ITIMER_REAL, &itv, NULL);
-#endif
-#ifdef SYSV
- alarm(sp->update_secs);
-#endif
-
- for (;;) {
- if (getcommand() != 1)
- planewin();
- else {
-#ifdef BSD
- itv.it_value.tv_sec = 0;
- itv.it_value.tv_usec = 0;
- setitimer(ITIMER_REAL, &itv, NULL);
-#endif
-#ifdef SYSV
- alarm(0);
-#endif
-
- update();
-
-#ifdef BSD
- itv.it_value.tv_sec = sp->update_secs;
- itv.it_value.tv_usec = 0;
- itv.it_interval.tv_sec = sp->update_secs;
- itv.it_interval.tv_usec = 0;
- setitimer(ITIMER_REAL, &itv, NULL);
-#endif
-#ifdef SYSV
- alarm(sp->update_secs);
-#endif
- }
- }
-}
-
-read_file(s)
+int read_file(s)
char *s;
{
extern FILE *yyin;
@@ -252,7 +90,7 @@ okay_game(s)
return (ret);
}
-list_games()
+int list_games()
{
FILE *fp;
char line[256], games[256];
@@ -277,3 +115,162 @@ list_games()
}
return (0);
}
+
+int main(ac, av)
+ char *av[];
+{
+ int seed;
+ int f_usage = 0, f_list = 0, f_showscore = 0;
+ int f_printpath = 0;
+ char *file = NULL;
+ char *name, *ptr;
+#ifdef BSD
+ struct itimerval itv;
+#endif
+
+ start_time = seed = time(0);
+
+ name = *av++;
+ while (*av) {
+#ifndef SAVEDASH
+ if (**av == '-')
+ (*av)++;
+ else
+ break;
+#endif
+ ptr = *av++;
+ while (*ptr) {
+ switch (*ptr) {
+ case '?':
+ case 'u':
+ f_usage++;
+ break;
+ case 'l':
+ f_list++;
+ break;
+ case 's':
+ case 't':
+ f_showscore++;
+ break;
+ case 'p':
+ f_printpath++;
+ break;
+ case 'r':
+ seed = atoi(*av);
+ av++;
+ break;
+ case 'f':
+ case 'g':
+ file = *av;
+ av++;
+ break;
+ default:
+ fprintf(stderr, "Unknown option '%c'\n", *ptr);
+ f_usage++;
+ break;
+ }
+ ptr++;
+ }
+ }
+ srandom(seed);
+
+ if (f_usage)
+ fprintf(stderr,
+ "Usage: %s -[u?lstp] [-[gf] game_name] [-r random seed]\n",
+ name);
+ if (f_showscore)
+ log_score(1);
+ if (f_list)
+ list_games();
+ if (f_printpath) {
+ char buf[100];
+
+ strcpy(buf, SPECIAL_DIR);
+ buf[strlen(buf) - 1] = '\0';
+ puts(buf);
+ }
+
+ if (f_usage || f_showscore || f_list || f_printpath)
+ exit(0);
+
+ if (file == NULL)
+ file = default_game();
+ else
+ file = okay_game(file);
+
+ if (file == NULL || read_file(file) < 0)
+ exit(1);
+
+ init_gr();
+ setup_screen(sp);
+
+ addplane();
+
+ signal(SIGINT, quit);
+ signal(SIGQUIT, quit);
+#ifdef BSD
+ signal(SIGTSTP, SIG_IGN);
+ signal(SIGSTOP, SIG_IGN);
+#endif
+ signal(SIGHUP, log_score);
+ signal(SIGTERM, log_score);
+
+#ifdef BSD
+ ioctl(fileno(stdin), TIOCGETP, &tty_start);
+ bcopy(&tty_start, &tty_new, sizeof(tty_new));
+ tty_new.sg_flags |= CBREAK;
+ tty_new.sg_flags &= ~ECHO;
+ ioctl(fileno(stdin), TIOCSETP, &tty_new);
+#endif
+
+#ifdef SYSV
+ ioctl(fileno(stdin), TCGETA, &tty_start);
+ bcopy(&tty_start, &tty_new, sizeof(tty_new));
+ tty_new.c_lflag &= ~ICANON;
+ tty_new.c_lflag &= ~ECHO;
+ tty_new.c_cc[VMIN] = 1;
+ tty_new.c_cc[VTIME] = 0;
+ ioctl(fileno(stdin), TCSETAW, &tty_new);
+#endif
+
+ signal(SIGALRM, update);
+
+#ifdef BSD
+ itv.it_value.tv_sec = 0;
+ itv.it_value.tv_usec = 1;
+ itv.it_interval.tv_sec = sp->update_secs;
+ itv.it_interval.tv_usec = 0;
+ setitimer(ITIMER_REAL, &itv, NULL);
+#endif
+#ifdef SYSV
+ alarm(sp->update_secs);
+#endif
+
+ for (;;) {
+ if (getcommand() != 1)
+ planewin();
+ else {
+#ifdef BSD
+ itv.it_value.tv_sec = 0;
+ itv.it_value.tv_usec = 0;
+ setitimer(ITIMER_REAL, &itv, NULL);
+#endif
+#ifdef SYSV
+ alarm(0);
+#endif
+
+ update(0);
+
+#ifdef BSD
+ itv.it_value.tv_sec = sp->update_secs;
+ itv.it_value.tv_usec = 0;
+ itv.it_interval.tv_sec = sp->update_secs;
+ itv.it_interval.tv_usec = 0;
+ setitimer(ITIMER_REAL, &itv, NULL);
+#endif
+#ifdef SYSV
+ alarm(sp->update_secs);
+#endif
+ }
+ }
+}
diff --git a/src/games/atc/update.c b/src/games/atc/update.c
index cd8713a..9d9d84b 100644
--- a/src/games/atc/update.c
+++ b/src/games/atc/update.c
@@ -6,24 +6,29 @@
*
* For more info on this and all of my stuff, mail edjames@berkeley.edu.
*/
-
-#if !defined(lint) && defined(DOSCCS)
-static char sccsid[] = "@(#)update.c 1.3.1 (2.11BSD) 1999/10/25";
-#endif
-
#include "include.h"
-update()
+int too_close(p1, p2, dist)
+ PLANE *p1, *p2;
+{
+ if (ABS(p1->altitude - p2->altitude) <= dist &&
+ ABS(p1->xpos - p2->xpos) <= dist && ABS(p1->ypos - p2->ypos) <= dist)
+ return (1);
+ else
+ return (0);
+}
+
+void update(int sig)
{
int i, dir_diff, unclean;
- PLANE *pp, *p1, *p2, *p;
+ PLANE *pp, *p1, *p2;
sigset_t set, oset;
sigemptyset(&set);
sigaddset(&set, SIGINT);
(void)sigprocmask(SIG_BLOCK, &set, &oset);
- clock++;
+ clocktick++;
erase_all();
/* put some planes in the air */
@@ -42,7 +47,7 @@ update()
/* do altitude change and basic movement */
for (pp = air.head; pp != NULL; pp = pp->next) {
/* type 0 only move every other turn */
- if (pp->plane_type == 0 && clock & 1)
+ if (pp->plane_type == 0 && clocktick & 1)
continue;
pp->fuel--;
@@ -117,10 +122,10 @@ update()
if (pp->xpos == sp->airport[i].x &&
pp->ypos == sp->airport[i].y) {
if (pp->dest_type == T_AIRPORT)
- loser(pp,
+ loser(pp,
"landed at the wrong airport.");
else
- loser(pp,
+ loser(pp,
"landed instead of exited.");
}
loser(pp, "crashed on the ground.");
@@ -131,10 +136,10 @@ update()
if (pp->xpos == sp->exit[i].x &&
pp->ypos == sp->exit[i].y) {
if (pp->dest_type == T_EXIT)
- loser(pp,
+ loser(pp,
"exited via the wrong exit.");
else
- loser(pp,
+ loser(pp,
"exited instead of landed.");
}
loser(pp, "illegally left the flight arena.");
@@ -174,20 +179,35 @@ update()
(void)sigprocmask(SIG_SETMASK, &oset, NULL);
}
+int dir_deg(d)
+{
+ switch (d) {
+ case 0: return (0);
+ case 1: return (45);
+ case 2: return (90);
+ case 3: return (135);
+ case 4: return (180);
+ case 5: return (225);
+ case 6: return (270);
+ case 7: return (315);
+ default:
+ return (-1);
+ }
+}
+
char *
command(pp)
PLANE *pp;
{
static char buf[50], *bp, *comm_start;
- char *index();
buf[0] = '\0';
bp = buf;
- (void)sprintf(bp, "%c%d%c%c%d: ", name(pp), pp->altitude,
+ (void)sprintf(bp, "%c%d%c%c%d: ", name(pp), pp->altitude,
(pp->fuel < LOWFUEL) ? '*' : ' ',
(pp->dest_type == T_AIRPORT) ? 'A' : 'E', pp->dest_no);
- comm_start = bp = index(buf, '\0');
+ comm_start = bp = strchr(buf, '\0');
if (pp->altitude == 0)
(void)sprintf(bp, "Holding @ A%d", pp->orig_no);
else if (pp->new_dir >= MAXDIR || pp->new_dir < 0)
@@ -195,19 +215,19 @@ command(pp)
else if (pp->new_dir != pp->dir)
(void)sprintf(bp, "%d", dir_deg(pp->new_dir));
- bp = index(buf, '\0');
+ bp = strchr(buf, '\0');
if (pp->delayd)
(void)sprintf(bp, " @ B%d", pp->delayd_no);
- bp = index(buf, '\0');
- if (*comm_start == '\0' &&
+ bp = strchr(buf, '\0');
+ if (*comm_start == '\0' &&
(pp->status == S_UNMARKED || pp->status == S_IGNORED))
strcpy(bp, "---------");
return (buf);
}
/* char */
-name(p)
+int name(p)
PLANE *p;
{
if (p->plane_type == 0)
@@ -216,17 +236,17 @@ name(p)
return ('a' + p->plane_no);
}
-number(l)
+int number(l)
{
if (l < 'a' && l > 'z' && l < 'A' && l > 'Z')
return (-1);
else if (l >= 'a' && l <= 'z')
return (l - 'a');
- else
+ else
return (l - 'A');
}
-next_plane()
+int next_plane()
{
static int last_plane = -1;
PLANE *pp;
@@ -254,7 +274,7 @@ next_plane()
return (last_plane);
}
-addplane()
+int addplane()
{
PLANE p, *pp, *p1;
int i, num_starts, close, rnd, rnd2, pnum;
@@ -337,29 +357,3 @@ findplane(n)
return (pp);
return (NULL);
}
-
-too_close(p1, p2, dist)
- PLANE *p1, *p2;
-{
- if (ABS(p1->altitude - p2->altitude) <= dist &&
- ABS(p1->xpos - p2->xpos) <= dist && ABS(p1->ypos - p2->ypos) <= dist)
- return (1);
- else
- return (0);
-}
-
-dir_deg(d)
-{
- switch (d) {
- case 0: return (0);
- case 1: return (45);
- case 2: return (90);
- case 3: return (135);
- case 4: return (180);
- case 5: return (225);
- case 6: return (270);
- case 7: return (315);
- default:
- return (-1);
- }
-}
diff --git a/src/games/boggle/.gitignore b/src/games/boggle/.gitignore
new file mode 100644
index 0000000..3b54c6b
--- /dev/null
+++ b/src/games/boggle/.gitignore
@@ -0,0 +1,3 @@
+bogdict
+boggle
+comp
diff --git a/src/games/boggle/Makefile b/src/games/boggle/Makefile
index b3179aa..16ac5b9 100644
--- a/src/games/boggle/Makefile
+++ b/src/games/boggle/Makefile
@@ -5,28 +5,36 @@
#
# @(#)Makefile 5.3 (Berkeley) 9/7/85
#
-DESTDIR=
-CC = /bin/cc
-SEPFLAG= -i
-CFLAGS = -O
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
-all: boggle bogdict
+CFLAGS += -O
+OBJS = boggle.o
+MAN = boggle.0
+MANSRC = boggle.6
-bogdict: comp sfile
- -if [ -f /usr/local/lib/w2a ]; \
- then dict=/usr/local/lib/w2a; \
- else dict=/usr/dict/words; fi; \
- sed -f sfile $$dict | uniq | ./comp >bogdict
+all: boggle bogdict ${MAN}
-install: all
- install -s boggle ${DESTDIR}/usr/games/boggle
- install -m 644 bogdict ${DESTDIR}/usr/games/lib/bogdict
+boggle: ${OBJS}
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
-boggle: boggle.c
- cc ${SEPFLAG} -o boggle ${CFLAGS} boggle.c
+bogdict: comp sfile
+ sed -f sfile ../../../share/dict/words | uniq | ./comp > bogdict
-comp: comp.c
- cc ${SEPFLAG} -o comp ${CFLAGS} comp.c
+comp: comp.c
+ cc -O comp.c -o comp
+
+${MAN}: ${MANSRC}
+ ${MANROFF} $< > $@
clean:
- rm -f bogdict boggle comp *.o
+ rm -f *.o core boggle comp bogdict
+
+install:
+ install boggle $(DESTDIR)/games/
+ install -m 644 bogdict $(DESTDIR)/games/lib/bogdict
+ cp ${MAN} $(DESTDIR)/share/man/cat6/
diff --git a/src/games/boggle/boggle.c b/src/games/boggle/boggle.c
index c56553e..eaa0046 100644
--- a/src/games/boggle/boggle.c
+++ b/src/games/boggle/boggle.c
@@ -3,15 +3,6 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#if !defined(lint) && defined(DOSCCS)
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
-
-static char sccsid[] = "@(#)boggle.c 5.1.1 (2.11BSD) 1997/10/2";
-#endif
-
#include
#include
#include
@@ -19,7 +10,11 @@ static char sccsid[] = "@(#)boggle.c 5.1.1 (2.11BSD) 1997/10/2";
#include
#include
#include
+#include
+#include
#include
+#include
+#include
/* basic parameters */
#define N 4
@@ -62,7 +57,7 @@ long logloc;
char logbuff[100] = {"inst\t"};
/* dictionary interface */
-char defname[] = "/usr/games/lib/bogdict";
+char defname[] = "/games/lib/bogdict";
char *dictname = &defname[0];
FILE *dict;
@@ -89,14 +84,13 @@ char *cube [BSIZE] = {
"anedvz", "pinesh", "abilyt", "gkyleu"
};
-
/* storage for words found */
int ubotch, ustart, wcount;
char *word [MAXWORDS];
char *freesp;
char space[10000];
-endline ()
+void endline ()
{
if (column != 0) {
putchar('\n');
@@ -104,7 +98,7 @@ endline ()
}
}
-timeout ()
+void timeout ()
{
if (*timept > 0) {
signal (SIGALRM, timeout);
@@ -113,7 +107,7 @@ timeout ()
putchar('\007');
}
-interrupt ()
+void interrupt ()
{
signal(SIGINT, interrupt);
if (delct++ >= 1)
@@ -121,7 +115,7 @@ interrupt ()
timept = &zero;
}
-goodbye (stat)
+void goodbye (stat)
int stat;
{
if (master != 0) {
@@ -134,19 +128,13 @@ int stat;
exit(stat);
}
-clearscreen ()
+void clearscreen ()
{
stty (fileno(stdin), &tempttyb);
printf("\n\f\r");
}
-compare (a, b)
-char **a, **b;
-{
- return(wordcomp(*a, *b));
-}
-
-wordcomp (p, q)
+int wordcomp (p, q)
register char *p, *q;
{
if (*p=='0' && *q!='0')
@@ -161,7 +149,13 @@ register char *p, *q;
return(*p-*q);
}
-printinst ()
+int compare (a, b)
+char **a, **b;
+{
+ return(wordcomp(*a, *b));
+}
+
+void printinst ()
{
stty (fileno(stdin), &tempttyb);
printf("instructions?");
@@ -177,10 +171,10 @@ printinst ()
printf(" This program is intended for people wishing to sharpen their\n");
printf("skills at Boggle. If you invoke the program with 4 arguments of 4\n");
printf("letters each, (e.g. \"boggle appl epie moth erhd\") the program forms the\n");
- printf("obvious Boggle grid and lists all the words from /usr/dict/words found\n");
+ printf("obvious Boggle grid and lists all the words from /share/dict/words found\n");
printf("therein. If you invoke the program without arguments, it will generate\n");
printf("a board for you, let you enter words for 3 minutes, and then tell you\n");
- printf("how well you did relative to /usr/dict/words.\n");
+ printf("how well you did relative to /share/dict/words.\n");
printf(" In interactive play, enter your words separated by spaces, tabs,\n");
printf("or newlines. A bell will ring when there is 2:00, 1:00, 0:10, 0:02,\n");
printf("0:01, and 0:00 time left. You may complete any word started before the\n");
@@ -198,7 +192,7 @@ printinst ()
stty (fileno(stdin), &tempttyb);
}
-setup ()
+void setup ()
{
register int i, j;
int rd, cd, k;
@@ -229,7 +223,7 @@ setup ()
level[1] = &stack[1];
}
-makelists ()
+void makelists ()
{
register int i, c;
for (i=0; i<26; i++)
@@ -241,7 +235,7 @@ makelists ()
}
}
-genboard ()
+void genboard ()
{
register int i, j;
for (i=0; i=10 ? '*' : '0'+ways;
}
-aputword (ways)
+void aputword (ways)
int ways;
{
/* store (wbuff, ways) in next slot in space */
@@ -333,16 +327,7 @@ int ways;
word[++wcount] = freesp;
}
-tputword (ways)
-int ways;
-{
- /* print (wbuff, ways) on terminal */
- wbuff[wlength+1] = '0';
- wbuff[0] = ways>=10 ? '*' : '0'+ways;
- outword(&wbuff[0]);
-}
-
-outword (p)
+void outword (p)
register char *p;
{
register int newcol;
@@ -371,7 +356,16 @@ register char *p;
}
}
-printdiff ()
+void tputword (ways)
+int ways;
+{
+ /* print (wbuff, ways) on terminal */
+ wbuff[wlength+1] = '0';
+ wbuff[0] = ways>=10 ? '*' : '0'+ways;
+ outword(&wbuff[0]);
+}
+
+void printdiff ()
{
register int c, d, u;
char both, donly, uonly;
@@ -423,7 +417,7 @@ printdiff ()
}
}
-numways (leaf, last)
+int numways (leaf, last)
register struct frame *leaf;
struct frame *last;
{
@@ -444,8 +438,9 @@ struct frame *last;
return(count);
}
-evalboard (getword, putword)
-int (*getword)(), (*putword)();
+int evalboard (getword, putword)
+int (*getword)();
+void (*putword)();
{
register struct frame *top;
register int l, q;
@@ -461,7 +456,7 @@ int (*getword)(), (*putword)();
if (!(*getword) ())
break;
top = level[l+1];
-
+
while (1) {
level[l+1] = lastparent = top;
/* wbuff[1]...wbuff[l] have been matched */
@@ -501,7 +496,7 @@ int (*getword)(), (*putword)();
return(found);
}
-main (argc, argv)
+int main (argc, argv)
int argc;
char **argv;
{
@@ -516,13 +511,13 @@ char **argv;
goodbye(0);
signal (SIGINT, interrupt);
timein = time(0L);
- if (argv[0][0] != 'a' && (logfile = open("/usr/games/lib/boglog", 1)) >= 0) {
+ if (argv[0][0] != 'a' && (logfile = open("/games/lib/boglog", 1)) >= 0) {
p = &logbuff[5];
q = getlogin();
- while (*p++ = *q++);
+ while ((*p++ = *q++));
p[-1] = '\t';
q = ctime(&timein);
- while (*p++ = *q++);
+ while ((*p++ = *q++));
logloc = lseek(logfile, 0L, 2);
write(logfile, &logbuff[0], p-&logbuff[1]);
}
@@ -612,11 +607,12 @@ char **argv;
evalboard(getdword, aputword);
p = freesp;
while ((i = read(pipefd[0], freesp, 512)) != 0) {
- if (i < 0)
+ if (i < 0) {
if (errno != EINTR)
break;
else
i = 0;
+ }
freesp += i;
}
close(pipefd[0]);
diff --git a/src/games/boggle/comp.c b/src/games/boggle/comp.c
index 874f0a2..d61eec6 100644
--- a/src/games/boggle/comp.c
+++ b/src/games/boggle/comp.c
@@ -3,35 +3,27 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
-#endif not lint
-
-#ifndef lint
-static char sccsid[] = "@(#)comp.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
#include
+
#define MAX ' '
char new[MAX], old[MAX];
-main ()
+int main ()
{
register int i, j;
+
old[0] = '\0';
while (fgets(&new[0], MAX, stdin) != NULL) {
for (i=0; i= MAX) {
fprintf(stderr, "long word\n");
- exit(1);
+ return 1;
}
putc(i, stdout);
for (j=0; (old[j]=new[j]) != '\n'; j++);
old[j] = '\0';
fputs(&old[i], stdout);
}
+ return 0;
}
diff --git a/src/games/btlgammon/.gitignore b/src/games/btlgammon/.gitignore
new file mode 100644
index 0000000..af6974d
--- /dev/null
+++ b/src/games/btlgammon/.gitignore
@@ -0,0 +1 @@
+btlgammon
diff --git a/src/games/btlgammon/Makefile b/src/games/btlgammon/Makefile
index d0724c0..1ddaf11 100644
--- a/src/games/btlgammon/Makefile
+++ b/src/games/btlgammon/Makefile
@@ -1,36 +1,23 @@
-# @(#)Makefile 4.2 (Berkeley) 9/7/85
+# @(#)Makefile 4.2 (Berkeley) 9/7/85
#
-DESTDIR=
-CFLAGS= -O
-SEPFLAG= -i
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
-btlgammon: btlgammon.c
- cc ${SEPFLAG} ${CFLAGS} -o btlgammon btlgammon.c
+CFLAGS = -O
+OBJS = btlgammon.o
-install: btlgammon backrules
- install -s btlgammon ${DESTDIR}/usr/games/btlgammon
- install -c backrules ${DESTDIR}/usr/games/lib/backrules
+all: btlgammon
+
+btlgammon: ${OBJS}
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
clean:
- rm -f a.out core *.s *.o btlgammon
-
-depend:
- cat x.c
- for i in btlgammon; do \
- (echo $$i: $$i.c >>makedep; \
- /bin/grep '^#[ ]*include' x.c $$i.c | sed \
- -e 's,<\(.*\)>,"/usr/include/\1",' \
- -e 's/:[^"]*"\([^"]*\)".*/: \1/' \
- -e 's/\.c//' >>makedep); done
- echo '/^# DO NOT DELETE THIS LINE/+2,$$d' >eddep
- echo '$$r makedep' >>eddep
- echo 'w' >>eddep
- cp Makefile Makefile.bak
- ed - Makefile < eddep
- rm eddep makedep x.c
- echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile
- echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile
- echo '# see make depend above' >> Makefile
-
-# DO NOT DELETE THIS LINE -- make depend uses it
+ rm -f *.o core btlgammon
+install:
+ install btlgammon $(DESTDIR)/games/
+ install -m 644 backrules $(DESTDIR)/games/lib/backrules
diff --git a/src/games/btlgammon/btlgammon.c b/src/games/btlgammon/btlgammon.c
index e1acba8..c3c62e1 100644
--- a/src/games/btlgammon/btlgammon.c
+++ b/src/games/btlgammon/btlgammon.c
@@ -1,18 +1,18 @@
-
-static char sccsid[] = " backgammon.c 4.1 82/10/24 ";
-
/*
-** The game of Backgammon
-*/
-
-#include
+ * The game of Backgammon
+ */
+#include
+#include
+#include
+#include
+#include
#define WHITE 0
#define BROWN 1
#define NIL (-1)
#define MAXGMOV 10
#define MAXIMOVES 1000
-#define RULES "/usr/games/lib/backrules"
+#define RULES "/games/lib/backrules"
char level; /*'b'=beginner, 'i'=intermediate, 'e'=expert*/
@@ -30,19 +30,19 @@ int goodmoves[MAXGMOV];
int probmoves[MAXGMOV];
int brown[] = { /* brown position table */
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0
};
int white[] = { /* white position table */
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
- 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+ 0, 0, 0, 0, 3, 0, 5, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0
};
int probability[] = {
- 0, 11, 12, 13, 14, 15, 16,
+ 0, 11, 12, 13, 14, 15, 16,
06, 05, 04, 03, 02, 01
};
@@ -51,9 +51,541 @@ struct {
int mov[4];
} moves[MAXIMOVES];
-main()
+int piececount(player,startrow,endrow)
+int *player,startrow,endrow;
{
- int go[5], tvec[2];
+ int sum;
+
+ sum=0;
+ while(startrow <= endrow)
+ sum += player[startrow++];
+ return(sum);
+}
+
+int play(player,playee,pos)
+int *player,*playee,pos[];
+{
+ int k, n, die, ipos;
+
+ for(k=0; k < player[0]; k++){ /*blots on player[0] must be moved first*/
+ if(pos[k] == NIL)
+ break;
+ if(pos[k] != 0){
+ fprintf(stdout, "Stone on bar must be moved first.\n");
+ return(NIL);
+ }
+ }
+ for(k = 0; (ipos=pos[k]) != NIL; k++){
+ die = k?die2:die1;
+ n = 25-ipos-die;
+ if(player[ipos] == 0)
+ goto badmove;
+ if(n > 0 && playee[n] >= 2)
+ goto badmove;
+ if(n <= 0){
+ if(piececount(player,0,18) != 0)
+ goto badmove;
+ if((ipos+die) != 25 && piececount(player,19,24-die)!=0)
+ goto badmove;
+ }
+ player[ipos]--;
+ player[ipos+die]++;
+ }
+ for(k = 0; pos[k] != NIL; k++){
+ die = k?die2:die1;
+ n = 25-pos[k]-die;
+ if(n>0 && playee[n]==1){
+ playee[n]=0;
+ playee[0]++;
+ }
+ }
+ return(0);
+
+badmove:
+ fprintf(stdout, "Move %d illegal.\n", ipos);
+ while(k--){
+ die=k?die2:die1;
+ player[pos[k]]++;
+ player[pos[k]+die]--;
+ }
+ return(NIL);
+}
+
+void moverecord(mover)
+int *mover;
+{
+ int t;
+
+ if(imoves < MAXIMOVES) {
+ for(t = 0; t <= 3; t++)
+ moves[imoves].pos[t] = NIL;
+ switch(count) {
+ case 4:
+ moves[imoves].pos[3]=m;
+ moves[imoves].mov[3]=die1;
+
+ case 3:
+ moves[imoves].pos[2]=l;
+ moves[imoves].mov[2]=die1;
+
+ case 2:
+ moves[imoves].pos[1]=j;
+ moves[imoves].mov[1]=die2;
+
+ case 1:
+ moves[imoves].pos[0]=i;
+ moves[imoves].mov[0]=die1;
+ imoves++;
+ }
+ }
+ switch(count) {
+ case 4:
+ break;
+
+ case 3:
+ mover[l]++;
+ mover[l+die1]--;
+ break;
+
+ case 2:
+ mover[j]++;
+ mover[j+die2]--;
+ break;
+
+ case 1:
+ mover[i]++;
+ mover[i+die1]--;
+ }
+}
+
+void movegen(mover,movee)
+int *mover,*movee;
+{
+ int k;
+
+ for(i = 0; i <= 24; i++){
+ count = 0;
+ if(mover[i] == 0)
+ continue;
+ if((k=25-i-die1) > 0 && movee[k] >= 2) {
+ if(mover[0] > 0)
+ break;
+ } else
+ continue;
+ if(k <= 0){
+ if(piececount(mover, 0, 18) != 0)
+ break;
+ if((i+die1) != 25 && piececount(mover,19,i-1) != 0)
+ break;
+ }
+ mover[i]--;
+ mover[i+die1]++;
+ count = 1;
+ for(j = 0; j <= 24; j++){
+ if(mover[j]==0)
+ continue;
+ if((k=25-j-die2) > 0 && movee[k] >= 2) {
+ if(mover[0] > 0)
+ break;
+ } else
+ continue;
+ if(k <= 0){
+ if(piececount(mover,0,18) != 0)
+ break;
+ if((j+die2) != 25 && piececount(mover,19,j-1) != 0)
+ break;
+ }
+ mover[j]--;
+ mover[j+die2]++;
+ count = 2;
+ if(die1 != die2){
+ moverecord(mover);
+ if(mover[0] > 0)
+ break;
+ else
+ continue;
+ }
+ for(l = 0; l <= 24; l++){
+ if(mover[l] == 0)
+ continue;
+ if((k=25-l-die1) > 0 && movee[k] >= 2) {
+ if(mover[0] > 0)
+ break;
+ } else
+ continue;
+ if(k <= 0){
+ if(piececount(mover, 0, 18) != 0)
+ break;
+ if((l+die2) != 25 && piececount(mover,19,l-1) != 0)
+ break;
+ }
+ mover[l]--;
+ mover[l+die1]++;
+ count=3;
+ for(m=0;m<=24;m++){
+ if(mover[m]==0)
+ continue;
+ if((k=25-m-die1) >= 0 && movee[k] >= 2) {
+ if(mover[0] > 0)
+ break;
+ } else
+ continue;
+ if(k <= 0){
+ if(piececount(mover,0,18) != 0)
+ break;
+ if((m+die2) != 25 && piececount(mover,19,m-1) != 0)
+ break;
+ }
+ count=4;
+ moverecord(mover);
+ if(mover[0] > 0)
+ break;
+ }
+ if(count == 3)
+ moverecord(mover);
+ else{
+ mover[l]++;
+ mover[l+die1]--;
+ }
+ if(mover[0] > 0)
+ break;
+ }
+ if(count == 2)
+ moverecord(mover);
+ else{
+ mover[j]++;
+ mover[j+die1]--;
+ }
+ if(mover[0] > 0)
+ break;
+ }
+ if(count == 1)
+ moverecord(mover);
+ else{
+ mover[i]++;
+ mover[i+die1]--;
+ }
+ if(mover[0] > 0)
+ break;
+ }
+}
+
+int getprob(player,playee,start,finish)
+int *player,*playee,start,finish;
+{ /*returns the probability (times 102) that any
+ pieces belonging to 'player' and lying between
+ his points 'start' and 'finish' will be hit
+ by a piece belonging to playee
+ */
+ int k, n, sum;
+
+ sum = 0;
+ for(; start <= finish; start++){
+ if(player[start] == 1){
+ for(k = 1; k <= 12; k++){
+ if((n=25-start-k) < 0)
+ break;
+ if(playee[n] != 0)
+ sum += probability[k];
+ }
+ }
+ }
+ return(sum);
+}
+
+int eval(player,playee,k,prob)
+int *player,*playee,k,*prob;
+{
+ int newtry[31], newother[31], *r, *q, *p, n, sum, first;
+ int ii, lastwhite, lastbrown;
+
+ *prob = sum = 0;
+ r = player+25;
+ p = newtry;
+ q = newother;
+ while(player6) {
+ for(sum = 1000; lastwhite > 6; lastwhite--)
+ sum = sum-lastwhite*newtry[25-lastwhite];
+ }
+ for(first = 0; first < 25; first++)
+ if(newother[first] != 0) /*find other's first piece*/
+ break;
+ q = newtry+25;
+ for(p = newtry+1; p < q;) /* blocked points are good */
+ if(*p++ > 1)
+ sum++;
+ if(first > 5) { /* only stress removing pieces if */
+ /* homeboard cannot be hit */
+ q = newtry+31;
+ p=newtry+25;
+ for(n = 6; p < q; n--)
+ sum += *p++ * n; /*remove pieces, but just barely*/
+ }
+ if(level != 'b'){
+ r = newtry+25-first; /*singles past this point can't be hit*/
+ for(p = newtry+7; p < r; )
+ if(*p++ == 1) /*singles are bad after 1st 6 points if they can be hit*/
+ sum--;
+ q = newtry+3;
+ for(p = newtry; p < q; ) /*bad to be on 1st three points*/
+ sum -= *p++;
+ }
+
+ for(n = 1; n <= 4; n++)
+ *prob += n*getprob(newtry,newother,6*n-5,6*n);
+ return(sum);
+}
+
+int strategy(player,playee)
+int *player,*playee;
+{
+ int k, n, nn, bestval, moveval, prob;
+
+ n = 0;
+ if(imoves == 0)
+ return(NIL);
+ goodmoves[0] = NIL;
+ bestval = -32000;
+ for(k = 0; k < imoves; k++){
+ if((moveval=eval(player,playee,k,&prob)) < bestval)
+ continue;
+ if(moveval > bestval){
+ bestval = moveval;
+ n = 0;
+ }
+ if(n1){
+ nn=n;
+ n=0;
+ prob=32000;
+ for(k = 0; k < nn; k++){
+ if((moveval=probmoves[k]) > prob)
+ continue;
+ if(moveval>4)%n]);
+}
+
+void prtmov(k)
+int k;
+{
+ int n;
+
+ if(k == NIL)
+ fprintf(stdout, "No move possible\n");
+ else for(n = 0; n < 4; n++){
+ if(moves[k].pos[n] == NIL)
+ break;
+ fprintf(stdout, " %d, %d",25-moves[k].pos[n],moves[k].mov[n]);
+ }
+ fprintf(stdout, "\n");
+}
+
+void update(player,playee,k)
+int *player,*playee,k;
+{
+ int n,t;
+
+ for(n = 0; n < 4; n++){
+ if(moves[k].pos[n] == NIL)
+ break;
+ player[moves[k].pos[n]]--;
+ player[moves[k].pos[n]+moves[k].mov[n]]++;
+ t=25-moves[k].pos[n]-moves[k].mov[n];
+ if(t>0 && playee[t]==1){
+ playee[0]++;
+ playee[t]--;
+ }
+ }
+}
+
+int nextmove(player,playee)
+int *player,*playee;
+{
+ int k;
+
+ imoves=0;
+ movegen(player,playee);
+ if(die1!=die2){
+ k=die1;
+ die1=die2;
+ die2=k;
+ movegen(player,playee);
+ }
+ if(imoves==0){
+ fprintf(stdout, "no move possible.\n");
+ return(NIL);
+ }
+ k = strategy(player, playee); /*select kth possible move*/
+ prtmov(k);
+ update(player,playee,k);
+ return(0);
+}
+
+void pmoves()
+{
+ int i1, i2;
+
+ fprintf(stdout, "Possible moves are:\n");
+ for(i1 = 0; i1 < imoves; i1++){
+ fprintf(stdout, "\n%d",i1);
+ for (i2 = 0; i2<4; i2++){
+ if(moves[i1].pos[i2] == NIL)
+ break;
+ fprintf(stdout, "%d, %d",moves[i1].pos[i2],moves[i1].mov[i2]);
+ }
+ }
+ fprintf(stdout, "\n");
+}
+
+void roll(who)
+{
+ register int n;
+ char s[10];
+
+ if(who == BROWN && nobroll) {
+ fprintf(stdout, "Roll? ");
+ gets(s);
+ n = sscanf(s, "%d%d", &die1, &die2);
+ if(n != 2 || die1 < 1 || die1 > 6 || die2 < 1 || die2 > 6)
+ fprintf(stdout, "Illegal - I'll do it!\n");
+ else
+ return;
+ }
+ die1 = ((rand()>>8) % 6) + 1;
+ die2 = ((rand()>>8) % 6) + 1;
+}
+
+void instructions()
+{
+ register int fd, r;
+ char buf[BUFSIZ];
+
+ if((fd = open(RULES, 0)) < 0) {
+ fprintf(stderr, "back: cannot open %s\n", RULES);
+ return;
+ }
+ while((r = read(fd, buf, BUFSIZ)) > 0)
+ write(1, buf, r);
+}
+
+void numline(upcol,downcol,start,fin)
+int *upcol,*downcol,start,fin;
+{
+ int k, n;
+
+ for(k = start; k <= fin; k++){
+ if((n = upcol[k]) != 0 || (n = downcol[25-k]) != 0)
+ fprintf(stdout, "%4d", n);
+ else
+ fprintf(stdout, " ");
+ }
+}
+
+void colorline(upcol,c1,downcol,c2,start,fin)
+int *upcol,*downcol,start,fin;
+char c1,c2;
+{
+ int k;
+ char c;
+
+ for(k = start; k <= fin; k++){
+ c = ' ';
+ if(upcol[k] != 0)
+ c = c1;
+ if(downcol[25-k] != 0)
+ c = c2;
+ fprintf(stdout, " %c",c);
+ }
+}
+
+void prtbrd()
+{
+ int k;
+ static char undersc[]="______________________________________________________";
+
+ fprintf(stdout, "White's Home\n");
+ for(k = 1; k <= 6; k++)
+ fprintf(stdout, "%4d",k);
+ fprintf(stdout, " ");
+ for(k = 7; k <= 12; k++)
+ fprintf(stdout, "%4d",k);
+ fprintf(stdout, "\n%s\n",undersc);
+ numline(brown, white, 1, 6);
+ fprintf(stdout, " ");
+ numline(brown, white, 7, 12);
+ putchar('\n');
+ colorline(brown, 'B', white, 'W', 1, 6);
+ fprintf(stdout, " ");
+ colorline(brown, 'B', white, 'W', 7, 12);
+ putchar('\n');
+ if(white[0] != 0)
+ fprintf(stdout, "%28dW\n",white[0]);
+ else
+ putchar('\n');
+ if(brown[0] != 0)
+ fprintf(stdout, "%28dB\n", brown[0]);
+ else
+ putchar('\n');
+ colorline(white, 'W', brown, 'B', 1, 6);
+ fprintf(stdout, " ");
+ colorline(white, 'W', brown, 'B', 7, 12);
+ fprintf(stdout, "\n");
+ numline(white, brown, 1, 6);
+ fprintf(stdout, " ");
+ numline(white, brown, 7, 12);
+ fprintf(stdout, "\n%s\n",undersc);
+ for(k = 24; k >= 19; k--)
+ fprintf(stdout, "%4d",k);
+ fprintf(stdout, " ");
+ for(k = 18; k >= 13; k--)
+ fprintf(stdout, "%4d",k);
+ fprintf(stdout, "\nBrown's Home\n\n\n\n\n");
+}
+
+int main()
+{
+ int go[6], tvec[2];
int k, n, pid, ret, rpid, t;
char s[100];
@@ -193,525 +725,3 @@ retry:
}
goto whitesmv;
}
-
-play(player,playee,pos)
-int *player,*playee,pos[];
-{
- int k, n, die, ipos;
-
- for(k=0; k < player[0]; k++){ /*blots on player[0] must be moved first*/
- if(pos[k] == NIL)
- break;
- if(pos[k] != 0){
- fprintf(stdout, "Stone on bar must be moved first.\n");
- return(NIL);
- }
- }
- for(k = 0; (ipos=pos[k]) != NIL; k++){
- die = k?die2:die1;
- n = 25-ipos-die;
- if(player[ipos] == 0)
- goto badmove;
- if(n > 0 && playee[n] >= 2)
- goto badmove;
- if(n <= 0){
- if(piececount(player,0,18) != 0)
- goto badmove;
- if((ipos+die) != 25 && piececount(player,19,24-die)!=0)
- goto badmove;
- }
- player[ipos]--;
- player[ipos+die]++;
- }
- for(k = 0; pos[k] != NIL; k++){
- die = k?die2:die1;
- n = 25-pos[k]-die;
- if(n>0 && playee[n]==1){
- playee[n]=0;
- playee[0]++;
- }
- }
- return(0);
-
-badmove:
- fprintf(stdout, "Move %d illegal.\n", ipos);
- while(k--){
- die=k?die2:die1;
- player[pos[k]]++;
- player[pos[k]+die]--;
- }
- return(NIL);
-}
-nextmove(player,playee)
-int *player,*playee;
-{
- int k;
-
- imoves=0;
- movegen(player,playee);
- if(die1!=die2){
- k=die1;
- die1=die2;
- die2=k;
- movegen(player,playee);
- }
- if(imoves==0){
- fprintf(stdout, "no move possible.\n");
- return(NIL);
- }
- k=strategy(player,playee); /*select kth possible move*/
- prtmov(k);
- update(player,playee,k);
- return(0);
-}
-prtmov(k)
-int k;
-{
- int n;
-
- if(k == NIL)
- fprintf(stdout, "No move possible\n");
- else for(n = 0; n < 4; n++){
- if(moves[k].pos[n] == NIL)
- break;
- fprintf(stdout, " %d, %d",25-moves[k].pos[n],moves[k].mov[n]);
- }
- fprintf(stdout, "\n");
-}
-update(player,playee,k)
-int *player,*playee,k;
-{
- int n,t;
-
- for(n = 0; n < 4; n++){
- if(moves[k].pos[n] == NIL)
- break;
- player[moves[k].pos[n]]--;
- player[moves[k].pos[n]+moves[k].mov[n]]++;
- t=25-moves[k].pos[n]-moves[k].mov[n];
- if(t>0 && playee[t]==1){
- playee[0]++;
- playee[t]--;
- }
- }
-}
-piececount(player,startrow,endrow)
-int *player,startrow,endrow;
-{
- int sum;
-
- sum=0;
- while(startrow <= endrow)
- sum += player[startrow++];
- return(sum);
-}
-pmoves()
-{
- int i1, i2;
-
- fprintf(stdout, "Possible moves are:\n");
- for(i1 = 0; i1 < imoves; i1++){
- fprintf(stdout, "\n%d",i1);
- for (i2 = 0; i2<4; i2++){
- if(moves[i1].pos[i2] == NIL)
- break;
- fprintf(stdout, "%d, %d",moves[i1].pos[i2],moves[i1].mov[i2]);
- }
- }
- fprintf(stdout, "\n");
-}
-
-roll(who)
-{
- register n;
- char s[10];
-
- if(who == BROWN && nobroll) {
- fprintf(stdout, "Roll? ");
- gets(s);
- n = sscanf(s, "%d%d", &die1, &die2);
- if(n != 2 || die1 < 1 || die1 > 6 || die2 < 1 || die2 > 6)
- fprintf(stdout, "Illegal - I'll do it!\n");
- else
- return;
- }
- die1 = ((rand()>>8) % 6) + 1;
- die2 = ((rand()>>8) % 6) + 1;
-}
-
-movegen(mover,movee)
-int *mover,*movee;
-{
- int k;
-
- for(i = 0; i <= 24; i++){
- count = 0;
- if(mover[i] == 0)
- continue;
- if((k=25-i-die1) > 0 && movee[k] >= 2)
- if(mover[0] > 0)
- break;
- else
- continue;
- if(k <= 0){
- if(piececount(mover, 0, 18) != 0)
- break;
- if((i+die1) != 25 && piececount(mover,19,i-1) != 0)
- break;
- }
- mover[i]--;
- mover[i+die1]++;
- count = 1;
- for(j = 0; j <= 24; j++){
- if(mover[j]==0)
- continue;
- if((k=25-j-die2) > 0 && movee[k] >= 2)
- if(mover[0] > 0)
- break;
- else
- continue;
- if(k <= 0){
- if(piececount(mover,0,18) != 0)
- break;
- if((j+die2) != 25 && piececount(mover,19,j-1) != 0)
- break;
- }
- mover[j]--;
- mover[j+die2]++;
- count = 2;
- if(die1 != die2){
- moverecord(mover);
- if(mover[0] > 0)
- break;
- else
- continue;
- }
- for(l = 0; l <= 24; l++){
- if(mover[l] == 0)
- continue;
- if((k=25-l-die1) > 0 && movee[k] >= 2)
- if(mover[0] > 0)
- break;
- else
- continue;
- if(k <= 0){
- if(piececount(mover, 0, 18) != 0)
- break;
- if((l+die2) != 25 && piececount(mover,19,l-1) != 0)
- break;
- }
- mover[l]--;
- mover[l+die1]++;
- count=3;
- for(m=0;m<=24;m++){
- if(mover[m]==0)
- continue;
- if((k=25-m-die1) >= 0 && movee[k] >= 2)
- if(mover[0] > 0)
- break;
- else
- continue;
- if(k <= 0){
- if(piececount(mover,0,18) != 0)
- break;
- if((m+die2) != 25 && piececount(mover,19,m-1) != 0)
- break;
- }
- count=4;
- moverecord(mover);
- if(mover[0] > 0)
- break;
- }
- if(count == 3)
- moverecord(mover);
- else{
- mover[l]++;
- mover[l+die1]--;
- }
- if(mover[0] > 0)
- break;
- }
- if(count == 2)
- moverecord(mover);
- else{
- mover[j]++;
- mover[j+die1]--;
- }
- if(mover[0] > 0)
- break;
- }
- if(count == 1)
- moverecord(mover);
- else{
- mover[i]++;
- mover[i+die1]--;
- }
- if(mover[0] > 0)
- break;
- }
-}
-moverecord(mover)
-int *mover;
-{
- int t;
-
- if(imoves < MAXIMOVES) {
- for(t = 0; t <= 3; t++)
- moves[imoves].pos[t] = NIL;
- switch(count) {
- case 4:
- moves[imoves].pos[3]=m;
- moves[imoves].mov[3]=die1;
-
- case 3:
- moves[imoves].pos[2]=l;
- moves[imoves].mov[2]=die1;
-
- case 2:
- moves[imoves].pos[1]=j;
- moves[imoves].mov[1]=die2;
-
- case 1:
- moves[imoves].pos[0]=i;
- moves[imoves].mov[0]=die1;
- imoves++;
- }
- }
- switch(count) {
- case 4:
- break;
-
- case 3:
- mover[l]++;
- mover[l+die1]--;
- break;
-
- case 2:
- mover[j]++;
- mover[j+die2]--;
- break;
-
- case 1:
- mover[i]++;
- mover[i+die1]--;
- }
-}
-
-strategy(player,playee)
-int *player,*playee;
-{
- int k, n, nn, bestval, moveval, prob;
-
- n = 0;
- if(imoves == 0)
- return(NIL);
- goodmoves[0] = NIL;
- bestval = -32000;
- for(k = 0; k < imoves; k++){
- if((moveval=eval(player,playee,k,&prob)) < bestval)
- continue;
- if(moveval > bestval){
- bestval = moveval;
- n = 0;
- }
- if(n1){
- nn=n;
- n=0;
- prob=32000;
- for(k = 0; k < nn; k++){
- if((moveval=probmoves[k]) > prob)
- continue;
- if(moveval>4)%n]);
-}
-
-eval(player,playee,k,prob)
-int *player,*playee,k,*prob;
-{
- int newtry[31], newother[31], *r, *q, *p, n, sum, first;
- int ii, lastwhite, lastbrown;
-
- *prob = sum = 0;
- r = player+25;
- p = newtry;
- q = newother;
- while(player6) {
- for(sum = 1000; lastwhite > 6; lastwhite--)
- sum = sum-lastwhite*newtry[25-lastwhite];
- }
- for(first = 0; first < 25; first++)
- if(newother[first] != 0) /*find other's first piece*/
- break;
- q = newtry+25;
- for(p = newtry+1; p < q;) /* blocked points are good */
- if(*p++ > 1)
- sum++;
- if(first > 5) { /* only stress removing pieces if */
- /* homeboard cannot be hit */
- q = newtry+31;
- p=newtry+25;
- for(n = 6; p < q; n--)
- sum += *p++ * n; /*remove pieces, but just barely*/
- }
- if(level != 'b'){
- r = newtry+25-first; /*singles past this point can't be hit*/
- for(p = newtry+7; p < r; )
- if(*p++ == 1) /*singles are bad after 1st 6 points if they can be hit*/
- sum--;
- q = newtry+3;
- for(p = newtry; p < q; ) /*bad to be on 1st three points*/
- sum -= *p++;
- }
-
- for(n = 1; n <= 4; n++)
- *prob += n*getprob(newtry,newother,6*n-5,6*n);
- return(sum);
-}
-instructions()
-{
- register fd, r;
- char buf[BUFSIZ];
-
- if((fd = open(RULES, 0)) < 0) {
- fprintf(stderr, "back: cannot open %s\n", RULES);
- return;
- }
- while(r = read(fd, buf, BUFSIZ))
- write(1, buf, r);
-}
-
-getprob(player,playee,start,finish)
-int *player,*playee,start,finish;
-{ /*returns the probability (times 102) that any
- pieces belonging to 'player' and lying between
- his points 'start' and 'finish' will be hit
- by a piece belonging to playee
- */
- int k, n, sum;
-
- sum = 0;
- for(; start <= finish; start++){
- if(player[start] == 1){
- for(k = 1; k <= 12; k++){
- if((n=25-start-k) < 0)
- break;
- if(playee[n] != 0)
- sum += probability[k];
- }
- }
- }
- return(sum);
-}
-prtbrd()
-{
- int k;
- static char undersc[]="______________________________________________________";
-
- fprintf(stdout, "White's Home\n%s\r",undersc);
- for(k = 1; k <= 6; k++)
- fprintf(stdout, "%4d",k);
- fprintf(stdout, " ");
- for(k = 7; k <= 12; k++)
- fprintf(stdout, "%4d",k);
- putchar('\n');
- numline(brown, white, 1, 6);
- fprintf(stdout, " ");
- numline(brown, white, 7, 12);
- putchar('\n');
- colorline(brown, 'B', white, 'W', 1, 6);
- fprintf(stdout, " ");
- colorline(brown, 'B', white, 'W', 7, 12);
- putchar('\n');
- if(white[0] != 0)
- fprintf(stdout, "%28dW\n",white[0]);
- else
- putchar('\n');
- if(brown[0] != 0)
- fprintf(stdout, "%28dB\n", brown[0]);
- else
- putchar('\n');
- colorline(white, 'W', brown, 'B', 1, 6);
- fprintf(stdout, " ");
- colorline(white, 'W', brown, 'B', 7, 12);
- fprintf(stdout, "\n%s\r",undersc);
- numline(white, brown, 1, 6);
- fprintf(stdout, " ");
- numline(white, brown, 7, 12);
- putchar('\n');
- for(k = 24; k >= 19; k--)
- fprintf(stdout, "%4d",k);
- fprintf(stdout, " ");
- for(k = 18; k >= 13; k--)
- fprintf(stdout, "%4d",k);
- fprintf(stdout, "\nBrown's Home\n\n\n\n\n");
-}
-numline(upcol,downcol,start,fin)
-int *upcol,*downcol,start,fin;
-{
- int k, n;
-
- for(k = start; k <= fin; k++){
- if((n = upcol[k]) != 0 || (n = downcol[25-k]) != 0)
- fprintf(stdout, "%4d", n);
- else
- fprintf(stdout, " ");
- }
-}
-colorline(upcol,c1,downcol,c2,start,fin)
-int *upcol,*downcol,start,fin;
-char c1,c2;
-{
- int k;
- char c;
-
- for(k = start; k <= fin; k++){
- c = ' ';
- if(upcol[k] != 0)
- c = c1;
- if(downcol[25-k] != 0)
- c = c2;
- fprintf(stdout, " %c",c);
- }
-}
diff --git a/src/games/cribbage/.gitignore b/src/games/cribbage/.gitignore
new file mode 100644
index 0000000..4e4ed63
--- /dev/null
+++ b/src/games/cribbage/.gitignore
@@ -0,0 +1 @@
+cribbage
diff --git a/src/games/cribbage/Makefile b/src/games/cribbage/Makefile
index d0d3525..c12729b 100644
--- a/src/games/cribbage/Makefile
+++ b/src/games/cribbage/Makefile
@@ -7,45 +7,36 @@
#
# make file for cribbage
#
-HDRS= cribbage.h deck.h cribcur.h
-OBJS= extern.o crib.o support.o cards.o score.o io.o
-CFILES= extern.c crib.c support.c cards.c score.c io.c
-TOBJS= test.o cards.o score.o io.o extern.o
-MAN= crib.0
-SEPFLAG= -i
-CFLAGS= -O
-DESTDIR=
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
+#CFLAGS = -O -Werror -DCROSS
-all: cribbage ${MAN}
+OBJS = extern.o crib.o support.o cards.o score.o io.o
+TOBJS = test.o cards.o score.o io.o extern.o
+MAN = cribbage.0
+MANSRC = cribbage.6
+LIBS = -lcurses -ltermcap -lc
-cribbage: ${OBJS}
- ${CC} ${SEPFLAG} ${CFLAGS} -o cribbage ${OBJS} -lcurses -ltermlib
+all: cribbage ${MAN} crib.0
-all: cribbage ${MAN}
+cribbage: ${OBJS}
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
-crib.o io.o support.o: cribcur.h
+crib.0: cribbage.n macro
+ nroff cribbage.n > $@
-test: ${TOBJS}
- ${CC} ${SEPFLAG} ${CFLAGS} -o test ${TOBJS} -lcurses -ltermlib
-
-crib.0: cribbage.n macro
- nroff cribbage.n > crib.0
-
-tags: ${HDRS} ${CFILES}
- ctags -u $?
- ed - tags < :ctfix
- sort tags -o tags
+${MAN}: ${MANSRC}
+ ${MANROFF} $< > $@
clean:
- rm -f ${OBJS} ? a.out core crib.0 cribbage errs
+ rm -f *.o core cribbage ${MAN} *.dis
-crib.o: deck.h cribbage.h cribcur.h
-support.o: deck.h cribbage.h cribcur.h
-test.o: deck.h
-cards.o: deck.h
-score.o: deck.h
-io.o: deck.h cribcur.h
-
-install: cribbage crib.0
- install -s cribbage $(DESTDIR)/usr/games
- install -m 644 crib.0 $(DESTDIR)/usr/games/lib/crib.instr
+install: all
+ install cribbage $(DESTDIR)/games/
+ install -m 644 crib.0 $(DESTDIR)/games/lib/crib.instr
+ cp ${MAN} $(DESTDIR)/share/man/cat6/
+ cp crib.0 $(DESTDIR)/share/man/cat6/
diff --git a/src/games/cribbage/cards.c b/src/games/cribbage/cards.c
index e7805b3..a3e9a39 100644
--- a/src/games/cribbage/cards.c
+++ b/src/games/cribbage/cards.c
@@ -3,21 +3,14 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)cards.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
#include
+#include
#include "deck.h"
-
/*
* initialize a deck of cards to contain one of each type
*/
-
-makedeck( d )
-
+void makedeck( d )
CARD d[];
{
register int i, j, k;
@@ -35,15 +28,11 @@ makedeck( d )
}
}
-
-
/*
* given a deck of cards, shuffle it -- i.e. randomize it
* see Knuth, vol. 2, page 125
*/
-
-shuffle( d )
-
+void shuffle( d )
CARD d[];
{
register int j, k;
@@ -57,27 +46,19 @@ shuffle( d )
}
}
-
-
/*
* return true if the two cards are equal...
*/
-
-eq( a, b )
-
+int eq( a, b )
CARD a, b;
{
return( ( a.rank == b.rank ) && ( a.suit == b.suit ) );
}
-
-
/*
* isone returns TRUE if a is in the set of cards b
*/
-
-isone( a, b, n )
-
+BOOLEAN isone( a, b, n )
CARD a, b[];
int n;
{
@@ -89,16 +70,12 @@ isone( a, b, n )
return( FALSE );
}
-
-
/*
* remove the card a from the deck d of n cards
*/
-
-remove( a, d, n )
-
- CARD a, d[];
- int n;
+void cremove( a, d, n )
+ CARD a, d[];
+ int n;
{
register int i, j;
@@ -109,15 +86,13 @@ remove( a, d, n )
if( j < n ) d[j].suit = d[j].rank = EMPTY;
}
-
-
/*
* sorthand:
* Sort a hand of n cards
*/
-sorthand(h, n)
-register CARD h[];
-int n;
+void sorthand(h, n)
+ register CARD h[];
+ int n;
{
register CARD *cp, *endp;
CARD c;
@@ -131,4 +106,3 @@ int n;
*cp = c;
}
}
-
diff --git a/src/games/cribbage/crib.c b/src/games/cribbage/crib.c
index e853239..87ad237 100644
--- a/src/games/cribbage/crib.c
+++ b/src/games/cribbage/crib.c
@@ -3,120 +3,36 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
-#endif not lint
-
-#ifndef lint
-static char sccsid[] = "@(#)crib.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include
+# include
# include
# include "deck.h"
# include "cribbage.h"
# include "cribcur.h"
+# define LOGFILE "/games/lib/criblog"
+# define INSTRCMD "more /games/lib/crib.instr"
-# define LOGFILE "/usr/games/lib/criblog"
-# define INSTRCMD "more /usr/games/lib/crib.instr"
-
-
-main(argc, argv)
-int argc;
-char *argv[];
+/*
+ * gamescore:
+ * Print out the current game score
+ */
+void gamescore()
{
- register char *p;
- BOOLEAN playing;
- char *s; /* for reading arguments */
- char bust; /* flag for arg reader */
- FILE *f;
- FILE *fopen();
- char *getline();
- int bye();
+ extern int Lastscore[];
- while (--argc > 0) {
- if ((*++argv)[0] != '-') {
- fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n");
- exit(1);
- }
- bust = FALSE;
- for (s = argv[0] + 1; *s != NULL; s++) {
- switch (*s) {
- case 'e':
- explain = TRUE;
- break;
- case 'q':
- quiet = TRUE;
- break;
- case 'r':
- rflag = TRUE;
- break;
- default:
- fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n");
- exit(2);
- break;
- }
- if (bust)
- break;
- }
- }
-
- initscr();
- signal(SIGINT, bye);
- crmode();
- noecho();
- Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0);
- Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X);
- Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X);
- Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1);
- leaveok(Playwin, TRUE);
- leaveok(Tablewin, TRUE);
- leaveok(Compwin, TRUE);
- clearok(stdscr, FALSE);
-
- if (!quiet) {
- msg("Do you need instructions for cribbage? ");
- if (getuchar() == 'Y') {
- endwin();
- fflush(stdout);
- system(INSTRCMD);
- crmode();
- noecho();
- clear();
- refresh();
- msg("For the rules of this program, do \"man cribbage\"");
- }
- }
- playing = TRUE;
- do {
- wclrtobot(Msgwin);
- msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? ");
- if (glimit == SGAME)
- glimit = (getuchar() == 'L' ? LGAME : SGAME);
- else
- glimit = (getuchar() == 'S' ? SGAME : LGAME);
- game();
- msg("Another game? ");
- playing = (getuchar() == 'Y');
- } while (playing);
-
- if ((f = fopen(LOGFILE, "a")) != NULL) {
- fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames);
- fclose(f);
- }
-
- bye();
+ if (pgames || cgames) {
+ mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames);
+ mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames);
+ }
+ Lastscore[0] = -1;
+ Lastscore[1] = -1;
}
/*
* makeboard:
* Print out the initial board on the screen
*/
-makeboard()
+void makeboard()
{
mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+");
mvaddstr(SCORE_Y + 1, SCORE_X, "| Score: 0 YOU |");
@@ -131,19 +47,345 @@ makeboard()
}
/*
- * gamescore:
- * Print out the current game score
+ * deal cards to both players from deck
*/
-gamescore()
+int deal( mycrib )
{
- extern int Lastscore[];
+ register int i, j;
- if (pgames || cgames) {
- mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames);
- mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames);
- }
- Lastscore[0] = -1;
- Lastscore[1] = -1;
+ j = 0;
+ for( i = 0; i < FULLHAND; i++ ) {
+ if( mycrib ) {
+ phand[i] = deck[j++];
+ chand[i] = deck[j++];
+ }
+ else {
+ chand[i] = deck[j++];
+ phand[i] = deck[j++];
+ }
+ }
+ return( j );
+}
+
+/*
+ * prcrib:
+ * Print out the turnover card with crib indicator
+ */
+void prcrib(mycrib, blank)
+BOOLEAN mycrib, blank;
+{
+ register int y, cardx;
+
+ if (mycrib)
+ cardx = CRIB_X;
+ else
+ cardx = 0;
+
+ mvaddstr(CRIB_Y, cardx + 1, "CRIB");
+ prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank);
+
+ if (mycrib)
+ cardx = 0;
+ else
+ cardx = CRIB_X;
+
+ for (y = CRIB_Y; y <= CRIB_Y + 5; y++)
+ mvaddstr(y, cardx, " ");
+}
+
+/*
+ * discard:
+ * Handle players discarding into the crib...
+ * Note: we call cdiscard() after prining first message so player doesn't wait
+ */
+void discard(mycrib)
+BOOLEAN mycrib;
+{
+ register char *prompt;
+ CARD crd;
+
+ prcrib(mycrib, TRUE);
+ prompt = (quiet ? "Discard --> " : "Discard a card --> ");
+ cdiscard(mycrib); /* puts best discard at end */
+ crd = phand[infrom(phand, FULLHAND, prompt)];
+ cremove(crd, phand, FULLHAND);
+ prhand(phand, FULLHAND, Playwin, FALSE);
+ crib[0] = crd;
+/* next four lines same as last four except for cdiscard() */
+ crd = phand[infrom(phand, FULLHAND - 1, prompt)];
+ cremove(crd, phand, FULLHAND - 1);
+ prhand(phand, FULLHAND, Playwin, FALSE);
+ crib[1] = crd;
+ crib[2] = chand[4];
+ crib[3] = chand[5];
+ chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY;
+}
+
+/*
+ * cut:
+ * Cut the deck and set turnover. Actually, we only ASK the
+ * player what card to turn. We do a random one, anyway.
+ */
+BOOLEAN cut(mycrib, pos)
+BOOLEAN mycrib;
+int pos;
+{
+ register int i, cardx;
+ BOOLEAN win = FALSE;
+
+ if (mycrib) {
+ if (!rflag) { /* random cut */
+ msg(quiet ? "Cut the deck? " :
+ "How many cards down do you wish to cut the deck? ");
+ getlin();
+ }
+ i = (rand() >> 4) % (CARDS - pos);
+ turnover = deck[i + pos];
+ addmsg(quiet ? "You cut " : "You cut the ");
+ msgcard(turnover, FALSE);
+ endmsg();
+ if (turnover.rank == JACK) {
+ msg("I get two for his heels");
+ win = chkscr(&cscore,2 );
+ }
+ }
+ else {
+ i = (rand() >> 4) % (CARDS - pos) + pos;
+ turnover = deck[i];
+ addmsg(quiet ? "I cut " : "I cut the ");
+ msgcard(turnover, FALSE);
+ endmsg();
+ if (turnover.rank == JACK) {
+ msg("You get two for his heels");
+ win = chkscr(&pscore, 2);
+ }
+ }
+ makeknown(&turnover, 1);
+ prcrib(mycrib, FALSE);
+ return win;
+}
+
+static CARD Table[14];
+
+static int Tcnt;
+
+/*
+ * prtable:
+ * Print out the table with the current score
+ */
+void prtable(score)
+int score;
+{
+ prhand(Table, Tcnt, Tablewin, FALSE);
+ mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score);
+ wrefresh(Tablewin);
+}
+
+/*
+ * peg:
+ * Handle all the pegging...
+ */
+BOOLEAN peg(mycrib)
+BOOLEAN mycrib;
+{
+ static CARD ch[CINHAND], ph[CINHAND];
+ CARD crd;
+ register int i, j, k;
+ register int l;
+ register int cnum, pnum, sum;
+ register BOOLEAN myturn, mego, ugo, last, played;
+
+ cnum = pnum = CINHAND;
+ for (i = 0; i < CINHAND; i++) { /* make copies of hands */
+ ch[i] = chand[i];
+ ph[i] = phand[i];
+ }
+ Tcnt = 0; /* index to table of cards played */
+ sum = 0; /* sum of cards played */
+ mego = ugo = FALSE;
+ myturn = !mycrib;
+ for (;;) {
+ last = TRUE; /* enable last flag */
+ prhand(ph, pnum, Playwin, FALSE);
+ prhand(ch, cnum, Compwin, TRUE);
+ prtable(sum);
+ if (myturn) { /* my tyrn to play */
+ if (!anymove(ch, cnum, sum)) { /* if no card to play */
+ if (!mego && cnum) { /* go for comp? */
+ msg("GO");
+ mego = TRUE;
+ }
+ if (anymove(ph, pnum, sum)) /* can player move? */
+ myturn = !myturn;
+ else { /* give him his point */
+ msg(quiet ? "You get one" : "You get one point");
+ if (chkscr(&pscore, 1))
+ return TRUE;
+ sum = 0;
+ mego = ugo = FALSE;
+ Tcnt = 0;
+ }
+ }
+ else {
+ played = TRUE;
+ j = -1;
+ k = 0;
+ for (i = 0; i < cnum; i++) { /* maximize score */
+ l = pegscore(ch[i], Table, Tcnt, sum);
+ if (l > k) {
+ k = l;
+ j = i;
+ }
+ }
+ if (j < 0) /* if nothing scores */
+ j = cchose(ch, cnum, sum);
+ crd = ch[j];
+ cremove(crd, ch, cnum--);
+ sum += VAL(crd.rank);
+ Table[Tcnt++] = crd;
+ if (k > 0) {
+ addmsg(quiet ? "I get %d playing " :
+ "I get %d points playing ", k);
+ msgcard(crd, FALSE);
+ endmsg();
+ if (chkscr(&cscore, k))
+ return TRUE;
+ }
+ myturn = !myturn;
+ }
+ }
+ else {
+ if (!anymove(ph, pnum, sum)) { /* can player move? */
+ if (!ugo && pnum) { /* go for player */
+ msg("You have a GO");
+ ugo = TRUE;
+ }
+ if (anymove(ch, cnum, sum)) /* can computer play? */
+ myturn = !myturn;
+ else {
+ msg(quiet ? "I get one" : "I get one point");
+ do_wait();
+ if (chkscr(&cscore, 1))
+ return TRUE;
+ sum = 0;
+ mego = ugo = FALSE;
+ Tcnt = 0;
+ }
+ }
+ else { /* player plays */
+ played = FALSE;
+ if (pnum == 1) {
+ crd = ph[0];
+ msg("You play your last card");
+ }
+ else
+ for (;;) {
+ prhand(ph, pnum, Playwin, FALSE);
+ crd = ph[infrom(ph, pnum, "Your play: ")];
+ if (sum + VAL(crd.rank) <= 31)
+ break;
+ else
+ msg("Total > 31 -- try again");
+ }
+ makeknown(&crd, 1);
+ cremove(crd, ph, pnum--);
+ i = pegscore(crd, Table, Tcnt, sum);
+ sum += VAL(crd.rank);
+ Table[Tcnt++] = crd;
+ if (i > 0) {
+ msg(quiet ? "You got %d" : "You got %d points", i);
+ if (chkscr(&pscore, i))
+ return TRUE;
+ }
+ myturn = !myturn;
+ }
+ }
+ if (sum >= 31) {
+ if (!myturn)
+ do_wait();
+ sum = 0;
+ mego = ugo = FALSE;
+ Tcnt = 0;
+ last = FALSE; /* disable last flag */
+ }
+ if (!pnum && !cnum)
+ break; /* both done */
+ }
+ prhand(ph, pnum, Playwin, FALSE);
+ prhand(ch, cnum, Compwin, TRUE);
+ prtable(sum);
+ if (last) {
+ if (played) {
+ msg(quiet ? "I get one for last" : "I get one point for last");
+ do_wait();
+ if (chkscr(&cscore, 1))
+ return TRUE;
+ } else {
+ msg(quiet ? "You get one for last" :
+ "You get one point for last");
+ if (chkscr(&pscore, 1))
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*
+ * score:
+ * Handle the scoring of the hands
+ */
+BOOLEAN score(mycrib)
+BOOLEAN mycrib;
+{
+ sorthand(crib, CINHAND);
+ if (mycrib) {
+ if (plyrhand(phand, "hand"))
+ return TRUE;
+ if (comphand(chand, "hand"))
+ return TRUE;
+ do_wait();
+ if (comphand(crib, "crib"))
+ return TRUE;
+ }
+ else {
+ if (comphand(chand, "hand"))
+ return TRUE;
+ if (plyrhand(phand, "hand"))
+ return TRUE;
+ if (plyrhand(crib, "crib"))
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/*
+ * playhand:
+ * Do up one hand of the game
+ */
+BOOLEAN playhand(mycrib)
+BOOLEAN mycrib;
+{
+ register int deckpos;
+ extern char Msgbuf[];
+
+ werase(Compwin);
+
+ knownum = 0;
+ deckpos = deal(mycrib);
+ sorthand(chand, FULLHAND);
+ sorthand(phand, FULLHAND);
+ makeknown(chand, FULLHAND);
+ prhand(phand, FULLHAND, Playwin, FALSE);
+ discard(mycrib);
+ if (cut(mycrib, deckpos))
+ return TRUE;
+ if (peg(mycrib))
+ return TRUE;
+ werase(Tablewin);
+ wrefresh(Tablewin);
+ if (score(mycrib))
+ return TRUE;
+ return FALSE;
}
/*
@@ -151,7 +393,7 @@ gamescore()
* Play one game up to glimit points. Actually, we only ASK the
* player what card to turn. We do a random one, anyway.
*/
-game()
+void game()
{
register int i, j;
BOOLEAN flag;
@@ -167,7 +409,7 @@ game()
if (!rflag) { /* player cuts deck */
msg(quiet ? "Cut for crib? " :
"Cut to see whose crib it is -- low card wins? ");
- getline();
+ getlin();
}
i = (rand() >> 4) % CARDS; /* random cut */
do { /* comp cuts deck */
@@ -240,348 +482,86 @@ game()
gamescore();
}
-/*
- * playhand:
- * Do up one hand of the game
- */
-playhand(mycrib)
-BOOLEAN mycrib;
+int main(argc, argv)
+int argc;
+char *argv[];
{
- register int deckpos;
- extern char Msgbuf[];
+ register char *p;
+ BOOLEAN playing;
+ char *s; /* for reading arguments */
+ char bust; /* flag for arg reader */
+ FILE *f;
- werase(Compwin);
-
- knownum = 0;
- deckpos = deal(mycrib);
- sorthand(chand, FULLHAND);
- sorthand(phand, FULLHAND);
- makeknown(chand, FULLHAND);
- prhand(phand, FULLHAND, Playwin, FALSE);
- discard(mycrib);
- if (cut(mycrib, deckpos))
- return TRUE;
- if (peg(mycrib))
- return TRUE;
- werase(Tablewin);
- wrefresh(Tablewin);
- if (score(mycrib))
- return TRUE;
- return FALSE;
-}
-
-
-
-/*
- * deal cards to both players from deck
- */
-
-deal( mycrib )
-{
- register int i, j;
-
- j = 0;
- for( i = 0; i < FULLHAND; i++ ) {
- if( mycrib ) {
- phand[i] = deck[j++];
- chand[i] = deck[j++];
+ while (--argc > 0) {
+ if ((*++argv)[0] != '-') {
+ fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n");
+ exit(1);
}
- else {
- chand[i] = deck[j++];
- phand[i] = deck[j++];
- }
- }
- return( j );
-}
-
-/*
- * discard:
- * Handle players discarding into the crib...
- * Note: we call cdiscard() after prining first message so player doesn't wait
- */
-discard(mycrib)
-BOOLEAN mycrib;
-{
- register char *prompt;
- CARD crd;
-
- prcrib(mycrib, TRUE);
- prompt = (quiet ? "Discard --> " : "Discard a card --> ");
- cdiscard(mycrib); /* puts best discard at end */
- crd = phand[infrom(phand, FULLHAND, prompt)];
- remove(crd, phand, FULLHAND);
- prhand(phand, FULLHAND, Playwin, FALSE);
- crib[0] = crd;
-/* next four lines same as last four except for cdiscard() */
- crd = phand[infrom(phand, FULLHAND - 1, prompt)];
- remove(crd, phand, FULLHAND - 1);
- prhand(phand, FULLHAND, Playwin, FALSE);
- crib[1] = crd;
- crib[2] = chand[4];
- crib[3] = chand[5];
- chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY;
-}
-
-/*
- * cut:
- * Cut the deck and set turnover. Actually, we only ASK the
- * player what card to turn. We do a random one, anyway.
- */
-cut(mycrib, pos)
-BOOLEAN mycrib;
-int pos;
-{
- register int i, cardx;
- BOOLEAN win = FALSE;
-
- if (mycrib) {
- if (!rflag) { /* random cut */
- msg(quiet ? "Cut the deck? " :
- "How many cards down do you wish to cut the deck? ");
- getline();
- }
- i = (rand() >> 4) % (CARDS - pos);
- turnover = deck[i + pos];
- addmsg(quiet ? "You cut " : "You cut the ");
- msgcard(turnover, FALSE);
- endmsg();
- if (turnover.rank == JACK) {
- msg("I get two for his heels");
- win = chkscr(&cscore,2 );
- }
- }
- else {
- i = (rand() >> 4) % (CARDS - pos) + pos;
- turnover = deck[i];
- addmsg(quiet ? "I cut " : "I cut the ");
- msgcard(turnover, FALSE);
- endmsg();
- if (turnover.rank == JACK) {
- msg("You get two for his heels");
- win = chkscr(&pscore, 2);
- }
- }
- makeknown(&turnover, 1);
- prcrib(mycrib, FALSE);
- return win;
-}
-
-/*
- * prcrib:
- * Print out the turnover card with crib indicator
- */
-prcrib(mycrib, blank)
-BOOLEAN mycrib, blank;
-{
- register int y, cardx;
-
- if (mycrib)
- cardx = CRIB_X;
- else
- cardx = 0;
-
- mvaddstr(CRIB_Y, cardx + 1, "CRIB");
- prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank);
-
- if (mycrib)
- cardx = 0;
- else
- cardx = CRIB_X;
-
- for (y = CRIB_Y; y <= CRIB_Y + 5; y++)
- mvaddstr(y, cardx, " ");
-}
-
-/*
- * peg:
- * Handle all the pegging...
- */
-
-static CARD Table[14];
-
-static int Tcnt;
-
-peg(mycrib)
-BOOLEAN mycrib;
-{
- static CARD ch[CINHAND], ph[CINHAND];
- CARD crd;
- register int i, j, k;
- register int l;
- register int cnum, pnum, sum;
- register BOOLEAN myturn, mego, ugo, last, played;
-
- cnum = pnum = CINHAND;
- for (i = 0; i < CINHAND; i++) { /* make copies of hands */
- ch[i] = chand[i];
- ph[i] = phand[i];
- }
- Tcnt = 0; /* index to table of cards played */
- sum = 0; /* sum of cards played */
- mego = ugo = FALSE;
- myturn = !mycrib;
- for (;;) {
- last = TRUE; /* enable last flag */
- prhand(ph, pnum, Playwin, FALSE);
- prhand(ch, cnum, Compwin, TRUE);
- prtable(sum);
- if (myturn) { /* my tyrn to play */
- if (!anymove(ch, cnum, sum)) { /* if no card to play */
- if (!mego && cnum) { /* go for comp? */
- msg("GO");
- mego = TRUE;
- }
- if (anymove(ph, pnum, sum)) /* can player move? */
- myturn = !myturn;
- else { /* give him his point */
- msg(quiet ? "You get one" : "You get one point");
- if (chkscr(&pscore, 1))
- return TRUE;
- sum = 0;
- mego = ugo = FALSE;
- Tcnt = 0;
- }
- }
- else {
- played = TRUE;
- j = -1;
- k = 0;
- for (i = 0; i < cnum; i++) { /* maximize score */
- l = pegscore(ch[i], Table, Tcnt, sum);
- if (l > k) {
- k = l;
- j = i;
- }
- }
- if (j < 0) /* if nothing scores */
- j = cchose(ch, cnum, sum);
- crd = ch[j];
- remove(crd, ch, cnum--);
- sum += VAL(crd.rank);
- Table[Tcnt++] = crd;
- if (k > 0) {
- addmsg(quiet ? "I get %d playing " :
- "I get %d points playing ", k);
- msgcard(crd, FALSE);
- endmsg();
- if (chkscr(&cscore, k))
- return TRUE;
- }
- myturn = !myturn;
+ bust = FALSE;
+ for (s = argv[0] + 1; *s != 0; s++) {
+ switch (*s) {
+ case 'e':
+ explain = TRUE;
+ break;
+ case 'q':
+ quiet = TRUE;
+ break;
+ case 'r':
+ rflag = TRUE;
+ break;
+ default:
+ fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n");
+ exit(2);
+ break;
}
+ if (bust)
+ break;
}
- else {
- if (!anymove(ph, pnum, sum)) { /* can player move? */
- if (!ugo && pnum) { /* go for player */
- msg("You have a GO");
- ugo = TRUE;
- }
- if (anymove(ch, cnum, sum)) /* can computer play? */
- myturn = !myturn;
- else {
- msg(quiet ? "I get one" : "I get one point");
- do_wait();
- if (chkscr(&cscore, 1))
- return TRUE;
- sum = 0;
- mego = ugo = FALSE;
- Tcnt = 0;
- }
- }
- else { /* player plays */
- played = FALSE;
- if (pnum == 1) {
- crd = ph[0];
- msg("You play your last card");
- }
- else
- for (;;) {
- prhand(ph, pnum, Playwin, FALSE);
- crd = ph[infrom(ph, pnum, "Your play: ")];
- if (sum + VAL(crd.rank) <= 31)
- break;
- else
- msg("Total > 31 -- try again");
- }
- makeknown(&crd, 1);
- remove(crd, ph, pnum--);
- i = pegscore(crd, Table, Tcnt, sum);
- sum += VAL(crd.rank);
- Table[Tcnt++] = crd;
- if (i > 0) {
- msg(quiet ? "You got %d" : "You got %d points", i);
- if (chkscr(&pscore, i))
- return TRUE;
- }
- myturn = !myturn;
- }
- }
- if (sum >= 31) {
- if (!myturn)
- do_wait();
- sum = 0;
- mego = ugo = FALSE;
- Tcnt = 0;
- last = FALSE; /* disable last flag */
- }
- if (!pnum && !cnum)
- break; /* both done */
}
- prhand(ph, pnum, Playwin, FALSE);
- prhand(ch, cnum, Compwin, TRUE);
- prtable(sum);
- if (last)
- if (played) {
- msg(quiet ? "I get one for last" : "I get one point for last");
- do_wait();
- if (chkscr(&cscore, 1))
- return TRUE;
- }
- else {
- msg(quiet ? "You get one for last" :
- "You get one point for last");
- if (chkscr(&pscore, 1))
- return TRUE;
- }
- return FALSE;
-}
-/*
- * prtable:
- * Print out the table with the current score
- */
-prtable(score)
-int score;
-{
- prhand(Table, Tcnt, Tablewin, FALSE);
- mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score);
- wrefresh(Tablewin);
-}
+ initscr();
+ signal(SIGINT, bye);
+ crmode();
+ noecho();
+ Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0);
+ Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X);
+ Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X);
+ Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1);
+ leaveok(Playwin, TRUE);
+ leaveok(Tablewin, TRUE);
+ leaveok(Compwin, TRUE);
+ clearok(stdscr, FALSE);
-/*
- * score:
- * Handle the scoring of the hands
- */
-score(mycrib)
-BOOLEAN mycrib;
-{
- sorthand(crib, CINHAND);
- if (mycrib) {
- if (plyrhand(phand, "hand"))
- return TRUE;
- if (comphand(chand, "hand"))
- return TRUE;
- do_wait();
- if (comphand(crib, "crib"))
- return TRUE;
+ if (!quiet) {
+ msg("Do you need instructions for cribbage? ");
+ if (getuchar() == 'Y') {
+ endwin();
+ fflush(stdout);
+ system(INSTRCMD);
+ crmode();
+ noecho();
+ clear();
+ refresh();
+ msg("For the rules of this program, do \"man cribbage\"");
+ }
}
- else {
- if (comphand(chand, "hand"))
- return TRUE;
- if (plyrhand(phand, "hand"))
- return TRUE;
- if (plyrhand(crib, "crib"))
- return TRUE;
+ playing = TRUE;
+ do {
+ wclrtobot(Msgwin);
+ msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? ");
+ if (glimit == SGAME)
+ glimit = (getuchar() == 'L' ? LGAME : SGAME);
+ else
+ glimit = (getuchar() == 'S' ? SGAME : LGAME);
+ game();
+ msg("Another game? ");
+ playing = (getuchar() == 'Y');
+ } while (playing);
+
+ if ((f = fopen(LOGFILE, "a")) != NULL) {
+ fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames);
+ fclose(f);
}
- return FALSE;
+
+ bye(0);
}
diff --git a/src/games/cribbage/cribbage.h b/src/games/cribbage/cribbage.h
index 9c0d793..4744abd 100644
--- a/src/games/cribbage/cribbage.h
+++ b/src/games/cribbage/cribbage.h
@@ -5,6 +5,7 @@
*
* @(#)cribbage.h 5.1 (Berkeley) 5/30/85
*/
+# include
extern CARD deck[ CARDS ]; /* a deck */
extern CARD phand[ FULLHAND ]; /* player's hand */
@@ -30,5 +31,32 @@ extern BOOLEAN rflag; /* if all cuts random */
extern BOOLEAN quiet; /* if suppress random mess */
extern BOOLEAN playing; /* currently playing game */
-extern char expl[]; /* string for explanation */
+extern char explstr[]; /* string for explanation */
+char *getlin(void);
+void bye(int sig);
+void msg(char *fmt, ...);
+void addmsg(char *fmt, ...);
+BOOLEAN msgcard(CARD c, BOOLEAN brief);
+void endmsg(void);
+int getuchar(void);
+void makedeck(CARD d[]);
+void shuffle(CARD d[]);
+void sorthand(CARD h[], int n);
+void makeknown(CARD h[], int n);
+void prhand(CARD h[], int n, WINDOW *win, BOOLEAN blank);
+void prcard(WINDOW *win, int y, int x, CARD c, BOOLEAN blank);
+void cdiscard(BOOLEAN mycrib);
+int infrom(CARD hand[], int n, char *prompt);
+void cremove(CARD a, CARD d[], int n);
+BOOLEAN chkscr(int *scr, int inc);
+BOOLEAN anymove(CARD hand[], int n, int sum);
+int scorehand(CARD hand[], CARD starter, int n, BOOLEAN crb, BOOLEAN do_explain);
+int number(int lo, int hi, char *prompt);
+void do_wait(void);
+int adjust(CARD cb[], CARD tnv);
+int pegscore(CARD crd, CARD tbl[], int n, int sum);
+int cchose(CARD h[], int n, int s);
+BOOLEAN plyrhand(CARD hand[], char *s);
+BOOLEAN comphand(CARD h[], char *s);
+BOOLEAN isone(CARD a, CARD b[], int n);
diff --git a/src/games/cribbage/deck.h b/src/games/cribbage/deck.h
index c600be2..f820dc7 100644
--- a/src/games/cribbage/deck.h
+++ b/src/games/cribbage/deck.h
@@ -10,7 +10,6 @@
* define structure of a deck of cards and other related things
*/
-
#define CARDS 52 /* number cards in deck */
#define RANKS 13 /* number ranks in deck */
#define SUITS 4 /* number suits in deck */
@@ -43,16 +42,14 @@
#define VAL(c) ( (c) < 9 ? (c)+1 : 10 ) /* val of rank */
-
#ifndef TRUE
-# define TRUE 1
-# define FALSE 0
+# define TRUE (1)
+# define FALSE (0)
#endif
-typedef struct {
- int rank;
- int suit;
- } CARD;
-
-typedef char BOOLEAN;
+typedef struct {
+ int rank;
+ int suit;
+} CARD;
+typedef int BOOLEAN;
diff --git a/src/games/cribbage/extern.c b/src/games/cribbage/extern.c
index 4914957..d3511a8 100644
--- a/src/games/cribbage/extern.c
+++ b/src/games/cribbage/extern.c
@@ -3,21 +3,15 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)extern.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include
# include "deck.h"
# include "cribbage.h"
-bool explain = FALSE; /* player mistakes explained */
-bool iwon = FALSE; /* if comp won last game */
-bool quiet = FALSE; /* if suppress random mess */
-bool rflag = FALSE; /* if all cuts random */
+BOOLEAN explain = FALSE; /* player mistakes explained */
+BOOLEAN iwon = FALSE; /* if comp won last game */
+BOOLEAN quiet = FALSE; /* if suppress random mess */
+BOOLEAN rflag = FALSE; /* if all cuts random */
-char expl[128]; /* explanation */
+char explstr[128]; /* explanation */
int cgames = 0; /* number games comp won */
int cscore = 0; /* comp score in this game */
diff --git a/src/games/cribbage/io.c b/src/games/cribbage/io.c
index 4808d95..68f4651 100644
--- a/src/games/cribbage/io.c
+++ b/src/games/cribbage/io.c
@@ -3,32 +3,38 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)io.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include
# include
# include
+# include
+# include
+# include
+# include
# include "deck.h"
# include "cribbage.h"
# include "cribcur.h"
-# define LINESIZE 128
+# define LINESIZE 128
# ifdef CTRL
# undef CTRL
# endif
-# define CTRL(X) ('X' - 'A' + 1)
+# define CTRL(X) ('X' - 'A' + 1)
-# ifndef erasechar()
-# define erasechar() _tty.sg_erase
-# endif erasechar()
+# ifdef CROSS
+# define erasechar() ('H' & 31)
+# endif
-# ifndef killchar()
-# define killchar() _tty.sg_kill
-# endif killchar()
+# ifndef killchar
+# define killchar() ('U' & 31)
+# endif
+
+# ifndef erasechar
+# define erasechar() _tty.sg_erase
+# endif
+
+# ifndef killchar
+# define killchar() _tty.sg_kill
+# endif
char linebuf[ LINESIZE ];
@@ -45,32 +51,14 @@ char *suitname[ SUITS ] = { "SPADES", "HEARTS", "DIAMONDS",
char *suitchar[ SUITS ] = { "S", "H", "D", "C" };
-
-
-/*
- * msgcard:
- * Call msgcrd in one of two forms
- */
-msgcard(c, brief)
-CARD c;
-BOOLEAN brief;
-{
- if (brief)
- return msgcrd(c, TRUE, (char *) NULL, TRUE);
- else
- return msgcrd(c, FALSE, " of ", FALSE);
-}
-
-
-
/*
* msgcrd:
* Print the value of a card in ascii
*/
-msgcrd(c, brfrank, mid, brfsuit)
-CARD c;
-char *mid;
-BOOLEAN brfrank, brfsuit;
+BOOLEAN msgcrd(c, brfrank, mid, brfsuit)
+ CARD c;
+ char *mid;
+ BOOLEAN brfrank, brfsuit;
{
if (c.rank == EMPTY || c.suit == EMPTY)
return FALSE;
@@ -87,15 +75,29 @@ BOOLEAN brfrank, brfsuit;
return TRUE;
}
+/*
+ * msgcard:
+ * Call msgcrd in one of two forms
+ */
+BOOLEAN msgcard(c, brief)
+ CARD c;
+ BOOLEAN brief;
+{
+ if (brief)
+ return msgcrd(c, TRUE, (char *) NULL, TRUE);
+ else
+ return msgcrd(c, FALSE, " of ", FALSE);
+}
+
/*
* printcard:
* Print out a card.
*/
-printcard(win, cardno, c, blank)
-WINDOW *win;
-int cardno;
-CARD c;
-BOOLEAN blank;
+void printcard(win, cardno, c, blank)
+ WINDOW *win;
+ int cardno;
+ CARD c;
+ BOOLEAN blank;
{
prcard(win, cardno * 2, cardno, c, blank);
}
@@ -104,11 +106,11 @@ BOOLEAN blank;
* prcard:
* Print out a card on the window at the specified location
*/
-prcard(win, y, x, c, blank)
-WINDOW *win;
-int y, x;
-CARD c;
-BOOLEAN blank;
+void prcard(win, y, x, c, blank)
+ WINDOW *win;
+ int y, x;
+ CARD c;
+ BOOLEAN blank;
{
if (c.rank == EMPTY)
return;
@@ -129,11 +131,11 @@ BOOLEAN blank;
* prhand:
* Print a hand of n cards
*/
-prhand(h, n, win, blank)
-CARD h[];
-int n;
-WINDOW *win;
-BOOLEAN blank;
+void prhand(h, n, win, blank)
+ CARD h[];
+ int n;
+ WINDOW *win;
+ BOOLEAN blank;
{
register int i;
@@ -143,17 +145,96 @@ BOOLEAN blank;
wrefresh(win);
}
+/*
+ * incard:
+ * Inputs a card in any format. It reads a line ending with a CR
+ * and then parses it.
+ */
+BOOLEAN incard(crd)
+ CARD *crd;
+{
+ register int i;
+ int rnk, sut;
+ char *line, *p, *p1;
+ BOOLEAN retval;
+ retval = FALSE;
+ rnk = sut = EMPTY;
+ if (!(line = getlin()))
+ goto gotit;
+ p = p1 = line;
+ while(*p1 != ' ' && *p1 != 0)
+ ++p1;
+ *p1++ = 0;
+ if(*p == 0)
+ goto gotit;
+ /* IMPORTANT: no real card has 2 char first name */
+ if( strlen(p) == 2 ) { /* check for short form */
+ rnk = EMPTY;
+ for( i = 0; i < RANKS; i++ ) {
+ if( *p == *rankchar[i] ) {
+ rnk = i;
+ break;
+ }
+ }
+ if( rnk == EMPTY ) goto gotit; /* it's nothing... */
+ ++p; /* advance to next char */
+ sut = EMPTY;
+ for( i = 0; i < SUITS; i++ ) {
+ if( *p == *suitchar[i] ) {
+ sut = i;
+ break;
+ }
+ }
+ if( sut != EMPTY ) retval = TRUE;
+ goto gotit;
+ }
+ rnk = EMPTY;
+ for( i = 0; i < RANKS; i++ ) {
+ if( !strcmp( p, rankname[i] ) || !strcmp( p, rankchar[i] ) ) {
+ rnk = i;
+ break;
+ }
+ }
+ if( rnk == EMPTY ) goto gotit;
+ p = p1;
+ while(*p1 != ' ' && *p1 != 0)
+ ++p1;
+ *p1++ = 0;
+ if(*p == 0)
+ goto gotit;
+ if(! strcmp("OF", p)) {
+ p = p1;
+ while(*p1 != ' ' && *p1 != 0)
+ ++p1;
+ *p1++ = 0;
+ if(*p == 0)
+ goto gotit;
+ }
+ sut = EMPTY;
+ for( i = 0; i < SUITS; i++ ) {
+ if( !strcmp( p, suitname[i] ) || !strcmp( p, suitchar[i] ) ) {
+ sut = i;
+ break;
+ }
+ }
+ if( sut != EMPTY )
+ retval = TRUE;
+gotit:
+ (*crd).rank = rnk;
+ (*crd).suit = sut;
+ return( retval );
+}
/*
* infrom:
* reads a card, supposedly in hand, accepting unambigous brief
* input, returns the index of the card found...
*/
-infrom(hand, n, prompt)
-CARD hand[];
-int n;
-char *prompt;
+int infrom(hand, n, prompt)
+ CARD hand[];
+ int n;
+ char *prompt;
{
register int i, j;
CARD crd;
@@ -202,90 +283,35 @@ char *prompt;
/* NOTREACHED */
}
-
-
/*
- * incard:
- * Inputs a card in any format. It reads a line ending with a CR
- * and then parses it.
+ * readchar:
+ * Reads and returns a character, checking for gross input errors
*/
-incard(crd)
-CARD *crd;
+int readchar()
{
- char *getline();
- register int i;
- int rnk, sut;
- char *line, *p, *p1;
- BOOLEAN retval;
+ register int cnt, y, x;
+ auto char c;
- retval = FALSE;
- rnk = sut = EMPTY;
- if (!(line = getline()))
- goto gotit;
- p = p1 = line;
- while( *p1 != ' ' && *p1 != NULL ) ++p1;
- *p1++ = NULL;
- if( *p == NULL ) goto gotit;
- /* IMPORTANT: no real card has 2 char first name */
- if( strlen(p) == 2 ) { /* check for short form */
- rnk = EMPTY;
- for( i = 0; i < RANKS; i++ ) {
- if( *p == *rankchar[i] ) {
- rnk = i;
- break;
- }
- }
- if( rnk == EMPTY ) goto gotit; /* it's nothing... */
- ++p; /* advance to next char */
- sut = EMPTY;
- for( i = 0; i < SUITS; i++ ) {
- if( *p == *suitchar[i] ) {
- sut = i;
- break;
- }
- }
- if( sut != EMPTY ) retval = TRUE;
- goto gotit;
- }
- rnk = EMPTY;
- for( i = 0; i < RANKS; i++ ) {
- if( !strcmp( p, rankname[i] ) || !strcmp( p, rankchar[i] ) ) {
- rnk = i;
- break;
- }
- }
- if( rnk == EMPTY ) goto gotit;
- p = p1;
- while( *p1 != ' ' && *p1 != NULL ) ++p1;
- *p1++ = NULL;
- if( *p == NULL ) goto gotit;
- if( !strcmp( "OF", p ) ) {
- p = p1;
- while( *p1 != ' ' && *p1 != NULL ) ++p1;
- *p1++ = NULL;
- if( *p == NULL ) goto gotit;
- }
- sut = EMPTY;
- for( i = 0; i < SUITS; i++ ) {
- if( !strcmp( p, suitname[i] ) || !strcmp( p, suitchar[i] ) ) {
- sut = i;
- break;
- }
- }
- if( sut != EMPTY ) retval = TRUE;
-gotit:
- (*crd).rank = rnk;
- (*crd).suit = sut;
- return( retval );
+over:
+ cnt = 0;
+ while (read(0, &c, 1) <= 0)
+ if (cnt++ > 100) /* if we are getting infinite EOFs */
+ bye(0); /* quit the game */
+ if (c == CTRL(L)) {
+ wrefresh(curscr);
+ goto over;
+ }
+ if (c == '\r')
+ return '\n';
+ else
+ return c;
}
-
-
/*
* getuchar:
* Reads and converts to upper case
*/
-getuchar()
+int getuchar()
{
register int c;
@@ -301,18 +327,17 @@ getuchar()
* Reads in a decimal number and makes sure it is between "lo" and
* "hi" inclusive.
*/
-number(lo, hi, prompt)
-int lo, hi;
-char *prompt;
+int number(lo, hi, prompt)
+ int lo, hi;
+ char *prompt;
{
- char *getline();
register char *p;
register int sum;
sum = 0;
for (;;) {
msg(prompt);
- if(!(p = getline()) || *p == NULL) {
+ if(!(p = getlin()) || *p == 0) {
msg(quiet ? "Not a number" : "That doesn't look like a number");
continue;
}
@@ -326,7 +351,7 @@ char *prompt;
++p;
}
- if (*p != ' ' && *p != '\t' && *p != NULL)
+ if (*p != ' ' && *p != '\t' && *p != 0)
sum = lo - 1;
if (sum >= lo && sum <= hi)
return sum;
@@ -338,22 +363,46 @@ char *prompt;
}
}
-/*
- * msg:
- * Display a message at the top of the screen.
- */
char Msgbuf[BUFSIZ] = { '\0' };
int Mpos = 0;
static int Newpos = 0;
-/* VARARGS1 */
-msg(fmt, args)
-char *fmt;
-int args;
+/*
+ * doadd:
+ * Perform an add onto the message buffer
+ */
+void doadd(char *fmt, va_list ap)
{
- doadd(fmt, &args);
+#ifdef CROSS
+ vsnprintf(Msgbuf, BUFSIZ, fmt, ap);
+#else
+ static FILE junk;
+
+ /*
+ * Do the printf into Msgbuf
+ */
+ junk._flag = _IOWRT + _IOSTRG;
+ junk._ptr = &Msgbuf[Newpos];
+ junk._cnt = BUFSIZ - 1;
+ _doprnt(fmt, ap, &junk);
+ putc('\0', &junk);
+#endif
+ Newpos = strlen(Msgbuf);
+}
+
+/*
+ * msg:
+ * Display a message at the top of the screen.
+ */
+void msg(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ doadd(fmt, ap);
+ va_end(ap);
endmsg();
}
@@ -362,21 +411,22 @@ int args;
* Add things to the current message
*/
/* VARARGS1 */
-addmsg(fmt, args)
-char *fmt;
-int args;
+void addmsg(char *fmt, ...)
{
- doadd(fmt, &args);
+ va_list ap;
+
+ va_start(ap, fmt);
+ doadd(fmt, ap);
+ va_end(ap);
}
+int Lineno = 0;
+
/*
* endmsg:
* Display a new msg.
*/
-
-int Lineno = 0;
-
-endmsg()
+void endmsg()
{
register int len;
register char *mp, *omp;
@@ -423,31 +473,27 @@ endmsg()
}
/*
- * doadd:
- * Perform an add onto the message buffer
+ * wait_for
+ * Sit around until the guy types the right key
*/
-doadd(fmt, args)
-char *fmt;
-int *args;
+void wait_for(ch)
+ register int ch;
{
- static FILE junk;
+ register int c;
- /*
- * Do the printf into Msgbuf
- */
- junk._flag = _IOWRT + _IOSTRG;
- junk._ptr = &Msgbuf[Newpos];
- junk._cnt = 32767;
- _doprnt(fmt, args, &junk);
- putc('\0', &junk);
- Newpos = strlen(Msgbuf);
+ if (ch == '\n')
+ while ((c = readchar()) != '\n')
+ continue;
+ else
+ while (readchar() != ch)
+ continue;
}
/*
* do_wait:
* Wait for the user to type ' ' before doing anything else
*/
-do_wait()
+void do_wait()
{
register int line;
static char prompt[] = { '-', '-', 'M', 'o', 'r', 'e', '-', '-', '\0' };
@@ -466,53 +512,11 @@ do_wait()
}
/*
- * wait_for
- * Sit around until the guy types the right key
- */
-wait_for(ch)
-register char ch;
-{
- register char c;
-
- if (ch == '\n')
- while ((c = readchar()) != '\n')
- continue;
- else
- while (readchar() != ch)
- continue;
-}
-
-/*
- * readchar:
- * Reads and returns a character, checking for gross input errors
- */
-readchar()
-{
- register int cnt, y, x;
- auto char c;
-
-over:
- cnt = 0;
- while (read(0, &c, 1) <= 0)
- if (cnt++ > 100) /* if we are getting infinite EOFs */
- bye(); /* quit the game */
- if (c == CTRL(L)) {
- wrefresh(curscr);
- goto over;
- }
- if (c == '\r')
- return '\n';
- else
- return c;
-}
-
-/*
- * getline:
+ * getlin:
* Reads the next line up to '\n' or EOF. Multiple spaces are
* compressed to one space; a space is inserted before a ','
*/
-char *
-getline()
+char *getlin()
{
register char *sp;
register int c, oy, ox;
@@ -564,7 +568,7 @@ getline()
* bye:
* Leave the program, cleaning things up as we go.
*/
-bye()
+void bye(int sig)
{
signal(SIGINT, SIG_IGN);
mvcur(0, COLS - 1, LINES - 1, 0);
diff --git a/src/games/cribbage/score.c b/src/games/cribbage/score.c
index ff8c942..20094ca 100644
--- a/src/games/cribbage/score.c
+++ b/src/games/cribbage/score.c
@@ -3,23 +3,18 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)score.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
#include
+#include
+#include
#include "deck.h"
#include "cribbage.h"
-
/*
* the following arrays give the sum of the scores of the (50 2)*48 = 58800
* hands obtainable for the crib given the two cards whose ranks index the
* array. the two arrays are for the case where the suits are equal and
* not equal respectively
*/
-
long crbescr[ 169 ] = {
-10000, 271827, 278883, 332319, 347769, 261129, 250653, 253203, 248259,
243435, 256275, 237435, 231051, -10000, -10000, 412815, 295707, 349497,
@@ -66,90 +61,13 @@ long crbnescr[ 169 ] = {
static int ichoose2[ 5 ] = { 0, 0, 2, 6, 12 };
static int pairpoints, runpoints; /* globals from pairuns */
-
-/*
- * scorehand:
- * Score the given hand of n cards and the starter card.
- * n must be <= 4
- */
-scorehand(hand, starter, n, crb, do_explain)
-register CARD hand[];
-CARD starter;
-int n;
-BOOLEAN crb; /* true if scoring crib */
-BOOLEAN do_explain; /* true if must explain this hand */
-{
- CARD h[(CINHAND + 1)];
- register int i, k;
- register int score;
- register BOOLEAN flag;
- char buf[32];
-
- expl[0] = NULL; /* initialize explanation */
- score = 0;
- flag = TRUE;
- k = hand[0].suit;
- for (i = 0; i < n; i++) { /* check for flush */
- flag = (flag && (hand[i].suit == k));
- if (hand[i].rank == JACK) /* check for his nibs */
- if (hand[i].suit == starter.suit) {
- score++;
- if (do_explain)
- strcat(expl, "His Nobs");
- }
- h[i] = hand[i];
- }
-
- if (flag && n >= CINHAND) {
- if (do_explain && expl[0] != NULL)
- strcat(expl, ", ");
- if (starter.suit == k) {
- score += 5;
- if (do_explain)
- strcat(expl, "Five-flush");
- }
- else if (!crb) {
- score += 4;
- if (do_explain && expl[0] != NULL)
- strcat(expl, ", Four-flush");
- else
- strcpy(expl, "Four-flush");
- }
- }
-
- if (do_explain && expl[0] != NULL)
- strcat(expl, ", ");
- h[n] = starter;
- sorthand(h, n + 1); /* sort by rank */
- i = 2 * fifteens(h, n + 1);
- score += i;
- if (do_explain)
- if (i > 0) {
- sprintf(buf, "%d points in fifteens", i);
- strcat(expl, buf);
- }
- else
- strcat(expl, "No fifteens");
- i = pairuns(h, n + 1);
- score += i;
- if (do_explain)
- if (i > 0) {
- sprintf(buf, ", %d points in pairs, %d in runs", pairpoints,
- runpoints);
- strcat(expl, buf);
- }
- else
- strcat(expl, ", No pairs/runs");
- return score;
-}
-
/*
* fifteens:
* Return number of fifteens in hand of n cards
*/
-fifteens(hand, n)
-register CARD hand[];
-int n;
+int fifteens(hand, n)
+ register CARD hand[];
+ int n;
{
register int *sp, *np;
register int i;
@@ -183,19 +101,15 @@ int n;
return sums[14];
}
-
-
/*
* pairuns returns the number of points in the n card sorted hand
* due to pairs and runs
* this routine only works if n is strictly less than 6
* sets the globals pairpoints and runpoints appropriately
*/
-
-pairuns( h, n )
-
- CARD h[];
- int n;
+int pairuns( h, n )
+ CARD h[];
+ int n;
{
register int i;
int runlength, runmult, lastmult, curmult;
@@ -260,18 +174,91 @@ pairuns( h, n )
return( pairpoints + runpoints );
}
+/*
+ * scorehand:
+ * Score the given hand of n cards and the starter card.
+ * n must be <= 4
+ */
+int scorehand(hand, starter, n, crb, do_explain)
+ register CARD hand[];
+ CARD starter;
+ int n;
+ BOOLEAN crb; /* true if scoring crib */
+ BOOLEAN do_explain; /* true if must explain this hand */
+{
+ CARD h[(CINHAND + 1)];
+ register int i, k;
+ register int score;
+ register BOOLEAN flag;
+ char buf[32];
+ explstr[0] = 0; /* initialize explanation */
+ score = 0;
+ flag = TRUE;
+ k = hand[0].suit;
+ for (i = 0; i < n; i++) { /* check for flush */
+ flag = (flag && (hand[i].suit == k));
+ if (hand[i].rank == JACK) /* check for his nibs */
+ if (hand[i].suit == starter.suit) {
+ score++;
+ if (do_explain)
+ strcat(explstr, "His Nobs");
+ }
+ h[i] = hand[i];
+ }
+
+ if (flag && n >= CINHAND) {
+ if (do_explain && explstr[0] != 0)
+ strcat(explstr, ", ");
+ if (starter.suit == k) {
+ score += 5;
+ if (do_explain)
+ strcat(explstr, "Five-flush");
+ }
+ else if (!crb) {
+ score += 4;
+ if (do_explain && explstr[0] != 0)
+ strcat(explstr, ", Four-flush");
+ else
+ strcpy(explstr, "Four-flush");
+ }
+ }
+
+ if (do_explain && explstr[0] != 0)
+ strcat(explstr, ", ");
+ h[n] = starter;
+ sorthand(h, n + 1); /* sort by rank */
+ i = 2 * fifteens(h, n + 1);
+ score += i;
+ if (do_explain) {
+ if (i > 0) {
+ sprintf(buf, "%d points in fifteens", i);
+ strcat(explstr, buf);
+ } else
+ strcat(explstr, "No fifteens");
+ }
+ i = pairuns(h, n + 1);
+ score += i;
+ if (do_explain) {
+ if (i > 0) {
+ sprintf(buf, ", %d points in pairs, %d in runs", pairpoints,
+ runpoints);
+ strcat(explstr, buf);
+ }
+ else
+ strcat(explstr, ", No pairs/runs");
+ }
+ return score;
+}
/*
* pegscore tells how many points crd would get if played after
* the n cards in tbl during pegging
*/
-
-pegscore( crd, tbl, n, sum )
-
- CARD crd, tbl[];
- int n;
- int sum;
+int pegscore( crd, tbl, n, sum )
+ CARD crd, tbl[];
+ int n;
+ int sum;
{
BOOLEAN got[ RANKS ];
register int i, j, scr;
@@ -302,17 +289,13 @@ pegscore( crd, tbl, n, sum )
else return( scr );
}
-
-
/*
* adjust takes a two card hand that will be put in the crib
* and returns an adjusted normalized score for the number of
* points such a crib will get.
*/
-
-adjust( cb, tnv )
-
- CARD cb[], tnv;
+int adjust( cb, tnv )
+ CARD cb[], tnv;
{
int i, c0, c1;
long scr;
@@ -332,6 +315,3 @@ adjust( cb, tnv )
}
return( (scr + 29400)/58800 );
}
-
-
-
diff --git a/src/games/cribbage/support.c b/src/games/cribbage/support.c
index 867ad01..54d815d 100644
--- a/src/games/cribbage/support.c
+++ b/src/games/cribbage/support.c
@@ -3,33 +3,58 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)support.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-#include
+#include
#include "deck.h"
#include "cribbage.h"
#include "cribcur.h"
-
#define NTV 10 /* number scores to test */
/* score to test reachability of, and order to test them in */
int tv[ NTV ] = { 8, 7, 9, 6, 11, 12, 13, 14, 10, 5 };
+/*
+ * anysumto returns the index (0 <= i < n) of the card in hand that brings
+ * the s up to t, or -1 if there is none
+ */
+int anysumto( hand, n, s, t )
+ CARD hand[];
+ int n;
+ int s, t;
+{
+ register int i;
+
+ for( i = 0; i < n; i++ ) {
+ if( s + VAL( hand[i].rank ) == t ) return( i );
+ }
+ return( -1 );
+}
+
+/*
+ * return the number of cards in h having the given rank value
+ */
+int numofval( h, n, v )
+ CARD h[];
+ int n;
+ int v;
+{
+ register int i, j;
+
+ j = 0;
+ for( i = 0; i < n; i++ ) {
+ if( VAL( h[i].rank ) == v ) ++j;
+ }
+ return( j );
+}
/*
* computer chooses what to play in pegging...
* only called if no playable card will score points
*/
-
-cchose( h, n, s )
-
- CARD h[];
- int n;
- int s;
+int cchose( h, n, s )
+ CARD h[];
+ int n;
+ int s;
{
register int i, j, l;
@@ -79,15 +104,13 @@ cchose( h, n, s )
return( j );
}
-
-
/*
* plyrhand:
* Evaluate and score a player hand or crib
*/
-plyrhand(hand, s)
-CARD hand[];
-char *s;
+BOOLEAN plyrhand(hand, s)
+ CARD hand[];
+ char *s;
{
register int i, j;
register BOOLEAN win;
@@ -110,7 +133,7 @@ char *s;
msg("You should have taken %d, not %d!", i, j);
}
if (explain)
- msg("Explanation: %s", expl);
+ msg("Explanation: %s", explstr);
do_wait();
}
else
@@ -122,9 +145,9 @@ char *s;
* comphand:
* Handle scoring and displaying the computers hand
*/
-comphand(h, s)
-CARD h[];
-char *s;
+BOOLEAN comphand(h, s)
+ CARD h[];
+ char *s;
{
register int j;
@@ -134,39 +157,17 @@ char *s;
return chkscr(&cscore, j);
}
-/*
- * chkscr:
- * Add inc to scr and test for > glimit, printing on the scoring
- * board while we're at it.
- */
-
int Lastscore[2] = {-1, -1};
-chkscr(scr, inc)
-int *scr, inc;
-{
- BOOLEAN myturn;
-
- myturn = (scr == &cscore);
- if (inc != 0) {
- prpeg(Lastscore[myturn], '.', myturn);
- Lastscore[myturn] = *scr;
- *scr += inc;
- prpeg(*scr, PEG, myturn);
- refresh();
- }
- return (*scr >= glimit);
-}
-
/*
* prpeg:
* Put out the peg character on the score board and put the
* score up on the board.
*/
-prpeg(score, peg, myturn)
-register int score;
-char peg;
-BOOLEAN myturn;
+void prpeg(score, peg, myturn)
+ register int score;
+ char peg;
+ BOOLEAN myturn;
{
register int y, x;
@@ -198,13 +199,32 @@ BOOLEAN myturn;
mvprintw(SCORE_Y + (myturn ? 7 : 1), SCORE_X + 10, "%3d", score);
}
+/*
+ * chkscr:
+ * Add inc to scr and test for > glimit, printing on the scoring
+ * board while we're at it.
+ */
+BOOLEAN chkscr(scr, inc)
+ int *scr, inc;
+{
+ BOOLEAN myturn;
+
+ myturn = (scr == &cscore);
+ if (inc != 0) {
+ prpeg(Lastscore[myturn], '.', myturn);
+ Lastscore[myturn] = *scr;
+ *scr += inc;
+ prpeg(*scr, PEG, myturn);
+ refresh();
+ }
+ return (*scr >= glimit);
+}
+
/*
* cdiscard -- the computer figures out what is the best discard for
* the crib and puts the best two cards at the end
*/
-
-cdiscard( mycrib )
-
+void cdiscard( mycrib )
BOOLEAN mycrib;
{
CARD d[ CARDS ], h[ FULLHAND ], cb[ 2 ];
@@ -217,7 +237,7 @@ cdiscard( mycrib )
makedeck( d );
nc = CARDS;
for( i = 0; i < knownum; i++ ) { /* get all other cards */
- remove( known[i], d, nc-- );
+ cremove( known[i], d, nc-- );
}
for( i = 0; i < 15; i++ ) sums[i] = 0L;
ns = 0;
@@ -226,8 +246,8 @@ cdiscard( mycrib )
for( j = i + 1; j < FULLHAND; j++ ) {
cb[1] = chand[j];
for( k = 0; k < FULLHAND; k++ ) h[k] = chand[k];
- remove( chand[i], h, FULLHAND );
- remove( chand[j], h, FULLHAND - 1 );
+ cremove( chand[i], h, FULLHAND );
+ cremove( chand[j], h, FULLHAND - 1 );
for( k = 0; k < nc; k++ ) {
sums[ns] += scorehand( h, d[k], CINHAND, TRUE, FALSE );
if( mycrib ) sums[ns] += adjust( cb, d[k] );
@@ -239,20 +259,16 @@ cdiscard( mycrib )
j = 0;
for( i = 1; i < 15; i++ ) if( sums[i] > sums[j] ) j = i;
for( k = 0; k < FULLHAND; k++ ) h[k] = chand[k];
- remove( h[ undo1[j] ], chand, FULLHAND );
- remove( h[ undo2[j] ], chand, FULLHAND - 1 );
+ cremove( h[ undo1[j] ], chand, FULLHAND );
+ cremove( h[ undo2[j] ], chand, FULLHAND - 1 );
chand[4] = h[ undo1[j] ];
chand[5] = h[ undo2[j] ];
}
-
-
/*
* returns true if some card in hand can be played without exceeding 31
*/
-
-anymove( hand, n, sum )
-
+BOOLEAN anymove( hand, n, sum )
CARD hand[];
int n;
int sum;
@@ -267,57 +283,10 @@ anymove( hand, n, sum )
return( sum + VAL( j ) <= 31 );
}
-
-
-/*
- * anysumto returns the index (0 <= i < n) of the card in hand that brings
- * the s up to t, or -1 if there is none
- */
-
-anysumto( hand, n, s, t )
-
- CARD hand[];
- int n;
- int s, t;
-{
- register int i;
-
- for( i = 0; i < n; i++ ) {
- if( s + VAL( hand[i].rank ) == t ) return( i );
- }
- return( -1 );
-}
-
-
-
-
-/*
- * return the number of cards in h having the given rank value
- */
-
-numofval( h, n, v )
-
- CARD h[];
- int n;
- int v;
-{
- register int i, j;
-
- j = 0;
- for( i = 0; i < n; i++ ) {
- if( VAL( h[i].rank ) == v ) ++j;
- }
- return( j );
-}
-
-
-
/*
* makeknown remembers all n cards in h for future recall
*/
-
-makeknown( h, n )
-
+void makeknown( h, n )
CARD h[];
int n;
{
@@ -327,4 +296,3 @@ makeknown( h, n )
known[ knownum++ ] = h[i];
}
}
-
diff --git a/src/games/cribbage/test.c b/src/games/cribbage/test.c
index 44f2f61..70bb045 100644
--- a/src/games/cribbage/test.c
+++ b/src/games/cribbage/test.c
@@ -3,17 +3,6 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
-#endif not lint
-
-#ifndef lint
-static char sccsid[] = "@(#)test.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
#include
#include "deck.h"
@@ -34,7 +23,7 @@ main( argc, argv )
int i, j, is, n, sum, sum2;
CARD ic, jc;
CARD d[ CARDS];
- extern char expl[];
+ extern char explstr[];
printf( "Assuming cards are same suit\n" );
if( argc == 2 ) {
@@ -57,8 +46,8 @@ main( argc, argv )
hand[1] = jc;
for( k = 0; k < CARDS; k++ ) d[k] = deck[k];
n = CARDS;
- remove( ic, d, n-- );
- remove( jc, d, n-- );
+ cremove( ic, d, n-- );
+ cremove( jc, d, n-- );
sum = 0;
sum2 = 0;
for( k = 0; k < n - 1; k++ ) { /* 3rd card */
@@ -90,7 +79,7 @@ main( argc, argv )
hand[3].suit = 0;
hand[4].suit = 0;
printf("scorehand of hand = %d\n", scorehand(hand, hand[4], CINHAND, FALSE, TRUE));
- printf("\t%s\n", expl);
+ printf("\t%s\n", explstr);
hand[0].rank = 0;
hand[1].rank = 1;
hand[2].rank = 2;
@@ -102,7 +91,7 @@ main( argc, argv )
hand[3].suit = 0;
hand[4].suit = 0;
printf("scorehand of crib = %d\n", scorehand(hand, hand[4], CINHAND, TRUE, TRUE));
- printf("\t%s\n", expl);
+ printf("\t%s\n", explstr);
hand[0].rank = 0;
hand[1].rank = 1;
hand[2].rank = 2;
@@ -114,7 +103,7 @@ main( argc, argv )
hand[3].suit = 0;
hand[4].suit = 1;
printf("scorehand of hand = %d\n", scorehand(hand, hand[4], CINHAND, FALSE, TRUE));
- printf("\t%s\n", expl);
+ printf("\t%s\n", explstr);
hand[0].rank = 0;
hand[1].rank = 1;
hand[2].rank = 2;
@@ -126,6 +115,6 @@ main( argc, argv )
hand[3].suit = 0;
hand[4].suit = 1;
printf("scorehand of crib = %d\n", scorehand(hand, hand[4], CINHAND, TRUE, TRUE));
- printf("\t%s\n", expl);
+ printf("\t%s\n", explstr);
# endif
}
diff --git a/src/games/fortune/.gitignore b/src/games/fortune/.gitignore
new file mode 100644
index 0000000..ce43652
--- /dev/null
+++ b/src/games/fortune/.gitignore
@@ -0,0 +1 @@
+fortune
diff --git a/src/games/fortune/Makefile b/src/games/fortune/Makefile
index cedde4e..e133edc 100644
--- a/src/games/fortune/Makefile
+++ b/src/games/fortune/Makefile
@@ -1,72 +1,45 @@
-FORTUNES= scene obscene
-SOURCE= fortune.c strfile.h strfile.c rnd.c unstr.c $(FORTUNES)
-TFILES= Troff.mac Troff.sed Do_troff
-LIBDIR= /usr/games/lib
-BINDIR= /usr/games
-OWN= arnold
-GRP= arpa
-DEFS=
-SEPFLAG= -i
-CFLAGS= -O $(DEFS)
-SFLAGS= -r
-TDEV= -Pver
-TROFF= ditroff $(TDEV)
-DESTDIR=
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
-all: fortune strfile unstr fortunes.dat
+CFLAGS += -O -Werror -Wall
+LIBS = -lc
-fortune: fortune.o rnd.o
- $(CC) ${SEPFLAG} $(CFLAGS) -o fortune fortune.o rnd.o
+OBJS = fortune.o
+MAN = fortune.0
+MANSRC = fortune.6
-strfile: strfile.o rnd.o
- $(CC) ${SEPFLAG} $(CFLAGS) -o strfile strfile.o rnd.o
+all: fortune $(MAN) fortunes.dat
-unstr: unstr.o
- $(CC) ${SEPFLAG} $(CFLAGS) -o unstr unstr.o
+fortune: $(OBJS)
+ $(CC) $(LDFLAGS) -o fortune.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S fortune.elf > fortune.dis
+ $(SIZE) fortune.elf
+ $(ELF2AOUT) fortune.elf $@ && rm fortune.elf
-fortune.o strfile.o unstr.o: strfile.h
+strfile: strfile.o
+ $(CC) $(LDFLAGS) -o strfile strfile.o
-fortunes.dat: fortunes strfile
- ./strfile $(SFLAGS) fortunes
+unstr: unstr.o
+ $(CC) $(LDFLAGS) -o unstr unstr.o
-fortunes: $(FORTUNES)
- cp scene fortunes
- echo "%-" >> fortunes
- cat obscene >> fortunes
+fortunes.dat: #fortunes strfile
+ ./strfile -r fortunes
-lint:
- lint -hxb $(DEFS) fortune.c rnd.c 2>&1 > fortune.lint
- lint -hxb $(DEFS) strfile.c rnd.c 2>&1 > strfile.lint
- lint -hxb $(DEFS) unstr.c 2>&1 > unstr.lint
+fortunes: scene obscene
+ cp scene fortunes
+ echo "%-" >> fortunes
+ cat obscene >> fortunes
-install: all install.data
- install -s -m 4711 -o daemon fortune $(DESTDIR)$(BINDIR)
+$(MAN): $(MANSRC)
+ $(MANROFF) $< > $@
-install.data: fortunes.dat
- install -m 600 -o daemon fortunes.dat $(DESTDIR)$(LIBDIR)
+clean:
+ rm -f *.o *.0 *.elf $(MAN) fortune strfile unstr fortunes *.elf *.dis tags *~
-troff: troff.scene troff.obscene
+install: all
+ install fortune $(DESTDIR)/games/
+ cp $(MAN) $(DESTDIR)/share/man/cat6/
+ cp fortunes.dat $(DESTDIR)/games/lib/
-troff.scene:
- ./Do_troff scene $(TROFF)
-
-troff.obscene:
- ./Do_troff obscene $(TROFF)
-
-clean: sort.clean
- rm -f fortune fortunes fortunes.dat strfile unstr ? core *.o
-
-sort: sort.scene sort.obscene
-
-sort.scene: strfile unstr
- strfile -oi scene
- mv scene Oscene
- unstr -o scene
-
-sort.obscene: strfile unstr
- strfile -oi obscene
- mv obscene Oobscene
- unstr -o obscene
-
-sort.clean:
- rm -f Oscene Oobscene
+#$(OBJS): fortune.h
diff --git a/src/games/fortune/Makefile.orig b/src/games/fortune/Makefile.orig
new file mode 100644
index 0000000..cedde4e
--- /dev/null
+++ b/src/games/fortune/Makefile.orig
@@ -0,0 +1,72 @@
+FORTUNES= scene obscene
+SOURCE= fortune.c strfile.h strfile.c rnd.c unstr.c $(FORTUNES)
+TFILES= Troff.mac Troff.sed Do_troff
+LIBDIR= /usr/games/lib
+BINDIR= /usr/games
+OWN= arnold
+GRP= arpa
+DEFS=
+SEPFLAG= -i
+CFLAGS= -O $(DEFS)
+SFLAGS= -r
+TDEV= -Pver
+TROFF= ditroff $(TDEV)
+DESTDIR=
+
+all: fortune strfile unstr fortunes.dat
+
+fortune: fortune.o rnd.o
+ $(CC) ${SEPFLAG} $(CFLAGS) -o fortune fortune.o rnd.o
+
+strfile: strfile.o rnd.o
+ $(CC) ${SEPFLAG} $(CFLAGS) -o strfile strfile.o rnd.o
+
+unstr: unstr.o
+ $(CC) ${SEPFLAG} $(CFLAGS) -o unstr unstr.o
+
+fortune.o strfile.o unstr.o: strfile.h
+
+fortunes.dat: fortunes strfile
+ ./strfile $(SFLAGS) fortunes
+
+fortunes: $(FORTUNES)
+ cp scene fortunes
+ echo "%-" >> fortunes
+ cat obscene >> fortunes
+
+lint:
+ lint -hxb $(DEFS) fortune.c rnd.c 2>&1 > fortune.lint
+ lint -hxb $(DEFS) strfile.c rnd.c 2>&1 > strfile.lint
+ lint -hxb $(DEFS) unstr.c 2>&1 > unstr.lint
+
+install: all install.data
+ install -s -m 4711 -o daemon fortune $(DESTDIR)$(BINDIR)
+
+install.data: fortunes.dat
+ install -m 600 -o daemon fortunes.dat $(DESTDIR)$(LIBDIR)
+
+troff: troff.scene troff.obscene
+
+troff.scene:
+ ./Do_troff scene $(TROFF)
+
+troff.obscene:
+ ./Do_troff obscene $(TROFF)
+
+clean: sort.clean
+ rm -f fortune fortunes fortunes.dat strfile unstr ? core *.o
+
+sort: sort.scene sort.obscene
+
+sort.scene: strfile unstr
+ strfile -oi scene
+ mv scene Oscene
+ unstr -o scene
+
+sort.obscene: strfile unstr
+ strfile -oi obscene
+ mv obscene Oobscene
+ unstr -o obscene
+
+sort.clean:
+ rm -f Oscene Oobscene
diff --git a/src/games/fortune/fortune.6 b/src/games/fortune/fortune.6
index 150456f..97a000b 100644
--- a/src/games/fortune/fortune.6
+++ b/src/games/fortune/fortune.6
@@ -40,8 +40,8 @@ often used for potentially offensive ones.
.B \-a
Choose from either list of adages.
.PP
-..The user may specify a file of adages.
-..This file must be created by strfile(6),
+.. The user may specify a file of adages.
+.. This file must be created by strfile(6),
..and be given by the user as
...it file.
..Only one such file may be named,
diff --git a/src/games/fortune/fortune.c b/src/games/fortune/fortune.c
index 6253dea..97dae60 100644
--- a/src/games/fortune/fortune.c
+++ b/src/games/fortune/fortune.c
@@ -1,21 +1,31 @@
/* $Header: fortune.c,v 1.10 85/11/01 15:19:49 arnold Exp $ */
-# include
-# include
-# include
-# include "strfile.h"
+#include
+#ifdef CROSS
+# include
+#else
+# include
+#endif
+#include
+#include
+#include
+#include
+#include "strfile.h"
-# define TRUE 1
-# define FALSE 0
-# define bool short
+#define TRUE 1
+#define FALSE 0
-# define MINW 6 /* minimum wait if desired */
-# define CPERS 20 /* # of chars for each sec */
-# define SLEN 160 /* # of chars in short fortune */
+#define MINW 6 /* minimum wait if desired */
+#define CPERS 20 /* # of chars for each sec */
+#define SLEN 160 /* # of chars in short fortune */
-# define FORTFILE "/usr/games/lib/fortunes.dat"
+#ifdef CROSS
+# define FORTFILE "/usr/local/games/fortunes.dat"
+#else
+# define FORTFILE "/games/lib/fortunes.dat"
+#endif
-bool Wflag = FALSE, /* wait desired after fortune */
+int Wflag = FALSE, /* wait desired after fortune */
Sflag = FALSE, /* short fortune desired */
Lflag = FALSE, /* long fortune desired */
Oflag = FALSE, /* offensive fortunes only */
@@ -41,70 +51,11 @@ FILE *Inf; /* input file */
STRFILE Tbl; /* input table */
-time_t time();
-
-main(ac, av)
-int ac;
-char *av[];
-{
- register char c;
- register int nchar = 0;
- register int i;
-
- getargs(ac, av);
- if ((Inf = fopen(Fortfile, "r+")) == NULL) {
- perror(Fortfile);
- exit(-1);
- }
- fread((char *) &Tbl, sizeof Tbl, 1, Inf); /* NOSTRICT */
- if (Tbl.str_longlen <= SLEN && Lflag) {
- puts("Sorry, no long strings in this file");
- exit(0);
- }
- if (Tbl.str_shortlen > SLEN && Sflag) {
- puts("Sorry, no short strings in this file");
- exit(0);
- }
-
- /*
- * initialize the pointer to the first -o fortune if need be.
- */
- if (Tbl.str_delims[2] == 0)
- Tbl.str_delims[2] = Tbl.str_delims[0];
-
- do {
- getfort();
- } while ((Sflag && !is_short()) || (Lflag && !is_long()));
-
- fseek(Inf, Seekpts[0], 0);
- while (c = getc(Inf)) {
- nchar++;
- putchar(c);
- }
- fflush(stdout);
- fseek(Inf, 0L, 0);
-#ifdef LOCK_EX
- /*
- * if we can, we exclusive lock, but since it isn't very
- * important, we just punt if we don't have easy locking
- * available.
- */
- flock(fileno(Inf), LOCK_EX);
-#endif LOCK_EX
- fwrite(&Tbl, 1, sizeof Tbl, Inf);
-#ifdef LOCK_EX
- flock(fileno(Inf), LOCK_UN);
-#endif LOCK_EX
- if (Wflag)
- sleep(max((int) nchar / CPERS, MINW));
- exit(0);
-}
-
/*
* is_short:
* Return TRUE if fortune is "short".
*/
-is_short()
+int is_short()
{
register int nchar;
@@ -121,7 +72,7 @@ is_short()
* is_long:
* Return TRUE if fortune is "long".
*/
-is_long()
+int is_long()
{
register int nchar;
@@ -137,9 +88,7 @@ is_long()
/*
* This routine evaluates the arguments on the command line
*/
-getargs(ac, av)
-register int ac;
-register char *av[];
+void getargs(int ac, char **av)
{
register int i;
register char *sp;
@@ -182,9 +131,9 @@ register char *av[];
* few numbers to avoid any non-
* randomness in startup
*/
- srnd(time(NULL) + getpid());
+ srandom(time(NULL) + getpid());
for (j = 0; j < 20; j++)
- (void) rnd(100);
+ (void) random();
break;
default:
printf("unknown flag: '%c'\n", *sp);
@@ -202,7 +151,7 @@ register char *av[];
* getfort:
* Get the fortune data file's seek pointer for the next fortune.
*/
-getfort()
+void getfort()
{
register int fortune;
@@ -216,7 +165,7 @@ getfort()
Tbl.str_delims[2] = Tbl.str_delims[0];
if (Aflag) {
- if (rnd(Tbl.str_numstr) < Tbl.str_delims[0])
+ if (random() % Tbl.str_numstr < Tbl.str_delims[0])
fortune = Tbl.str_delims[1]++;
else
fortune = Tbl.str_delims[2]++;
@@ -227,11 +176,70 @@ getfort()
fortune = Tbl.str_delims[1]++;
fseek(Inf, (long)(sizeof Seekpts[0]) * fortune + sizeof Tbl, 0);
- fread((char *) Seekpts, (sizeof Seekpts[0]), 2, Inf);
+ if (fread((char *) Seekpts, (sizeof Seekpts[0]), 2, Inf) != 2) {
+ puts("Error reading data from strings file");
+ exit(0);
+ }
}
-max(i, j)
-register int i, j;
+int max(int i, int j)
{
return (i >= j ? i : j);
}
+
+int main(int ac, char **av)
+{
+ register char c;
+ register int nchar = 0;
+
+ getargs(ac, av);
+ if ((Inf = fopen(Fortfile, "r+")) == NULL) {
+ perror(Fortfile);
+ exit(-1);
+ }
+ if (fread((char *) &Tbl, sizeof Tbl, 1, Inf) != 1) {
+ puts("Error reading strings file");
+ exit(0);
+ }
+ if (Tbl.str_longlen <= SLEN && Lflag) {
+ puts("Sorry, no long strings in this file");
+ exit(0);
+ }
+ if (Tbl.str_shortlen > SLEN && Sflag) {
+ puts("Sorry, no short strings in this file");
+ exit(0);
+ }
+
+ /*
+ * initialize the pointer to the first -o fortune if need be.
+ */
+ if (Tbl.str_delims[2] == 0)
+ Tbl.str_delims[2] = Tbl.str_delims[0];
+
+ do {
+ getfort();
+ } while ((Sflag && !is_short()) || (Lflag && !is_long()));
+
+ fseek(Inf, Seekpts[0], 0);
+ while ((c = getc(Inf))) {
+ nchar++;
+ putchar(c);
+ }
+ fflush(stdout);
+ fseek(Inf, 0L, 0);
+#ifdef LOCK_EX
+ /*
+ * if we can, we exclusive lock, but since it isn't very
+ * important, we just punt if we don't have easy locking
+ * available.
+ */
+ flock(fileno(Inf), LOCK_EX);
+#endif
+ fwrite(&Tbl, 1, sizeof Tbl, Inf);
+#ifdef LOCK_EX
+ flock(fileno(Inf), LOCK_UN);
+#endif
+ if (Wflag)
+ sleep(max((int) nchar / CPERS, MINW));
+ exit(0);
+}
diff --git a/src/games/fortune/fortunes.dat b/src/games/fortune/fortunes.dat
new file mode 100644
index 0000000..869c7d7
Binary files /dev/null and b/src/games/fortune/fortunes.dat differ
diff --git a/src/games/fortune/rnd.c b/src/games/fortune/rnd.c
index 946b460..e43c352 100644
--- a/src/games/fortune/rnd.c
+++ b/src/games/fortune/rnd.c
@@ -1,13 +1,14 @@
/*
* code for when the good (berkeley) random number generator is around
*/
+#include
-rnd(num)
+int rnd(int num)
{
return (random() % num);
}
-srnd(num)
+void srnd(int num)
{
srandom(num);
}
@@ -38,7 +39,7 @@ static char sccsid[] = "@(#)random.c 4.2 (Berkeley) 83/01/02";
* zeroeth element of the array is the type of R.N.G. being used (small
* integer); the remainder of the array is the state information for the
* R.N.G. Thus, 32 bytes of state information will give 7 longs worth of
- * state information, which will allow a degree seven polynomial. (Note: the
+ * state information, which will allow a degree seven polynomial. (Note: the
* zeroeth word of state information also has some other information stored
* in it -- see setstate() for details).
* The random number generation technique is a linear feedback shift register
@@ -120,13 +121,13 @@ static int seps[ MAX_TYPES ] = { SEP_0, SEP_1, SEP_2,
*/
static long randtbl[ DEG_3 + 1 ] = { TYPE_3,
- 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
- 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
- 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
- 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
- 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
- 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
- 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
+ 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
+ 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
+ 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
+ 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
+ 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
+ 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
+ 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
0xf5ad9d0e, 0x8999220b, 0x27fb47b9 };
/*
@@ -344,7 +345,7 @@ long
random()
{
long i;
-
+
if( rand_type == TYPE_0 ) {
i = state[0] = ( state[0]*1103515245 + 12345 )&0x7fffffff;
}
@@ -362,4 +363,4 @@ random()
return( i );
}
-#endif NO_RANDOM
+#endif /* NO_RANDOM */
diff --git a/src/games/fortune/strfile.c b/src/games/fortune/strfile.c
index 00ce2aa..b607b3d 100644
--- a/src/games/fortune/strfile.c
+++ b/src/games/fortune/strfile.c
@@ -1,6 +1,16 @@
-# include
-# include
-# include "strfile.h"
+#include
+#ifdef CROSS
+# include
+# include
+#else
+# include
+# include
+#endif
+#include
+#include
+#include
+#include
+#include "strfile.h"
/*
* This program takes a file composed of strings seperated by
@@ -18,7 +28,7 @@
* the run.
* v - Verbose. Give summary of data processed. (Default)
* o - order the strings in alphabetic order
- * i - if ordering, ignore case
+ * i - if ordering, ignore case
* r - randomize the order of the strings
*
* Ken Arnold Sept. 7, 1978 --
@@ -31,10 +41,10 @@
* Added ordering options.
*/
-# define TRUE 1
-# define FALSE 0
+#define TRUE 1
+#define FALSE 0
-# define DELIM_CH '-'
+#define DELIM_CH '-'
typedef struct {
char first;
@@ -71,13 +81,187 @@ STRFILE Tbl; /* statistics table */
STR *Firstch; /* first chars of each string */
-char *fgets(), *malloc(), *strcpy(), *strcat();
+/*
+ * This routine evaluates arguments from the command line
+ */
+void getargs(int ac, char **av)
+{
+ register char *sp;
+ register int i;
+ register int bad, j;
-long ftell();
+ bad = 0;
+ for (i = 1; i < ac; i++)
+ if (*av[i] == '-' && av[i][1]) {
+ for (sp = &av[i][1]; *sp; sp++)
+ switch (*sp) {
+ case 'c': /* new delimiting char */
+ if ((Delimch = *++sp) == '\0') {
+ --sp;
+ Delimch = *av[++i];
+ }
+ if (Delimch <= 0 || Delimch > '~' ||
+ Delimch == DELIM_CH) {
+ printf("bad delimiting character: '\\%o\n'",
+ Delimch);
+ bad++;
+ }
+ break;
+ case 's': /* silent */
+ Sflag++;
+ break;
+ case 'v': /* verbose */
+ Sflag = 0;
+ break;
+ case 'o': /* order strings */
+ Oflag++;
+ break;
+ case 'i': /* ignore case in ordering */
+ Iflag++;
+ break;
+ case 'r': /* ignore case in ordering */
+ Rflag++;
+ break;
+ default: /* unknown flag */
+ bad++;
+ printf("bad flag: '%c'\n", *sp);
+ break;
+ }
+ }
+ else if (*av[i] == '-') {
+ for (j = 0; Usage[j]; j++)
+ puts(Usage[j]);
+ exit(0);
+ }
+ else if (Infile)
+ (void) strcpy(Outfile, av[i]);
+ else
+ Infile = av[i];
+ if (!Infile) {
+ bad++;
+ puts("No input file name");
+ }
+ if (*Outfile == '\0' && !bad) {
+ (void) strcpy(Outfile, Infile);
+ (void) strcat(Outfile, ".dat");
+ }
+ if (bad) {
+ puts("use \"strfile -\" to get usage");
+ exit(-1);
+ }
+}
-main(ac, av)
-int ac;
-char **av;
+/*
+ * do_order:
+ * Order the strings alphabetically (possibly ignoring case).
+ */
+void do_order(long *seekpts, FILE *outf)
+{
+ register int i;
+ register long *lp;
+ register STR *fp;
+ extern int cmp_str();
+
+ (void) fflush(outf);
+ Sort_1 = fopen(Outfile, "r");
+ Sort_2 = fopen(Outfile, "r");
+ Seekpts = seekpts;
+ qsort((char *) Firstch, Tbl.str_numstr, sizeof *Firstch, cmp_str);
+ i = Tbl.str_numstr;
+ lp = seekpts;
+ fp = Firstch;
+ while (i--)
+ *lp++ = fp++->pos;
+ (void) fclose(Sort_1);
+ (void) fclose(Sort_2);
+ Tbl.str_flags |= STR_ORDERED;
+}
+
+/*
+ * cmp_str:
+ * Compare two strings in the file
+ */
+int cmp_str(STR *p1, STR *p2)
+{
+ register int c1, c2;
+
+ c1 = p1->first;
+ c2 = p2->first;
+ if (c1 != c2)
+ return c1 - c2;
+
+ (void) fseek(Sort_1, p1->pos, 0);
+ (void) fseek(Sort_2, p2->pos, 0);
+
+ while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0')
+ continue;
+ while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0')
+ continue;
+
+ while (c1 != '\0' && c2 != '\0') {
+ if (Iflag) {
+ if (isupper(c1))
+ c1 = tolower(c1);
+ if (isupper(c2))
+ c2 = tolower(c2);
+ }
+ if (c1 != c2)
+ return c1 - c2;
+ c1 = getc(Sort_1);
+ c2 = getc(Sort_2);
+ }
+ return c1 - c2;
+}
+
+/*
+ * randomize:
+ * Randomize the order of the string table. We must be careful
+ * not to randomize across delimiter boundaries. All
+ * randomization is done within each block.
+ */
+void randomize(long *seekpts)
+{
+ register int cnt, i, j, start;
+ register long tmp;
+ register long *origsp;
+
+ Tbl.str_flags |= STR_RANDOM;
+ srandom(time((long *) NULL) + getpid());
+ origsp = seekpts;
+ for (j = 0; j <= Delim; j++) {
+
+ /*
+ * get the starting place for the block
+ */
+
+ if (j == 0)
+ start = 0;
+ else
+ start = Tbl.str_delims[j - 1];
+
+ /*
+ * get the ending point
+ */
+
+ if (j == Delim)
+ cnt = Tbl.str_numstr;
+ else
+ cnt = Tbl.str_delims[j];
+
+ /*
+ * move things around randomly
+ */
+
+ for (seekpts = &origsp[start]; cnt > start; cnt--, seekpts++) {
+ i = random() % (cnt - start);
+ tmp = seekpts[0];
+ seekpts[0] = seekpts[i];
+ seekpts[i] = tmp;
+ }
+ }
+}
+
+int main(int ac, char **av)
{
register char *sp, dc;
register long *lp;
@@ -206,189 +390,3 @@ char **av;
}
exit(0);
}
-
-/*
- * This routine evaluates arguments from the command line
- */
-getargs(ac, av)
-register int ac;
-register char **av;
-{
- register char *sp;
- register int i;
- register int bad, j;
-
- bad = 0;
- for (i = 1; i < ac; i++)
- if (*av[i] == '-' && av[i][1]) {
- for (sp = &av[i][1]; *sp; sp++)
- switch (*sp) {
- case 'c': /* new delimiting char */
- if ((Delimch = *++sp) == '\0') {
- --sp;
- Delimch = *av[++i];
- }
- if (Delimch <= 0 || Delimch > '~' ||
- Delimch == DELIM_CH) {
- printf("bad delimiting character: '\\%o\n'",
- Delimch);
- bad++;
- }
- break;
- case 's': /* silent */
- Sflag++;
- break;
- case 'v': /* verbose */
- Sflag = 0;
- break;
- case 'o': /* order strings */
- Oflag++;
- break;
- case 'i': /* ignore case in ordering */
- Iflag++;
- break;
- case 'r': /* ignore case in ordering */
- Rflag++;
- break;
- default: /* unknown flag */
- bad++;
- printf("bad flag: '%c'\n", *sp);
- break;
- }
- }
- else if (*av[i] == '-') {
- for (j = 0; Usage[j]; j++)
- puts(Usage[j]);
- exit(0);
- }
- else if (Infile)
- (void) strcpy(Outfile, av[i]);
- else
- Infile = av[i];
- if (!Infile) {
- bad++;
- puts("No input file name");
- }
- if (*Outfile == '\0' && !bad) {
- (void) strcpy(Outfile, Infile);
- (void) strcat(Outfile, ".dat");
- }
- if (bad) {
- puts("use \"strfile -\" to get usage");
- exit(-1);
- }
-}
-
-/*
- * do_order:
- * Order the strings alphabetically (possibly ignoring case).
- */
-do_order(seekpts, outf)
-long *seekpts;
-FILE *outf;
-{
- register int i;
- register long *lp;
- register STR *fp;
- extern int cmp_str();
-
- (void) fflush(outf);
- Sort_1 = fopen(Outfile, "r");
- Sort_2 = fopen(Outfile, "r");
- Seekpts = seekpts;
- qsort((char *) Firstch, Tbl.str_numstr, sizeof *Firstch, cmp_str);
- i = Tbl.str_numstr;
- lp = seekpts;
- fp = Firstch;
- while (i--)
- *lp++ = fp++->pos;
- (void) fclose(Sort_1);
- (void) fclose(Sort_2);
- Tbl.str_flags |= STR_ORDERED;
-}
-
-/*
- * cmp_str:
- * Compare two strings in the file
- */
-cmp_str(p1, p2)
-STR *p1, *p2;
-{
- register int c1, c2;
-
- c1 = p1->first;
- c2 = p2->first;
- if (c1 != c2)
- return c1 - c2;
-
- (void) fseek(Sort_1, p1->pos, 0);
- (void) fseek(Sort_2, p2->pos, 0);
-
- while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0')
- continue;
- while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0')
- continue;
-
- while (c1 != '\0' && c2 != '\0') {
- if (Iflag) {
- if (isupper(c1))
- c1 = tolower(c1);
- if (isupper(c2))
- c2 = tolower(c2);
- }
- if (c1 != c2)
- return c1 - c2;
- c1 = getc(Sort_1);
- c2 = getc(Sort_2);
- }
- return c1 - c2;
-}
-
-/*
- * randomize:
- * Randomize the order of the string table. We must be careful
- * not to randomize across delimiter boundaries. All
- * randomization is done within each block.
- */
-randomize(seekpts)
-register long *seekpts;
-{
- register int cnt, i, j, start;
- register long tmp;
- register long *origsp;
-
- Tbl.str_flags |= STR_RANDOM;
- srnd(time((long *) NULL) + getpid());
- origsp = seekpts;
- for (j = 0; j <= Delim; j++) {
-
- /*
- * get the starting place for the block
- */
-
- if (j == 0)
- start = 0;
- else
- start = Tbl.str_delims[j - 1];
-
- /*
- * get the ending point
- */
-
- if (j == Delim)
- cnt = Tbl.str_numstr;
- else
- cnt = Tbl.str_delims[j];
-
- /*
- * move things around randomly
- */
-
- for (seekpts = &origsp[start]; cnt > start; cnt--, seekpts++) {
- i = rnd(cnt - start);
- tmp = seekpts[0];
- seekpts[0] = seekpts[i];
- seekpts[i] = tmp;
- }
- }
-}
diff --git a/src/games/hangman/.gitignore b/src/games/hangman/.gitignore
new file mode 100644
index 0000000..2469edc
--- /dev/null
+++ b/src/games/hangman/.gitignore
@@ -0,0 +1 @@
+hangman
diff --git a/src/games/hangman/Makefile b/src/games/hangman/Makefile
index 99bd640..4c08ea3 100644
--- a/src/games/hangman/Makefile
+++ b/src/games/hangman/Makefile
@@ -1,22 +1,28 @@
-OBJS= endgame.o extern.o getguess.o getword.o main.o playgame.o \
- prdata.o prman.o prword.o setup.o
-CFILES= endgame.c extern.c getguess.c getword.c main.c playgame.c \
- prdata.c prman.c prword.c setup.c
-HDRS= hangman.h
-CFLAGS= -O
-LDFLAGS=
-SEPFLAG= -i
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
-all: hangman
+CFLAGS += -Werror -Wall
-tags: $(HDRS) $(CFILES)
- ctags $(HDRS) $(CFILES)
+OBJS = endgame.o extern.o getguess.o getword.o main.o playgame.o \
+ prdata.o prman.o prword.o setup.o
+MAN = hangman.0
+LIBS = -lcurses -ltermcap -lc
-install: hangman
- install -s hangman $(DESTDIR)/usr/games/hangman
-
-hangman: $(OBJS)
- $(CC) ${SEPFLAG} $(LDFLAGS) -o hangman $(OBJS) -lcurses -ltermlib
+all: hangman $(MAN)
+
+hangman: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
+
+$(MAN): hangman.6
+ nroff -man $< > $@
clean:
- rm -f $(OBJS) hangman ? core
+ rm -f *.o core hangman *.0 *.dis
+
+install: all
+ install hangman $(DESTDIR)/games/
+ install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/
diff --git a/src/games/hangman/endgame.c b/src/games/hangman/endgame.c
index 4bbe4cb..7a531d4 100644
--- a/src/games/hangman/endgame.c
+++ b/src/games/hangman/endgame.c
@@ -1,9 +1,10 @@
-# include "hangman.h"
+#include "hangman.h"
/*
* endgame:
* Do what's necessary at the end of the game
*/
+void
endgame()
{
register char ch;
@@ -24,7 +25,7 @@ endgame()
leaveok(stdscr, FALSE);
refresh();
if ((ch = readch()) == 'n')
- die();
+ die(0);
else if (ch == 'y')
break;
mvaddstr(MESGY + 2, MESGX, "Please type 'y' or 'n'");
diff --git a/src/games/hangman/extern.c b/src/games/hangman/extern.c
index 4b4fc47..7d3227f 100644
--- a/src/games/hangman/extern.c
+++ b/src/games/hangman/extern.c
@@ -1,4 +1,4 @@
-# include "hangman.h"
+#include "hangman.h"
bool Guessed[26];
diff --git a/src/games/hangman/getguess.c b/src/games/hangman/getguess.c
index 3aa31b0..531dba0 100644
--- a/src/games/hangman/getguess.c
+++ b/src/games/hangman/getguess.c
@@ -1,9 +1,41 @@
-# include "hangman.h"
+#include
+#include "hangman.h"
+
+#ifndef CTRL
+# define CTRL(c) (c & 037)
+#endif
+
+/*
+ * readch;
+ * Read a character from the input
+ */
+int
+readch()
+{
+ register int cnt;
+ auto char ch;
+
+ cnt = 0;
+ for (;;) {
+ if (read(0, &ch, sizeof ch) <= 0)
+ {
+ if (++cnt > 100)
+ die(0);
+ }
+ else if (ch == CTRL('L')) {
+ wrefresh(curscr);
+ mvcur(0, 0, curscr->_cury, curscr->_curx);
+ }
+ else
+ return ch;
+ }
+}
/*
* getguess:
* Get another guess
*/
+void
getguess()
{
register int i;
@@ -23,8 +55,8 @@ getguess()
else
break;
}
- else if (ch == CTRL(D))
- die();
+ else if (ch == CTRL('D'))
+ die(0);
else
mvprintw(MESGY, MESGX, "Not a valid guess: '%s'",
unctrl(ch));
@@ -43,28 +75,3 @@ getguess()
if (!correct)
Errors++;
}
-
-/*
- * readch;
- * Read a character from the input
- */
-readch()
-{
- register int cnt, r;
- auto char ch;
-
- cnt = 0;
- for (;;) {
- if (read(0, &ch, sizeof ch) <= 0)
- {
- if (++cnt > 100)
- die();
- }
- else if (ch == CTRL(L)) {
- wrefresh(curscr);
- mvcur(0, 0, curscr->_cury, curscr->_curx);
- }
- else
- return ch;
- }
-}
diff --git a/src/games/hangman/getword.c b/src/games/hangman/getword.c
index b28c0ce..0fb6545 100644
--- a/src/games/hangman/getword.c
+++ b/src/games/hangman/getword.c
@@ -1,15 +1,26 @@
-# include "hangman.h"
+#include
+#include
+#include "hangman.h"
-# if pdp11
-# define RN (((off_t) rand() << 16) | (off_t) rand())
-# else
-# define RN rand()
-# endif
+/*
+ * abs:
+ * Return the absolute value of an integer
+ */
+off_t
+offabs(i)
+off_t i;
+{
+ if (i < 0)
+ return -(off_t) i;
+ else
+ return (off_t) i;
+}
/*
* getword:
* Get a valid word out of the dictionary file
*/
+void
getword()
{
register FILE *inf;
@@ -17,7 +28,7 @@ getword()
inf = Dict;
for (;;) {
- fseek(inf, abs(RN % Dict_size), 0);
+ fseek(inf, offabs(random() % Dict_size), 0);
if (fgets(Word, BUFSIZ, inf) == NULL)
continue;
if (fgets(Word, BUFSIZ, inf) == NULL)
@@ -39,17 +50,3 @@ cont: ;
}
*gp = '\0';
}
-
-/*
- * abs:
- * Return the absolute value of an integer
- */
-off_t
-abs(i)
-off_t i;
-{
- if (i < 0)
- return -(off_t) i;
- else
- return (off_t) i;
-}
diff --git a/src/games/hangman/hangman.h b/src/games/hangman/hangman.h
index 78af604..05011e4 100644
--- a/src/games/hangman/hangman.h
+++ b/src/games/hangman/hangman.h
@@ -1,26 +1,30 @@
-# include
-# include
-# include
-# include
-# include
+#include
+#include
+#include
+#include
+#include
+#include
-# define MINLEN 6
-# define MAXERRS 7
-# define DICT "/usr/dict/words"
-
-# define MESGY 12
-# define MESGX 0
-# define PROMPTY 11
-# define PROMPTX 0
-# define KNOWNY 10
-# define KNOWNX 1
-# define NUMBERY 4
-# define NUMBERX (COLS - 1 - 26)
-# define AVGY 5
-# define AVGX (COLS - 1 - 26)
-# define GUESSY 2
-# define GUESSX (COLS - 1 - 26)
+#define MINLEN 6
+#define MAXERRS 7
+#ifdef CROSS
+# define DICT "/usr/local/share/dict/words"
+#else
+# define DICT "/share/dict/words"
+#endif
+#define MESGY 12
+#define MESGX 0
+#define PROMPTY 11
+#define PROMPTX 0
+#define KNOWNY 10
+#define KNOWNX 1
+#define NUMBERY 4
+#define NUMBERX (COLS - 1 - 26)
+#define AVGY 5
+#define AVGX (COLS - 1 - 26)
+#define GUESSY 2
+#define GUESSX (COLS - 1 - 26)
typedef struct {
short y, x;
@@ -41,6 +45,15 @@ extern FILE *Dict;
extern off_t Dict_size;
-int die();
+void die(int);
-off_t abs();
+off_t offabs(off_t);
+void prman(void);
+void prword(void);
+void prdata(void);
+void setup(void);
+void playgame(void);
+void getword(void);
+void getguess(void);
+void endgame(void);
+int readch(void);
diff --git a/src/games/hangman/main.c b/src/games/hangman/main.c
index 5a03d83..3bfc280 100644
--- a/src/games/hangman/main.c
+++ b/src/games/hangman/main.c
@@ -1,9 +1,22 @@
-# include "hangman.h"
+#include
+#include "hangman.h"
+
+/*
+ * die:
+ * Die properly.
+ */
+void die(int sig)
+{
+ mvcur(0, COLS - 1, LINES - 1, 0);
+ endwin();
+ putchar('\n');
+ exit(0);
+}
/*
* This game written by Ken Arnold.
*/
-main()
+int main()
{
initscr();
signal(SIGINT, die);
@@ -15,15 +28,3 @@ main()
}
/* NOTREACHED */
}
-
-/*
- * die:
- * Die properly.
- */
-die()
-{
- mvcur(0, COLS - 1, LINES - 1, 0);
- endwin();
- putchar('\n');
- exit(0);
-}
diff --git a/src/games/hangman/playgame.c b/src/games/hangman/playgame.c
index d0ca809..74166e1 100644
--- a/src/games/hangman/playgame.c
+++ b/src/games/hangman/playgame.c
@@ -1,9 +1,11 @@
-# include "hangman.h"
+#include
+#include "hangman.h"
/*
* playgame:
* play a game
*/
+void
playgame()
{
register bool *bp;
diff --git a/src/games/hangman/prdata.c b/src/games/hangman/prdata.c
index 8874bca..1bdcd2b 100644
--- a/src/games/hangman/prdata.c
+++ b/src/games/hangman/prdata.c
@@ -1,9 +1,10 @@
-# include "hangman.h"
+#include "hangman.h"
/*
* prdata:
* Print out the current guesses
*/
+void
prdata()
{
register bool *bp;
diff --git a/src/games/hangman/prman.c b/src/games/hangman/prman.c
index 4d1d976..eaba163 100644
--- a/src/games/hangman/prman.c
+++ b/src/games/hangman/prman.c
@@ -1,10 +1,11 @@
-# include "hangman.h"
+#include "hangman.h"
/*
* prman:
* Print out the man appropriately for the give number
* of incorrect guesses.
*/
+void
prman()
{
register int i;
diff --git a/src/games/hangman/prword.c b/src/games/hangman/prword.c
index 1770028..29a8072 100644
--- a/src/games/hangman/prword.c
+++ b/src/games/hangman/prword.c
@@ -1,9 +1,10 @@
-# include "hangman.h"
+#include "hangman.h"
/*
* prword:
* Print out the current state of the word
*/
+void
prword()
{
move(KNOWNY, KNOWNX + sizeof "Word: ");
diff --git a/src/games/hangman/setup.c b/src/games/hangman/setup.c
index bda8511..73353e2 100644
--- a/src/games/hangman/setup.c
+++ b/src/games/hangman/setup.c
@@ -1,9 +1,13 @@
-# include "hangman.h"
+#include
+#include
+#include
+#include "hangman.h"
/*
* setup:
* Set up the strings on the screen.
*/
+void
setup()
{
register char **sp;
@@ -24,7 +28,7 @@ setup()
addstr(*sp);
}
- srand(time(NULL) + getpid());
+ srandom(time(NULL) + getpid());
if ((Dict = fopen(DICT, "r")) == NULL) {
perror(DICT);
endwin();
diff --git a/src/games/mille/.gitignore b/src/games/mille/.gitignore
new file mode 100644
index 0000000..712ad3d
--- /dev/null
+++ b/src/games/mille/.gitignore
@@ -0,0 +1 @@
+mille
diff --git a/src/games/mille/Makefile b/src/games/mille/Makefile
index 4f40253..2a7bccb 100644
--- a/src/games/mille/Makefile
+++ b/src/games/mille/Makefile
@@ -1,75 +1,32 @@
#
# mille bourne game makefile
#
-HEADERS=mille.h
-CFILES= comp.c end.c extern.c init.c mille.c misc.c move.c print.c \
- roll.c save.c types.c varpush.c
-OBJS= comp.o end.o extern.o init.o mille.o misc.o move.o print.o \
- roll.o save.o types.o varpush.o
-POBJS= comp.po end.po extern.po init.po mille.po misc.po move.po \
- roll.po print.po save.po types.po varpush.po
-# CRL= /jb/ingres/arnold/=lib/=curses/crlib
-# CRL= =curses/screen/libcurses.a
-CRL=
-# L= -ltermlib
-L= -lcurses -ltermlib
-LIBS= ${CRL} ${L}
-DEFS=
-CFLAGS= -O ${DEFS}
-SEPFLAG= -i
-LDFLAGS=
-DESTDIR=
-BINDIR= /usr/games
-.SUFFIXES: .po .i
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
+#CFLAGS = -O -DCROSS -Werror -Wall
-.c.po:
- rm -f x.c ; ln $*.c x.c
- ${CC} ${CFLAGS} -p -c x.c
- mv x.o $*.po
+CFLAGS += -Werror -Wall
-.c.i:
- ${CC} ${LDFLAGS} -P $*.c
+OBJS = comp.o end.o extern.o init.o mille.o misc.o move.o print.o \
+ roll.o save.o types.o varpush.o
+MAN = mille.0
+LIBS = -lcurses -ltermcap -lc
-a.out: ${OBJS} ${CRL}
- ${CC} ${SEPFLAG} ${LDFLAGS} ${OBJS} ${LIBS}
+all: mille $(MAN)
-mille: ${OBJS} ${CRL}
- ${CC} ${SEPFLAG} ${CFLAGS} -o mille ${OBJS} ${LIBS}
+mille: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
-install: mille
- install -s mille ${DESTDIR}${BINDIR}
-
-pmb: ${POBJS} ../pcrlib
- ${CC} ${SEPFLAG} ${CFLAGS} -p -o pmb ${POBJS} ../pcrlib -ltermlib
-
-mille.po: mille.c
- rm -f x.c ; ln mille.c x.c
- ${CC} ${CFLAGS} -DPROF -p -c x.c
- mv x.o mille.po
-
-table: table.o extern.o
- ${CC} ${SEPFLAG} ${CFLAGS} -i -o table table.o extern.o
-
-readdump: readdump.o extern.o varpush.o
- ${CC} ${SEPFLAG} ${CFLAGS} -i -o readdump readdump.o extern.o varpush.o
-
-ctags:
- ctags ${HEADERS} ${CFILES}
- ed - tags < :ctfix
- sort tags -o tags
-
-lint:
- lint -hxb ${DEFS} ${CFILES} ${L} > lint.out
-
-mille.ar:
- ar ruv mille.ar Makefile tags ${HEADERS} ${CFILES}
-
-tar:
- tar rvf /dev/rmt0 Makefile tags :ctfix ${HEADERS} ${CFILES}
-
-lpr:
- pr Makefile ${HEADERS} ${CFILES} tags | lpr ; lpq
+$(MAN): mille.6
+ nroff -man $< > $@
clean:
- rm -f ${OBJS} ${POBJS} core ? a.out errs mille lint.out mille.ar \
- tags pmb
+ rm -f *.o core mille *.0 *.dis
+
+install: all
+ install mille $(DESTDIR)/games/
+ install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/
diff --git a/src/games/mille/comp.c b/src/games/mille/comp.c
index c5faa90..c0f5d3e 100644
--- a/src/games/mille/comp.c
+++ b/src/games/mille/comp.c
@@ -1,11 +1,12 @@
-# include "mille.h"
+#include "mille.h"
/*
* @(#)comp.c 1.1 (Berkeley) 4/1/82
*/
-# define V_VALUABLE 40
+#define V_VALUABLE 40
+void
calcmove()
{
register CARD card;
@@ -33,7 +34,8 @@ calcmove()
switch (card) {
case C_STOP: case C_CRASH:
case C_FLAT: case C_EMPTY:
- if (playit[i] = canplay(pp, op, card))
+ playit[i] = canplay(pp, op, card);
+ if (playit[i])
canstop = TRUE;
goto norm;
case C_LIMIT:
@@ -350,6 +352,7 @@ play_it:
mvprintw(MOVE_Y + 2, MOVE_X, "%16s", C_name[pp->hand[Card_no]]);
}
+int
onecard(pp)
register PLAY *pp;
{
@@ -382,6 +385,7 @@ register PLAY *pp;
return FALSE;
}
+int
canplay(pp, op, card)
register PLAY *pp, *op;
register CARD card;
diff --git a/src/games/mille/end.c b/src/games/mille/end.c
index 34ca469..2c58d58 100644
--- a/src/games/mille/end.c
+++ b/src/games/mille/end.c
@@ -8,10 +8,11 @@
* print out the score as if it was final, and add the totals for
* the end-of-games points to the user who deserves it (if any).
*/
+void
finalscore(pp)
-reg PLAY *pp; {
+PLAY *pp; {
- reg int temp, tot, num;
+ int temp, tot, num;
if (pp->was_finished == Finished)
return;
@@ -45,13 +46,14 @@ reg PLAY *pp; {
}
}
-# ifdef EXTRAP
+#ifdef EXTRAP
static int Last_tot[2]; /* last tot used for extrapolate */
/*
* print out the score as if it was final, and add the totals for
* the end-of-games points to the user who deserves it (if any).
*/
+void
extrapolate(pp)
reg PLAY *pp; {
@@ -96,6 +98,7 @@ reg PLAY *pp; {
Last_tot[num] = tot;
}
+void
undoex() {
reg PLAY *pp;
@@ -107,5 +110,4 @@ undoex() {
pp->hand_tot -= Last_tot[i++];
}
}
-# endif
-
+#endif
diff --git a/src/games/mille/extern.c b/src/games/mille/extern.c
index d762c81..b16781a 100644
--- a/src/games/mille/extern.c
+++ b/src/games/mille/extern.c
@@ -25,7 +25,7 @@ char *C_fmt = "%-18.18s", /* format for printing cards */
"Flat Tire",
"Accident",
"Stop",
- "Speed Limit",
+ "Speed Limit",
"Gasoline",
"Spare Tire",
"Repairs",
@@ -71,7 +71,7 @@ int Card_no, /* Card number for current move */
1, /* C_RIGHT_WAY */
0 /* C_INIT */
};
- Numneed[NUM_CARDS] = { /* number of cards needed per hand */
+int Numneed[NUM_CARDS] = { /* number of cards needed per hand */
0, /* C_25 */
0, /* C_50 */
0, /* C_75 */
@@ -132,4 +132,3 @@ PLAY Player[2]; /* Player descriptions */
WINDOW *Board, /* Playing field screen */
*Miles, /* Mileage screen */
*Score; /* Score screen */
-
diff --git a/src/games/mille/init.c b/src/games/mille/init.c
index 32e90e9..5f3d0af 100644
--- a/src/games/mille/init.c
+++ b/src/games/mille/init.c
@@ -1,14 +1,15 @@
-# include "mille.h"
+#include "mille.h"
+#include
/*
* @(#)init.c 1.1 (Berkeley) 4/1/82
*/
-
+void
init() {
- reg PLAY *pp;
- reg int i, j;
- reg CARD card;
+ PLAY *pp;
+ int i, j;
+ CARD card;
bzero(Numseen, sizeof Numseen);
Numgos = 0;
@@ -47,10 +48,11 @@ init() {
End = 700;
}
+void
shuffle() {
- reg int i, r;
- reg CARD temp;
+ int i, r;
+ CARD temp;
for (i = 0; i < DECK_SZ; i++) {
r = roll(1, DECK_SZ) - 1;
@@ -65,6 +67,7 @@ shuffle() {
Topcard = &Deck[DECK_SZ];
}
+void
newboard() {
register int i;
@@ -123,10 +126,11 @@ newboard() {
newscore();
}
+void
newscore() {
- reg int i, new;
- register PLAY *pp;
+ int i, new;
+ register PLAY *pp = 0;
static int was_full = -1;
static int last_win = -1;
diff --git a/src/games/mille/mille.c b/src/games/mille/mille.c
index 55d9673..cdd1bf0 100644
--- a/src/games/mille/mille.c
+++ b/src/games/mille/mille.c
@@ -1,23 +1,38 @@
-# include "mille.h"
-# include
-# ifdef attron
-# include
-# endif attron
+#include "mille.h"
+#include
+#include
+#include
+#include
+#ifdef attron
+# include
+#endif
/*
* @(#)mille.c 1.3.1 (2.11BSD GTE) 1/16/95
*/
-int rub();
-
char _sobuf[BUFSIZ];
-main(ac, av)
-reg int ac;
-reg char *av[]; {
+/*
+ * Routine to trap rubouts, and make sure they really want to
+ * quit.
+ */
+void
+rub(int sig) {
- reg bool restore;
- double avs[3];
+ signal(SIGINT, SIG_IGN);
+ if (getyn(REALLYPROMPT))
+ die();
+ signal(SIGINT, rub);
+}
+
+int
+main(ac, av)
+int ac;
+char *av[]; {
+
+ bool restore;
+ unsigned avs[3];
if (strcmp(av[0], "a.out") == 0) {
outf = fopen("q", "w");
@@ -26,8 +41,7 @@ reg char *av[]; {
}
restore = FALSE;
- getloadavg(avs, 3);
- if (avs[2] > 4.0) {
+ if (getloadavg(avs, 3) >= 0 && avs[2] > 400) {
printf("Sorry. The load average is too high.\n");
printf("Please try again later\n");
exit(1);
@@ -108,21 +122,10 @@ reg char *av[]; {
}
}
-/*
- * Routine to trap rubouts, and make sure they really want to
- * quit.
- */
-rub() {
-
- signal(SIGINT, SIG_IGN);
- if (getyn(REALLYPROMPT))
- die();
- signal(SIGINT, rub);
-}
-
/*
* Time to go beddy-by
*/
+void
die() {
signal(SIGINT, SIG_IGN);
@@ -132,4 +135,3 @@ die() {
endwin();
exit(1);
}
-
diff --git a/src/games/mille/mille.h b/src/games/mille/mille.h
index 433e080..4053b9b 100644
--- a/src/games/mille/mille.h
+++ b/src/games/mille/mille.h
@@ -1,5 +1,5 @@
-# include
-# include "curses.h"
+#include
+#include "curses.h"
/*
* @(#)mille.h 1.1 (Berkeley) 4/1/82
@@ -9,125 +9,117 @@
* Miscellaneous constants
*/
-# define unsgn unsigned
-# define CARD short
+#define unsgn unsigned
+#define CARD short
-# define ARNOLD 214 /* my uid */
+#define ARNOLD 214 /* my uid */
-# define GURP 28672 /* bad uid */
-# define MAXUSERS 35 /* max # of users for startup */
-# define HAND_SZ 7 /* number of cards in a hand */
-# define DECK_SZ 101 /* number of cards in decks */
-# define NUM_SAFE 4 /* number of saftey cards */
-# define NUM_MILES 5 /* number of milestones types */
-# define NUM_CARDS 20 /* number of types of cards */
-# define BOARD_Y 17 /* size of board screen */
-# define BOARD_X 40
-# define MILES_Y 7 /* size of mileage screen */
-# define MILES_X 80
-# define SCORE_Y 17 /* size of score screen */
-# define SCORE_X 40
-# define MOVE_Y 10 /* Where to print move prompt */
-# define MOVE_X 20
-# define ERR_Y 15 /* Where to print errors */
-# define ERR_X 5
-# define EXT_Y 4 /* Where to put Extension */
-# define EXT_X 9
+#define GURP 28672 /* bad uid */
+#define MAXUSERS 35 /* max # of users for startup */
+#define HAND_SZ 7 /* number of cards in a hand */
+#define DECK_SZ 101 /* number of cards in decks */
+#define NUM_SAFE 4 /* number of saftey cards */
+#define NUM_MILES 5 /* number of milestones types */
+#define NUM_CARDS 20 /* number of types of cards */
+#define BOARD_Y 17 /* size of board screen */
+#define BOARD_X 40
+#define MILES_Y 7 /* size of mileage screen */
+#define MILES_X 80
+#define SCORE_Y 17 /* size of score screen */
+#define SCORE_X 40
+#define MOVE_Y 10 /* Where to print move prompt */
+#define MOVE_X 20
+#define ERR_Y 15 /* Where to print errors */
+#define ERR_X 5
+#define EXT_Y 4 /* Where to put Extension */
+#define EXT_X 9
-# define PLAYER 0
-# define COMP 1
+#define PLAYER 0
+#define COMP 1
-# define W_SMALL 0 /* Small (initial) window */
-# define W_FULL 1 /* Full (final) window */
+#define W_SMALL 0 /* Small (initial) window */
+#define W_FULL 1 /* Full (final) window */
/*
* Move types
*/
-# define M_DISCARD 0
-# define M_DRAW 1
-# define M_PLAY 2
-# define M_ORDER 3
+#define M_DISCARD 0
+#define M_DRAW 1
+#define M_PLAY 2
+#define M_ORDER 3
/*
* Scores
*/
-# define SC_SAFETY 100
-# define SC_ALL_SAFE 300
-# define SC_COUP 300
-# define SC_TRIP 400
-# define SC_SAFE 300
-# define SC_DELAY 300
-# define SC_EXTENSION 200
-# define SC_SHUT_OUT 500
+#define SC_SAFETY 100
+#define SC_ALL_SAFE 300
+#define SC_COUP 300
+#define SC_TRIP 400
+#define SC_SAFE 300
+#define SC_DELAY 300
+#define SC_EXTENSION 200
+#define SC_SHUT_OUT 500
/*
* safety descriptions
*/
-# define S_UNKNOWN 0 /* location of safety unknown */
-# define S_IN_HAND 1 /* safety in player's hand */
-# define S_PLAYED 2 /* safety has been played */
-# define S_GAS_SAFE 0 /* Gas safety card index */
-# define S_SPARE_SAFE 1 /* Tire safety card index */
-# define S_DRIVE_SAFE 2 /* Driveing safety card index */
-# define S_RIGHT_WAY 3 /* Right-of-Way card index */
-# define S_CONV 15 /* conversion from C_ to S_ */
+#define S_UNKNOWN 0 /* location of safety unknown */
+#define S_IN_HAND 1 /* safety in player's hand */
+#define S_PLAYED 2 /* safety has been played */
+#define S_GAS_SAFE 0 /* Gas safety card index */
+#define S_SPARE_SAFE 1 /* Tire safety card index */
+#define S_DRIVE_SAFE 2 /* Driveing safety card index */
+#define S_RIGHT_WAY 3 /* Right-of-Way card index */
+#define S_CONV 15 /* conversion from C_ to S_ */
/*
* card numbers
*/
-# define C_INIT -1
-# define C_25 0
-# define C_50 1
-# define C_75 2
-# define C_100 3
-# define C_200 4
-# define C_EMPTY 5
-# define C_FLAT 6
-# define C_CRASH 7
-# define C_STOP 8
-# define C_LIMIT 9
-# define C_GAS 10
-# define C_SPARE 11
-# define C_REPAIRS 12
-# define C_GO 13
-# define C_END_LIMIT 14
-# define C_GAS_SAFE 15
-# define C_SPARE_SAFE 16
-# define C_DRIVE_SAFE 17
-# define C_RIGHT_WAY 18
+#define C_INIT -1
+#define C_25 0
+#define C_50 1
+#define C_75 2
+#define C_100 3
+#define C_200 4
+#define C_EMPTY 5
+#define C_FLAT 6
+#define C_CRASH 7
+#define C_STOP 8
+#define C_LIMIT 9
+#define C_GAS 10
+#define C_SPARE 11
+#define C_REPAIRS 12
+#define C_GO 13
+#define C_END_LIMIT 14
+#define C_GAS_SAFE 15
+#define C_SPARE_SAFE 16
+#define C_DRIVE_SAFE 17
+#define C_RIGHT_WAY 18
/*
* prompt types
*/
-# define MOVEPROMPT 0
-# define REALLYPROMPT 1
-# define ANOTHERHANDPROMPT 2
-# define ANOTHERGAMEPROMPT 3
-# define SAVEGAMEPROMPT 4
-# define SAMEFILEPROMPT 5
-# define FILEPROMPT 6
-# define EXTENSIONPROMPT 7
-# define OVERWRITEFILEPROMPT 8
+#define MOVEPROMPT 0
+#define REALLYPROMPT 1
+#define ANOTHERHANDPROMPT 2
+#define ANOTHERGAMEPROMPT 3
+#define SAVEGAMEPROMPT 4
+#define SAMEFILEPROMPT 5
+#define FILEPROMPT 6
+#define EXTENSIONPROMPT 7
+#define OVERWRITEFILEPROMPT 8
-# ifdef SYSV
-# define srandom(x) srand(x)
-# define random() rand()
-
-# ifndef attron
-# define erasechar() _tty.c_cc[VERASE]
-# define killchar() _tty.c_cc[VKILL]
-# endif
-# else
-# ifndef erasechar
-# define erasechar() _tty.sg_erase
-# define killchar() _tty.sg_kill
-# endif
-# endif SYSV
+#ifndef erasechar
+# define erasechar() _tty.c_cc[VERASE]
+#endif
+#ifndef killchar
+# define killchar() _tty.c_cc[VKILL]
+#endif
typedef struct {
bool coups[NUM_SAFE];
@@ -162,11 +154,11 @@ typedef struct {
* macros
*/
-# define other(x) (1 - x)
-# define nextplay() (Play = other(Play))
-# define nextwin(x) (1 - x)
-# define opposite(x) (Opposite[x])
-# define issafety(x) (x >= C_GAS_SAFE)
+#define other(x) (1 - x)
+#define nextplay() (Play = other(Play))
+#define nextwin(x) (1 - x)
+#define opposite(x) (Opposite[x])
+#define issafety(x) (x >= C_GAS_SAFE)
/*
* externals
@@ -193,3 +185,32 @@ extern WINDOW *Board, *Miles, *Score;
*/
CARD getcard();
+int canplay(PLAY *pp, PLAY *op, CARD card);
+int check_ext(bool forcomp);
+int onecard(PLAY *pp);
+int roll(int ndie, int nsides);
+int isrepair(CARD card);
+int safety(CARD card);
+int getyn(int promptno);
+int rest_f(char *file);
+int readch(void);
+int save(void);
+int error(char *str, int arg);
+
+void getmove(void);
+void account(CARD card);
+void sort(CARD *hand);
+void die(void);
+void newscore(void);
+void shuffle(void);
+void init(void);
+void newboard(void);
+void prboard(void);
+void domove(void);
+void check_more(void);
+void prompt(int promptno);
+void calcmove(void);
+void rub(int sig);
+void prscore(bool for_real);
+void finalscore(PLAY *pp);
+void varpush(int file, int (*func)());
diff --git a/src/games/mille/misc.c b/src/games/mille/misc.c
index 0dc04d1..322ed23 100644
--- a/src/games/mille/misc.c
+++ b/src/games/mille/misc.c
@@ -1,14 +1,16 @@
-#include "mille.h"
+#include "mille.h"
#ifndef unctrl
-#include "unctrl.h"
+# include "unctrl.h"
#endif
-# include
+#include
+#include
+#include
-# ifdef attron
-# include
-# define _tty cur_term->Nttyb
-# endif attron
+#ifdef attron
+# include
+# define _tty cur_term->Nttyb
+#endif
/*
* @(#)misc.c 1.2 (Berkeley) 3/28/83
@@ -17,6 +19,7 @@
#define NUMSAFE 4
/* VARARGS1 */
+int
error(str, arg)
char *str;
{
@@ -32,7 +35,7 @@ char *str;
CARD
getcard()
{
- reg int c, c1;
+ int c, c1;
for (;;) {
while ((c = readch()) == '\n' || c == '\r' || c == ' ')
@@ -69,17 +72,19 @@ getcard()
clrtoeol();
refresh();
goto cont;
- }
- else
- write(0, "", 1);
+ } else {
+ if (write(0, "", 1) != 1)
+ /*ignore*/;
+ }
return c;
}
cont: ;
}
}
+int
check_ext(forcomp)
-reg bool forcomp; {
+bool forcomp; {
if (End == 700)
@@ -98,8 +103,8 @@ done:
}
}
else {
- reg PLAY *pp, *op;
- reg int i, safe, miles;
+ PLAY *pp, *op;
+ int i, safe, miles;
pp = &Player[COMP];
op = &Player[PLAYER];
@@ -119,7 +124,7 @@ done:
goto extend;
for (miles = 0, i = 0; i < HAND_SZ; i++)
if ((safe = pp->hand[i]) <= C_200)
- miles += Value[safe];
+ miles += Value[safe];
if (miles + (Topcard - Deck) * 3 > 1000)
goto extend;
goto done;
@@ -132,10 +137,11 @@ done:
* Get a yes or no answer to the given question. Saves are
* also allowed. Return TRUE if the answer was yes, FALSE if no.
*/
+int
getyn(promptno)
register int promptno; {
- reg char c;
+ char c;
Saved = FALSE;
for (;;) {
@@ -168,11 +174,24 @@ register int promptno; {
}
}
+static void
+flush_input()
+{
+# ifdef TIOCFLUSH
+ static int ioctl_args = FREAD;
+
+ (void) ioctl(fileno(stdin), TIOCFLUSH, &ioctl_args);
+# else
+ fflush(stdin);
+# endif
+}
+
/*
* Check to see if more games are desired. If not, and game
* came from a saved file, make sure that they don't want to restore
* it. Exit appropriately.
*/
+void
check_more() {
flush_input();
@@ -201,9 +220,10 @@ check_more() {
die();
}
+int
readch()
{
- reg int cnt;
+ int cnt;
static char c;
for (cnt = 0; read(0, &c, 1) <= 0; cnt++)
@@ -212,13 +232,21 @@ readch()
return c;
}
-flush_input()
-{
-# ifdef TIOCFLUSH
- static int ioctl_args = FREAD;
-
- (void) ioctl(fileno(stdin), TIOCFLUSH, &ioctl_args);
-# else
- fflush(stdin);
-# endif
-}
+#ifdef CROSS
+/*
+ * define unctrl codes for each character
+ *
+ */
+char *_unctrl[] = { /* unctrl codes for ttys */
+ "^@", "^A", "^B", "^C", "^D", "^E", "^F", "^G", "^H", "^I", "^J", "^K",
+ "^L", "^M", "^N", "^O", "^P", "^Q", "^R", "^S", "^T", "^U", "^V", "^W",
+ "^X", "^Y", "^Z", "^[", "^\\", "^]", "^~", "^_",
+ " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-",
+ ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";",
+ "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I",
+ "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W",
+ "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e",
+ "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
+ "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", "^?"
+};
+#endif
diff --git a/src/games/mille/move.c b/src/games/mille/move.c
index 3be57fc..bdd604e 100644
--- a/src/games/mille/move.c
+++ b/src/games/mille/move.c
@@ -1,12 +1,14 @@
-#include "mille.h"
+#include "mille.h"
+#include
+#include
#ifndef unctrl
-#include "unctrl.h"
+# include "unctrl.h"
#endif
-# ifdef attron
-# include
-# define _tty cur_term->Nttyb
-# endif attron
+#ifdef attron
+# include
+# define _tty cur_term->Nttyb
+#endif
/*
* @(#)move.c 1.2 (Berkeley) 3/28/83
@@ -19,136 +21,35 @@ char *Movenames[] = {
"M_DISCARD", "M_DRAW", "M_PLAY", "M_ORDER"
};
-domove()
-{
- reg PLAY *pp;
- reg int i, j;
- reg bool goodplay;
-
- pp = &Player[Play];
- if (Play == PLAYER)
- getmove();
- else
- calcmove();
- Next = FALSE;
- goodplay = TRUE;
- switch (Movetype) {
- case M_DISCARD:
- if (haspicked(pp)) {
- if (pp->hand[Card_no] == C_INIT)
- if (Card_no == 6)
- Finished = TRUE;
- else
- error("no card there");
- else {
- if (issafety(pp->hand[Card_no])) {
- error("discard a safety?");
- goodplay = FALSE;
- break;
- }
- Discard = pp->hand[Card_no];
- pp->hand[Card_no] = C_INIT;
- Next = TRUE;
- if (Play == PLAYER)
- account(Discard);
- }
- }
- else
- error("must pick first");
- break;
- case M_PLAY:
- goodplay = playcard(pp);
- break;
- case M_DRAW:
- Card_no = 0;
- if (Topcard <= Deck)
- error("no more cards");
- else if (haspicked(pp))
- error("already picked");
- else {
- pp->hand[0] = *--Topcard;
- if (Debug)
- fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]);
-acc:
- if (Play == COMP) {
- account(*Topcard);
- if (issafety(*Topcard))
- pp->safety[*Topcard-S_CONV] = S_IN_HAND;
- }
- if (pp->hand[1] == C_INIT && Topcard > Deck) {
- Card_no = 1;
- pp->hand[1] = *--Topcard;
- if (Debug)
- fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]);
- goto acc;
- }
- pp->new_battle = FALSE;
- pp->new_speed = FALSE;
- }
- break;
-
- case M_ORDER:
- break;
- }
- /*
- * move blank card to top by one of two methods. If the
- * computer's hand was sorted, the randomness for picking
- * between equally valued cards would be lost
- */
- if (Order && Movetype != M_DRAW && goodplay && pp == &Player[PLAYER])
- sort(pp->hand);
- else
- for (i = 1; i < HAND_SZ; i++)
- if (pp->hand[i] == C_INIT) {
- for (j = 0; pp->hand[j] == C_INIT; j++)
- if (j >= HAND_SZ) {
- j = 0;
- break;
- }
- pp->hand[i] = pp->hand[j];
- pp->hand[j] = C_INIT;
- }
- if (Topcard <= Deck)
- check_go();
- if (Next)
- nextplay();
-}
-
/*
- * Check and see if either side can go. If they cannot,
- * the game is over
+ * return whether or not the player has picked
*/
-check_go() {
+static int
+haspicked(pp)
+PLAY *pp; {
- reg CARD card;
- reg PLAY *pp, *op;
- reg int i;
+ int card;
- for (pp = Player; pp < &Player[2]; pp++) {
- op = (pp == &Player[COMP] ? &Player[PLAYER] : &Player[COMP]);
- for (i = 0; i < HAND_SZ; i++) {
- card = pp->hand[i];
- if (issafety(card) || canplay(pp, op, card)) {
- if (Debug) {
- fprintf(outf, "CHECK_GO: can play %s (%d), ", C_name[card], card);
- fprintf(outf, "issafety(card) = %d, ", issafety(card));
- fprintf(outf, "canplay(pp, op, card) = %d\n", canplay(pp, op, card));
- }
- return;
- }
- else if (Debug)
- fprintf(outf, "CHECK_GO: cannot play %s\n",
- C_name[card]);
- }
+ if (Topcard <= Deck)
+ return TRUE;
+ switch (pp->hand[Card_no]) {
+ case C_GAS_SAFE: case C_SPARE_SAFE:
+ case C_DRIVE_SAFE: case C_RIGHT_WAY:
+ card = 1;
+ break;
+ default:
+ card = 0;
+ break;
}
- Finished = TRUE;
+ return (pp->hand[card] != C_INIT);
}
+static int
playcard(pp)
-reg PLAY *pp;
+PLAY *pp;
{
- reg int v;
- reg CARD card;
+ int v;
+ CARD card;
/*
* check and see if player has picked
@@ -157,7 +58,7 @@ reg PLAY *pp;
default:
if (!haspicked(pp))
mustpick:
- return error("must pick first");
+ return error("must pick first", 0);
case C_GAS_SAFE: case C_SPARE_SAFE:
case C_DRIVE_SAFE: case C_RIGHT_WAY:
break;
@@ -170,16 +71,16 @@ mustpick:
switch (card) {
case C_200:
if (pp->nummiles[C_200] == 2)
- return error("only two 200's per hand");
+ return error("only two 200's per hand", 0);
case C_100: case C_75:
if (pp->speed == C_LIMIT)
- return error("limit of 50");
+ return error("limit of 50", 0);
case C_50:
if (pp->mileage + Value[card] > End)
return error("puts you over %d", End);
case C_25:
if (!pp->can_go)
- return error("cannot move now");
+ return error("cannot move now", 0);
pp->nummiles[card]++;
v = Value[card];
pp->total += v;
@@ -190,7 +91,7 @@ mustpick:
case C_GAS: case C_SPARE: case C_REPAIRS:
if (pp->battle != opposite(card))
- return error("can't play \"%s\"", C_name[card]);
+ return error("can't play \"%s\"", (int)C_name[card]);
pp->battle = card;
if (pp->safety[S_RIGHT_WAY] == S_PLAYED)
pp->can_go = TRUE;
@@ -200,14 +101,14 @@ mustpick:
if (pp->battle != C_INIT && pp->battle != C_STOP
&& !isrepair(pp->battle))
return error("cannot play \"Go\" on a \"%s\"",
- C_name[pp->battle]);
+ (int)C_name[pp->battle]);
pp->battle = C_GO;
pp->can_go = TRUE;
break;
case C_END_LIMIT:
if (pp->speed != C_LIMIT)
- return error("not limited");
+ return error("not limited", 0);
pp->speed = C_END_LIMIT;
break;
@@ -215,10 +116,10 @@ mustpick:
case C_STOP:
pp = &Player[other(Play)];
if (!pp->can_go)
- return error("opponent cannot go");
+ return error("opponent cannot go", 0);
else if (pp->safety[safety(card) - S_CONV] == S_PLAYED)
protected:
- return error("opponent is protected");
+ return error("opponent is protected", 0);
pp->battle = card;
pp->new_battle = TRUE;
pp->can_go = FALSE;
@@ -228,7 +129,7 @@ protected:
case C_LIMIT:
pp = &Player[other(Play)];
if (pp->speed == C_LIMIT)
- return error("opponent has limit");
+ return error("opponent has limit", 0);
if (pp->safety[S_RIGHT_WAY] == S_PLAYED)
goto protected;
pp->speed = C_LIMIT;
@@ -280,7 +181,7 @@ protected:
break;
case C_INIT:
- error("no card there");
+ error("no card there", 0);
Next = -1;
break;
}
@@ -291,10 +192,137 @@ protected:
return TRUE;
}
+/*
+ * Check and see if either side can go. If they cannot,
+ * the game is over
+ */
+static void
+check_go() {
+
+ CARD card;
+ PLAY *pp, *op;
+ int i;
+
+ for (pp = Player; pp < &Player[2]; pp++) {
+ op = (pp == &Player[COMP] ? &Player[PLAYER] : &Player[COMP]);
+ for (i = 0; i < HAND_SZ; i++) {
+ card = pp->hand[i];
+ if (issafety(card) || canplay(pp, op, card)) {
+ if (Debug) {
+ fprintf(outf, "CHECK_GO: can play %s (%d), ", C_name[card], card);
+ fprintf(outf, "issafety(card) = %d, ", issafety(card));
+ fprintf(outf, "canplay(pp, op, card) = %d\n", canplay(pp, op, card));
+ }
+ return;
+ }
+ else if (Debug)
+ fprintf(outf, "CHECK_GO: cannot play %s\n",
+ C_name[card]);
+ }
+ }
+ Finished = TRUE;
+}
+
+void
+domove()
+{
+ PLAY *pp;
+ int i, j;
+ bool goodplay;
+
+ pp = &Player[Play];
+ if (Play == PLAYER)
+ getmove();
+ else
+ calcmove();
+ Next = FALSE;
+ goodplay = TRUE;
+ switch (Movetype) {
+ case M_DISCARD:
+ if (haspicked(pp)) {
+ if (pp->hand[Card_no] == C_INIT)
+ if (Card_no == 6)
+ Finished = TRUE;
+ else
+ error("no card there", 0);
+ else {
+ if (issafety(pp->hand[Card_no])) {
+ error("discard a safety?", 0);
+ goodplay = FALSE;
+ break;
+ }
+ Discard = pp->hand[Card_no];
+ pp->hand[Card_no] = C_INIT;
+ Next = TRUE;
+ if (Play == PLAYER)
+ account(Discard);
+ }
+ }
+ else
+ error("must pick first", 0);
+ break;
+ case M_PLAY:
+ goodplay = playcard(pp);
+ break;
+ case M_DRAW:
+ Card_no = 0;
+ if (Topcard <= Deck)
+ error("no more cards", 0);
+ else if (haspicked(pp))
+ error("already picked", 0);
+ else {
+ pp->hand[0] = *--Topcard;
+ if (Debug)
+ fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]);
+acc:
+ if (Play == COMP) {
+ account(*Topcard);
+ if (issafety(*Topcard))
+ pp->safety[*Topcard-S_CONV] = S_IN_HAND;
+ }
+ if (pp->hand[1] == C_INIT && Topcard > Deck) {
+ Card_no = 1;
+ pp->hand[1] = *--Topcard;
+ if (Debug)
+ fprintf(outf, "DOMOVE: Draw %s\n", C_name[*Topcard]);
+ goto acc;
+ }
+ pp->new_battle = FALSE;
+ pp->new_speed = FALSE;
+ }
+ break;
+
+ case M_ORDER:
+ break;
+ }
+ /*
+ * move blank card to top by one of two methods. If the
+ * computer's hand was sorted, the randomness for picking
+ * between equally valued cards would be lost
+ */
+ if (Order && Movetype != M_DRAW && goodplay && pp == &Player[PLAYER])
+ sort(pp->hand);
+ else
+ for (i = 1; i < HAND_SZ; i++)
+ if (pp->hand[i] == C_INIT) {
+ for (j = 0; pp->hand[j] == C_INIT; j++)
+ if (j >= HAND_SZ) {
+ j = 0;
+ break;
+ }
+ pp->hand[i] = pp->hand[j];
+ pp->hand[j] = C_INIT;
+ }
+ if (Topcard <= Deck)
+ check_go();
+ if (Next)
+ nextplay();
+}
+
+void
getmove()
{
- reg char c, *sp;
- static char moveprompt[] = ">>:Move:";
+ char c, *sp;
#ifdef EXTRAP
static bool last_ex = FALSE; /* set if last command was E */
@@ -340,7 +368,7 @@ getmove()
Movetype = M_ORDER;
goto ret;
case 'Q': /* Quit */
- rub(); /* Same as a rubout */
+ rub(0); /* Same as a rubout */
break;
case 'W': /* Window toggle */
Window = nextwin(Window);
@@ -413,39 +441,19 @@ over:
}
/* FALLTHROUGH */
default:
- error("unknown command: %s", unctrl(c));
+ error("unknown command: %s", (int)unctrl(c));
break;
}
}
ret:
leaveok(Board, TRUE);
}
-/*
- * return whether or not the player has picked
- */
-haspicked(pp)
-reg PLAY *pp; {
-
- reg int card;
-
- if (Topcard <= Deck)
- return TRUE;
- switch (pp->hand[Card_no]) {
- case C_GAS_SAFE: case C_SPARE_SAFE:
- case C_DRIVE_SAFE: case C_RIGHT_WAY:
- card = 1;
- break;
- default:
- card = 0;
- break;
- }
- return (pp->hand[card] != C_INIT);
-}
+void
account(card)
-reg CARD card; {
+CARD card; {
- reg CARD oppos;
+ CARD oppos;
if (card == C_INIT)
return;
@@ -467,6 +475,7 @@ reg CARD card; {
}
}
+void
prompt(promptno)
int promptno;
{
@@ -498,11 +507,12 @@ int promptno;
clrtoeol();
}
+void
sort(hand)
-reg CARD *hand;
+CARD *hand;
{
- reg CARD *cp, *tp;
- reg CARD temp;
+ CARD *cp, *tp;
+ CARD temp;
cp = hand;
hand += HAND_SZ;
@@ -514,4 +524,3 @@ reg CARD *hand;
*tp = temp;
}
}
-
diff --git a/src/games/mille/print.c b/src/games/mille/print.c
index ee33619..2a63e28 100644
--- a/src/games/mille/print.c
+++ b/src/games/mille/print.c
@@ -7,10 +7,27 @@
# define COMP_STRT 20
# define CARD_STRT 2
+/*
+ * show_card:
+ * Show the given card if it is different from the last one shown
+ */
+static void
+show_card(y, x, c, lc)
+int y, x;
+register CARD c, *lc;
+{
+ if (c == *lc)
+ return;
+
+ mvprintw(y, x, C_fmt, C_name[c]);
+ *lc = c;
+}
+
+void
prboard() {
- reg PLAY *pp;
- reg int i, j, k, temp;
+ PLAY *pp;
+ int i, j, k, temp;
for (k = 0; k < 2; k++) {
pp = &Player[k];
@@ -25,8 +42,8 @@ prboard() {
show_card(14, temp, pp->battle, &pp->sh_battle);
show_card(16, temp, pp->speed, &pp->sh_speed);
for (i = C_25; i <= C_200; i++) {
- reg char *name;
- reg int end;
+ char *name;
+ int end;
if (pp->nummiles[i] == pp->sh_nummiles[i])
continue;
@@ -57,28 +74,31 @@ prboard() {
wrefresh(Score);
}
-/*
- * show_card:
- * Show the given card if it is different from the last one shown
- */
-show_card(y, x, c, lc)
-int y, x;
-register CARD c, *lc;
-{
- if (c == *lc)
- return;
-
- mvprintw(y, x, C_fmt, C_name[c]);
- *lc = c;
-}
-
static char Score_fmt[] = "%4d";
-prscore(for_real)
-reg bool for_real; {
+/*
+ * show_score:
+ * Show a score value if it is different from the last time we
+ * showed it.
+ */
+static void
+show_score(y, x, s, ls)
+int y, x;
+register int s, *ls;
+{
+ if (s == *ls)
+ return;
- reg PLAY *pp;
- reg int x;
+ mvprintw(y, x, Score_fmt, s);
+ *ls = s;
+}
+
+void
+prscore(for_real)
+bool for_real; {
+
+ PLAY *pp;
+ int x;
stdscr = Score;
for (pp = Player; pp < &Player[2]; pp++) {
@@ -114,19 +134,3 @@ reg bool for_real; {
}
stdscr = Board;
}
-
-/*
- * show_score:
- * Show a score value if it is different from the last time we
- * showed it.
- */
-show_score(y, x, s, ls)
-int y, x;
-register int s, *ls;
-{
- if (s == *ls)
- return;
-
- mvprintw(y, x, Score_fmt, s);
- *ls = s;
-}
diff --git a/src/games/mille/roll.c b/src/games/mille/roll.c
index c25bc4a..52b63c3 100644
--- a/src/games/mille/roll.c
+++ b/src/games/mille/roll.c
@@ -1,4 +1,5 @@
-# include "mille.h"
+#include "mille.h"
+#include
/*
* This routine rolls ndie nside-sided dice.
@@ -7,11 +8,11 @@
*
*/
+int
roll(ndie, nsides)
-reg int ndie, nsides; {
+int ndie, nsides; {
- reg int tot;
- extern unsigned int random();
+ int tot;
tot = 0;
while (ndie--)
diff --git a/src/games/mille/save.c b/src/games/mille/save.c
index bad5a11..e176c23 100644
--- a/src/games/mille/save.c
+++ b/src/games/mille/save.c
@@ -1,15 +1,20 @@
-#include "mille.h"
-#include
-#include
-#include
+#include "mille.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
#ifndef unctrl
-#include "unctrl.h"
+# include "unctrl.h"
#endif
-# ifdef attron
-# include
-# define _tty cur_term->Nttyb
-# endif attron
+#ifdef attron
+# include
+# define _tty cur_term->Nttyb
+#endif
/*
* @(#)save.c 1.3 (2.11BSD) 1996/3/21
@@ -17,27 +22,24 @@
typedef struct stat STAT;
-extern char *ctime();
-extern int read(), write();
-
/*
* This routine saves the current game for use at a later date
*/
-extern int errno;
-
+int
save() {
- reg char *sp;
- reg int outf;
- reg time_t *tp;
- char buf[80];
- time_t tme;
- STAT junk;
+ char *sp;
+ int outf;
+ time_t *tp;
+ char buf[80];
+ time_t tme;
+ STAT junk;
tp = &tme;
- if (Fromfile && getyn(SAMEFILEPROMPT))
+ if (Fromfile && getyn(SAMEFILEPROMPT)) {
strcpy(buf, Fromfile);
- else {
+ sp = buf;
+ } else {
over:
prompt(FILEPROMPT);
leaveok(Board, FALSE);
@@ -77,7 +79,7 @@ over:
return FALSE;
if ((outf = creat(buf, 0644)) < 0) {
- error(strerror(errno));
+ error(strerror(errno), 0);
return FALSE;
}
mvwaddstr(Score, ERR_Y, ERR_X, buf);
@@ -100,13 +102,14 @@ over:
* backup was made on exiting, in which case certain things must
* be cleaned up before the game starts.
*/
+int
rest_f(file)
-reg char *file; {
+char *file; {
- reg char *sp;
- reg int inf;
- char buf[80];
- STAT sbuf;
+ char *sp;
+ int inf;
+ char buf[80];
+ STAT sbuf;
if ((inf = open(file, 0)) < 0) {
perror(file);
@@ -129,4 +132,3 @@ reg char *file; {
Fromfile = file;
return !On_exit;
}
-
diff --git a/src/games/mille/types.c b/src/games/mille/types.c
index 2fb9677..c6c93e0 100644
--- a/src/games/mille/types.c
+++ b/src/games/mille/types.c
@@ -1,17 +1,19 @@
-# include "mille.h"
+#include "mille.h"
/*
* @(#)types.c 1.1 (Berkeley) 4/1/82
*/
+int
isrepair(card)
-reg CARD card; {
+CARD card; {
return card == C_GAS || card == C_SPARE || card == C_REPAIRS || card == C_INIT;
}
+int
safety(card)
-reg CARD card; {
+CARD card; {
switch (card) {
case C_EMPTY:
@@ -34,5 +36,5 @@ reg CARD card; {
return C_RIGHT_WAY;
}
/* NOTREACHED */
+ return 0;
}
-
diff --git a/src/games/mille/varpush.c b/src/games/mille/varpush.c
index 7a45f22..a2942fc 100644
--- a/src/games/mille/varpush.c
+++ b/src/games/mille/varpush.c
@@ -1,18 +1,20 @@
-# include "mille.h"
+#include "mille.h"
+#include
+#include
+#include
/*
* @(#)varpush.c 1.1 (Berkeley) 4/1/82
*/
-int read(), write();
-
/*
* push variables around via the routine func() on the file
* channel file. func() is either read or write.
*/
+void
varpush(file, func)
-reg int file;
-reg int (*func)(); {
+int file;
+int (*func)(); {
int temp;
@@ -30,13 +32,18 @@ reg int (*func)(); {
(*func)(file, (char *) &Discard, sizeof Discard);
(*func)(file, (char *) Player, sizeof Player);
if (func == read) {
- read(file, (char *) &temp, sizeof temp);
+ if (read(file, (char *) &temp, sizeof temp) != sizeof temp) {
+ perror("read");
+ exit(-1);
+ }
Topcard = &Deck[temp];
if (Debug) {
char buf[80];
over:
printf("Debug file:");
- gets(buf);
+ if (! fgets(buf, sizeof(buf), stdin)) {
+ exit(0);
+ }
if ((outf = fopen(buf, "w")) == NULL) {
perror(buf);
goto over;
@@ -47,7 +54,9 @@ over:
}
else {
temp = Topcard - Deck;
- write(file, (char *) &temp, sizeof temp);
+ if (write(file, (char *) &temp, sizeof temp) != sizeof temp) {
+ perror("write");
+ exit(-1);
+ }
}
}
-
diff --git a/src/games/monop/.gitignore b/src/games/monop/.gitignore
new file mode 100644
index 0000000..e8e2162
--- /dev/null
+++ b/src/games/monop/.gitignore
@@ -0,0 +1 @@
+monop
diff --git a/src/games/monop/Makefile b/src/games/monop/Makefile
index 09fe89d..352ab5e 100644
--- a/src/games/monop/Makefile
+++ b/src/games/monop/Makefile
@@ -3,85 +3,57 @@
# Program: Ken Arnold
# Makefile: K.S.
#
-DESTDIR=
-DATFILES=brd.dat mon.dat prop.dat
-CFILES= monop.c cards.c execute.c getinp.c houses.c jail.c misc.c morg.c \
- print.c prop.c rent.c roll.c spec.c strcmp.c trade.c
-OBJS= monop.o cards.o execute.o getinp.o houses.o jail.o misc.o morg.o \
- print.o prop.o rent.o roll.o spec.o strcmp.o trade.o strings.o
-HEADERS=monop.h deck.h
-BINDIR= ${DESTDIR}/usr/games
-LIBDIR= ${DESTDIR}/usr/games/lib
-LIB=
-CFLAGS= -O -w
-SEPFLAG= -i
-DAT= brd.dat monop.dat prop.dat
-CC= cc
-XSTR= xstr
-ED= ed
-AS= as
-RM= rm -f
-CTAGS= ctags
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
+#CFLAGS = -DCROSS -O
-#
-# Be cool about compiling strings.
-#
-.c.o:
- ${CC} -E ${CFLAGS} $*.c | ${XSTR} -c -
- ${CC} -c ${CFLAGS} x.c
- mv x.o $*.o
+CFLAGS += -Werror -Wall
+LIBS = -lc
-it: monop cards.pck
+OBJS = monop.o cards.o execute.o getinp.o houses.o jail.o misc.o \
+ morg.o print.o prop.o rent.o roll.o spec.o trade.o
+MAN = monop.0
+MANSRC = monop.6
-monop: ${OBJS}
- ${CC} -o monop ${SEPFLAG} ${OBJS} ${LIB}
+all: monop $(MAN) cards.pck
-install: monop cards.pck
- ${RM} ${BINDIR}/monop ${LIBDIR}/cards.pck
- install -s monop ${BINDIR}
- mv cards.pck ${LIBDIR}
+monop: $(OBJS)
+ $(CC) $(LDFLAGS) -o monop.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S monop.elf > monop.dis
+ $(SIZE) monop.elf
+ $(ELF2AOUT) monop.elf $@ && rm monop.elf
-new: clean ctags monop
+initdeck: initdeck.c deck.h
+ $(CC) -o initdeck $(LDFLAGS) $(CFLAGS) initdeck.c
-strings.o: strings
- ${XSTR}
- ${CC} -S xs.c
- ${ED} - < :rofix xs.s
- ${AS} -o strings.o xs.s
- ${RM} xs.s xs.c
+cards.pck: #initdeck cards.inp
+ ./initdeck
-monop.o: ${DATFILES} monop.def
- ${CC} -E ${CFLAGS} monop.c | ${XSTR} -c -
- ${CC} -c ${CFLAGS} x.c
- mv x.o monop.o
-
-cards.o: deck.h
- ${CC} -E ${CFLAGS} cards.c | ${XSTR} -c -
- ${CC} -c ${CFLAGS} x.c
- mv x.o cards.o
-
-newone:
- ${CC} ${SEPFLAG} -o monop ${CFLAGS} ${CFILES} ${LIB}
-
-ctags:
- ${CTAGS} ${CFILES} monop.h deck.h monop.def initdeck.c
-
-cards.pck: initdeck cards.inp
- ./initdeck
-
-initdeck: initdeck.c deck.h
- ${CC} -o initdeck ${CFLAGS} initdeck.c ${LIB}
-
-monop.tar:
- tar crvf monop.tar ${CFILES} ${DATFILES} ${HEADERS} :rofix Makefile cards.inp initdeck.c monop.def monop.ext
+$(MAN): $(MANSRC)
+ $(MANROFF) $< > $@
clean:
- ${RM} ${OBJS} monop core tags x.c x.o monop.tar initdeck cards.pck errs
- cp /dev/null strings
+ rm -f *.o *.0 *.elf $(MAN) monop initdeck *.elf *.dis tags *~
-printall:
- -/usr/bin/eecs/pr monop.h deck.h monop.def monop.ext ${CFILES} ${DATFILES} | /usr/bin/lpr
- -/usr/bin/lpq
-
-lint:
- lint ${CFILES} > lint.out ;
+install: all
+ install monop $(DESTDIR)/games/
+ cp $(MAN) $(DESTDIR)/share/man/cat6/
+ cp cards.pck $(DESTDIR)/games/lib/
+###
+cards.o: cards.c extern.h monop.h deck.h
+execute.o: execute.c extern.h monop.h deck.h
+getinp.o: getinp.c
+houses.o: houses.c extern.h monop.h deck.h
+initdeck.o: initdeck.c deck.h
+jail.o: jail.c extern.h monop.h deck.h
+misc.o: misc.c extern.h monop.h deck.h
+monop.o: monop.c defines.h monop.h deck.h mon.dat.h prop.dat.h brd.dat.h
+morg.o: morg.c extern.h monop.h deck.h
+print.o: print.c extern.h monop.h deck.h
+prop.o: prop.c extern.h monop.h deck.h
+rent.o: rent.c extern.h monop.h deck.h
+roll.o: roll.c
+spec.o: spec.c extern.h monop.h deck.h
+strcmp.o: strcmp.c
+trade.o: trade.c extern.h monop.h deck.h
diff --git a/src/games/monop/_rofix b/src/games/monop/_rofix
deleted file mode 100644
index cd5fa24..0000000
--- a/src/games/monop/_rofix
+++ /dev/null
@@ -1,3 +0,0 @@
-g/^[ ]*\.data/s//.text/
-w
-q
diff --git a/src/games/monop/brd.dat b/src/games/monop/brd.dat
deleted file mode 100644
index 7af06d8..0000000
--- a/src/games/monop/brd.dat
+++ /dev/null
@@ -1,43 +0,0 @@
-/* name (COLOR) owner type desc cost */
-
-{"=== GO ===", -1, SAFE, 0 },
-{"Mediterranean ave. (P)", -1, PRPTY, &prop[0], 60 },
-{"Community Chest i", -1, CC, cc },
-{"Baltic ave. (P)", -1, PRPTY, &prop[1], 60 },
-{"Income Tax", -1, SPEC, inc_tax },
-{"Reading RR", -1, RR, &rr[0], 200 },
-{"Oriental ave. (L)", -1, PRPTY, &prop[2], 100 },
-{"Chance i", -1, CHANCE, chance },
-{"Vermont ave. (L)", -1, PRPTY, &prop[3], 100 },
-{"Connecticut ave. (L)", -1, PRPTY, &prop[4], 120 },
-{"Just Visiting", -1, SAFE, 0 },
-{"St. Charles pl. (V)", -1, PRPTY, &prop[5], 140 },
-{"Electric Co.", -1, UTIL, &util[0], 150 },
-{"States ave. (V)", -1, PRPTY, &prop[6], 140 },
-{"Virginia ave. (V)", -1, PRPTY, &prop[7], 160 },
-{"Pennsylvania RR", -1, RR, &rr[1], 200 },
-{"St. James pl. (O)", -1, PRPTY, &prop[8], 180 },
-{"Community Chest ii", -1, CC, cc },
-{"Tennessee ave. (O)", -1, PRPTY, &prop[9], 180 },
-{"New York ave. (O)", -1, PRPTY, &prop[10], 200 },
-{"Free Parking", -1, SAFE, 0 },
-{"Kentucky ave. (R)", -1, PRPTY, &prop[11], 220 },
-{"Chance ii", -1, CHANCE, chance },
-{"Indiana ave. (R)", -1, PRPTY, &prop[12], 220 },
-{"Illinois ave. (R)", -1, PRPTY, &prop[13], 240 },
-{"B&O RR", -1, RR, &rr[2], 200 },
-{"Atlantic ave. (Y)", -1, PRPTY, &prop[14], 260 },
-{"Ventnor ave. (Y)", -1, PRPTY, &prop[15], 260 },
-{"Water Works", -1, UTIL, &util[1], 150 },
-{"Marvin Gardens (Y)", -1, PRPTY, &prop[16], 280 },
-{"GO TO JAIL", -1, SPEC, goto_jail },
-{"Pacific ave. (G)", -1, PRPTY, &prop[17], 300 },
-{"N. Carolina ave. (G)", -1, PRPTY, &prop[18], 300 },
-{"Community Chest iii", -1, CC, cc },
-{"Pennsylvania ave. (G)", -1, PRPTY, &prop[19], 320 },
-{"Short Line RR", -1, RR, &rr[3], 200 },
-{"Chance iii", -1, CHANCE, chance },
-{"Park place (D)", -1, PRPTY, &prop[20], 350 },
-{"Luxury Tax", -1, SPEC, lux_tax },
-{"Boardwalk (D)", -1, PRPTY, &prop[21], 400 },
-{"JAIL", -1, SPEC }
diff --git a/src/games/monop/brd.dat.h b/src/games/monop/brd.dat.h
new file mode 100644
index 0000000..b66f916
--- /dev/null
+++ b/src/games/monop/brd.dat.h
@@ -0,0 +1,43 @@
+/* name (COLOR) owner type desc cost */
+
+{"=== GO ===", -1, SAFE, 0 },
+{"Mediterranean ave. (P)", -1, PRPTY, (char*)&prop[0], 60 },
+{"Community Chest i", -1, CC, (char*)cc },
+{"Baltic ave. (P)", -1, PRPTY, (char*)&prop[1], 60 },
+{"Income Tax", -1, SPEC, (char*)inc_tax },
+{"Reading RR", -1, RR, (char*)&rr[0], 200 },
+{"Oriental ave. (L)", -1, PRPTY, (char*)&prop[2], 100 },
+{"Chance i", -1, CHANCE, (char*)chance },
+{"Vermont ave. (L)", -1, PRPTY, (char*)&prop[3], 100 },
+{"Connecticut ave. (L)", -1, PRPTY, (char*)&prop[4], 120 },
+{"Just Visiting", -1, SAFE, 0 },
+{"St. Charles pl. (V)", -1, PRPTY, (char*)&prop[5], 140 },
+{"Electric Co.", -1, UTIL, (char*)&util[0], 150 },
+{"States ave. (V)", -1, PRPTY, (char*)&prop[6], 140 },
+{"Virginia ave. (V)", -1, PRPTY, (char*)&prop[7], 160 },
+{"Pennsylvania RR", -1, RR, (char*)&rr[1], 200 },
+{"St. James pl. (O)", -1, PRPTY, (char*)&prop[8], 180 },
+{"Community Chest ii", -1, CC, (char*)cc },
+{"Tennessee ave. (O)", -1, PRPTY, (char*)&prop[9], 180 },
+{"New York ave. (O)", -1, PRPTY, (char*)&prop[10], 200 },
+{"Free Parking", -1, SAFE, 0 },
+{"Kentucky ave. (R)", -1, PRPTY, (char*)&prop[11], 220 },
+{"Chance ii", -1, CHANCE, (char*)chance },
+{"Indiana ave. (R)", -1, PRPTY, (char*)&prop[12], 220 },
+{"Illinois ave. (R)", -1, PRPTY, (char*)&prop[13], 240 },
+{"B&O RR", -1, RR, (char*)&rr[2], 200 },
+{"Atlantic ave. (Y)", -1, PRPTY, (char*)&prop[14], 260 },
+{"Ventnor ave. (Y)", -1, PRPTY, (char*)&prop[15], 260 },
+{"Water Works", -1, UTIL, (char*)&util[1], 150 },
+{"Marvin Gardens (Y)", -1, PRPTY, (char*)&prop[16], 280 },
+{"GO TO JAIL", -1, SPEC, (char*)goto_jail },
+{"Pacific ave. (G)", -1, PRPTY, (char*)&prop[17], 300 },
+{"N. Carolina ave. (G)", -1, PRPTY, (char*)&prop[18], 300 },
+{"Community Chest iii", -1, CC, (char*)cc },
+{"Pennsylvania ave. (G)", -1, PRPTY, (char*)&prop[19], 320 },
+{"Short Line RR", -1, RR, (char*)&rr[3], 200 },
+{"Chance iii", -1, CHANCE, (char*)chance },
+{"Park place (D)", -1, PRPTY, (char*)&prop[20], 350 },
+{"Luxury Tax", -1, SPEC, (char*)lux_tax },
+{"Boardwalk (D)", -1, PRPTY, (char*)&prop[21], 400 },
+{"JAIL", -1, SPEC }
diff --git a/src/games/monop/cards.c b/src/games/monop/cards.c
index b61d50d..2246230 100644
--- a/src/games/monop/cards.c
+++ b/src/games/monop/cards.c
@@ -1,38 +1,24 @@
-# include "monop.ext"
+#include "extern.h"
+#include
/*
* These routine deal with the card decks
*/
-# define GOJF 'F' /* char for get-out-of-jail-free cards */
+#define GOJF 'F' /* char for get-out-of-jail-free cards */
-# ifndef DEV
-static char *cardfile = "/usr/games/lib/cards.pck";
-# else
+#ifdef CROSS
static char *cardfile = "cards.pck";
-# endif
+#else
+static char *cardfile = "/games/lib/cards.pck";
+#endif
static FILE *deckf;
-/*
- * This routine initializes the decks from the data file,
- * which it opens.
- */
-init_decks() {
-
- if ((deckf=fopen(cardfile, "r")) == NULL) {
-file_err:
- perror(cardfile);
- exit(1);
- }
- if (fread(deck, sizeof (DECK), 2, deckf) != 2)
- goto file_err;
- set_up(&CC_D);
- set_up(&CH_D);
-}
/*
* This routine sets up the offset pointers for the given deck.
*/
+static void
set_up(dp)
DECK *dp; {
@@ -56,9 +42,45 @@ DECK *dp; {
dp->offsets[r1] = temp;
}
}
+
+/*
+ * This routine initializes the decks from the data file,
+ * which it opens.
+ */
+void
+init_decks() {
+
+ if ((deckf=fopen(cardfile, "r")) == NULL) {
+file_err:
+ perror(cardfile);
+ exit(1);
+ }
+ if (fread(deck, sizeof (DECK), 2, deckf) != 2)
+ goto file_err;
+ set_up(&CC_D);
+ set_up(&CH_D);
+}
+
+/*
+ * This routine prints out the message on the card
+ */
+static void
+printmes() {
+
+ reg char c;
+
+ printline();
+ fflush(stdout);
+ while ((c = getc(deckf)) != '\0')
+ putchar(c);
+ printline();
+ fflush(stdout);
+}
+
/*
* This routine draws a card from the given deck
*/
+void
get_card(dp)
DECK *dp; {
@@ -69,7 +91,8 @@ DECK *dp; {
do {
fseek(deckf, dp->offsets[dp->last_card], 0);
- dp->last_card = ++(dp->last_card) % dp->num_cards;
+ dp->last_card++;
+ dp->last_card %= dp->num_cards;
type_maj = getc(deckf);
} while (dp->gojf_used && type_maj == GOJF);
type_min = getc(deckf);
@@ -135,11 +158,12 @@ DECK *dp; {
}
num_h = num_H = 0;
for (op = cur_p->own_list; op; op = op->next)
- if (op->sqr->type == PRPTY)
- if (op->sqr->desc->houses == 5)
+ if (op->sqr->type == PRPTY) {
+ if (((PROP*)op->sqr->desc)->houses == 5)
++num_H;
else
- num_h += op->sqr->desc->houses;
+ num_h += ((PROP*)op->sqr->desc)->houses;
+ }
num = per_h * num_h + per_H * num_H;
printf("You had %d Houses and %d Hotels, so that cost you $%d\n", num_h, num_H, num);
if (num == 0)
@@ -154,17 +178,3 @@ DECK *dp; {
}
spec = FALSE;
}
-/*
- * This routine prints out the message on the card
- */
-printmes() {
-
- reg char c;
-
- printline();
- fflush(stdout);
- while ((c = getc(deckf)) != '\0')
- putchar(c);
- printline();
- fflush(stdout);
-}
diff --git a/src/games/monop/cards.pck b/src/games/monop/cards.pck
new file mode 100644
index 0000000..c04f17d
Binary files /dev/null and b/src/games/monop/cards.pck differ
diff --git a/src/games/monop/deck.h b/src/games/monop/deck.h
index 3363612..cddb65c 100644
--- a/src/games/monop/deck.h
+++ b/src/games/monop/deck.h
@@ -11,3 +11,5 @@ struct dk_st { /* deck description structure */
};
typedef struct dk_st DECK;
+
+void get_card(DECK *dp);
diff --git a/src/games/monop/monop.def b/src/games/monop/defines.h
similarity index 91%
rename from src/games/monop/monop.def
rename to src/games/monop/defines.h
index d7acbe2..ce271f9 100644
--- a/src/games/monop/monop.def
+++ b/src/games/monop/defines.h
@@ -1,5 +1,5 @@
-# include "monop.h"
-# include "deck.h"
+#include "monop.h"
+#include "deck.h"
bool fixing, /* set if fixing up debt */
trading, /* set if in process of trading */
@@ -19,7 +19,7 @@ char *name_list[MAX_PL+2], /* list of players' names */
"roll", /* 16 */ "", /* 17 */
0
},
- *yn[] = { /* list of commands for yes/no answers */
+ *yesno[] = { /* list of commands for yes/no answers */
"yes", /* 0 */ "no", /* 1 */
"quit", /* 2 */ "print", /* 3 */
"where", /* 4 */ "own holdings", /* 5 */
@@ -43,11 +43,11 @@ int player, /* current player number */
num_luck = sizeof lucky_mes / sizeof (char *),
/* list of command functions */
buy_houses(), card(), do_move(), do_move(), list(), list_all(),
- mortgage(), pay(), printboard(), quit(), resign(), restore(),
+ mortgage(), pay(), printboard(), quitgame(), resign(), restore(),
rub(), save(), sell_houses(), shell_out(), trade(),
unmortgage(), where(),
(*func[])() = { /* array of function calls for commands */
- quit, /* quit game |* 0 *| */
+ quitgame, /* quit game |* 0 *| */
printboard, /* print board |* 1 *| */
where, /* where players are |* 2 *| */
list, /* own holdings |* 3 *| */
@@ -77,13 +77,13 @@ RR_S rr[N_RR]; /* raildroad descriptions */
UTIL_S util[2]; /* utility descriptions */
MON mon[N_MON] = { /* monopoly descriptions */
-# include "mon.dat"
+#include "mon.dat.h"
};
PROP prop[N_PROP] = { /* typical properties */
-# include "prop.dat"
+#include "prop.dat.h"
};
SQUARE board[N_SQRS+1] = { /* board itself (+1 for Jail) */
-# include "brd.dat"
+#include "brd.dat.h"
};
diff --git a/src/games/monop/execute.c b/src/games/monop/execute.c
index 3ec23f1..e537a86 100644
--- a/src/games/monop/execute.c
+++ b/src/games/monop/execute.c
@@ -1,24 +1,29 @@
-# include "monop.ext"
-# include
-# include
-# include
+#include "extern.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-# define SEGSIZE 8192
+#define SEGSIZE 8192
typedef struct stat STAT;
typedef struct tm TIME;
-extern char etext[], /* end of text space */
+extern char __data_start[], /* beginning of data space */
rub();
-static char buf[257],
- *yn_only[] = { "yes", "no"};
+static char buf[257];
static bool new_play; /* set if move on to new player */
/*
* This routine executes the given command by index number
*/
+void
execute(com_num)
reg int com_num; {
@@ -31,9 +36,11 @@ reg int com_num; {
else if (num_doub)
printf("%s rolled doubles. Goes again\n", cur_p->name);
}
+
/*
* This routine moves a piece around.
*/
+void
do_move() {
reg int r1, r2;
@@ -62,30 +69,16 @@ do_move() {
ret:
return;
}
-/*
- * This routine moves a normal move
- */
-move(rl)
-reg int rl; {
- reg int old_loc;
-
- old_loc = cur_p->loc;
- cur_p->loc = (cur_p->loc + rl) % N_SQRS;
- if (cur_p->loc < old_loc && rl > 0) {
- cur_p->money += 200;
- printf("You pass %s and get $200\n", board[0].name);
- }
- show_move();
-}
/*
* This routine shows the results of a move
*/
+static void
show_move() {
reg SQUARE *sqp;
- sqp = &board[cur_p->loc];
+ sqp = &board[(int)cur_p->loc];
printf("That puts you on %s\n", sqp->name);
switch (sqp->type) {
case SAFE:
@@ -106,7 +99,7 @@ show_move() {
cur_p->money -= sqp->cost;
}
else if (num_play > 2)
- bid(sqp);
+ bid();
}
else if (sqp->owner == player)
printf("You own it.\n");
@@ -114,18 +107,37 @@ show_move() {
rent(sqp);
}
}
+
+/*
+ * This routine moves a normal move
+ */
+void
+move(rl)
+reg int rl; {
+
+ reg int old_loc;
+
+ old_loc = cur_p->loc;
+ cur_p->loc = (cur_p->loc + rl) % N_SQRS;
+ if (cur_p->loc < old_loc && rl > 0) {
+ cur_p->money += 200;
+ printf("You pass %s and get $200\n", board[0].name);
+ }
+ show_move();
+}
+
/*
* This routine saves the current game for use at a later date
*/
+void
save() {
reg char *sp;
reg int outf, num;
- TIME tme, *tp;
- int *dat_end, junk[18];
+ time_t tme;
+ struct stat junk;
unsgn start, end;
- tp = &tme;
printf("Which file do you wish to save it in? ");
sp = buf;
while ((*sp++=getchar()) != '\n' && !feof(stdin))
@@ -137,9 +149,8 @@ save() {
/*
* check for existing files, and confirm overwrite if needed
*/
-
- if (stat(buf, junk) > -1
- && getyn("File exists. Do you wish to overwrite? ", yn_only) > 0)
+ if (stat(buf, &junk) >= 0
+ && getyn("File exists. Do you wish to overwrite? ") > 0)
return;
if ((outf=creat(buf, 0644)) < 0) {
@@ -147,28 +158,29 @@ save() {
return;
}
printf("\"%s\" ", buf);
- time(tp); /* get current time */
- strcpy(buf, ctime(tp));
+ time(&tme); /* get current time */
+ strcpy(buf, ctime(&tme));
for (sp = buf; *sp != '\n'; sp++)
continue;
*sp = '\0';
-# if 0
- start = (((int) etext + (SEGSIZE-1)) / SEGSIZE ) * SEGSIZE;
-# else
- start = 0;
-# endif
- end = sbrk(0);
+ start = (unsigned) __data_start;
+ end = (unsigned) sbrk(0);
while (start < end) { /* write out entire data space */
num = start + 16 * 1024 > end ? end - start : 16 * 1024;
- write(outf, start, num);
+ if (write(outf, (void*)start, num) != num) {
+ perror(buf);
+ exit(-1);
+ }
start += num;
}
close(outf);
printf("[%s]\n", buf);
}
+
/*
* This routine restores an old game from a file
*/
+void
restore() {
reg char *sp;
@@ -181,10 +193,12 @@ restore() {
clearerr(stdin);
rest_f(buf);
}
+
/*
* This does the actual restoring. It returns TRUE if the
* backup was successful, else false.
*/
+int
rest_f(file)
reg char *file; {
@@ -203,19 +217,22 @@ reg char *file; {
perror(file);
exit(1);
}
-# if 0
- start = (((int) etext + (SEGSIZE-1)) / SEGSIZE ) * SEGSIZE;
-# else
- start = 0;
-# endif
- brk(end = start + sbuf.st_size);
+ start = (unsigned) __data_start;
+ end = start + sbuf.st_size;
+ if (brk((void*) end) < 0) {
+ perror("brk");
+ exit(-1);
+ }
while (start < end) { /* write out entire data space */
num = start + 16 * 1024 > end ? end - start : 16 * 1024;
- read(inf, start, num);
+ if (read(inf, (void*) start, num) != num) {
+ perror(file);
+ exit(-1);
+ }
start += num;
}
close(inf);
- strcpy(buf, ctime(sbuf.st_mtime));
+ strcpy(buf, ctime(&sbuf.st_mtime));
for (sp = buf; *sp != '\n'; sp++)
continue;
*sp = '\0';
diff --git a/src/games/monop/monop.ext b/src/games/monop/extern.h
similarity index 72%
rename from src/games/monop/monop.ext
rename to src/games/monop/extern.h
index e487dda..e1c9b00 100644
--- a/src/games/monop/monop.ext
+++ b/src/games/monop/extern.h
@@ -1,9 +1,9 @@
-# include "monop.h"
-# include "deck.h"
+#include "monop.h"
+#include "deck.h"
extern bool trading, spec, fixing, told_em;
-extern char *yn[], *comlist[], *name_list[], *lucky_mes[];
+extern char *yesno[], *comlist[], *name_list[], *lucky_mes[];
extern int num_play, player, num_doub, num_luck, (*func[])();
diff --git a/src/games/monop/getinp.c b/src/games/monop/getinp.c
index a300c0e..db77846 100644
--- a/src/games/monop/getinp.c
+++ b/src/games/monop/getinp.c
@@ -1,23 +1,41 @@
-# include
-# include
+#include
+#include
+#include
-# define reg register
+#define reg register
-# define LINE 70
+#define LINE 70
static char buf[257];
+static int
+comp(s1)
+char *s1; {
+
+ reg char *sp, *tsp, c;
+
+ if (buf[0] != '\0')
+ for (sp = buf, tsp = s1; *sp; ) {
+ c = isupper(*tsp) ? tolower(*tsp) : *tsp;
+ tsp++;
+ if (c != *sp++)
+ return 0;
+ }
+ else if (*s1 != '\0')
+ return 0;
+ return 1;
+}
+
+int
getinp(prompt, list)
char *prompt, *list[]; {
- reg int i, n_match, match;
+ reg int i, n_match, match = 0;
char *sp;
- int plen;
-
for (;;) {
inter:
- printf(prompt);
+ printf("%s", prompt);
for (sp = buf; (*sp=getchar()) != '\n' && !feof(stdin); )
if (*sp == -1) /* check for interupted system call */
goto inter;
@@ -39,7 +57,7 @@ inter:
printf("");
}
else
- printf(list[i]);
+ printf("%s", list[i]);
if (list[i+1])
printf(", ");
else
@@ -63,21 +81,3 @@ inter:
printf("Illegal response: \"%s\". Use '?' to get list of valid answers\n", buf);
}
}
-
-static
-comp(s1)
-char *s1; {
-
- reg char *sp, *tsp, c;
-
- if (buf[0] != '\0')
- for (sp = buf, tsp = s1; *sp; ) {
- c = isupper(*tsp) ? tolower(*tsp) : *tsp;
- tsp++;
- if (c != *sp++)
- return 0;
- }
- else if (*s1 != '\0')
- return 0;
- return 1;
-}
diff --git a/src/games/monop/houses.c b/src/games/monop/houses.c
index 8f525b8..f1fe2e2 100644
--- a/src/games/monop/houses.c
+++ b/src/games/monop/houses.c
@@ -1,66 +1,29 @@
-# include "monop.ext"
+#include "extern.h"
+#include
static char *names[N_MON+2],
cur_prop[80];
static MON *monops[N_MON];
-/*
- * These routines deal with buying and selling houses
- */
-buy_houses() {
+static void
+list_cur(mp)
+reg MON *mp; {
- reg int num_mon;
- reg MON *mp;
- reg OWN *op;
- bool good,got_morg;
- int i,p;
+ reg int i;
+ reg SQUARE *sqp;
-over:
- num_mon = 0;
- good = TRUE;
- got_morg = FALSE;
- for (op = cur_p->own_list; op && op->sqr->type != PRPTY; op = op->next)
- continue;
- while (op)
- if (op->sqr->desc->monop) {
- mp = op->sqr->desc->mon_desc;
- names[num_mon] = (monops[num_mon]=mp)->name;
- num_mon++;
- got_morg = good = FALSE;
- for (i = 0; i < mp->num_in; i++) {
- if (op->sqr->desc->morg)
- got_morg++;
- if (op->sqr->desc->houses != 5)
- good++;
- op = op->next;
- }
- if (!good || got_morg)
- --num_mon;
- }
+ for (i = 0; i < mp->num_in; i++) {
+ sqp = mp->sq[i];
+ if (((PROP*)sqp->desc)->houses == 5)
+ printf("%s (H) ", sqp->name);
else
- op = op->next;
- if (num_mon == 0) {
- if (got_morg)
- printf("You can't build on mortgaged monopolies.\n");
- else if (!good)
- printf("You can't build any more.\n");
- else
- printf("But you don't have any monopolies!!\n");
- return;
- }
- if (num_mon == 1)
- buy_h(monops[0]);
- else {
- names[num_mon++] = "done";
- names[num_mon--] = 0;
- if ((p=getinp("Which property do you wish to buy houses for? ", names)) == num_mon)
- return;
- buy_h(monops[p]);
- goto over;
+ printf("%s (%d) ", sqp->name, ((PROP*)sqp->desc)->houses);
}
+ putchar('\n');
}
+static void
buy_h(mnp)
MON *mnp; {
@@ -78,7 +41,7 @@ blew_it:
printf("Houses will cost $%d\n", price);
printf("How many houses do you wish to buy for\n");
for (i = 0; i < mp->num_in; i++) {
- pp = mp->sq[i]->desc;
+ pp = (PROP*) mp->sq[i]->desc;
over:
if (pp->houses == 5) {
printf("%s (H):\n", mp->sq[i]->name);
@@ -106,10 +69,124 @@ err: printf("That makes the spread too wide. Try again\n");
tot += input[i];
if (tot) {
printf("You asked for %d houses for $%d\n", tot, tot * price);
- if (getyn("Is that ok? ", yn) == 0) {
+ if (getyn("Is that ok? ") == 0) {
cur_p->money -= tot * price;
for (tot = i = 0; i < mp->num_in; i++)
- mp->sq[i]->desc->houses = temp[i];
+ ((PROP*)mp->sq[i]->desc)->houses = temp[i];
+ }
+ }
+}
+
+/*
+ * These routines deal with buying and selling houses
+ */
+void
+buy_houses() {
+
+ reg int num_mon;
+ reg MON *mp;
+ reg OWN *op;
+ bool good,got_morg;
+ int i,p;
+
+over:
+ num_mon = 0;
+ good = TRUE;
+ got_morg = FALSE;
+ for (op = cur_p->own_list; op && op->sqr->type != PRPTY; op = op->next)
+ continue;
+ while (op) {
+ PROP *prop = (PROP*) op->sqr->desc;
+ if (prop->monop) {
+ mp = prop->mon_desc;
+ names[num_mon] = (monops[num_mon]=mp)->name;
+ num_mon++;
+ got_morg = good = FALSE;
+ for (i = 0; i < mp->num_in; i++) {
+ if (prop->morg)
+ got_morg++;
+ if (prop->houses != 5)
+ good++;
+ op = op->next;
+ }
+ if (!good || got_morg)
+ --num_mon;
+ }
+ else
+ op = op->next;
+ }
+ if (num_mon == 0) {
+ if (got_morg)
+ printf("You can't build on mortgaged monopolies.\n");
+ else if (!good)
+ printf("You can't build any more.\n");
+ else
+ printf("But you don't have any monopolies!!\n");
+ return;
+ }
+ if (num_mon == 1)
+ buy_h(monops[0]);
+ else {
+ names[num_mon++] = "done";
+ names[num_mon--] = 0;
+ if ((p=getinp("Which property do you wish to buy houses for? ", names)) == num_mon)
+ return;
+ buy_h(monops[p]);
+ goto over;
+ }
+}
+
+static void
+sell_h(mnp)
+MON *mnp; {
+
+ reg int i;
+ reg MON *mp;
+ reg int price;
+ shrt input[3],temp[3];
+ int tot;
+ PROP *pp;
+
+ mp = mnp;
+ price = mp->h_cost * 25;
+blew_it:
+ printf("Houses will get you $%d apiece\n", price);
+ list_cur(mp);
+ printf("How many houses do you wish to sell from\n");
+ for (i = 0; i < mp->num_in; i++) {
+ pp = (PROP*) mp->sq[i]->desc;
+over:
+ if (pp->houses == 0) {
+ printf("%s (0):\n", mp->sq[i]->name);
+ input[i] = temp[i] = 0;
+ continue;
+ }
+ if (pp->houses < 5)
+ sprintf(cur_prop,"%s (%d): ", mp->sq[i]->name, pp->houses);
+ else
+ sprintf(cur_prop,"%s (H): ", mp->sq[i]->name);
+ input[i] = get_int(cur_prop);
+ temp[i] = pp->houses - input[i];
+ if (temp[i] < 0) {
+ printf("That's too many. The most you can sell is %d\n", pp->houses);
+ goto over;
+ }
+ }
+ if (mp->num_in == 3 && (abs(temp[0] - temp[1]) > 1 ||
+ abs(temp[0] - temp[2]) > 1 || abs(temp[1] - temp[2]) > 1)) {
+err: printf("That makes the spread too wide. Try again\n");
+ goto blew_it;
+ }
+ else if (mp->num_in == 2 && abs(temp[0] - temp[1]) > 1)
+ goto err;
+ for (tot = i = 0; i < mp->num_in; i++)
+ tot += input[i];
+ if (tot) {
+ printf("You asked to sell %d houses for $%d\n",tot,tot * price);
+ if (getyn("Is that ok? ") == 0) {
+ cur_p->money += tot * price;
+ for (tot = i = 0; i < mp->num_in; i++)
+ ((PROP*)mp->sq[i]->desc)->houses = temp[i];
}
}
}
@@ -117,6 +194,7 @@ err: printf("That makes the spread too wide. Try again\n");
/*
* This routine sells houses.
*/
+void
sell_houses() {
reg int num_mon;
@@ -129,15 +207,15 @@ over:
num_mon = 0;
good = TRUE;
for (op = cur_p->own_list; op; op = op->next)
- if (op->sqr->type == PRPTY && op->sqr->desc->monop) {
- mp = op->sqr->desc->mon_desc;
+ if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->monop) {
+ mp = ((PROP*)op->sqr->desc)->mon_desc;
names[num_mon] = (monops[num_mon]=mp)->name;
num_mon++;
good = 0;
do
- if (!good && op->sqr->desc->houses != 0)
+ if (!good && ((PROP*)op->sqr->desc)->houses != 0)
good++;
- while (op->next && op->sqr->desc->mon_desc == mp
+ while (op->next && ((PROP*)op->sqr->desc)->mon_desc == mp
&& (op=op->next));
if (!good)
--num_mon;
@@ -158,73 +236,3 @@ over:
goto over;
}
}
-
-sell_h(mnp)
-MON *mnp; {
-
- reg int i;
- reg MON *mp;
- reg int price;
- shrt input[3],temp[3];
- int tot;
- PROP *pp;
-
- mp = mnp;
- price = mp->h_cost * 25;
-blew_it:
- printf("Houses will get you $%d apiece\n", price);
- list_cur(mp);
- printf("How many houses do you wish to sell from\n");
- for (i = 0; i < mp->num_in; i++) {
- pp = mp->sq[i]->desc;
-over:
- if (pp->houses == 0) {
- printf("%s (0):\n", mp->sq[i]->name);
- input[i] = temp[i] = 0;
- continue;
- }
- if (pp->houses < 5)
- sprintf(cur_prop,"%s (%d): ",mp->sq[i]->name,pp->houses);
- else
- sprintf(cur_prop,"%s (H): ",mp->sq[i]->name,pp->houses);
- input[i] = get_int(cur_prop);
- temp[i] = pp->houses - input[i];
- if (temp[i] < 0) {
- printf("That's too many. The most you can sell is %d\n", pp->houses);
- goto over;
- }
- }
- if (mp->num_in == 3 && (abs(temp[0] - temp[1]) > 1 ||
- abs(temp[0] - temp[2]) > 1 || abs(temp[1] - temp[2]) > 1)) {
-err: printf("That makes the spread too wide. Try again\n");
- goto blew_it;
- }
- else if (mp->num_in == 2 && abs(temp[0] - temp[1]) > 1)
- goto err;
- for (tot = i = 0; i < mp->num_in; i++)
- tot += input[i];
- if (tot) {
- printf("You asked to sell %d houses for $%d\n",tot,tot * price);
- if (getyn("Is that ok? ", yn) == 0) {
- cur_p->money += tot * price;
- for (tot = i = 0; i < mp->num_in; i++)
- mp->sq[i]->desc->houses = temp[i];
- }
- }
-}
-
-list_cur(mp)
-reg MON *mp; {
-
- reg int i;
- reg SQUARE *sqp;
-
- for (i = 0; i < mp->num_in; i++) {
- sqp = mp->sq[i];
- if (sqp->desc->houses == 5)
- printf("%s (H) ", sqp->name);
- else
- printf("%s (%d) ", sqp->name, sqp->desc->houses);
- }
- putchar('\n');
-}
diff --git a/src/games/monop/initdeck.c b/src/games/monop/initdeck.c
index d0c7a3c..15ca2aa 100644
--- a/src/games/monop/initdeck.c
+++ b/src/games/monop/initdeck.c
@@ -1,5 +1,6 @@
-# include
-# include "deck.h"
+#include
+#include
+#include "deck.h"
/*
* This program initializes the card files for monopoly.
@@ -12,11 +13,11 @@
* string to print, terminated with a null byte.
*/
-# define TRUE 1
-# define FALSE 0
+#define TRUE 1
+#define FALSE 0
-# define bool char
-# define reg register
+#define bool char
+#define reg register
char *infile = "cards.inp", /* input file */
*outfile = "cards.pck"; /* "packed" file */
@@ -27,42 +28,7 @@ DECK deck[2];
FILE *inf, *outf;
-main(ac, av)
-int ac;
-char *av[]; {
-
- getargs(ac, av);
- if ((inf = fopen(infile, "r")) == NULL) {
- perror(infile);
- exit(1);
- }
- count();
- /*
- * allocate space for pointers.
- */
- CC_D.offsets = calloc(CC_D.num_cards + 1, sizeof (long));
- CH_D.offsets = calloc(CH_D.num_cards + 1, sizeof (long));
- fseek(inf, 0L, 0);
- if ((outf = fopen(outfile, "w")) == NULL) {
- perror(outfile);
- exit(0);
- }
-
- fwrite(deck, sizeof (DECK), 2, outf);
- fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
- fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
- putem();
-
- fclose(inf);
- fseek(outf, 0, 0L);
- fwrite(deck, sizeof (DECK), 2, outf);
- fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
- fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
- fclose(outf);
- printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards);
- exit(0);
-}
-
+void
getargs(ac, av)
int ac;
char *av[]; {
@@ -73,9 +39,11 @@ char *av[]; {
outfile = av[3];
}
}
+
/*
* count the cards
*/
+void
count() {
reg bool newline;
@@ -95,9 +63,11 @@ count() {
newline = (c == '\n');
in_deck->num_cards++;
}
+
/*
* put strings in the file
*/
+void
putem() {
reg bool newline;
@@ -138,3 +108,40 @@ putem() {
}
putc('\0', outf);
}
+
+int
+main(ac, av)
+int ac;
+char *av[]; {
+
+ getargs(ac, av);
+ if ((inf = fopen(infile, "r")) == NULL) {
+ perror(infile);
+ exit(1);
+ }
+ count();
+ /*
+ * allocate space for pointers.
+ */
+ CC_D.offsets = calloc(CC_D.num_cards + 1, sizeof (long));
+ CH_D.offsets = calloc(CH_D.num_cards + 1, sizeof (long));
+ fseek(inf, 0L, 0);
+ if ((outf = fopen(outfile, "w")) == NULL) {
+ perror(outfile);
+ exit(0);
+ }
+
+ fwrite(deck, sizeof (DECK), 2, outf);
+ fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
+ fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
+ putem();
+
+ fclose(inf);
+ fseek(outf, 0, 0L);
+ fwrite(deck, sizeof (DECK), 2, outf);
+ fwrite(CC_D.offsets, sizeof (long), CC_D.num_cards, outf);
+ fwrite(CH_D.offsets, sizeof (long), CH_D.num_cards, outf);
+ fclose(outf);
+ printf("There were %d com. chest and %d chance cards\n", CC_D.num_cards, CH_D.num_cards);
+ return 0;
+}
diff --git a/src/games/monop/jail.c b/src/games/monop/jail.c
index c1309bc..4fff2cd 100644
--- a/src/games/monop/jail.c
+++ b/src/games/monop/jail.c
@@ -1,9 +1,10 @@
-# include "monop.ext"
+#include "extern.h"
/*
* This routine uses a get-out-of-jail-free card to get the
* player out of jail.
*/
+void
card() {
if (cur_p->loc != JAIL) {
@@ -18,10 +19,12 @@ card() {
cur_p->loc = 10; /* just visiting */
cur_p->in_jail = 0;
}
+
/*
* This routine returns the players get-out-of-jail-free card
* to a deck.
*/
+void
ret_card(plr)
reg PLAY *plr; {
@@ -31,9 +34,11 @@ reg PLAY *plr; {
else
CH_D.gojf_used = FALSE;
}
+
/*
* This routine deals with paying your way out of jail.
*/
+void
pay() {
if (cur_p->loc != JAIL) {
@@ -45,9 +50,11 @@ pay() {
cur_p->in_jail = 0;
printf("That cost you $50\n");
}
+
/*
* This routine deals with a move in jail
*/
+int
move_jail(r1, r2)
reg int r1, r2; {
@@ -70,6 +77,8 @@ moveit:
goto moveit;
}
}
+
+void
printturn() {
if (cur_p->loc != JAIL)
diff --git a/src/games/monop/misc.c b/src/games/monop/misc.c
index cbf0089..0acf2e7 100644
--- a/src/games/monop/misc.c
+++ b/src/games/monop/misc.c
@@ -1,8 +1,13 @@
-# include "monop.ext"
-# include
-# include
+#include "extern.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
-# define execsh(sh) execl(sh, shell_name[roll(1, num_names)-1], 0)
+#define execsh(sh) execl(sh, shell_name[roll(1, num_names)-1], (char*)0)
static char *shell_def = "/bin/csh",
*shell_name[] = {
@@ -21,26 +26,27 @@ static char *shell_def = "/bin/csh",
static int num_names = sizeof shell_name / sizeof (char *);;
-char *shell_in();
-
/*
* This routine executes a truncated set of commands until a
* "yes or "no" answer is gotten.
*/
+int
getyn(prompt)
reg char *prompt; {
reg int com;
for (;;)
- if ((com=getinp(prompt, yn)) < 2)
+ if ((com=getinp(prompt, yesno)) < 2)
return com;
else
(*func[com-2])();
}
+
/*
* This routine tells the player if he's out of money.
*/
+void
notify() {
if (cur_p->money < 0)
@@ -52,19 +58,24 @@ notify() {
told_em = TRUE;
}
}
+
/*
* This routine switches to the next player
*/
+void
next_play() {
- player = ++player % num_play;
+ player++;
+ player %= num_play;
cur_p = &play[player];
num_doub = 0;
}
+
/*
* This routine gets an integer from the keyboard after the
* given prompt.
*/
+int
get_int(prompt)
reg char *prompt; {
@@ -74,7 +85,7 @@ reg char *prompt; {
for (;;) {
inter:
- printf(prompt);
+ printf("%s", prompt);
num = 0;
for (sp = buf; (*sp=getchar()) != '\n' && !feof(stdin); sp++)
if (*sp == -1) /* check for interrupted system call */
@@ -95,9 +106,28 @@ inter:
printf("I can't understand that\n");
}
}
+
+/*
+ * This routine sets things up as if it is a new monopoly
+ */
+static void
+is_monop(mp, pl)
+reg MON *mp;
+int pl; {
+
+ reg int i;
+
+ mp->owner = pl;
+ mp->num_own = mp->num_in;
+ for (i = 0; i < mp->num_in; i++)
+ ((PROP*)mp->sq[i]->desc)->monop = TRUE;
+ mp->name = mp->mon_n;
+}
+
/*
* This routine sets the monopoly flag from the list given.
*/
+void
set_ownlist(pl)
int pl; {
@@ -146,10 +176,10 @@ int pl; {
#ifdef DEBUG
printf(" case PRPTY:\n");
#endif
- orig = op->sqr->desc->mon_desc;
+ orig = ((PROP*)op->sqr->desc)->mon_desc;
orig_op = op;
num = 0;
- while (op && op->sqr->desc->mon_desc == orig) {
+ while (op && ((PROP*)op->sqr->desc)->mon_desc == orig) {
#ifdef DEBUG
printf("iter: %d\n", num);
#endif
@@ -166,17 +196,17 @@ int pl; {
printf("num = %d\n");
#endif
if (orig == 0) {
- printf("panic: bad monopoly descriptor: orig = %d\n", orig);
+ printf("panic: bad monopoly descriptor: orig = %p\n", orig);
printf("player # %d\n", pl+1);
printhold(pl);
- printf("orig_op = %d\n", orig_op);
+ printf("orig_op = %p\n", orig_op);
printf("orig_op->sqr->type = %d (PRPTY)\n", op->sqr->type);
- printf("orig_op->next = %d\n", op->next);
- printf("orig_op->sqr->desc = %d\n", op->sqr->desc);
- printf("op = %d\n", op);
+ printf("orig_op->next = %p\n", op->next);
+ printf("orig_op->sqr->desc = %p\n", op->sqr->desc);
+ printf("op = %p\n", op);
printf("op->sqr->type = %d (PRPTY)\n", op->sqr->type);
- printf("op->next = %d\n", op->next);
- printf("op->sqr->desc = %d\n", op->sqr->desc);
+ printf("op->next = %p\n", op->next);
+ printf("op->sqr->desc = %p\n", op->sqr->desc);
printf("num = %d\n", num);
}
#ifdef DEBUG
@@ -190,104 +220,64 @@ int pl; {
}
}
}
-/*
- * This routine sets things up as if it is a new monopoly
- */
-is_monop(mp, pl)
-reg MON *mp;
-int pl; {
- reg char *sp;
- reg int i;
-
- mp->owner = pl;
- mp->num_own = mp->num_in;
- for (i = 0; i < mp->num_in; i++)
- mp->sq[i]->desc->monop = TRUE;
- mp->name = mp->mon_n;
-}
/*
* This routine sets things up as if it is no longer a monopoly
*/
+void
isnot_monop(mp)
reg MON *mp; {
- reg char *sp;
reg int i;
mp->owner = -1;
for (i = 0; i < mp->num_in; i++)
- mp->sq[i]->desc->monop = FALSE;
+ ((PROP*)mp->sq[i]->desc)->monop = FALSE;
mp->name = mp->not_m;
}
+
/*
* This routine gives a list of the current player's routine
*/
+void
list() {
-
printhold(player);
}
+
/*
* This routine gives a list of a given players holdings
*/
+void
list_all() {
-
reg int pl;
while ((pl=getinp("Whose holdings do you want to see? ", name_list)) < num_play)
printhold(pl);
}
+
/*
* This routine gives the players a chance before it exits.
*/
-quit() {
+void
+quit(int sig) {
putchar('\n');
- if (getyn("Do you all really want to quit? ", yn) == 0)
+ if (getyn("Do you all really want to quit? ") == 0)
exit(0);
signal(2, quit);
}
-/*
- * This routine copies one structure to another
- */
-cpy_st(s1, s2, size)
-reg int *s1, *s2, size; {
- size /= 2;
- while (size--)
- *s1++ = *s2++;
+int
+quitgame()
+{
+ quit(0);
+ return 0;
}
-/*
- * This routine forks off a shell. It uses the users login shell
- */
-shell_out() {
- static char *shell = NULL;
-
- printline();
- if (shell == NULL)
- shell = shell_in();
- fflush();
- if (!fork()) {
- signal(SIGINT, SIG_DFL);
- execsh(shell);
- }
- ignoresigs();
- wait();
- resetsigs();
- putchar('\n');
- printline();
-}
/*
* This routine looks up the users login shell
*/
-# include
-
-struct passwd *getpwuid();
-
-char *getenv();
-
-char *
+static char *
shell_in() {
reg struct passwd *pp;
@@ -303,24 +293,49 @@ shell_in() {
}
return sp;
}
+
/*
* This routine sets things up to ignore all the signals.
*/
+static void
ignoresigs() {
-
reg int i;
for (i = 0; i < NSIG; i++)
signal(i, SIG_IGN);
}
+
/*
* This routine sets up things as they were before.
*/
+static void
resetsigs() {
-
reg int i;
for (i = 0; i < NSIG; i++)
signal(i, SIG_DFL);
signal(2, quit);
}
+
+/*
+ * This routine forks off a shell. It uses the users login shell
+ */
+void
+shell_out() {
+ static char *shell = NULL;
+ int status;
+
+ printline();
+ if (shell == NULL)
+ shell = shell_in();
+ fflush(stdout);
+ if (!fork()) {
+ signal(SIGINT, SIG_DFL);
+ execsh(shell);
+ }
+ ignoresigs();
+ wait(&status);
+ resetsigs();
+ putchar('\n');
+ printline();
+}
diff --git a/src/games/monop/mon.dat b/src/games/monop/mon.dat
deleted file mode 100644
index cd49305..0000000
--- a/src/games/monop/mon.dat
+++ /dev/null
@@ -1,9 +0,0 @@
-/* name owner num_in num_own h_cost not_m mon_n sq */
-{0, -1, 2, 0, 1, "Purple", "PURPLE", {1,3}},
-{0, -1, 3, 0, 1, "Lt. Blue", "LT. BLUE", {6,8,9}},
-{0, -1, 3, 0, 2, "Violet", "VIOLET", {11,13,14}},
-{0, -1, 3, 0, 2, "Orange", "ORANGE", {16,18,19}},
-{0, -1, 3, 0, 3, "Red", "RED", {21,23,24}},
-{0, -1, 3, 0, 3, "Yellow", "YELLOW", {26,27,29}},
-{0, -1, 3, 0, 4, "Green", "GREEN", {31,32,34}},
-{0, -1, 2, 0, 4, "Dk. Blue", "DK. BLUE", {37,39}}
diff --git a/src/games/monop/mon.dat.h b/src/games/monop/mon.dat.h
new file mode 100644
index 0000000..fd25718
--- /dev/null
+++ b/src/games/monop/mon.dat.h
@@ -0,0 +1,9 @@
+/* name owner num_in num_own h_cost not_m mon_n sq */
+{0, -1, 2, 0, 1, "Purple", "PURPLE", {(SQUARE*)1,(SQUARE*)3}},
+{0, -1, 3, 0, 1, "Lt. Blue", "LT. BLUE", {(SQUARE*)6,(SQUARE*)8,(SQUARE*)9}},
+{0, -1, 3, 0, 2, "Violet", "VIOLET", {(SQUARE*)11,(SQUARE*)13,(SQUARE*)14}},
+{0, -1, 3, 0, 2, "Orange", "ORANGE", {(SQUARE*)16,(SQUARE*)18,(SQUARE*)19}},
+{0, -1, 3, 0, 3, "Red", "RED", {(SQUARE*)21,(SQUARE*)23,(SQUARE*)24}},
+{0, -1, 3, 0, 3, "Yellow", "YELLOW", {(SQUARE*)26,(SQUARE*)27,(SQUARE*)29}},
+{0, -1, 3, 0, 4, "Green", "GREEN", {(SQUARE*)31,(SQUARE*)32,(SQUARE*)34}},
+{0, -1, 2, 0, 4, "Dk. Blue", "DK. BLUE", {(SQUARE*)37,(SQUARE*)39}}
diff --git a/src/games/monop/monop.c b/src/games/monop/monop.c
index fd6023d..a397cbe 100644
--- a/src/games/monop/monop.c
+++ b/src/games/monop/monop.c
@@ -1,37 +1,14 @@
-# include "monop.def"
+#include "defines.h"
+#include
+#include
+#include
+#include
+#include
-/*
- * This program implements a monopoly game
- */
-main(ac, av)
-reg int ac;
-reg char *av[]; {
-
-
- srand(getpid());
- if (ac > 1) {
- if (!rest_f(av[1]))
- restore();
- }
- else {
- getplayers();
- init_players();
- init_monops();
- }
- num_luck = sizeof lucky_mes / sizeof (char *);
- init_decks();
- signal(2, quit);
- for (;;) {
- printf("\n%s (%d) (cash $%d) on %s\n", cur_p->name, player + 1,
- cur_p->money, board[cur_p->loc].name);
- printturn();
- force_morg();
- execute(getinp("-- Command: ", comlist));
- }
-}
/*
* This routine gets the names of the players
*/
+void
getplayers() {
reg char *sp;
@@ -64,25 +41,27 @@ over:
name_list[i] = 0;
for (i = 0; i < num_play; i++)
for (j = i + 1; j < num_play; j++)
- if (strcmp(name_list[i], name_list[j]) == 0) {
+ if (strcasecmp(name_list[i], name_list[j]) == 0) {
if (i != num_play - 1)
printf("Hey!!! Some of those are IDENTICAL!! Let's try that again....\n");
else
printf("\"done\" is a reserved word. Please try again\n");
for (i = 0; i < num_play; i++)
- cfree(play[i].name);
- cfree(play);
+ free(play[i].name);
+ free(play);
goto blew_it;
}
}
+
/*
* This routine figures out who goes first
*/
+void
init_players() {
reg int i, rl, cur_max;
- bool over;
- int max_pl;
+ bool over = 0;
+ int max_pl = 0;
again:
putchar('\n');
@@ -105,9 +84,11 @@ again:
cur_p = &play[max_pl];
printf("%s (%d) goes first\n", cur_p->name, max_pl + 1);
}
+
/*
* This routine initalizes the monopoly structures.
*/
+void
init_monops() {
reg MON *mp;
@@ -119,3 +100,34 @@ init_monops() {
mp->sq[i] = &board[(int)(mp->sq[i])];
}
}
+
+/*
+ * This program implements a monopoly game
+ */
+int
+main(ac, av)
+reg int ac;
+reg char *av[]; {
+
+
+ srand(getpid());
+ if (ac > 1) {
+ if (!rest_f(av[1]))
+ restore();
+ }
+ else {
+ getplayers();
+ init_players();
+ init_monops();
+ }
+ num_luck = sizeof lucky_mes / sizeof (char *);
+ init_decks();
+ signal(2, quit);
+ for (;;) {
+ printf("\n%s (%d) (cash $%d) on %s\n", cur_p->name, player + 1,
+ cur_p->money, board[(int)cur_p->loc].name);
+ printturn();
+ force_morg();
+ execute(getinp("-- Command: ", comlist));
+ }
+}
diff --git a/src/games/monop/monop.h b/src/games/monop/monop.h
index 0e53371..ab74af6 100644
--- a/src/games/monop/monop.h
+++ b/src/games/monop/monop.h
@@ -95,4 +95,34 @@ typedef struct prp_st PROP;
typedef struct rr_st RR_S;
typedef struct rr_st UTIL_S;
-int cc(), chance(), lux_tax(), goto_jail(), inc_tax();
+int rest_f(char *file);
+int get_int(char *prompt);
+int roll(int ndie, int nsides);
+int getinp(char *prompt, char *list[]);
+int move_jail(int r1, int r2);
+int getyn(char *prompt);
+int prop_worth(PLAY *plp);
+
+void goto_jail(void);
+void inc_tax(void);
+void lux_tax(void);
+void cc(void);
+void chance(void);
+void init_decks(void);
+void quit(int sig);
+void printturn(void);
+void force_morg(void);
+void execute(int com_num);
+void move(int rl);
+void notify(void);
+void next_play(void);
+void buy(int player, SQUARE *sqrp);
+void bid(void);
+void rent(SQUARE *sqp);
+void ret_card(PLAY *plr);
+void printhold(int pl);
+void isnot_monop(MON *mp);
+void printsq(int sqn, bool eoln);
+void add_list(int plr, OWN **head, int op_sqr);
+void del_list(int plr, OWN **head, shrt op_sqr);
+void set_ownlist(int pl);
diff --git a/src/games/monop/morg.c b/src/games/monop/morg.c
index 6a07347..8438e53 100644
--- a/src/games/monop/morg.c
+++ b/src/games/monop/morg.c
@@ -1,4 +1,4 @@
-# include "monop.ext"
+#include "extern.h"
/*
* These routines deal with mortgaging.
@@ -29,11 +29,50 @@ static shrt square[MAX_PRP+2];
static int num_good,got_houses;
+/*
+ * This routine sets up the list of mortgageable property
+ */
+static int
+set_mlist() {
+
+ reg OWN *op;
+
+ num_good = 0;
+ for (op = cur_p->own_list; op; op = op->next)
+ if (! ((PROP*)op->sqr->desc)->morg) {
+ if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->houses)
+ got_houses++;
+ else {
+ names[num_good] = op->sqr->name;
+ square[num_good++] = sqnum(op->sqr);
+ }
+ }
+ names[num_good++] = "done";
+ names[num_good--] = 0;
+ return num_good;
+}
+
+/*
+ * This routine actually mortgages the property.
+ */
+static void
+m(prop)
+reg int prop; {
+
+ reg int price;
+
+ price = board[prop].cost/2;
+ ((PROP*)board[prop].desc)->morg = TRUE;
+ printf("That got you $%d\n",price);
+ cur_p->money += price;
+}
+
/*
* This routine is the command level response the mortgage command.
* it gets the list of mortgageable property and asks which are to
* be mortgaged.
*/
+void
mortgage() {
reg int prop;
@@ -56,47 +95,52 @@ mortgage() {
if (prop == num_good)
return;
m(square[prop]);
- notify(cur_p);
+ notify();
}
}
+
/*
- * This routine sets up the list of mortgageable property
+ * This routine sets up the list of mortgaged property
*/
-set_mlist() {
+static int
+set_umlist() {
reg OWN *op;
num_good = 0;
for (op = cur_p->own_list; op; op = op->next)
- if (!op->sqr->desc->morg)
- if (op->sqr->type == PRPTY && op->sqr->desc->houses)
- got_houses++;
- else {
- names[num_good] = op->sqr->name;
- square[num_good++] = sqnum(op->sqr);
- }
+ if (((PROP*)op->sqr->desc)->morg) {
+ names[num_good] = op->sqr->name;
+ square[num_good++] = sqnum(op->sqr);
+ }
names[num_good++] = "done";
names[num_good--] = 0;
return num_good;
}
+
/*
- * This routine actually mortgages the property.
+ * This routine actually unmortgages the property
*/
-m(prop)
+static void
+unm(prop)
reg int prop; {
reg int price;
price = board[prop].cost/2;
- board[prop].desc->morg = TRUE;
- printf("That got you $%d\n",price);
- cur_p->money += price;
+ ((PROP*)board[prop].desc)->morg = FALSE;
+ price += price/10;
+ printf("That cost you $%d\n",price);
+ cur_p->money -= price;
+ set_umlist();
}
+
/*
* This routine is the command level repsponse to the unmortgage
* command. It gets the list of mortgaged property and asks which are
* to be unmortgaged.
*/
+void
unmortgage() {
reg int prop;
@@ -118,52 +162,11 @@ unmortgage() {
unm(square[prop]);
}
}
-/*
- * This routine sets up the list of mortgaged property
- */
-set_umlist() {
- reg OWN *op;
-
- num_good = 0;
- for (op = cur_p->own_list; op; op = op->next)
- if (op->sqr->desc->morg) {
- names[num_good] = op->sqr->name;
- square[num_good++] = sqnum(op->sqr);
- }
- names[num_good++] = "done";
- names[num_good--] = 0;
- return num_good;
-}
-/*
- * This routine actually unmortgages the property
- */
-unm(prop)
-reg int prop; {
-
- reg int price;
-
- price = board[prop].cost/2;
- board[prop].desc->morg = FALSE;
- price += price/10;
- printf("That cost you $%d\n",price);
- cur_p->money -= price;
- set_umlist();
-}
-/*
- * This routine forces the indebted player to fix his
- * financial woes.
- */
-force_morg() {
-
- told_em = fixing = TRUE;
- while (cur_p->money <= 0)
- fix_ex(getinp("How are you going to fix it up? ",morg_coms));
- fixing = FALSE;
-}
/*
* This routine is a special execute for the force_morg routine
*/
+static void
fix_ex(com_num)
reg int com_num; {
@@ -171,3 +174,16 @@ reg int com_num; {
(*func[com_num])();
notify();
}
+
+/*
+ * This routine forces the indebted player to fix his
+ * financial woes.
+ */
+void
+force_morg() {
+
+ told_em = fixing = TRUE;
+ while (cur_p->money <= 0)
+ fix_ex(getinp("How are you going to fix it up? ",morg_coms));
+ fixing = FALSE;
+}
diff --git a/src/games/monop/print.c b/src/games/monop/print.c
index d7e27b6..1c3115a 100644
--- a/src/games/monop/print.c
+++ b/src/games/monop/print.c
@@ -1,11 +1,11 @@
-# include "monop.ext"
+#include "extern.h"
-static char buf[80], /* output buffer */
- *header = "Name Own Price Mg # Rent";
+static char *header = "Name Own Price Mg # Rent";
/*
* This routine prints out the current board
*/
+void
printboard() {
reg int i;
@@ -17,13 +17,14 @@ printboard() {
printsq(i+N_SQRS/2, TRUE);
}
}
+
/*
* This routine lists where each player is.
*/
+void
where() {
reg int i;
- char *bsp;
printf("%s Player\n", header);
for (i = 0; i < num_play; i++) {
@@ -34,9 +35,24 @@ where() {
putchar('\n');
}
}
+
+/*
+ * This routine prints out the mortgage flag.
+ */
+static void
+printmorg(sqp)
+reg SQUARE *sqp; {
+
+ if (((PROP*)sqp->desc)->morg)
+ printf(" * ");
+ else
+ printf(" ");
+}
+
/*
* This routine prints out an individual square
*/
+void
printsq(sqn, eoln)
int sqn;
reg bool eoln; {
@@ -44,7 +60,6 @@ reg bool eoln; {
reg int rnt;
reg PROP *pp;
reg SQUARE *sqp;
- int i;
sqp = &board[sqn];
printf("%-10.10s", sqp->name);
@@ -60,7 +75,7 @@ spec:
printf(" ");
break;
case PRPTY:
- pp = sqp->desc;
+ pp = (PROP*) sqp->desc;
if (sqp->owner < 0) {
printf(" - %-8.8s %3d", pp->mon_desc->name, sqp->cost);
if (!eoln)
@@ -74,7 +89,7 @@ spec:
if (pp->houses < 5)
if (pp->houses > 0)
printf("%d %4d", pp->houses,
- pp->rent[pp->houses]);
+ pp->rent[(int)pp->houses]);
else
printf("0 %4d", pp->rent[0] * 2);
else
@@ -92,7 +107,7 @@ spec:
}
printf(" %d 150", sqp->owner+1);
printmorg(sqp);
- printf("%d", play[sqp->owner].num_util);
+ printf("%d", play[(int)sqp->owner].num_util);
if (!eoln)
printf(" ");
break;
@@ -106,33 +121,23 @@ spec:
printf(" %d Railroad 200", sqp->owner+1);
printmorg(sqp);
rnt = 25;
- rnt <<= play[sqp->owner].num_rr - 1;
- printf("%d %4d", play[sqp->owner].num_rr, 25 << (play[sqp->owner].num_rr - 1));
+ rnt <<= play[(int)sqp->owner].num_rr - 1;
+ printf("%d %4d", play[(int)sqp->owner].num_rr, 25 << (play[(int)sqp->owner].num_rr - 1));
break;
}
if (eoln)
putchar('\n');
}
-/*
- * This routine prints out the mortgage flag.
- */
-printmorg(sqp)
-reg SQUARE *sqp; {
- if (sqp->desc->morg)
- printf(" * ");
- else
- printf(" ");
-}
/*
* This routine lists the holdings of the player given
*/
+void
printhold(pl)
reg int pl; {
reg OWN *op;
reg PLAY *pp;
- char *bsp;
pp = &play[pl];
printf("%s's (%d) holdings (Total worth: $%d):\n", name_list[pl], pl+1,
diff --git a/src/games/monop/prop.c b/src/games/monop/prop.c
index 846f2ff..67b9eb5 100644
--- a/src/games/monop/prop.c
+++ b/src/games/monop/prop.c
@@ -1,9 +1,11 @@
-# include "monop.ext"
+#include "extern.h"
+#include
/*
* This routine deals with buying property, setting all the
* appropriate flags.
*/
+void
buy(player, sqrp)
reg int player;
reg SQUARE *sqrp; {
@@ -12,77 +14,12 @@ reg SQUARE *sqrp; {
sqrp->owner = player;
add_list(player, &(play[player].own_list), cur_p->loc);
}
-/*
- * This routine adds an item to the list.
- */
-add_list(plr, head, op_sqr)
-int plr;
-OWN **head;
-int op_sqr; {
- reg int val;
- reg OWN *tp, *last_tp;
- MON *mp;
- OWN *op;
-
- op = calloc(1, sizeof (OWN));
- op->sqr = &board[op_sqr];
- val = value(op->sqr);
- last_tp = NULL;
- for (tp = *head; tp && value(tp->sqr) < val; tp = tp->next)
- if (val == value(tp->sqr)) {
- cfree(op);
- return;
- }
- else
- last_tp = tp;
- op->next = tp;
- if (last_tp != NULL)
- last_tp->next = op;
- else
- *head = op;
- if (!trading)
- set_ownlist(plr);
-}
-/*
- * This routine deletes property from the list.
- */
-del_list(plr, head, op_sqr)
-int plr;
-OWN **head;
-shrt op_sqr; {
-
- reg int i;
- reg OWN *op, *last_op;
-
- switch (board[op_sqr].type) {
- case PRPTY:
- board[op_sqr].desc->mon_desc->num_own--;
- break;
- case RR:
- play[plr].num_rr--;
- break;
- case UTIL:
- play[plr].num_util--;
- break;
- }
- last_op = NULL;
- for (op = *head; op; op = op->next)
- if (op->sqr == &board[op_sqr])
- break;
- else
- last_op = op;
- if (last_op == NULL)
- *head = op->next;
- else {
- last_op->next = op->next;
- cfree(op);
- }
-}
/*
* This routine calculates the value for sorting of the
* given square.
*/
+static int
value(sqp)
reg SQUARE *sqp; {
@@ -104,13 +41,84 @@ reg SQUARE *sqp; {
case PRPTY:
return 8 + (PROP *)(sqp->desc) - prop;
}
+ return 0;
}
+
+/*
+ * This routine adds an item to the list.
+ */
+void
+add_list(plr, head, op_sqr)
+int plr;
+OWN **head;
+int op_sqr; {
+
+ reg int val;
+ reg OWN *tp, *last_tp;
+ OWN *op;
+
+ op = calloc(1, sizeof (OWN));
+ op->sqr = &board[op_sqr];
+ val = value(op->sqr);
+ last_tp = NULL;
+ for (tp = *head; tp && value(tp->sqr) < val; tp = tp->next)
+ if (val == value(tp->sqr)) {
+ free(op);
+ return;
+ }
+ else
+ last_tp = tp;
+ op->next = tp;
+ if (last_tp != NULL)
+ last_tp->next = op;
+ else
+ *head = op;
+ if (!trading)
+ set_ownlist(plr);
+}
+
+/*
+ * This routine deletes property from the list.
+ */
+void
+del_list(plr, head, op_sqr)
+int plr;
+OWN **head;
+shrt op_sqr; {
+
+ reg OWN *op, *last_op;
+
+ switch (board[(int)op_sqr].type) {
+ case PRPTY:
+ ((PROP*)board[(int)op_sqr].desc)->mon_desc->num_own--;
+ break;
+ case RR:
+ play[plr].num_rr--;
+ break;
+ case UTIL:
+ play[plr].num_util--;
+ break;
+ }
+ last_op = NULL;
+ for (op = *head; op; op = op->next)
+ if (op->sqr == &board[(int)op_sqr])
+ break;
+ else
+ last_op = op;
+ if (last_op == NULL)
+ *head = op->next;
+ else {
+ last_op->next = op->next;
+ free(op);
+ }
+}
+
/*
* This routine accepts bids for the current peice
* of property.
*/
+void
bid() {
-
static bool in[MAX_PL];
reg int i, num_in, cur_max;
char buf[80];
@@ -123,7 +131,8 @@ bid() {
cur_max = 0;
num_in = num_play;
while (num_in > 1 || (cur_max == 0 && num_in > 0)) {
- i = ++i % num_play;
+ i++;
+ i %= num_play;
if (in[i]) {
do {
sprintf(buf, "%s: ", name_list[i]);
@@ -142,19 +151,23 @@ bid() {
}
}
if (cur_max != 0) {
- while (!in[i])
- i = ++i % num_play;
+ while (!in[i]) {
+ i++;
+ i %= num_play;
+ }
printf("It goes to %s (%d) for $%d\n",play[i].name,i+1,cur_max);
- buy(i, &board[cur_p->loc]);
+ buy(i, &board[(int)cur_p->loc]);
play[i].money -= cur_max;
}
else
printf("Nobody seems to want it, so we'll leave it for later\n");
}
+
/*
* This routine calculates the value of the property
* of given player.
*/
+int
prop_worth(plp)
reg PLAY *plp; {
@@ -163,9 +176,9 @@ reg PLAY *plp; {
worth = 0;
for (op = plp->own_list; op; op = op->next) {
- if (op->sqr->type == PRPTY && op->sqr->desc->monop)
- worth += op->sqr->desc->mon_desc->h_cost * 50 *
- op->sqr->desc->houses;
+ if (op->sqr->type == PRPTY && ((PROP*)op->sqr->desc)->monop)
+ worth += ((PROP*)op->sqr->desc)->mon_desc->h_cost * 50 *
+ ((PROP*)op->sqr->desc)->houses;
worth += op->sqr->cost;
}
return worth;
diff --git a/src/games/monop/prop.dat b/src/games/monop/prop.dat.h
similarity index 100%
rename from src/games/monop/prop.dat
rename to src/games/monop/prop.dat.h
diff --git a/src/games/monop/rent.c b/src/games/monop/rent.c
index 7357f8f..5da8996 100644
--- a/src/games/monop/rent.c
+++ b/src/games/monop/rent.c
@@ -1,33 +1,34 @@
-# include "monop.ext"
+#include "extern.h"
/*
* This routine has the player pay rent
*/
+void
rent(sqp)
reg SQUARE *sqp; {
- reg int rnt;
+ reg int rnt = 0;
reg PROP *pp;
PLAY *plp;
- plp = &play[sqp->owner];
+ plp = &play[(int)sqp->owner];
printf("Owned by %s\n", plp->name);
- if (sqp->desc->morg) {
+ if (((PROP*)sqp->desc)->morg) {
lucky("The thing is mortgaged. ");
return;
}
switch (sqp->type) {
case PRPTY:
- pp = sqp->desc;
+ pp = (PROP*) sqp->desc;
if (pp->monop)
if (pp->houses == 0)
printf("rent is %d\n", rnt=pp->rent[0] * 2);
else if (pp->houses < 5)
printf("with %d houses, rent is %d\n",
- pp->houses, rnt=pp->rent[pp->houses]);
+ pp->houses, rnt=pp->rent[(int)pp->houses]);
else
printf("with a hotel, rent is %d\n",
- rnt=pp->rent[pp->houses]);
+ rnt=pp->rent[(int)pp->houses]);
else
printf("rent is %d\n", rnt = pp->rent[0]);
break;
diff --git a/src/games/monop/roll.c b/src/games/monop/roll.c
index b1d72a2..319f413 100644
--- a/src/games/monop/roll.c
+++ b/src/games/monop/roll.c
@@ -1,37 +1,16 @@
/*
* This routine rolls ndie nside-sided dice.
*/
+#include
-# define reg register
-
-# ifndef vax
-# define MAXRAND 32767L
-
+int
roll(ndie, nsides)
int ndie, nsides; {
- reg long tot;
- reg unsigned n, r;
+ int tot;
- tot = 0;
- n = ndie;
- while (n--)
- tot += rand();
- return (int) ((tot * (long) nsides) / ((long) MAXRAND + 1)) + ndie;
-}
-
-# else
-
-roll(ndie, nsides)
-reg int ndie, nsides; {
-
- reg int tot, r;
- reg double num_sides;
-
- num_sides = nsides;
tot = 0;
while (ndie--)
- tot += (r = rand()) * (num_sides / 017777777777) + 1;
+ tot += random() % nsides + 1;
return tot;
}
-# endif
diff --git a/src/games/monop/spec.c b/src/games/monop/spec.c
index b100f21..bd994e9 100644
--- a/src/games/monop/spec.c
+++ b/src/games/monop/spec.c
@@ -1,9 +1,10 @@
-# include "monop.ext"
+#include "extern.h"
static char *perc[] = {
"10%", "ten percent", "%", "$200", "200", 0
};
+void
inc_tax() { /* collect income tax */
reg int worth, com_num;
@@ -30,20 +31,24 @@ inc_tax() { /* collect income tax */
if (worth == 200)
lucky("\nIt makes no difference! ");
}
-goto_jail() { /* move player to jail */
+void
+goto_jail() { /* move player to jail */
cur_p->loc = JAIL;
}
-lux_tax() { /* landing on luxury tax */
+void
+lux_tax() { /* landing on luxury tax */
printf("You lose $75\n");
cur_p->money -= 75;
}
-cc() { /* draw community chest card */
+void
+cc() { /* draw community chest card */
get_card(&CC_D);
}
-chance() { /* draw chance card */
+void
+chance() { /* draw chance card */
get_card(&CH_D);
}
diff --git a/src/games/monop/strcmp.c b/src/games/monop/strcmp.c
index 1c53627..189f60c 100644
--- a/src/games/monop/strcmp.c
+++ b/src/games/monop/strcmp.c
@@ -1,9 +1,9 @@
-# include
-# include
+#include
+#include
-# define reg register
+#define reg register
-# define makelower(c) (isupper(c) ? tolower(c) : c)
+#define makelower(c) (isupper(c) ? tolower(c) : c)
/*
* Compare strings: s1>s2: >0 s1==s2: 0 s1
-static struct trd_st { /* how much to give to other player */
+struct trd_st { /* how much to give to other player */
int trader; /* trader number */
int cash; /* amount of cash */
int gojf; /* # get-out-of-jail-free cards */
@@ -15,44 +16,30 @@ static int used[MAX_PRP];
static TRADE trades[2];
-trade() {
+/*
+ * This routine sets up the list of tradable property.
+ */
+static int
+set_list(the_list)
+reg OWN *the_list; {
- reg int tradee, i;
+ reg int i;
+ reg OWN *op;
- trading = TRUE;
- for (i = 0; i < 2; i++) {
- trades[i].cash = 0;
- trades[i].gojf = FALSE;
- trades[i].prop_list = NULL;
- }
-over:
- if (num_play == 1) {
- printf("There ain't no-one around to trade WITH!!\n");
- return;
- }
- if (num_play > 2) {
- tradee = getinp("Which player do you wish to trade with? ",
- name_list);
- if (tradee == num_play)
- return;
- if (tradee == player) {
- printf("You can't trade with yourself!\n");
- goto over;
- }
- }
- else
- tradee = 1 - player;
- get_list(0, player);
- get_list(1, tradee);
- if (getyn("Do you wish a summary? ") == 0)
- summate();
- if (getyn("Is the trade ok? ") == 0)
- do_trade();
+ i = 0;
+ for (op = the_list; op; op = op->next)
+ if (!used[i])
+ list[i++] = op->sqr->name;
+ list[i++] = "done";
+ list[i--] = 0;
+ return i;
}
+
/*
* This routine gets the list of things to be trader for the
* player, and puts in the structure given.
*/
+static void
get_list(struct_no, play_no)
int struct_no, play_no; {
@@ -101,26 +88,11 @@ once_more:
}
}
}
-/*
- * This routine sets up the list of tradable property.
- */
-set_list(the_list)
-reg OWN *the_list; {
- reg int i;
- reg OWN *op;
-
- i = 0;
- for (op = the_list; op; op = op->next)
- if (!used[i])
- list[i++] = op->sqr->name;
- list[i++] = "done";
- list[i--] = 0;
- return i;
-}
/*
* This routine summates the trade.
*/
+static void
summate() {
reg bool some;
@@ -147,17 +119,11 @@ summate() {
printf("\t-- Nothing --\n");
}
}
-/*
- * This routine actually executes the trade.
- */
-do_trade() {
- move_em(&trades[0], &trades[1]);
- move_em(&trades[1], &trades[0]);
-}
/*
* This routine does a switch from one player to another
*/
+static void
move_em(from, to)
TRADE *from, *to; {
@@ -178,21 +144,69 @@ TRADE *from, *to; {
}
set_ownlist(to->trader);
}
+
+/*
+ * This routine actually executes the trade.
+ */
+static void
+do_trade() {
+
+ move_em(&trades[0], &trades[1]);
+ move_em(&trades[1], &trades[0]);
+}
+
+void
+trade() {
+
+ reg int tradee, i;
+
+ trading = TRUE;
+ for (i = 0; i < 2; i++) {
+ trades[i].cash = 0;
+ trades[i].gojf = FALSE;
+ trades[i].prop_list = NULL;
+ }
+over:
+ if (num_play == 1) {
+ printf("There ain't no-one around to trade WITH!!\n");
+ return;
+ }
+ if (num_play > 2) {
+ tradee = getinp("Which player do you wish to trade with? ",
+ name_list);
+ if (tradee == num_play)
+ return;
+ if (tradee == player) {
+ printf("You can't trade with yourself!\n");
+ goto over;
+ }
+ }
+ else
+ tradee = 1 - player;
+ get_list(0, player);
+ get_list(1, tradee);
+ if (getyn("Do you wish a summary? ") == 0)
+ summate();
+ if (getyn("Is the trade ok? ") == 0)
+ do_trade();
+}
+
/*
* This routine lets a player resign
*/
+void
resign() {
- reg int i, new_own;
+ reg int i, new_own = 0;
reg OWN *op;
SQUARE *sqp;
if (cur_p->money <= 0) {
- switch (board[cur_p->loc].type) {
+ switch (board[(int)cur_p->loc].type) {
case UTIL:
case RR:
case PRPTY:
- new_own = board[cur_p->loc].owner;
+ new_own = board[(int)cur_p->loc].owner;
break;
case SPEC:
case CC:
@@ -219,7 +233,7 @@ resign() {
} while (new_own == player);
name_list[num_play] = "done";
}
- if (getyn("Do you really want to resign? ", yn) != 0)
+ if (getyn("Do you really want to resign? ") != 0)
return;
if (num_play == 1) {
printf("Then NOBODY wins (not even YOU!)\n");
@@ -241,10 +255,10 @@ resign() {
for (op = cur_p->own_list; op; op = op->next) {
sqp = op->sqr;
sqp->owner = -1;
- sqp->desc->morg = FALSE;
- if (op->type == PRPTY) {
- isnot_monop(sqp->desc->mon_desc);
- sqp->desc->houses = 0;
+ ((PROP*)sqp->desc)->morg = FALSE;
+ if (op->sqr->type == PRPTY) {
+ isnot_monop(((PROP*)sqp->desc)->mon_desc);
+ ((PROP*)sqp->desc)->houses = 0;
}
}
if (cur_p->num_gojf)
@@ -253,7 +267,7 @@ resign() {
for (i = player; i < num_play; i++) {
name_list[i] = name_list[i+1];
if (i + 1 < num_play)
- cpy_st(&play[i], &play[i+1], sizeof (PLAY));
+ play[i] = play[i+1];
}
name_list[num_play--] = 0;
for (i = 0; i < N_SQRS; i++)
diff --git a/src/games/quiz/.gitignore b/src/games/quiz/.gitignore
new file mode 100644
index 0000000..fced154
--- /dev/null
+++ b/src/games/quiz/.gitignore
@@ -0,0 +1 @@
+quiz
diff --git a/src/games/quiz/Makefile b/src/games/quiz/Makefile
index c314721..4b3c2c3 100644
--- a/src/games/quiz/Makefile
+++ b/src/games/quiz/Makefile
@@ -1,42 +1,30 @@
# @(#)Makefile 4.2 (Berkeley) 9/7/85
#
-DESTDIR=
-CFLAGS= -O
-SEPFLAG= -i
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
+#CFLAGS = -O -DCROSS -Werror -Wall
-quiz: quiz.c
- cc ${SEPFLAG} ${CFLAGS} -o quiz quiz.c
+CFLAGS += -Werror -Wall
-install: quiz quiz.k
- install -s quiz ${DESTDIR}/usr/games/quiz
- cp -r quiz.k ${DESTDIR}/usr/games/lib
+OBJS = quiz.o
+MAN = quiz.0
+
+all: quiz $(MAN)
+
+quiz: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
+
+$(MAN): quiz.6
+ nroff -man $< > $@
clean:
- rm -f a.out core *.s *.o quiz
+ rm -f *.o core quiz *.0 *.dis
-depend:
- cat x.c
- for i in quiz; do \
- (echo $$i: $$i.c >>makedep; \
- /bin/grep '^#[ ]*include' x.c $$i.c | sed \
- -e 's,<\(.*\)>,"/usr/include/\1",' \
- -e 's/:[^"]*"\([^"]*\)".*/: \1/' \
- -e 's/\.c//' >>makedep); done
- echo '/^# DO NOT DELETE THIS LINE/+2,$$d' >eddep
- echo '$$r makedep' >>eddep
- echo 'w' >>eddep
- cp Makefile Makefile.bak
- ed - Makefile < eddep
- rm eddep makedep x.c
- echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile
- echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile
- echo '# see make depend above' >> Makefile
-
-# DO NOT DELETE THIS LINE -- make depend uses it
-
-quiz: quiz.c
-quiz: /usr/include/stdio.h
-quiz: /usr/include/signal.h
-# DEPENDENCIES MUST END AT END OF FILE
-# IF YOU PUT STUFF HERE IT WILL GO AWAY
-# see make depend above
+install: all
+ install quiz $(DESTDIR)/games/
+ install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/
+ cp -r quiz.k ${DESTDIR}/games/lib
diff --git a/src/games/quiz/quiz.c b/src/games/quiz/quiz.c
index 51da296..6e910d3 100644
--- a/src/games/quiz/quiz.c
+++ b/src/games/quiz/quiz.c
@@ -1,8 +1,10 @@
-
-static char sccsid[] = " quiz.c 4.2 85/01/09 ";
-
#include
#include
+#include
+#include
+#include
+#include
+
#define NF 10
#define NL 300
#define NC 200
@@ -24,8 +26,11 @@ int nc = 0;
char line[150];
char response[100];
char *tmp[NF];
-int select[NF];
+int choice[NF];
+int string(int s);
+
+int
readline()
{
char *t;
@@ -57,18 +62,34 @@ loop:
char *eu;
char *ev;
-cmp(u,v)
-char *u,*v;
+
+int
+fold(c)
+char c;
{
- int x;
- eu = u;
- ev = v;
- x = disj(1);
- if(x!=1)
- return(x);
- return(eat(1,0));
+ if(c<'A'||c>'Z')
+ return(c);
+ return(c|040);
}
+int
+eat(s,c)
+char c;
+{
+ if(*ev!=c)
+ return(2);
+ if(s==0) {
+ ev++;
+ return(1);
+ }
+ if(fold(*eu)!=fold(c))
+ return(0);
+ eu++;
+ ev++;
+ return(1);
+}
+
+int
disj(s)
{
int t, x;
@@ -83,7 +104,7 @@ disj(s)
case 0:
case ']':
case '}':
- return(t|x&s);
+ return t | (x & s);
case '|':
ev++;
t |= s;
@@ -108,6 +129,7 @@ disj(s)
}
}
+int
string(s)
{
int x;
@@ -152,44 +174,26 @@ string(s)
}
}
-eat(s,c)
-char c;
+int
+cmp(u,v)
+char *u,*v;
{
- if(*ev!=c)
- return(2);
- if(s==0) {
- ev++;
- return(1);
- }
- if(fold(*eu)!=fold(c))
- return(0);
- eu++;
- ev++;
- return(1);
-}
-
-fold(c)
-char c;
-{
- if(c<'A'||c>'Z')
- return(c);
- return(c|040);
-}
-
-publish(t)
-char *t;
-{
- ev = t;
- pub1(1);
+ int x;
+ eu = u;
+ ev = v;
+ x = disj(1);
+ if(x!=1)
+ return(x);
+ return(eat(1,0));
}
+void
pub1(s)
{
for(;;ev++){
switch(*ev) {
case '|':
s = 0;
- ev;
continue;
case ']':
case '}':
@@ -199,7 +203,6 @@ pub1(s)
case '{':
ev++;
pub1(s);
- ev;
continue;
case '\\':
if(*++ev=='\n')
@@ -211,6 +214,15 @@ pub1(s)
}
}
+void
+publish(t)
+char *t;
+{
+ ev = t;
+ pub1(1);
+}
+
+int
segment(u,w)
char *u, *w[];
{
@@ -240,8 +252,15 @@ char *u, *w[];
}
}
printf("Too many facts about one thing\n");
+ return 0;
}
+void
+badinfo(){
+ printf("Bad info %s\n",line);
+}
+
+int
perm(u,m,v,n,p)
int p[];
char *u[], *v[];
@@ -263,18 +282,20 @@ uloop: ;
return(1);
}
+int
find(u,m)
char *u[];
{
int n;
while(readline()){
n = segment(line,tmp);
- if(perm(u,m,tmp+1,n-1,select))
+ if(perm(u,m,tmp+1,n-1,choice))
return(1);
}
return(0);
}
+void
readindex()
{
xx[0] = nc = 0;
@@ -288,139 +309,17 @@ readindex()
}
}
+void
talloc()
{
int i;
- char *malloc();
for(i=0;i1&&*argv[1]=='-') {
- switch(argv[1][1]) {
- case 'i':
- if(argc>2)
- info = argv[2];
- argc -= 2;
- argv += 2;
- goto loop;
- case 't':
- tflag = 1;
- argc--;
- argv++;
- goto loop;
- }
- }
- input = fopen(info,"r");
- if(input==NULL) {
- printf("No info\n");
- exit(0);
- }
- talloc();
- if(argc<=2)
- instruct(info);
- signal(SIGINT,done);
- argv[argc] = 0;
- if(find(&argv[1],argc-1)==0)
- dunno();
- fclose(input);
- input = fopen(tmp[0],"r");
- if(input==NULL)
- dunno();
- readindex();
- if(!tflag || na>nl)
- na = nl;
- stdout->_flag |= _IONBF;
- for(;;) {
- i = next();
- fseek(input,xx[i]+0L,0);
- z = xx[i+1]-xx[i];
- for(j=0;j1) badinfo();
- if(x==1) {
- printf("Right!\n");
- if(count==0) rights++;
- if(++score[i]>=1 && nar&&t[-1]==' ')
- *--t = '\n';
- break;
- }
- }
- *t = 0;
- return(t-r);
-}
-
-next()
-{
- int flag;
- inc = inc*3125&077777;
- ptr = (inc>>2)%na;
- flag = 0;
- while(score[ptr]>0)
- if(++ptr>=na) {
- ptr = 0;
- if(flag) done();
- flag = 1;
- }
- return(ptr);
-}
-
-done()
+void
+done(int sig)
{
printf("\nRights %d, wrongs %d, ", rights, wrongs);
if(guesses)
@@ -428,9 +327,10 @@ done()
printf("score %d%%\n",100*rights/(rights+wrongs));
exit(0);
}
-instruct(info)
+
+void
+instruct(char *info)
{
- char *t;
int i, n;
printf("Subjects:\n\n");
while(readline()) {
@@ -466,12 +366,141 @@ instruct(info)
exit(0);
}
-badinfo(){
- printf("Bad info %s\n",line);
-}
-
+void
dunno()
{
printf("I don't know about that\n");
exit(0);
}
+
+int
+next()
+{
+ int flag;
+ inc = inc*3125&077777;
+ ptr = (inc>>2)%na;
+ flag = 0;
+ while(score[ptr]>0)
+ if(++ptr>=na) {
+ ptr = 0;
+ if(flag) done(0);
+ flag = 1;
+ }
+ return(ptr);
+}
+
+int
+query(r)
+char *r;
+{
+ char *t;
+ for(t=r;;t++) {
+ if(read(0,t,1)==0)
+ done(0);
+ if(*t==' '&&(t==r||t[-1]==' '))
+ t--;
+ if(*t=='\n') {
+ while(t>r&&t[-1]==' ')
+ *--t = '\n';
+ break;
+ }
+ }
+ *t = 0;
+ return(t-r);
+}
+
+int
+main(argc,argv)
+char *argv[];
+{
+ int j, i, x, z, count;
+ char *indexfile, *p;
+ time_t tvec;
+ char inputfile[100];
+
+#ifdef CROSS
+ indexfile = "/usr/local/games/quiz.k/index";
+#else
+ indexfile = "/games/lib/quiz.k/index";
+#endif
+ time(&tvec);
+ inc = (tvec & 077774) | 01;
+loop:
+ if(argc>1&&*argv[1]=='-') {
+ switch(argv[1][1]) {
+ case 'i':
+ if(argc>2)
+ indexfile = argv[2];
+ argc -= 2;
+ argv += 2;
+ goto loop;
+ case 't':
+ tflag = 1;
+ argc--;
+ argv++;
+ goto loop;
+ }
+ }
+ input = fopen(indexfile,"r");
+ if(input==NULL) {
+ printf("No indexfile\n");
+ exit(0);
+ }
+ talloc();
+ if(argc<=2)
+ instruct(indexfile);
+ signal(SIGINT,done);
+ argv[argc] = 0;
+ if(find(&argv[1],argc-1)==0)
+ dunno();
+ fclose(input);
+
+ strcpy(inputfile, indexfile);
+ p = strrchr(inputfile, '/');
+ if (! p)
+ dunno();
+ strcpy(p+1, tmp[0]);
+ input = fopen(inputfile,"r");
+ if(input==NULL)
+ dunno();
+ readindex();
+ if(!tflag || na>nl)
+ na = nl;
+ setbuf(stdout, NULL);
+ for(;;) {
+ i = next();
+ fseek(input,xx[i]+0L,0);
+ z = xx[i+1]-xx[i];
+ for(j=0;j1) badinfo();
+ if(x==1) {
+ printf("Right!\n");
+ if(count==0) rights++;
+ if(++score[i]>=1 && na1 > lint.out
+OBJS = extern.o init_field.o main.o make_level.o move.o \
+ move_robs.o play_level.o query.o rnd_pos.o score.o \
+ flush_in.o
+MAN = robots.0
+LIBS = -lcurses -ltermcap -lc
-install: robots
- install -s -m 4711 -o daemon robots ${DESTDIR}/usr/games
- install -c -m 644 -o daemon /dev/null ${DESTDIR}/usr/games/lib/robots_roll
+all: robots $(MAN)
+
+robots: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
+
+$(MAN): robots.6
+ nroff -man $< > $@
clean:
- rm -f a.out core *.o robots lint.out errs
+ rm -f *.o core robots *.0 *.dis
+
+install: all
+ install robots $(DESTDIR)/games/
+ install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/
+ install -c -m 644 /dev/null ${DESTDIR}/games/lib/robots_roll
+###
+extern.o: extern.c robots.h
+flush_in.o: flush_in.c
+init_field.o: init_field.c robots.h
+main.o: main.c robots.h
+make_level.o: make_level.c robots.h
+move.o: move.c robots.h
+move_robs.o: move_robs.c robots.h
+play_level.o: play_level.c robots.h
+query.o: query.c robots.h
+rnd_pos.o: rnd_pos.c robots.h
+score.o: score.c robots.h
diff --git a/src/games/robots/extern.c b/src/games/robots/extern.c
index 1a4c103..bfb4042 100644
--- a/src/games/robots/extern.c
+++ b/src/games/robots/extern.c
@@ -3,12 +3,7 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)extern.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include "robots.h"
+#include "robots.h"
bool Dead; /* Player is now dead */
bool Full_clear = TRUE; /* Lots of junk for init_field to clear */
diff --git a/src/games/robots/flush_in.c b/src/games/robots/flush_in.c
index 9d4842d..e9b4c2d 100644
--- a/src/games/robots/flush_in.c
+++ b/src/games/robots/flush_in.c
@@ -3,22 +3,18 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)flush_in.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include
+#include
/*
* flush_in:
* Flush all pending input.
*/
+void
flush_in()
{
-# ifdef TIOCFLUSH
+#ifdef TIOCFLUSH
ioctl(fileno(stdin), TIOCFLUSH, NULL);
-# else TIOCFLUSH
+#else
crmode();
-# endif TIOCFLUSH
+#endif
}
diff --git a/src/games/robots/init_field.c b/src/games/robots/init_field.c
index a72c717..78cafcf 100644
--- a/src/games/robots/init_field.c
+++ b/src/games/robots/init_field.c
@@ -3,23 +3,17 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)init_field.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include "robots.h"
+#include "robots.h"
/*
* init_field:
* Lay down the initial pattern whih is constant across all levels,
* and initialize all the global variables.
*/
+void
init_field()
{
register int i;
- register WINDOW *wp;
- register int j;
static bool first = TRUE;
static char *desc[] = {
"Directions:",
diff --git a/src/games/robots/main.c b/src/games/robots/main.c
index df15f7a..0b3e8b8 100644
--- a/src/games/robots/main.c
+++ b/src/games/robots/main.c
@@ -3,21 +3,71 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
+#include "robots.h"
+#include
+#include
+#include
+#include
+#include
-#ifndef lint
-char copyright[] =
-"@(#) Copyright (c) 1980 Regents of the University of California.\n\
- All rights reserved.\n";
-#endif not lint
+#ifndef CROSS
+static int
+fputchar(int c)
+{
+ return putchar(c);
+}
+#endif
-#ifndef lint
-static char sccsid[] = "@(#)main.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
+/*
+ * quit:
+ * Leave the program elegantly.
+ */
+void
+quit(int sig)
+{
+ mvcur(0, COLS - 1, LINES - 1, 0);
+#ifndef CROSS
+ if (CE) {
+ tputs(CE, 1, fputchar);
+ endwin();
+ } else
+#endif
+ {
+ endwin();
+ putchar('\n');
+ }
+ exit(0);
+ /* NOTREACHED */
+}
-# include "robots.h"
-# include
-# include
+/*
+ * another:
+ * See if another game is desired
+ */
+int
+another()
+{
+ register int y;
+#ifdef FANCY
+ if ((Stand_still || Pattern_roll) && !Newscore)
+ return TRUE;
+#endif
+
+ if (query("Another game?")) {
+ if (Full_clear) {
+ for (y = 1; y <= Num_scores; y++) {
+ move(y, 1);
+ clrtoeol();
+ }
+ refresh();
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+int
main(ac, av)
int ac;
char **av;
@@ -37,10 +87,12 @@ char **av;
if (isdigit(av[0][0]))
Max_per_uid = atoi(av[0]);
else {
- setuid(getuid());
- setgid(getgid());
+ if (setuid(getuid()) < 0)
+ /*ignore*/;
+ if (setgid(getgid()) < 0)
+ /*ignore*/;
Scorefile = av[0];
-# ifdef FANCY
+#ifdef FANCY
sp = rindex(Scorefile, '/');
if (sp == NULL)
sp = Scorefile;
@@ -50,7 +102,7 @@ char **av;
Stand_still = TRUE;
if (Pattern_roll || Stand_still)
Teleport = TRUE;
-# endif
+#endif
}
else
for (sp = &av[0][1]; *sp; sp++)
@@ -116,52 +168,6 @@ char **av;
refresh();
score();
} while (another());
- quit();
-}
-
-/*
- * quit:
- * Leave the program elegantly.
- */
-quit()
-{
- extern int _putchar();
-
- mvcur(0, COLS - 1, LINES - 1, 0);
- if (CE) {
- tputs(CE, 1, _putchar);
- endwin();
- }
- else {
- endwin();
- putchar('\n');
- }
- exit(0);
- /* NOTREACHED */
-}
-
-/*
- * another:
- * See if another game is desired
- */
-another()
-{
- register int y;
-
-#ifdef FANCY
- if ((Stand_still || Pattern_roll) && !Newscore)
- return TRUE;
-#endif
-
- if (query("Another game?")) {
- if (Full_clear) {
- for (y = 1; y <= Num_scores; y++) {
- move(y, 1);
- clrtoeol();
- }
- refresh();
- }
- return TRUE;
- }
- return FALSE;
+ quit(0);
+ return 0;
}
diff --git a/src/games/robots/make_level.c b/src/games/robots/make_level.c
index 56204b4..0f5b9cd 100644
--- a/src/games/robots/make_level.c
+++ b/src/games/robots/make_level.c
@@ -3,23 +3,19 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)make_level.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include "robots.h"
+#include "robots.h"
+#include
/*
* make_level:
* Make the current level
*/
+void
make_level()
{
register int i;
register COORD *cp;
- register WINDOW *wp;
- register int x, *endp;
+ register int x;
reset_count();
for (i = 1; i < Y_FIELDSIZE; i++)
diff --git a/src/games/robots/move.c b/src/games/robots/move.c
index 80b6230..1ad7dd7 100644
--- a/src/games/robots/move.c
+++ b/src/games/robots/move.c
@@ -3,25 +3,138 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
+#include "robots.h"
+#include
-#ifndef lint
-static char sccsid[] = "@(#)move.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
+#define ESC '\033'
-# include "robots.h"
-# include
+/*
+ * eaten:
+ * Player would get eaten at this place
+ */
+int
+eaten(pos)
+register COORD *pos;
+{
+ register int x, y;
-# define ESC '\033'
+ for (y = pos->y - 1; y <= pos->y + 1; y++) {
+ if (y <= 0 || y >= Y_FIELDSIZE)
+ continue;
+ for (x = pos->x - 1; x <= pos->x + 1; x++) {
+ if (x <= 0 || x >= X_FIELDSIZE)
+ continue;
+ if (Field[y][x] == 1)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*
+ * must_telep:
+ * Must I teleport; i.e., is there anywhere I can move without
+ * being eaten?
+ */
+int
+must_telep()
+{
+ register int x, y;
+ static COORD newpos;
+
+#ifdef FANCY
+ if (Stand_still && Num_robots > 1 && eaten(&My_pos))
+ return TRUE;
+#endif
+
+ for (y = -1; y <= 1; y++) {
+ newpos.y = My_pos.y + y;
+ if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE)
+ continue;
+ for (x = -1; x <= 1; x++) {
+ newpos.x = My_pos.x + x;
+ if (newpos.x <= 0 || newpos.x >= X_FIELDSIZE)
+ continue;
+ if (Field[newpos.y][newpos.x] > 0)
+ continue;
+ if (!eaten(&newpos))
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+/*
+ * do_move:
+ * Execute a move
+ */
+int
+do_move(dy, dx)
+int dy, dx;
+{
+ static COORD newpos;
+
+ newpos.y = My_pos.y + dy;
+ newpos.x = My_pos.x + dx;
+ if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE ||
+ newpos.x <= 0 || newpos.x >= X_FIELDSIZE ||
+ Field[newpos.y][newpos.x] > 0 || eaten(&newpos)) {
+ if (Running) {
+ Running = FALSE;
+ leaveok(stdscr, FALSE);
+ move(My_pos.y, My_pos.x);
+ refresh();
+ }
+ else {
+ putchar(CTRL('G'));
+ reset_count();
+ }
+ return FALSE;
+ }
+ else if (dy == 0 && dx == 0)
+ return TRUE;
+ mvaddch(My_pos.y, My_pos.x, ' ');
+ My_pos = newpos;
+ mvaddch(My_pos.y, My_pos.x, PLAYER);
+ if (!jumping())
+ refresh();
+ return TRUE;
+}
+
+/*
+ * reset_count:
+ * Reset the count variables
+ */
+void
+reset_count()
+{
+ Count = 0;
+ Running = FALSE;
+ leaveok(stdscr, FALSE);
+ refresh();
+}
+
+/*
+ * jumping:
+ * See if we are jumping, i.e., we should not refresh.
+ */
+int
+jumping()
+{
+ return (Jump && (Count || Running || Waiting));
+}
/*
* get_move:
* Get and execute a move from the player
*/
+void
get_move()
{
register int c;
- register int y, x, lastmove;
- static COORD newpos;
+#ifdef FANCY
+ register int lastmove = 0;
+#endif
if (Waiting)
return;
@@ -122,7 +235,7 @@ over:
case 'q':
case 'Q':
if (query("Really quit?"))
- quit();
+ quit(0);
refresh();
break;
case 'w':
@@ -142,13 +255,13 @@ teleport:
refresh();
flush_in();
goto ret;
- case CTRL(L):
+ case CTRL('L'):
wrefresh(curscr);
break;
case EOF:
break;
default:
- putchar(CTRL(G));
+ putchar(CTRL('G'));
reset_count();
fflush(stdout);
break;
@@ -159,114 +272,3 @@ ret:
if (--Count == 0)
leaveok(stdscr, FALSE);
}
-
-/*
- * must_telep:
- * Must I teleport; i.e., is there anywhere I can move without
- * being eaten?
- */
-must_telep()
-{
- register int x, y;
- static COORD newpos;
-
-#ifdef FANCY
- if (Stand_still && Num_robots > 1 && eaten(&My_pos))
- return TRUE;
-#endif
-
- for (y = -1; y <= 1; y++) {
- newpos.y = My_pos.y + y;
- if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE)
- continue;
- for (x = -1; x <= 1; x++) {
- newpos.x = My_pos.x + x;
- if (newpos.x <= 0 || newpos.x >= X_FIELDSIZE)
- continue;
- if (Field[newpos.y][newpos.x] > 0)
- continue;
- if (!eaten(&newpos))
- return FALSE;
- }
- }
- return TRUE;
-}
-
-/*
- * do_move:
- * Execute a move
- */
-do_move(dy, dx)
-int dy, dx;
-{
- static COORD newpos;
-
- newpos.y = My_pos.y + dy;
- newpos.x = My_pos.x + dx;
- if (newpos.y <= 0 || newpos.y >= Y_FIELDSIZE ||
- newpos.x <= 0 || newpos.x >= X_FIELDSIZE ||
- Field[newpos.y][newpos.x] > 0 || eaten(&newpos)) {
- if (Running) {
- Running = FALSE;
- leaveok(stdscr, FALSE);
- move(My_pos.y, My_pos.x);
- refresh();
- }
- else {
- putchar(CTRL(G));
- reset_count();
- }
- return FALSE;
- }
- else if (dy == 0 && dx == 0)
- return TRUE;
- mvaddch(My_pos.y, My_pos.x, ' ');
- My_pos = newpos;
- mvaddch(My_pos.y, My_pos.x, PLAYER);
- if (!jumping())
- refresh();
- return TRUE;
-}
-
-/*
- * eaten:
- * Player would get eaten at this place
- */
-eaten(pos)
-register COORD *pos;
-{
- register int x, y;
-
- for (y = pos->y - 1; y <= pos->y + 1; y++) {
- if (y <= 0 || y >= Y_FIELDSIZE)
- continue;
- for (x = pos->x - 1; x <= pos->x + 1; x++) {
- if (x <= 0 || x >= X_FIELDSIZE)
- continue;
- if (Field[y][x] == 1)
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/*
- * reset_count:
- * Reset the count variables
- */
-reset_count()
-{
- Count = 0;
- Running = FALSE;
- leaveok(stdscr, FALSE);
- refresh();
-}
-
-/*
- * jumping:
- * See if we are jumping, i.e., we should not refresh.
- */
-jumping()
-{
- return (Jump && (Count || Running || Waiting));
-}
diff --git a/src/games/robots/move_robs.c b/src/games/robots/move_robs.c
index 3fd782c..2c7a4f1 100644
--- a/src/games/robots/move_robs.c
+++ b/src/games/robots/move_robs.c
@@ -3,34 +3,45 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
+#include "robots.h"
+#include
+#include
+#include
-#ifndef lint
-static char sccsid[] = "@(#)move_robs.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include "robots.h"
-# include
+/*
+ * sign:
+ * Return the sign of the number
+ */
+static int
+sign(n)
+int n;
+{
+ if (n < 0)
+ return -1;
+ else if (n > 0)
+ return 1;
+ else
+ return 0;
+}
/*
* move_robots:
* Move the robots around
*/
+void
move_robots(was_sig)
-bool was_sig;
+int was_sig;
{
register COORD *rp;
- register int y, x;
- register int mindist, d;
- static COORD newpos;
if (Real_time)
signal(SIGALRM, move_robots);
-# ifdef DEBUG
+#ifdef DEBUG
move(Min.y, Min.x);
addch(inch());
move(Max.y, Max.x);
addch(inch());
-# endif DEBUG
+#endif
for (rp = Robots; rp < &Robots[MAXROBOTS]; rp++) {
if (rp->y < 0)
continue;
@@ -81,17 +92,17 @@ bool was_sig;
if (was_sig) {
refresh();
if (Dead || Num_robots <= 0)
- longjmp(End_move);
+ longjmp(End_move, 1);
}
-# ifdef DEBUG
+#ifdef DEBUG
standout();
move(Min.y, Min.x);
addch(inch());
move(Max.y, Max.x);
addch(inch());
standend();
-# endif DEBUG
+#endif
if (Real_time)
alarm(3);
}
@@ -100,6 +111,7 @@ bool was_sig;
* add_score:
* Add a score to the overall point total
*/
+void
add_score(add)
int add;
{
@@ -107,18 +119,3 @@ int add;
move(Y_SCORE, X_SCORE);
printw("%d", Score);
}
-
-/*
- * sign:
- * Return the sign of the number
- */
-sign(n)
-int n;
-{
- if (n < 0)
- return -1;
- else if (n > 0)
- return 1;
- else
- return 0;
-}
diff --git a/src/games/robots/play_level.c b/src/games/robots/play_level.c
index 32be7c1..f016c4d 100644
--- a/src/games/robots/play_level.c
+++ b/src/games/robots/play_level.c
@@ -3,21 +3,17 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)play_level.c 5.2 (Berkeley) 9/23/85";
-#endif not lint
-
-# include "robots.h"
+#include "robots.h"
+#include
/*
* play_level:
* Let the player play the current level
*/
+void
play_level()
{
register COORD *cp;
- register int y, x, bonus;
move(My_pos.y, My_pos.x);
addch(PLAYER);
@@ -29,14 +25,14 @@ play_level()
addch(ROBOT);
}
refresh();
-# ifdef DEBUG
+#ifdef DEBUG
standout();
move(Min.y, Min.x);
addch(inch());
move(Max.y, Max.x);
addch(inch());
standend();
-# endif DEBUG
+#endif
setjmp(End_move);
flush_in();
while (!Dead && Num_robots > 0) {
diff --git a/src/games/robots/query.c b/src/games/robots/query.c
index 2624829..973a247 100644
--- a/src/games/robots/query.c
+++ b/src/games/robots/query.c
@@ -3,17 +3,13 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)query.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include "robots.h"
+#include "robots.h"
/*
* query:
* Ask a question and get a yes or no answer. Default is "no".
*/
+int
query(prompt)
char *prompt;
{
diff --git a/src/games/robots/rnd_pos.c b/src/games/robots/rnd_pos.c
index 9706e0d..0c13e59 100644
--- a/src/games/robots/rnd_pos.c
+++ b/src/games/robots/rnd_pos.c
@@ -3,14 +3,17 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
+#include "robots.h"
+#include
-#ifndef lint
-static char sccsid[] = "@(#)rnd_pos.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
+#define IS_SAME(p,y,x) ((p).y != -1 && (p).y == y && (p).x == x)
-# include "robots.h"
-
-# define IS_SAME(p,y,x) ((p).y != -1 && (p).y == y && (p).x == x)
+static int
+rnd(range)
+int range;
+{
+ return random() % range;
+}
/*
* rnd_pos:
@@ -21,7 +24,6 @@ rnd_pos()
{
static COORD pos;
static int call = 0;
- register int i = 0;
do {
pos.y = rnd(Y_FIELDSIZE - 1) + 1;
@@ -31,11 +33,3 @@ rnd_pos()
call++;
return &pos;
}
-
-rnd(range)
-int range;
-{
- unsigned int rand();
-
- return rand() % range;
-}
diff --git a/src/games/robots/robots.h b/src/games/robots/robots.h
index de93fd4..94bab24 100644
--- a/src/games/robots/robots.h
+++ b/src/games/robots/robots.h
@@ -6,44 +6,53 @@
* @(#)robots.h 5.1 (Berkeley) 5/30/85
*/
-# include
-# include
+#include
+#include
+
+#ifndef flushok
+# define flushok(win, ok) /* empty */
+#endif
/*
* miscellaneous constants
*/
-# define Y_FIELDSIZE 23
-# define X_FIELDSIZE 60
-# define Y_SIZE 24
-# define X_SIZE 80
-# define MAXLEVELS 4
-# define MAXROBOTS (MAXLEVELS * 10)
-# define ROB_SCORE 10
-# define S_BONUS (60 * ROB_SCORE)
-# define Y_SCORE 21
-# define X_SCORE (X_FIELDSIZE + 9)
-# define Y_PROMPT (Y_FIELDSIZE - 1)
-# define X_PROMPT (X_FIELDSIZE + 2)
-# define MAXSCORES (Y_SIZE - 2)
-# define MAXNAME 16
-# define MS_NAME "Ten"
-# define SCOREFILE "/usr/games/lib/robots_roll"
+#define Y_FIELDSIZE 23
+#define X_FIELDSIZE 60
+#define Y_SIZE 24
+#define X_SIZE 80
+#define MAXLEVELS 4
+#define MAXROBOTS (MAXLEVELS * 10)
+#define ROB_SCORE 10
+#define S_BONUS (60 * ROB_SCORE)
+#define Y_SCORE 21
+#define X_SCORE (X_FIELDSIZE + 9)
+#define Y_PROMPT (Y_FIELDSIZE - 1)
+#define X_PROMPT (X_FIELDSIZE + 2)
+#define MAXSCORES (Y_SIZE - 2)
+#define MAXNAME 16
+#define MS_NAME "Ten"
+
+#ifdef CROSS
+# define SCOREFILE "/usr/local/games/robots_roll"
+#else
+# define SCOREFILE "/games/lib/robots_roll"
+#endif
/*
* characters on screen
*/
-# define ROBOT '+'
-# define HEAP '*'
-# define PLAYER '@'
+#define ROBOT '+'
+#define HEAP '*'
+#define PLAYER '@'
/*
* pseudo functions
*/
-# undef CTRL
-# define CTRL(X) ('X' - 'A' + 1)
+#undef CTRL
+#define CTRL(x) (x - 'A' + 1)
/*
* type definitions
@@ -77,7 +86,19 @@ extern jmp_buf End_move;
/*
* functions types
*/
+COORD *rnd_pos(void);
-int quit(), cmp_sc(), move_robots();
+void quit(int sig);
+void move_robots(int was_sig);
+void show_score(void);
+void init_field(void);
+void make_level(void);
+void play_level(void);
+void score(void);
+void reset_count(void);
+void flush_in(void);
+void add_score(int add);
+void get_move(void);
-COORD *rnd_pos();
+int query(char *prompt);
+int jumping(void);
diff --git a/src/games/robots/score.c b/src/games/robots/score.c
index 31e0ed7..172a3ec 100644
--- a/src/games/robots/score.c
+++ b/src/games/robots/score.c
@@ -3,13 +3,12 @@
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*/
-
-#ifndef lint
-static char sccsid[] = "@(#)score.c 5.1 (Berkeley) 5/30/85";
-#endif not lint
-
-# include "robots.h"
-# include
+#include "robots.h"
+#include
+#include
+#include
+#include
+#include
typedef struct {
int s_uid;
@@ -25,11 +24,37 @@ int Max_per_uid = MAX_PER_UID;
static SCORE Top[MAXSCORES];
+/*
+ * cmp_sc:
+ * Compare two scores.
+ */
+static int
+cmp_sc(a1, a2)
+const void *a1, *a2;
+{
+ const SCORE *s1 = a1;
+ const SCORE *s2 = a2;
+
+ return s2->s_score - s1->s_score;
+}
+
+static void
+set_name(scp)
+register SCORE *scp;
+{
+ register PASSWD *pp;
+
+ if ((pp = getpwuid(scp->s_uid)) == NULL)
+ pp->pw_name = "???";
+ strncpy(scp->s_name, pp->pw_name, MAXNAME);
+}
+
/*
* score:
* Post the player's score, if reasonable, and then print out the
* top list.
*/
+void
score()
{
register int inf;
@@ -44,9 +69,12 @@ score()
return;
}
- if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid)
- read(inf, Top, sizeof Top);
- else {
+ if (read(inf, &max_uid, sizeof max_uid) == sizeof max_uid) {
+ if (read(inf, Top, sizeof Top) != sizeof Top) {
+ perror("Error reading top scores");
+ exit(-1);
+ }
+ } else {
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
scp->s_score = -1;
max_uid = Max_per_uid;
@@ -101,36 +129,23 @@ score()
if (Newscore) {
lseek(inf, 0L, 0);
- write(inf, &max_uid, sizeof max_uid);
- write(inf, Top, sizeof Top);
+ if (write(inf, &max_uid, sizeof max_uid) != sizeof max_uid) {
+ perror("Error writing max uid");
+ exit(-1);
+ }
+ if (write(inf, Top, sizeof Top) != sizeof Top) {
+ perror("Error writing top scores");
+ exit(-1);
+ }
}
close(inf);
}
-set_name(scp)
-register SCORE *scp;
-{
- register PASSWD *pp;
-
- if ((pp = getpwuid(scp->s_uid)) == NULL)
- pp->pw_name = "???";
- strncpy(scp->s_name, pp->pw_name, MAXNAME);
-}
-
-/*
- * cmp_sc:
- * Compare two scores.
- */
-cmp_sc(s1, s2)
-register SCORE *s1, *s2;
-{
- return s2->s_score - s1->s_score;
-}
-
/*
* show_score:
* Show the score list for the '-s' option.
*/
+void
show_score()
{
register SCORE *scp;
@@ -145,11 +160,18 @@ show_score()
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
scp->s_score = -1;
- read(inf, &max_score, sizeof max_score);
- read(inf, Top, sizeof Top);
+ if (read(inf, &max_score, sizeof max_score) != sizeof max_score) {
+ perror("Error reading max scores");
+ exit(-1);
+ }
+ if (read(inf, Top, sizeof Top) != sizeof Top) {
+ perror("Error reading top scores");
+ exit(-1);
+ }
close(inf);
inf = 1;
for (scp = Top; scp < &Top[MAXSCORES]; scp++)
if (scp->s_score >= 0)
- printf("%d\t%d\t%.*s\n", inf++, scp->s_score, sizeof scp->s_name, scp->s_name);
+ printf("%d\t%d\t%.*s\n", inf++, scp->s_score,
+ (int)sizeof scp->s_name, scp->s_name);
}
diff --git a/src/games/snake/.gitignore b/src/games/snake/.gitignore
new file mode 100644
index 0000000..1ebd43a
--- /dev/null
+++ b/src/games/snake/.gitignore
@@ -0,0 +1,2 @@
+snake
+snscore
diff --git a/src/games/snake/Makefile b/src/games/snake/Makefile
index 18588cf..7b06988 100644
--- a/src/games/snake/Makefile
+++ b/src/games/snake/Makefile
@@ -5,37 +5,39 @@
#
# @(#)Makefile 5.1.1 (2.11BSD GTE) 1/16/95
#
-DESTDIR=
-CFLAGS= -O -DCHECKBUSY
-LIBS= -lm -ltermcap
-BIN= $(DESTDIR)/usr/games
-LIB= $(DESTDIR)/usr/games/lib
-USER= daemon
-UTILS= snscore busy
-OBJS= snake.o move.o
-ALL= snake ${UTILS}
-SEPFLAG= -i
+TOPSRC = $(shell cd ../../..; pwd)
+include $(TOPSRC)/target.mk
+#include $(TOPSRC)/cross.mk
+#CFLAGS = -O -g -DCROSS
-all: ${ALL}
+CFLAGS += -Werror -Wall
-snake: $(OBJS)
- cc ${SEPFLAG} $(OBJS) -o snake $(LIBS)
+OBJS = snake.o move.o
+MAN = snake.0
+LIBS = -lm -ltermcap -lc
-snake.o move.o:snake.h
+all: snake snscore $(MAN)
-snscore: snscore.c
- cc ${SEPFLAG} $(CFLAGS) snscore.c -o snscore
+snake: $(OBJS)
+ $(CC) $(LDFLAGS) -o $@.elf $(OBJS) $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
-busy: busy.c
- cc ${SEPFLAG} $(CFLAGS) busy.c -o busy
+snscore: snscore.o
+ $(CC) $(LDFLAGS) -o $@.elf snscore.o $(LIBS)
+ $(OBJDUMP) -S $@.elf > $@.dis
+ $(SIZE) $@.elf
+ $(ELF2AOUT) $@.elf $@ && rm $@.elf
-install: all
- install -s -m 4755 -o ${USER} snake ${BIN}/snake
- install -s -m 755 -o ${USER} snscore ${BIN}/snscore
- install -s -m 755 -o ${USER} busy ${LIB}/busy
- cat /dev/null >> $(LIB)/snakerawscores
- chmod 644 $(LIB)/snakerawscores
- chown $(USER) $(LIB)/snakerawscores
+$(MAN): snake.6
+ nroff -man $< > $@
clean:
- rm -f *.o ${ALL}
+ rm -f *.o core snake snscore *.0 *.dis
+
+install: all
+ install snake $(DESTDIR)/games/
+ install snscore $(DESTDIR)/games/
+ install -m 644 $(MAN) $(DESTDIR)/share/man/cat6/
+ install -c -m 644 /dev/null ${DESTDIR}/games/lib/snakerawscores
diff --git a/src/games/snake/busy.c b/src/games/snake/busy.c
deleted file mode 100644
index 4467ea9..0000000
--- a/src/games/snake/busy.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 1980 Regents of the University of California.
- * All rights reserved. The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
- */
-
-#if defined(DOSCCS) && !defined(lint)
-static char sccsid[] = "@(#)busy.c 5.1.2 (2.11BSD GTE) 1/16/95";
-#endif
-
-/*
- * busy: print an indication of how busy the system is for games.
- */
-#ifndef MAX
-# define MAX 30
-#endif
-
-#include
-main(argc, argv)
-char **argv;
-{
- double la[3];
- double max;
-
- getloadavg(la, 3);
- max = la[0];
- if (la[1] > max) max = la[1];
- if (la[2] > max) max = la[2];
- if (argc > 1)
- printf("1=%g, 5=%g, 15=%g, max=%g\n", la[0], la[1], la[2], max);
- if (max > MAX)
- printf("100\n"); /* incredibly high, no games allowed */
- else
- printf("0\n");
- exit(0);
-}
diff --git a/src/games/snake/move.c b/src/games/snake/move.c
index c0138c1..56f6848 100644
--- a/src/games/snake/move.c
+++ b/src/games/snake/move.c
@@ -4,10 +4,6 @@
* specifies the terms and conditions for redistribution.
*/
-#if !defined(lint) && defined(DOSCCS)
-static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28";
-#endif
-
/*************************************************************************
*
* MOVE LIBRARY
@@ -31,9 +27,9 @@ static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28";
* home() home.
* ll() move to lower left corner of screen.
* cr() carriage return (no line feed).
- * printf() just like standard printf, but keeps track
+ * print() just like standard printf, but keeps track
* of cursor position. (Uses pstring).
- * aprintf() same as printf, but first argument is &point.
+ * aprint() same as print, but first argument is &point.
* (Uses pstring).
* pstring(s) output the string of printing characters.
* However, '\r' is interpreted to mean return
@@ -59,137 +55,146 @@ static char sccsid[] = "@(#)move.c 5.1.1 (2.11BSD) 1997/3/28";
* same(&p1,&p2) returns 1 if p1 and p2 are the same point.
* point(&p,x,y) return point set to x,y.
*
- * baudrate(x) returns the baudrate of the terminal.
* delay(t) causes an approximately constant delay
* independent of baudrate.
* Duration is ~ t/20 seconds.
*
******************************************************************************/
-
#include "snake.h"
+#include
+#include
+#include
+#include
+#include
int CMlength;
int NDlength;
int BSlength;
int delaystr[10];
-short ospeed;
static char str[80];
-move(sp)
+int
+outch(c)
+{
+ return putchar(c);
+}
+
+void
+putpad(str)
+char *str;
+{
+ if (str)
+ tputs(str, 1, outch);
+}
+
+void
+bs()
+{
+ if (cursor.col > 0) {
+ putpad(BS);
+ cursor.col--;
+ }
+}
+
+void
+nd()
+{
+ putpad(ND);
+ cursor.col++;
+ if (cursor.col == COLUMNS+1) {
+ cursor.line++;
+ cursor.col = 0;
+ if (cursor.line >= LINES)cursor.line=LINES-1;
+ }
+}
+
+void
+right(sp)
struct point *sp;
{
- int distance;
- int tabcol,ct;
+ if (sp->col < cursor.col)
+ print("ERROR:right() can't move left\n");
+ while (sp->col > cursor.col) {
+ nd();
+ }
+}
+
+void
+cr()
+{
+ outch('\r');
+ cursor.col = 0;
+}
+
+void
+ll()
+{
+ int l;
struct point z;
- if (sp->line <0 || sp->col <0 || sp->col > COLUMNS){
- printf("move to [%d,%d]?",sp->line,sp->col);
+ l = lcnt + 2;
+ if (LL != NULL && LINES==l) {
+ putpad(LL);
+ cursor.line = LINES-1;
+ cursor.col = 0;
return;
}
- if (sp->line >= LINES){
- move(point(&z,sp->col,LINES-1));
- while(sp->line-- >= LINES)putchar('\n');
- return;
- }
-
- if (CM != 0) {
- char *cmstr = tgoto(CM, sp->col, sp->line);
-
- CMlength = strlen(cmstr);
- if(cursor.line == sp->line){
- distance = sp->col - cursor.col;
- if(distance == 0)return; /* Already there! */
- if(distance > 0){ /* Moving to the right */
- if(distance*NDlength < CMlength){
- right(sp);
- return;
- }
- if(TA){
- ct=sp->col&7;
- tabcol=(cursor.col|7)+1;
- do{
- ct++;
- tabcol=(tabcol|7)+1;
- }
- while(tabcolcol);
- if(ctcol < CMlength){
- cr();
- right(sp);
- return;
- }
- /* No more optimizations on same row. */
- }
- distance = sp->col - cursor.col;
- distance = distance > 0 ?
- distance*NDlength : -distance * BSlength;
-if(distance < 0)printf("ERROR: distance is negative: %d",distance);
- distance += abs(sp->line - cursor.line);
- if(distance >= CMlength){
- putpad(cmstr);
- cursor.line = sp->line;
- cursor.col = sp->col;
- return;
- }
- }
-
- /*
- * If we get here we have a terminal that can't cursor
- * address but has local motions or one which can cursor
- * address but can get there quicker with local motions.
- */
- gto(sp);
+ z.col = 0;
+ z.line = l-1;
+ move(&z);
}
+
+void
+up()
+{
+ putpad(UP);
+ cursor.line--;
+}
+
+void
+down()
+{
+ putpad(DO);
+ cursor.line++;
+ if (cursor.line >= LINES)cursor.line=LINES-1;
+}
+
+void
gto(sp)
struct point *sp;
{
-
- int distance,f,tfield,j;
+ int distance, f;
if (cursor.line > LINES || cursor.line <0 ||
cursor.col <0 || cursor.col > COLUMNS)
- printf("ERROR: cursor is at %d,%d\n",
+ print("ERROR: cursor is at %d,%d\n",
cursor.line,cursor.col);
if (sp->line > LINES || sp->line <0 ||
sp->col <0 || sp->col > COLUMNS)
- printf("ERROR: target is %d,%d\n",sp->line,sp->col);
- tfield = (sp->col) >> 3;
- if (sp->line == cursor.line){
- if (sp->col > cursor.col)right(sp);
+ print("ERROR: target is %d,%d\n",sp->line,sp->col);
+ if (sp->line == cursor.line) {
+ if (sp->col > cursor.col)
+ right(sp);
else{
distance = (cursor.col -sp->col)*BSlength;
- if (((TA) &&
- (distance > tfield+((sp->col)&7)*NDlength)
- ) ||
- (((cursor.col)*NDlength) < distance)
- ){
+ if (cursor.col*NDlength < distance) {
cr();
right(sp);
- }
- else{
- while(cursor.col > sp->col) bs();
+ } else {
+ while(cursor.col > sp->col)
+ bs();
}
}
return;
}
/*must change row */
- if (cursor.col - sp->col > (cursor.col >> 3)){
+ if (cursor.col - sp->col > (cursor.col >> 3)) {
if (cursor.col == 0)f = 0;
else f = -1;
}
else f = cursor.col >> 3;
- if (((sp->line << 1) + 1 < cursor.line - f) && (HO != 0)){
+ if (((sp->line << 1) + 1 < cursor.line - f) && (HO != 0)) {
/*
* home quicker than rlf:
* (sp->line + f > cursor.line - sp->line)
@@ -199,11 +204,11 @@ struct point *sp;
gto(sp);
return;
}
- if (((sp->line << 1) > cursor.line + LINES+1 + f) && (LL != 0)){
+ if (((sp->line << 1) > cursor.line + LINES+1 + f) && (LL != 0)) {
/* home,rlf quicker than lf
- * (LINES+1 - sp->line + f < sp->line - cursor.line)
+ * (LINES+1 - sp->line + f < sp->line - cursor.line)
*/
- if (cursor.line > f + 1){
+ if (cursor.line > f + 1) {
/* is home faster than wraparound lf?
* (cursor.line + 20 - sp->line > 21 - sp->line + f)
*/
@@ -219,71 +224,26 @@ struct point *sp;
gto(sp); /*can recurse since cursor.line = sp->line */
}
-right(sp)
-struct point *sp;
+void
+home()
{
- int field,tfield;
- int tabcol,strlength;
+ struct point z;
- if (sp->col < cursor.col)
- printf("ERROR:right() can't move left\n");
- if(TA){ /* If No Tabs: can't send tabs because ttydrive
- * loses count with control characters.
- */
- field = cursor.col >> 3;
-/*
- * This code is useful for a terminal which wraps around on backspaces.
- * (Mine does.) Unfortunately, this is not specified in termcap, and
- * most terminals don't work that way. (Of course, most terminals
- * have addressible cursors, too).
- */
- if (BW && (CM == 0) &&
- ((sp->col << 1) - field > (COLUMNS - 8) << 1 )
- ){
- if (cursor.line == 0){
- outch('\n');
- }
- outch('\r');
- cursor.col = COLUMNS + 1;
- while(cursor.col > sp->col)bs();
- if (cursor.line != 0) outch('\n');
- return;
- }
-
- tfield = sp->col >> 3;
-
- while (field < tfield){
- putpad(TA);
- cursor.col = ++field << 3;
- }
- tabcol = (cursor.col|7) + 1;
- strlength = (tabcol - sp->col)*BSlength + 1;
- /* length of sequence to overshoot */
- if (((sp->col - cursor.col)*NDlength > strlength) &&
- (tabcol < COLUMNS)
- ){
- /*
- * Tab past and backup
- */
- putpad(TA);
- cursor.col = (cursor.col | 7) + 1;
- while(cursor.col > sp->col)bs();
- }
- }
- while (sp->col > cursor.col){
- nd();
+ if (HO != 0) {
+ putpad(HO);
+ cursor.col = cursor.line = 0;
+ return;
}
+ z.col = z.line = 0;
+ move(&z);
}
-cr(){
- outch('\r');
- cursor.col = 0;
-}
-
-clear(){
+void
+clear()
+{
int i;
- if (CL){
+ if (CL) {
putpad(CL);
cursor.col=cursor.line=0;
} else {
@@ -295,100 +255,66 @@ clear(){
}
}
-home(){
+void
+move(sp)
+struct point *sp;
+{
struct point z;
- if(HO != 0){
- putpad(HO);
- cursor.col = cursor.line = 0;
+ if (sp->line <0 || sp->col <0 || sp->col > COLUMNS) {
+ print("move to [%d,%d]?",sp->line,sp->col);
return;
}
- z.col = z.line = 0;
- move(&z);
-}
-
-ll(){
- int j,l;
- struct point z;
-
- l = lcnt + 2;
- if(LL != NULL && LINES==l){
- putpad(LL);
- cursor.line = LINES-1;
- cursor.col = 0;
+ if (sp->line >= LINES) {
+ move(point(&z,sp->col,LINES-1));
+ while(sp->line-- >= LINES)putchar('\n');
return;
}
- z.col = 0;
- z.line = l-1;
- move(&z);
-}
-
-up(){
- putpad(UP);
- cursor.line--;
-}
-
-down(){
- putpad(DO);
- cursor.line++;
- if (cursor.line >= LINES)cursor.line=LINES-1;
-}
-bs(){
- if (cursor.col > 0){
- putpad(BS);
- cursor.col--;
- }
-}
-
-nd(){
- putpad(ND);
- cursor.col++;
- if (cursor.col == COLUMNS+1){
- cursor.line++;
- cursor.col = 0;
- if (cursor.line >= LINES)cursor.line=LINES-1;
- }
+ if (sp->line == cursor.line) {
+ if (sp->col == cursor.col)
+ return;
+ if (sp->col == cursor.col-1) {
+ bs();
+ return;
+ }
+ }
+ if (sp->line == cursor.line+1) {
+ if (sp->col == cursor.col) {
+ down();
+ return;
+ }
+ if (sp->col == cursor.col-1) {
+ down();
+ bs();
+ return;
+ }
+ }
+ char *cmstr = tgoto(CM, sp->col, sp->line);
+ putpad(cmstr);
+ cursor.line = sp->line;
+ cursor.col = sp->col;
}
+void
pch(c)
{
outch(c);
- if(++cursor.col >= COLUMNS && AM) {
- cursor.col = 0;
- ++cursor.line;
+ if (++cursor.col >= COLUMNS) {
+ cursor.col = -1;
+ cursor.line = -1;
}
}
-aprintf(ps,st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9)
-struct point *ps;
-char *st;
-int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9;
-
-{
- struct point p;
-
- p.line = ps->line+1; p.col = ps->col+1;
- move(&p);
- sprintf(str,st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9);
- pstring(str);
-}
-
-printf(st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9)
-char *st;
-int v0,v1,v2,v3,v4,v5,v6,v7,v8,v9;
-{
- sprintf(str,st,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9);
- pstring(str);
-}
-
+void
pstring(s)
-char *s;{
+char *s;
+{
struct point z;
int stcol;
stcol = cursor.col;
- while (s[0] != '\0'){
- switch (s[0]){
+ while (s[0] != '\0') {
+ switch (s[0]) {
case '\n':
move(point(&z,0,cursor.line+1));
break;
@@ -403,106 +329,107 @@ char *s;{
case '\b':
bs();
break;
- case CTRL(g):
- outch(CTRL(g));
+ case CTRL('g'):
+ outch(CTRL('g'));
break;
default:
- if (s[0] < ' ')break;
+ if (s[0] < ' ')
+ break;
pch(s[0]);
}
s++;
}
}
+void
+aprint(struct point *ps, char *fmt, ...)
+{
+ va_list ap;
+ struct point p;
+
+ p.line = ps->line+1;
+ p.col = ps->col+1;
+ move(&p);
+ va_start(ap, fmt);
+ vsprintf(str, fmt, ap);
+ va_end(ap);
+ pstring(str);
+}
+
+void
+print(char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsprintf(str, fmt, ap);
+ va_end(ap);
+ pstring(str);
+}
+
+void
pchar(ps,ch)
struct point *ps;
-char ch;{
+char ch;
+{
struct point p;
- p.col = ps->col + 1; p.line = ps->line + 1;
- if (
- (p.col >= 0) &&
- (p.line >= 0) &&
- (
- (
- (p.line < LINES) &&
- (p.col < COLUMNS)
- ) ||
- (
- (p.col == COLUMNS) &&
- (p.line < LINES-1)
- )
- )
- ){
+
+ p.col = ps->col + 1;
+ p.line = ps->line + 1;
+ if (p.col < 0 || p.line < 0)
+ return;
+ if ((p.line < LINES && p.col < COLUMNS) ||
+ (p.col == COLUMNS && p.line < LINES-1)) {
move(&p);
pch(ch);
}
}
-
-outch(c)
-{
- putchar(c);
-}
-
-putpad(str)
-char *str;
-{
- if (str)
- tputs(str, 1, outch);
-}
-baudrate()
-{
-
- switch (orig.sg_ospeed){
- case B300:
- return(300);
- case B1200:
- return(1200);
- case B4800:
- return(4800);
- case B9600:
- return(9600);
- default:
- return(0);
- }
-}
+void
delay(t)
int t;
{
- int k,j;
-
- k = baudrate() * t / 300;
- for(j=0;j
+#include
+#include
+#include
+#include
+#include
+#include
/*
* If CHECKBUSY is defined, the file BUSY must be executable
@@ -33,21 +31,33 @@ static char sccsid[] = "@(#)snake.c 5.1.1 (2.11BSD) 1997/7/29";
* If BUSY does not exist, snake won't play.
*/
#ifndef BUSY
-#define BUSY "/usr/games/lib/busy"
+#ifdef CROSS
+#define BUSY "/usr/local/games/busy"
+#else
+#define BUSY "/games/lib/busy"
+#endif
#endif
/*
* This is the data file for scorekeeping.
*/
#ifndef SNAKERAWSCORES
-#define SNAKERAWSCORES "/usr/games/lib/snakerawscores"
+#ifdef CROSS
+#define SNAKERAWSCORES "/usr/local/games/snakerawscores"
+#else
+#define SNAKERAWSCORES "/games/lib/snakerawscores"
+#endif
#endif
/*
* If it exists, a log is kept here. Otherwise it isn't.
*/
#ifndef LOGFILE
-#define LOGFILE "/usr/games/lib/snake.log"
+#ifdef CROSS
+#define LOGFILE "/usr/local/games/snake.log"
+#else
+#define LOGFILE "/games/lib/snake.log"
+#endif
#endif
#define PENALTY 10 /* % penalty for invoking spacewarp */
@@ -79,104 +89,552 @@ char stri[BSIZE];
char *p;
char ch, savec;
char *kl, *kr, *ku, *kd;
-int fast=1;
int repeat=1;
long tv;
char *tn;
-main(argc,argv)
-int argc;
-char **argv;
+int mx [8] = {
+ 0, 1, 1, 1, 0,-1,-1,-1
+};
+
+int my [8] = {
+ -1,-1, 0, 1, 1, 1, 0,-1
+};
+
+float absv[8]= {
+ 1, 1.4, 1, 1.4, 1, 1.4, 1, 1.4
+};
+
+int oldw = 0;
+
+void
+drawbox()
{
- int i,k;
+ register int i;
+ struct point p;
+
+ p.line = -1;
+ for (i= 0; icol = sp->line = -1; /* impossible */
+ do {
+ issame = 0;
+ p.col = random() % ccnt;
+ p.line = random() % lcnt;
+
+ /* make sure it's not on top of something else */
+ if (p.line == 0 && p.col <5) issame++;
+ if(same(&p, &you)) issame++;
+ if(same(&p, &money)) issame++;
+ if(same(&p, &finish)) issame++;
+ for (i=0; i<5; i++)
+ if(same(&p, &snake[i])) issame++;
+
+ } while (issame);
+ *sp = p;
+}
+
+/*
+ * Flush typeahead to keep from buffering a bunch of chars and then
+ * overshooting. This loses horribly at 9600 baud, but works nicely
+ * if the terminal gets behind.
+ */
+void
+flushi()
+{
+#ifdef CROSS
+ ioctl(0, TCSETAW, &newtty);
+#else
+ ioctl(0, TIOCSETP, &newtty);
+#endif
+//#ifdef TIOCFLUSH
+// ioctl(0, TIOCFLUSH, NULL);
+//#endif
+}
+
+void
+winnings(won)
+int won;
+{
+ struct point p;
+
+ p.line = p.col = 1;
+ if(won>0){
+ move(&p);
+ print("$%d",won);
+ }
+}
+
+void
+spacewarp(w)
+int w;
+{
+ struct point p;
int j;
- long time();
- int stop();
- char stdbuf[BUFSIZ];
- argcount = argc;
- argval = argv;
- penalty = loot = 0;
- getcap();
- ccnt -= 2; lcnt -= 2; /* compensate for border */
- busy();
- time(&tv);
+ randm(&you);
+ point(&p,COLUMNS/2 - 8,LINES/2 - 1);
+ if (p.col < 0)
+ p.col = 0;
+ if (p.line < 0)
+ p.line = 0;
+ if (w) {
+ sprintf(str,"BONUS!!!");
+ loot = loot - penalty;
+ penalty = 0;
+ } else {
+ sprintf(str,"SPACE WARP!!!");
+ penalty += loot/PENALTY;
+ }
+ for(j=0;j<3;j++){
+ clear();
+ delay(5);
+ aprint(&p,str);
+ delay(10);
+ }
+ setup();
+ winnings(cashvalue);
+}
- for (i=1; icol < 4) && (sp->line == 0)){
+ winnings(cashvalue);
+ if((you.line == 0) && (you.col < 4)) pchar(&you,ME);
+ return(5);
}
- /*
- * chunk is the amount of money the user gets for each $.
- * The formula below tries to be fair for various screen sizes.
- * We only pay attention to the smaller of the 2 edges, since
- * that seems to be the bottleneck.
- * This formula is a hyperbola which includes the following points:
- * (24, $25) (original scoring algorithm)
- * (12, $40) (experimentally derived by the "feel")
- * (48, $15) (a guess)
- * This will give a 4x4 screen $99/shot. We don't allow anything
- * smaller than 4x4 because there is a 3x3 game where you can win
- * an infinite amount of money.
- */
- if (i < 12) i = 12; /* otherwise it isn't fair */
- /*
- * Compensate for border. This really changes the game since
- * the screen is two squares smaller but we want the default
- * to be $25, and the high scores on small screens were a bit
- * much anyway.
- */
- i += 2;
- chunk = (675.0 / (i+6)) + 2.5; /* min screen edge */
+ if (same(sp,&you)) {
+ pchar(sp,ME);
+ return(1);
+ }
+ pchar(sp,' ');
+ return(0);
+}
- signal (SIGINT, stop);
- putpad(TI); /* String to begin programs that use cm */
- putpad(KS); /* Put terminal in keypad transmit mode */
+int
+stretch(ps)
+struct point *ps;
+{
+ struct point p;
- random(&finish);
- random(&you);
- random(&money);
- random(&snake[0]);
+ point(&p,you.col,you.line);
+ if(abs(ps->col-you.col) < 6){
+ if(you.line < ps->line){
+ for (p.line = you.line+1;p.line <= ps->line;p.line++)
+ pchar(&p,'v');
+ delay(10);
+ for (;p.line > you.line;p.line--)
+ removep(&p);
+ } else {
+ for (p.line = you.line-1;p.line >= ps->line;p.line--)
+ pchar(&p,'^');
+ delay(10);
+ for (;p.line < you.line;p.line++)
+ removep(&p);
+ }
+ return(1);
+ } else if(abs(ps->line-you.line) < 3){
+ p.line = you.line;
+ if(you.col < ps->col){
+ for (p.col = you.col+1;p.col <= ps->col;p.col++)
+ pchar(&p,'>');
+ delay(10);
+ for (;p.col > you.col;p.col--)
+ removep(&p);
+ } else {
+ for (p.col = you.col-1;p.col >= ps->col;p.col--)
+ pchar(&p,'<');
+ delay(10);
+ for (;p.col < you.col;p.col++)
+ removep(&p);
+ }
+ return(1);
+ }
+ return(0);
+}
- if ((orig.sg_ospeed < B9600) ||
- ((! CM) && (! TA))) fast=0;
- for(i=1;i<6;i++)
- chase (&snake[i], &snake[i-1]);
+void
+snap()
+{
+ struct point p;
+
+ if(you.line < 3){
+ pchar(point(&p,you.col,0),'-');
+ }
+ if(you.line > lcnt-4){
+ pchar(point(&p,you.col,lcnt-1),'_');
+ }
+ if(you.col < 10){
+ pchar(point(&p,0,you.line),'(');
+ }
+ if(you.col > ccnt-10){
+ pchar(point(&p,ccnt-1,you.line),')');
+ }
+ if (! stretch(&money)) {
+ if (! stretch(&finish))
+ delay(10);
+ }
+ if(you.line < 3){
+ point(&p,you.col,0);
+ removep(&p);
+ }
+ if(you.line > lcnt-4){
+ point(&p,you.col,lcnt-1);
+ removep(&p);
+ }
+ if(you.col < 10){
+ point(&p,0,you.line);
+ removep(&p);
+ }
+ if(you.col > ccnt-10){
+ point(&p,ccnt-1,you.line);
+ removep(&p);
+ }
+ fflush(stdout);
+}
+
+void
+win(ps)
+struct point *ps;
+{
+ struct point x;
+ int j,k;
+ int boxsize; /* actually diameter of box, not radius */
+
+ boxsize = 10;
+ point(&x,ps->col,ps->line);
+ for(j=1;j 1 && (rawscores=open(SNAKERAWSCORES,2))>=0) {
+ /* Figure out what happened in the past */
+ if (read(rawscores, &allbscore, sizeof(short)) < 0 ||
+ read(rawscores, &allbwho, sizeof(short)) < 0 ||
+ lseek(rawscores, ((long)uid)*sizeof(short), 0) < 0 ||
+ read(rawscores, &oldbest, sizeof(short)) < 0) {
+ print("Error reading scores\n");
+ }
+ if (flag)
+ return (score > oldbest ? 1 : 0);
+
+ /* Update this jokers best */
+ if (score > oldbest) {
+ if (lseek(rawscores, ((long)uid)*sizeof(short), 0) < 0 ||
+ write(rawscores, &score, sizeof(short)) < 0) {
+ print("Error writing scores\n");
+ }
+ print("You bettered your previous best of $%d\n", oldbest);
+ } else
+ print("Your best to date is $%d\n", oldbest);
+
+ /* See if we have a new champ */
+ p = getpwuid(allbwho);
+ if (p == NULL || score > allbscore) {
+ if (lseek(rawscores, (long)0, 0) < 0 ||
+ write(rawscores, &score, sizeof(short)) < 0 ||
+ write(rawscores, &uid, sizeof(short)) < 0) {
+ print("Error writing scores.\n");
+ }
+ if (p != NULL)
+ print("You beat %s's old record of $%d!\n", p->pw_name, allbscore);
+ else
+ print("You set a new record!\n");
+ } else
+ print("The highest is %s with $%d\n", p->pw_name, allbscore);
+ close(rawscores);
+ } else
+ if (!flag)
+ print("Unable to post score.\n");
+ return (1);
+}
+
+void
+chase (np, sp)
+struct point *sp, *np;
+{
+ /* this algorithm has bugs; otherwise the
+ snake would get too good */
+ struct point d;
+ int w, i, wt[8];
+ double sqrt(), v1, v2, vp, max;
+ point(&d,you.col-sp->col,you.line-sp->line);
+ v1 = sqrt( (double) (d.col*d.col + d.line*d.line) );
+ w=0;
+ max=0;
+ for(i=0; i<8; i++)
+ {
+ vp = d.col*mx[i] + d.line*my[i];
+ v2 = absv[i];
+ if (v1>0)
+ vp = ((double)vp)/(v1*v2);
+ else vp=1.0;
+ if (vp>max)
+ {
+ max=vp;
+ w=i;
+ }
+ }
+ for(i=0; i<8; i++)
+ {
+ point(&d,sp->col+mx[i],sp->line+my[i]);
+ wt[i]=0;
+ if (d.col<0 || d.col>=ccnt || d.line<0 || d.line>=lcnt)
+ continue;
+ if (d.line == 0 && d.col < 5) continue;
+ if (same(&d,&money)) continue;
+ if (same(&d,&finish)) continue;
+ wt[i]= i==w ? loot/10 : 1;
+ if (i==oldw) wt [i] += loot/20;
+ }
+ for(w=i=0; i<8; i++)
+ w+= wt[i];
+ vp = random() % w;
+ for(i=0; i<8; i++)
+ if (vp