//   Copyright (C) 2001-2003, International Business Machines
//   Corporation and others.  All Rights Reserved.
//
//  root.txt
//
//     root resource file for ufortune.
//     This data will be used as a fall-back if no other resource bundle
//     matches the requested locale.
//

//   ufortune has three resources
//     usage         - the usage string to display if there's a command line error 
//                     or in response to -? or --help.
//     optionMessage - the error text to display in response to an unrecognized
//                     option on the command line.
//     fortunes      - An array of strings, the fortune messages.
//

root {

   usage           {"usage: ufortune [-v]  [-l locale]"}
   optionMessage   {"unrecognized command line option:"} 


//
//  These fortune messages are from BSD fortune data files.

   fortunes {


"186,282 miles per second:

It isn't just a good idea, it's the law!",

"2180, U.S. History question:
        What 20th Century U.S. President was almost impeached and what
office did he later hold?",

"$3,000,000",

"355/113 -- Not the famous irrational number PI, but an incredible
simulation!\"",

"3 syncs represent the trinity - init, the child and the eternal zombie
process.  In doing 3, you're paying homage to each and I think such
traditions are important in this shallow, mercurial business we find
ourselves in.
                -- Jordan K. Hubbard",

"43rd Law of Computing:
        Anything that can go wr
fortune: Segmentation violation -- Core dumped",

"7:30, Channel 5: The Bionic Dog (Action/Adventure)
        The Bionic Dog drinks too much and kicks over the National
        Redwood Forest.",

"7:30, Channel 5: The Bionic Dog (Action/Adventure)
        The Bionic Dog gets a hormonal short-circuit and violates the
        Mann Act with an interstate Greyhound bus.",

"99 blocks of crud on the disk,
99 blocks of crud!
You patch a bug, and dump it again:
100 blocks of crud on the disk!

100 blocks of crud on the disk,
100 blocks of crud!
You patch a bug, and dump it again:
101 blocks of crud on the disk! ...",

"A \"No\" uttered from deepest conviction is better and greater than a
\"Yes\" merely uttered to please, or what is worse, to avoid trouble.
                -- Mahatma Ghandi",

"A [golf] ball hitting a tree shall be deemed not to have hit the tree.
Hitting a tree is simply bad luck and has no place in a scientific
game.  The player should estimate the distance the ball would have
traveled if it had not hit the tree and play the ball from there,
preferably atop a nice firm tuft of grass.
                -- Donald A. Metz",

"A [golf] ball sliced or hooked into the rough shall be lifted and
placed in the fairway at a point equal to the distance it carried or
rolled into the rough.  Such veering right or left frequently results
from friction between the face of the club and the cover of the ball
and the player should not be penalized for the erratic behavior of the
ball resulting from such uncontrollable physical
phenomena.
                -- Donald A. Metz",

"A baby is an alimentary canal with a loud voice at one end and no
responsibility at the other.",

"A baby is God's opinion that the world should go on.
                -- Carl Sandburg",

"A bachelor is a selfish, undeserving guy who has cheated some woman out
of a divorce.
                -- Don Quinn",

"A banker is a fellow who lends you his umbrella when the sun is shining
and wants it back the minute it begins to rain.
                -- Mark Twain",

"A billion here, a couple of billion there -- first thing you know it
adds up to be real money.
                -- Senator Everett McKinley Dirksen",

"A bird in the bush usually has a friend in there with him.",

"A bird in the hand is worth what it will bring.",

"A bird in the hand makes it awfully hard to blow your nose.",

"... A booming voice says, \"Wrong, cretin!\", and you notice that you
have turned into a pile of dust.",

"A bore is someone who persists in holding his own views after we have
enlightened him with ours.",

"A budget is just a method of worrying before you spend money, as well
as afterward.",

"A candidate is a person who gets money from the rich and votes from the
poor to protect them from each other.",

"A celebrity is a person who is known for his well-knownness.",

"A child can go only so far in life without potty training.  It is not
mere coincidence that six of the last seven presidents were potty
trained, not to mention nearly half of the nation's state legislators.
                -- Dave Barry",

"A child of five could understand this!  Fetch me a child of five.",

"A chubby man with a white beard and a red suit will approach you soon.
Avoid him.  He's a Commie.",

"A citizen of America will cross the ocean to fight for democracy, but
won't cross the street to vote in a national election.
                -- Bill Vaughan",

"A city is a large community where people are lonesome together
                -- Herbert Prochnow",

"A classic is something that everybody wants to have read and nobody
wants to read.
                -- Mark Twain",

"A closed mouth gathers no foot.",

"A computer, to print out a fact,
Will divide, multiply, and subtract.
        But this output can be
        No more than debris,
If the input was short of exact.
                -- Gigo",

"A conclusion is simply the place where someone got tired of thinking.",

"A CONS is an object which cares.
                -- Bernie Greenberg.",

"A consultant is a person who borrows your watch, tells you what time it
is, pockets the watch, and sends you a bill for it.",

"A continuing flow of paper is sufficient to continue the flow of paper.
                -- Dyer",

"A copy of the universe is not what is required of art; one of the
damned things is ample.
                -- Rebecca West",

"A countryman between two lawyers is like a fish between two cats.
                -- Ben Franklin",

"A crusader's wife slipped from the garrison
And had an affair with a Saracen.
        She was not oversexed,
        Or jealous or vexed,
She just wanted to make a comparison.",

"A cynic is a person searching for an honest man, with a stolen
lantern.
                -- Edgar A. Shoaff",

"A day for firm decisions!!!!!  Or is it?",

"A day without sunshine is like night.",

"A diplomat is a man who can convince his wife she'd look stout in a fur
coat.",

"A diplomat is someone who can tell you to go to hell in such a way that
you will look forward to the trip.",

"        A disciple of another sect once came to Drescher as he was
eating his morning meal.  \"I would like to give you this personality
test\", said the outsider, \"because I want you to be happy.\"
        Drescher took the paper that was offered him and put it into
the toaster -- \"I wish the toaster to be happy too\".",

"A diva who specializes in risque arias is an off-coloratura soprano ...",

"        A doctor, an architect, and a computer scientist were arguing
about whose profession was the oldest.  In the course of their
arguments, they got all the way back to the Garden of Eden, whereupon
the doctor said, \"The medical profession is clearly the oldest, because
Eve was made from Adam's rib, as the story goes, and that was a simply
incredible surgical feat.\"  "
  }
}