User-agent: *
Disallow: /action.php?
====
Перед вами история правок текущего документа. Чтобы вернуться к одной
из предыдущих версий, выберите нужную, нажмите ''Править страницу'' и сохраните.
анное ниже имя должно быть Вашим именем пользователя в этой вики.
ователя должно удовлетворять ограничениям для [[doku>wiki:pagename|идентификатора страницы]].
e Mozilla/Firefox 1.5, Safari, Opera and IE6.
Modern comes standard with a default 'black on black' colour scheme, but also
includes CSS files for 'white on black' and 'white on white'.
By default, Modern uses the 'Arial, Helvetica, sans-serif;' font family, as
declared for the body CSS. Simply changing this one line will effect the
entire template.
If you make any changes to template.ini please make sure to check the CSS file
too, in case you need to adjust page or thumbnail block widths.
TODO - Future Versions
Add Javascript UI library
Add AJAX Slideshow
CHANGELOG
1.3.4 - FIX Register Globals with $_GET
1.3.3 - FIX RSS feed to include variable stack detection in URL
1.3.3 - FIX notification when slideshow is finished
1.3.2 - NEW RSS included as in each page - Uses RSS template
1.3.2 - NEW Update check system checks for new version of Modern when logged in and viewing root public page
1.3.2 - NEW versioning number system
1.3 - FIX stop slideshow link for galleries with child galleries
1.3 - FIX template.ini thumb_force_size renamed to thumb_crop_
1.3 - FIX CSS image urls
1.3 - FIX Slideshow rollovers wrong size with resized images
1.3 - FIX slideshow links for galleries with no images
1.3 - Rewrote CSS to separate structure from colour
1.2 - Added 'Loading' GIF
1.2 - Added Play/Pause for Slideshow
1.2 - All text now utilised translator
1.2 - Added ability to use old image map in image page (not in slideshow) but have set it as off in template.ini which overwrites singapore.ini
1.2 - Rewrite URL coding to work without mod_rewrite and handles variable stack detection in URL
1.2 - Set colour scheme to 'black on black' by default, can be set via template.ini
1.2 - Added ability to float galleries next to each other via template.ini
1.2 - Added simple HTML slideshow that can be enabled via template.ini
1.2 - Added link to full size image when current image is resized, can enabled via template.ini
1.2 - Added rollover behaviour for image navigation which replaces imagemap
1.1 - Added support for external.php and prefixed selectors with sg
1.0 - Added IE conditional comments
0.9 - Original working build (1854-1900)
"Don't stay in bed, unless you can make money in bed."
George Burns (1896-1996)
"I don't know why we are here, but I'm pretty sure that it is not in order to enjoy ourselves."
Ludwig Wittgenstein (1889-1951)
"The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense."
Edsgar Dijkstra
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg."
Bjarne Stroustrup
"A mathematician is a device for turning coffee into theorems."
Paul Erdos
"The only difference between me and a madman is that I'm not mad."
Salvador Dali (1904-1989)
"If you can't get rid of the skeleton in your closet, you'd best teach it to dance."
George Bernard Shaw (1856-1950)
"But at my back I always hear Time's winged chariot hurrying near."
Andrew Marvell (1621-1678)
"Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws."
Plato (427-347 B.C.)
"The power of accurate observation is frequently called cynicism by those who don't have it."
George Bernard Shaw (1856-1950)
"Whenever I climb I am followed by a dog called 'Ego'."
Friedrich Nietzsche (1844-1900)
"We have art to save ourselves from the truth."
Friedrich Nietzsche (1844-1900)
"Never interrupt your enemy when he is making a mistake."
Napoleon Bonaparte (1769-1821)
"I think 'Hail to the Chief' has a nice ring to it."
John F. Kennedy (1917-1963) when asked what is his favorite song
"Human history becomes more and more a race between education and catastrophe."
H. G. Wells (1866-1946)
"Talent does what it can; genius does what it must."
Edward George Bulwer-Lytton (1803-1873)
"The difference between 'involvement' and 'commitment' is like an eggs-and-ham breakfast: the chicken was 'involved' the pig was 'committed'."
unknown
"If you are going through hell, keep going."
Sir Winston Churchill (1874-1965)
"I'm all in favor of keeping dangerous weapons out of the hands of fools. Let's start with typewriters."
Frank Lloyd Wright (1868-1959)
"Some cause happiness wherever they go; others, whenever they go."
Oscar Wilde (1854-1900)
"God is a comedian playing to an audience too afraid to laugh."
Voltaire (1694-1778)
"He is one of those people who would be enormously improved by death."
H. H. Munro (Saki) (1870-1916)
"I am ready to meet my Maker. Whether my Maker is prepared for the great ordeal of meeting me is another matter."
Sir Winston Churchill (1874-1965)
"I shall not waste my days in trying to prolong them."
Ian L. Fleming (1908-1964)
"If you can count your money, you don't have a billion dollars."
J. Paul Getty (1892-1976)
"Facts are the enemy of truth."
Don Quixote "Man of La Mancha"
"When you do the common things in life in an uncommon way, you will command the attention of the world."
George Washington Carver (1864-1943)
"How wrong it is for a woman to expect the man to build the world she wants, rather than to create it herself."
Anais Nin (1903-1977)
"I have not failed. I've just found 10,000 ways that won't work."
Thomas Alva Edison (1847-1931)
"I begin by taking. I shall find scholars later to demonstrate my perfect right."
Frederick (II) the Great
"Maybe this world is another planet's Hell."
Aldous Huxley (1894-1963)
"Blessed is the man, who having nothing to say, abstains from giving wordy evidence of the fact."
George Eliot (1819-1880)
"Once you eliminate the impossible, whatever remains, no matter how improbable, must be the truth."
Sherlock Holmes (by Sir Arthur Conan Doyle, 1859-1930)
"Black holes are where God divided by zero."
Steven Wright
"I've had a wonderful time, but this wasn't it."
Groucho Marx (1895-1977)
"It's kind of fun to do the impossible."
Walt Disney (1901-1966)
"We didn't lose the game; we just ran out of time."
Vince Lombardi
"The optimist proclaims that we live in the best of all possible worlds, and the pessimist fears this is true."
James Branch Cabell
"A friendship founded on business is better than a business founded on friendship."
John D. Rockefeller (1874-1960)
"All are lunatics, but he who can analyze his delusion is called a philosopher."
Ambrose Bierce (1842-1914)
"You can only find truth with logic if you have already found truth without it."
Gilbert Keith Chesterton (1874-1936)
"An inconvenience is only an adventure wrongly considered; an adventure is an inconvenience rightly considered."
Gilbert Keith Chesterton (1874-1936)
"I have come to believe that the whole world is an enigma, a harmless enigma that is made terrible by our own mad attempt to interpret it as though it had an underlying truth."
Umberto Eco
"Be nice to people on your way up because you meet them on your way down."
Jimmy Durante
"The true measure of a man is how he treats someone who can do him absolutely no good."
Samuel Johnson (1709-1784)
"A people that values its privileges above its principles soon loses both."
Dwight D. Eisenhower (1890-1969), Inaugural Address, January 20, 1953
"The significant problems we face cannot be solved at the same level of thinking we were at when we created them."
Albert Einstein (1879-1955)
"Basically, I no longer work for anything but the sensation I have while working."
Albert Giacometti (sculptor)
"All truth passes through three stages. First, it is ridiculed. Second, it is violently opposed. Third, it is accepted as being self-evident."
Arthur Schopenhauer (1788-1860)
"Many a man's reputation would not know his character if they met on the street."
Elbert Hubbard (1856-1915)
"There is more stupidity than hydrogen in the universe, and it has a longer shelf life."
Frank Zappa
"Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away."
Antoine de Saint Exupery
"Life is pleasant. Death is peaceful. It's the transition that's troublesome."
Isaac Asimov
"If you want to make an apple pie from scratch, you must first create the universe."
Carl Sagan
"It is much more comfortable to be mad and know it, than to be sane and have one's doubts."
G. B. Burgin
"Once is happenstance. Twice is coincidence. Three times is enemy action."
Auric Goldfinger, in "Goldfinger" by Ian L. Fleming (1908-1964)
"To love oneself is the beginning of a lifelong romance"
Oscar Wilde (1854-1900)
"Knowledge speaks, but wisdom listens."
Jimi Hendrix
"A clever man commits no minor blunders."
Goethe (1749-1832)
"Argue for your limitations, and sure enough they're yours."
Richard Bach
"A witty saying proves nothing."
Voltaire (1694-1778)
"Sleep is an excellent way of listening to an opera."
James Stephens (1882-1950)
"The nice thing about being a celebrity is that if you bore people they think it's their fault."
Henry Kissinger (1923-)
"Education is a progressive discovery of our own ignorance."
Will Durant
"I have often regretted my speech, never my silence."
Xenocrates (396-314 B.C.)
"It was the experience of mystery -even if mixed with fear -that engendered religion."
Albert Einstein (1879-1955)
"If everything seems under control, you're just not going fast enough."
Mario Andretti
"I do not consider it an insult, but rather a compliment to be called an agnostic. I do not pretend to know where many ignorant men are sure -that is all that agnosticism means."
Clarence Darrow, Scopes trial, 1925.
"Obstacles are those frightful things you see when you take your eyes off your goal."
Henry Ford (1863-1947)
"I'll sleep when I'm dead."
Warren Zevon (1947-2003)
"There are people in the world so hungry, that God cannot appear to them except in the form of bread."
Mahatma Gandhi (1869-1948)
"When you gaze long into the abyss, the abyss also gazes into you."
Friedrich Nietzsche (1844-1900)
"The instinct of nearly all societies is to lock up anybody who is truly free. First, society begins by trying to beat you up. If this fails, they try to poison you. If this fails too, the finish by loading honors on your head."
Jean Cocteau (1889-1963)
"Everyone is a genius at least once a year; a real genius has his original ideas closer together."
Georg Lichtenberg (1742-1799)
"Success usually comes to those who are too busy to be looking for it"
Henry David Thoreau (1817-1862)
"While we are postponing, life speeds by."
Seneca (3BC 65AD)
"Where are we going, and why am I in this handbasket?"
Bumper Sticker
"God, please save me from your followers!"
Bumper Sticker
"Fill what's empty, empty what's full, and scratch where it itches."
the Duchess of Windsor, when asked what is the secret of a long and happy life
"First they ignore you, then they laugh at you, then they fight you, then you win."
Mahatma Gandhi (1869-1948)
"Luck is the residue of design."
Branch Rickey former owner of the Brooklyn Dodger Baseball Team
"Tragedy is when I cut my finger. Comedy is when you walk into an open sewer and die."
Mel Brooks
"Most people would sooner die than think; in fact, they do so."
Bertrand Russell (1872-1970)
"Wit is educated insolence."
Aristotle (384-322 B.C.)
"My advice to you is get married: if you find a good wife you'll be happy; if not, you'll become a philosopher."
Socrates (470-399 B.C.)
"Egotist: a person more interested in himself than in me."
Ambrose Bierce (1842-1914)
"A narcissist is someone better looking than you are."
Gore Vidal
"Wise men make proverbs, but fools repeat them."
Samuel Palmer (1805-80)
"It has become appallingly obvious that our technology has exceeded our humanity."
Albert Einstein (1879-1955)
"The secret of success is to know something nobody else knows."
Aristotle Onassis (1906-1975)
"Sometimes when reading Goethe I have the paralyzing suspicion that he is trying to be funny."
Guy Davenport
"When you have to kill a man, it costs nothing to be polite."
Sir Winston Churchill (1874-1965)
"Any man who is under 30, and is not a liberal, has not heart; and any man who is over 30, and is not a conservative, has no brains."
Sir Winston Churchill (1874-1965)
"The opposite of a correct statement is a false statement. The opposite of a profound truth may well be another profound truth."
Niels Bohr (1885-1962)
"We all agree that your theory is crazy, but is it crazy enough?"
Niels Bohr (1885-1962)
"When I am working on a problem I never think about beauty. I only think about how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong."
Buckminster Fuller (1895-1983)
"In science one tries to tell people, in such a way as to be understood by everyone, something that no one ever knew before. But in poetry, it's the exact opposite."
Paul Dirac (1902-1984)
"I would have made a good Pope."
Richard M. Nixon (1913-1994)
"In any contest between power and patience, bet on patience."
W.B. Prescott
"Anyone who considers arithmetical methods of producing random digits is, of course, in a state of sin."
John von Neumann (1903-1957)
"The mistakes are all waiting to be made."
chessmaster Savielly Grigorievitch Tartakower (1887-1956) on the game's opening position
"It is unbecoming for young men to utter maxims."
Aristotle (384-322 B.C.)
"Grove giveth and Gates taketh away."
Bob Metcalfe (inventor of Ethernet) on the trend of hardware speedups not being able to keep up with software demands
"Reality is merely an illusion, albeit a very persistent one."
Albert Einstein (1879-1955)
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important."
Bertrand Russell (1872-1970)
"A little inaccuracy sometimes saves a ton of explanation."
H. H. Munro (Saki) (1870-1916)
"There are two ways of constructing a software design; one way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult."
C. A. R. Hoare
"Make everything as simple as possible, but not simpler."
Albert Einstein (1879-1955)
"What do you take me for, an idiot?"
General Charles de Gaulle (1890-1970), when a journalist asked him if he was happy
"I heard someone tried the monkeys-on-typewriters bit trying for the plays of W. Shakespeare, but all they got was the collected works of Francis Bacon."
Bill Hirst
"Three o'clock is always too late or too early for anything you want to do."
Jean-Paul Sartre (1905-1980)
"A doctor can bury his mistakes but an architect can only advise his clients to plant vines."
Frank Lloyd Wright (1868-1959)
"It is dangerous to be sincere unless you are also stupid."
George Bernard Shaw (1856-1950)
"If you haven't got anything nice to say about anybody, come sit next to me."
Alice Roosevelt Longworth (1884-1980)
"A man can't be too careful in the choice of his enemies."
Oscar Wilde (1854-1900)
"Forgive your enemies, but never forget their names."
John F. Kennedy (1917-1963)
"Logic is in the eye of the logician."
Gloria Steinem
"No one can earn a million dollars honestly."
William Jennings Bryan (1860-1925)
"Everything has been figured out, except how to live."
Jean-Paul Sartre (1905-1980)
"Well-timed silence hath more eloquence than speech."
Martin Fraquhar Tupper
"Thank you for sending me a copy of your book I'll waste no time reading it."
Moses Hadas (1900-1966)
"From the moment I picked your book up until I laid it down I was convulsed with laughter. Some day I intend reading it."
Groucho Marx (1895-1977)
"It is better to have a permanent income than to be fascinating."
Oscar Wilde (1854-1900)
"When ideas fail, words come in very handy."
Goethe (1749-1832)
"In the end, everything is a gag."
Charlie Chaplin (1889-1977)
"The nice thing about egotists is that they don't talk about other people."
Lucille S. Harper
"You got to be careful if you don't know where you're going, because you might not get there."
Yogi Berra
"I love Mickey Mouse more than any woman I have ever known."
Walt Disney (1901-1966)
"He who hesitates is a damned fool."
Mae West (1892-1980)
"Good teaching is one-fourth preparation and three-fourths theater."
Gail Godwin
"University politics are vicious precisely because the stakes are so small."
Henry Kissinger (1923-)
"The graveyards are full of indispensable men."
Charles de Gaulle (1890-1970)
"You can pretend to be serious; you can't pretend to be witty."
Sacha Guitry (1885-1957)
"Behind every great fortune there is a crime."
Honore de Balzac (1799-1850)
"If women didn't exist, all the money in the world would have no meaning."
Aristotle Onassis (1906-1975)
"I am not young enough to know everything."
Oscar Wilde (1854-1900)
"The object of war is not to die for your country but to make the other bastard die for his."
General George Patton (1885-1945)
"Sometimes a scream is better than a thesis."
Ralph Waldo Emerson (1803-1882)
"There is no sincerer love than the love of food."
George Bernard Shaw (1856-1950)
"I don't even butter my bread; I consider that cooking."
Katherine Cebrian
"I have an existential map; it has 'you are here' written all over it."
Steven Wright
"Mr. Wagner has beautiful moments but bad quarters of an hour."
Gioacchino Rossini (1792-1868)
"Manuscript: something submitted in haste and returned at leisure."
Oliver Herford (1863-1935)
"I have read your book and much like it."
Moses Hadas (1900-1966)
"The covers of this book are too far apart."
Ambrose Bierce (1842-1914)
"Everywhere I go I'm asked if I think the university stifles writers. My opinion is that they don't stifle enough of them."
Flannery O'Connor (1925-1964)
"Too many pieces of music finish too long after the end."
Igor Stravinsky (1882-1971)
"Anything that is too stupid to be spoken is sung."
Voltaire (1694-1778)
"When choosing between two evils, I always like to try the one I've never tried before."
Mae West (1892-1980)
"I don't know anything about music. In my line you don't have to."
Elvis Presley (1935-1977)
"No Sane man will dance."
Cicero (106-43 B.C.)
"Hell is a half-filled auditorium."
Robert Frost (1874-1963)
"Show me a sane man and I will cure him for you."
Carl Gustav Jung (1875-1961)
"Vote early and vote often."
Al Capone (1899-1947)
"If I were two-faced, would I be wearing this one?"
Abraham Lincoln (1809-1865)
"Few things are harder to put up with than a good example."
Mark Twain (1835-1910)
"Hell is other people."
Jean-Paul Sartre (1905-1980)
"I am become death, shatterer of worlds."
Robert J. Oppenheimer (1904-1967) (citing from the Bhagavad Gita, after witnessing the world's first nuclear explosion)
"Happiness is good health and a bad memory."
Ingrid Bergman (1917-1982)
"Friends may come and go, but enemies accumulate."
Thomas Jones
"You can get more with a kind word and a gun than you can with a kind word alone."
Al Capone (1899-1947)
"The gods too are fond of a joke."
Aristotle (384-322 B.C.)
"Distrust any enterprise that requires new clothes."
Henry David Thoreau (1817-1862)
"The difference between pornography and erotica is lighting."
Gloria Leonard
"It is time I stepped aside for a less experienced and less able man."
Professor Scott Elledge on his retirement from Cornell
"Every day I get up and look through the Forbes list of the richest people in America. If I'm not there, I go to work."
Robert Orben
"The cynics are right nine times out of ten."
Henry Louis Mencken (1880-1956)
"There are some experiences in life which should not be demanded twice from any man, and one of them is listening to the Brahms Requiem."
George Bernard Shaw (1856-1950)
"And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him."
Revelations 6:8
"Attention to health is life's greatest hindrance."
Plato (427-347 B.C.)
"Plato was a bore."
Friedrich Nietzsche (1844-1900)
"Nietzsche was stupid and abnormal."
Leo Tolstoy (1828-1910)
"I'm not going to get into the ring with Tolstoy."
Ernest Hemingway (1899-1961)
"Hemingway was a jerk."
Harold Robbins
"Men are not disturbed by things, but the view they take of things."
Epictetus (55-135 A.D.)
"What about things like bullets?"
Herb Kimmel, Behavioralist, Professor of Psychology, upon hearing the above quote (1981)
"How can I lose to such an idiot?"
A shout from chessmaster Aaron Nimzovich (1886-1935)
"Not only is there no God, but try finding a plumber on Sunday."
Woody Allen (1935-)
"I don't feel good."
The last words of Luther Burbank (1849-1926)
"Nothing is wrong with California that a rise in the ocean level wouldn't cure."
Ross MacDonald (1915-1983)
"Men have become the tools of their tools."
Henry David Thoreau (1817-1862)
"I have never let my schooling interfere with my education."
Mark Twain (1835-1910)
"It is now possible for a flight attendant to get a pilot pregnant."
Richard J. Ferris, president of United Airlines
"I never miss a chance to have sex or appear on television."
Gore Vidal
"I don't want to achieve immortality through my work; I want to achieve immortality through not dying."
Woody Allen (1935-)
"Men and nations behave wisely once they have exhausted all the other alternatives."
Abba Eban (1915-2002)
"To sit alone with my conscience will be judgment enough for me."
Charles William Stubbs
"Sanity is a madness put to good uses."
George Santayana (1863-1952)
"Imitation is the sincerest form of television."
Fred Allen (1894-1956)
"Always do rightthis will gratify some and astonish the rest."
Mark Twain (1835-1910)
"In America, anybody can be president. That's one of the risks you take."
Adlai Stevenson (1900-1965)
"Copy from one, it's plagiarism; copy from two, it's research."
Wilson Mizner (1876-1933)
"Why don't you write books people can read?"
Nora Joyce to her husband James (1882-1941)
"Some editors are failed writers, but so are most writers."
T. S. Eliot (1888-1965)
"Criticism is prejudice made plausible."
Henry Louis Mencken (1880-1956)
"It is better to be quotable than to be honest."
Tom Stoppard
"Being on the tightrope is living; everything else is waiting."
Karl Wallenda
"Opportunities multiply as they are seized."
Sun Tzu
"A scholar who cherishes the love of comfort is not fit to be deemed a scholar."
Lao-Tzu (570?-490? BC)
" The best way to predict the future is to invent it."
Alan Kay
"Never mistake motion for action."
Ernest Hemingway (1899-1961)
"Hell is paved with good samaritans."
William M. Holden
"The longer I live the more I see that I am never wrong about anything, and that all the pains that I have so humbly taken to verify my notions have only wasted my time."
George Bernard Shaw (1856-1950)
"Silence is argument carried out by other means."
Ernesto"Che"Guevara (1928-1967)
"Well done is better than well said."
Benjamin Franklin (1706-1790)
"The average person thinks he isn't."
Father Larry Lorenzoni
"Heav'n hath no rage like love to hatred turn'd, Nor Hell a fury, like a woman scorn'd."
William Congreve (1670-1729)
"A husband is what is left of the lover after the nerve has been extracted."
Helen Rowland (1876-1950)
"Learning is what most adults will do for a living in the 21st century."
Perelman
"The man who goes alone can start today; but he who travels with another must wait till that other is ready."
Henry David Thoreau (1817-1862)
"There is a country in Europe where multiple-choice tests are illegal."
Sigfried Hulzer
"Ask her to wait a moment I am almost done."
Carl Friedrich Gauss (1777-1855), while working, when informed that his wife is dying
"A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every difficulty."
Sir Winston Churchill (1874-1965)
"I think there is a world market for maybe five computers."
Thomas Watson (1874-1956), Chairman of IBM, 1943
"I think it would be a good idea."
Mahatma Gandhi (1869-1948), when asked what he thought of Western civilization
"The only thing necessary for the triumph of evil is for good men to do nothing."
Edmund Burke (1729-1797)
"I'm not a member of any organized political party, I'm a Democrat!"
Will Rogers (1879-1935)
"If Stupidity got us into this mess, then why can't it get us out?" "
Will Rogers (1879-1935)
"The backbone of surprise is fusing speed with secrecy."
Von Clausewitz (1780-1831)
"Democracy does not guarantee equality of conditions it only guarantees equality of opportunity."
Irving Kristol
"There is no reason anyone would want a computer in their home."
Ken Olson, president, chairman and founder of Digital Equipment Corp., 1977
"The concept is interesting and well-formed, but in order to earn better than a 'C', the idea must be feasible."
A Yale University management professor in response to student Fred Smith's paper proposing reliable overnight delivery service (Smith went on to found Federal Express Corp.)
"Who the hell wants to hear actors talk?"
H. M. Warner (1881-1958), founder of Warner Brothers, in 1927
"We don't like their sound, and guitar music is on the way out."
Decca Recording Co. rejecting the Beatles, 1962
"Everything that can be invented has been invented."
Charles H. Duell, Commissioner, U.S. Office of Patents, 1899
"Denial ain't just a river in Egypt."
Mark Twain (1835-1910)
"A pint of sweat, saves a gallon of blood."
General George S. Patton (1885-1945)
"After I'm dead I'd rather have people ask why I have no monument than why I have one."
Cato the Elder (234-149 BC, AKA Marcus Porcius Cato)
"He can compress the most words into the smallest idea of any man I know."
Abraham Lincoln (1809-1865)
"Don't let it end like this. Tell them I said something."
last words of Pancho Villa (1877-1923)
"The right to swing my fist ends where the other man's nose begins."
Oliver Wendell Holmes (1841-1935)
"The difference between fiction and reality? Fiction has to make sense."
Tom Clancy
"It's not the size of the dog in the fight, it's the size of the fight in the dog."
Mark Twain (1835-1910)
"It is better to be feared than loved, if you cannot be both."
Niccolo Machiavelli (1469-1527), "The Prince"
"Whatever is begun in anger ends in shame."
Benjamin Franklin (1706-1790)
"The President has kept all of the promises he intended to keep."
Clinton aide George Stephanopolous speaking on Larry King Live
"We're going to turn this team around 360 degrees."
Jason Kidd, upon his drafting to the Dallas Mavericks
"Half this game is ninety percent mental."
Yogi Berra
"There is only one nature the division into science and engineering is a human imposition, not a natural one. Indeed, the division is a human failure; it reflects our limited capacity to comprehend the whole."
Bill Wulf
"There's many a bestseller that could have been prevented by a good teacher."
Flannery O'Connor (1925-1964)
"He has all the virtues I dislike and none of the vices I admire."
Sir Winston Churchill (1874-1965)
"I criticize by creation not by finding fault."
Cicero (106-43 B.C.)
"Love is friendship set on fire."
Jeremy Taylor
"God gave men both a penis and a brain, but unfortunately not enough blood supply to run both at the same time."
Robin Williams, commenting on the Clinton/Lewinsky affair
"My occupation now, I suppose, is jail inmate."
Unibomber Theodore Kaczynski, when asked in court what his current profession was
"Woman was God's second mistake."
Friedrich Nietzsche (1844-1900)
"This isn't right, this isn't even wrong."
Wolfgang Pauli (1900-1958), upon reading a young physicist's paper
"For centuries, theologians have been explaining the unknowable in terms of the-not-worth-knowing."
Henry Louis Mencken (1880-1956)
"Pray, v.: To ask that the laws of the universe be annulled on behalf of a single petitioner confessedly unworthy."
Ambrose Bierce (1842-1914)
"Every normal man must be tempted at times to spit upon his hands, hoist the black flag, and begin slitting throats."
Henry Louis Mencken (1880-1956)
"Now, now my good man, this is no time for making enemies."
Voltaire (1694-1778) on his deathbed in response to a priest asking that he renounce Satan.
"Fill the unforgiving minute with sixty seconds worth of distance run."
Rudyard Kipling (1865-1936)
"He would make a lovely corpse."
Charles Dickens (1812-1870)
"I've just learned about his illness. Let's hope it's nothing trivial."
Irvin S. Cobb
"I worship the quicksand he walks in."
Art Buchwald
"Wagner's music is better than it sounds."
Mark Twain (1835-1910)
"A poem is never finished, only abandoned."
Paul Valery (1871-1945)
"We are not retreating we are advancing in another Direction."
General Douglas MacArthur (1880-1964)
"If you were plowing a field, which would you rather use? Two strong oxen or 1024 chickens?"
Seymour Cray (1925-1996), father of supercomputing
"#3 pencils and quadrille pads."
Seymoure Cray (1925-1996) when asked what CAD tools he used to design the Cray I supercomputer; he also recommended using the back side of the pages so that the grid lines were not so dominant.
"Interesting I use a Mac to help me design the next Cray."
Seymoure Cray (1925-1996) when he was told that Apple Inc. had recently bought a Cray supercomputer to help them design the next Mac.
"Your Highness, I have no need of this hypothesis."
Pierre Laplace (1749-1827), to Napoleon on why his works on celestial mechanics make no mention of God.
"I choose a block of marble and chop off whatever I don't need."
Francois-Auguste Rodin (1840-1917), when asked how he managed to make his remarkable statues
"The man who does not read good books has no advantage over the man who cannot read them."
Mark Twain (1835-1910)
"The truth is more important than the facts."
Frank Lloyd Wright (1868-1959)
"Research is what I'm doing when I don't know what I'm doing."
Wernher Von Braun (1912-1977)
"There are only two tragedies in life: one is not getting what one wants, and the other is getting it."
Oscar Wilde (1854-1900)
"There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle."
Albert Einstein (1879-1955)
lowinterestratecreditcards.net
luffassociates.co.uk
luxus-gourmetartikel.de
lvcpa.net
lvcpa.org
lvrealty.net
lynskey-admiration.org.uk
lyriclovers.com
macinstruct.net
mail333.com
mainentrypoint.com
mainjob.ru
majorapplewhite.info
male-enlargement.com
mallorycoatings.co.uk
maloylawn.com
manga-free.net
manga-free.org
manga-porn.us
manga-x.biz
manga-xxx.org
marcomdeal.com
marshallsupersoft.com
marshallyachts.org
marteq-on.com
match-me-up.com
mature-big-tits.net
mature-old-mature.com
mature-sex-moms-porn.com
matureacts.com
maturefolk.com
maxigenweb.com
mbgeezers.com
mcdortaklar.com
mcfimortgage.com
medcenterstore.com
mediaaustralia.com.au
mediavisor.com
medications-4all.com
medicine-supply.com
medicinecheaper.com
meds-pill.com
medweightloss
medyep.com
mega-spass.com
megapornstation.com
melincs.org
melodias-logos-juegos.com
members.fortunecity.com/kennetharmstrong
men-porn.us
men-sex.us
menexis.com
mengfuxiang.com
menguma.co.uk
menguma.com
mens-health-pills.com
menzyme.com
merditer.com
mesothelioma-asbestos-help.com
mesothelioma-health.com
metroshopperguide.com
michigan-attorney.lbgo.com
micrasci.com
middlecay.net
middlecay.org
midget-porn-sex.com
mietangebote-domain.de
migraine-relief.com
mikebunton.com
milesscaffolding.co.uk
milf-hardcore.net
milf-rider.us
milfporn.org
mingholee.com
misterwolf.net
mmorpg-headlines.com
mmsanimati.com
mneuron.com
mobile-repondeur-logo.com
mobile-repondeurs-logos.com
mobilequicksale.com
mobilesandringtones.com
mode-domain.de
mode-einkaufsbummel.de
moltobene.ru
monavaletoys.com
money-cash-loans.com
money-room.com
moneybg.com
montaguefineart.com
mookyong.com
mor-lite.net
mor-lite.org
mortage-4all.com
mortgage-info-center.com
mortgage-rates-guide.net
mortgagemarketinginc.com
mortgagequestaz.com
mortgages-links.net
mortloan.com
mostika.us
mother-son-incest-sex.net
motonet.pl
movies6.com
mp-forum.com
mp3download.bz
mp3x.biz
mpeg2pci.com
mrgoicoechea.com
mrpiercing.com
multipurpose-plants.net
multiservers.com
music-downloads-links.com
musica-da-scaricare.net
musica-gratis.biz
musica-gratis.org
musica-karaoke.net
musica-mp3.biz
musicamp3.us
musiccheap.us
musicenergy.com
muxa.ru
mxbearings.com
my-age.net
my-dating-agency.com
my-discount-cigarettes.com
my-sex-toys-store.com
myasiahotels.com
mybestcasinos.net
mybestclick.com
mycasinohome.com
mycheapcigstore.com
mycialispharmacy.com
mydatingagency.com
mydietdoctor.com
myeuropehotels.com
myfavlinks.de
mygenericrx.com
myrice.com
myrtlejones.com
myslimpatch.com
mystify2001.com
naar.be
nabm(il|li)or.com # Home to spammed drug subdomains
nabpak.org
naked-gay.us
naked-pussy.us
naked-womens-wrestling-league-dvds.com
naked-womens-wrestling-league-videos.com
nancyflowerswilson.com
narod.ru
nasty-pages.com
natel-mobiles.com
natural-barleygreen.com
natural-breasts-enhancement.net
naturalknockers.net
nehrucollege.org
neiladams.org.uk
net-mature.com
net-von-dir.de
netdims.com
netizen.org
netlogo.us
netsx.org
neurogenics.co.uk
new-cialis.com
neweighweb.net
neweighweb.org
newfurnishing.com
newgallery.co.uk
newmail.ru
newsnewsmedia.com
newtruths.com
newxwave.com
nfl-football-tickets.biz
nice-pussy.us
nicepages.biz
nicepages.net
nicepages.org
niceshemales.net
nichehit.com
nicolepeters.com
nieruchomosci.biz.pl
nifty-erotic-story-archive.blogspot.com
nikkiwilliams.info
njhma.com
njunite.net
no-cavities.com
no-title.de
no1pics.com
nohassle-loans.com
noni-jungbrunnen.com
noni-top-chance.com
noni-vitalgetraenk.com
noniexpert.com
nonstop-casino.com
nonstopsex.org
noslip-picks.com
notsure.de
novacspacetravel.com
nr-challenges.org
nude-black.us
nude-celebrity-dvd.com
nude-movies.us
nude-teens.name
nude-video.us
nudevol.us
nutritional-supplements.ws
nutritionalsupplementstoday.com
nwwl-dvds.com
nwwl-videos.com
nz.com.ua
officialdarajoy.com/wwwboard
officialdentalplan.com
officialsatellitetv.com
offseasonelves.com
ohamerica.org
oiline.com
okuk.org
oldgrannyfucking.com
oliviagadamer.com
omega-fatty-acid.com
on-line-casino-deutsch.com
on-line-casinos-online.com
on-line-casinos-online.net
on-line-degree.org
on-line-kasino-de.com
on-pok.com
one-cialis.com
one-debt-consolidation.com
one-propecia.com
one-soma.com
onepiecex.net
oneseo.com
onexone.org
online-----poker
online--blackjack.info
online--pharmacy.us
online--sports-betting.com
online-auction-tricks.com
online-black-jack-download.com
online-blackjack-online.com
online-buy-plavix.com
online-credit-report-online.com
online-dating-com.com
online-dating-singles-service.com
online-deals99.com
online-dot.com
online-escort-service.com
online-flexeril.com
online-gambling-123.biz
online-gambling-123.us
online-gambling-online.org
online-games-links.net
online-games24x7.com
online-games24x7.net
online-generics-store
online-job-source.com
online-medications24x7.com
online-pharmacy-24x7.net
online-pharmacy-online-pharmacies.com
online-pharmacy-order.com
online-photo-print.com
online-poker--tips.com
online-poker-200
online-poker-333.com
online-poker-555.com
online-poker-888
online-poker-a.com
online-poker-big.com
online-poker-bonus.us
online-poker-free.com
online-poker-guide.info
online-poker-kick-butt.com
online-poker-net.com
online-poker-online-poker
online-poker-special.com
online-prescription-pharmacy.com
online-prescription.st
online-prescriptions-internet-pharmacy.com
online-propecia-buyer.com
online-sports--betting
online-sports-betting-source
onlinedegreehq.com
onlinegamingassociation.com
onlinegamingassociation.com
onlinehgh.com
onlinepharmacy2004.net
onlinepoker-dot.com
onlinepoker-i.com
onlineshop.us.com
onlineslotsarcade.com
onlinesmoker.com
opensorcerer.org
operazione-trionfo.net
optimumpenis.com
oral-sex-cum.com
order-claritin.net
order-effexor.net
ordernaturals.com
orlandodominguez.com
orospu.us
otito.com
ottawavalleyag.org
our-planet.org
ourhealthylife.net
ourtownhelps.org
outoff.de
overseaspharmacy.com
ovulation-kit.com
owns1.com
ownsthis.com
p-reise.de
p5.org.uk
p6.org.uk
p7.org.uk
p8.org.uk
p9.org.uk
pages4people.com
pagetwo.org
pai-gow-keno.com
paisleydevelopmentassociation.org
paperscn.com
paramountseedfarms.net
paramountseedfarms.org
paris-and-nicky-hilton-pictures.blogspot.com
paris-hilton-video-blog.com
paris-hilton-videos.biz
paris-movie-hilton.blogspot.com
paris-naked-hilton.blogspot.com
paris-nicky-hilton.blogspot.com
paris-nikki-hilton.blogspot.com
parkviewsoccer.net
parkviewsoccer.org
partnersmanager.com
partnersuche-partnervermittlung.com
party-poker-player.com
party-poker-x
partybingo.com
partypoker-i
partypoker-i.us
partypoker.com
partypokeronline.org
passende-klamotten.de
passwordspussynudity.com
pastramisandwich.us
pasuquinio.com
payday-cash-loans
payday-loan
payday-loan-payday.com
paydayl0an.com
paylesspaydayloans.com
payment-processing.com
paysites.info
pc-choices.com
pcdweb.com
peepissing.com
penelopeschenk.com
penilestretch.com
penis-enlargment.net
penisimprovement.com
penisresearch.com
perfect-dedicated-server.com
perfect-mortgage-lead-4-u.com
perkyoneplace.com
personal-finance-tips.com
personal-injuries-law.com
personal-injury-lawyer.us.com
personalads.us.com
personals-online-personals.com
petlesbians.com
petroglyphx.com
phantadu.de
pharmaceicall.com
pharmacy-links.net
pharmacy2003.com
pharmacyprices.net
philippestarckwatches.co.uk
phone-cards-globe.pushline.com
phono.co.il
photobloggy.buzznet.com
phrensy.org
pics--movies.com
pics-db.com
pics-porn.org
pics-stories.com
pics-videos.net
picsfreesex.com
picsteens.com
pictures-and-videos.com
pictures-archive.com
pictures-movies.net
pictures-movies.org
pictures6.com
piercing-auswaehlen.de
piercing-magic.com
piercingx.com
pill-buy.com
pillblue.com
pillchart.com
pillexchange.net
pillgrowth.com
pillhub.com
pillhunt.com
pillinc.com
pillmarket.net
pills-for-penis.com
pillsbestbuy.com
pillsdomain.com
pillslim.com
pillsupplier.com
pilltip.com
pimpcasino.com
pimphos.com
pimpspace.com
pinkzoo.com
piranho.com
pj-city.com
planetluck.com
play-7-card-stud-poker.com
play-7-card-stud-poker.us
play-cash-bingo-online.com
play-online-poker-z.com
play-partypoker.us
play-poker-i.com
play-poker-onlie-kick-ass.com
play-poker-online-z.com
playandwin777.com
playandwinit777.net
player-tech.com
playgay.biz
playmydvd.com
playnowpoker.com
playweb.blogspot.com
plygms.de
pocketsound.org
pokemon-hentai.com
pokemon-hentai.org
pokemonhentai.net
pokemonx.biz
poker-8.com
poker-games-bonus.com
poker-homepage.com
poker-magic.org
poker-me-up.com
poker-on-web.com
poker-rooms-777
poker-rooms-777.com
poker-w.com
poker777game
pokerpage.biz
pokerpartnership.com
polifoniczne.org
polyphone.us
pompini.nu
popwow.com
porn-4u.net
porn-dvds-dot.com
porn-house.us
porn-sites-list.com
porn-stars.org
pornevalution.com
porngrub.com
pornlane.com
porno-v.com
pornogratis.bz
pornosexbest.com
pornostars.cc
pornovideos-versand.com
pornstar4all.com
pornwww.com
poster-shop.us
postersshop.us
power-rico.de
pregnant-sex-free.us
prepaylegalinsurance.com
prescription-drugs.st
prescriptions.md
preteen-models.biz
preteen-sex.info
preteen-young.net
prettypiste.com
princeofprussia.org
prism-lupus.org
privacy-online.biz
private-krankenversicherung-uebersicht.com
private-network.net
privatediet.com
pro-collegefootballbetting.com
pro-rolex-replica-watches
pro-rolex-replica-watches.com
product-paradise.com
projector-me.com
prom-prepared.com
promindandbody.com
propecia-depot.com
propecia-for-hair-loss.com
propecia-for-hair-loss.net
propecia-info.net
propecia-store.com
propecia.bravehost.com
propeciaonline.biz
propeciapower.com
prosearchs.com
pryporn.com
pseudobreccia60.tripod.com.ve
psites.biz
psites.net
psites.org
psites.us
psxtreme.com
psychexams.net
psychexams.org
punksongslyrics.com
pureteenz.com
pushline.com
pussy-cum.us
pussy-d.com
pussy-movies.us
qqba.com
quangoweb.com
quick-drugs.biz
quick-drugs.com
quickdomainnameregistration.com
quickie-quotes.com
r00m.com
racconti-gay.org
radsport-artikel.de
raf-ranking.com
ragazze.bz
rampantrabbitvibrator.co.uk
randysrealtyreview.com
rape--stories
rape-fantasy-pics.com
rape-stories.biz
rapestoriespics
rapid-merchant-account.com
ratenkredit-center.de
ratenkredit-shop.de
raw-pussy.us
rbfanz.com
real-online-poker
real-sex.us
realisticforeignpolicy.org
reality-xxx.biz
reallyhot.org
realtickling.com
rebjorn.co.uk
redcentre.org
redi.tk
refinance-mortgage-home-equity-loan.com
reggaeboyzfanz.com
registerxonline.com
reglament-np.ru
reisen-domain.de
relievepain.org
rental-2004.com
rentalcarsplus.com
repair-restore-bad-credit-report-identity-theft.com
repaircreditonline.net
repondeurs-logos-mobile.com
republika.pl
reservedining.net
reservedining.org
restaurant-l.de
rethyassociates.net
rethyassociates.org
reviewonlinedating.com
ricettegolose.com
richshemales.com
rifp.org
ringsignaler-ikon-spel.com
ringtone-logo-game.com
ringtoner-logoer-spill.com
ringtonespy.com
rittenhouse.ca
robosapiensource
robosapiensource.com
roboticmilking.com
romane-buecher.de
romeo-ent.com
roulette---online.com
roulette-w.com
royaladult.com
royalfreehost.com/teen/amymiller
royalmailhotel.com
ru21.to
rulo.biz
rx-central.net
rx-lexapro.biz
rx-pills-r.us
rx-store.com # Catchall for many spam sites
rxpainrelief.net
rxpills.biz
rxweightloss.org
rydoncycles.co.uk
s-fuck.com
s-sites.net
safecreditonline.com
sailor-moon-hentai.org
sailor-moon-hentai.us
salcia.co.uk
salute-bellezza.net
salute-bellezza.org
salute-benessere.org
salute-e-benessere.net
salute-igiene.com
salute-malattie.com
salute-malattie.net
sandrabre.de
sarennasworld.com
sat-direct.net
satellite-direct-for-you.com
satellite-network-tv.com
satellite-tv.cjb.net
satellite.bravehost.com
satellitetv-reviewed.tripod.com
satellitetvboutique.com
saveondentalplans.com
saveonpills.net
sbdforum.com
sbt-scooter.com
scarica-mp3.biz
scarica-mp3.com
scarica-musica-mp3.org
scarica-musica.com
scarica-musica.org
scaricamp3.us
scaricare-canzoni.com
scaricare-canzoni.net
scaricare-canzoni.org
scaricare-mp3.org
scatporn.info
scent-shopper.com
schanee.de
schmuck-domain.de
scottneiss.net
se-traf.com
se24h.com
search-1.info
search-engine-optimization-4-us.com
search722.com
searchinsurance.net
searchtypo.com
secureroot.org
security-result.com
sedonaretreat.org
seitensprung-gratis.com
selectedsex.com
selena-u.ru
selten-angeklickt.de
sempo-tahoe.com
seoy.com
sesso-gratis.cc
sesso-online.net
sessoanalex.com
sessox.biz
seven-card-stud.biz
seven-card-stud.us
sewilla.de
sex-4you.org
sex-bondagenet.org
sex-friend.info
sex-livecam-erotik.net
sex-lover.org
sex-manga.us
sex-mates.info
sex-photos.org
sex-pic-sex.com
sex-pussy.us
sex-toys-next-day.com
sex4dollar.com
sexbrides.com
sexcia.com
sexe.vc
sexglory.com
sexiestserver.com
sexingitup.com
sexmuch.com
sexo9.com
sexplanets.com
sexschlucht.de
sexshop-sexeshop.com
sexshop.tk
sextoysportal.com
sextoyssexvideos.com
sexual-shemales.com
sexual-story.blogspot.com
sexushost.com
sexvoyager.com
sexwebclub.com
sexwebsites.com
sexy-ass.us
sexy-babes.us
sexy-celebrity-photos.com
sexy-girls.org
sexy-lesbian.us
sexy-pussy.us
sexynudea.com
sfondi--gratis.com
sfondi-desktop-gratis.com
shadowbaneguides.net
shannon-e.co.uk
shareint-store.com
shemalesex.biz
shemalesland.com
shemalezhost.com
shemalki.com
shfx-bj.com
shirts-t-shirts.com
shop-opyt.com
shop.tc
shop24x7.net
shopping-liste.de
shoppingideen-xxl.de
shoppyix.com
showsontv.com
sicarrow.co.uk
simple-pharmacy.com
simplemeds.com
simpsonowen.co.uk
sindyhalliday.com
sinfree.net
site-mortgage.com
sitesarchive.com
siti-porno.us
ski-resorts-guide.com
skidman.com
slatersdvds.co.uk
slng.de
slot-machines-slots.com
slotmachinesguide.net
slots-8.com
slots-w.com
slotsjockey.com
slowdownrelax.com
slut-wife-story.blogspot.com
slutcities.com
small-business-grants.biz
smallbusinessgrants.biz
smart-debt-consolidation-and-credit-services.com
smartdot.com
smartonlineshop.com
smerfy.pl
sms-sms-sms.org
sms-sprueche-4fun.de
sms-sprueche.com
sms.pl
smutwebsites.com
sneakysleuth.com
socoplan.org
sofort-mitgewinnen.de
sofortkredit-tipps.de
soft-industry.com
soft.center.prv.pl
software-einkaufsmarkt.de
software-linkliste.de
software-review-center.org
softwaredevelopmentindia.com
soittoaanet-logot-peli.com
sol-web.de
soma-cheap-soma.com
soma-solution.com
soma-web.com
soma.st
somacheap
somaspot.com
sommerreisen-2004.de
sonderpreis.de.com
sonnerie-compositeur.com
sonnerie-hifi-sms.com
sonnerie-logo-jeu.com
sonnerie-logo-sonneries.com
sonnerie-logos-sonneries.com
sonnerie-logos.be
sonnerie-max.com
sonnerie-portable-composer.com
sonnerie-portable.be
sonnerie-sonneries-logo.com
sonnerie-sonneries-logos.com
sonnerie-sonneries.net
sonnerie.net
sonneries-gsm-sms.com
sonneries-sonnerie-logo.com
sonneries-sonnerie-logos.com
sonneries.fr
sorglos-kredit.de
soulfulstencils.com
southbeachdiet.us.com
southbeachdietrecipe.biz
spacige-domains.de
spannende-spiele.de
spassmaker.de
speedsurf.to
speedy-insurance-quotes.com
spermincreasingpills.com
spiele-kostenlose.com
spiele-planet.com
spoodles.com
sportartikel-auswahl.de
sportecdigital.com
sportingcolors.org
sportlich-chic.de
sports---betting.com
sports-betting-
sports-betting-a.com
sports-inter-action.com
sportsbettingexpert.com
sportsparent.com
spp-net.de
spy-patrol.com
spyware-links.com
staffordshires.net
staplethis.de
starpills.com
statusforsale.de
steelstockholder.co.uk
stellenangebote-checken.de
stellenangebote-l.de
stevespoliceequipment.com
stfc-isc.org
sting.cc
stmaryonline.org
stock-power.com
stolb.net
stop-depression.com
stopp-hier.de
stopthatfilthyhabit.com
stories--archive.com
stories-adult.net
stories-inc.com
stories-on-cd.net
stories-on-cd.org
striemline.de
strivectinsd.com
stunningsextoys.com
styrax-benzoin.com
success-biz-replica.com
suma-eintragen.de
sumaeintrag-xxl.de
sunbandits.com
sunnyby.com
suonerie-center.com
suonerie-download.com
suonerie-loghi-gratis.com
suonerieloghix.com
suoneriex.net
suoyan.com
super-bowl-bet.biz
super-celebs.com
super-cialis.com
superbowl--betting.com
superdolphins.org
superpornlist.com
surfe-und-staune.de
susiewildin.com
sutra-sex.com
suttonjames.net
suttonjames.org
svitonline.com
sweet-horny.com
sweethotgirls.com
swinger-story.blogspot.com
swingersunidos.com
sydney-harbour.info
sylphiel.org
sylviapanda.com
sysaud.com
t35.com
t3n.org
tabsinc.com
take-credit-cards.com
taliesinfellows.org
talktobabes.com
tanganyikan-cichlids.co.uk
tapbuster.co.uk
taremociecall.com
targetindustries.net
targetingpain.net
tattoo-entwuerfe.de
tatuaggi-gratis.com
tatuaggi-piercing.org
tatuaggi-tribali.com
tatuaggi.cc
tatuaggi.us
tatuaggitribali.com
tclighting.net
tclighting.org
tdk-n.com
teambeck.org
tecrep-inc.net
tecrep-inc.org
teen-babes.us
teen-boys-fuck-paysite.com
teen-d.com
teen-hentai.us
teen-movie.us
teen-porn-movie.net
teen-sex-porn-models.com
teen-video.us
teen-xxx.us
teensluts.org
teenxxxpix.net
telechargement-logiciel.com
terminator-sales.com
testi-canzoni.com
testi-canzoni.net
testi-musicali.com
testi-musicali.net
testi.cc
tests-shop.com
tette.bz
tettone.cc
texas--hold--em
texas--hold-em
texas--holdem
texas-hold-em
texas-holdem
texasproptax.com
tgplist.us
thatwhichis.com
the-boysfirsttime.com
the-date.com
the-hun-site.com
the-hun-yellow-page-tgp.com
the-pill-bottle.com
the-proxy.com
the1930shome.co.uk
thebans.com
theblackfoxes.com
theceleb.com
thecraftersgallery.com
thefreecellphone.com
thehadhams.net
themadpiper.net
thepornhost.com
thepurplepitch.com
therosygarden.com
thesoftwaregarage.co.uk
thespecialweb.com
thewebbrains.com
thorcarlson.com
thumbscape.com
ticket-marktplatz.de
tickets4events.de
tiere-futter.de
tiffany-towers.com
tikattack.com
timescooter.com
tina4re.com
tips-1a.de
tits-center.com
tits-cumshots.net
tmsathai.org
tofik.pl
tokyojoes.info
top-blackjack-game
top-cialis.com
top-deals-online-pharmacy
top-deals-pills
top-deals-pills.info
top-deals-viagra
top-dedicated-servers.com
top-des-rencontres.com
top-fioricet.com
top-internet-blackjack.com
top-milf.com
top-of-best.de
top-online-poker-bonuses
top-online-slots.com
top-pharmacy.net
top-skelaxin.com
top-soma.com
top-the-best.de
top-video-poker.info
topaktuelle-tattos.de
topcialis.com
toques-logos-jogos.com
toshain.com
total-verspielt.de
totallyfreecreditreport.org
touchwoodmagazine.org.uk
tournamentpoker.biz
training-one.co.uk
tranny-pic-free.com
trannysexmovie.com
transbestporn.com
transestore.com
transpire.de
traum-pcs.de
treocat.com
triadindustries.co.uk
troggen.de
troie.bz
trolliges.de
trucchi-giochi.us
trueuninstall.com
tt33tt.com
tt7.org
tubegator.com
tuff-enuff.fnpsites.com
twinky.org
tygef.org
u-w-m.ru
uaeecommerce.com
ufosearch.net
uk-virtual-office-solutions.com
uk.net
ultracet-web.com
ultrampharmacy.com
unbeatablecellphones.com
unbeatablemobiles.co.uk
unbeatablerx.com
unccd.ch
underage-pussy.net
undonet.com
uni-card.ru
united-cash.com
unrisd.com
unscramble.de
unterm-rock.us
upsms.de
urlaubssonne-tanken.de
us-cash.com
us-meds.com
usa-birthday-flowers.com
usa-car-insurance.com
usa-car-loans.com
usa-cash-advance.com
usa-escorts-123.com
usbitches.com
uscashloan.com
usedcarsforsale
v27.net
v29.net
v3.be
vacation-rentals-guide.com
valeofglamorganconservatives.org
vcialis.com
venera-agency.com
veranstaltungs-tickets.de
vergleich-versicherungsangebote.de
versicherungsangebote-vergleichen.de
versicherungsvergleiche-xxl.de
versteigerungs-festival.de
verybrowse.com
verycd.com
verycheapdentalinsurance.com
viaggix.com
viapaxton.com
video-n.com
video-poker-dot.com
video-poker-world.net
video-porno.nu
videohentai.org
videoportfolios.com
vilentium.de
villagesx.com
vimax.lx.ro
vimax.topcities.com
vip-condom.com
vip-online-pharmacy.com
vitamins-for-each.com
vivalatinmag.com
vivlart.com
vixensisland.com
vod-solutions.com
vonormytexas.us
vtsae.org
w-ebony.com
waldner-msa.co.uk
warblog.net
washere.de
watches-sales.com
waterbeds-dot.com
wayshell.co.uk
wblogs.com
wcgaaa.org
we-live-together-4u.com
weareconfused.org.uk
wearethechampions.com
web-cam-porn.net
web-cialis.com
web-revenue.com
webanfragen.de
webblogs.biz
webcam-erotiche.com
webcenter.pl
webcopywizard.net
webhgh.com
webpark.pl
webrank.cn
websitedesigningpromotion.com
weddings-info.com
weddings-links.com
weekend-cialis
weighlessrx.com
weight-loss-central.org
weight-loss-links.net
weightlossplace.net
weitere-stellenangebote.de
wellness-getraenk.de
wet-4all.com
wet-pussy.us
wethorny.com
white-shadow-nasty-story.blogspot.com
whitehouse.com
whizzkidsuk.co.uk
wholesalepocketbike.com
wild-porno-girls.com
willcommen.de
wincmd.ru
wincrestal.com
windcomesdown.com
wirenorth.com
wiset-online.com
witch-watch.com
witz-net.de
wizardsoul.com
woodyracing.co.uk
workfromhome-homebasedbusiness.com
world-candle.com
world-cheese.com
worldmusic.com
worldsexi.com
worldwide-deals.net
worldwide-games.net
worldwide-holdem.com
worldwide-online-pharmacy.net
worldwidecasinosearch.com
wotcher.de
www-sesso # Catchall for many spam sites
www-webspace.de
x-baccarat.com
x-baccarat.us
x-beat.com
x-bingo.com
x-craps.com
x-craps.us
x-fioricet.com
x-free-casino-games.com
x-internet-casino.com
x-jack.us
x-pictures.net
x-pictures.org
x-ring-tones.com
x-ringtones.com
x-roulette.com
x-roulette.us
x-roullete.com
x-slots.com
x-slots.us
x-stories.org
x-video-poker.com
x-video-poker.us
xaper.com
xdolar.com
xfreehosting.com
xgsm.org
xin-web.de
xlboobs.net
xmilf.us
xnxxx.com
xpictx.com
xprescription.com
xprv.com
xratedcities.com
xsesso.biz
xxshopadult.com
xxx-alt-sex-story.blogspot.com
xxx-database.com
xxx-dvd.biz
xxx-erotic-sex-story.blogspot.com
xxx-first-time-sex-story.blogspot.com
xxx-free-erotic-sex-story.blogspot.com
xxx-gay-sex-story.blogspot.com
xxx-girls-sex.com
xxx-password-web.com
xxx-pussy.us
xxx-sex-movies.org
xxx-sex-story-post.blogspot.com
xxx-spanking-story.blogspot.com
xxx-stories.net
xxx-story.blogspot.com
xxxchan.com
xxxseeker.com
xxxwashington.com
xz9.com
yaninediaz.com
yelucie.com
ymf.name
yoga-mats.freeservers.com
yoll.net
you-date.com
young-ass.us
your-tattoo.de
yourdentalinsuranceonline.com
yourowncolours.co.uk
yourserver.com
yubatech.com
yukka.inc.ru
zalaszentgrot.com
zazlibrary.com
zfgfz.net
zipcodedownload.com
zipcodesmap.com
zithromax-online.net
zone-b51.com
zoo-sex-pics.com
zoo-sex.biz
zoo-sex.info
zoo-zone.com
zooeurope.com
zoofil.com
zoofilia-fotos.com
zoosex-motion-videos.com
zoosex-pictures.com
zoosx.net
zpics.net
zt148.com
zum-bestpreis.de
zweree.com
zxyzxy.comze = $xmlrpc_val->arraysize();
$arr = array();
for($i = 0; $i < $size; $i++)
{
$arr[] = php_xmlrpc_decode($xmlrpc_val->arraymem($i));
}
return $arr;
}
elseif($kind == 'struct')
{
$xmlrpc_val->structreset();
$arr = array();
while(list($key,$value)=$xmlrpc_val->structeach())
{
$arr[$key] = php_xmlrpc_decode($value);
}
return $arr;
}
}
if(function_exists('xmlrpc_decode'))
{
define('XMLRPC_EPI_ENABLED','1');
}
else
{
define('XMLRPC_EPI_ENABLED','0');
function xmlrpc_decode($xmlrpc_val)
{
$kind = $xmlrpc_val->kindOf();
if($kind == 'scalar')
{
return $xmlrpc_val->scalarval();
}
elseif($kind == 'array')
{
$size = $xmlrpc_val->arraysize();
$arr = array();
for($i = 0; $i < $size; $i++)
{
$arr[]=xmlrpc_decode($xmlrpc_val->arraymem($i));
}
return $arr;
}
elseif($kind == 'struct')
{
$xmlrpc_val->structreset();
$arr = array();
while(list($key,$value)=$xmlrpc_val->structeach())
{
$arr[$key] = xmlrpc_decode($value);
}
return $arr;
}
}
}
/****************************************************************
* xmlrpc_encode takes native php types and encodes them into *
* xmlrpc PHP object format. *
* BUG: All sequential arrays are turned into structs. I don't *
* know of a good way to determine if an array is sequential *
* only. *
* *
* feature creep -- could support more types via optional type *
* argument. *
* *
* author: Dan Libby (dan@libby.com) *
****************************************************************/
function php_xmlrpc_encode($php_val)
{
global $xmlrpcInt;
global $xmlrpcDouble;
global $xmlrpcString;
global $xmlrpcArray;
global $xmlrpcStruct;
global $xmlrpcBoolean;
$type = gettype($php_val);
$xmlrpc_val = new xmlrpcval;
switch($type)
{
case 'array':
case 'object':
$arr = array();
while (list($k,$v) = each($php_val))
{
$arr[$k] = php_xmlrpc_encode($v);
}
$xmlrpc_val->addStruct($arr);
break;
case 'integer':
$xmlrpc_val->addScalar($php_val, $xmlrpcInt);
break;
case 'double':
$xmlrpc_val->addScalar($php_val, $xmlrpcDouble);
break;
case 'string':
$xmlrpc_val->addScalar($php_val, $xmlrpcString);
break;
//
// Add support for encoding/decoding of booleans, since they are supported in PHP
case 'boolean':
$xmlrpc_val->addScalar($php_val, $xmlrpcBoolean);
break;
//
// catch "resource", "NULL", "user function", "unknown type"
//case 'unknown type':
default:
// giancarlo pinerolo
// it has to return
// an empty object in case (which is already
// at this point), not a boolean.
break;
}
return $xmlrpc_val;
}
if(XMLRPC_EPI_ENABLED == '0')
{
function xmlrpc_encode($php_val)
{
global $xmlrpcInt;
global $xmlrpcDouble;
global $xmlrpcString;
global $xmlrpcArray;
global $xmlrpcStruct;
global $xmlrpcBoolean;
$type = gettype($php_val);
$xmlrpc_val = new xmlrpcval;
switch($type)
{
case 'array':
case 'object':
$arr = array();
while (list($k,$v) = each($php_val))
{
$arr[$k] = xmlrpc_encode($v);
}
$xmlrpc_val->addStruct($arr);
break;
case 'integer':
$xmlrpc_val->addScalar($php_val, $xmlrpcInt);
break;
case 'double':
$xmlrpc_val->addScalar($php_val, $xmlrpcDouble);
break;
case 'string':
$xmlrpc_val->addScalar($php_val, $xmlrpcString);
break;
//
// Add support for encoding/decoding of booleans, since they are supported in PHP
case 'boolean':
$xmlrpc_val->addScalar($php_val, $xmlrpcBoolean);
break;
//
//case 'unknown type':
default:
// giancarlo pinerolo
// it has to return
// an empty object in case (which is already
// at this point), not a boolean.
break;
}
return $xmlrpc_val;
}
}
?>
'%SQL_ARD_TYPE','%SQL_ASYNC_ENABLE','%SQL_ASYNC_ENABLE_DEFAULT','%SQL_ASYNC_ENABLE_OFF','%SQL_ASYNC_ENABLE_ON','%SQL_ASYNC_MODE','%SQL_ATTR_ACCESS_MODE','%SQL_ATTR_ANSI_APP',
'%SQL_ATTR_APP_PARAM_DESC','%SQL_ATTR_APP_ROW_DESC','%SQL_ATTR_ASYNC_ENABLE','%SQL_ATTR_AUTOCOMMIT','%SQL_ATTR_AUTO_IPD','%SQL_ATTR_CONCURRENCY','%SQL_ATTR_CONNECTION_DEAD','%SQL_ATTR_CONNECTION_POOLING',
'%SQL_ATTR_CONNECTION_TIMEOUT','%SQL_ATTR_CP_MATCH','%SQL_ATTR_CURRENT_CATALOG','%SQL_ATTR_CURSOR_SCROLLABLE','%SQL_ATTR_CURSOR_SENSITIVITY','%SQL_ATTR_CURSOR_TYPE','%SQL_ATTR_DISCONNECT_BEHAVIOR','%SQL_ATTR_ENABLE_AUTO_IPD',
'%SQL_ATTR_ENLIST_IN_DTC','%SQL_ATTR_ENLIST_IN_XA','%SQL_ATTR_FETCH_BOOKMARK_PTR','%SQL_ATTR_IMP_PARAM_DESC','%SQL_ATTR_IMP_ROW_DESC','%SQL_ATTR_KEYSET_SIZE','%SQL_ATTR_LOGIN_TIMEOUT','%SQL_ATTR_MAX_LENGTH',
'%SQL_ATTR_MAX_ROWS','%SQL_ATTR_METADATA_ID','%SQL_ATTR_NOSCAN','%SQL_ATTR_ODBC_CURSORS','%SQL_ATTR_ODBC_VERSION','%SQL_ATTR_OUTPUT_NTS','%SQL_ATTR_PACKET_SIZE','%SQL_ATTR_PARAMSET_SIZE',
'%SQL_ATTR_PARAMS_PROCESSED_PTR','%SQL_ATTR_PARAM_BIND_OFFSET_PTR','%SQL_ATTR_PARAM_BIND_TYPE','%SQL_ATTR_PARAM_OPERATION_PTR','%SQL_ATTR_PARAM_STATUS_PTR','%SQL_ATTR_QUERY_TIMEOUT','%SQL_ATTR_QUIET_MODE','%SQL_ATTR_READONLY',
'%SQL_ATTR_READWRITE_UNKNOWN','%SQL_ATTR_RETRIEVE_DATA','%SQL_ATTR_ROWS_FETCHED_PTR','%SQL_ATTR_ROW_ARRAY_SIZE','%SQL_ATTR_ROW_BIND_OFFSET_PTR','%SQL_ATTR_ROW_BIND_TYPE','%SQL_ATTR_ROW_NUMBER','%SQL_ATTR_ROW_OPERATION_PTR',
'%SQL_ATTR_ROW_STATUS_PTR','%SQL_ATTR_SIMULATE_CURSOR','%SQL_ATTR_TRACE','%SQL_ATTR_TRACEFILE','%SQL_ATTR_TRANSLATE_LIB','%SQL_ATTR_TRANSLATE_OPTION','%SQL_ATTR_TXN_ISOLATION','%SQL_ATTR_USE_BOOKMARKS',
'%SQL_ATTR_WRITE','%SQL_AT_ADD_COLUMN','%SQL_AT_ADD_COLUMN_COLLATION','%SQL_AT_ADD_COLUMN_DEFAULT','%SQL_AT_ADD_COLUMN_SINGLE','%SQL_AT_ADD_CONSTRAINT','%SQL_AT_ADD_TABLE_CONSTRAINT','%SQL_AT_CONSTRAINT_DEFERRABLE',
'%SQL_AT_CONSTRAINT_INITIALLY_DEFERRED','%SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_AT_CONSTRAINT_NAME_DEFINITION','%SQL_AT_CONSTRAINT_NON_DEFERRABLE','%SQL_AT_DROP_COLUMN','%SQL_AT_DROP_COLUMN_CASCADE','%SQL_AT_DROP_COLUMN_DEFAULT','%SQL_AT_DROP_COLUMN_RESTRICT',
'%SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE','%SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT','%SQL_AT_SET_COLUMN_DEFAULT','%SQL_AUTOCOMMIT','%SQL_AUTOCOMMIT_DEFAULT','%SQL_AUTOCOMMIT_OFF','%SQL_AUTOCOMMIT_ON','%SQL_BATCH_ROW_COUNT',
'%SQL_BATCH_SUPPORT','%SQL_BEST_ROWID','%SQL_BIGINT','%SQL_BINARY','%SQL_BIND_BY_COLUMN','%SQL_BIND_TYPE','%SQL_BIND_TYPE_DEFAULT','%SQL_BIT',
'%SQL_BOOKMARK_PERSISTENCE','%SQL_BP_CLOSE','%SQL_BP_DELETE','%SQL_BP_DROP','%SQL_BP_OTHER_HSTMT','%SQL_BP_SCROLL','%SQL_BP_TRANSACTION','%SQL_BP_UPDATE',
'%SQL_BRC_EXPLICIT','%SQL_BRC_PROCEDURES','%SQL_BRC_ROLLED_UP','%SQL_BS_ROW_COUNT_EXPLICIT','%SQL_BS_ROW_COUNT_PROC','%SQL_BS_SELECT_EXPLICIT','%SQL_BS_SELECT_PROC','%SQL_CA1_ABSOLUTE',
'%SQL_CA1_BOOKMARK','%SQL_CA1_BULK_ADD','%SQL_CA1_BULK_DELETE_BY_BOOKMARK','%SQL_CA1_BULK_FETCH_BY_BOOKMARK','%SQL_CA1_BULK_UPDATE_BY_BOOKMARK','%SQL_CA1_LOCK_EXCLUSIVE','%SQL_CA1_LOCK_NO_CHANGE','%SQL_CA1_LOCK_UNLOCK',
'%SQL_CA1_NEXT','%SQL_CA1_POSITIONED_DELETE','%SQL_CA1_POSITIONED_UPDATE','%SQL_CA1_POS_DELETE','%SQL_CA1_POS_POSITION','%SQL_CA1_POS_REFRESH','%SQL_CA1_POS_UPDATE','%SQL_CA1_RELATIVE',
'%SQL_CA1_SELECT_FOR_UPDATE','%SQL_CA2_CRC_APPROXIMATE','%SQL_CA2_CRC_EXACT','%SQL_CA2_LOCK_CONCURRENCY','%SQL_CA2_MAX_ROWS_AFFECTS_ALL','%SQL_CA2_MAX_ROWS_CATALOG','%SQL_CA2_MAX_ROWS_DELETE','%SQL_CA2_MAX_ROWS_INSERT',
'%SQL_CA2_MAX_ROWS_SELECT','%SQL_CA2_MAX_ROWS_UPDATE','%SQL_CA2_OPT_ROWVER_CONCURRENCY','%SQL_CA2_OPT_VALUES_CONCURRENCY','%SQL_CA2_READ_ONLY_CONCURRENCY','%SQL_CA2_SENSITIVITY_ADDITIONS','%SQL_CA2_SENSITIVITY_DELETIONS','%SQL_CA2_SENSITIVITY_UPDATES',
'%SQL_CA2_SIMULATE_NON_UNIQUE','%SQL_CA2_SIMULATE_TRY_UNIQUE','%SQL_CA2_SIMULATE_UNIQUE','%SQL_CASCADE','%SQL_CATALOG_LOCATION','%SQL_CATALOG_NAME','%SQL_CATALOG_NAME_SEPARATOR','%SQL_CATALOG_TERM',
'%SQL_CATALOG_USAGE','%SQL_CA_CONSTRAINT_DEFERRABLE','%SQL_CA_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CA_CONSTRAINT_NON_DEFERRABLE','%SQL_CA_CREATE_ASSERTION','%SQL_CB_CLOSE','%SQL_CB_DELETE',
'%SQL_CB_NON_NULL','%SQL_CB_NULL','%SQL_CB_PRESERVE','%SQL_CCOL_CREATE_COLLATION','%SQL_CCS_COLLATE_CLAUSE','%SQL_CCS_CREATE_CHARACTER_SET','%SQL_CCS_LIMITED_COLLATION','%SQL_CC_CLOSE',
'%SQL_CC_DELETE','%SQL_CC_PRESERVE','%SQL_CDO_COLLATION','%SQL_CDO_CONSTRAINT','%SQL_CDO_CONSTRAINT_DEFERRABLE','%SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED','%SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CDO_CONSTRAINT_NAME_DEFINITION',
'%SQL_CDO_CONSTRAINT_NON_DEFERRABLE','%SQL_CDO_CREATE_DOMAIN','%SQL_CDO_DEFAULT','%SQL_CD_FALSE','%SQL_CD_TRUE','%SQL_CHAR','%SQL_CLOSE','%SQL_CL_END',
'%SQL_CL_START','%SQL_CN_ANY','%SQL_CN_DIFFERENT','%SQL_CN_NONE','%SQL_CODE_DATE','%SQL_CODE_DAY','%SQL_CODE_DAY_TO_HOUR','%SQL_CODE_DAY_TO_MINUTE',
'%SQL_CODE_DAY_TO_SECOND','%SQL_CODE_HOUR','%SQL_CODE_HOUR_TO_MINUTE','%SQL_CODE_HOUR_TO_SECOND','%SQL_CODE_MINUTE','%SQL_CODE_MINUTE_TO_SECOND','%SQL_CODE_MONTH','%SQL_CODE_SECOND',
'%SQL_CODE_TIME','%SQL_CODE_TIMESTAMP','%SQL_CODE_YEAR','%SQL_CODE_YEAR_TO_MONTH','%SQL_COLATT_OPT_MAX','%SQL_COLATT_OPT_MIN','%SQL_COLLATION_SEQ','%SQL_COLUMN_ALIAS',
'%SQL_COLUMN_AUTO_INCREMENT','%SQL_COLUMN_CASE_SENSITIVE','%SQL_COLUMN_COUNT','%SQL_COLUMN_DISPLAY_SIZE','%SQL_COLUMN_IGNORE','%SQL_COLUMN_LABEL','%SQL_COLUMN_LENGTH','%SQL_COLUMN_MONEY',
'%SQL_COLUMN_NAME','%SQL_COLUMN_NULLABLE','%SQL_COLUMN_NUMBER_UNKNOWN','%SQL_COLUMN_OWNER_NAME','%SQL_COLUMN_PRECISION','%SQL_COLUMN_QUALIFIER_NAME','%SQL_COLUMN_SCALE','%SQL_COLUMN_SEARCHABLE',
'%SQL_COLUMN_TABLE_NAME','%SQL_COLUMN_TYPE','%SQL_COLUMN_TYPE_NAME','%SQL_COLUMN_UNSIGNED','%SQL_COLUMN_UPDATABLE','%SQL_COL_PRED_BASIC','%SQL_COL_PRED_CHAR','%SQL_COMMIT',
'%SQL_CONCAT_NULL_BEHAVIOR','%SQL_CONCURRENCY','%SQL_CONCUR_DEFAULT','%SQL_CONCUR_LOCK','%SQL_CONCUR_READ_ONLY','%SQL_CONCUR_ROWVER','%SQL_CONCUR_TIMESTAMP','%SQL_CONCUR_VALUES',
'%SQL_CONVERT_BIGINT','%SQL_CONVERT_BINARY','%SQL_CONVERT_BIT','%SQL_CONVERT_CHAR','%SQL_CONVERT_DATE','%SQL_CONVERT_DECIMAL','%SQL_CONVERT_DOUBLE','%SQL_CONVERT_FLOAT',
'%SQL_CONVERT_FUNCTIONS','%SQL_CONVERT_GUID','%SQL_CONVERT_INTEGER','%SQL_CONVERT_INTERVAL_DAY_TIME','%SQL_CONVERT_INTERVAL_YEAR_MONTH','%SQL_CONVERT_LONGVARBINARY','%SQL_CONVERT_LONGVARCHAR','%SQL_CONVERT_NUMERIC',
'%SQL_CONVERT_REAL','%SQL_CONVERT_SMALLINT','%SQL_CONVERT_TIME','%SQL_CONVERT_TIMESTAMP','%SQL_CONVERT_TINYINT','%SQL_CONVERT_VARBINARY','%SQL_CONVERT_VARCHAR','%SQL_CONVERT_WCHAR',
'%SQL_CONVERT_WLONGVARCHAR','%SQL_CONVERT_WVARCHAR','%SQL_CORRELATION_NAME','%SQL_CP_DEFAULT','%SQL_CP_MATCH_DEFAULT','%SQL_CP_OFF','%SQL_CP_ONE_PER_DRIVER','%SQL_CP_ONE_PER_HENV',
'%SQL_CP_RELAXED_MATCH','%SQL_CP_STRICT_MATCH','%SQL_CREATE_ASSERTION','%SQL_CREATE_CHARACTER_SET','%SQL_CREATE_COLLATION','%SQL_CREATE_DOMAIN','%SQL_CREATE_SCHEMA','%SQL_CREATE_TABLE',
'%SQL_CREATE_TRANSLATION','%SQL_CREATE_VIEW','%SQL_CR_CLOSE','%SQL_CR_DELETE','%SQL_CR_PRESERVE','%SQL_CS_AUTHORIZATION','%SQL_CS_CREATE_SCHEMA','%SQL_CS_DEFAULT_CHARACTER_SET',
'%SQL_CTR_CREATE_TRANSLATION','%SQL_CT_COLUMN_COLLATION','%SQL_CT_COLUMN_CONSTRAINT','%SQL_CT_COLUMN_DEFAULT','%SQL_CT_COMMIT_DELETE','%SQL_CT_COMMIT_PRESERVE','%SQL_CT_CONSTRAINT_DEFERRABLE','%SQL_CT_CONSTRAINT_INITIALLY_DEFERRED',
'%SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE','%SQL_CT_CONSTRAINT_NAME_DEFINITION','%SQL_CT_CONSTRAINT_NON_DEFERRABLE','%SQL_CT_CREATE_TABLE','%SQL_CT_GLOBAL_TEMPORARY','%SQL_CT_LOCAL_TEMPORARY','%SQL_CT_TABLE_CONSTRAINT','%SQL_CURRENT_QUALIFIER',
'%SQL_CURSOR_COMMIT_BEHAVIOR','%SQL_CURSOR_DYNAMIC','%SQL_CURSOR_FORWARD_ONLY','%SQL_CURSOR_KEYSET_DRIVEN','%SQL_CURSOR_ROLLBACK_BEHAVIOR','%SQL_CURSOR_SENSITIVITY','%SQL_CURSOR_STATIC','%SQL_CURSOR_TYPE',
'%SQL_CURSOR_TYPE_DEFAULT','%SQL_CUR_DEFAULT','%SQL_CUR_USE_DRIVER','%SQL_CUR_USE_IF_NEEDED','%SQL_CUR_USE_ODBC','%SQL_CU_DML_STATEMENTS','%SQL_CU_INDEX_DEFINITION','%SQL_CU_PRIVILEGE_DEFINITION',
'%SQL_CU_PROCEDURE_INVOCATION','%SQL_CU_TABLE_DEFINITION','%SQL_CVT_BIGINT','%SQL_CVT_BINARY','%SQL_CVT_BIT','%SQL_CVT_CHAR','%SQL_CVT_DATE','%SQL_CVT_DECIMAL',
'%SQL_CVT_DOUBLE','%SQL_CVT_FLOAT','%SQL_CVT_GUID','%SQL_CVT_INTEGER','%SQL_CVT_INTERVAL_DAY_TIME','%SQL_CVT_INTERVAL_YEAR_MONTH','%SQL_CVT_LONGVARBINARY','%SQL_CVT_LONGVARCHAR',
'%SQL_CVT_NUMERIC','%SQL_CVT_REAL','%SQL_CVT_SMALLINT','%SQL_CVT_TIME','%SQL_CVT_TIMESTAMP','%SQL_CVT_TINYINT','%SQL_CVT_VARBINARY','%SQL_CVT_VARCHAR',
'%SQL_CVT_WCHAR','%SQL_CVT_WLONGVARCHAR','%SQL_CVT_WVARCHAR','%SQL_CV_CASCADED','%SQL_CV_CHECK_OPTION','%SQL_CV_CREATE_VIEW','%SQL_CV_LOCAL','%SQL_C_BINARY',
'%SQL_C_BIT','%SQL_C_BOOKMARK','%SQL_C_CHAR','%SQL_C_DATE','%SQL_C_DEFAULT','%SQL_C_DOUBLE','%SQL_C_FLOAT','%SQL_C_GUID',
'%SQL_C_INTERVAL_DAY','%SQL_C_INTERVAL_DAY_TO_HOUR','%SQL_C_INTERVAL_DAY_TO_MINUTE','%SQL_C_INTERVAL_DAY_TO_SECOND','%SQL_C_INTERVAL_HOUR','%SQL_C_INTERVAL_HOUR_TO_MINUTE','%SQL_C_INTERVAL_HOUR_TO_SECOND','%SQL_C_INTERVAL_MINUTE',
'%SQL_C_INTERVAL_MINUTE_TO_SECOND','%SQL_C_INTERVAL_MONTH','%SQL_C_INTERVAL_SECOND','%SQL_C_INTERVAL_YEAR','%SQL_C_INTERVAL_YEAR_TO_MONTH','%SQL_C_LONG','%SQL_C_NUMERIC','%SQL_C_SBIGINT',
'%SQL_C_SHORT','%SQL_C_SLONG','%SQL_C_SSHORT','%SQL_C_STINYINT','%SQL_C_TIME','%SQL_C_TIMESTAMP','%SQL_C_TINYINT','%SQL_C_TYPE_DATE',
'%SQL_C_TYPE_TIME','%SQL_C_TYPE_TIMESTAMP','%SQL_C_UBIGINT','%SQL_C_ULONG','%SQL_C_USHORT','%SQL_C_UTINYINT','%SQL_C_VARBOOKMARK','%SQL_DATABASE_NAME',
'%SQL_DATA_AT_EXEC','%SQL_DATA_SOURCE_NAME','%SQL_DATA_SOURCE_READ_ONLY','%SQL_DATE','%SQL_DATETIME','%SQL_DATETIME_LITERALS','%SQL_DATE_LEN','%SQL_DAY',
'%SQL_DAY_TO_HOUR','%SQL_DAY_TO_MINUTE','%SQL_DAY_TO_SECOND','%SQL_DA_DROP_ASSERTION','%SQL_DBMS_NAME','%SQL_DBMS_VER','%SQL_DB_DEFAULT','%SQL_DB_DISCONNECT',
'%SQL_DB_RETURN_TO_POOL','%SQL_DCS_DROP_CHARACTER_SET','%SQL_DC_DROP_COLLATION','%SQL_DDL_INDEX','%SQL_DD_CASCADE','%SQL_DD_DROP_DOMAIN','%SQL_DD_RESTRICT','%SQL_DECIMAL',
'%SQL_DEFAULT','%SQL_DEFAULT_PARAM','%SQL_DEFAULT_TXN_ISOLATION','%SQL_DELETE','%SQL_DELETE_BY_BOOKMARK','%SQL_DESCRIBE_PARAMETER','%SQL_DESC_ALLOC_AUTO','%SQL_DESC_ALLOC_TYPE',
'%SQL_DESC_ALLOC_USER','%SQL_DESC_ARRAY_SIZE','%SQL_DESC_ARRAY_STATUS_PTR','%SQL_DESC_AUTO_UNIQUE_VALUE','%SQL_DESC_BASE_COLUMN_NAME','%SQL_DESC_BASE_TABLE_NAME','%SQL_DESC_BIND_OFFSET_PTR','%SQL_DESC_BIND_TYPE',
'%SQL_DESC_CASE_SENSITIVE','%SQL_DESC_CATALOG_NAME','%SQL_DESC_CONCISE_TYPE','%SQL_DESC_COUNT','%SQL_DESC_DATA_PTR','%SQL_DESC_DATETIME_INTERVAL_CODE','%SQL_DESC_DATETIME_INTERVAL_PRECISION','%SQL_DESC_DISPLAY_SIZE',
'%SQL_DESC_FIXED_PREC_SCALE','%SQL_DESC_INDICATOR_PTR','%SQL_DESC_LABEL','%SQL_DESC_LENGTH','%SQL_DESC_LITERAL_PREFIX','%SQL_DESC_LITERAL_SUFFIX','%SQL_DESC_LOCAL_TYPE_NAME','%SQL_DESC_MAXIMUM_SCALE',
'%SQL_DESC_MINIMUM_SCALE','%SQL_DESC_NAME','%SQL_DESC_NULLABLE','%SQL_DESC_NUM_PREC_RADIX','%SQL_DESC_OCTET_LENGTH','%SQL_DESC_OCTET_LENGTH_PTR','%SQL_DESC_PARAMETER_TYPE','%SQL_DESC_PRECISION',
'%SQL_DESC_ROWS_PROCESSED_PTR','%SQL_DESC_SCALE','%SQL_DESC_SCHEMA_NAME','%SQL_DESC_SEARCHABLE','%SQL_DESC_TABLE_NAME','%SQL_DESC_TYPE','%SQL_DESC_TYPE_NAME','%SQL_DESC_UNNAMED',
'%SQL_DESC_UNSIGNED','%SQL_DESC_UPDATABLE','%SQL_DIAG_ALTER_TABLE','%SQL_DIAG_CALL','%SQL_DIAG_CLASS_ORIGIN','%SQL_DIAG_COLUMN_NUMBER','%SQL_DIAG_CONNECTION_NAME','%SQL_DIAG_CREATE_INDEX',
'%SQL_DIAG_CREATE_TABLE','%SQL_DIAG_CREATE_VIEW','%SQL_DIAG_CURSOR_ROW_COUNT','%SQL_DIAG_DELETE_WHERE','%SQL_DIAG_DROP_INDEX','%SQL_DIAG_DROP_TABLE','%SQL_DIAG_DROP_VIEW','%SQL_DIAG_DYNAMIC_DELETE_CURSOR',
'%SQL_DIAG_DYNAMIC_FUNCTION','%SQL_DIAG_DYNAMIC_FUNCTION_CODE','%SQL_DIAG_DYNAMIC_UPDATE_CURSOR','%SQL_DIAG_GRANT','%SQL_DIAG_INSERT','%SQL_DIAG_MESSAGE_TEXT','%SQL_DIAG_NATIVE','%SQL_DIAG_NUMBER',
'%SQL_DIAG_RETURNCODE','%SQL_DIAG_REVOKE','%SQL_DIAG_ROW_COUNT','%SQL_DIAG_ROW_NUMBER','%SQL_DIAG_SELECT_CURSOR','%SQL_DIAG_SERVER_NAME','%SQL_DIAG_SQLSTATE','%SQL_DIAG_SUBCLASS_ORIGIN',
'%SQL_DIAG_UNKNOWN_STATEMENT','%SQL_DIAG_UPDATE_WHERE','%SQL_DI_CREATE_INDEX','%SQL_DI_DROP_INDEX','%SQL_DL_SQL92_DATE','%SQL_DL_SQL92_INTERVAL_DAY','%SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR','%SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE',
'%SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND','%SQL_DL_SQL92_INTERVAL_HOUR','%SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE','%SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MINUTE','%SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND','%SQL_DL_SQL92_INTERVAL_MONTH','%SQL_DL_SQL92_INTERVAL_SECOND',
'%SQL_DL_SQL92_INTERVAL_YEAR','%SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH','%SQL_DL_SQL92_TIME','%SQL_DL_SQL92_TIMESTAMP','%SQL_DM_VER','%SQL_DOUBLE','%SQL_DRIVER_COMPLETE','%SQL_DRIVER_COMPLETE_REQUIRED',
'%SQL_DRIVER_HDBC','%SQL_DRIVER_HDESC','%SQL_DRIVER_HENV','%SQL_DRIVER_HLIB','%SQL_DRIVER_HSTMT','%SQL_DRIVER_NAME','%SQL_DRIVER_NOPROMPT','%SQL_DRIVER_ODBC_VER',
'%SQL_DRIVER_PROMPT','%SQL_DRIVER_VER','%SQL_DROP','%SQL_DROP_ASSERTION','%SQL_DROP_CHARACTER_SET','%SQL_DROP_COLLATION','%SQL_DROP_DOMAIN','%SQL_DROP_SCHEMA',
'%SQL_DROP_TABLE','%SQL_DROP_TRANSLATION','%SQL_DROP_VIEW','%SQL_DS_CASCADE','%SQL_DS_DROP_SCHEMA','%SQL_DS_RESTRICT','%SQL_DTC_DONE','%SQL_DTC_ENLIST_EXPENSIVE',
'%SQL_DTC_TRANSITION_COST','%SQL_DTC_UNENLIST_EXPENSIVE','%SQL_DTR_DROP_TRANSLATION','%SQL_DT_CASCADE','%SQL_DT_DROP_TABLE','%SQL_DT_RESTRICT','%SQL_DV_CASCADE','%SQL_DV_DROP_VIEW',
'%SQL_DV_RESTRICT','%SQL_DYNAMIC_CURSOR_ATTRIBUTES1','%SQL_DYNAMIC_CURSOR_ATTRIBUTES2','%SQL_ENSURE','%SQL_ENTIRE_ROWSET','%SQL_ERROR','%SQL_EXPRESSIONS_IN_ORDERBY','%SQL_FALSE',
'%SQL_FD_FETCH_ABSOLUTE','%SQL_FD_FETCH_BOOKMARK','%SQL_FD_FETCH_FIRST','%SQL_FD_FETCH_LAST','%SQL_FD_FETCH_NEXT','%SQL_FD_FETCH_PREV','%SQL_FD_FETCH_PRIOR','%SQL_FD_FETCH_RELATIVE',
'%SQL_FETCH_ABSOLUTE','%SQL_FETCH_BOOKMARK','%SQL_FETCH_BY_BOOKMARK','%SQL_FETCH_DIRECTION','%SQL_FETCH_FIRST','%SQL_FETCH_FIRST_SYSTEM','%SQL_FETCH_FIRST_USER','%SQL_FETCH_LAST',
'%SQL_FETCH_NEXT','%SQL_FETCH_PREV','%SQL_FETCH_PRIOR','%SQL_FETCH_RELATIVE','%SQL_FILE_CATALOG','%SQL_FILE_NOT_SUPPORTED','%SQL_FILE_QUALIFIER','%SQL_FILE_TABLE',
'%SQL_FILE_USAGE','%SQL_FLOAT','%SQL_FN_CVT_CAST','%SQL_FN_CVT_CONVERT','%SQL_FN_NUM_ABS','%SQL_FN_NUM_ACOS','%SQL_FN_NUM_ASIN','%SQL_FN_NUM_ATAN',
'%SQL_FN_NUM_ATAN2','%SQL_FN_NUM_CEILING','%SQL_FN_NUM_COS','%SQL_FN_NUM_COT','%SQL_FN_NUM_DEGREES','%SQL_FN_NUM_EXP','%SQL_FN_NUM_FLOOR','%SQL_FN_NUM_LOG',
'%SQL_FN_NUM_LOG10','%SQL_FN_NUM_MOD','%SQL_FN_NUM_PI','%SQL_FN_NUM_POWER','%SQL_FN_NUM_RADIANS','%SQL_FN_NUM_RAND','%SQL_FN_NUM_ROUND','%SQL_FN_NUM_SIGN',
'%SQL_FN_NUM_SIN','%SQL_FN_NUM_SQRT','%SQL_FN_NUM_TAN','%SQL_FN_NUM_TRUNCATE','%SQL_FN_STR_ASCII','%SQL_FN_STR_BIT_LENGTH','%SQL_FN_STR_CHAR','%SQL_FN_STR_CHARACTER_LENGTH',
'%SQL_FN_STR_CHAR_LENGTH','%SQL_FN_STR_CONCAT','%SQL_FN_STR_DIFFERENCE','%SQL_FN_STR_INSERT','%SQL_FN_STR_LCASE','%SQL_FN_STR_LEFT','%SQL_FN_STR_LENGTH','%SQL_FN_STR_LOCATE',
'%SQL_FN_STR_LOCATE_2','%SQL_FN_STR_LTRIM','%SQL_FN_STR_OCTET_LENGTH','%SQL_FN_STR_POSITION','%SQL_FN_STR_REPEAT','%SQL_FN_STR_REPLACE','%SQL_FN_STR_RIGHT','%SQL_FN_STR_RTRIM',
'%SQL_FN_STR_SOUNDEX','%SQL_FN_STR_SPACE','%SQL_FN_STR_SUBSTRING','%SQL_FN_STR_UCASE','%SQL_FN_SYS_DBNAME','%SQL_FN_SYS_IFNULL','%SQL_FN_SYS_USERNAME','%SQL_FN_TD_CURDATE',
'%SQL_FN_TD_CURRENT_DATE','%SQL_FN_TD_CURRENT_TIME','%SQL_FN_TD_CURRENT_TIMESTAMP','%SQL_FN_TD_CURTIME','%SQL_FN_TD_DAYNAME','%SQL_FN_TD_DAYOFMONTH','%SQL_FN_TD_DAYOFWEEK','%SQL_FN_TD_DAYOFYEAR',
'%SQL_FN_TD_EXTRACT','%SQL_FN_TD_HOUR','%SQL_FN_TD_MINUTE','%SQL_FN_TD_MONTH','%SQL_FN_TD_MONTHNAME','%SQL_FN_TD_NOW','%SQL_FN_TD_QUARTER','%SQL_FN_TD_SECOND',
'%SQL_FN_TD_TIMESTAMPADD','%SQL_FN_TD_TIMESTAMPDIFF','%SQL_FN_TD_WEEK','%SQL_FN_TD_YEAR','%SQL_FN_TSI_DAY','%SQL_FN_TSI_FRAC_SECOND','%SQL_FN_TSI_HOUR','%SQL_FN_TSI_MINUTE',
'%SQL_FN_TSI_MONTH','%SQL_FN_TSI_QUARTER','%SQL_FN_TSI_SECOND','%SQL_FN_TSI_WEEK','%SQL_FN_TSI_YEAR','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1','%SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2','%SQL_GB_COLLATE',
'%SQL_GB_GROUP_BY_CONTAINS_SELECT','%SQL_GB_GROUP_BY_EQUALS_SELECT','%SQL_GB_NOT_SUPPORTED','%SQL_GB_NO_RELATION','%SQL_GD_ANY_COLUMN','%SQL_GD_ANY_ORDER','%SQL_GD_BLOCK','%SQL_GD_BOUND',
'%SQL_GETDATA_EXTENSIONS','%SQL_GET_BOOKMARK','%SQL_GROUP_BY','%SQL_GUID','%SQL_HANDLE_DBC','%SQL_HANDLE_DESC','%SQL_HANDLE_ENV','%SQL_HANDLE_SENV',
'%SQL_HANDLE_STMT','%SQL_HOUR','%SQL_HOUR_TO_MINUTE','%SQL_HOUR_TO_SECOND','%SQL_IC_LOWER','%SQL_IC_MIXED','%SQL_IC_SENSITIVE','%SQL_IC_UPPER',
'%SQL_IDENTIFIER_CASE','%SQL_IDENTIFIER_QUOTE_CHAR','%SQL_IGNORE','%SQL_IK_ALL','%SQL_IK_ASC','%SQL_IK_DESC','%SQL_IK_NONE','%SQL_INDEX_ALL',
'%SQL_INDEX_CLUSTERED','%SQL_INDEX_HASHED','%SQL_INDEX_KEYWORDS','%SQL_INDEX_OTHER','%SQL_INDEX_UNIQUE','%SQL_INFO_FIRST','%SQL_INFO_SCHEMA_VIEWS','%SQL_INITIALLY_DEFERRED',
'%SQL_INITIALLY_IMMEDIATE','%SQL_INSENSITIVE','%SQL_INSERT_STATEMENT','%SQL_INTEGER','%SQL_INTEGRITY','%SQL_INTERVAL','%SQL_INTERVAL_DAY','%SQL_INTERVAL_DAY_TO_HOUR',
'%SQL_INTERVAL_DAY_TO_MINUTE','%SQL_INTERVAL_DAY_TO_SECOND','%SQL_INTERVAL_HOUR','%SQL_INTERVAL_HOUR_TO_MINUTE','%SQL_INTERVAL_HOUR_TO_SECOND','%SQL_INTERVAL_MINUTE','%SQL_INTERVAL_MINUTE_TO_SECOND','%SQL_INTERVAL_MONTH',
'%SQL_INTERVAL_SECOND','%SQL_INTERVAL_YEAR','%SQL_INTERVAL_YEAR_TO_MONTH','%SQL_INVALID_HANDLE','%SQL_ISV_ASSERTIONS','%SQL_ISV_CHARACTER_SETS','%SQL_ISV_CHECK_CONSTRAINTS','%SQL_ISV_COLLATIONS',
'%SQL_ISV_COLUMNS','%SQL_ISV_COLUMN_DOMAIN_USAGE','%SQL_ISV_COLUMN_PRIVILEGES','%SQL_ISV_CONSTRAINT_COLUMN_USAGE','%SQL_ISV_CONSTRAINT_TABLE_USAGE','%SQL_ISV_DOMAINS','%SQL_ISV_DOMAIN_CONSTRAINTS','%SQL_ISV_KEY_COLUMN_USAGE',
'%SQL_ISV_REFERENTIAL_CONSTRAINTS','%SQL_ISV_SCHEMATA','%SQL_ISV_SQL_LANGUAGES','%SQL_ISV_TABLES','%SQL_ISV_TABLE_CONSTRAINTS','%SQL_ISV_TABLE_PRIVILEGES','%SQL_ISV_TRANSLATIONS','%SQL_ISV_USAGE_PRIVILEGES',
'%SQL_ISV_VIEWS','%SQL_ISV_VIEW_COLUMN_USAGE','%SQL_ISV_VIEW_TABLE_USAGE','%SQL_IS_DAY','%SQL_IS_DAY_TO_HOUR','%SQL_IS_DAY_TO_MINUTE','%SQL_IS_DAY_TO_SECOND','%SQL_IS_HOUR',
'%SQL_IS_HOUR_TO_MINUTE','%SQL_IS_HOUR_TO_SECOND','%SQL_IS_INSERT_LITERALS','%SQL_IS_INSERT_SEARCHED','%SQL_IS_INTEGER','%SQL_IS_MINUTE','%SQL_IS_MINUTE_TO_SECOND','%SQL_IS_MONTH',
'%SQL_IS_POINTER','%SQL_IS_SECOND','%SQL_IS_SELECT_INTO','%SQL_IS_SMALLINT','%SQL_IS_UINTEGER','%SQL_IS_USMALLINT','%SQL_IS_YEAR','%SQL_IS_YEAR_TO_MONTH',
'%SQL_KEYSET_CURSOR_ATTRIBUTES1','%SQL_KEYSET_CURSOR_ATTRIBUTES2','%SQL_KEYSET_SIZE','%SQL_KEYSET_SIZE_DEFAULT','%SQL_KEYWORDS','%SQL_LCK_EXCLUSIVE','%SQL_LCK_NO_CHANGE','%SQL_LCK_UNLOCK',
'%SQL_LEN_BINARY_ATTR_OFFSET','%SQL_LEN_DATA_AT_EXEC_OFFSET','%SQL_LIKE_ESCAPE_CLAUSE','%SQL_LIKE_ONLY','%SQL_LOCK_EXCLUSIVE','%SQL_LOCK_NO_CHANGE','%SQL_LOCK_TYPES','%SQL_LOCK_UNLOCK',
'%SQL_LOGIN_TIMEOUT','%SQL_LOGIN_TIMEOUT_DEFAULT','%SQL_LONGVARBINARY','%SQL_LONGVARCHAR','%SQL_MAXIMUM_CATALOG_NAME_LENGTH','%SQL_MAXIMUM_COLUMNS_IN_GROUP_BY','%SQL_MAXIMUM_COLUMNS_IN_INDEX','%SQL_MAXIMUM_COLUMNS_IN_ORDER_BY',
'%SQL_MAXIMUM_COLUMNS_IN_SELECT','%SQL_MAXIMUM_COLUMN_NAME_LENGTH','%SQL_MAXIMUM_CONCURRENT_ACTIVITIES','%SQL_MAXIMUM_CURSOR_NAME_LENGTH','%SQL_MAXIMUM_DRIVER_CONNECTIONS','%SQL_MAXIMUM_IDENTIFIER_LENGTH','%SQL_MAXIMUM_INDEX_SIZE','%SQL_MAXIMUM_ROW_SIZE',
'%SQL_MAXIMUM_SCHEMA_NAME_LENGTH','%SQL_MAXIMUM_STATEMENT_LENGTH','%SQL_MAXIMUM_TABLES_IN_SELECT','%SQL_MAXIMUM_USER_NAME_LENGTH','%SQL_MAX_ASYNC_CONCURRENT_STATEMENTS','%SQL_MAX_BINARY_LITERAL_LEN','%SQL_MAX_CATALOG_NAME_LEN','%SQL_MAX_CHAR_LITERAL_LEN',
'%SQL_MAX_COLUMNS_IN_GROUP_BY','%SQL_MAX_COLUMNS_IN_INDEX','%SQL_MAX_COLUMNS_IN_ORDER_BY','%SQL_MAX_COLUMNS_IN_SELECT','%SQL_MAX_COLUMNS_IN_TABLE','%SQL_MAX_COLUMN_NAME_LEN','%SQL_MAX_CONCURRENT_ACTIVITIES','%SQL_MAX_CURSOR_NAME_LEN',
'%SQL_MAX_DRIVER_CONNECTIONS','%SQL_MAX_DSN_LENGTH','%SQL_MAX_IDENTIFIER_LEN','%SQL_MAX_INDEX_SIZE','%SQL_MAX_LENGTH','%SQL_MAX_LENGTH_DEFAULT','%SQL_MAX_MESSAGE_LENGTH','%SQL_MAX_NUMERIC_LEN',
'%SQL_MAX_OPTION_STRING_LENGTH','%SQL_MAX_OWNER_NAME_LEN','%SQL_MAX_PROCEDURE_NAME_LEN','%SQL_MAX_QUALIFIER_NAME_LEN','%SQL_MAX_ROWS','%SQL_MAX_ROWS_DEFAULT','%SQL_MAX_ROW_SIZE','%SQL_MAX_ROW_SIZE_INCLUDES_LONG',
'%SQL_MAX_SCHEMA_NAME_LEN','%SQL_MAX_STATEMENT_LEN','%SQL_MAX_TABLES_IN_SELECT','%SQL_MAX_TABLE_NAME_LEN','%SQL_MAX_USER_NAME_LEN','%SQL_MINUTE','%SQL_MINUTE_TO_SECOND','%SQL_MODE_DEFAULT',
'%SQL_MODE_READ_ONLY','%SQL_MODE_READ_WRITE','%SQL_MONTH','%SQL_MULTIPLE_ACTIVE_TXN','%SQL_MULT_RESULT_SETS','%SQL_NAMED','%SQL_NC_END','%SQL_NC_HIGH',
'%SQL_NC_LOW','%SQL_NC_START','%SQL_NEED_DATA','%SQL_NEED_LONG_DATA_LEN','%SQL_NNC_NON_NULL','%SQL_NNC_NULL','%SQL_NONSCROLLABLE','%SQL_NON_NULLABLE_COLUMNS',
'%SQL_NOSCAN','%SQL_NOSCAN_DEFAULT','%SQL_NOSCAN_OFF','%SQL_NOSCAN_ON','%SQL_NOT_DEFERRABLE','%SQL_NO_ACTION','%SQL_NO_COLUMN_NUMBER','%SQL_NO_DATA',
'%SQL_NO_DATA_FOUND','%SQL_NO_NULLS','%SQL_NO_ROW_NUMBER','%SQL_NO_TOTAL','%SQL_NTS','%SQL_NTSL','%SQL_NULLABLE','%SQL_NULLABLE_UNKNOWN',
'%SQL_NULL_COLLATION','%SQL_NULL_DATA','%SQL_NULL_HANDLE','%SQL_NULL_HDBC','%SQL_NULL_HDESC','%SQL_NULL_HENV','%SQL_NULL_HSTMT','%SQL_NUMERIC',
'%SQL_NUMERIC_FUNCTIONS','%SQL_OAC_LEVEL1','%SQL_OAC_LEVEL2','%SQL_OAC_NONE','%SQL_ODBC_API_CONFORMANCE','%SQL_ODBC_CURSORS','%SQL_ODBC_INTERFACE_CONFORMANCE','%SQL_ODBC_SAG_CLI_CONFORMANCE',
'%SQL_ODBC_SQL_CONFORMANCE','%SQL_ODBC_SQL_OPT_IEF','%SQL_ODBC_VER','%SQL_OIC_CORE','%SQL_OIC_LEVEL1','%SQL_OIC_LEVEL2','%SQL_OJ_ALL_COMPARISON_OPS','%SQL_OJ_CAPABILITIES',
'%SQL_OJ_FULL','%SQL_OJ_INNER','%SQL_OJ_LEFT','%SQL_OJ_NESTED','%SQL_OJ_NOT_ORDERED','%SQL_OJ_RIGHT','%SQL_OPT_TRACE','%SQL_OPT_TRACEFILE',
'%SQL_OPT_TRACE_DEFAULT','%SQL_OPT_TRACE_OFF','%SQL_OPT_TRACE_ON','%SQL_ORDER_BY_COLUMNS_IN_SELECT','%SQL_OSCC_COMPLIANT','%SQL_OSCC_NOT_COMPLIANT','%SQL_OSC_CORE','%SQL_OSC_EXTENDED',
'%SQL_OSC_MINIMUM','%SQL_OUTER_JOINS','%SQL_OUTER_JOIN_CAPABILITIES','%SQL_OU_DML_STATEMENTS','%SQL_OU_INDEX_DEFINITION','%SQL_OU_PRIVILEGE_DEFINITION','%SQL_OU_PROCEDURE_INVOCATION','%SQL_OU_TABLE_DEFINITION',
'%SQL_OV_ODBC2','%SQL_OV_ODBC3','%SQL_OWNER_TERM','%SQL_OWNER_USAGE','%SQL_PACKET_SIZE','%SQL_PARAM_ARRAY_ROW_COUNTS','%SQL_PARAM_ARRAY_SELECTS','%SQL_PARAM_BIND_BY_COLUMN',
'%SQL_PARAM_BIND_TYPE_DEFAULT','%SQL_PARAM_DIAG_UNAVAILABLE','%SQL_PARAM_ERROR','%SQL_PARAM_IGNORE','%SQL_PARAM_INPUT','%SQL_PARAM_INPUT_OUTPUT','%SQL_PARAM_OUTPUT','%SQL_PARAM_PROCEED',
'%SQL_PARAM_SUCCESS','%SQL_PARAM_SUCCESS_WITH_INFO','%SQL_PARAM_TYPE_DEFAULT','%SQL_PARAM_TYPE_UNKNOWN','%SQL_PARAM_UNUSED','%SQL_PARC_BATCH','%SQL_PARC_NO_BATCH','%SQL_PAS_BATCH',
'%SQL_PAS_NO_BATCH','%SQL_PAS_NO_SELECT','%SQL_PC_NON_PSEUDO','%SQL_PC_NOT_PSEUDO','%SQL_PC_PSEUDO','%SQL_PC_UNKNOWN','%SQL_POSITION','%SQL_POSITIONED_STATEMENTS',
'%SQL_POS_ADD','%SQL_POS_DELETE','%SQL_POS_OPERATIONS','%SQL_POS_POSITION','%SQL_POS_REFRESH','%SQL_POS_UPDATE','%SQL_PRED_BASIC','%SQL_PRED_CHAR',
'%SQL_PRED_NONE','%SQL_PRED_SEARCHABLE','%SQL_PROCEDURES','%SQL_PROCEDURE_TERM','%SQL_PS_POSITIONED_DELETE','%SQL_PS_POSITIONED_UPDATE','%SQL_PS_SELECT_FOR_UPDATE','%SQL_PT_FUNCTION',
'%SQL_PT_PROCEDURE','%SQL_PT_UNKNOWN','%SQL_QL_END','%SQL_QL_START','%SQL_QUALIFIER_LOCATION','%SQL_QUALIFIER_NAME_SEPARATOR','%SQL_QUALIFIER_TERM','%SQL_QUALIFIER_USAGE',
'%SQL_QUERY_TIMEOUT','%SQL_QUERY_TIMEOUT_DEFAULT','%SQL_QUICK','%SQL_QUIET_MODE','%SQL_QUOTED_IDENTIFIER_CASE','%SQL_QU_DML_STATEMENTS','%SQL_QU_INDEX_DEFINITION','%SQL_QU_PRIVILEGE_DEFINITION',
'%SQL_QU_PROCEDURE_INVOCATION','%SQL_QU_TABLE_DEFINITION','%SQL_RD_DEFAULT','%SQL_RD_OFF','%SQL_RD_ON','%SQL_REAL','%SQL_REFRESH','%SQL_RESET_PARAMS',
'%SQL_RESTRICT','%SQL_RESULT_COL','%SQL_RETRIEVE_DATA','%SQL_RETURN_VALUE','%SQL_ROLLBACK','%SQL_ROWSET_SIZE','%SQL_ROWSET_SIZE_DEFAULT','%SQL_ROWVER',
'%SQL_ROW_ADDED','%SQL_ROW_DELETED','%SQL_ROW_ERROR','%SQL_ROW_IDENTIFIER','%SQL_ROW_IGNORE','%SQL_ROW_NOROW','%SQL_ROW_NUMBER','%SQL_ROW_NUMBER_UNKNOWN',
'%SQL_ROW_PROCEED','%SQL_ROW_SUCCESS','%SQL_ROW_SUCCESS_WITH_INFO','%SQL_ROW_UPDATED','%SQL_ROW_UPDATES','%SQL_SCCO_LOCK','%SQL_SCCO_OPT_ROWVER','%SQL_SCCO_OPT_TIMESTAMP',
'%SQL_SCCO_OPT_VALUES','%SQL_SCCO_READ_ONLY','%SQL_SCC_ISO92_CLI','%SQL_SCC_XOPEN_CLI_VERSION1','%SQL_SCHEMA_TERM','%SQL_SCHEMA_USAGE','%SQL_SCOPE_CURROW','%SQL_SCOPE_SESSION',
'%SQL_SCOPE_TRANSACTION','%SQL_SCROLLABLE','%SQL_SCROLL_CONCURRENCY','%SQL_SCROLL_DYNAMIC','%SQL_SCROLL_FORWARD_ONLY','%SQL_SCROLL_KEYSET_DRIVEN','%SQL_SCROLL_OPTIONS','%SQL_SCROLL_STATIC',
'%SQL_SC_FIPS127_2_TRANSITIONAL','%SQL_SC_NON_UNIQUE','%SQL_SC_SQL92_ENTRY','%SQL_SC_SQL92_FULL','%SQL_SC_SQL92_INTERMEDIATE','%SQL_SC_TRY_UNIQUE','%SQL_SC_UNIQUE','%SQL_SDF_CURRENT_DATE',
'%SQL_SDF_CURRENT_TIME','%SQL_SDF_CURRENT_TIMESTAMP','%SQL_SEARCHABLE','%SQL_SEARCH_PATTERN_ESCAPE','%SQL_SECOND','%SQL_SENSITIVE','%SQL_SERVER_NAME','%SQL_SETPARAM_VALUE_MAX',
'%SQL_SETPOS_MAX_LOCK_VALUE','%SQL_SETPOS_MAX_OPTION_VALUE','%SQL_SET_DEFAULT','%SQL_SET_NULL','%SQL_SFKD_CASCADE','%SQL_SFKD_NO_ACTION','%SQL_SFKD_SET_DEFAULT','%SQL_SFKD_SET_NULL',
'%SQL_SFKU_CASCADE','%SQL_SFKU_NO_ACTION','%SQL_SFKU_SET_DEFAULT','%SQL_SFKU_SET_NULL','%SQL_SG_DELETE_TABLE','%SQL_SG_INSERT_COLUMN','%SQL_SG_INSERT_TABLE','%SQL_SG_REFERENCES_COLUMN',
'%SQL_SG_REFERENCES_TABLE','%SQL_SG_SELECT_TABLE','%SQL_SG_UPDATE_COLUMN','%SQL_SG_UPDATE_TABLE','%SQL_SG_USAGE_ON_CHARACTER_SET','%SQL_SG_USAGE_ON_COLLATION','%SQL_SG_USAGE_ON_DOMAIN','%SQL_SG_USAGE_ON_TRANSLATION',
'%SQL_SG_WITH_GRANT_OPTION','%SQL_SIGNED_OFFSET','%SQL_SIMULATE_CURSOR','%SQL_SMALLINT','%SQL_SNVF_BIT_LENGTH','%SQL_SNVF_CHARACTER_LENGTH','%SQL_SNVF_CHAR_LENGTH','%SQL_SNVF_EXTRACT',
'%SQL_SNVF_OCTET_LENGTH','%SQL_SNVF_POSITION','%SQL_SO_DYNAMIC','%SQL_SO_FORWARD_ONLY','%SQL_SO_KEYSET_DRIVEN','%SQL_SO_MIXED','%SQL_SO_STATIC','%SQL_SPECIAL_CHARACTERS',
'%SQL_SPEC_MAJOR','%SQL_SPEC_MINOR','%SQL_SP_BETWEEN','%SQL_SP_COMPARISON','%SQL_SP_EXISTS','%SQL_SP_IN','%SQL_SP_ISNOTNULL','%SQL_SP_ISNULL',
'%SQL_SP_LIKE','%SQL_SP_MATCH_FULL','%SQL_SP_MATCH_PARTIAL','%SQL_SP_MATCH_UNIQUE_FULL','%SQL_SP_MATCH_UNIQUE_PARTIAL','%SQL_SP_OVERLAPS','%SQL_SP_QUANTIFIED_COMPARISON','%SQL_SP_UNIQUE',
'%SQL_SQL92_DATETIME_FUNCTIONS','%SQL_SQL92_FOREIGN_KEY_DELETE_RULE','%SQL_SQL92_FOREIGN_KEY_UPDATE_RULE','%SQL_SQL92_GRANT','%SQL_SQL92_NUMERIC_VALUE_FUNCTIONS','%SQL_SQL92_PREDICATES','%SQL_SQL92_RELATIONAL_JOIN_OPERATORS','%SQL_SQL92_REVOKE',
'%SQL_SQL92_ROW_VALUE_CONSTRUCTOR','%SQL_SQL92_STRING_FUNCTIONS','%SQL_SQL92_VALUE_EXPRESSIONS','%SQL_SQLSTATE_SIZE','%SQL_SQL_CONFORMANCE','%SQL_SQ_COMPARISON','%SQL_SQ_CORRELATED_SUBQUERIES','%SQL_SQ_EXISTS',
'%SQL_SQ_IN','%SQL_SQ_QUANTIFIED','%SQL_SRJO_CORRESPONDING_CLAUSE','%SQL_SRJO_CROSS_JOIN','%SQL_SRJO_EXCEPT_JOIN','%SQL_SRJO_FULL_OUTER_JOIN','%SQL_SRJO_INNER_JOIN','%SQL_SRJO_INTERSECT_JOIN',
'%SQL_SRJO_LEFT_OUTER_JOIN','%SQL_SRJO_NATURAL_JOIN','%SQL_SRJO_RIGHT_OUTER_JOIN','%SQL_SRJO_UNION_JOIN','%SQL_SRVC_DEFAULT','%SQL_SRVC_NULL','%SQL_SRVC_ROW_SUBQUERY','%SQL_SRVC_VALUE_EXPRESSION',
'%SQL_SR_CASCADE','%SQL_SR_DELETE_TABLE','%SQL_SR_GRANT_OPTION_FOR','%SQL_SR_INSERT_COLUMN','%SQL_SR_INSERT_TABLE','%SQL_SR_REFERENCES_COLUMN','%SQL_SR_REFERENCES_TABLE','%SQL_SR_RESTRICT',
'%SQL_SR_SELECT_TABLE','%SQL_SR_UPDATE_COLUMN','%SQL_SR_UPDATE_TABLE','%SQL_SR_USAGE_ON_CHARACTER_SET','%SQL_SR_USAGE_ON_COLLATION','%SQL_SR_USAGE_ON_DOMAIN','%SQL_SR_USAGE_ON_TRANSLATION','%SQL_SSF_CONVERT',
'%SQL_SSF_LOWER','%SQL_SSF_SUBSTRING','%SQL_SSF_TRANSLATE','%SQL_SSF_TRIM_BOTH','%SQL_SSF_TRIM_LEADING','%SQL_SSF_TRIM_TRAILING','%SQL_SSF_UPPER','%SQL_SS_ADDITIONS',
'%SQL_SS_DELETIONS','%SQL_SS_UPDATES','%SQL_STANDARD_CLI_CONFORMANCE','%SQL_STATIC_CURSOR_ATTRIBUTES1','%SQL_STATIC_CURSOR_ATTRIBUTES2','%SQL_STATIC_SENSITIVITY','%SQL_STILL_EXECUTING','%SQL_STRING_FUNCTIONS',
'%SQL_SUBQUERIES','%SQL_SUCCESS','%SQL_SUCCESS_WITH_INFO','%SQL_SU_DML_STATEMENTS','%SQL_SU_INDEX_DEFINITION','%SQL_SU_PRIVILEGE_DEFINITION','%SQL_SU_PROCEDURE_INVOCATION','%SQL_SU_TABLE_DEFINITION',
'%SQL_SVE_CASE','%SQL_SVE_CAST','%SQL_SVE_COALESCE','%SQL_SVE_NULLIF','%SQL_SYSTEM_FUNCTIONS','%SQL_TABLE_STAT','%SQL_TABLE_TERM','%SQL_TC_ALL',
'%SQL_TC_DDL_COMMIT','%SQL_TC_DDL_IGNORE','%SQL_TC_DML','%SQL_TC_NONE','%SQL_TIME','%SQL_TIMEDATE_ADD_INTERVALS','%SQL_TIMEDATE_DIFF_INTERVALS','%SQL_TIMEDATE_FUNCTIONS',
'%SQL_TIMESTAMP','%SQL_TIMESTAMP_LEN','%SQL_TIME_LEN','%SQL_TINYINT','%SQL_TRANSACTION_CAPABLE','%SQL_TRANSACTION_ISOLATION_OPTION','%SQL_TRANSACTION_READ_COMMITTED','%SQL_TRANSACTION_READ_UNCOMMITTED',
'%SQL_TRANSACTION_REPEATABLE_READ','%SQL_TRANSACTION_SERIALIZABLE','%SQL_TRANSLATE_DLL','%SQL_TRANSLATE_OPTION','%SQL_TRUE','%SQL_TXN_CAPABLE','%SQL_TXN_ISOLATION','%SQL_TXN_ISOLATION_OPTION',
'%SQL_TXN_READ_COMMITTED','%SQL_TXN_READ_UNCOMMITTED','%SQL_TXN_REPEATABLE_READ','%SQL_TXN_SERIALIZABLE','%SQL_TYPE_DATE','%SQL_TYPE_NULL','%SQL_TYPE_TIME','%SQL_TYPE_TIMESTAMP',
'%SQL_UB_DEFAULT','%SQL_UB_FIXED','%SQL_UB_OFF','%SQL_UB_ON','%SQL_UB_VARIABLE','%SQL_UNBIND','%SQL_UNICODE','%SQL_UNICODE_CHAR',
'%SQL_UNICODE_LONGVARCHAR','%SQL_UNICODE_VARCHAR','%SQL_UNION','%SQL_UNION_STATEMENT','%SQL_UNKNOWN_TYPE','%SQL_UNNAMED','%SQL_UNSEARCHABLE','%SQL_UNSIGNED_OFFSET',
'%SQL_UNSPECIFIED','%SQL_UPDATE','%SQL_UPDATE_BY_BOOKMARK','%SQL_USER_NAME','%SQL_USE_BOOKMARKS','%SQL_US_UNION','%SQL_US_UNION_ALL','%SQL_U_UNION',
'%SQL_U_UNION_ALL','%SQL_VARBINARY','%SQL_VARCHAR','%SQL_XOPEN_CLI_YEAR','%SQL_YEAR','%SQL_YEAR_TO_MONTH','%SS_BITMAP','%SS_BLACKFRAME',
'%SS_BLACKRECT','%SS_CENTER','%SS_CENTERIMAGE','%SS_ENDELLIPSIS','%SS_ETCHEDFRAME','%SS_ETCHEDHORZ','%SS_ETCHEDVERT','%SS_GRAYFRAME',
'%SS_GRAYRECT','%SS_LEFT','%SS_NOPREFIX','%SS_NOTIFY','%SS_NOWORDWRAP','%SS_PATHELLIPSIS','%SS_RIGHT','%SS_RIGHTJUST',
'%SS_SIMPLE','%SS_SUNKEN','%SS_WHITEFRAME','%SS_WHITERECT','%SS_WORDELLIPSIS','%STAT_FILL_NATURAL','%STAT_FILL_NATURAL_ERASTONE','%STAT_FILL_NATURAL_EVEN',
'%STAT_FILL_NATURAL_FIBONACCI','%STAT_FILL_NATURAL_ODD','%STAT_MINMAX_INDEX','%STAT_MINMAX_VALUE','%SW_FORCEMINIMIZE','%SW_HIDE','%SW_MAXIMIZE','%SW_MINIMIZE',
'%SW_NORMAL','%SW_RESTORE','%SW_SHOW','%SW_SHOWDEFAULT','%SW_SHOWMAXIMIZED','%SW_SHOWMINIMIZED','%SW_SHOWMINNOACTIVE','%SW_SHOWNA',
'%SW_SHOWNOACTIVATE','%SW_SHOWNORMAL','%TBGL_ERROR_FILE','%TBGL_ERROR_MSGBOX','%TBGL_ERROR_NONE','%TBGL_M15B','%TBGL_M15G','%TBGL_M15LAYER',
'%TBGL_M15PSTOP','%TBGL_M15R','%TBGL_M15TEXN','%TBGL_M15TEXX','%TBGL_M15TEXY','%TBGL_M15X','%TBGL_M15Y','%TBGL_M15Z',
'%TBGL_NORMAL_PRECISE','%TBGL_NORMAL_SMOOTH','%TBGL_TEX_LINEAR','%TBGL_TEX_MIPMAP','%TBGL_TEX_NEAREST','%TB_%VT_BSTR','%TB_%VT_CY','%TB_%VT_DATE',
'%TB_%VT_EMPTY','%TB_%VT_I2','%TB_%VT_I4','%TB_%VT_NULL','%TB_%VT_R4','%TB_%VT_R8','%TB_CLASS_E_NOAGGREGATION','%TB_CO_E_CLASSSTRING',
'%TB_DISPATCH_METHOD','%TB_DISPATCH_PROPERTYGET','%TB_DISPATCH_PROPERTYPUT','%TB_DISPATCH_PROPERTYPUTREF','%TB_E_INVALIDARG','%TB_E_NOINTERFACE','%TB_E_OUTOFMEMORY','%TB_MK_E_CONNECTMANUALLY',
'%TB_MK_E_EXCEEDEDDEADLINE','%TB_MK_E_INTERMEDIATEINTERFACENOTSUPPORTED','%TB_MK_E_NOOBJECT','%TB_MK_E_SYNTAX','%TB_REGDB_E_CLASSNOTREG','%TB_REGDB_E_WRITEREGDB','%TB_SIZEOF_TBVARIANT','%TB_S_FALSE',
'%TB_S_OK','%TCM_FIRST','%TCS_BOTTOM','%TCS_BUTTONS','%TCS_EX_FLATSEPARATORS','%TCS_EX_REGISTERDROP','%TCS_FIXEDWIDTH','%TCS_FLATBUTTONS',
'%TCS_FOCUSNEVER','%TCS_FOCUSONBUTTONDOWN','%TCS_FORCEICONLEFT','%TCS_FORCELABELLEFT','%TCS_HOTTRACK','%TCS_MULTILINE','%TCS_MULTISELECT','%TCS_OWNERDRAWFIXED',
'%TCS_RAGGEDRIGHT','%TCS_RIGHT','%TCS_RIGHTJUSTIFY','%TCS_SCROLLOPPOSITE','%TCS_SINGLELINE','%TCS_TABS','%TCS_TOOLTIPS','%TCS_VERTICAL',
'%TM_PLAINTEXT','%TM_RICHTEXT','%TOKENIZER_DELIMITER','%TOKENIZER_EOL','%TOKENIZER_ERROR','%TOKENIZER_FINISHED','%TOKENIZER_NUMBER','%TOKENIZER_QUOTE',
'%TOKENIZER_STRING','%TOKENIZER_UNDEFTOK','%TRUE','%TV_FIRST','%VK_0','%VK_1','%VK_2','%VK_3',
'%VK_4','%VK_5','%VK_6','%VK_7','%VK_8','%VK_9','%VK_A','%VK_ACCEPT',
'%VK_ADD','%VK_APPS','%VK_B','%VK_BACK','%VK_C','%VK_CANCEL','%VK_CAPITAL','%VK_CLEAR',
'%VK_CONTROL','%VK_CONVERT','%VK_D','%VK_DECIMAL','%VK_DELETE','%VK_DIVIDE','%VK_DOWN','%VK_E',
'%VK_END','%VK_ESCAPE','%VK_EXECUTE','%VK_F','%VK_F1','%VK_F10','%VK_F11','%VK_F12',
'%VK_F13','%VK_F14','%VK_F15','%VK_F16','%VK_F17','%VK_F18','%VK_F19','%VK_F2',
'%VK_F20','%VK_F21','%VK_F22','%VK_F23','%VK_F24','%VK_F3','%VK_F4','%VK_F5',
'%VK_F6','%VK_F7','%VK_F8','%VK_F9','%VK_FINAL','%VK_G','%VK_H','%VK_HANGEUL',
'%VK_HANGUL','%VK_HANJA','%VK_HELP','%VK_HOME','%VK_I','%VK_INSERT','%VK_J','%VK_JUNJA',
'%VK_K','%VK_KANA','%VK_KANJI','%VK_L','%VK_LBUTTON','%VK_LEFT','%VK_LINEFEED','%VK_LWIN',
'%VK_M','%VK_MBUTTON','%VK_MENU','%VK_MODECHANGE','%VK_MULTIPLY','%VK_N','%VK_NEXT','%VK_NONCONVERT',
'%VK_NUMLOCK','%VK_NUMPAD0','%VK_NUMPAD1','%VK_NUMPAD2','%VK_NUMPAD3','%VK_NUMPAD4','%VK_NUMPAD5','%VK_NUMPAD6',
'%VK_NUMPAD7','%VK_NUMPAD8','%VK_NUMPAD9','%VK_O','%VK_P','%VK_PAUSE','%VK_PGDN','%VK_PGUP',
'%VK_PRINT','%VK_PRIOR','%VK_Q','%VK_R','%VK_RBUTTON','%VK_RETURN','%VK_RIGHT','%VK_RWIN',
'%VK_S','%VK_SCROLL','%VK_SELECT','%VK_SEPARATOR','%VK_SHIFT','%VK_SLEEP','%VK_SNAPSHOT','%VK_SPACE',
'%VK_SUBTRACT','%VK_T','%VK_TAB','%VK_U','%VK_UP','%VK_V','%VK_W','%VK_X',
'%VK_XBUTTON1','%VK_XBUTTON2','%VK_Y','%VK_Z','%VT_ARRAY','%VT_BLOB','%VT_BLOB_OBJECT','%VT_BOOL',
'%VT_BSTR','%VT_BYREF','%VT_CARRAY','%VT_CF','%VT_CLSID','%VT_CY','%VT_DATE','%VT_DISPATCH',
'%VT_EMPTY','%VT_ERROR','%VT_FILETIME','%VT_HRESULT','%VT_I1','%VT_I2','%VT_I4','%VT_I8',
'%VT_INT','%VT_LPSTR','%VT_LPWSTR','%VT_NULL','%VT_PTR','%VT_R4','%VT_R8','%VT_RECORD',
'%VT_RESERVED','%VT_SAFEARRAY','%VT_STORAGE','%VT_STORED_OBJECT','%VT_STREAM','%VT_STREAMED_OBJECT','%VT_UI1','%VT_UI2',
'%VT_UI4','%VT_UI8','%VT_UINT','%VT_UNKNOWN','%VT_USERDEFINED','%VT_VARIANT','%VT_VECTOR','%VT_VOID',
'%WHITE','%WIN_FINDTITLECONTAIN','%WIN_FINDTITLEEND','%WIN_FINDTITLEEQUAL','%WIN_FINDTITLESTART','%WM_ACTIVATE','%WM_ACTIVATEAPP','%WM_CAPTURECHANGED',
'%WM_CHAR','%WM_CLOSE','%WM_COMMAND','%WM_DESTROY','%WM_GETTEXTLENGTH','%WM_HOTKEY','%WM_INITDIALOG','%WM_KEYDOWN',
'%WM_KEYUP','%WM_KILLFOCUS','%WM_MOUSEMOVE','%WM_MOVE','%WM_MOVING','%WM_NOTIFY','%WM_PAINT','%WM_QUIT',
'%WM_SETFOCUS','%WM_SETFONT','%WM_SETTEXT','%WM_SIZE','%WM_SIZING','%WM_SYSCOMMAND','%WM_TIMER','%WM_USER',
'%WS_BORDER','%WS_CAPTION','%WS_CHILD','%WS_CLIPCHILDREN','%WS_CLIPSIBLINGS','%WS_DISABLED','%WS_DLGFRAME','%WS_EX_ACCEPTFILES',
'%WS_EX_APPWINDOW','%WS_EX_CLIENTEDGE','%WS_EX_CONTEXTHELP','%WS_EX_CONTROLPARENT','%WS_EX_LEFT','%WS_EX_LEFTSCROLLBAR','%WS_EX_LTRREADING','%WS_EX_MDICHILD',
'%WS_EX_NOPARENTNOTIFY','%WS_EX_OVERLAPPEDWINDOW','%WS_EX_PALETTEWINDOW','%WS_EX_RIGHT','%WS_EX_RIGHTSCROLLBAR','%WS_EX_RTLREADING','%WS_EX_STATICEDGE','%WS_EX_TOOLWINDOW',
'%WS_EX_TOPMOST','%WS_EX_TRANSPARENT','%WS_EX_WINDOWEDGE','%WS_GROUP','%WS_HSCROLL','%WS_ICONIC','%WS_MAXIMIZE','%WS_MAXIMIZEBOX',
'%WS_MINIMIZE','%WS_MINIMIZEBOX','%WS_OVERLAPPEDWINDOW','%WS_POPUP','%WS_POPUPWINDOW','%WS_SYSMENU','%WS_TABSTOP','%WS_THICKFRAME',
'%WS_VISIBLE','%WS_VSCROLL','%YELLOW','CRLF','FALSE','NULL','TAB','TRUE'
)
),
'SYMBOLS' => array(
'(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%', '^', '&', ':'
),
'CASE_SENSITIVE' => array(
GESHI_COMMENTS => false,
1 => false,
2 => false
),
'STYLES' => array(
'KEYWORDS' => array(
1 => 'color: #0000FF; font-weight: bold;',
2 => 'color: #993333; font-style: italic; font-weight: bold;',
3 => 'color: #000066;',
4 => 'color: #993333;'
),
'COMMENTS' => array(
1 => 'color: #008000;'
),
'BRACKETS' => array(
0 => 'color: #333333;'
),
'STRINGS' => array(
0 => 'color: #800080;'
),
'NUMBERS' => array(
0 => 'color: #CC0000;'
),
'METHODS' => array(
1 => 'color: #66cc66;'
),
'SYMBOLS' => array(
0 => 'color: #333333;'
),
'ESCAPE_CHAR' => array(
0 => 'color: #000099;'
),
'SCRIPT' => array(
),
'REGEXPS' => array(
)
),
'OOLANG' => false,
'OBJECT_SPLITTERS' => array(
1 => '_'
),
'REGEXPS' => array(
),
'STRICT_MODE_APPLIES' => GESHI_NEVER,
'SCRIPT_DELIMITERS' => array(
),
'HIGHLIGHT_STRICT_BLOCK' => array(
)
);
?>
;
if (!empty($attribs['VERSION'])) {
$this->xmldata['feedinfo']['version'] = trim($attribs['VERSION']);
}
break;
case 'IMAGE':
case $this->namespaces['rss2'] . ':IMAGE':
case $this->namespaces['rss1'] . ':IMAGE':
if ($this->insideChannel) $this->insideImage = true;
break;
}
if (isset($this->xmldata['feedinfo']['type']) && $this->xmldata['feedinfo']['type'] == 'Atom') {
switch ($this->tagName) {
case 'AUTHOR':
case $this->namespaces['atom'] . ':AUTHOR':
$this->insideAuthor = true;
break;
}
}
$this->dataHandler($this->xml, '');
}
function dataHandler($parser, $data) {
if ($this->insideItem) {
switch ($this->tagName) {
case 'TITLE':
case $this->namespaces['rss1'] . ':TITLE':
case $this->namespaces['rss2'] . ':TITLE':
case $this->namespaces['atom'] . ':TITLE':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['title'], $data);
break;
case $this->namespaces['dc'] . ':TITLE':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['dc:title'], $data);
break;
case 'CONTENT':
case $this->namespaces['atom'] . ':CONTENT':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['content'], $data);
break;
case $this->namespaces['content'] . ':ENCODED':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['encoded'], $data);
break;
case 'SUMMARY':
case $this->namespaces['atom'] . ':SUMMARY':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['summary'], $data);
break;
case 'LONGDESC':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['longdesc'], $data);
break;
case 'DESCRIPTION':
case $this->namespaces['rss1'] . ':DESCRIPTION':
case $this->namespaces['rss2'] . ':DESCRIPTION':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['description'], $data);
break;
case $this->namespaces['dc'] . ':DESCRIPTION':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['dc:description'], $data);
break;
case 'LINK':
case $this->namespaces['rss1'] . ':LINK':
case $this->namespaces['rss2'] . ':LINK':
case $this->namespaces['atom'] . ':LINK':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['link'][$this->itemLinkNumber], $data);
break;
case 'ENCLOSURE':
case $this->namespaces['rss1'] . ':ENCLOSURE':
case $this->namespaces['rss2'] . ':ENCLOSURE':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['enclosure'][$this->enclosureNumber], $data);
break;
case 'GUID':
case $this->namespaces['rss1'] . ':GUID':
case $this->namespaces['rss2'] . ':GUID':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['guid'], $data);
break;
case 'ID':
case $this->namespaces['atom'] . ':ID':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['id'], $data);
break;
case 'PUBDATE':
case $this->namespaces['rss1'] . ':PUBDATE':
case $this->namespaces['rss2'] . ':PUBDATE':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['pubdate'], $data);
break;
case $this->namespaces['dc'] . ':DATE':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['dc:date'], $data);
break;
case 'ISSUED':
case $this->namespaces['atom'] . ':ISSUED':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['issued'], $data);
break;
case 'PUBLISHED':
case $this->namespaces['atom'] . ':PUBLISHED':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['published'], $data);
break;
case 'MODIFIED':
case $this->namespaces['atom'] . ':MODIFIED':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['modified'], $data);
break;
case 'UPDATED':
case $this->namespaces['atom'] . ':UPDATED':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['updated'], $data);
break;
case 'CATEGORY':
case $this->namespaces['rss1'] . ':CATEGORY':
case $this->namespaces['rss2'] . ':CATEGORY':
case $this->namespaces['atom'] . ':CATEGORY':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['category'][$this->categoryNumber], $data);
break;
case $this->namespaces['dc'] . ':SUBJECT':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['subject'][$this->categoryNumber], $data);
break;
case $this->namespaces['dc'] . ':CREATOR':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['creator'][$this->authorNumber], $data);
break;
case 'AUTHOR':
case $this->namespaces['rss1'] . ':AUTHOR':
case $this->namespaces['rss2'] . ':AUTHOR':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['author'][$this->authorNumber]['rss'], $data);
break;
}
if ($this->insideAuthor) {
switch ($this->tagName) {
case 'NAME':
case $this->namespaces['atom'] . ':NAME':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['author'][$this->authorNumber]['name'], $data);
break;
case 'URL':
case $this->namespaces['atom'] . ':URL':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['author'][$this->authorNumber]['url'], $data);
break;
case 'URI':
case $this->namespaces['atom'] . ':URI':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['author'][$this->authorNumber]['uri'], $data);
break;
case 'HOMEPAGE':
case $this->namespaces['atom'] . ':HOMEPAGE':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['author'][$this->authorNumber]['homepage'], $data);
break;
case 'EMAIL':
case $this->namespaces['atom'] . ':EMAIL':
$this->do_add_content($this->xmldata['items'][$this->itemNumber]['author'][$this->authorNumber]['email'], $data);
break;
}
}
}
else if (($this->insideChannel && !$this->insideImage) || (isset($this->xmldata['feedinfo']['type']) && $this->xmldata['feedinfo']['type'] == 'Atom')) {
switch ($this->tagName) {
case 'TITLE':
case $this->namespaces['rss1'] . ':TITLE':
case $this->namespaces['rss2'] . ':TITLE':
case $this->namespaces['atom'] . ':TITLE':
$this->do_add_content($this->xmldata['info']['title'], $data);
break;
case 'LINK':
case $this->namespaces['rss1'] . ':LINK':
case $this->namespaces['rss2'] . ':LINK':
case $this->namespaces['atom'] . ':LINK':
$this->do_add_content($this->xmldata['info']['link'][$this->linkNumber], $data);
break;
case 'DESCRIPTION':
case $this->namespaces['rss1'] . ':DESCRIPTION':
case $this->namespaces['rss2'] . ':DESCRIPTION':
$this->do_add_content($this->xmldata['info']['description'], $data);
break;
case $this->namespaces['dc'] . ':DESCRIPTION':
$this->do_add_content($this->xmldata['info']['dc:description'], $data);
break;
case 'TAGLINE':
case $this->namespaces['atom'] . ':TAGLINE':
$this->do_add_content($this->xmldata['info']['tagline'], $data);
break;
case 'SUBTITLE':
case $this->namespaces['atom'] . ':SUBTITLE':
$this->do_add_content($this->xmldata['info']['subtitle'], $data);
break;
case 'COPYRIGHT':
case $this->namespaces['rss1'] . ':COPYRIGHT':
case $this->namespaces['rss2'] . ':COPYRIGHT':
case $this->namespaces['atom'] . ':COPYRIGHT':
$this->do_add_content($this->xmldata['info']['copyright'], $data);
break;
case 'LANGUAGE':
case $this->namespaces['rss1'] . ':LANGUAGE':
case $this->namespaces['rss2'] . ':LANGUAGE':
$this->do_add_content($this->xmldata['info']['language'], $data);
break;
case 'LOGO':
case $this->namespaces['atom'] . ':LOGO':
$this->do_add_content($this->xmldata['info']['logo'], $data);
break;
}
}
else if ($this->insideChannel && $this->insideImage) {
switch ($this->tagName) {
case 'TITLE':
case $this->namespaces['rss1'] . ':TITLE':
case $this->namespaces['rss2'] . ':TITLE':
$this->do_add_content($this->xmldata['info']['image']['title'], $data);
break;
case 'URL':
case $this->namespaces['rss1'] . ':URL':
case $this->namespaces['rss2'] . ':URL':
$this->do_add_content($this->xmldata['info']['image']['url'], $data);
break;
case 'LINK':
case $this->namespaces['rss1'] . ':LINK':
case $this->namespaces['rss2'] . ':LINK':
$this->do_add_content($this->xmldata['info']['image']['link'], $data);
break;
case 'WIDTH':
case $this->namespaces['rss1'] . ':WIDTH':
case $this->namespaces['rss2'] . ':WIDTH':
$this->do_add_content($this->xmldata['info']['image']['width'], $data);
break;
case 'HEIGHT':
case $this->namespaces['rss1'] . ':HEIGHT':
case $this->namespaces['rss2'] . ':HEIGHT':
$this->do_add_content($this->xmldata['info']['image']['height'], $data);
break;
}
}
$this->is_first = false;
}
function endHandler($parser, $name) {
$this->tagName = '';
switch ($name) {
case 'ITEM':
case $this->namespaces['rss1'] . ':ITEM':
case $this->namespaces['rss2'] . ':ITEM':
case 'ENTRY':
case $this->namespaces['atom'] . ':ENTRY':
$this->insideItem = false;
$this->itemNumber++;
$this->authorNumber = 0;
$this->categoryNumber = 0;
$this->enclosureNumber = 0;
$this->itemLinkNumber = 0;
break;
case 'CHANNEL':
case $this->namespaces['rss1'] . ':CHANNEL':
case $this->namespaces['rss2'] . ':CHANNEL':
$this->insideChannel = false;
break;
case 'IMAGE':
case $this->namespaces['rss1'] . ':IMAGE':
case $this->namespaces['rss2'] . ':IMAGE':
if ($this->insideChannel) $this->insideImage = false;
break;
case 'AUTHOR':
case $this->namespaces['rss1'] . ':AUTHOR':
case $this->namespaces['rss2'] . ':AUTHOR':
case $this->namespaces['atom'] . ':AUTHOR':
$this->authorNumber++;
if ($this->xmldata['feedinfo']['type'] == 'Atom') $this->insideAuthor = false;
break;
case 'CATEGORY':
case $this->namespaces['rss1'] . ':CATEGORY':
case $this->namespaces['rss2'] . ':CATEGORY':
case $this->namespaces['atom'] . ':CATEGORY':
case $this->namespaces['dc'] . ':SUBJECT':
$this->categoryNumber++;
break;
case 'ENCLOSURE':
case $this->namespaces['rss1'] . ':ENCLOSURE':
case $this->namespaces['rss2'] . ':ENCLOSURE':
$this->enclosureNumber++;
break;
case 'LINK':
case $this->namespaces['rss1'] . ':LINK':
case $this->namespaces['rss2'] . ':LINK':
case $this->namespaces['atom'] . ':LINK':
if ($this->insideItem)
$this->itemLinkNumber++;
else
$this->linkNumber++;
break;
}
}
function startNameSpace($parser, $prefix, $uri = null) {
$prefix = strtoupper($prefix);
$uri = strtoupper($uri);
if ($prefix == 'ATOM' || $uri == 'HTTP://WWW.W3.ORG/2005/ATOM' || $uri == 'HTTP://PURL.ORG/ATOM/NS#') {
$this->namespaces['atom'] = $uri;
}
else if ($prefix == 'RSS2' || $uri == 'HTTP://BACKEND.USERLAND.COM/RSS2') {
$this->namespaces['rss2'] = $uri;
}
else if ($prefix == 'RDF' || $uri == 'HTTP://WWW.W3.ORG/1999/02/22-RDF-SYNTAX-NS#') {
$this->namespaces['rdf'] = $uri;
}
else if ($prefix == 'RSS' || $uri == 'HTTP://PURL.ORG/RSS/1.0/') {
$this->namespaces['rss1'] = $uri;
}
else if ($prefix == 'DC' || $uri == 'HTTP://PURL.ORG/DC/ELEMENTS/1.1/') {
$this->namespaces['dc'] = $uri;
}
else if ($prefix == 'XHTML' || $uri == 'HTTP://WWW.W3.ORG/1999/XHTML') {
$this->namespaces['xhtml'] = $uri;
$this->xhtml_prefix = $prefix;
}
else if ($prefix == 'CONTENT' || $uri == 'HTTP://PURL.ORG/RSS/1.0/MODULES/CONTENT/') {
$this->namespaces['content'] = $uri;
}
}
function endNameSpace($parser, $prefix) {
if ($key = array_search(strtoupper($prefix), $this->namespaces)) {
if ($key == 'atom') {
$this->namespaces['atom'] = 'ATOM';
}
else if ($key == 'rss2') {
$this->namespaces['rss2'] = 'RSS';
}
else if ($key == 'rdf') {
$this->namespaces['rdf'] = 'RDF';
}
else if ($key == 'rss1') {
$this->namespaces['rss1'] = 'RSS';
}
else if ($key == 'dc') {
$this->namespaces['dc'] = 'DC';
}
else if ($key == 'xhtml') {
$this->namespaces['xhtml'] = 'XHTML';
$this->xhtml_prefix = 'XHTML';
}
else if ($key == 'content') {
$this->namespaces['content'] = 'CONTENT';
}
}
}
}
class SimplePie_Item
{
function SimplePie_Item($id, $title, $description, $category, $author, $date, $links, $enclosure) {
$this->id = $id;
$this->title = $title;
$this->description = $description;
$this->category = $category;
$this->author = $author;
$this->date = $date;
$this->links = $links;
$this->enclosure = $enclosure;
}
/****************************************************
PARSE OUT ITEM-RELATED DATA
****************************************************/
// Get the id of the item
function get_id() {
return (empty($this->id)) ? false : $this->id;
}
// Get the title of the item
function get_title() {
return (empty($this->title)) ? false : $this->title;
}
// Get the description of the item
function get_description() {
return (empty($this->description)) ? false : $this->description;
}
// Get the category of the item
function get_category() {
return (empty($this->category)) ? false : $this->category;
}
// Get the author of the item
function get_author($key) {
return (empty($this->author[$key])) ? false : $this->author[$key];
}
// Get the author of the item
function get_authors() {
return (empty($this->author)) ? false : $this->author;
}
// Get the date of the item
// Also, allow users to set the format of how dates are displayed on a webpage.
function get_date($date_format = 'j F Y, g:i a') {
return (empty($this->date)) ? false : date($date_format, $this->date);
}
// Get the Permalink of the item
function get_permalink() {
// If there is a link, take it. Fine.
if (!empty($this->links[0])) {
return $this->links[0];
}
// If there isn't, check for an enclosure, if that exists, give that.
else if ($this->get_enclosure(0)) {
return $this->get_enclosure(0);
}
else return false;
}
// Get all links
function get_links() {
return (empty($this->links)) ? false : $this->links;
}
// Get the enclosure of the item
function get_enclosure($key) {
return (empty($this->enclosure[$key])) ? false : $this->enclosure[$key];
}
// Get the enclosure of the item
function get_enclosures() {
return (empty($this->enclosure)) ? false : $this->enclosure;
}
/****************************************************
"ADD TO" LINKS
Allows people to easily add news postings to social bookmarking sites.
****************************************************/
function add_to_blinklist() {
return "http://www.blinklist.com/index.php?Action=Blink/addblink.php&Description=&Url=" . rawurlencode($this->get_permalink()) . "&Title=" . rawurlencode($this->get_title());
}
function add_to_delicious() {
return "http://del.icio.us/post/?v=3&url=" . rawurlencode($this->get_permalink()) . "&title=" . rawurlencode($this->get_title());
}
function add_to_digg() {
return "http://digg.com/submit?phase=2&URL=" . rawurlencode($this->get_permalink());
}
function add_to_furl() {
return "http://www.furl.net/storeIt.jsp?u=" . rawurlencode($this->get_permalink()) . "&t=" . rawurlencode($this->get_title());
}
function add_to_magnolia() {
return "http://ma.gnolia.com/bookmarklet/add?url=" . rawurlencode($this->get_permalink()) . "&title=" . rawurlencode($this->get_title());
}
function add_to_myweb20() {
return "http://myweb2.search.yahoo.com/myresults/bookmarklet?u=" . rawurlencode($this->get_permalink()) . "&t=" . rawurlencode($this->get_title());
}
function add_to_newsvine() {
return "http://www.newsvine.com/_wine/save?u=" . rawurlencode($this->get_permalink()) . "&h=" . rawurlencode($this->get_title());
}
function add_to_reddit() {
return 'http://reddit.com/submit?url=' . rawurlencode($this->get_permalink()) . "&title=" . rawurlencode($this->get_title());
}
function add_to_spurl() {
return "http://www.spurl.net/spurl.php?v=3&url=" . rawurlencode($this->get_permalink()) . "&title=" . rawurlencode($this->get_title());
}
/****************************************************
SEARCHES
Metadata searches
****************************************************/
function search_technorati() {
return 'http://www.technorati.com/search/' . rawurlencode($this->get_permalink());
}
}
class SimplePie_Author
{
var $name;
var $link;
var $email;
// Constructor, used to input the data
function SimplePie_Author($name, $link, $email) {
$this->name = $name;
$this->link = $link;
$this->email = $email;
}
function get_name() {
return (empty($this->name)) ? false : $this->name;
}
function get_link() {
return (empty($this->link)) ? false : $this->link;
}
function get_email() {
return (empty($this->email)) ? false : $this->email;
}
}
class SimplePie_Enclosure
{
var $link;
var $type;
var $length;
// Constructor, used to input the data
function SimplePie_Enclosure($link, $type, $length) {
$this->link = $link;
$this->type = $type;
$this->length = $length;
}
function get_link() {
return (empty($this->link)) ? false : $this->link;
}
function get_extension() {
if (!empty($this->link)) {
return pathinfo($this->link, PATHINFO_EXTENSION);
} else {
return false;
}
}
function get_type() {
return (empty($this->type)) ? false : $this->type;
}
function get_length() {
return (empty($this->length)) ? false : $this->length;
}
function get_size() {
return (empty($this->length)) ? false : round(($this->length/1048576), 2);
}
function embed($options) {
// Set up defaults
$audio='';
$video='';
$alt='';
$altclass='';
$loop='false';
$width='auto';
$height='auto';
$bgcolor='#ffffff';
$embed='';
// Process options and reassign values as necessary
$options = explode(',', $options);
foreach($options as $option) {
$opt = explode(':', trim($option));
if ($opt[0] == 'audio') $audio=$opt[1];
else if ($opt[0] == 'video') $video=$opt[1];
else if ($opt[0] == 'alt') $alt=$opt[1];
else if ($opt[0] == 'altclass') $altclass=$opt[1];
else if ($opt[0] == 'loop') $loop=$opt[1];
else if ($opt[0] == 'width') $width=$opt[1];
else if ($opt[0] == 'height') $height=$opt[1];
else if ($opt[0] == 'bgcolor') $bgcolor=$opt[1];
}
// Process values for 'auto'
if ($width == 'auto') {
if (stristr($this->type, 'audio/')) $width='100%';
else if (stristr($this->type, 'video/')) $width='320';
else $width='100%';
}
if ($height == 'auto') {
if (stristr($this->type, 'audio/')) $height=0;
else if (stristr($this->type, 'video/')) $height=240;
else $height=256;
}
// Set proper placeholder value
if (stristr($this->type, 'audio/')) $placeholder=$audio;
else if (stristr($this->type, 'video/')) $placeholder=$video;
// Make sure the JS library is included
// (I know it'll be included multiple times, but I can't think of a better way to do this automatically)
$embed.='';
// Odeo Feed MP3's
if (substr(strtolower($this->link), 0, 15) == 'http://odeo.com') {
$embed.='';
}
// QuickTime 7 file types. Need to test with QuickTime 6.
else if ($this->type == 'audio/3gpp' || $this->type == 'audio/3gpp2' || $this->type == 'audio/aac' || $this->type == 'audio/x-aac' || $this->type == 'audio/aiff' || $this->type == 'audio/x-aiff' || $this->type == 'audio/mid' || $this->type == 'audio/midi' || $this->type == 'audio/x-midi' || $this->type == 'audio/mpeg' || $this->type == 'audio/x-mpeg' || $this->type == 'audio/mp3' || $this->type == 'x-audio/mp3' || $this->type == 'audio/mp4' || $this->type == 'audio/m4a' || $this->type == 'audio/x-m4a' || $this->type == 'audio/wav' || $this->type == 'audio/x-wav' || $this->type == 'video/3gpp' || $this->type == 'video/3gpp2' || $this->type == 'video/m4v' || $this->type == 'video/x-m4v' || $this->type == 'video/mp4' || $this->type == 'video/mpeg' || $this->type == 'video/x-mpeg' || $this->type == 'video/quicktime' || $this->type == 'video/sd-video') {
$height+=16;
$embed.='';
}
// Flash
else if ($this->type == 'application/x-shockwave-flash' || $this->type == 'application/futuresplash') {
$embed.='';
}
// Windows Media
else if ($this->type == 'application/asx' || $this->type == 'application/x-mplayer2' || $this->type == 'audio/x-ms-wma' || $this->type == 'audio/x-ms-wax' || $this->type == 'video/x-ms-asf-plugin' || $this->type == 'video/x-ms-asf' || $this->type == 'video/x-ms-wm' || $this->type == 'video/x-ms-wmv' || $this->type == 'video/x-ms-wvx') {
$height+=45;
$embed.='';
}
// Everything else
else $embed.='' . $alt . '';
return $embed;
}
}
?>
'name'])) {
// get binding name
if (strpos($attrs['name'], ':')) {
$this->currentBinding = $this->getLocalPart($attrs['name']);
} else {
$this->currentBinding = $attrs['name'];
}
$this->status = 'binding';
$this->bindings[$this->currentBinding]['portType'] = $this->getLocalPart($attrs['type']);
$this->debug("current binding: $this->currentBinding of portType: " . $attrs['type']);
}
break;
case 'service':
$this->serviceName = $attrs['name'];
$this->status = 'service';
$this->debug('current service: ' . $this->serviceName);
break;
case 'definitions':
foreach ($attrs as $name => $value) {
$this->wsdl_info[$name] = $value;
}
break;
}
}
}
/**
* end-element handler
*
* @param string $parser XML parser object
* @param string $name element name
* @access private
*/
function end_element($parser, $name){
// unset schema status
if (/*ereg('types$', $name) ||*/ ereg('schema$', $name)) {
$this->status = "";
$this->schemas[$this->currentSchema->schemaTargetNamespace][] = $this->currentSchema;
$this->debug('Parsing WSDL schema done');
}
if ($this->status == 'schema') {
$this->currentSchema->schemaEndElement($parser, $name);
} else {
// bring depth down a notch
$this->depth--;
}
// end documentation
if ($this->documentation) {
//TODO: track the node to which documentation should be assigned; it can be a part, message, etc.
//$this->portTypes[$this->currentPortType][$this->currentPortOperation]['documentation'] = $this->documentation;
$this->documentation = false;
}
}
/**
* element content handler
*
* @param string $parser XML parser object
* @param string $data element content
* @access private
*/
function character_data($parser, $data)
{
$pos = isset($this->depth_array[$this->depth]) ? $this->depth_array[$this->depth] : 0;
if (isset($this->message[$pos]['cdata'])) {
$this->message[$pos]['cdata'] .= $data;
}
if ($this->documentation) {
$this->documentation .= $data;
}
}
function getBindingData($binding)
{
if (is_array($this->bindings[$binding])) {
return $this->bindings[$binding];
}
}
/**
* returns an assoc array of operation names => operation data
*
* @param string $bindingType eg: soap, smtp, dime (only soap is currently supported)
* @return array
* @access public
*/
function getOperations($bindingType = 'soap')
{
$ops = array();
if ($bindingType == 'soap') {
$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
}
// loop thru ports
foreach($this->ports as $port => $portData) {
// binding type of port matches parameter
if ($portData['bindingType'] == $bindingType) {
//$this->debug("getOperations for port $port");
//$this->debug("port data: " . $this->varDump($portData));
//$this->debug("bindings: " . $this->varDump($this->bindings[ $portData['binding'] ]));
// merge bindings
if (isset($this->bindings[ $portData['binding'] ]['operations'])) {
$ops = array_merge ($ops, $this->bindings[ $portData['binding'] ]['operations']);
}
}
}
return $ops;
}
/**
* returns an associative array of data necessary for calling an operation
*
* @param string $operation , name of operation
* @param string $bindingType , type of binding eg: soap
* @return array
* @access public
*/
function getOperationData($operation, $bindingType = 'soap')
{
if ($bindingType == 'soap') {
$bindingType = 'http://schemas.xmlsoap.org/wsdl/soap/';
}
// loop thru ports
foreach($this->ports as $port => $portData) {
// binding type of port matches parameter
if ($portData['bindingType'] == $bindingType) {
// get binding
//foreach($this->bindings[ $portData['binding'] ]['operations'] as $bOperation => $opData) {
foreach(array_keys($this->bindings[ $portData['binding'] ]['operations']) as $bOperation) {
if ($operation == $bOperation) {
$opData = $this->bindings[ $portData['binding'] ]['operations'][$operation];
return $opData;
}
}
}
}
}
/**
* returns an array of information about a given type
* returns false if no type exists by the given name
*
* typeDef = array(
* 'elements' => array(), // refs to elements array
* 'restrictionBase' => '',
* 'phpType' => '',
* 'order' => '(sequence|all)',
* 'attrs' => array() // refs to attributes array
* )
*
* @param $type string
* @param $ns string
* @return mixed
* @access public
* @see xmlschema
*/
function getTypeDef($type, $ns) {
if ((! $ns) && isset($this->namespaces['tns'])) {
$ns = $this->namespaces['tns'];
}
if (isset($this->schemas[$ns])) {
for ($i = 0; $i < count($this->schemas[$ns]); $i++) {
$xs = &$this->schemas[$ns][$i];
$t = $xs->getTypeDef($type);
$this->appendDebug($xs->getDebug());
$xs->clearDebug();
if ($t) {
return $t;
}
}
}
return false;
}
/**
* prints html description of services
*
* @access private
*/
function webDescription(){
$b = '
NuSOAP: '.$this->serviceName.'
'.$this->serviceName.'
View the WSDL for the service.
Click on an operation name to view it's details.
';
foreach($this->getOperations() as $op => $data){
$b .= "
";
foreach($data as $donnie => $marie){ // loop through opdata
if($donnie == 'input' || $donnie == 'output'){ // show input/output data
$b .= "".ucfirst($donnie).': ';
foreach($marie as $captain => $tenille){ // loop through data
if($captain == 'parts'){ // loop thru parts
$b .= " $captain: ";
//if(is_array($tenille)){
foreach($tenille as $joanie => $chachi){
$b .= " $joanie: $chachi ";
}
//}
} else {
$b .= " $captain: $tenille ";
}
}
} else {
$b .= "".ucfirst($donnie).": $marie ";
}
}
$b .= '
';
}
$b .= '
';
return $b;
}
/**
* serialize the parsed wsdl
*
* @param $debug mixed whether to put debug=1 in endpoint URL
* @return string , serialization of WSDL
* @access public
*/
function serialize($debug = 0)
{
$xml = 'namespaces as $k => $v) {
$xml .= " xmlns:$k=\"$v\"";
}
// 10.9.02 - add poulter fix for wsdl and tns declarations
if (isset($this->namespaces['wsdl'])) {
$xml .= " xmlns=\"" . $this->namespaces['wsdl'] . "\"";
}
if (isset($this->namespaces['tns'])) {
$xml .= " targetNamespace=\"" . $this->namespaces['tns'] . "\"";
}
$xml .= '>';
// imports
if (sizeof($this->import) > 0) {
foreach($this->import as $ns => $list) {
foreach ($list as $ii) {
if ($ii['location'] != '') {
$xml .= '';
} else {
$xml .= '';
}
}
}
}
// types
if (count($this->schemas)>=1) {
$xml .= '';
foreach ($this->schemas as $ns => $list) {
foreach ($list as $xs) {
$xml .= $xs->serializeSchema();
}
}
$xml .= '';
}
// messages
if (count($this->messages) >= 1) {
foreach($this->messages as $msgName => $msgParts) {
$xml .= '';
if(is_array($msgParts)){
foreach($msgParts as $partName => $partType) {
// print 'serializing '.$partType.', sv: '.$this->XMLSchemaVersion.' ';
if (strpos($partType, ':')) {
$typePrefix = $this->getPrefixFromNamespace($this->getPrefix($partType));
} elseif (isset($this->typemap[$this->namespaces['xsd']][$partType])) {
// print 'checking typemap: '.$this->XMLSchemaVersion.' ';
$typePrefix = 'xsd';
} else {
foreach($this->typemap as $ns => $types) {
if (isset($types[$partType])) {
$typePrefix = $this->getPrefixFromNamespace($ns);
}
}
if (!isset($typePrefix)) {
die("$partType has no namespace!");
}
}
$xml .= '';
}
}
$xml .= '';
}
}
// bindings & porttypes
if (count($this->bindings) >= 1) {
$binding_xml = '';
$portType_xml = '';
foreach($this->bindings as $bindingName => $attrs) {
$binding_xml .= '';
$binding_xml .= '';
$portType_xml .= '';
foreach($attrs['operations'] as $opName => $opParts) {
$binding_xml .= '';
$binding_xml .= '';
if (isset($opParts['input']['encodingStyle']) && $opParts['input']['encodingStyle'] != '') {
$enc_style = ' encodingStyle="' . $opParts['input']['encodingStyle'] . '"';
} else {
$enc_style = '';
}
$binding_xml .= '';
if (isset($opParts['output']['encodingStyle']) && $opParts['output']['encodingStyle'] != '') {
$enc_style = ' encodingStyle="' . $opParts['output']['encodingStyle'] . '"';
} else {
$enc_style = '';
}
$binding_xml .= '';
$binding_xml .= '';
$portType_xml .= '';
}
$portType_xml .= '';
$portType_xml .= '';
$portType_xml .= '';
}
$portType_xml .= '';
$binding_xml .= '';
}
$xml .= $portType_xml . $binding_xml;
}
// services
$xml .= '';
if (count($this->ports) >= 1) {
foreach($this->ports as $pName => $attrs) {
$xml .= '';
$xml .= '';
$xml .= '';
}
}
$xml .= '';
return $xml . '';
}
/**
* serialize a PHP value according to a WSDL message definition
*
* TODO
* - multi-ref serialization
* - validate PHP values against type definitions, return errors if invalid
*
* @param string $ type name
* @param mixed $ param value
* @return mixed new param or false if initial value didn't validate
*/
function serializeRPCParameters($operation, $direction, $parameters)
{
$this->debug('in serializeRPCParameters with operation '.$operation.', direction '.$direction.' and '.count($parameters).' param(s), and xml schema version ' . $this->XMLSchemaVersion);
if ($direction != 'input' && $direction != 'output') {
$this->debug('The value of the \$direction argument needs to be either "input" or "output"');
$this->setError('The value of the \$direction argument needs to be either "input" or "output"');
return false;
}
if (!$opData = $this->getOperationData($operation)) {
$this->debug('Unable to retrieve WSDL data for operation: ' . $operation);
$this->setError('Unable to retrieve WSDL data for operation: ' . $operation);
return false;
}
$this->debug('opData:');
$this->appendDebug($this->varDump($opData));
// Get encoding style for output and set to current
$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
if(($direction == 'input') && isset($opData['output']['encodingStyle']) && ($opData['output']['encodingStyle'] != $encodingStyle)) {
$encodingStyle = $opData['output']['encodingStyle'];
$enc_style = $encodingStyle;
}
// set input params
$xml = '';
if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]['parts']) > 0) {
$use = $opData[$direction]['use'];
$this->debug('have ' . count($opData[$direction]['parts']) . ' part(s) to serialize');
if (is_array($parameters)) {
$parametersArrayType = $this->isArraySimpleOrStruct($parameters);
$this->debug('have ' . count($parameters) . ' parameter(s) provided as ' . $parametersArrayType . ' to serialize');
foreach($opData[$direction]['parts'] as $name => $type) {
$this->debug('serializing part "'.$name.'" of type "'.$type.'"');
// Track encoding style
if (isset($opData[$direction]['encodingStyle']) && $encodingStyle != $opData[$direction]['encodingStyle']) {
$encodingStyle = $opData[$direction]['encodingStyle'];
$enc_style = $encodingStyle;
} else {
$enc_style = false;
}
// NOTE: add error handling here
// if serializeType returns false, then catch global error and fault
if ($parametersArrayType == 'arraySimple') {
$p = array_shift($parameters);
$this->debug('calling serializeType w/indexed param');
$xml .= $this->serializeType($name, $type, $p, $use, $enc_style);
} elseif (isset($parameters[$name])) {
$this->debug('calling serializeType w/named param');
$xml .= $this->serializeType($name, $type, $parameters[$name], $use, $enc_style);
} else {
// TODO: only send nillable
$this->debug('calling serializeType w/null param');
$xml .= $this->serializeType($name, $type, null, $use, $enc_style);
}
}
} else {
$this->debug('no parameters passed.');
}
}
$this->debug("serializeRPCParameters returning: $xml");
return $xml;
}
/**
* serialize a PHP value according to a WSDL message definition
*
* TODO
* - multi-ref serialization
* - validate PHP values against type definitions, return errors if invalid
*
* @param string $ type name
* @param mixed $ param value
* @return mixed new param or false if initial value didn't validate
*/
function serializeParameters($operation, $direction, $parameters)
{
$this->debug('in serializeParameters with operation '.$operation.', direction '.$direction.' and '.count($parameters).' param(s), and xml schema version ' . $this->XMLSchemaVersion);
if ($direction != 'input' && $direction != 'output') {
$this->debug('The value of the \$direction argument needs to be either "input" or "output"');
$this->setError('The value of the \$direction argument needs to be either "input" or "output"');
return false;
}
if (!$opData = $this->getOperationData($operation)) {
$this->debug('Unable to retrieve WSDL data for operation: ' . $operation);
$this->setError('Unable to retrieve WSDL data for operation: ' . $operation);
return false;
}
$this->debug('opData:');
$this->appendDebug($this->varDump($opData));
// Get encoding style for output and set to current
$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
if(($direction == 'input') && isset($opData['output']['encodingStyle']) && ($opData['output']['encodingStyle'] != $encodingStyle)) {
$encodingStyle = $opData['output']['encodingStyle'];
$enc_style = $encodingStyle;
}
// set input params
$xml = '';
if (isset($opData[$direction]['parts']) && sizeof($opData[$direction]['parts']) > 0) {
$use = $opData[$direction]['use'];
$this->debug("use=$use");
$this->debug('got ' . count($opData[$direction]['parts']) . ' part(s)');
if (is_array($parameters)) {
$parametersArrayType = $this->isArraySimpleOrStruct($parameters);
$this->debug('have ' . $parametersArrayType . ' parameters');
foreach($opData[$direction]['parts'] as $name => $type) {
$this->debug('serializing part "'.$name.'" of type "'.$type.'"');
// Track encoding style
if(isset($opData[$direction]['encodingStyle']) && $encodingStyle != $opData[$direction]['encodingStyle']) {
$encodingStyle = $opData[$direction]['encodingStyle'];
$enc_style = $encodingStyle;
} else {
$enc_style = false;
}
// NOTE: add error handling here
// if serializeType returns false, then catch global error and fault
if ($parametersArrayType == 'arraySimple') {
$p = array_shift($parameters);
$this->debug('calling serializeType w/indexed param');
$xml .= $this->serializeType($name, $type, $p, $use, $enc_style);
} elseif (isset($parameters[$name])) {
$this->debug('calling serializeType w/named param');
$xml .= $this->serializeType($name, $type, $parameters[$name], $use, $enc_style);
} else {
// TODO: only send nillable
$this->debug('calling serializeType w/null param');
$xml .= $this->serializeType($name, $type, null, $use, $enc_style);
}
}
} else {
$this->debug('no parameters passed.');
}
}
$this->debug("serializeParameters returning: $xml");
return $xml;
}
/**
* serializes a PHP value according a given type definition
*
* @param string $name , name of type (part)
* @param string $type , type of type, heh (type or element)
* @param mixed $value , a native PHP value (parameter value)
* @param string $use , use for part (encoded|literal)
* @param string $encodingStyle , use to add encoding changes to serialisation
* @return string serialization
* @access public
*/
function serializeType($name, $type, $value, $use='encoded', $encodingStyle=false)
{
$this->debug("in serializeType: $name, $type, $value, $use, $encodingStyle");
if($use == 'encoded' && $encodingStyle) {
$encodingStyle = ' SOAP-ENV:encodingStyle="' . $encodingStyle . '"';
}
// if a soap_val has been supplied, let its type override the WSDL
if (is_object($value) && get_class($value) == 'soapval') {
// TODO: get attributes from soapval?
if ($value->type_ns) {
$type = $value->type_ns . ':' . $value->type;
$forceType = true;
$this->debug("in serializeType: soapval overrides type to $type");
} elseif ($value->type) {
$type = $value->type;
$forceType = true;
$this->debug("in serializeType: soapval overrides type to $type");
} else {
$forceType = false;
$this->debug("in serializeType: soapval does not override type");
}
$value = $value->value;
$this->debug("in serializeType: soapval overrides value to $value");
} else {
$forceType = false;
}
$xml = '';
if (strpos($type, ':')) {
$uqType = substr($type, strrpos($type, ':') + 1);
$ns = substr($type, 0, strrpos($type, ':'));
$this->debug("got a prefixed type: $uqType, $ns");
if ($this->getNamespaceFromPrefix($ns)) {
$ns = $this->getNamespaceFromPrefix($ns);
$this->debug("expanded prefixed type: $uqType, $ns");
}
if($ns == $this->XMLSchemaVersion){
if (is_null($value)) {
if ($use == 'literal') {
// TODO: depends on nillable
$xml = "<$name/>";
} else {
$xml = "<$name xsi:nil=\"true\"/>";
}
$this->debug("serializeType returning: $xml");
return $xml;
}
if ($uqType == 'boolean' && !$value) {
$value = 'false';
} elseif ($uqType == 'boolean') {
$value = 'true';
}
if ($uqType == 'string' && gettype($value) == 'string') {
$value = $this->expandEntities($value);
}
// it's a scalar
// TODO: what about null/nil values?
// check type isn't a custom type extending xmlschema namespace
if (!$this->getTypeDef($uqType, $ns)) {
if ($use == 'literal') {
if ($forceType) {
$xml = "<$name xsi:type=\"" . $this->getPrefixFromNamespace($this->XMLSchemaVersion) . ":$uqType\">$value$name>";
} else {
$xml = "<$name>$value$name>";
}
} else {
$xml = "<$name xsi:type=\"" . $this->getPrefixFromNamespace($this->XMLSchemaVersion) . ":$uqType\"$encodingStyle>$value$name>";
}
$this->debug("serializeType returning: $xml");
return $xml;
}
} else if ($ns == 'http://xml.apache.org/xml-soap') {
if ($uqType == 'Map') {
$contents = '';
foreach($value as $k => $v) {
$this->debug("serializing map element: key $k, value $v");
$contents .= '';
$contents .= $this->serialize_val($k,'key',false,false,false,false,$use);
$contents .= $this->serialize_val($v,'value',false,false,false,false,$use);
$contents .= '';
}
if ($use == 'literal') {
if ($forceType) {
$xml = "<$name xsi:type=\"" . $this->getPrefixFromNamespace('http://xml.apache.org/xml-soap') . ":$uqType\">$contents$name>";
} else {
$xml = "<$name>$contents$name>";
}
} else {
$xml = "<$name xsi:type=\"" . $this->getPrefixFromNamespace('http://xml.apache.org/xml-soap') . ":$uqType\"$encodingStyle>$contents$name>";
}
$this->debug("serializeType returning: $xml");
return $xml;
}
}
} else {
$this->debug("No namespace for type $type");
$ns = '';
$uqType = $type;
}
if(!$typeDef = $this->getTypeDef($uqType, $ns)){
$this->setError("$type ($uqType) is not a supported type.");
$this->debug("$type ($uqType) is not a supported type.");
return false;
} else {
$this->debug("typedef:");
$this->appendDebug($this->varDump($typeDef));
}
$phpType = $typeDef['phpType'];
$this->debug("serializeType: uqType: $uqType, ns: $ns, phptype: $phpType, arrayType: " . (isset($typeDef['arrayType']) ? $typeDef['arrayType'] : '') );
// if php type == struct, map value to the element names
if ($phpType == 'struct') {
if (isset($typeDef['typeClass']) && $typeDef['typeClass'] == 'element') {
$elementName = $uqType;
if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
$elementNS = " xmlns=\"$ns\"";
}
} else {
$elementName = $name;
$elementNS = '';
}
if (is_null($value)) {
if ($use == 'literal') {
// TODO: depends on nillable
$xml = "<$elementName$elementNS/>";
} else {
$xml = "<$elementName$elementNS xsi:nil=\"true\"/>";
}
$this->debug("serializeType returning: $xml");
return $xml;
}
if ($use == 'literal') {
if ($forceType) {
$xml = "<$elementName$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">";
} else {
$xml = "<$elementName$elementNS>";
}
} else {
$xml = "<$elementName$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>";
}
if (isset($typeDef['elements']) && is_array($typeDef['elements'])) {
if (is_array($value)) {
$xvalue = $value;
} elseif (is_object($value)) {
$xvalue = get_object_vars($value);
} else {
$this->debug("value is neither an array nor an object for XML Schema type $ns:$uqType");
$xvalue = array();
}
// toggle whether all elements are present - ideally should validate against schema
if(count($typeDef['elements']) != count($xvalue)){
$optionals = true;
}
foreach($typeDef['elements'] as $eName => $attrs) {
// if user took advantage of a minOccurs=0, then only serialize named parameters
if(isset($optionals) && !isset($xvalue[$eName])){
// do nothing
} else {
// get value
if (isset($xvalue[$eName])) {
$v = $xvalue[$eName];
} else {
$v = null;
}
// TODO: if maxOccurs > 1 (not just unbounded), then allow serialization of an array
if (isset($attrs['maxOccurs']) && $attrs['maxOccurs'] == 'unbounded' && isset($v) && is_array($v) && $this->isArraySimpleOrStruct($v) == 'arraySimple') {
$vv = $v;
foreach ($vv as $k => $v) {
if (isset($attrs['type'])) {
// serialize schema-defined type
$xml .= $this->serializeType($eName, $attrs['type'], $v, $use, $encodingStyle);
} else {
// serialize generic type
$this->debug("calling serialize_val() for $v, $eName, false, false, false, false, $use");
$xml .= $this->serialize_val($v, $eName, false, false, false, false, $use);
}
}
} else {
if (isset($attrs['type'])) {
// serialize schema-defined type
$xml .= $this->serializeType($eName, $attrs['type'], $v, $use, $encodingStyle);
} else {
// serialize generic type
$this->debug("calling serialize_val() for $v, $eName, false, false, false, false, $use");
$xml .= $this->serialize_val($v, $eName, false, false, false, false, $use);
}
}
}
}
} else {
$this->debug("Expected elements for XML Schema type $ns:$uqType");
}
$xml .= "$elementName>";
} elseif ($phpType == 'array') {
if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
$elementNS = " xmlns=\"$ns\"";
} else {
$elementNS = '';
}
if (is_null($value)) {
if ($use == 'literal') {
// TODO: depends on nillable
$xml = "<$name$elementNS/>";
} else {
$xml = "<$name$elementNS xsi:nil=\"true\"/>";
}
$this->debug("serializeType returning: $xml");
return $xml;
}
if (isset($typeDef['multidimensional'])) {
$nv = array();
foreach($value as $v) {
$cols = ',' . sizeof($v);
$nv = array_merge($nv, $v);
}
$value = $nv;
} else {
$cols = '';
}
if (is_array($value) && sizeof($value) >= 1) {
$rows = sizeof($value);
$contents = '';
foreach($value as $k => $v) {
$this->debug("serializing array element: $k, $v of type: $typeDef[arrayType]");
//if (strpos($typeDef['arrayType'], ':') ) {
if (!in_array($typeDef['arrayType'],$this->typemap['http://www.w3.org/2001/XMLSchema'])) {
$contents .= $this->serializeType('item', $typeDef['arrayType'], $v, $use);
} else {
$contents .= $this->serialize_val($v, 'item', $typeDef['arrayType'], null, $this->XMLSchemaVersion, false, $use);
}
}
} else {
$rows = 0;
$contents = null;
}
// TODO: for now, an empty value will be serialized as a zero element
// array. Revisit this when coding the handling of null/nil values.
if ($use == 'literal') {
$xml = "<$name$elementNS>"
.$contents
."$name>";
} else {
$xml = "<$name$elementNS xsi:type=\"".$this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/').':Array" '.
$this->getPrefixFromNamespace('http://schemas.xmlsoap.org/soap/encoding/')
.':arrayType="'
.$this->getPrefixFromNamespace($this->getPrefix($typeDef['arrayType']))
.":".$this->getLocalPart($typeDef['arrayType'])."[$rows$cols]\">"
.$contents
."$name>";
}
} elseif ($phpType == 'scalar') {
if (isset($typeDef['form']) && ($typeDef['form'] == 'qualified')) {
$elementNS = " xmlns=\"$ns\"";
} else {
$elementNS = '';
}
if ($use == 'literal') {
if ($forceType) {
$xml = "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\">$value$name>";
} else {
$xml = "<$name$elementNS>$value$name>";
}
} else {
$xml = "<$name$elementNS xsi:type=\"" . $this->getPrefixFromNamespace($ns) . ":$uqType\"$encodingStyle>$value$name>";
}
}
$this->debug("serializeType returning: $xml");
return $xml;
}
/**
* adds an XML Schema complex type to the WSDL types
*
* @param name
* @param typeClass (complexType|simpleType|attribute)
* @param phpType: currently supported are array and struct (php assoc array)
* @param compositor (all|sequence|choice)
* @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
* @param elements = array ( name = array(name=>'',type=>'') )
* @param attrs = array(
* array(
* 'ref' => "http://schemas.xmlsoap.org/soap/encoding/:arrayType",
* "http://schemas.xmlsoap.org/wsdl/:arrayType" => "string[]"
* )
* )
* @param arrayType: namespace:name (http://www.w3.org/2001/XMLSchema:string)
* @see xmlschema
*
*/
function addComplexType($name,$typeClass='complexType',$phpType='array',$compositor='',$restrictionBase='',$elements=array(),$attrs=array(),$arrayType='') {
if (count($elements) > 0) {
foreach($elements as $n => $e){
// expand each element
foreach ($e as $k => $v) {
$k = strpos($k,':') ? $this->expandQname($k) : $k;
$v = strpos($v,':') ? $this->expandQname($v) : $v;
$ee[$k] = $v;
}
$eElements[$n] = $ee;
}
$elements = $eElements;
}
if (count($attrs) > 0) {
foreach($attrs as $n => $a){
// expand each attribute
foreach ($a as $k => $v) {
$k = strpos($k,':') ? $this->expandQname($k) : $k;
$v = strpos($v,':') ? $this->expandQname($v) : $v;
$aa[$k] = $v;
}
$eAttrs[$n] = $aa;
}
$attrs = $eAttrs;
}
$restrictionBase = strpos($restrictionBase,':') ? $this->expandQname($restrictionBase) : $restrictionBase;
$arrayType = strpos($arrayType,':') ? $this->expandQname($arrayType) : $arrayType;
$typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
$this->schemas[$typens][0]->addComplexType($name,$typeClass,$phpType,$compositor,$restrictionBase,$elements,$attrs,$arrayType);
}
/**
* adds an XML Schema simple type to the WSDL types
*
* @param name
* @param restrictionBase namespace:name (http://schemas.xmlsoap.org/soap/encoding/:Array)
* @param typeClass (simpleType)
* @param phpType: (scalar)
* @see xmlschema
*
*/
function addSimpleType($name, $restrictionBase='', $typeClass='simpleType', $phpType='scalar') {
$restrictionBase = strpos($restrictionBase,':') ? $this->expandQname($restrictionBase) : $restrictionBase;
$typens = isset($this->namespaces['types']) ? $this->namespaces['types'] : $this->namespaces['tns'];
$this->schemas[$typens][0]->addSimpleType($name, $restrictionBase, $typeClass, $phpType);
}
/**
* register a service with the server
*
* @param string $methodname
* @param string $in assoc array of input values: key = param name, value = param type
* @param string $out assoc array of output values: key = param name, value = param type
* @param string $namespace optional The namespace for the operation
* @param string $soapaction optional The soapaction for the operation
* @param string $style (rpc|document) optional The style for the operation
* @param string $use (encoded|literal) optional The use for the parameters (cannot mix right now)
* @param string $documentation optional The description to include in the WSDL
* @access public
*/
function addOperation($name, $in = false, $out = false, $namespace = false, $soapaction = false, $style = 'rpc', $use = 'encoded', $documentation = ''){
if ($style == 'rpc' && $use == 'encoded') {
$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
} else {
$encodingStyle = '';
}
// get binding
$this->bindings[ $this->serviceName . 'Binding' ]['operations'][$name] =
array(
'name' => $name,
'binding' => $this->serviceName . 'Binding',
'endpoint' => $this->endpoint,
'soapAction' => $soapaction,
'style' => $style,
'input' => array(
'use' => $use,
'namespace' => $namespace,
'encodingStyle' => $encodingStyle,
'message' => $name . 'Request',
'parts' => $in),
'output' => array(
'use' => $use,
'namespace' => $namespace,
'encodingStyle' => $encodingStyle,
'message' => $name . 'Response',
'parts' => $out),
'namespace' => $namespace,
'transport' => 'http://schemas.xmlsoap.org/soap/http',
'documentation' => $documentation);
// add portTypes
// add messages
if($in)
{
foreach($in as $pName => $pType)
{
if(strpos($pType,':')) {
$pType = $this->getNamespaceFromPrefix($this->getPrefix($pType)).":".$this->getLocalPart($pType);
}
$this->messages[$name.'Request'][$pName] = $pType;
}
} else {
$this->messages[$name.'Request']= '0';
}
if($out)
{
foreach($out as $pName => $pType)
{
if(strpos($pType,':')) {
$pType = $this->getNamespaceFromPrefix($this->getPrefix($pType)).":".$this->getLocalPart($pType);
}
$this->messages[$name.'Response'][$pName] = $pType;
}
} else {
$this->messages[$name.'Response']= '0';
}
return true;
}
}
?>
* @version $Id: nusoap.php,v 1.1.1.1 2004/10/23 20:01:09 rado2 Exp $
* @access public
*/
class soap_parser extends nusoap_base {
var $xml = '';
var $xml_encoding = '';
var $method = '';
var $root_struct = '';
var $root_struct_name = '';
var $root_struct_namespace = '';
var $root_header = '';
var $document = ''; // incoming SOAP body (text)
// determines where in the message we are (envelope,header,body,method)
var $status = '';
var $position = 0;
var $depth = 0;
var $default_namespace = '';
var $namespaces = array();
var $message = array();
var $parent = '';
var $fault = false;
var $fault_code = '';
var $fault_str = '';
var $fault_detail = '';
var $depth_array = array();
var $debug_flag = true;
var $soapresponse = NULL;
var $responseHeaders = ''; // incoming SOAP headers (text)
var $body_position = 0;
// for multiref parsing:
// array of id => pos
var $ids = array();
// array of id => hrefs => pos
var $multirefs = array();
// toggle for auto-decoding element content
var $decode_utf8 = true;
/**
* constructor
*
* @param string $xml SOAP message
* @param string $encoding character encoding scheme of message
* @param string $method
* @param string $decode_utf8 whether to decode UTF-8 to ISO-8859-1
* @access public
*/
function soap_parser($xml,$encoding='UTF-8',$method='',$decode_utf8=true){
$this->xml = $xml;
$this->xml_encoding = $encoding;
$this->method = $method;
$this->decode_utf8 = $decode_utf8;
// Check whether content has been read.
if(!empty($xml)){
$this->debug('Entering soap_parser(), length='.strlen($xml).', encoding='.$encoding);
// Create an XML parser - why not xml_parser_create_ns?
$this->parser = xml_parser_create($this->xml_encoding);
// Set the options for parsing the XML data.
//xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, $this->xml_encoding);
// Set the object for the parser.
xml_set_object($this->parser, $this);
// Set the element handlers for the parser.
xml_set_element_handler($this->parser, 'start_element','end_element');
xml_set_character_data_handler($this->parser,'character_data');
// Parse the XML file.
if(!xml_parse($this->parser,$xml,true)){
// Display an error message.
$err = sprintf('XML error parsing SOAP payload on line %d: %s',
xml_get_current_line_number($this->parser),
xml_error_string(xml_get_error_code($this->parser)));
$this->debug($err);
$this->debug("XML payload:\n" . $xml);
$this->setError($err);
} else {
$this->debug('parsed successfully, found root struct: '.$this->root_struct.' of name '.$this->root_struct_name);
// get final value
$this->soapresponse = $this->message[$this->root_struct]['result'];
// get header value: no, because this is documented as XML string
// if($this->root_header != '' && isset($this->message[$this->root_header]['result'])){
// $this->responseHeaders = $this->message[$this->root_header]['result'];
// }
// resolve hrefs/ids
if(sizeof($this->multirefs) > 0){
foreach($this->multirefs as $id => $hrefs){
$this->debug('resolving multirefs for id: '.$id);
$idVal = $this->buildVal($this->ids[$id]);
foreach($hrefs as $refPos => $ref){
$this->debug('resolving href at pos '.$refPos);
$this->multirefs[$id][$refPos] = $idVal;
}
}
}
}
xml_parser_free($this->parser);
} else {
$this->debug('xml was empty, didn\'t parse!');
$this->setError('xml was empty, didn\'t parse!');
}
}
/**
* start-element handler
*
* @param string $parser XML parser object
* @param string $name element name
* @param string $attrs associative array of attributes
* @access private
*/
function start_element($parser, $name, $attrs) {
// position in a total number of elements, starting from 0
// update class level pos
$pos = $this->position++;
// and set mine
$this->message[$pos] = array('pos' => $pos,'children'=>'','cdata'=>'');
// depth = how many levels removed from root?
// set mine as current global depth and increment global depth value
$this->message[$pos]['depth'] = $this->depth++;
// else add self as child to whoever the current parent is
if($pos != 0){
$this->message[$this->parent]['children'] .= '|'.$pos;
}
// set my parent
$this->message[$pos]['parent'] = $this->parent;
// set self as current parent
$this->parent = $pos;
// set self as current value for this depth
$this->depth_array[$this->depth] = $pos;
// get element prefix
if(strpos($name,':')){
// get ns prefix
$prefix = substr($name,0,strpos($name,':'));
// get unqualified name
$name = substr(strstr($name,':'),1);
}
// set status
if($name == 'Envelope'){
$this->status = 'envelope';
} elseif($name == 'Header'){
$this->root_header = $pos;
$this->status = 'header';
} elseif($name == 'Body'){
$this->status = 'body';
$this->body_position = $pos;
// set method
} elseif($this->status == 'body' && $pos == ($this->body_position+1)){
$this->status = 'method';
$this->root_struct_name = $name;
$this->root_struct = $pos;
$this->message[$pos]['type'] = 'struct';
$this->debug("found root struct $this->root_struct_name, pos $this->root_struct");
}
// set my status
$this->message[$pos]['status'] = $this->status;
// set name
$this->message[$pos]['name'] = htmlspecialchars($name);
// set attrs
$this->message[$pos]['attrs'] = $attrs;
// loop through atts, logging ns and type declarations
$attstr = '';
foreach($attrs as $key => $value){
$key_prefix = $this->getPrefix($key);
$key_localpart = $this->getLocalPart($key);
// if ns declarations, add to class level array of valid namespaces
if($key_prefix == 'xmlns'){
if(ereg('^http://www.w3.org/[0-9]{4}/XMLSchema$',$value)){
$this->XMLSchemaVersion = $value;
$this->namespaces['xsd'] = $this->XMLSchemaVersion;
$this->namespaces['xsi'] = $this->XMLSchemaVersion.'-instance';
}
$this->namespaces[$key_localpart] = $value;
// set method namespace
if($name == $this->root_struct_name){
$this->methodNamespace = $value;
}
// if it's a type declaration, set type
} elseif($key_localpart == 'type'){
$value_prefix = $this->getPrefix($value);
$value_localpart = $this->getLocalPart($value);
$this->message[$pos]['type'] = $value_localpart;
$this->message[$pos]['typePrefix'] = $value_prefix;
if(isset($this->namespaces[$value_prefix])){
$this->message[$pos]['type_namespace'] = $this->namespaces[$value_prefix];
} else if(isset($attrs['xmlns:'.$value_prefix])) {
$this->message[$pos]['type_namespace'] = $attrs['xmlns:'.$value_prefix];
}
// should do something here with the namespace of specified type?
} elseif($key_localpart == 'arrayType'){
$this->message[$pos]['type'] = 'array';
/* do arrayType ereg here
[1] arrayTypeValue ::= atype asize
[2] atype ::= QName rank*
[3] rank ::= '[' (',')* ']'
[4] asize ::= '[' length~ ']'
[5] length ::= nextDimension* Digit+
[6] nextDimension ::= Digit+ ','
*/
$expr = '([A-Za-z0-9_]+):([A-Za-z]+[A-Za-z0-9_]+)\[([0-9]+),?([0-9]*)\]';
if(ereg($expr,$value,$regs)){
$this->message[$pos]['typePrefix'] = $regs[1];
$this->message[$pos]['arrayTypePrefix'] = $regs[1];
if (isset($this->namespaces[$regs[1]])) {
$this->message[$pos]['arrayTypeNamespace'] = $this->namespaces[$regs[1]];
} else if (isset($attrs['xmlns:'.$regs[1]])) {
$this->message[$pos]['arrayTypeNamespace'] = $attrs['xmlns:'.$regs[1]];
}
$this->message[$pos]['arrayType'] = $regs[2];
$this->message[$pos]['arraySize'] = $regs[3];
$this->message[$pos]['arrayCols'] = $regs[4];
}
}
// log id
if($key == 'id'){
$this->ids[$value] = $pos;
}
// root
if($key_localpart == 'root' && $value == 1){
$this->status = 'method';
$this->root_struct_name = $name;
$this->root_struct = $pos;
$this->debug("found root struct $this->root_struct_name, pos $pos");
}
// for doclit
$attstr .= " $key=\"$value\"";
}
// get namespace - must be done after namespace atts are processed
if(isset($prefix)){
$this->message[$pos]['namespace'] = $this->namespaces[$prefix];
$this->default_namespace = $this->namespaces[$prefix];
} else {
$this->message[$pos]['namespace'] = $this->default_namespace;
}
if($this->status == 'header'){
if ($this->root_header != $pos) {
$this->responseHeaders .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
}
} elseif($this->root_struct_name != ''){
$this->document .= "<" . (isset($prefix) ? $prefix . ':' : '') . "$name$attstr>";
}
}
/**
* end-element handler
*
* @param string $parser XML parser object
* @param string $name element name
* @access private
*/
function end_element($parser, $name) {
// position of current element is equal to the last value left in depth_array for my depth
$pos = $this->depth_array[$this->depth--];
// get element prefix
if(strpos($name,':')){
// get ns prefix
$prefix = substr($name,0,strpos($name,':'));
// get unqualified name
$name = substr(strstr($name,':'),1);
}
// build to native type
if(isset($this->body_position) && $pos > $this->body_position){
// deal w/ multirefs
if(isset($this->message[$pos]['attrs']['href'])){
// get id
$id = substr($this->message[$pos]['attrs']['href'],1);
// add placeholder to href array
$this->multirefs[$id][$pos] = 'placeholder';
// add set a reference to it as the result value
$this->message[$pos]['result'] =& $this->multirefs[$id][$pos];
// build complex values
} elseif($this->message[$pos]['children'] != ''){
// if result has already been generated (struct/array
if(!isset($this->message[$pos]['result'])){
$this->message[$pos]['result'] = $this->buildVal($pos);
}
// set value of simple type
} else {
//$this->debug('adding data for scalar value '.$this->message[$pos]['name'].' of value '.$this->message[$pos]['cdata']);
if (isset($this->message[$pos]['type'])) {
$this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$pos]['type'], isset($this->message[$pos]['type_namespace']) ? $this->message[$pos]['type_namespace'] : '');
} else {
$parent = $this->message[$pos]['parent'];
if (isset($this->message[$parent]['type']) && ($this->message[$parent]['type'] == 'array') && isset($this->message[$parent]['arrayType'])) {
$this->message[$pos]['result'] = $this->decodeSimple($this->message[$pos]['cdata'], $this->message[$parent]['arrayType'], isset($this->message[$parent]['arrayTypeNamespace']) ? $this->message[$parent]['arrayTypeNamespace'] : '');
} else {
$this->message[$pos]['result'] = $this->message[$pos]['cdata'];
}
}
/* add value to parent's result, if parent is struct/array
$parent = $this->message[$pos]['parent'];
if($this->message[$parent]['type'] != 'map'){
if(strtolower($this->message[$parent]['type']) == 'array'){
$this->message[$parent]['result'][] = $this->message[$pos]['result'];
} else {
$this->message[$parent]['result'][$this->message[$pos]['name']] = $this->message[$pos]['result'];
}
}
*/
}
}
// for doclit
if($this->status == 'header'){
if ($this->root_header != $pos) {
$this->responseHeaders .= "" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
}
} elseif($pos >= $this->root_struct){
$this->document .= "" . (isset($prefix) ? $prefix . ':' : '') . "$name>";
}
// switch status
if($pos == $this->root_struct){
$this->status = 'body';
$this->root_struct_namespace = $this->message[$pos]['namespace'];
} elseif($name == 'Body'){
$this->status = 'envelope';
} elseif($name == 'Header'){
$this->status = 'envelope';
} elseif($name == 'Envelope'){
//
}
// set parent back to my parent
$this->parent = $this->message[$pos]['parent'];
}
/**
* element content handler
*
* @param string $parser XML parser object
* @param string $data element content
* @access private
*/
function character_data($parser, $data){
$pos = $this->depth_array[$this->depth];
if ($this->xml_encoding=='UTF-8'){
// TODO: add an option to disable this for folks who want
// raw UTF-8 that, e.g., might not map to iso-8859-1
// TODO: this can also be handled with xml_parser_set_option($this->parser, XML_OPTION_TARGET_ENCODING, "ISO-8859-1");
if($this->decode_utf8){
$data = utf8_decode($data);
}
}
$this->message[$pos]['cdata'] .= $data;
// for doclit
if($this->status == 'header'){
$this->responseHeaders .= $data;
} else {
$this->document .= $data;
}
}
/**
* get the parsed message
*
* @return mixed
* @access public
*/
function get_response(){
return $this->soapresponse;
}
/**
* get the parsed headers
*
* @return string XML or empty if no headers
* @access public
*/
function getHeaders(){
return $this->responseHeaders;
}
/**
* decodes entities
*
* @param string $text string to translate
* @access private
*/
function decode_entities($text){
foreach($this->entities as $entity => $encoded){
$text = str_replace($encoded,$entity,$text);
}
return $text;
}
/**
* decodes simple types into PHP variables
*
* @param string $value value to decode
* @param string $type XML type to decode
* @param string $typens XML type namespace to decode
* @access private
*/
function decodeSimple($value, $type, $typens) {
// TODO: use the namespace!
if ((!isset($type)) || $type == 'string' || $type == 'long' || $type == 'unsignedLong') {
return (string) $value;
}
if ($type == 'int' || $type == 'integer' || $type == 'short' || $type == 'byte') {
return (int) $value;
}
if ($type == 'float' || $type == 'double' || $type == 'decimal') {
return (double) $value;
}
if ($type == 'boolean') {
if (strtolower($value) == 'false' || strtolower($value) == 'f') {
return false;
}
return (boolean) $value;
}
if ($type == 'base64' || $type == 'base64Binary') {
return base64_decode($value);
}
// obscure numeric types
if ($type == 'nonPositiveInteger' || $type == 'negativeInteger'
|| $type == 'nonNegativeInteger' || $type == 'positiveInteger'
|| $type == 'unsignedInt'
|| $type == 'unsignedShort' || $type == 'unsignedByte') {
return (int) $value;
}
// everything else
return (string) $value;
}
/**
* builds response structures for compound values (arrays/structs)
*
* @param string $pos position in node tree
* @access private
*/
function buildVal($pos){
if(!isset($this->message[$pos]['type'])){
$this->message[$pos]['type'] = '';
}
$this->debug('inside buildVal() for '.$this->message[$pos]['name']."(pos $pos) of type ".$this->message[$pos]['type']);
// if there are children...
if($this->message[$pos]['children'] != ''){
$children = explode('|',$this->message[$pos]['children']);
array_shift($children); // knock off empty
// md array
if(isset($this->message[$pos]['arrayCols']) && $this->message[$pos]['arrayCols'] != ''){
$r=0; // rowcount
$c=0; // colcount
foreach($children as $child_pos){
$this->debug("got an MD array element: $r, $c");
$params[$r][] = $this->message[$child_pos]['result'];
$c++;
if($c == $this->message[$pos]['arrayCols']){
$c = 0;
$r++;
}
}
// array
} elseif($this->message[$pos]['type'] == 'array' || $this->message[$pos]['type'] == 'Array'){
$this->debug('adding array '.$this->message[$pos]['name']);
foreach($children as $child_pos){
$params[] = &$this->message[$child_pos]['result'];
}
// apache Map type: java hashtable
} elseif($this->message[$pos]['type'] == 'Map' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap'){
foreach($children as $child_pos){
$kv = explode("|",$this->message[$child_pos]['children']);
$params[$this->message[$kv[1]]['result']] = &$this->message[$kv[2]]['result'];
}
// generic compound type
//} elseif($this->message[$pos]['type'] == 'SOAPStruct' || $this->message[$pos]['type'] == 'struct') {
} else {
// Apache Vector type: treat as an array
if ($this->message[$pos]['type'] == 'Vector' && $this->message[$pos]['type_namespace'] == 'http://xml.apache.org/xml-soap') {
$notstruct = 1;
} else {
// is array or struct?
foreach($children as $child_pos){
if(isset($keys) && isset($keys[$this->message[$child_pos]['name']])){
$notstruct = 1;
break;
}
$keys[$this->message[$child_pos]['name']] = 1;
}
}
//
foreach($children as $child_pos){
if(isset($notstruct)){
$params[] = &$this->message[$child_pos]['result'];
} else {
if (isset($params[$this->message[$child_pos]['name']])) {
// de-serialize repeated element name into an array
if (!is_array($params[$this->message[$child_pos]['name']])) {
$params[$this->message[$child_pos]['name']] = array($params[$this->message[$child_pos]['name']]);
}
$params[$this->message[$child_pos]['name']][] = &$this->message[$child_pos]['result'];
} else {
$params[$this->message[$child_pos]['name']] = &$this->message[$child_pos]['result'];
}
}
}
}
return is_array($params) ? $params : array();
} else {
$this->debug('no children');
if(strpos($this->message[$pos]['cdata'],'&')){
return strtr($this->message[$pos]['cdata'],array_flip($this->entities));
} else {
return $this->message[$pos]['cdata'];
}
}
}
}
?>call( string methodname [ ,array parameters] );
*
* // bye bye client
* unset($soapclient);
*
* @author Dietrich Ayala
* @version $Id: nusoap.php,v 1.1.1.1 2004/10/23 20:01:09 rado2 Exp $
* @access public
*/
class soapclientw extends nusoap_base {
var $username = '';
var $password = '';
var $authtype = '';
var $requestHeaders = false; // SOAP headers in request (text)
var $responseHeaders = ''; // SOAP headers from response (incomplete namespace resolution) (text)
var $document = ''; // SOAP body response portion (incomplete namespace resolution) (text)
var $endpoint;
var $error_str = false;
var $proxyhost = '';
var $proxyport = '';
var $proxyusername = '';
var $proxypassword = '';
var $xml_encoding = ''; // character set encoding of incoming (response) messages
var $http_encoding = false;
var $timeout = 0; // HTTP connection timeout
var $response_timeout = 30; // HTTP response timeout
var $endpointType = '';
var $persistentConnection = false;
var $defaultRpcParams = false; // This is no longer used
var $request = ''; // HTTP request
var $response = ''; // HTTP response
var $responseData = ''; // SOAP payload of response
// toggles whether the parser decodes element content w/ utf8_decode()
var $decode_utf8 = true;
/**
* fault related variables
*
* @var fault
* @var faultcode
* @var faultstring
* @var faultdetail
* @access public
*/
var $fault, $faultcode, $faultstring, $faultdetail;
/**
* constructor
*
* @param mixed $endpoint SOAP server or WSDL URL (string), or wsdl instance (object)
* @param bool $wsdl optional, set to true if using WSDL
* @param int $portName optional portName in WSDL document
* @param string $proxyhost
* @param string $proxyport
* @param string $proxyusername
* @param string $proxypassword
* @param integer $timeout set the connection timeout
* @param integer $response_timeout set the response timeout
* @access public
*/
function soapclientw($endpoint,$wsdl = false,$proxyhost = false,$proxyport = false,$proxyusername = false, $proxypassword = false, $timeout = 0, $response_timeout = 30){
$this->endpoint = $endpoint;
$this->proxyhost = $proxyhost;
$this->proxyport = $proxyport;
$this->proxyusername = $proxyusername;
$this->proxypassword = $proxypassword;
$this->timeout = $timeout;
$this->response_timeout = $response_timeout;
// make values
if($wsdl){
$this->endpointType = 'wsdl';
if (is_object($endpoint) && is_a($endpoint, 'wsdl')) {
$this->wsdl = $endpoint;
$this->endpoint = $this->wsdl->wsdl;
$this->wsdlFile = $this->endpoint;
$this->debug('existing wsdl instance created from ' . $this->endpoint);
} else {
$this->wsdlFile = $this->endpoint;
// instantiate wsdl object and parse wsdl file
$this->debug('instantiating wsdl class with doc: '.$endpoint);
$this->wsdl =& new wsdl($this->wsdlFile,$this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword,$this->timeout,$this->response_timeout);
}
$this->appendDebug($this->wsdl->getDebug());
$this->wsdl->clearDebug();
// catch errors
if($errstr = $this->wsdl->getError()){
$this->debug('got wsdl error: '.$errstr);
$this->setError('wsdl error: '.$errstr);
} elseif($this->operations = $this->wsdl->getOperations()){
$this->debug( 'got '.count($this->operations).' operations from wsdl '.$this->wsdlFile);
} else {
$this->debug( 'getOperations returned false');
$this->setError('no operations defined in the WSDL document!');
}
}
}
/**
* calls method, returns PHP native type
*
* @param string $method SOAP server URL or path
* @param array $params An array, associative or simple, of the parameters
* for the method call, or a string that is the XML
* for the call. For rpc style, this call will
* wrap the XML in a tag named after the method, as
* well as the SOAP Envelope and Body. For document
* style, this will only wrap with the Envelope and Body.
* IMPORTANT: when using an array with document style,
* in which case there
* is really one parameter, the root of the fragment
* used in the call, which encloses what programmers
* normally think of parameters. A parameter array
* *must* include the wrapper.
* @param string $namespace optional method namespace (WSDL can override)
* @param string $soapAction optional SOAPAction value (WSDL can override)
* @param boolean $headers optional array of soapval objects for headers
* @param boolean $rpcParams optional (no longer used)
* @param string $style optional (rpc|document) the style to use when serializing parameters (WSDL can override)
* @param string $use optional (encoded|literal) the use when serializing parameters (WSDL can override)
* @return mixed
* @access public
*/
function call($operation,$params=array(),$namespace='',$soapAction='',$headers=false,$rpcParams=null,$style='rpc',$use='encoded'){
$this->operation = $operation;
$this->fault = false;
$this->error_str = '';
$this->request = '';
$this->response = '';
$this->responseData = '';
$this->faultstring = '';
$this->faultcode = '';
$this->opData = array();
$this->debug("call: $operation, $params, $namespace, $soapAction, $headers, $style, $use; endpointType: $this->endpointType");
if ($headers) {
$this->requestHeaders = $headers;
}
// serialize parameters
if($this->endpointType == 'wsdl' && $opData = $this->getOperationData($operation)){
// use WSDL for operation
$this->opData = $opData;
$this->debug("opData:");
$this->appendDebug($this->varDump($opData));
if (isset($opData['soapAction'])) {
$soapAction = $opData['soapAction'];
}
$this->endpoint = $opData['endpoint'];
$namespace = isset($opData['input']['namespace']) ? $opData['input']['namespace'] : ($namespace != '' ? $namespace : 'http://testuri.org');
$style = $opData['style'];
$use = $opData['input']['use'];
// add ns to ns array
if($namespace != '' && !isset($this->wsdl->namespaces[$namespace])){
$this->wsdl->namespaces['nu'] = $namespace;
}
$nsPrefix = $this->wsdl->getPrefixFromNamespace($namespace);
// serialize payload
if (is_string($params)) {
$this->debug("serializing param string for WSDL operation $operation");
$payload = $params;
} elseif (is_array($params)) {
$this->debug("serializing param array for WSDL operation $operation");
$payload = $this->wsdl->serializeRPCParameters($operation,'input',$params);
} else {
$this->debug('params must be array or string');
$this->setError('params must be array or string');
return false;
}
$usedNamespaces = $this->wsdl->usedNamespaces;
// Partial fix for multiple encoding styles in the same function call
$encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
if (isset($opData['output']['encodingStyle']) && $encodingStyle != $opData['output']['encodingStyle']) {
$methodEncodingStyle = ' SOAP-ENV:encodingStyle="' . $opData['output']['encodingStyle'] . '"';
} else {
$methodEncodingStyle = '';
}
$this->appendDebug($this->wsdl->getDebug());
$this->wsdl->clearDebug();
if ($errstr = $this->wsdl->getError()) {
$this->debug('got wsdl error: '.$errstr);
$this->setError('wsdl error: '.$errstr);
return false;
}
} elseif($this->endpointType == 'wsdl') {
// operation not in WSDL
$this->appendDebug($this->wsdl->getDebug());
$this->wsdl->clearDebug();
$this->setError( 'operation '.$operation.' not present.');
$this->debug("operation '$operation' not present.");
return false;
} else {
// no WSDL
if($namespace == ''){
$namespace = 'http://testuri.org';
}
//$this->namespaces['ns1'] = $namespace;
$nsPrefix = 'ns1';
// serialize
$payload = '';
if (is_string($params)) {
$this->debug("serializing param string for operation $operation");
$payload = $params;
} elseif (is_array($params)) {
$this->debug("serializing param array for operation $operation");
foreach($params as $k => $v){
$payload .= $this->serialize_val($v,$k,false,false,false,false,$use);
}
} else {
$this->debug('params must be array or string');
$this->setError('params must be array or string');
return false;
}
$usedNamespaces = array();
$methodEncodingStyle = '';
}
// wrap RPC calls with method element
if ($style == 'rpc') {
if ($use == 'literal') {
$this->debug("wrapping RPC request with literal method element");
$payload = "<$operation xmlns=\"$namespace\">" . $payload . "$operation>";
} else {
$this->debug("wrapping RPC request with encoded method element");
$payload = "<$nsPrefix:$operation$methodEncodingStyle xmlns:$nsPrefix=\"$namespace\">" .
$payload .
"$nsPrefix:$operation>";
}
}
// serialize envelope
$soapmsg = $this->serializeEnvelope($payload,$this->requestHeaders,$usedNamespaces,$style,$use);
$this->debug("endpoint: $this->endpoint, soapAction: $soapAction, namespace: $namespace, style: $style, use: $use");
$this->debug('SOAP message length: ' . strlen($soapmsg) . ' contents: ' . substr($soapmsg, 0, 1000));
// send
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);
if($errstr = $this->getError()){
$this->debug('Error: '.$errstr);
return false;
} else {
$this->return = $return;
$this->debug('sent message successfully and got a(n) '.gettype($return).' back');
// fault?
if(is_array($return) && isset($return['faultcode'])){
$this->debug('got fault');
$this->setError($return['faultcode'].': '.$return['faultstring']);
$this->fault = true;
foreach($return as $k => $v){
$this->$k = $v;
$this->debug("$k = $v ");
}
return $return;
} else {
// array of return values
if(is_array($return)){
// multiple 'out' parameters
if(sizeof($return) > 1){
return $return;
}
// single 'out' parameter
return array_shift($return);
// nothing returned (ie, echoVoid)
} else {
return "";
}
}
}
}
/**
* get available data pertaining to an operation
*
* @param string $operation operation name
* @return array array of data pertaining to the operation
* @access public
*/
function getOperationData($operation){
if(isset($this->operations[$operation])){
return $this->operations[$operation];
}
$this->debug("No data for operation: $operation");
}
/**
* send the SOAP message
*
* Note: if the operation has multiple return values
* the return value of this method will be an array
* of those values.
*
* @param string $msg a SOAPx4 soapmsg object
* @param string $soapaction SOAPAction value
* @param integer $timeout set connection timeout in seconds
* @param integer $response_timeout set response timeout in seconds
* @return mixed native PHP types.
* @access private
*/
function send($msg, $soapaction = '', $timeout=0, $response_timeout=30) {
// detect transport
switch(true){
// http(s)
case ereg('^http',$this->endpoint):
$this->debug('transporting via HTTP');
if($this->persistentConnection == true && is_object($this->persistentConnection)){
$http =& $this->persistentConnection;
} else {
$http = new soap_transport_http($this->endpoint);
if ($this->persistentConnection) {
$http->usePersistentConnection();
}
}
$http->setContentType($this->getHTTPContentType(), $this->getHTTPContentTypeCharset());
$http->setSOAPAction($soapaction);
if($this->proxyhost && $this->proxyport){
$http->setProxy($this->proxyhost,$this->proxyport,$this->proxyusername,$this->proxypassword);
}
if($this->username != '' && $this->password != '') {
$http->setCredentials($this->username, $this->password, $this->authtype);
}
if($this->http_encoding != ''){
$http->setEncoding($this->http_encoding);
}
$this->debug('sending message, length: '.strlen($msg));
if(ereg('^http:',$this->endpoint)){
//if(strpos($this->endpoint,'http:')){
$this->responseData = $http->send($msg,$timeout,$response_timeout);
} elseif(ereg('^https',$this->endpoint)){
//} elseif(strpos($this->endpoint,'https:')){
//if(phpversion() == '4.3.0-dev'){
//$response = $http->send($msg,$timeout,$response_timeout);
//$this->request = $http->outgoing_payload;
//$this->response = $http->incoming_payload;
//} else
if (extension_loaded('curl')) {
$this->responseData = $http->sendHTTPS($msg,$timeout,$response_timeout);
} else {
$this->setError('CURL Extension, or OpenSSL extension w/ PHP version >= 4.3 is required for HTTPS');
}
} else {
$this->setError('no http/s in endpoint url');
}
$this->request = $http->outgoing_payload;
$this->response = $http->incoming_payload;
$this->appendDebug($http->getDebug());
// save transport object if using persistent connections
if ($this->persistentConnection) {
$http->clearDebug();
if (!is_object($this->persistentConnection)) {
$this->persistentConnection = $http;
}
}
if($err = $http->getError()){
$this->setError('HTTP Error: '.$err);
return false;
} elseif($this->getError()){
return false;
} else {
$this->debug('got response, length: '. strlen($this->responseData).' type: '.$http->incoming_headers['content-type']);
return $this->parseResponse($http->incoming_headers, $this->responseData);
}
break;
default:
$this->setError('no transport found, or selected transport is not yet supported!');
return false;
break;
}
}
/**
* processes SOAP message returned from server
*
* @param array $headers The HTTP headers
* @param string $data unprocessed response data from server
* @return mixed value of the message, decoded into a PHP type
* @access protected
*/
function parseResponse($headers, $data) {
$this->debug('Entering parseResponse() for data of length ' . strlen($data) . ' and type ' . $headers['content-type']);
if (!strstr($headers['content-type'], 'text/xml')) {
$this->setError('Response not of type text/xml');
return false;
}
if (strpos($headers['content-type'], '=')) {
$enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));
$this->debug('Got response encoding: ' . $enc);
if(eregi('^(ISO-8859-1|US-ASCII|UTF-8)$',$enc)){
$this->xml_encoding = strtoupper($enc);
} else {
$this->xml_encoding = 'US-ASCII';
}
} else {
// should be US-ASCII, but for XML, let's be pragmatic and admit UTF-8 is most common
$this->xml_encoding = 'UTF-8';
}
$this->debug('Use encoding: ' . $this->xml_encoding . ' when creating soap_parser');
$parser = new soap_parser($data,$this->xml_encoding,$this->operation,$this->decode_utf8);
// add parser debug data to our debug
$this->appendDebug($parser->getDebug());
// if parse errors
if($errstr = $parser->getError()){
$this->setError( $errstr);
// destroy the parser object
unset($parser);
return false;
} else {
// get SOAP headers
$this->responseHeaders = $parser->getHeaders();
// get decoded message
$return = $parser->get_response();
// add document for doclit support
$this->document = $parser->document;
// destroy the parser object
unset($parser);
// return decode message
return $return;
}
}
/**
* set the SOAP headers
*
* @param $headers string XML
* @access public
*/
function setHeaders($headers){
$this->requestHeaders = $headers;
}
/**
* get the response headers
*
* @return string
* @access public
*/
function getHeaders(){
return $this->responseHeaders;
}
/**
* set proxy info here
*
* @param string $proxyhost
* @param string $proxyport
* @param string $proxyusername
* @param string $proxypassword
* @access public
*/
function setHTTPProxy($proxyhost, $proxyport, $proxyusername = '', $proxypassword = '') {
$this->proxyhost = $proxyhost;
$this->proxyport = $proxyport;
$this->proxyusername = $proxyusername;
$this->proxypassword = $proxypassword;
}
/**
* if authenticating, set user credentials here
*
* @param string $username
* @param string $password
* @param string $authtype (basic|digest)
* @access public
*/
function setCredentials($username, $password, $authtype = 'basic') {
$this->username = $username;
$this->password = $password;
$this->authtype = $authtype;
}
/**
* use HTTP encoding
*
* @param string $enc
* @access public
*/
function setHTTPEncoding($enc='gzip, deflate'){
$this->http_encoding = $enc;
}
/**
* use HTTP persistent connections if possible
*
* @access public
*/
function useHTTPPersistentConnection(){
$this->persistentConnection = true;
}
/**
* gets the default RPC parameter setting.
* If true, default is that call params are like RPC even for document style.
* Each call() can override this value.
*
* This is no longer used.
*
* @access public
* @deprecated
*/
function getDefaultRpcParams() {
return $this->defaultRpcParams;
}
/**
* sets the default RPC parameter setting.
* If true, default is that call params are like RPC even for document style
* Each call() can override this value.
*
* This is no longer used.
*
* @param boolean $rpcParams
* @access public
* @deprecated
*/
function setDefaultRpcParams($rpcParams) {
$this->defaultRpcParams = $rpcParams;
}
/**
* dynamically creates proxy class, allowing user to directly call methods from wsdl
*
* @return object soap_proxy object
* @access public
*/
function getProxy(){
$evalStr = '';
foreach($this->operations as $operation => $opData){
if($operation != ''){
// create param string
$paramStr = '';
if(sizeof($opData['input']['parts']) > 0){
foreach($opData['input']['parts'] as $name => $type){
$paramStr .= "\$$name,";
}
$paramStr = substr($paramStr,0,strlen($paramStr)-1);
}
$opData['namespace'] = !isset($opData['namespace']) ? 'http://testuri.com' : $opData['namespace'];
$evalStr .= "function " . str_replace('.', '__', $operation) . " ($paramStr) {
// load params into array
\$params = array($paramStr);
return \$this->call('$operation',\$params,'".$opData['namespace']."','".(isset($opData['soapAction']) ? $opData['soapAction'] : '')."');
}";
unset($paramStr);
}
}
$r = rand();
$evalStr = 'class soap_proxy_'.$r.' extends soapclientw {
'.$evalStr.'
}';
//print "proxy class:
$evalStr
";
// eval the class
eval($evalStr);
// instantiate proxy object
eval("\$proxy = new soap_proxy_$r('');");
// transfer current wsdl data to the proxy thereby avoiding parsing the wsdl twice
$proxy->endpointType = 'wsdl';
$proxy->wsdlFile = $this->wsdlFile;
$proxy->wsdl = $this->wsdl;
$proxy->operations = $this->operations;
$proxy->defaultRpcParams = $this->defaultRpcParams;
// transfer other state
$proxy->username = $this->username;
$proxy->password = $this->password;
$proxy->authtype = $this->authtype;
$proxy->proxyhost = $this->proxyhost;
$proxy->proxyport = $this->proxyport;
$proxy->proxyusername = $this->proxyusername;
$proxy->proxypassword = $this->proxypassword;
$proxy->timeout = $this->timeout;
$proxy->response_timeout = $this->response_timeout;
$proxy->http_encoding = $this->http_encoding;
$proxy->persistentConnection = $this->persistentConnection;
$proxy->requestHeaders = $this->requestHeaders;
return $proxy;
}
/**
* gets the HTTP body for the current request.
*
* @param string $soapmsg The SOAP payload
* @return string The HTTP body, which includes the SOAP payload
* @access protected
*/
function getHTTPBody($soapmsg) {
return $soapmsg;
}
/**
* gets the HTTP content type for the current request.
*
* Note: getHTTPBody must be called before this.
*
* @return string the HTTP content type for the current request.
* @access protected
*/
function getHTTPContentType() {
return 'text/xml';
}
/**
* gets the HTTP content type charset for the current request.
* returns false for non-text content types.
*
* Note: getHTTPBody must be called before this.
*
* @return string the HTTP content type charset for the current request.
* @access protected
*/
function getHTTPContentTypeCharset() {
return $this->soap_defencoding;
}
/*
* whether or not parser should decode utf8 element content
*
* @return always returns true
* @access public
*/
function decodeUTF8($bool){
$this->decode_utf8 = $bool;
return true;
}
}
?>
echo " ",_LIST_ITEM_AUTHOR, ' ', htmlspecialchars($current->mname);
echo " ",_LIST_ITEM_DATE," " . date("Y-m-d",$current->itime);
echo " ",_LIST_ITEM_TIME," " . date("H:i",$current->itime);
echo "";
echo "
";
break;
}
}
// for batch operations: generates the index numbers for checkboxes
function listplug_nextBatchId() {
static $id = 0;
return $id++;
}
function listplug_table_commentlist($template, $type) {
switch($type) {
case 'HEAD':
echo "
" , htmlspecialchars($current->sddesc);
// show list of defined parts
$r = sql_query('SELECT stype FROM '.sql_table('skin').' WHERE sdesc='.$current->sdnumber . ' ORDER BY stype');
$types = array();
while ($o = sql_fetch_object($r))
array_push($types,$o->stype);
if (sizeof($types) > 0) {
$friendlyNames = SKIN::getFriendlyNames();
for ($i=0;$i' . helpHtml('skinpart'.$type) . ' ' . htmlspecialchars($friendlyNames[$type]) . "";
}
echo '
";
break;
}
}
/**
* Returns the Javascript code for a bookmarklet that works on most modern browsers
*
* @param blogid
*/
function getBookmarklet($blogid) {
global $CONF;
// normal
$document = 'document';
$bookmarkletline = "javascript:Q='';x=".$document.";y=window;if(x.selection){Q=x.selection.createRange().text;}else if(y.getSelection){Q=y.getSelection();}else if(x.getSelection){Q=x.getSelection();}wingm=window.open('";
$bookmarkletline .= $CONF['AdminURL'] . "bookmarklet.php?blogid=$blogid";
$bookmarkletline .="&logtext='+escape(Q)+'&loglink='+escape(x.location.href)+'&loglinktitle='+escape(x.title),'blogcmsbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');wingm.focus();";
return $bookmarkletline;
}
?>