//   Copyright (C) 2016 and later: Unicode, Inc. and others.
//   License & terms of use: http://www.unicode.org/copyright.html
//
//   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.\"  "
  }
}
