
﻿ CHAPTER XI IN THE TENT The man who guided Salammbo made her ascend again beyond the pharos in the direction of the Catacombs , and then go down the long suburb of Molouya , which was full of steep lanes . The sky was beginning to grow grey . Sometimes palm-wood beams jutting out from the walls obliged them to bend their heads . The two horses which were at the walk would often slip ; and thus they reached the Teveste gate . Its heavy leaves were half open ; they passed through , and it closed behind them . At first they followed the foot of the ramparts for a time , and at the height of the cisterns they took their way along the Taenia , a narrow strip of yellow earth separating the gulf from the lake and extending as far as Rhades . No one was to be seen around Carthage , whether on the sea or in the country . The slate-coloured waves chopped softly , and the light wind blowing their foam hither and thither spotted them with white rents . In spite of all her veils , Salammbo shivered in the freshness of the morning ; the motion and the open air dazed her . Then the sun rose ; it preyed on the back of her head , and she involuntarily dozed a little . The two animals rambled along side by side , their feet sinking into the silent sand . When they had passed the mountain of the Hot Springs , they went on at a more rapid rate , the ground being firmer . But although it was the season for sowing and ploughing , the fields were as empty as the desert as far as the eye could reach . Here and there were scattered heaps of corn ; at other places the barley was shedding its reddened ears . The villages showed black upon the clear horizon , with shapes incoherently carved . From time to time a half-calcined piece of wall would be found standing on the edge of the road . The roofs of the cottages were falling in , and in the interiors might be distinguished fragments of pottery , rags of clothing , and all kinds of unrecognisable utensils and broken things . Often a creature clothed in tatters , with earthy face and flaming eyes would emerge from these ruins . But he would very quickly begin to run or would disappear into a hole . Salammbo and her guide did not stop . Deserted plains succeeded one another . Charcoal dust which was raised by their feet behind them , stretched in unequal trails over large spaces of perfectly white soil . Sometimes they came upon little peaceful spots , where a brook flowed amid the long grass ; and as they ascended the other bank Salammbo would pluck damp leaves to cool her hands . At the corner of a wood of rose-bays her horse shied violently at the corpse of a man which lay extended on the ground . The slave immediately settled her again on the cushions . He was one of the servants of the Temple , a man whom Schahabarim used to employ on perilous missions . With extreme precaution he now went on foot beside her and between the horses ; he would whip the animals with the end of a leathern lace wound round his arm , or would perhaps take balls made of wheat , dates , and yolks of eggs wrapped in lotus leaves from a scrip hanging against his breast , and offer them to Salammbo without speaking , and running all the time . In the middle of the day three Barbarians clad in animals ' skins crossed their path . By degrees others appeared wandering in troops of ten , twelve , or twenty-five men ; many were driving goats or a limping cow . Their heavy sticks bristled with brass points ; cutlasses gleamed in their clothes , which were savagely dirty , and they opened their eyes with a look of menace and amazement . As they passed some sent them a vulgar benediction ; others obscene jests , and Schahabarim 's man replied to each in his own idiom . He told them that this was a sick youth going to be cured at a distant temple . However , the day was closing in . Barkings were heard , and they approached them . Then in the twilight they perceived an enclosure of dry stones shutting in a rambling edifice . A dog was running along the top of the wall . The slave threw some pebbles at him and they entered a lofty vaulted hall . A woman was crouching in the centre warming herself at a fire of brushwood , the smoke of which escaped through the holes in the ceiling . She was half hidden by her white hair which fell to her knees ; and unwilling to answer , she muttered with idiotic look words of vengeance against the Barbarians and the Carthaginians . The runner ferreted right and left . Then he returned to her and demanded something to eat . The old woman shook her head , and murmured with her eyes fixed upon the charcoal : " I was the hand . The ten fingers are cut off . The mouth eats no more . " The slave showed her a handful of gold pieces . She rushed upon them , but soon resumed her immobility . At last he placed a dagger which he had in his girdle beneath her throat . Then , trembling , she went and raised a large stone , and brought back an amphora of wine with fish from Hippo-Zarytus preserved in honey . Salammbo turned away from this unclean food , and fell asleep on the horses ' caparisons which were spread in a corner of the hall . He awoke her before daylight . The dog was howling . The slave went up to it quietly , and struck off its head with a single blow of his dagger . Then he rubbed the horses ' nostrils with blood to revive them . The old woman cast a malediction at him from behind . Salammbo perceived this , and pressed the amulet which she wore above her heart . They resumed their journey . From time to time she asked whether they would not arrive soon . The road undulated over little hills . Nothing was to be heard but the grating of the grasshoppers . The sun heated the yellowed grass ; the ground was all chinked with crevices which in dividing formed , as it were , monstrous paving-stones . Sometimes a viper passed , or eagles flew by ; the slave still continued running . Salammbo mused beneath her veils , and in spite of the heat did not lay them aside through fear of soiling her beautiful garments . At regular distances stood towers built by the Carthaginians for the purpose of keeping watch upon the tribes . They entered these for the sake of the shade , and then set out again . For prudence sake they had made a wide detour the day before . But they met with no one just now ; the region being a sterile one , the Barbarians had not passed that way . Gradually the devastation began again . Sometimes a piece of mosaic would be displayed in the centre of a field , the sole remnant of a vanished mansion ; and the leafless olive trees looked at a distance like large bushes of thorns . They passed through a town in which houses were burnt to the ground . Human skeletons might be seen along the walls . There were some , too , of dromedaries and mules . Half-gnawed carrion blocked the streets . Night fell . The sky was lowering and cloudy . They ascended again for two hours in a westerly direction , when suddenly they perceived a quantity of little flames before them . These were shining at the bottom of an ampitheatre . Gold plates , as they displaced one another , glanced here and there . These were the cuirasses of the Clinabarians in the Punic camp ; then in the neighbourhood they distinguished other and more numerous lights , for the armies of the Mercenaries , now blended together , extended over a great space . Salammbo made a movement as though to advance . But Schahabarim 's man took her further away , and they passed along by the terrace which enclosed the camp of the Barbarians . A breach became visible in it , and the slave disappeared . A sentry was walking upon the top of the entrenchment with a bow in his hand and a pike on his shoulder . Salammbo drew still nearer ; the Barbarian knelt and a long arrow pierced the hem of her cloak . Then as she stood motionless and shrieking , he asked her what she wanted . " To speak to Matho , " she replied . " I am a fugitive from Carthage . " He gave a whistle , which was repeated at intervals further away . Salammbo waited ; her frightened horse moved round and round , sniffing . When Matho arrived the moon was rising behind her . But she had a yellow veil with black flowers over her face , and so many draperies about her person , that it was impossible to make any guess about her . From the top of the terrace he gazed upon this vague form standing up like a phantom in the penumbrae of the evening . At last she said to him : " Lead me to your tent ! I wish it ! " A recollection which he could not define passed through his memory . He felt his heart beating . The air of command intimidated him . " Follow me ! " he said . The barrier was lowered , and immediately she was in the camp of the Barbarians . It was filled with a great tumult and a great throng . Bright fires were burning beneath hanging pots ; and their purpled reflections illuminating some places left others completely in the dark . There was shouting and calling ; shackled horses formed long straight lines amid the tents ; the latter were round and square , of leather or of canvas ; there were huts of reeds , and holes in the sand such as are made by dogs . Soldiers were carting faggots , resting on their elbows on the ground , or wrapping themselves up in mats and preparing to sleep ; and Salammbo 's horse sometimes stretched out a leg and jumped in order to pass over them . She remembered that she had seen them before ; but their beards were longer now , their faces still blacker , and their voices hoarser . Matho , who walked before her , waved them off with a gesture of his arm which raised his red mantle . Some kissed his hands ; others bending their spines approached him to ask for orders , for he was now veritable and sole chief of the Barbarians ; Spendius , Autaritus , and Narr ' Havas had become disheartened , and he had displayed so much audacity and obstinacy that all obeyed him . Salammbo followed him through the entire camp . His tent was at the end , three hundred feet from Hamilcar 's entrenchments . She noticed a wide pit on the right , and it seemed to her that faces were resting against the edge of it on a level with the ground , as decapitated heads might have done . However , their eyes moved , and from these half-opened mouths groanings escaped in the Punic tongue . Two Negroes holding resin lights stood on both sides of the door . Matho drew the canvas abruptly aside . She followed him . It was a deep tent with a pole standing up in the centre . It was lighted by a large lamp-holder shaped like a lotus and full of a yellow oil wherein floated handfuls of burning tow , and military things might be distinguished gleaming in the shade . A naked sword leaned against a stool by the side of a shield ; whips of hippopotamus leather , cymbals , bells , and necklaces were displayed pell-mell on baskets of esparto-grass ; a felt rug lay soiled with crumbs of black bread ; some copper money was carelessly heaped upon a round stone in a corner , and through the rents in the canvas the wind brought the dust from without , together with the smell of the elephants , which might be heard eating and shaking their chains . " Who are you ? " said Matho . She looked slowly around her without replying ; then her eyes were arrested in the background , where something bluish and sparkling fell upon a bed of palm-branches . She advanced quickly . A cry escaped her . Matho stamped his foot behind her . " Who brings you here ? why do you come ? " " To take it ! " she replied , pointing to the zaimph , and with the other hand she tore the veils from her head . He drew back with his elbows behind him , gaping , almost terrified . She felt as if she were leaning on the might of the gods ; and looking at him face to face she asked him for the zaimph ; she demanded it in words abundant and superb . Matho did not hear ; he was gazing at her , and in his eyes her garments were blended with her body . The clouding of the stuffs , like the splendour of her skin , was something special and belonging to her alone . Her eyes and her diamonds sparkled ; the polish of her nails continued the delicacy of the stones which loaded her fingers ; the two clasps of her tunic raised her breasts somewhat and brought them closer together , and he in thought lost himself in the narrow interval between them whence there fell a thread holding a plate of emeralds which could be seen lower down beneath the violet gauze . She had as earrings two little sapphire scales , each supporting a hollow pearl filled with liquid scent . A little drop would fall every moment through the holes in the pearl and moisten her naked shoulder . Matho watched it fall . He was carried away by ungovernable curiosity ; and , like a child laying his hand upon a strange fruit , he tremblingly and lightly touched the top of her chest with the tip of his finger : the flesh , which was somewhat cold , yielded with an elastic resistance . This contact , though scarcely a sensible one , shook Matho to the very depths of his nature . An uprising of his whole being urged him towards her . He would fain have enveloped her , absorbed her , drunk her . His bosom was panting , his teeth were chattering . Taking her by the wrists he drew her gently to him , and then sat down upon a cuirass beside the palm-tree bed which was covered with a lion 's skin . She was standing . He looked up at her , holding her thus between his knees , and repeating : " How beautiful you are ! how beautiful you are ! " His eyes , which were continually fixed upon hers , pained her ; and the uncomfortableness , the repugnance increased in so acute a fashion that Salammbo put a constraint upon herself not to cry out . The thought of Schahabarim came back to her , and she resigned herself . Matho still kept her little hands in his own ; and from time to time , in spite of the priest 's command , she turned away her face and tried to thrust him off by jerking her arms . He opened his nostrils the better to breathe in the perfume which exhaled from her person . It was a fresh , indefinable emanation , which nevertheless made him dizzy , like the smoke from a perfuming-pan . She smelt of honey , pepper , incense , roses , with another odour still . But how was she thus with him in his tent , and at his disposal ? Some one no doubt had urged her . She had not come for the zaimph . His arms fell , and he bent his head whelmed in sudden reverie . To soften him Salammbo said to him in a plaintive voice : " What have I done to you that you should desire my death ? " " Your death ! " She resumed : " I saw you one evening by the light of my burning gardens amid fuming cups and my slaughtered slaves , and your anger was so strong that you bounded towards me and I was obliged to fly ! Then terror entered into Carthage . There were cries of the devastation of the towns , the burning of the country-seats , the massacre of the soldiery ; it was you who had ruined them , it was you who had murdered them ! I hate you ! Your very name gnaws me like remorse ! You are execrated more than the plague , and the Roman war ! The provinces shudder at your fury , the furrows are full of corpses ! I have followed the traces of your fires as though I were travelling behind Moloch ! " Matho leaped up ; his heart was swelling with colossal pride ; he was raised to the stature of a god . With quivering nostrils and clenched teeth she went on : " As if your sacrilege were not enough , you came to me in my sleep covered with the zaimph ! Your words I did not understand ; but I could see that you wished to drag me to some terrible thing at the bottom of an abyss . " Matho , writhing his arms , exclaimed : " No ! no ! it was to give it to you ! to restore it to you ! It seemed to me that the goddess had left her garment for you , and that it belonged to you ! In her temple or in your house , what does it matter ? are you not all-powerful , immaculate , radiant and beautiful even as Tanith ? " And with a look of boundless adoration he added : " Unless perhaps you are Tanith ? " " I , Tanith ! " said Salammbo to herself . They left off speaking . The thunder rolled in the distance . Some sheep bleated , frightened by the storm . " Oh ! come near ! " he went on , " come near ! fear nothing ! " Formerly I was only a soldier mingled with the common herd of the Mercenaries , ay , and so meek that I used to carry wood on my back for the others . Do I trouble myself about Carthage ! The crowd of its people move as though lost in the dust of your sandals , and all its treasures , with the provinces , fleets , and islands , do not raise my envy like the freshness of your lips and the turn of your shoulders . But I wanted to throw down its walls that I might reach you to possess you ! Moreover , I was revenging myself in the meantime ! At present I crush men like shells , and I throw myself upon phalanxes ; I put aside the sarissae with my hands , I check the stallions by the nostrils ; a catapult would not kill me ! Oh ! if you knew how I think of you in the midst of war ! Sometimes the memory of a gesture or of a fold of your garment suddenly seizes me and entwines me like a net ! I perceive your eyes in the flames of the phalaricas and on the gilding of the shields ! I hear your voice in the sounding of the cymbals . I turn aside , but you are not there ! and I plunge again into the battle ! " He raised his arms whereon his veins crossed one another like ivy on the branches of a tree . Sweat flowed down his breast between his square muscles ; and his breathing shook his sides with his bronze girdle all garnished with thongs hanging down to his knees , which were firmer than marble . Salammbo , who was accustomed to eunuchs , yielded to amazement at the strength of this man . It was the chastisement of the goddess or the influence of Moloch in motion around her in the five armies . She was overwhelmed with lassitude ; and she listened in a state of stupor to the intermittent shouts of the sentinels as they answered one another . The flames of the lamp kindled in the squalls of hot air . There came at times broad lightning flashes ; then the darkness increased ; and she could only see Matho 's eyeballs like two coals in the night . However , she felt that a fatality was surrounding her , that she had reached a supreme and irrevocable moment , and making an effort she went up again towards the zaimph and raised her hands to seize it . " What are you doing ? " exclaimed Matho . " I am going back to Carthage , " she placidly replied . He advanced folding his arms and with so terrible a look that her heels were immediately nailed , as it were , to the spot . " Going back to Carthage ! " He stammered , and , grinding his teeth , repeated : " Going back to Carthage ! Ah ! you came to take the zaimph , to conquer me , and then disappear ! No , no ! you belong to me ! and no one now shall tear you from here ! Oh ! I have not forgotten the insolence of your large tranquil eyes , and how you crushed me with the haughtiness of your beauty ! 'Tis my turn now ! You are my captive , my slave , my servant ! Call , if you like , on your father and his army , the Ancients , the rich , and your whole accursed people ! I am the master of three hundred thousand soldiers ! I will go and seek them in Lusitania , in the Gauls , and in the depths of the desert , and I will overthrow your town and burn all its temples ; the triremes shall float on the waves of blood ! I will not have a house , a stone , or a palm tree remaining ! And if men fail me I will draw the bears from the mountains and urge on the lions ! Seek not to fly or I kill you ! " Pale and with clenched fists he quivered like a harp whose strings are about to burst . Suddenly sobs stifled him , and he sank down upon his hams . " Ah ! forgive me ! I am a scoundrel , and viler than scorpions , than mire and dust ! Just now while you were speaking your breath passed across my face , and I rejoiced like a dying man who drinks lying flat on the edge of a stream . Crush me , if only I feel your feet ! curse me , if only I hear your voice ! Do not go ! have pity ! I love you ! I love you ! " He was on his knees on the ground before her ; and he encircled her form with both his arms , his head thrown back , and his hands wandering ; the gold discs hanging from his ears gleamed upon his bronzed neck ; big tears rolled in his eyes like silver globes ; he sighed caressingly , and murmured vague words lighter than a breeze and sweet as a kiss . Salammbo was invaded by a weakness in which she lost all consciousness of herself . Something at once inward and lofty , a command from the gods , obliged her to yield herself ; clouds uplifted her , and she fell back swooning upon the bed amid the lion 's hair . The zaimph fell , and enveloped her ; she could see Matho 's face bending down above her breast . " Moloch , thou burnest me ! " and the soldier 's kisses , more devouring than flames , covered her ; she was as though swept away in a hurricane , taken in the might of the sun . He kissed all her fingers , her arms , her feet , and the long tresses of her hair from one end to the other . " Carry it off , " he said , " what do I care ? take me away with it ! I abandon the army ! I renounce everything ! Beyond Gades , twenty days ' journey into the sea , you come to an island covered with gold dust , verdure , and birds . On the mountains large flowers filled with smoking perfumes rock like eternal censers ; in the citron trees , which are higher than cedars , milk-coloured serpents cause the fruit to fall upon the turf with the diamonds in their jaws ; the air is so mild that it keeps you from dying . Oh ! I shall find it , you will see . We shall live in crystal grottoes cut out at the foot of the hills . No one dwells in it yet , or I shall become the king of the country . " He brushed the dust off her cothurni ; he wanted her to put a quarter of a pomegranate between her lips ; he heaped up garments behind her head to make a cushion for her . He sought for means to serve her , and to humble himself , and he even spread the zaimph over her feet as if it were a mere rug . " Have you still , " he said , " those little gazelle 's horns on which your necklaces hang ? You will give them to me ! I love them ! " For he spoke as if the war were finished , and joyful laughs broke from him . The Mercenaries , Hamilcar , every obstacle had now disappeared . The moon was gliding between two clouds . They could see it through an opening in the tent . " Ah , what nights have I spent gazing at her ! she seemed to me like a veil that hid your face ; you would look at me through her ; the memory of you was mingled with her beams ; then I could no longer distinguish you ! " And with his head between her breasts he wept copiously . " And this , " she thought , " is the formidable man who makes Carthage tremble ! " He fell asleep . Then disengaging herself from his arm she put one foot to the ground , and she perceived that her chainlet was broken . The maidens of the great families were accustomed to respect these shackles as something that was almost religious , and Salammbo , blushing , rolled the two pieces of the golden chain around her ankles . Carthage , Megara , her house , her room , and the country that she had passed through , whirled in tumultuous yet distinct images through her memory . But an abyss had yawned and thrown them far back to an infinite distance from her . The storm was departing ; drops of water splashing rarely , one by one , made the tent-roof shake . Matho slept like a drunken man , stretched on his side , and with one arm over the edge of the couch . His band of pearls was raised somewhat , and uncovered his brow ; his teeth were parted in a smile ; they shone through his black beard , and there was a silent and almost outrageous gaiety in his half-closed eyelids . Salammbo looked at him motionless , her head bent and her hands crossed . A dagger was displayed on the table of cypress-wood at the head of the bed ; the sight of the gleaming blade fired her with a sanguinary desire . Mournful voices lingered at a distance in the shade , and like a chorus of geniuses urged her on . She approached it ; she seized the steel by the handle . At the rustling of her dress Matho half opened his eyes , putting forth his mouth upon her hands , and the dagger fell . Shouts arose ; a terrible light flashed behind the canvas . Matho raised the latter ; they perceived the camp of the Libyans enveloped in great flames . Their reed huts were burning , and the twisting stems burst in the smoke and flew off like arrows ; black shadows ran about distractedly on the red horizon . They could hear the shrieks of those who were in the huts ; the elephants , oxen , and horses plunged in the midst of the crowd crushing it together with the stores and baggage that were being rescued from the fire . Trumpets sounded . There were calls of " Matho ! Matho ! " Some people at the door tried to get in . " Come along ! Hamilcar is burning the camp of Autaritus ! " He made a spring . She found herself quite alone . Then she examined the zaimph ; and when she had viewed it well she was surprised that she had not the happiness which she had once imagined to herself . She stood with melancholy before her accomplished dream . But the lower part of the tent was raised , and a monstrous form appeared . Salammbo could at first distinguish only the two eyes and a long white beard which hung down to the ground ; for the rest of the body , which was cumbered with the rags of a tawny garment , trailed along the earth ; and with every forward movement the hands passed into the beard and then fell again . Crawling in this way it reached her feet , and Salammbo recognised the aged Gisco . In fact , the Mercenaries had broken the legs of the captive Ancients with a brass bar to prevent them from taking to flight ; and they were all rotting pell-mell in a pit in the midst of filth . But the sturdiest of them raised themselves and shouted when they heard the noise of platters , and it was in this way that Gisco had seen Salammbo . He had guessed that she was a Carthaginian woman by the little balls of sandastrum flapping against her cothurni ; and having a presentiment of an important mystery he had succeeded , with the assistance of his companions , in getting out of the pit ; then with elbows and hands he had dragged himself twenty paces further on as far as Matho 's tent . Two voices were speaking within it . He had listened outside and had heard everything . " It is you ! " she said at last , almost terrified . " Yes , it is I ! " he replied , raising himself on his wrists . " They think me dead , do they not ? " She bent her head . He resumed : " Ah ! why have the Baals not granted me this mercy ! " He approached so close he was touching her . " They would have spared me the pain of cursing you ! " Salammbo sprang quickly back , so much afraid was she of this unclean being , who was as hideous as a larva and nearly as terrible as a phantom . " I am nearly one hundred years old , " he said . " I have seen Agathocles ; I have seen Regulus and the eagles of the Romans passing over the harvests of the Punic fields ! I have seen all the terrors of battles and the sea encumbered with the wrecks of our fleets ! Barbarians whom I used to command have chained my four limbs like a slave that has committed murder . My companions are dying around me , one after the other ; the odour of their corpses awakes me in the night ; I drive away the birds that come to peck out their eyes ; and yet not for a single day have I despaired of Carthage ! Though I had seen all the armies of the earth against her , and the flames of the siege overtop the height of the temples , I should have still believed in her eternity ! But now all is over ! all is lost ! The gods execrate her ! A curse upon you who have quickened her ruin by your disgrace ! " She opened her lips . " Ah ! I was there ! " he cried . " I heard you gurgling with love like a prostitute ; then he told you of his desire , and you allowed him to kiss your hands ! But if the frenzy of your unchastity urged you to it , you should at least have done as do the fallow deer , which hide themselves in their copulations , and not have displayed your shame beneath your father 's very eyes ! " " What ? " she said . " Ah ! you did not know that the two entrenchments are sixty cubits from each other and that your Matho , in the excess of his pride , has posted himself just in front of Hamilcar . Your father is there behind you ; and could I climb the path which leads to the platform , I should cry to him : 'Come and see your daughter in the Barbarian 's arms ! She has put on the garment of the goddess to please him ; and in yielding her body to him she surrenders with the glory of your name the majesty of the gods , the vengeance of her country , even the safety of Carthage ! ' " The motion of his toothless mouth moved his beard throughout its length ; his eyes were riveted upon her and devoured her ; panting in the dust he repeated : " Ah ! sacrilegious one ! May you be accursed ! accursed ! accursed ! " Salammbo had drawn back the canvas ; she held it raised at arm 's length , and without answering him she looked in the direction of Hamilcar . " It is this way , is it not ? " she said . " What matters it to you ? Turn away ! Begone ! Rather crush your face against the earth ! It is a holy spot which would be polluted by your gaze ! " She threw the zaimph about her waist , and quickly picked up her veils , mantle , and scarf . " I hasten thither ! " she cried ; and making her escape Salammbo disappeared . At first she walked through the darkness without meeting any one , for all were betaking themselves to the fire ; the uproar was increasing and great flames purpled the sky behind ; a long terrace stopped her . She turned round to right and left at random , seeking for a ladder , a rope , a stone , something in short to assist her . She was afraid of Gisco , and it seemed to her that shouts and footsteps were pursuing her . Day was beginning to break . She perceived a path in the thickness of the entrenchment . She took the hem of her robe , which impeded her , in her teeth , and in three bounds she was on the platform . A sonorous shout burst forth beneath her in the shade , the same which she had heard at the foot of the galley staircase , and leaning over she recognised Schahabarim 's man with his coupled horses . He had wandered all night between the two entrenchments ; then disquieted by the fire , he had gone back again trying to see what was passing in Matho 's camp ; and , knowing that this spot was nearest to his tent , he had not stirred from it , in obedience to the priest 's command . He stood up on one of the horses . Salammbo let herself slide down to him ; and they fled at full gallop , circling the Punic camp in search of a gate . Matho had re-entered his tent . The smoky lamp gave but little light , and he also believed that Salammbo was asleep . Then he delicately touched the lion 's skin on the palm-tree bed . He called but she did not answer ; he quickly tore away a strip of the canvas to let in some light ; the zaimph was gone . The earth trembled beneath thronging feet . Shouts , neighings , and clashing of armour rose in the air , and clarion flourishes sounded the charge . It was as though a hurricane were whirling around him . Immoderate frenzy made him leap upon his arms , and he dashed outside . The long files of the Barbarians were descending the mountain at a run , and the Punic squares were advancing against them with a heavy and regular oscillation . The mist , rent by the rays of the sun , formed little rocking clouds which as they rose gradually discovered standards , helmets , and points of pikes . Beneath the rapid evolutions portions of the earth which were still in the shadow seemed to be displaced bodily ; in other places it looked as if huge torrents were crossing one another , while thorny masses stood motionless between them . Matho could distinguish the captains , soldiers , heralds , and even the serving-men , who were mounted on asses in the rear . But instead of maintaining his position in order to cover the foot-soldiers , Narr ' Havas turned abruptly to the right , as though he wished himself to be crushed by Hamilcar . His horsemen outstripped the elephants , which were slackening their speed ; and all the horses , stretching out their unbridled heads , galloped at so furious a rate that their bellies seemed to graze the earth . Then suddenly Narr ' Havas went resolutely up to a sentry . He threw away his sword , lance , and javelins , and disappeared among the Carthaginians . The king of the Numidians reached Hamilcar 's tent , and pointing to his men , who were standing still at a distance , he said : " Barca ! I bring them to you . They are yours . " Then he prostrated himself in token of bondage , and to prove his fidelity recalled all his conduct from the beginning of the war . First , he had prevented the siege of Carthage and the massacre of the captives ; then he had taken no advantage of the victory over Hanno after the defeat at Utica . As to the Tyrian towns , they were on the frontiers of his kingdom . Finally he had not taken part in the battle of the Macaras ; and he had even expressly absented himself in order to evade the obligation of fighting against the Suffet . Narr ' Havas had in fact wished to aggrandise himself by encroachments upon the Punic provinces , and had alternately assisted and forsaken the Mercenaries according to the chances of victory . But seeing that Hamilcar would ultimately prove the stronger , he had gone over to him ; and in his desertion there was perhaps something of a grudge against Matho , whether on account of the command or of his former love . The Suffet listened without interrupting him . The man who thus presented himself with an army where vengeance was his due was not an auxiliary to be despised ; Hamilcar at once divined the utility of such an alliance in his great projects . With the Numidians he would get rid of the Libyans . Then he would draw off the West to the conquest of Iberia ; and , without asking Narr ' Havas why he had not come sooner , or noticing any of his lies , he kissed him , striking his breast thrice against his own . It was to bring matters to an end and in despair that he had fired the camp of the Libyans . This army came to him like a relief from the gods ; dissembling his joy he replied : " May the Baals favour you ! I do not know what the Republic will do for you , but Hamilcar is not ungrateful . " The tumult increased ; some captains entered . He was arming himself as he spoke . " Come , return ! You will use your horsemen to beat down their infantry between your elephants and mine . Courage ! exterminate them ! " And Narr ' Havas was rushing away when Salammbo appeared . She leaped down quickly from her horse . She opened her ample cloak and spreading out her arms displayed the zaimph . The leathern tent , which was raised at the corners , left visible the entire circuit of the mountain with its thronging soldiers , and as it was in the centre Salammbo could be seen on all sides . An immense shouting burst forth , a long cry of triumph and hope . Those who were marching stopped ; the dying leaned on their elbows and turned round to bless her . All the Barbarians knew now that she had recovered the zaimph ; they saw her or believed that they saw her from a distance ; and other cries , but those of rage and vengeance , resounded in spite of the plaudits of the Carthaginians . Thus did the five armies in tiers upon the mountain stamp and shriek around Salammbo . Hamilcar , who was unable to speak , nodded her his thanks . His eyes were directed alternately upon the zaimph and upon her , and he noticed that her chainlet was broken . Then he shivered , being seized with a terrible suspicion . But soon recovering his impassibility he looked sideways at Narr ' Havas without turning his face . The king of the Numidians held himself apart in a discreet attitude ; on his forehead he bore a little of the dust which he had touched when prostrating himself . At last the Suffet advanced towards him with a look full of gravity . " As a reward for the services which you have rendered me , Narr ' Havas , I give you my daughter . Be my son , " he added , " and defend your father ! " Narr ' Havas gave a great gesture of surprise ; then he threw himself upon Hamilcar 's hands and covered them with kisses . Salammbo , calm as a statue , did not seem to understand . She blushed a little as she cast down her eyelids , and her long curved lashes made shadows upon her cheeks . Hamilcar wished to unite them immediately in indissoluble betrothal . A lance was placed in Salammbo 's hands and by her offered to Narr ' Havas ; their thumbs were tied together with a thong of ox-leather ; then corn was poured upon their heads , and the grains that fell around them rang like rebounding hail . 