﻿欢迎到北京来我能如何帮助你Preliminary Matter.  This text of Melville's Moby-Dick is based on the Hendricks House edition.It was prepared by Professor Eugene F. Irey at the University of Colorado.Any subsequent copies of this data must include this notice  and any publications resulting from analysis of this data mustinclude reference to Professor Irey's work.Etymology  (Supplied by a late consumptive usher to a grammar school.)The pale Ushei{rthreadbare} in coat, heart, body, and brain; I see him now.He was ever  dusting his old lexicons and grammars, with a queer handkerchief,mockingly embellished with all the gay flags of all the known nations of the world.He loved to dust his old grammars; it somehow mildly reminded him of his mortality.Extracts (supplied by a sub-sub-librarian.)It will be seen that this mere painstaking burrower and grubworm of a poor devil of a Sub-Sub appears to have gone through the long Vaticans and street-stalls of the earth, picking up whatever random allusions to whales he could anyways find in any book whatsoever, sacred or profane.Therefore you must not, in every case at least, take the higgledy-piggledywhale statements, however authentic, in these extracts, for veritable gospelcetology.  Far from it.  As touching the ancient authors generally, as well as the poets here appearing, these extracts are solely valuable or entertaining,as affording a glancing bird's eye view of what has been promiscuously said,thought, fancied, and sung of Leviathan, by many nations and generations,including our own.So fare thee well, poor devil of a Sub-Sub, whose commentator I am.Thou belongest to that hopeless, sallow tribe which no wine of this world will ever warm; and for whom even Pale Sherry would be too rosy-strong;but with whom one sometimes loves to sit, and feel poor-devilish, too;and grow convivial upon tears; and say to them bluntly, with full eyes and empty glasses, and in not altogether unpleasant sadness i{give} it up, sub-subs!For by how much the more pains ye take to please the world,by so much the more shall ye for ever go thankless!Would that I could clear out Hampton Court and the Tuileries for ye!  Butgulp down your tears and hie aloft to the royal-mast with your  hearts; foryour friends who have gone before are clearing out the seven-storied heavens,and making refugees of long-pampered  Gabriel, Michael, and Raphael, againstyour coming.  Here ye strike but splintered hearts together i{there}, ye shallstrike unsplinterable.. < chapter I 2  LOOMINGS >     Call me Ishmael.  Some years ago--never mind howlong precisely --having little or no money in my purse, and nothing particularto interest me on shore, I thought I would sail about a little and see thewatery part of the world.  It is a way I have of driving off the spleen, andregulating the circulation.  Whenever I find myself growing grim about themouth; whenever it is a damp, drizzly November in my soul; whenever I findmyself involuntarily pausing before coffin warehouses, and bringing up therear of every funeral I meet; and especially whenever my hypos get such anupper hand of me, that it requires a strong moral principle to prevent mefrom deliberately stepping into the street, and methodically knockingpeople's hats off--then, I account it high time to get to sea as soon as I can.     This is my substitute for pistol and ball.  With a philosophical flourishCato throws himself upon his sword; I quietly take to the ship.  There isnothing surprising in this.  If they but knew it, almost all men in theirdegree, some time or other, cherish very nearly the same feelings towards theocean with me.  There now is your insular city of the Manhattoes, belted roundby wharves as Indian isles by coral reefs--commerce surrounds it with her surf.     Right and left, the streets take you waterward.  Its extreme down-town isthe battery, where that noble mole is washed by waves, and cooled bybreezes, which a few hours previous were out of sight of land.  Look at thecrowds of water-gazers there.  Circumambulate the city of a dreamy Sabbathafternoon.  Go from Corlears Hook to Coenties Slip, and from thence, byWhitehall northward.  What do you see?--Posted like silent sentinels allaround the town, stand thousands upon thousands of mortal men fixed in oceanreveries.  Some leaning against the spiles; some seated upon the pier-heads;some looking over the bulwarks glasses!.. <p 2 >of ships from China; some high aloft in the rigging, as if striving to get astill better seaward peep.  But these are all landsmen; of week days pent upin lath and plaster--tied to counters, nailed to benches, clinched to desks.How then is this?  Are the green fields gone?  What do they here?  But look!here come more crowds, pacing straight for the water, and seemingly bound fora dive.  Strange!  Nothing will content them but the extremest limit of theland; loitering under the shady lee of yonder warehouses will not suffice.No.  They must get just as nigh the water as they possibly can without fallingin.  And there they stand--miles of them--leagues.  Inlanders all, they comefrom lanes and alleys, streets and avenues, --north, east, south, and west.Yet here they all unite.  Tell me, does the magnetic virtue of the needles ofthe compasses of all those ships attract them thither?  Once more.  Say, youare in the country; in some high land of lakes.  Take almost any path youplease, and ten to one it carries you down in a dale, and leaves you thereby a pool in the stream.  There is magic in it.  Let the most absent-mindedof men be plunged in his deepest reveries--stand that man on his legs, set hisfeet a-going, and he will infallibly lead you to water, if water there be inall that region.  Should you ever be athirst in the great American desert,try this experiment, if your caravan happen to be supplied with a metaphysicalprofessor.  Yes, as every one knows, meditation and water are wedded for ever.     But here is an artist.  He desires to paint you the dreamiest, shadiest,quietest, most enchanting bit of romantic landscape in all the valley of theSaco.  What is the chief element he employs?  There stand his trees, each witha hollow trunk, as if a hermit and a crucifix were within; and here sleepshis meadow, and there sleep his cattle; and up from yonder cottage goes asleepy smoke.  Deep into distant woodlands winds a mazy way, reaching tooverlapping spurs of mountains bathed in their hill-side blue.  But thoughthe picture lies thus tranced, and though this pine-tree shakes down its sighslike leaves upon this shepherd's head, yet all were vain, unless theshepherd's eye were fixed upon the magic stream before him.  Go visit thePrairies in June,.. <p 3 >when for scores on scores of miles you wade knee-deep among Tiger-lilies--whatis the one charm wanting? --Water --there is not a drop of water there!  WereNiagara but a cataract of sand, would you travel your thousand miles to seeit?  Why did the poor poet of Tennessee, upon suddenly receiving two handfulsof silver, deliberate whether to buy him a coat, which he sadly needed, orinvest his money in a pedestrian trip to Rockaway Beach?  Why is almost everyrobust healthy boy with a robust healthy soul in him, at some time or othercrazy to go to sea?  Why upon your first voyage as a passenger, did youyourself feel such a mystical vibration, when first told that you and yourship were now out of sight of land?  Why did the old Persians hold the seaholy?  Why did the Greeks give it a separate deity, and own brother of Jove?Surely all this is not without meaning.  And still deeper the meaning of thatstory of Narcissus, who because he could not grasp the tormenting, mild imagehe saw in the fountain, plunged into it and was drowned.  But that sameimage, we ourselves see in all rivers and oceans.  It is the image of theungraspable phantom of life; and this is the key to it all.  Now, when I saythat I am in the habit of going to sea whenever I begin to grow hazy about theeyes, and begin to be over conscious of my lungs, I do not mean to have itinferred that I ever go to sea as a passenger.  For to go as a passenger youmust needs have a purse, and a purse is but a rag unless you have somethingin it.  Besides, passengers get sea-sick --grow quarrelsome --don't sleep ofnights --do not enjoy themselves much, as a general thing; --no, I never go as apassenger; nor, though I am something of a salt, do I ever go to sea as aCommodore, or a Captain, or a Cook.  I abandon the glory and distinction ofsuch offices to those who like them.  For my part, I abominate all honorablerespectable toils, trials, and tribulations of every kind whatsoever.  It isquite as much as I can do to take care of myself, without taking care ofships, barques, brigs, schooners, and what not.  And as for going as cook, --though I confess there is considerable glory in that, a cook being a sort ofofficer on ship-board --yet, somehow, I never fancied broiling fowls; --thoughonce broiled, judiciously buttered, and judgmatically salted and peppered,there is no one who will.. <p 4 >speak more respectfully, not to say reverentially, of a broiled fowl than Iwill.  It is out of the idolatrous dotings of the old Egyptians upon broiledibis and roasted river horse, that you see the mummies of those creatures intheir huge bake-houses the pyramids.  No, when I go to sea, I go as a simplesailor, right before the mast, plumb down into the forecastle, aloft thereto the royal mast-head.  True, they rather order me about some, and make mejump from spar to spar, like a grasshopper in a May meadow.  And at first,this sort of thing is unpleasant enough.  It touches one's sense of honor,particularly if you come of an old established family in the land, the vanRensselaers, or Randolphs, or Hardicanutes.  And more than all, if justprevious to putting your hand into the tar-pot, you have been lording it as acountry schoolmaster, making the tallest boys stand in awe of you.  Thetransition is a keen one, I assure you, from the schoolmaster to a sailor,and requires a strong decoction of Seneca and the Stoics to enable you to grinand bear it.  But even this wears off in time.  What of it, if some old hunksof a sea-captain orders me to get a broom and sweep down the decks?  What doesthat indignity amount to, weighed, I mean, in the scales of the NewTestament?  Do you think the archangel Gabriel thinks anything the less of me,because I promptly and respectfully obey that old hunks in that particularinstance?  Who aint a slave?  Tell me that.  Well, then, however the oldsea-captains may order me about--however they may thump and punch me about, Ihave the satisfaction of knowing that it is all right; that everybody elseis one way or other served in much the same way -- either in a physical ormetaphysical point of view, that is; and so the universal thump is passedround, and all hands should rub each other's shoulder-blades, and becontent.  Again, I always go to sea as a sailor, because they make a point ofpaying me for my trouble, whereas they never pay passengers a single pennythat I ever heard of.  On the contrary, passengers themselves must pay.  Andthere is all the difference in the world between paying and being paid.  Theact of paying is perhaps the most uncomfortable infliction that the twoorchard.. <p 5 >thieves entailed upon us.  But being paid, --what will compare with it?  Theurbane activity with which a man receives money is really marvellous,considering that we so earnestly believe money to be the root of all earthlyills, and that on no account can a monied man enter heaven.  Ah!  howcheerfully we consign ourselves to perdition!  Finally, I always go to sea asa sailor, because of the wholesome exercise and pure air of the forecastledeck.  For as in this world, head winds are far more prevalent than windsfrom astern (that is, if you never violate the Pythagorean maxim), so forthe most part the Commodore on the quarter-deck gets his atmosphere at secondhand from the sailors on the forecastle.  He thinks he breathes it first; butnot so.  In much the same way do the commonalty lead their leaders in manyother things, at the same time that the leaders little suspect it.  Butwherefore it was that after having repeatedly smelt the sea as a merchantsailor, I should now take it into my head to go on a whaling voyage; thisthe invisible police officer of the Fates, who has the constant surveillanceof me, and secretly dogs me, and influences me in some unaccountable way --hecan better answer than any one else.  And, doubtless, my going on this whalingvoyage, formed part of the grand programme of Providence that was drawn up along time ago.  It came in as a sort of brief interlude and solo between moreextensive performances.  I take it that this part of the bill must have runsomething like this: Grand Contested Election for the Presidency of theUnited States.  Whaling Voyage by one Ishmael.  Bloody Battle inAffghanistan.  Though I cannot tell why it was exactly that those stagemanagers, the Fates, put me down for this shabby part of a whaling voyage,when others were set down for magnificent parts in high tragedies, and shortand easy parts in genteel comedies, and jolly parts in farces --though Icannot tell why this was exactly; yet, now that I recall all thecircumstances, I think I can see a little into the springs and motives whichbeing cunningly presented to me under various disguises, induced me to setabout.. <p 6 >performing the part I did, besides cajoling me into the delusion that it wasa choice resulting from my own unbiased freewill and discriminating judgment.chief among these motives was the overwhelming idea of the great whalehimself.  Such a portentous and mysterious monster roused all my curiosity.Then the wild and distant seas where he rolled his island bulk; theundeliverable, nameless perils of the whale; these, with all the attendingmarvels of a thousand Patagonian sights and sounds, helped to sway me to mywish.  With other men, perhaps, such things would not have been inducements;but as for me, I am tormented with an everlasting itch for things remote.  Ilove to sail forbidden seas, and land on barbarous coasts.  Not ignoring whatis good, I am quick to perceive a horror, and could still be social withit--would they let me --since it is but well to be on friendly terms with allthe inmates of the place one lodges in.  By reason of these things, then, thewhaling voyage was welcome; the great flood-gates of the wonder-world swungopen, and in the wild conceits that swayed me to my purpose, two and twothere floated into my inmost soul, endless processions of the whale, and, midmost of them all, one grand hooded phantom, like a snow hill in the air... <p 6 >.. < chapter ii 24  THE CARPET-BAG >     I stuffed a shirt or two into my oldcarpet-bag, tucked it under my arm, and started for Cape Horn and thePacific.  Quitting the good city of old Manhatto, I duly arrived in NewBedford.  It was on a Saturday night in December.  Much was I disappointedupon learning that the little packet for Nantucket had already sailed, andthat no way of reaching that place would offer, till the following Monday.  Asmost young candidates for the pains and penalties of whaling.. <p 7 >stop at this same New Bedford, thence to embark on their voyage, it may aswell be related that I, for one, had no idea of so doing.  For my mind wasmade up to sail in no other than a Nantucket craft, because there was a fine,boisterous something about everything connected with that famous old island,which amazingly pleased me.  Besides though New Bedford has of late beengradually monopolizing the business of whaling, and though in this matter poorold Nantucket is now much behind her, yet Nantucket was her great original--the Tyre of this Carthage; --the place where the first dead American whalewas stranded.  Where else but from Nantucket did those aboriginal whalemen,the Red-Men, first sally out in canoes to give chase to the Leviathan?  Andwhere but from Nantucket, too, did that first adventurous little sloop putforth, partly laden with imported cobble-stones --so goes the story --to throwat the whales, in order to discover when they were nigh enough to risk aharpoon from the bowsprit?  Now having a night, a day, and still another nightfollowing before me in New Bedford, ere I could embark for my destined port,it became a matter of concernment where I was to eat and sleep meanwhile.  Itwas a very dubious-looking, nay, a very dark and dismal night, bitingly coldand cheerless.  I knew no one in the place.  With anxious grapnels I hadsounded my pocket, and only brought up a few pieces of silver, --So,wherever you go, Ishmael, said I to myself, as I stood in the middle of adreary street shouldering my bag, and comparing the gloom towards the northwith the darkness towards the south --wherever in your wisdom you may concludeto lodge for the night, my dear Ishmael, be sure to inquire the price, anddon't be too particular.  With halting steps I paced the streets, and passedthe sign of The Crossed Harpoons --but it looked too expensive and jollythere.  Further on, from the bright red windows of the Sword-Fish Inn, therecame such fervent rays, that it seemed to have melted the packed snow and icefrom before the house, for everywhere else the congealed frost lay ten inchesthick in a hard, asphaltic pavement, --rather weary for me, when I struck myfoot against the flinty projections, because from hard, remorseless.. <p 8 >service the soles of my boots were in a most miserable plight.  Too expensiveand jolly, again thought I, pausing one moment to watch the broad glare inthe street, and hear the sounds of the tinkling glasses within.  But go on,Ishmael, said I at last; don't you hear?  get away from before the door;your patched boots are stopping the way.  So on I went.  I now by instinctfollowed the streets that took me waterward, for there, doubtless, were thecheapest, if not the cheeriest inns.  Such dreary streets!  Blocks ofblackness, not houses, on either hand, and here and there a candle, like acandle moving about in a tomb.  At this hour of the night, of the last day ofthe week, that quarter of the town proved all but deserted.  But presently Icame to a smoky light proceeding from a low, wide building, the door of whichstood invitingly open.  It had a careless look, as if it were meant for theuses of the public; so, entering, the first thing I did was to stumble overan ash-box in the porch.  Ha!  thought I, ha, as the flying particles almostchoked me, are these ashes from that destroyed city, Gomorrah?  But TheCrossed Harpoons, and The Sword-Fish? --this, then, must needs be the signof The Trap.  However, I picked myself up and hearing a loud voice within,pushed on and opened a second, interior door.  It seemed the great BlackParliament sitting in Tophet.  A hundred black faces turned round in theirrows to peer; and beyond, a black Angel of Doom was beating a book in apulpit.  It was a negro church; and the preacher's text was about theblackness of darkness, and the weeping and wailing and teeth-gnashingthere.  Ha, Ishmael, muttered I, backing out, Wretched entertainment at thesign of The Trap!  Moving on, I at last came to a dim sort of light not farfrom the docks, and heard a forlorn creaking in the air; and looking up,saw a swinging sign over the door with a white painting upon it, faintlyrepresenting a tall straight jet of misty spray, and these words underneath-- The Spouter-Inn: --Peter Coffin.  Coffin? --Spouter? --Rather ominous in thatparticular connexion, thought I. But it is a common name in Nantucket,they say, and I suppose this Peter here is an emigrant from there.  As thelight looked so dim, and the place, for the time, looked.. <p 9 >quiet enough, and the dilapidated little wooden house itself looked as if itmight have been carted here from the ruins of some burnt district, and as theswinging sign had a poverty-stricken sort of creak to it, I thought that herewas the very spot for cheap lodgings, and the best of pea coffee.  It was aqueer sort of place --a gable-ended old house, one side palsied as it were, andleaning over sadly.  It stood on a sharp bleak corner, where that tempestuouswind Euroclydon kept up a worse howling than ever it did about poor Paul'stossed craft.  Euroclydon, nevertheless, is a mighty pleasant zephyr to anyone in-doors, with his feet on the hob quietly toasting for bed.  In judgingof that tempestuous wind called Euroclydon, says an old writer --of whoseworks I possess the only copy extant -- it maketh a marvellous difference,whether thou lookest out at it from a glass window where the frost is all onthe outside, or whether thou observest it from that sashless window, wherethe frost is on both sides, and of which the wight Death is the onlyglazier.  True enough, thought I, as this passage occurred to my mind --oldblack-letter, thou reasonest well.  Yes, these eyes are windows, and thisbody of mine is the house.  What a pity they didn't stop up the chinks and thecrannies though, and thrust in a little lint here and there.  But it's toolate to make any improvements now.  The universe is finished; the copestoneis on, and the chips were carted off a million years ago.  Poor Lazarusthere, chattering his teeth against the curbstone for his pillow, and shakingoff his tatters with his shiverings, he might plug up both ears with rags,and put a corn-cob into his mouth, and yet that would not keep out thetempestuous Euroclydon.  Euroclydon!  says old Dives, in his red silkenwrapper --(he had a redder one afterwards) pooh, pooh!  What a fine frostynight; how Orion glitters; what northern lights!  Let them talk of theiroriental summer climes of everlasting conservatories; give me the privilegeof making my own summer with my own coals.  But what thinks Lazarus?  Can hewarm his blue hands by holding them up to the grand northern lights?  Wouldnot Lazarus rather be in Sumatra than here?  Would he not far rather lay himdown lengthwise along the line of the equator; yea, ye.. <p 10 >gods!  go down to the fiery pit itself, in order to keep out this frost?  Now,that Lazarus should lie stranded there on the curbstone before the door ofDives, this is more wonderful than that an iceberg should be moored to one ofthe Moluccas.  Yet Dives himself, he too lives like a Czar in an ice palacemade of frozen sighs, and being a president of a temperance society, he onlydrinks the tepid tears of orphans.  But no more of this blubbering now, we aregoing a-whaling, and there is plenty of that yet to come.  Let us scrape theice from our frosted feet, and see what sort of a place this Spouter maybe... <p 10 >.. < chapter iii 14  THE SPOUTER-INN >     Entering that gable-ended Spouter-Inn,you found yourself in a wide, low, straggling entry with old-fashionedwainscots, reminding one of the bulwarks of some condemned old craft.  On oneside hung a very large oil-painting so thoroughly besmoked, and every waydefaced, that in the unequal cross-lights by which you viewed it, it wasonly by diligent study and a series of systematic visits to it, and carefulinquiry of the neighbors, that you could any way arrive at an understandingof its purpose.  such unaccountable masses of shades and shadows, that atfirst you almost thought some ambitious young artist, in the time of the NewEngland hags, had endeavored to delineate chaos bewitched.  But by dint ofmuch and earnest contemplation, and oft repeated ponderings, and especially bythrowing open the little window towards the back of the entry, you at lastcome to the conclusion that such an idea, however wild, might not bealtogether unwarranted.  But what most puzzled and confounded you was a long,limber, portentous, black mass of something hovering in the.. <p 11 >centre of the picture over three blue, dim, perpendicular lines floating in anameless yeast.  A boggy, soggy, squitchy picture truly, enough to drive anervous man distracted.  Yet was there a sort of indefinite, half-attained,unimaginable sublimity about it that fairly froze you to it, till youinvoluntarily took an oath with yourself to find out what that marvellouspainting meant.  Ever and anon a bright, but, alas, deceptive idea would dartyou through. --It's the Black Sea in a midnight gale. --It's the unnaturalcombat of the four primal elements. --It's a blasted heath. --It's a Hyperboreanwinter scene. --It's the breaking-up of the ice-bound stream of Time.  But atlast all these fancies yielded to that one portentous something in thepicture's midst.  That once found out, and all the rest were plain.  But stop;does it not bear a faint resemblance to a gigantic fish?  even the greatleviathan himself?  In fact, the artist's design seemed this: a final theoryof my own, partly based upon the aggregated opinions of many aged personswith whom I conversed upon the subject.  The picture represents a Cape-Hornerin a great hurricane; the half-foundered ship weltering there with its threedismantled masts alone visible; and an exasperated whale, purposing to springclean over the craft, is in the enormous act of impaling himself upon thethree mast-heads.  The opposite wall of this entry was hung all over with aheathenish array of monstrous clubs and spears.  Some were thickly set withglittering teeth resembling ivory saws; others were tufted with knots ofhuman hair; and one was sickle-shaped, with a vast handle sweeping round likethe segment made in the new-mown grass by a long-armed mower.  You shudderedas you gazed, and wondered what monstrous cannibal and savage could ever havegone a death-harvesting with such a hacking, horrifying implement.  Mixed withthese were rusty old whaling lances and harpoons all broken and deformed.Some were storied weapons.  With this once long lance, now wildly elbowed,fifty years ago did Nathan Swain kill fifteen whales between a sunrise and asunset.  And that harpoon--so like a corkscrew now--was flung in Javan seas,and run away with by a whale, years afterward slain off the Cape of Blanco.The original iron entered.. <p 12 >nigh the tail, and, like a restless needle sojourning in the body of a man,travelled full forty feet, and at last was found imbedded in the hump.Crossing this dusky entry, and on through yon low-arched way --cut throughwhat in old times must have been a great central chimney with fire-places allround --you enter the public room.  A still duskier place is this, with suchlow ponderous beams above, and such old wrinkled planks beneath, that youwould almost fancy you trod some old craft's cockpits, especially of such ahowling night, when this corner-anchored old ark rocked so furiously.  On oneside stood a long, low, shelf-like table covered with cracked glass cases,filled with dusty rarities gathered from this wide world's remotest nooks.Projecting from the further angle of the room stands a dark-looking den --thebar-- a rude attempt at a right whale's head.  Be that how it may, therestands the vast arched bone of the whale's jaw, so wide, a coach mightalmost drive beneath it.  within are shabby shelves, ranged round with olddecanters, bottles, flasks; and in those jaws of swift destruction, likeanother cursed Jonah (by which name indeed they called him), bustles alittle withered old man, who, for their money, dearly sells the sailorsdeliriums and death.  Abominable are the tumblers into which he pours hispoison.  Though true cylinders without --within, the villanous green gogglingglasses deceitfully tapered downwards to a cheating bottom.  Parallelmeridians rudely pecked into the glass, surround these footpads' goblets.Fill to this mark, and your charge is but a penny; to this a penny more;and so on to the full glass --the Cape Horn measure, which you may gulp downfor a shilling.  Upon entering the place I found a number of young seamengathered about a table, examining by a dim light divers specimens ofskrimshander.  I sought the landlord, and telling him I desired to beaccommodated with a room, received for answer that his house was full --not abed unoccupied.  But avast, he added, tapping his forehead, you haint noobjections to sharing a harpooneer's blanket, have ye?  I s'pose you are goin'a whalin', so you'd better get used to that sort of thing... <p 13 >I told him that I never liked to sleep two in a bed; that if I should ever doso, it would depend upon who the harpooneer might be, and that if he (thelandlord) really had no other place for me, and the harpooneer was notdecidedly objectionable, why rather than wander further about a strange townon so bitter a night, I would put up with the half of any decent man'sblanket.  I thought so.  All right; take a seat.  Supper? --you want supper?Supper 'll be ready directly.  I sat down on an old wooden settle, carved allover like a bench on the Battery.  At one end a ruminating tar was stillfurther adorning it with his jack-knife, stooping over and diligently workingaway at the space between his legs.  he was trying his hand at a ship underfull sail, but he didn't make much headway, I thought.  At last some four orfive of us were summoned to our meal in an adjoining room.  It was cold asIceland --no fire at all  --the landlord said he couldn't afford it.  Nothingbut two dismal tallow candles, each in a winding sheet.  We were fain tobutton up our monkey jackets, and hold to our lips cups of scalding tea withour half frozen fingers.  But the fare was of the most substantial kind --notonly meat and potatoes, but dumplings; good heavens!  dumplings for supper!One young fellow in a green box coat, addressed himself to these dumplings ina most direful manner.  My boy, said the landlord, you'll have thenightmare to a dead sartainty.  Landlord, I whispered, that aint theharpooneer, is it?  Oh, no, said he, looking a sort of diabolically funny,the harpooneer is a dark complexioned chap.  He never eats dumplings, hedon't--he eats nothing but steaks, and likes 'em rare.  The devil he does,says I. Where is that harpooneer?  Is he here?  He'll be here afore long,was the answer.  I could not help it, but I began to feel suspicious of thisdark complexioned harpooneer.  At any rate, I made up my mind that if itso turned out that we should sleep together, he must undress and get into bedbefore I did... <p 14 >Supper over, the company went back to the bar-room, when, knowing not whatelse to do with myself, I resolved to spend the rest of the evening as alooker on.  Presently a rioting noise was heard without.  Starting up, thelandlord cried, That's the Grampus's crew.  I seed her reported in theoffing this morning; a three years' voyage, and a full ship.  Hurrah, boys;now we'll have the latest news from the Feegees.  A tramping of sea boots washeard in the entry; the door was flung open, and in rolled a wild set ofmariners enough.  Enveloped in their shaggy watch coats, and with theirheads muffled in woollen comforters, all bedarned and ragged, and theirbeards stiff with icicles, they seemed an eruption of bears from Labrador.They had just landed from their boat, and this was the first house theyentered.  No wonder, then, that they made a straight wake for the whale'smouth --the bar --when the wrinkled little old Jonah, there officiating, soonpoured them out brimmers all round.  One complained of a bad cold in his head,upon which Jonah mixed him a pitch-like potion of gin and molasses, whichhe swore was a sovereign cure for all colds and catarrhs whatsoever, nevermind of how long standing, or whether caught off the coast of Labrador, oron the weather side of an ice-island.  The liquor soon mounted into theirheads, as it generally does even with the arrantest topers newly landed fromsea, and they began capering about most obstreperously.  I observed, however,that one of them held somewhat aloof, and though he seemed desirous not tospoil the hilarity of his shipmates by his own sober face, yet upon the wholehe refrained from making as much noise as the rest.  This man interested meat once; and since the sea-gods had ordained that he should soon become myshipmate (though but a sleeping-partner one, so far as this narrative isconcerned), I will here venture upon a little description of him.  He stoodfull six feet in height, with noble shoulders, and a chest like acoffer-dam.  I have seldom seen such brawn in a man.  His face was deeplybrown and burnt, making his white teeth dazzling by the contrast; while inthe deep shadows of his eyes floated some reminiscences that did not seem togive him much joy.  His voice at once announced.. <p 15 >that he was a Southerner, and from his fine stature, I thought he must beone of those tall mountaineers from the Alleganian Ridge in Virginia.  Whenthe revelry of his companions had mounted to its height, this man slippedaway unobserved, and I saw no more of him till he became my comrade on thesea.  In a few minutes, however, he was missed by his shipmates, and being,it seems, for some reason a huge favorite with them, they raised a cry ofBulkington!  Bulkington!  where's Bulkington?  and darted out of the house inpursuit of him.  It was now about nine o'clock, and the room seeming almostsupernaturally quiet after these orgies, I began to congratulate myself upona little plan that had occurred to me just previous to the entrance of theseamen.  No man prefers to sleep two in a bed.  In fact, you would a good dealrather not sleep with your own brother.  I don't know how it is, but peoplelike to be private when they are sleeping.  And when it comes to sleeping withan unknown stranger, in a strange inn, in a strange town, and that strangera harpooneer, then your objections indefinitely multiply.  Nor was there anyearthly reason why I as a sailor should sleep two in a bed, more than anybodyelse; for sailors no more sleep two in a bed at sea, than bachelor Kings doashore.  To be sure they all sleep together in one apartment, but you haveyour own hammock, and cover yourself with your own blanket, and sleep in yourown skin.  The more I pondered over this harpooneer, the more I abominatedthe thought of sleeping with him.  It was fair to presume that being aharpooneer, his linen or woollen, as the case might be, would not be of thetidiest, certainly none of the finest.  I began to twitch all over.  Besides,it was getting late, and my decent harpooneer ought to be home and goingbedwards.  Suppose now, he should tumble in upon me at midnight --how could Itell from what vile hole he had been coming?  Landlord!  I've changed my mindabout that harpooneer. -- I shan't sleep with him.  I'll try the bench here.just as you please; i'm sorry i cant spare ye a tablecloth for a mattress,and it's a plaguy rough board here --feeling of the knots and notches.  Butwait a bit, Skrimshander; I've.. <p 16 >got a carpenter's plane there in the bar --wait, I say, and I'll make ye snugenough.  So saying he procured the plane; and with his old silk handkerchieffirst dusting the bench, vigorously set to planing away at my bed, the whilegrinning like an ape.  The shavings flew right and left; till at last theplane-iron came bump against an indestructible knot.  The landlord was nearspraining his wrist, and I told him for heaven's sake to quit -- the bed wassoft enough to suit me, and I did not know how all the planing in the worldcould make eider down of a pine plank.  So gathering up the shavings withanother grin, and throwing them into the great stove in the middle of theroom, he went about his business, and left me in a brown study.  I now tookthe measure of the bench, and found that it was a foot too short; but thatcould be mended with a chair.  But it was a foot too narrow, and the otherbench in the room was about four inches higher than the planed one --so therewas no yoking them.  I then placed the first bench lengthwise along the onlyclear space against the wall, leaving a little interval between, for my backto settle down in.  But I soon found that there came such a draught of coldair over me from under the sill of the window, that this plan would never doat all, especially as another current from the rickety door met the one fromthe window, and both together formed a series of small whirlwinds in theimmediate vicinity of the spot where I had thought to spend the night.  Thedevil fetch that harpooneer, thought I, but stop, couldn't I steal a march onhim --bolt his door inside, and jump into his bed, not to be wakened by themost violent knockings?  it seemed no bad idea; but upon second thoughts Idismissed it.  For who could tell but what the next morning, so soon as Ipopped out of the room, the harpooneer might be standing in the entry, allready to knock me down!  Still, looking around me again, and seeing no possiblechance of spending a sufferable night unless in some other person's bed, Ibegan to think that after all I might be cherishing unwarrantable prejudicesagainst this unknown harpooneer.  Thinks I, I'll wait awhile; he must bedropping in before long.  I'll have a good look at him then, and perhaps wemay become jolly good bedfellows after all --there's no telling... <p 17 >But though the other boarders kept coming in by ones, twos, and threes, andgoing to bed, yet no sign of my harpooneer.  Landlord!  said I, what sort ofa chap is he --does he always keep such late hours?  It was now hard upontwelve o'clock.  The landlord chuckled again with his lean chuckle, andseemed to be mightily tickled at something beyond my comprehension.  No, heanswered, generally he's an early bird -- airley to bed and airley to rise--yes, he's the bird what catches the worm. --But to-night he went out apeddling, you see, and I don't see what on airth keeps him so late, unless,may be, he can't sell his head.  Can't sell his head? --What sort of abamboozingly story is this you are telling me?  getting into a towering rage.     Do you pretend to say, landlord, that this harpooneer is actually engagedthis blessed Saturday night, or rather Sunday morning, in peddling his headaround this town?  That's precisely it, said the landlord, and I told himhe couldn't sell it here, the market's overstocked.  With what?  shouted I.     With heads to be sure; ain't there too many heads in the world?  I tellyou what it is, landlord, said I, quite calmly, you'd better stop spinningthat yarn to me --I'm not green.  May be not, taking out a stick andwhittling a toothpick, but I rayther guess you'll be done brown if that ereharpooneer hears you a slanderin' his head.  I'll break it for him, said I,now flying into a passion again at this unaccountable farrago of thelandlord's.  It's broke a'ready, said he.  Broke, said I -- broke, do youmean?  Sartain, and that's the very reason he can't sell it, I guess.     Landlord, said I, going up to him as cool as Mt.  Hecla in a snow storm,-- landlord, stop whittling.  You and I must understand one another, andthat too without delay.  I come to your house and want a bed; you tell me youcan only give me half a one; that the other half belongs to a certainharpooneer.  And about this harpooneer, whom I have not yet seen, youpersist in telling me the most mystifying and exasperating stories, tendingto beget in me an uncomfortable feeling towards the man whom.. <p 18 >you design for my bedfellow --a sort of connexion, landlord, which is anintimate and confidential one in the highest degree.  I now demand of you tospeak out and tell me who and what this harpooneer is, and whether I shall bein all respects safe to spend the night with him.  And in the first place,you will be so good as to unsay that story about selling his head, which iftrue I take to be good evidence that this harpooneer is stark mad, and I'veno idea of sleeping with a madman; and you, sir, you I mean, landlord, you,sir, by trying to induce me to do so knowingly, would thereby render yourselfliable to a criminal prosecution.  Wall, said the landlord, fetching a longbreath, that's a purty long sarmon for a chap that rips a little now andthen.  But be easy, be easy, this here harpooneer I have been tellin' you ofhas just arrived from the south seas, where he bought up a lot of 'balmed NewZealand heads (great curios, you know), and he's sold all on 'em but one,and that one he's trying to sell to-night, cause to-morrow's Sunday, and itwould not do to be sellin' human heads about the streets when folks is goin'to churches.  He wanted to, last Sunday, but I stopped him just as he wasgoin' out of the door with four heads strung on a string, for all the airthlike a string of inions.  This account cleared up the otherwise unaccountablemystery, and showed that the landlord, after all, had had no idea of foolingme --but at the same time what could I think of a harpooneer who stayed out aSaturday night clean into the holy Sabbath, engaged in such a cannibalbusiness as selling the heads of dead idolators?  Depend upon it, landlord,that harpooneer is a dangerous man.  He pays reg'lar, was the rejoinder.     But come, it's getting dreadful late, you had better be turning flukes --it'sa nice bed: Sal and me slept in that ere bed the night we were spliced.There's plenty room for two to kick about in that bed; it's an almighty bigbed that.  Why, afore we give it up, Sal used to put our Sam and littleJohnny in the foot of it.  But I got a dreaming and sprawling about one night,and somehow, Sam got pitched on the floor, and came near breaking his arm.After.. <p 19 >that, Sal said it wouldn't do.  Come along here, I'll give ye a glim in ajiffy; and so saying he lighted a candle and held it towards me, offering tolead the way.  But I stood irresolute; when looking at a clock in the corner,he exclaimed I vum it's Sunday --you won't see that harpooneer to-night; he'scome to anchor somewhere --come along then; do come; won't ye come?  Iconsidered the matter a moment, and then up stairs we went, and I wasushered into a small room, cold as a clam, and furnished, sure enough, with aprodigious bed, almost big enough indeed for any four harpooneers to sleepabreast.  There, said the landlord, placing the candle on a crazy old seachest that did double duty as a wash-stand and centre table; there, makeyourself comfortable now, and good night to ye.  I turned round from eyeingthe bed, but he had disappeared.  Folding back the counterpane, I stoopedover the bed.  Though none of the most elegant, it yet stood the scrutinytolerably well.  I then glanced round the room; and besides the bedstead andcentre table, could see no other furniture belonging to the place, but arude shelf, the four walls, and a papered fireboard representing a manstriking a whale.  Of things not properly belonging to the room, there was ahammock lashed up, and thrown upon the floor in one corner; also a largeseaman's bag, containing the harpooneer's wardrobe, no doubt in lieu of aland trunk.  Likewise, there was a parcel of outlandish bone fish hooks on theshelf over the fire-place, and a tall harpoon standing at the head of thebed.  But what is this on the chest?  I took it up, and held it close to thelight, and felt it, and smelt it, and tried every way possible to arrive atsome satisfactory conclusion concerning it.  I can compare it to nothing but alarge door mat, ornamented at the edges with little tinkling tags somethinglike the stained porcupine quills round an Indian moccasin.  There was a holeor slit in the middle of this mat, as you see the same in South Americanponchos.  But could it be possible that any sober harpooneer would get intoa door mat, and parade the streets of any Christian town in that sort ofguise?  I put it on, to try it, and it weighed me down like a hamper, beinguncommonly shaggy and thick, and I thought a little damp, as though this.. <p 20 >mysterious harpooneer had been wearing it of a rainy day.  I went up in it toa bit of glass stuck against the wall, and I never saw such a sight in mylife.  I tore myself out of it in such a hurry that I gave myself a kink inthe neck.  I sat down on the side of the bed, and commenced thinking aboutthis head-peddling harpooneer, and his door mat.  After thinking some time onthe bed-side, I got up and took off my monkey jacket, and then stood in themiddle of the room thinking.  I then took off my coat, and thought a littlemore in my shirt sleeves.  But beginning to feel very cold now, half undressedas I was, and remembering what the landlord said about the harpooneer's notcoming home at all that night, it being so very late, I made no more ado,but jumped out of my pantaloons and boots, and then blowing out the lighttumbled into bed, and commended myself to the care of heaven.  Whether thatmattress was stuffed with corn-cobs or broken crockery, there is no telling,but I rolled about a good deal, and could not sleep for a long time.  Atlast I slid off into a light doze, and had pretty nearly made a good offingtowards the land of Nod, when I heard a heavy footfall in the passage, andsaw a glimmer of light come into the room from under the door.  Lord save me,thinks I, that must be the harpooneer, the infernal head-peddler.  But I layperfectly still, and resolved not to say a word till spoken to.  Holding alight in one hand, and that identical New Zealand head in the other, thestranger entered the room, and without looking towards the bed, placed hiscandle a good way off from me on the floor in one corner, and then beganworking away at the knotted cords of the large bag I before spoke of as beingin the room.  I was all eagerness to see his face, but he kept it averted forsome time while employed in unlacing the bag's mouth.  This accomplished,however, he turned round --when, good heavens!  what a sight!  Such a face!  Itwas of a dark purplish, yellow color, here and there stuck over with large,blackish looking squares.  Yes, it's just as I thought, he's a terriblebedfellow; he's been in a fight, got dreadfully cut, and here he is, justfrom the surgeon.  But at that moment he chanced to turn his face so towardsthe light, that I plainly saw they could not be sticking-plasters at all,.. <p 21 >those black squares on his cheeks.  they were stains of some sort or other.  Atfirst I knew not what to make of this; but soon an inkling of the truthoccurred to me.  I remembered a story of a white man --a whaleman too--who,falling among the cannibals, had been tattooed by them.  I concluded that thisharpooneer, in the course of his distant voyages, must have met with asimilar adventure.  And what is it, thought I, after all!  It's only hisoutside; a man can be honest in any sort of skin.  But then, what to make ofhis unearthly complexion, that part of it, I mean, lying round about, andcompletely independent of the squares of tattooing.  To be sure, it might benothing but a good coat of tropical tanning; but I never heard of a hot sun'stanning a white man into a purplish yellow one.  However, I had never beenin the South Seas; and perhaps the sun there produced these extraordinaryeffects upon the skin.  Now, while all these ideas were passing through melike lightning, this harpooneer never noticed me at all.  But, after somedifficulty having opened his bag, he commenced fumbling in it, and presentlypulled out a sort of tomahawk, and a seal-skin wallet with the hair on.Placing these on the old chest in the middle of the room, he then took theNew Zealand head --a ghastly thing enough --and crammed it down into the bag.He now took off his hat --a new beaver hat --when I came nigh singing out withfresh surprise.  There was no hair on his head --none to speak of at least --nothing but a small scalp-knot twisted up on his forehead.  His bald purplishhead now looked for all the world like a mildewed skull.  Had not the strangerstood between me and the door, I would have bolted out of it quicker than everI bolted a dinner.  Even as it was, I thought something of slipping out of thewindow, but it was the second floor back.  I am no coward, but what to makeof this head-peddling purple rascal altogether passed my comprehension.Ignorance is the parent of fear, and being completely nonplussed andconfounded about the stranger, i confess i was now as much afraid of him as ifit was the devil himself who had thus broken into my room at the dead ofnight.  In fact, I was so afraid of him that I was not game enough just thento address him, and demand a satisfactory answer concerning what seemedinexplicable in him... <p 22 >Meanwhile, he continued the business of undressing, and at last showed hischest and arms.  As I live, these covered parts of him were checkered withthe same squares as his face; his back, too, was all over the same darksquares; he seemed to have been in a Thirty Years' War, and just escaped fromit with a sticking-plaster shirt.  Still more, his very legs were marked, asif a parcel of dark green frogs were running up the trunks of young palms.  Itwas now quite plain that he must be some abominable savage or other shippedaboard of a whaleman in the South Seas, and so landed in this Christiancountry.  I quaked to think of it.  A peddler of heads too --perhaps the headsof his own brothers.  He might take a fancy to mine --heavens!  look at thattomahawk!  But there was no time for shuddering, for now the savage went aboutsomething that completely fascinated my attention, and convinced me that hemust indeed be a heathen.  Going to his heavy grego, or wrapall, ordreadnaught, which he had previously hung on a chair, he fumbled in thepockets, and produced at length a curious little deformed image with a hunchon its back, and exactly the color of a three days' old Congo baby.Remembering the embalmed head, at first I almost thought that this blackmanikin was a real baby preserved in some similar manner.  But seeing that itwas not at all limber, and that it glistened a good deal like polished ebony,I concluded that it must be nothing but a wooden idol, which indeed itproved to be.  For now the savage goes up to the empty fireplace, and removingthe papered fire-board, sets up this little hunchbacked image, like a tenpin,between the andirons.  the chimney jambs and all the bricks inside were verysooty, so that I thought this fire-place made a very appropriate little shrineor chapel for his Congo idol.  I now screwed my eyes hard towards the halfhidden image, feeling but ill at ease meantime --to see what was next tofollow.  First he takes about a double handful of shavings out of his gregopocket, and places them carefully before the idol; then laying a bit of shipbiscuit on top and applying the flame from the lamp, he kindled the shavingsinto a sacrificial blaze.  Presently, after many hasty snatches into thefire, and still hastier.. <p 23 >withdrawals of his fingers (whereby he seemed to be scorching them badly),he at last succeeded in drawing out the biscuit; then blowing off the heatand ashes a little, he made a polite offer of it to the little negro.  But thelittle devil did not seem to fancy such dry sort of fare at all; he nevermoved his lips.  All these strange antics were accompanied by still strangerguttural noises from the devotee, who seemed to be praying in a sing-song orelse singing some pagan psalmody or other, during which his face twitchedabout in the most unnatural manner.  At last extinguishing the fire, he tookthe idol up very unceremoniously, and bagged it again in his grego pocketas carelessly as if he were a sportsman bagging a dead woodcock.  All thesequeer proceedings increased my uncomfortableness, and seeing him nowexhibiting strong symptoms of concluding his business operations, and jumpinginto bed with me, I thought it was high time, now or never, before the lightwas put out, to break the spell into which I had so long been bound.  But theinterval I spent in deliberating what to say, was a fatal one.  Taking up histomahawk from the table, he examined the head of it for an instant, and thenholding it to the light, with his mouth at the handle, he puffed out greatclouds of tobacco smoke.  The next moment the light was extinguished, andthis wild cannibal, tomahawk between his teeth, sprang into bed with me.  Isang out, I could not help it now; and giving a sudden grunt of astonishmenthe began feeling me.  Stammering out something, I knew not what, I rolled awayfrom him against the wall, and then conjured him, whoever or whatever he mightbe, to keep quiet, and let me get up and light the lamp again.  But hisguttural responses satisfied me at once that he but ill comprehended mymeaning.  Who-e debel you? --he at last said -- you no speak-e, dam-me, Ikill-e.  And so saying the lighted tomahawk began flourishing about me in thedark.  Landlord, for God's sake, Peter Coffin!  shouted I.  Landlord!Watch!  Coffin!  Angels!  save me!  Speak-e!  tell-ee me who-ee be, or dam-me,I kill-e!  again growled the cannibal, while his horrid flourishings of thetomahawk scattered the hot tobacco ashes about me till I thought.. <p 24 >my linen would get on fire.  But thank heaven, at that moment the landlordcame into the room light in hand, and leaping from the bed I ran up to him.     Don't be afraid now, said he, grinning again.  Queequeg here wouldn't harma hair of your head.  Stop your grinning, shouted I, and why didn't youtell me that that infernal harpooneer was a cannibal?  I thought ye know'dit; --didn't I tell ye, he was peddlin' heads around town? --but turn flukesagain and go to sleep.  Queequeg, look here --you sabbee me, I sabbee you --thisman sleepe you --you sabbee?  Me sabbee plenty --grunted Queequeg, puffingaway at his pipe and sitting up in bed.  You gettee in, he added, motioningto me with his tomahawk, and throwing the clothes to one side.  He really didthis in not only a civil but a really kind and charitable way.  I stoodlooking at him a moment.  For all his tattooings he was on the whole a clean,comely looking cannibal.  What's all this fuss I have been making about,thought i to myself --the man's a human being just as I am: he has just asmuch reason to fear me, as I have to be afraid of him.  Better sleep with asober cannibal than a drunken Christian.  Landlord, said I, tell him tostash his tomahawk there, or pipe, or whatever you call it; tell him tostop smoking, in short, and I will turn in with him.  But I don't fancy havinga man smoking in bed with me.  It's dangerous.  Besides, I aint insured.This being told to Queequeg, he at once complied, and again politely motionedme to get into bed --rolling over to one side as much as to say --I wont touch aleg of ye.  Good night, landlord, said I, you may go.  I turned in, andnever slept better in my life... <p 25 >.. < chapter iv 2  THE COUNTERPANE >     Upon waking next morning about daylight,I found Queequeg's arm thrown over me in the most loving and affectionatemanner.  You had almost thought I had been his wife.  The counterpane was ofpatchwork, full of odd little parti-colored squares and triangles; and thisarm of his tattooed all over with an interminable Cretan labyrinth of afigure, no two parts of which were of one precise shade --owing I suppose tohis keeping his arm at sea unmethodically in sun and shade, his shirtsleeves irregularly rolled up at various times --this same arm of his, I say,looked for all the world like a strip of that same patchwork quilt.  Indeed,partly lying on it as the arm did when I first awoke, I could hardly tell itfrom the quilt, they so blended their hues together; and it was only by thesense of weight and pressure that I could tell that Queequeg was hugging me.My sensations were strange.  Let me try to explain them.  When I was a child,I well remember a somewhat similar circumstance that befell me; whether itwas a reality or a dream, I never could entirely settle.  The circumstance wasthis.  I had been cutting up some caper or other --I think it was trying tocrawl up the chimney, as i had seen a little sweep do a few days previous;and my stepmother who, somehow or other, was all the time whipping me, orsending me to bed supperless, --my mother dragged me by the legs out of thechimney and packed me off to bed, though it was only two o'clock in theafternoon of the 21st June, the longest day in the year in our hemisphere.  Ifelt dreadfully.  But there was no help for it, so up stairs I went to mylittle room in the third floor, undressed myself as slowly as possible so asto kill time, and with a bitter sigh got between the sheets.  I lay theredismally calculating that sixteen entire hours must elapse before I could hopefor a resurrection.  Sixteen hours in.. <p 26 >bed!  the small of my back ached to think of it.  And it was so light too;the sun shining in at the window, and a great rattling of coaches in thestreets, and the sound of gay voices all over the house.  I felt worse andworse --at last I got up, dressed, and softly going down in my stockingedfeet, sought out my stepmother, and suddenly threw myself at her feet,beseeching her as a particular favor to give me a good slippering for mymisbehavior; anything indeed but condemning me to lie abed such anunendurable length of time.  But she was the best and most conscientious ofstepmothers, and back I had to go to my room.  For several hours I lay therebroad awake, feeling a great deal worse than I have ever done since, evenfrom the greatest subsequent misfortunes.  At last I must have fallen into atroubled nightmare of a doze; and slowly waking from it --half steeped indreams --I opened my eyes, and the before sun-lit room was now wrapped in outerdarkness.  Instantly I felt a shock running through all my frame; nothing wasto be seen, and nothing was to be heard; but a supernatural hand seemedplaced in mine.  My arm hung over the counterpane, and the nameless,unimaginable, silent form or phantom, to which the hand belonged, seemedclosely seated by my bedside.  For what seemed ages piled on ages, I laythere, frozen with the most awful fears, not daring to drag away my hand;yet ever thinking that if I could but stir it one single inch, the horridspell would be broken.  I knew not how this consciousness at last glided awayfrom me; but waking in the morning, I shudderingly remembered it all, andfor days and weeks and months afterwards I lost myself in confounding attemptsto explain the mystery.  Nay, to this very hour, I often puzzle myself withit.  Now, take away the awful fear, and my sensations at feeling thesupernatural hand in mine were very similar, in their strangeness, to thosewhich I experienced on waking up and seeing Queequeg's pagan arm thrown roundme.  But at length all the past night's events soberly recurred, one by one,in fixed reality, and then I lay only alive to the comical predicament.  Forthough I tried to move his arm --unlock his bridegroom clasp --yet, sleepingas he was, he still hugged me tightly, as though naught but death should partus twain.  I now strove to rouse him --.. <p 27 >     Queequeg! --but his only answer was a snore.  I then rolled over, my neckfeeling as if it were in a horse-collar; and suddenly felt a slight scratch.Throwing aside the counterpane, there lay the tomahawk sleeping by thesavage's side, as if it were a hatchet-faced baby.  A pretty pickle, truly,thought I; abed here in a strange house in the broad day, with a cannibal anda tomahawk!  Queequeg! --in the name of goodness, Queequeg, wake!  At length,by dint of much wriggling, and loud and incessant expostulations upon theunbecomingness of his hugging a fellow male in that matrimonial sort of style,     I succeeded in extracting a grunt; and presently, he drew back his arm,shook himself all over like a Newfoundland dog just from the water, and satup in bed, stiff as a pike-staff, looking at me, and rubbing his eyes as ifhe did not altogether remember how I came to be there, though a dimconsciousness of knowing something about me seemed slowly dawning over him.Meanwhile, I lay quietly eyeing him, having no serious misgivings now, andbent upon narrowly observing so curious a creature.  When, at last, his mindseemed made up touching the character of his bedfellow, and he became, as itwere, reconciled to the fact; he jumped out upon the floor, and by certainsigns and sounds gave me to understand that, if it pleased me, he woulddress first and then leave me to dress afterwards, leaving the wholeapartment to myself.  Thinks I, Queequeg, under the circumstances, this is avery civilized overture; but, the truth is, these savages have an innatesense of delicacy, say what you will; it is marvellous how essentiallypolite they are.  I pay this particular compliment to Queequeg, because hetreated me with so much civility and consideration, while I was guilty ofgreat rudeness; staring at him from the bed, and watching all his toilettemotions; for the time my curiosity getting the better of my breeding.Nevertheless, a man like Queequeg you don't see every day, he and his wayswere well worth unusual regarding.  He commenced dressing at top by donning hisbeaver hat, a very tall one, by the by, and then --still minus his trowsers-- he hunted up his boots.  What under the heavens he did it for, I cannottell, but his next movement was to crush himself --boots in hand, and hat on--under the bed; when, from sundry violent.. <p 28 >gaspings and strainings, I inferred he was hard at work booting himself;though by no law of propriety that I ever heard of, is any man required to beprivate when putting on his boots.  But Queequeg, do you see, was a creaturein the transition state -- neither caterpillar nor butterfly.  He was justenough civilized to show off his outlandishness in the strangest possiblemanner.  his education was not yet completed.  He was an undergraduate.  If hehad not been a small degree civilized, he very probably would not havetroubled himself with boots at all; but then, if he had not been still asavage, he never would have dreamt of getting under the bed to put them on.At last, he emerged with his hat very much dented and crushed down over hiseyes, and began creaking and limping about the room, as if, not being muchaccustomed to boots, his pair of damp, wrinkled cowhide ones -- probably notmade to order either --rather pinched and tormented him at the first go off ofa bitter cold morning.  Seeing, now, that there were no curtains to the window,and that the street being very narrow, the house opposite commanded a plainview into the room, and observing more and more the indecorous figure thatQueequeg made, staving about with little else but his hat and boots on; Ibegged him as well as I could, to accelerate his toilet somewhat, andparticularly to get into his pantaloons as soon as possible.  He complied,and then proceeded to wash himself.  At that time in the morning anyChristian would have washed his face; but Queequeg, to my amazement,contented himself with restricting his ablutions to his chest, arms, andhands.  He then donned his waistcoat, and taking up a piece of hard soap onthe wash-stand centre-table, dipped it into water and commenced lathering hisface.  I was watching to see where he kept his razor, when lo and behold, hetakes the harpoon from the bed corner, slips out the long wooden stock,unsheathes the head, whets it a little on his boot, and striding up to thebit of mirror against the wall, begins a vigorous scraping, or ratherharpooning of his cheeks.  Thinks I, Queequeg, this is using Rogers's bestcutlery with a vengeance.  Afterwards I wondered the less at this operationwhen I came to know of what fine steel the head of a harpoon is made, and howexceedingly sharp the long straight edges are always kept... <p 29 >the rest of his toilet was soon achieved, and he proudly marched out of theroom, wrapped up in his great pilot monkey jacket, and sporting his harpoonlike a marshal's baton... <p 29 >.. < chapter v 5  BREAKFAST >     I quickly followed suit, and descending intothe bar-room accosted the grinning landlord very pleasantly.  I cherished nomalice towards him, though he had been skylarking with me not a little in thematter of my bedfellow.  However, a good laugh is a mighty good thing, andrather too scarce a good thing; the more's the pity.  So, if any one man, inhis own proper person, afford stuff for a good joke to anybody, let him notbe backward, but let him cheerfully allow himself to spend and be spent inthat way.  And the man that has anything bountifully laughable about him, besure there is more in that man than you perhaps think for.  The bar-room wasnow full of the boarders who had been dropping in the night previous, andwhom I had not as yet had a good look at.  They were nearly all whalemen;chief mates, and second mates, and third mates, and sea carpenters, and seacoopers, and sea blacksmiths, and harpooneers, and ship keepers; a brown andbrawny company, with bosky beards; an unshorn, shaggy set, all wearingmonkey jackets for morning gowns.  You could pretty plainly tell how long eachone had been ashore.  This young fellow's healthy cheek is like a sun-toastedpear in hue, and would seem to smell almost as musky; he cannot have beenthree days landed from his Indian voyage.  That man next him looks a fewshades lighter; you might say a touch of satin wood is in him.  In thecomplexion of a third still lingers a tropic tawn, but slightly bleachedwithal; he doubtless has tarried whole weeks ashore.  But who could show acheek like.. <p 30 >Queequeg?  which, barred with various tints, seemed like the Andes' westernslope, to show forth in one array, contrasting climates, zone by zone.     Grub, ho!  now cried the landlord, flinging open a door, and in we went tobreakfast.  They say that men who have seen the world, thereby become quite atease in manner, quite self-possessed in company.  Not always, though:Ledyard, the great New England traveller, and Mungo Park, the Scotch one; ofall men, they possessed the least assurance in the parlor.  But perhaps themere crossing of Siberia in a sledge drawn by dogs as Ledyard did, or thetaking a long solitary walk on an empty stomach, in the negro heart ofAfrica, which was the sum of poor Mungo's performances -- this kind of travel,I say, may not be the very best mode of attaining a high social polish.Still, for the most part, that sort of thing is to be had anywhere.  Thesereflections just here are occasioned by the circumstance that after we wereall seated at the table, and I was preparing to hear some good stories aboutwhaling; to my no small surprise, nearly every man maintained a profoundsilence.  And not only that, but they looked embarrassed.  Yes, here were aset of sea-dogs, many of whom without the slightest bashfulness had boardedgreat whales on the high seas --entire strangers to them --and duelled them deadwithout winking; and yet, here they sat at a social breakfast table --all ofthe same calling, all of kindred tastes --looking round as sheepishly ateach other as though they had never been out of sight of some sheepfold amongthe Green Mountains.  A curious sight; these bashful bears, these timidwarrior whalemen!  But as for Queequeg --why, Queequeg sat there among them --atthe head of the table, too, it so chanced; as cool as an icicle.  To be sureI cannot say much for his breeding.  His greatest admirer could not havecordially justified his bringing his harpoon into breakfast with him, andusing it there without ceremony; reaching over the table with it, to theimminent jeopardy of many heads, and grappling the beefsteaks towards him.But that was certainly very coolly done by him, and every.. <p 31 >one knows that in most people's estimation, to do anything coolly is to do itgenteelly.  We will not speak of all Queequeg's peculiarities here; how heeschewed coffee and hot rolls, and applied his undivided attention tobeefsteaks, done rare.  Enough, that when breakfast was over he withdrew likethe rest into the public room, lighted his tomahawk-pipe, and was sittingthere quietly digesting and smoking with his inseparable hat on, when Isallied out for a stroll... <p 31 >.. < chapter vi 11  THE STREET >     If I had been astonished at first catching aglimpse of so outlandish an individual as Queequeg circulating among thepolite society of a civilized town, that astonishment soon departed upontaking my first daylight stroll through the streets of New Bedford.  Inthoroughfares nigh the docks, any considerable seaport will frequently offerto view the queerest looking nondescripts from foreign parts.  Even inBroadway and Chestnut streets, Mediterranean mariners will sometimes jostlethe affrighted ladies.  Regent street is not unknown to Lascars and Malays;and at Bombay, in the Apollo Green, live Yankees have often scared thenatives.  But New Bedford beats all Water street and Wapping.  In theselast-mentioned haunts you see only sailors; but in New Bedford, actualcannibals stand chatting at street corners; savages outright; many of whomyet carry on their bones unholy flesh.  It makes a stranger stare.  But,besides the Feegeeans, Tongatabooarrs, Erromanggoans, Pannangians, andBrighggians, and, besides the wild specimens of the whaling-craft whichunheeded reel about the streets, you will see other sights still morecurious, certainly more comical... <p 32 >There weekly arrive in this town scores of green Vermonters and New Hampshiremen, all athirst for gain and glory in the fishery.  They are mostly young,of stalwart frames; fellows who have felled forests, and now seek to dropthe axe and snatch the whale-lance.  Many are as green as the Green Mountainswhence they came.  In some things you would think them but a few hours old.Look there!  that chap strutting round the corner.  He wears a beaver hat andswallow-tailed coat, girdled with a sailor-belt and sheath-knife.  Here comesanother with a sou'-wester and a bombazine cloak.  No town-bred dandy willcompare with a country-bred one -- I mean a downright bumpkin dandy --a fellowthat, in the dog-days, will mow his two acres in buckskin gloves for fear oftanning his hands.  Now when a country dandy like this takes it into his headto make a distinguished reputation, and joins the great whale-fishery, youshould see the comical things he does upon reaching the seaport.  Inbespeaking his sea-outfit, he orders bell-buttons to his waistcoats; strapsto his canvas trowsers.  Ah, poor Hay-Seed!  how bitterly will burst thosestraps in the first howling gale, when thou art driven, straps, buttons, andall, down the throat of the tempest.  But think not that this famous town hasonly harpooneers, cannibals, and bumpkins to show her visitors.  Not at all.Still New Bedford is a queer place.  Had it not been for us whalemen, thattract of land would this day perhaps have been in as howling condition as thecoast of Labrador.  As it is, parts of her back country are enough to frightenone, they look so bony.  The town itself is perhaps the dearest place to livein, in all New England.  It is a land of oil, true enough; but not likeCanaan; a land, also, of corn and wine.  The streets do not run with milk;nor in the spring-time do they pave them with fresh eggs.  Yet, in spite ofthis, nowhere in all America will you find more patrician-like houses; parksand gardens more opulent, than in New Bedford.  Whence came they?  how plantedupon this once scraggy scoria of a country?  Go and gaze upon the ironemblematical harpoons round yonder lofty mansion, and your question will beanswered.  Yes; all these brave houses and flowery gardens came from the.. <p 33 >Atlantic, Pacific, and Indian oceans.  One and all, they were harpooned anddragged up hither from the bottom of the sea.  Can Herr Alexander perform afeat like that?  In New Bedford, fathers, they say, give whales for dowers totheir daughters, and portion off their nieces with a few porpoises a-piece.You must go to New Bedford to see a brilliant wedding; for, they say, theyhave reservoirs of oil in every house, and every night recklessly burn theirlengths in spermaceti candles.  In summer time, the town is sweet to see;full of fine maples --long avenues of green and gold.  And in August, high inair, the beautiful and bountiful horse-chestnuts, candelabra-wise, profferthe passer-by their tapering upright cones of congregated blossoms.  Soomnipotent is art; which in many a district of New Bedford has superinducedbright terraces of flowers upon the barren refuse rocks thrown aside atcreation's final day.  And the women of New Bedford, they bloom like their ownred roses.  But roses only bloom in summer; whereas the fine carnation oftheir cheeks is perennial as sunlight in the seventh heavens.  Elsewhere matchthat bloom of theirs, ye cannot, save in Salem, where they tell me the younggirls breathe such musk, their sailor sweethearts smell them miles off shore,as though they were drawing nigh the odorous Moluccas instead of thePuritanic sands... < chapter vii 26  THE CHAPEL >     In this same New Bedford there stands aWhaleman's Chapel, and few are the moody fishermen, shortly bound for theIndian Ocean or Pacific, who fail to make a Sunday visit to the spot.  I amsure that I did not.  Returning from my first morning stroll, I again salliedout upon this special errand.  The sky had changed from clear,.. <p 34 >sunny cold, to driving sleet and mist.  Wrapping myself in my shaggy jacketof the cloth called bearskin, I fought my way against the stubborn storm.Entering, I found a small scattered congregation of sailors, and sailors'wives and widows.  A muffled silence reigned, only broken at times by theshrieks of the storm.  Each silent worshipper seemed purposely sitting apartfrom the other, as if each silent grief were insular and incommunicable.  Thechaplain had not yet arrived; and there these silent islands of men and womensat steadfastly eyeing several marble tablets, with black borders, masonedinto the wall on either side the pulpit.  Three of them ran something like thefollowing, but I do not pretend to quote: -- Sacred To the Memory of JohnTalbot, Who, at the age of eighteen, was lost overboard, Near the Isle ofDesolation, off Patagonia, November 1st,.  This Tablet Is erected to hisMemory By his Sister.  Sacred To the Memory of Robert Long, Willis Ellery,Nathan Coleman, Walter Canny, Seth Macy, and Samuel Gleig, Forming one of theboats' crews of the Ship Eliza, Who were towed out of sight by a Whale, Onthe Off-shore Ground in the Pacific, December 31st,
