From ef72098949700b5f2b69604dc809934af3e595b5 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Fri, 4 Mar 2022 11:06:42 +0000 Subject: [PATCH] Badger2040: Build assets from source + CMake builtin copy --- .github/workflows/micropython-badger2040.yml | 12 +- .../badger2040/image_converter/convert.py | 18 +- .../badger2040/image_converter/data_to_py.py | 153 ++ .../modules/badger2040-micropython.cmake | 3 +- .../289-0-wind-in-the-willows-abridged.txt | 1341 +++++++++++++++++ .../modules/badger2040/assets/badge_image.png | Bin 0 -> 3498 bytes .../modules/badger2040/assets/badgerpunk.png | Bin 0 -> 36468 bytes .../badger2040/assets/launchericons.png | Bin 0 -> 10083 bytes .../badger2040/micropython-builtins.cmake | 53 + 9 files changed, 1566 insertions(+), 14 deletions(-) create mode 100644 examples/badger2040/image_converter/data_to_py.py create mode 100644 micropython/modules/badger2040/assets/289-0-wind-in-the-willows-abridged.txt create mode 100644 micropython/modules/badger2040/assets/badge_image.png create mode 100644 micropython/modules/badger2040/assets/badgerpunk.png create mode 100644 micropython/modules/badger2040/assets/launchericons.png create mode 100644 micropython/modules/badger2040/micropython-builtins.cmake diff --git a/.github/workflows/micropython-badger2040.yml b/.github/workflows/micropython-badger2040.yml index 290d1659..d188438d 100644 --- a/.github/workflows/micropython-badger2040.yml +++ b/.github/workflows/micropython-badger2040.yml @@ -42,18 +42,8 @@ jobs: path: pimoroni-pico-${{ github.sha }} # Copy Python module files - - name: Copy modules & examples + - name: HACK - Copy board config fixup run: | - cp -r pimoroni-pico-${GITHUB_SHA}/micropython/badger2040_modules_py/* micropython/ports/rp2/modules/ - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/launcher.py micropython/ports/rp2/modules/_launcher.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/clock.py micropython/ports/rp2/modules/_clock.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/fonts.py micropython/ports/rp2/modules/_fonts.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/e-reader.py micropython/ports/rp2/modules/_ebook.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/image.py micropython/ports/rp2/modules/_image.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/checklist.py micropython/ports/rp2/modules/_list.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/badge.py micropython/ports/rp2/modules/_badge.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/help.py micropython/ports/rp2/modules/_help.py - cp pimoroni-pico-${GITHUB_SHA}/micropython/examples/badger2040/info.py micropython/ports/rp2/modules/_info.py cp pimoroni-pico-${GITHUB_SHA}/micropython/badger2040-mpconfigboard.h micropython/ports/rp2/boards/PICO/mpconfigboard.h # Linux deps diff --git a/examples/badger2040/image_converter/convert.py b/examples/badger2040/image_converter/convert.py index 1e8c43ba..c1c7b447 100755 --- a/examples/badger2040/image_converter/convert.py +++ b/examples/badger2040/image_converter/convert.py @@ -5,14 +5,17 @@ # and reducing to black and white with dither. the data is then output as an # array that can be embedded directly into your c++ code +import io import argparse -import sys from PIL import Image, ImageEnhance from pathlib import Path +import data_to_py parser = argparse.ArgumentParser(description='Converts images into the format used by Badger2040.') parser.add_argument('file', nargs="+", help='input files to convert') +parser.add_argument('--out_dir', type=Path, default=None, help='output directory') parser.add_argument('--binary', action="store_true", help='output binary file for MicroPython') +parser.add_argument('--py', action="store_true", help='output .py file for MicroPython embedding') parser.add_argument('--resize', action="store_true", help='force images to 296x128 pixels') options = parser.parse_args() @@ -39,10 +42,21 @@ for input_filename in options.file: output_data = [~b & 0xff for b in list(img.tobytes())] if options.binary: - output_filename = Path(input_filename).with_suffix(".bin") + if options.out_dir is not None: + output_filename = (options.out_dir / image_name).with_suffix(".bin") + else: + output_filename = Path(input_filename).with_suffix(".bin") print(f"Saving to {output_filename}, {w}x{h}") with open(output_filename, "wb") as out: out.write(bytearray(output_data)) + elif options.py: + if options.out_dir is not None: + output_filename = (options.out_dir / image_name).with_suffix(".py") + else: + output_filename = Path(input_filename).with_suffix(".py") + print(f"Saving to {output_filename}, {w}x{h}") + with open(output_filename, "w") as out: + data_to_py.write_stream(io.BytesIO(bytes(output_data)), out) else: image_code = '''\ static const uint8_t {image_name}[{count}] = {{ diff --git a/examples/badger2040/image_converter/data_to_py.py b/examples/badger2040/image_converter/data_to_py.py new file mode 100644 index 00000000..da604909 --- /dev/null +++ b/examples/badger2040/image_converter/data_to_py.py @@ -0,0 +1,153 @@ +#! /usr/bin/python3 +# -*- coding: utf-8 -*- + +# The MIT License (MIT) +# +# Copyright (c) 2016 Peter Hinch +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +import argparse +import sys +import os + +# UTILITIES FOR WRITING PYTHON SOURCECODE TO A FILE + +# ByteWriter takes as input a variable name and data values and writes +# Python source to an output stream of the form +# my_variable = b'\x01\x02\x03\x04\x05\x06\x07\x08'\ + +# Lines are broken with \ for readability. + + +class ByteWriter(object): + bytes_per_line = 16 + + def __init__(self, stream, varname): + self.stream = stream + self.stream.write('{} =\\\n'.format(varname)) + self.bytecount = 0 # For line breaks + + def _eol(self): + self.stream.write("'\\\n") + + def _eot(self): + self.stream.write("'\n") + + def _bol(self): + self.stream.write("b'") + + # Output a single byte + def obyte(self, data): + if not self.bytecount: + self._bol() + self.stream.write('\\x{:02x}'.format(data)) + self.bytecount += 1 + self.bytecount %= self.bytes_per_line + if not self.bytecount: + self._eol() + + # Output from a sequence + def odata(self, bytelist): + for byt in bytelist: + self.obyte(byt) + + # ensure a correct final line + def eot(self): # User force EOL if one hasn't occurred + if self.bytecount: + self._eot() + self.stream.write('\n') + + +# PYTHON FILE WRITING + +STR01 = """# Code generated by data_to_py.py. +version = '0.1' +""" + +STR02 = """_mvdata = memoryview(_data) + +def data(): + return _mvdata + +""" + +def write_func(stream, name, arg): + stream.write('def {}():\n return {}\n\n'.format(name, arg)) + + +def write_data(op_path, ip_path): + try: + with open(ip_path, 'rb') as ip_stream: + try: + with open(op_path, 'w') as op_stream: + write_stream(ip_stream, op_stream) + except OSError: + print("Can't open", op_path, 'for writing') + return False + except OSError: + print("Can't open", ip_path) + return False + return True + + +def write_stream(ip_stream, op_stream): + op_stream.write(STR01) + op_stream.write('\n') + data = ip_stream.read() + bw_data = ByteWriter(op_stream, '_data') + bw_data.odata(data) + bw_data.eot() + op_stream.write(STR02) + + +# PARSE COMMAND LINE ARGUMENTS + +def quit(msg): + print(msg) + sys.exit(1) + +DESC = """data_to_py.py +Utility to convert an arbitrary binary file to Python source. +Sample usage: +data_to_py.py image.jpg image.py + +""" + +if __name__ == "__main__": + parser = argparse.ArgumentParser(__file__, description=DESC, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument('infile', type=str, help='Input file path') + parser.add_argument('outfile', type=str, + help='Path and name of output file. Must have .py extension.') + + + args = parser.parse_args() + + if not os.path.isfile(args.infile): + quit("Data filename does not exist") + + if not os.path.splitext(args.outfile)[1].upper() == '.PY': + quit('Output filename must have a .py extension.') + + print('Writing Python file.') + if not write_data(args.outfile, args.infile): + sys.exit(1) + + print(args.outfile, 'written successfully.') diff --git a/micropython/modules/badger2040-micropython.cmake b/micropython/modules/badger2040-micropython.cmake index b330b539..663b8497 100644 --- a/micropython/modules/badger2040-micropython.cmake +++ b/micropython/modules/badger2040-micropython.cmake @@ -31,5 +31,6 @@ include(breakout_icp10125/micropython) include(breakout_scd41/micropython) include(badger2040/micropython) +include(badger2040/micropython-builtins) include(plasma/micropython) -include(ulab/code/micropython) +include(ulab/code/micropython) \ No newline at end of file diff --git a/micropython/modules/badger2040/assets/289-0-wind-in-the-willows-abridged.txt b/micropython/modules/badger2040/assets/289-0-wind-in-the-willows-abridged.txt new file mode 100644 index 00000000..ec5e9158 --- /dev/null +++ b/micropython/modules/badger2040/assets/289-0-wind-in-the-willows-abridged.txt @@ -0,0 +1,1341 @@ +The Project Gutenberg eBook of The Wind in the Willows, by Kenneth Grahame + +This eBook is for the use of anyone anywhere in the United States and +most other parts of the world at no cost and with almost no restrictions +whatsoever. You may copy it, give it away or re-use it under the terms +of the Project Gutenberg License included with this eBook or online at +www.gutenberg.org. If you are not located in the United States, you +will have to check the laws of the country where you are located before +using this eBook. + +Title: The Wind in the Willows + +Author: Kenneth Grahame + +Release Date: July, 1995 [eBook #289] +[Most recently updated: May 15, 2021] + +Language: English + +Character set encoding: UTF-8 + +Produced by: Mike Lough and David Widger + +*** START OF THE PROJECT GUTENBERG EBOOK THE WIND IN THE WILLOWS *** + +[Illustration] + + + + +The Wind in the Willows + +by Kenneth Grahame + +Author Of “The Golden Age,” “Dream Days,” Etc. + + +Contents + + CHAPTER I. THE RIVER BANK + CHAPTER II. THE OPEN ROAD + + + + +I. +THE RIVER BANK + + +The Mole had been working very hard all the morning, spring-cleaning +his little home. First with brooms, then with dusters; then on ladders +and steps and chairs, with a brush and a pail of whitewash; till he had +dust in his throat and eyes, and splashes of whitewash all over his +black fur, and an aching back and weary arms. Spring was moving in the +air above and in the earth below and around him, penetrating even his +dark and lowly little house with its spirit of divine discontent and +longing. It was small wonder, then, that he suddenly flung down his +brush on the floor, said “Bother!” and “O blow!” and also “Hang +spring-cleaning!” and bolted out of the house without even waiting to +put on his coat. Something up above was calling him imperiously, and he +made for the steep little tunnel which answered in his case to the +gravelled carriage-drive owned by animals whose residences are nearer +to the sun and air. So he scraped and scratched and scrabbled and +scrooged and then he scrooged again and scrabbled and scratched and +scraped, working busily with his little paws and muttering to himself, +“Up we go! Up we go!” till at last, pop! his snout came out into the +sunlight, and he found himself rolling in the warm grass of a great +meadow. + +“This is fine!” he said to himself. “This is better than whitewashing!” +The sunshine struck hot on his fur, soft breezes caressed his heated +brow, and after the seclusion of the cellarage he had lived in so long +the carol of happy birds fell on his dulled hearing almost like a +shout. Jumping off all his four legs at once, in the joy of living and +the delight of spring without its cleaning, he pursued his way across +the meadow till he reached the hedge on the further side. + +“Hold up!” said an elderly rabbit at the gap. “Sixpence for the +privilege of passing by the private road!” He was bowled over in an +instant by the impatient and contemptuous Mole, who trotted along the +side of the hedge chaffing the other rabbits as they peeped hurriedly +from their holes to see what the row was about. “Onion-sauce! +Onion-sauce!” he remarked jeeringly, and was gone before they could +think of a thoroughly satisfactory reply. Then they all started +grumbling at each other. “How _stupid_ you are! Why didn’t you tell +him——” “Well, why didn’t _you_ say——” “You might have reminded him——” +and so on, in the usual way; but, of course, it was then much too late, +as is always the case. + +It all seemed too good to be true. Hither and thither through the +meadows he rambled busily, along the hedgerows, across the copses, +finding everywhere birds building, flowers budding, leaves +thrusting—everything happy, and progressive, and occupied. And instead +of having an uneasy conscience pricking him and whispering “whitewash!” +he somehow could only feel how jolly it was to be the only idle dog +among all these busy citizens. After all, the best part of a holiday is +perhaps not so much to be resting yourself, as to see all the other +fellows busy working. + +He thought his happiness was complete when, as he meandered aimlessly +along, suddenly he stood by the edge of a full-fed river. Never in his +life had he seen a river before—this sleek, sinuous, full-bodied +animal, chasing and chuckling, gripping things with a gurgle and +leaving them with a laugh, to fling itself on fresh playmates that +shook themselves free, and were caught and held again. All was a-shake +and a-shiver—glints and gleams and sparkles, rustle and swirl, chatter +and bubble. The Mole was bewitched, entranced, fascinated. By the side +of the river he trotted as one trots, when very small, by the side of a +man who holds one spell-bound by exciting stories; and when tired at +last, he sat on the bank, while the river still chattered on to him, a +babbling procession of the best stories in the world, sent from the +heart of the earth to be told at last to the insatiable sea. + +As he sat on the grass and looked across the river, a dark hole in the +bank opposite, just above the water’s edge, caught his eye, and +dreamily he fell to considering what a nice snug dwelling-place it +would make for an animal with few wants and fond of a bijou riverside +residence, above flood level and remote from noise and dust. As he +gazed, something bright and small seemed to twinkle down in the heart +of it, vanished, then twinkled once more like a tiny star. But it could +hardly be a star in such an unlikely situation; and it was too +glittering and small for a glow-worm. Then, as he looked, it winked at +him, and so declared itself to be an eye; and a small face began +gradually to grow up round it, like a frame round a picture. + +A brown little face, with whiskers. + +A grave round face, with the same twinkle in its eye that had first +attracted his notice. + +Small neat ears and thick silky hair. + +It was the Water Rat! + +Then the two animals stood and regarded each other cautiously. + +“Hullo, Mole!” said the Water Rat. + +“Hullo, Rat!” said the Mole. + +“Would you like to come over?” enquired the Rat presently. + +“Oh, its all very well to _talk_,” said the Mole, rather pettishly, he +being new to a river and riverside life and its ways. + +The Rat said nothing, but stooped and unfastened a rope and hauled on +it; then lightly stepped into a little boat which the Mole had not +observed. It was painted blue outside and white within, and was just +the size for two animals; and the Mole’s whole heart went out to it at +once, even though he did not yet fully understand its uses. + +The Rat sculled smartly across and made fast. Then he held up his +forepaw as the Mole stepped gingerly down. “Lean on that!” he said. +“Now then, step lively!” and the Mole to his surprise and rapture found +himself actually seated in the stern of a real boat. + +“This has been a wonderful day!” said he, as the Rat shoved off and +took to the sculls again. “Do you know, I’ve never been in a boat +before in all my life.” + +“What?” cried the Rat, open-mouthed: “Never been in a—you never—well +I—what have you been doing, then?” + +“Is it so nice as all that?” asked the Mole shyly, though he was quite +prepared to believe it as he leant back in his seat and surveyed the +cushions, the oars, the rowlocks, and all the fascinating fittings, and +felt the boat sway lightly under him. + +“Nice? It’s the _only_ thing,” said the Water Rat solemnly, as he leant +forward for his stroke. “Believe me, my young friend, there is +_nothing_—absolute nothing—half so much worth doing as simply messing +about in boats. Simply messing,” he went on dreamily: +“messing—about—in—boats; messing——” + +“Look ahead, Rat!” cried the Mole suddenly. + +It was too late. The boat struck the bank full tilt. The dreamer, the +joyous oarsman, lay on his back at the bottom of the boat, his heels in +the air. + +“—about in boats—or _with_ boats,” the Rat went on composedly, picking +himself up with a pleasant laugh. “In or out of ’em, it doesn’t matter. +Nothing seems really to matter, that’s the charm of it. Whether you get +away, or whether you don’t; whether you arrive at your destination or +whether you reach somewhere else, or whether you never get anywhere at +all, you’re always busy, and you never do anything in particular; and +when you’ve done it there’s always something else to do, and you can do +it if you like, but you’d much better not. Look here! If you’ve really +nothing else on hand this morning, supposing we drop down the river +together, and have a long day of it?” + +The Mole waggled his toes from sheer happiness, spread his chest with a +sigh of full contentment, and leaned back blissfully into the soft +cushions. “_What_ a day I’m having!” he said. “Let us start at once!” + +“Hold hard a minute, then!” said the Rat. He looped the painter through +a ring in his landing-stage, climbed up into his hole above, and after +a short interval reappeared staggering under a fat, wicker +luncheon-basket. + +“Shove that under your feet,” he observed to the Mole, as he passed it +down into the boat. Then he untied the painter and took the sculls +again. + +“What’s inside it?” asked the Mole, wriggling with curiosity. + +“There’s cold chicken inside it,” replied the Rat briefly; “ +coldtonguecoldhamcoldbeefpickledgherkinssaladfrenchrollscresssandwiches +pottedme atgingerbeerlemonadesodawater——” + +“O stop, stop,” cried the Mole in ecstacies: “This is too much!” + +“Do you really think so?” enquired the Rat seriously. “It’s only what I +always take on these little excursions; and the other animals are +always telling me that I’m a mean beast and cut it _very_ fine!” + +The Mole never heard a word he was saying. Absorbed in the new life he +was entering upon, intoxicated with the sparkle, the ripple, the scents +and the sounds and the sunlight, he trailed a paw in the water and +dreamed long waking dreams. The Water Rat, like the good little fellow +he was, sculled steadily on and forebore to disturb him. + +“I like your clothes awfully, old chap,” he remarked after some half an +hour or so had passed. “I’m going to get a black velvet smoking-suit +myself some day, as soon as I can afford it.” + +“I beg your pardon,” said the Mole, pulling himself together with an +effort. “You must think me very rude; but all this is so new to me. +So—this—is—a—River!” + +“_The_ River,” corrected the Rat. + +“And you really live by the river? What a jolly life!” + +“By it and with it and on it and in it,” said the Rat. “It’s brother +and sister to me, and aunts, and company, and food and drink, and +(naturally) washing. It’s my world, and I don’t want any other. What it +hasn’t got is not worth having, and what it doesn’t know is not worth +knowing. Lord! the times we’ve had together! Whether in winter or +summer, spring or autumn, it’s always got its fun and its excitements. +When the floods are on in February, and my cellars and basement are +brimming with drink that’s no good to me, and the brown water runs by +my best bedroom window; or again when it all drops away and, shows +patches of mud that smells like plum-cake, and the rushes and weed clog +the channels, and I can potter about dry shod over most of the bed of +it and find fresh food to eat, and things careless people have dropped +out of boats!” + +“But isn’t it a bit dull at times?” the Mole ventured to ask. “Just you +and the river, and no one else to pass a word with?” + +“No one else to—well, I mustn’t be hard on you,” said the Rat with +forbearance. “You’re new to it, and of course you don’t know. The bank +is so crowded nowadays that many people are moving away altogether: O +no, it isn’t what it used to be, at all. Otters, kingfishers, +dabchicks, moorhens, all of them about all day long and always wanting +you to _do_ something—as if a fellow had no business of his own to +attend to!” + +“What lies over _there?_” asked the Mole, waving a paw towards a +background of woodland that darkly framed the water-meadows on one side +of the river. + +“That? O, that’s just the Wild Wood,” said the Rat shortly. “We don’t +go there very much, we river-bankers.” + +“Aren’t they—aren’t they very _nice_ people in there?” said the Mole, a +trifle nervously. + +“W-e-ll,” replied the Rat, “let me see. The squirrels are all right. +_And_ the rabbits—some of ’em, but rabbits are a mixed lot. And then +there’s Badger, of course. He lives right in the heart of it; wouldn’t +live anywhere else, either, if you paid him to do it. Dear old Badger! +Nobody interferes with _him_. They’d better not,” he added +significantly. + +“Why, who _should_ interfere with him?” asked the Mole. + +“Well, of course—there—are others,” explained the Rat in a hesitating +sort of way. + +“Weasels—and stoats—and foxes—and so on. They’re all right in a way—I’m +very good friends with them—pass the time of day when we meet, and all +that—but they break out sometimes, there’s no denying it, and +then—well, you can’t really trust them, and that’s the fact.” + +The Mole knew well that it is quite against animal-etiquette to dwell +on possible trouble ahead, or even to allude to it; so he dropped the +subject. + +“And beyond the Wild Wood again?” he asked: “Where it’s all blue and +dim, and one sees what may be hills or perhaps they mayn’t, and +something like the smoke of towns, or is it only cloud-drift?” + +“Beyond the Wild Wood comes the Wide World,” said the Rat. “And that’s +something that doesn’t matter, either to you or me. I’ve never been +there, and I’m never going, nor you either, if you’ve got any sense at +all. Don’t ever refer to it again, please. Now then! Here’s our +backwater at last, where we’re going to lunch.” + +Leaving the main stream, they now passed into what seemed at first +sight like a little land-locked lake. Green turf sloped down to either +edge, brown snaky tree-roots gleamed below the surface of the quiet +water, while ahead of them the silvery shoulder and foamy tumble of a +weir, arm-in-arm with a restless dripping mill-wheel, that held up in +its turn a grey-gabled mill-house, filled the air with a soothing +murmur of sound, dull and smothery, yet with little clear voices +speaking up cheerfully out of it at intervals. It was so very beautiful +that the Mole could only hold up both forepaws and gasp, “O my! O my! O +my!” + +The Rat brought the boat alongside the bank, made her fast, helped the +still awkward Mole safely ashore, and swung out the luncheon-basket. +The Mole begged as a favour to be allowed to unpack it all by himself; +and the Rat was very pleased to indulge him, and to sprawl at full +length on the grass and rest, while his excited friend shook out the +table-cloth and spread it, took out all the mysterious packets one by +one and arranged their contents in due order, still gasping, “O my! O +my!” at each fresh revelation. When all was ready, the Rat said, “Now, +pitch in, old fellow!” and the Mole was indeed very glad to obey, for +he had started his spring-cleaning at a very early hour that morning, +as people _will_ do, and had not paused for bite or sup; and he had +been through a very great deal since that distant time which now seemed +so many days ago. + +“What are you looking at?” said the Rat presently, when the edge of +their hunger was somewhat dulled, and the Mole’s eyes were able to +wander off the table-cloth a little. + +“I am looking,” said the Mole, “at a streak of bubbles that I see +travelling along the surface of the water. That is a thing that strikes +me as funny.” + +“Bubbles? Oho!” said the Rat, and chirruped cheerily in an inviting +sort of way. + +A broad glistening muzzle showed itself above the edge of the bank, and +the Otter hauled himself out and shook the water from his coat. + +“Greedy beggars!” he observed, making for the provender. “Why didn’t +you invite me, Ratty?” + +“This was an impromptu affair,” explained the Rat. “By the way—my +friend Mr. Mole.” + +“Proud, I’m sure,” said the Otter, and the two animals were friends +forthwith. + +“Such a rumpus everywhere!” continued the Otter. “All the world seems +out on the river to-day. I came up this backwater to try and get a +moment’s peace, and then stumble upon you fellows!—At least—I beg +pardon—I don’t exactly mean that, you know.” + +There was a rustle behind them, proceeding from a hedge wherein last +year’s leaves still clung thick, and a stripy head, with high shoulders +behind it, peered forth on them. + +“Come on, old Badger!” shouted the Rat. + +The Badger trotted forward a pace or two; then grunted, “H’m! Company,” +and turned his back and disappeared from view. + +“That’s _just_ the sort of fellow he is!” observed the disappointed +Rat. “Simply hates Society! Now we shan’t see any more of him to-day. +Well, tell us, _who’s_ out on the river?” + +“Toad’s out, for one,” replied the Otter. “In his brand-new wager-boat; +new togs, new everything!” + +The two animals looked at each other and laughed. + +“Once, it was nothing but sailing,” said the Rat, “Then he tired of +that and took to punting. Nothing would please him but to punt all day +and every day, and a nice mess he made of it. Last year it was +house-boating, and we all had to go and stay with him in his +house-boat, and pretend we liked it. He was going to spend the rest of +his life in a house-boat. It’s all the same, whatever he takes up; he +gets tired of it, and starts on something fresh.” + +“Such a good fellow, too,” remarked the Otter reflectively: “But no +stability—especially in a boat!” + +From where they sat they could get a glimpse of the main stream across +the island that separated them; and just then a wager-boat flashed into +view, the rower—a short, stout figure—splashing badly and rolling a +good deal, but working his hardest. The Rat stood up and hailed him, +but Toad—for it was he—shook his head and settled sternly to his work. + +“He’ll be out of the boat in a minute if he rolls like that,” said the +Rat, sitting down again. + +“Of course he will,” chuckled the Otter. “Did I ever tell you that good +story about Toad and the lock-keeper? It happened this way. Toad....” + +An errant May-fly swerved unsteadily athwart the current in the +intoxicated fashion affected by young bloods of May-flies seeing life. +A swirl of water and a “cloop!” and the May-fly was visible no more. + +Neither was the Otter. + +The Mole looked down. The voice was still in his ears, but the turf +whereon he had sprawled was clearly vacant. Not an Otter to be seen, as +far as the distant horizon. + +But again there was a streak of bubbles on the surface of the river. + +The Rat hummed a tune, and the Mole recollected that animal-etiquette +forbade any sort of comment on the sudden disappearance of one’s +friends at any moment, for any reason or no reason whatever. + +“Well, well,” said the Rat, “I suppose we ought to be moving. I wonder +which of us had better pack the luncheon-basket?” He did not speak as +if he was frightfully eager for the treat. + +“O, please let me,” said the Mole. So, of course, the Rat let him. + +Packing the basket was not quite such pleasant work as unpacking the +basket. It never is. But the Mole was bent on enjoying everything, and +although just when he had got the basket packed and strapped up tightly +he saw a plate staring up at him from the grass, and when the job had +been done again the Rat pointed out a fork which anybody ought to have +seen, and last of all, behold! the mustard pot, which he had been +sitting on without knowing it—still, somehow, the thing got finished at +last, without much loss of temper. + +The afternoon sun was getting low as the Rat sculled gently homewards +in a dreamy mood, murmuring poetry-things over to himself, and not +paying much attention to Mole. But the Mole was very full of lunch, and +self-satisfaction, and pride, and already quite at home in a boat (so +he thought) and was getting a bit restless besides: and presently he +said, “Ratty! Please, _I_ want to row, now!” + +The Rat shook his head with a smile. “Not yet, my young friend,” he +said—“wait till you’ve had a few lessons. It’s not so easy as it +looks.” + +The Mole was quiet for a minute or two. But he began to feel more and +more jealous of Rat, sculling so strongly and so easily along, and his +pride began to whisper that he could do it every bit as well. He jumped +up and seized the sculls, so suddenly, that the Rat, who was gazing out +over the water and saying more poetry-things to himself, was taken by +surprise and fell backwards off his seat with his legs in the air for +the second time, while the triumphant Mole took his place and grabbed +the sculls with entire confidence. + +“Stop it, you _silly_ ass!” cried the Rat, from the bottom of the boat. +“You can’t do it! You’ll have us over!” + +The Mole flung his sculls back with a flourish, and made a great dig at +the water. He missed the surface altogether, his legs flew up above his +head, and he found himself lying on the top of the prostrate Rat. +Greatly alarmed, he made a grab at the side of the boat, and the next +moment—Sploosh! + +Over went the boat, and he found himself struggling in the river. + +O my, how cold the water was, and O, how _very_ wet it felt. How it +sang in his ears as he went down, down, down! How bright and welcome +the sun looked as he rose to the surface coughing and spluttering! How +black was his despair when he felt himself sinking again! Then a firm +paw gripped him by the back of his neck. It was the Rat, and he was +evidently laughing—the Mole could _feel_ him laughing, right down his +arm and through his paw, and so into his—the Mole’s—neck. + +The Rat got hold of a scull and shoved it under the Mole’s arm; then he +did the same by the other side of him and, swimming behind, propelled +the helpless animal to shore, hauled him out, and set him down on the +bank, a squashy, pulpy lump of misery. + +When the Rat had rubbed him down a bit, and wrung some of the wet out +of him, he said, “Now, then, old fellow! Trot up and down the +towing-path as hard as you can, till you’re warm and dry again, while I +dive for the luncheon-basket.” + +So the dismal Mole, wet without and ashamed within, trotted about till +he was fairly dry, while the Rat plunged into the water again, +recovered the boat, righted her and made her fast, fetched his floating +property to shore by degrees, and finally dived successfully for the +luncheon-basket and struggled to land with it. + +When all was ready for a start once more, the Mole, limp and dejected, +took his seat in the stern of the boat; and as they set off, he said in +a low voice, broken with emotion, “Ratty, my generous friend! I am very +sorry indeed for my foolish and ungrateful conduct. My heart quite +fails me when I think how I might have lost that beautiful +luncheon-basket. Indeed, I have been a complete ass, and I know it. +Will you overlook it this once and forgive me, and let things go on as +before?” + +“That’s all right, bless you!” responded the Rat cheerily. “What’s a +little wet to a Water Rat? I’m more in the water than out of it most +days. Don’t you think any more about it; and, look here! I really think +you had better come and stop with me for a little time. It’s very plain +and rough, you know—not like Toad’s house at all—but you haven’t seen +that yet; still, I can make you comfortable. And I’ll teach you to row, +and to swim, and you’ll soon be as handy on the water as any of us.” + +The Mole was so touched by his kind manner of speaking that he could +find no voice to answer him; and he had to brush away a tear or two +with the back of his paw. But the Rat kindly looked in another +direction, and presently the Mole’s spirits revived again, and he was +even able to give some straight back-talk to a couple of moorhens who +were sniggering to each other about his bedraggled appearance. + +When they got home, the Rat made a bright fire in the parlour, and +planted the Mole in an arm-chair in front of it, having fetched down a +dressing-gown and slippers for him, and told him river stories till +supper-time. Very thrilling stories they were, too, to an +earth-dwelling animal like Mole. Stories about weirs, and sudden +floods, and leaping pike, and steamers that flung hard bottles—at least +bottles were certainly flung, and _from_ steamers, so presumably _by_ +them; and about herons, and how particular they were whom they spoke +to; and about adventures down drains, and night-fishings with Otter, or +excursions far a-field with Badger. Supper was a most cheerful meal; +but very shortly afterwards a terribly sleepy Mole had to be escorted +upstairs by his considerate host, to the best bedroom, where he soon +laid his head on his pillow in great peace and contentment, knowing +that his new-found friend the River was lapping the sill of his window. + +This day was only the first of many similar ones for the emancipated +Mole, each of them longer and full of interest as the ripening summer +moved onward. He learnt to swim and to row, and entered into the joy of +running water; and with his ear to the reed-stems he caught, at +intervals, something of what the wind went whispering so constantly +among them. + + + + +II. +THE OPEN ROAD + + +“Ratty,” said the Mole suddenly, one bright summer morning, “if you +please, I want to ask you a favour.” + +The Rat was sitting on the river bank, singing a little song. He had +just composed it himself, so he was very taken up with it, and would +not pay proper attention to Mole or anything else. Since early morning +he had been swimming in the river, in company with his friends the +ducks. And when the ducks stood on their heads suddenly, as ducks will, +he would dive down and tickle their necks, just under where their chins +would be if ducks had chins, till they were forced to come to the +surface again in a hurry, spluttering and angry and shaking their +feathers at him, for it is impossible to say quite _all_ you feel when +your head is under water. At last they implored him to go away and +attend to his own affairs and leave them to mind theirs. So the Rat +went away, and sat on the river bank in the sun, and made up a song +about them, which he called + +“DUCKS’ DITTY.” + +All along the backwater, +Through the rushes tall, +Ducks are a-dabbling, +Up tails all! +Ducks’ tails, drakes’ tails, +Yellow feet a-quiver, +Yellow bills all out of sight +Busy in the river! + +Slushy green undergrowth +Where the roach swim— +Here we keep our larder, +Cool and full and dim. + +Everyone for what he likes! +_We_ like to be +Heads down, tails up, +Dabbling free! + +High in the blue above +Swifts whirl and call— +_We_ are down a-dabbling +Uptails all! + + +“I don’t know that I think so _very_ much of that little song, Rat,” +observed the Mole cautiously. He was no poet himself and didn’t care +who knew it; and he had a candid nature. + +“Nor don’t the ducks neither,” replied the Rat cheerfully. “They say, +‘_Why_ can’t fellows be allowed to do what they like _when_ they like +and _as_ they like, instead of other fellows sitting on banks and +watching them all the time and making remarks and poetry and things +about them? What _nonsense_ it all is!’ That’s what the ducks say.” + +“So it is, so it is,” said the Mole, with great heartiness. + +“No, it isn’t!” cried the Rat indignantly. + +“Well then, it isn’t, it isn’t,” replied the Mole soothingly. “But what +I wanted to ask you was, won’t you take me to call on Mr. Toad? I’ve +heard so much about him, and I do so want to make his acquaintance.” + +“Why, certainly,” said the good-natured Rat, jumping to his feet and +dismissing poetry from his mind for the day. “Get the boat out, and +we’ll paddle up there at once. It’s never the wrong time to call on +Toad. Early or late he’s always the same fellow. Always good-tempered, +always glad to see you, always sorry when you go!” + +“He must be a very nice animal,” observed the Mole, as he got into the +boat and took the sculls, while the Rat settled himself comfortably in +the stern. + +“He is indeed the best of animals,” replied Rat. “So simple, so +good-natured, and so affectionate. Perhaps he’s not very clever—we +can’t all be geniuses; and it may be that he is both boastful and +conceited. But he has got some great qualities, has Toady.” + +Rounding a bend in the river, they came in sight of a handsome, +dignified old house of mellowed red brick, with well-kept lawns +reaching down to the water’s edge. + +“There’s Toad Hall,” said the Rat; “and that creek on the left, where +the notice-board says, ‘Private. No landing allowed,’ leads to his +boat-house, where we’ll leave the boat. The stables are over there to +the right. That’s the banqueting-hall you’re looking at now—very old, +that is. Toad is rather rich, you know, and this is really one of the +nicest houses in these parts, though we never admit as much to Toad.” + +They glided up the creek, and the Mole shipped his sculls as they +passed into the shadow of a large boat-house. Here they saw many +handsome boats, slung from the cross beams or hauled up on a slip, but +none in the water; and the place had an unused and a deserted air. + +The Rat looked around him. “I understand,” said he. “Boating is played +out. He’s tired of it, and done with it. I wonder what new fad he has +taken up now? Come along and let’s look him up. We shall hear all about +it quite soon enough.” + +They disembarked, and strolled across the gay flower-decked lawns in +search of Toad, whom they presently happened upon resting in a wicker +garden-chair, with a pre-occupied expression of face, and a large map +spread out on his knees. + +“Hooray!” he cried, jumping up on seeing them, “this is splendid!” He +shook the paws of both of them warmly, never waiting for an +introduction to the Mole. “How _kind_ of you!” he went on, dancing +round them. “I was just going to send a boat down the river for you, +Ratty, with strict orders that you were to be fetched up here at once, +whatever you were doing. I want you badly—both of you. Now what will +you take? Come inside and have something! You don’t know how lucky it +is, your turning up just now!” + +“Let’s sit quiet a bit, Toady!” said the Rat, throwing himself into an +easy chair, while the Mole took another by the side of him and made +some civil remark about Toad’s “delightful residence.” + +“Finest house on the whole river,” cried Toad boisterously. “Or +anywhere else, for that matter,” he could not help adding. + +Here the Rat nudged the Mole. Unfortunately the Toad saw him do it, and +turned very red. There was a moment’s painful silence. Then Toad burst +out laughing. “All right, Ratty,” he said. “It’s only my way, you know. +And it’s not such a very bad house, is it? You know you rather like it +yourself. Now, look here. Let’s be sensible. You are the very animals I +wanted. You’ve got to help me. It’s most important!” + +“It’s about your rowing, I suppose,” said the Rat, with an innocent +air. “You’re getting on fairly well, though you splash a good bit +still. With a great deal of patience, and any quantity of coaching, you +may——” + +“O, pooh! boating!” interrupted the Toad, in great disgust. “Silly +boyish amusement. I’ve given that up _long_ ago. Sheer waste of time, +that’s what it is. It makes me downright sorry to see you fellows, who +ought to know better, spending all your energies in that aimless +manner. No, I’ve discovered the real thing, the only genuine occupation +for a life time. I propose to devote the remainder of mine to it, and +can only regret the wasted years that lie behind me, squandered in +trivialities. Come with me, dear Ratty, and your amiable friend also, +if he will be so very good, just as far as the stable-yard, and you +shall see what you shall see!” + +He led the way to the stable-yard accordingly, the Rat following with a +most mistrustful expression; and there, drawn out of the coach house +into the open, they saw a gipsy caravan, shining with newness, painted +a canary-yellow picked out with green, and red wheels. + +“There you are!” cried the Toad, straddling and expanding himself. +“There’s real life for you, embodied in that little cart. The open +road, the dusty highway, the heath, the common, the hedgerows, the +rolling downs! Camps, villages, towns, cities! Here to-day, up and off +to somewhere else to-morrow! Travel, change, interest, excitement! The +whole world before you, and a horizon that’s always changing! And mind! +this is the very finest cart of its sort that was ever built, without +any exception. Come inside and look at the arrangements. Planned ’em +all myself, I did!” + +The Mole was tremendously interested and excited, and followed him +eagerly up the steps and into the interior of the caravan. The Rat only +snorted and thrust his hands deep into his pockets, remaining where he +was. + +It was indeed very compact and comfortable. Little sleeping bunks—a +little table that folded up against the wall—a cooking-stove, lockers, +bookshelves, a bird-cage with a bird in it; and pots, pans, jugs and +kettles of every size and variety. + +“All complete!” said the Toad triumphantly, pulling open a locker. “You +see—biscuits, potted lobster, sardines—everything you can possibly +want. Soda-water here—baccy there—letter-paper, bacon, jam, cards and +dominoes—you’ll find,” he continued, as they descended the steps again, +“you’ll find that nothing what ever has been forgotten, when we make +our start this afternoon.” + +“I beg your pardon,” said the Rat slowly, as he chewed a straw, “but +did I overhear you say something about ‘_we_,’ and ‘_start_,’ and +‘_this afternoon?_’” + +“Now, you dear good old Ratty,” said Toad, imploringly, “don’t begin +talking in that stiff and sniffy sort of way, because you know you’ve +_got_ to come. I can’t possibly manage without you, so please consider +it settled, and don’t argue—it’s the one thing I can’t stand. You +surely don’t mean to stick to your dull fusty old river all your life, +and just live in a hole in a bank, and _boat?_ I want to show you the +world! I’m going to make an _animal_ of you, my boy!” + +“I don’t care,” said the Rat, doggedly. “I’m not coming, and that’s +flat. And I _am_ going to stick to my old river, _and_ live in a hole, +_and_ boat, as I’ve always done. And what’s more, Mole’s going to stick +to me and do as I do, aren’t you, Mole?” + +“Of course I am,” said the Mole, loyally. “I’ll always stick to you, +Rat, and what you say is to be—has got to be. All the same, it sounds +as if it might have been—well, rather fun, you know!” he added, +wistfully. Poor Mole! The Life Adventurous was so new a thing to him, +and so thrilling; and this fresh aspect of it was so tempting; and he +had fallen in love at first sight with the canary-coloured cart and all +its little fitments. + +The Rat saw what was passing in his mind, and wavered. He hated +disappointing people, and he was fond of the Mole, and would do almost +anything to oblige him. Toad was watching both of them closely. + +“Come along in, and have some lunch,” he said, diplomatically, “and +we’ll talk it over. We needn’t decide anything in a hurry. Of course, +_I_ don’t really care. I only want to give pleasure to you fellows. +‘Live for others!’ That’s my motto in life.” + +During luncheon—which was excellent, of course, as everything at Toad +Hall always was—the Toad simply let himself go. Disregarding the Rat, +he proceeded to play upon the inexperienced Mole as on a harp. +Naturally a voluble animal, and always mastered by his imagination, he +painted the prospects of the trip and the joys of the open life and the +roadside in such glowing colours that the Mole could hardly sit in his +chair for excitement. Somehow, it soon seemed taken for granted by all +three of them that the trip was a settled thing; and the Rat, though +still unconvinced in his mind, allowed his good-nature to over-ride his +personal objections. He could not bear to disappoint his two friends, +who were already deep in schemes and anticipations, planning out each +day’s separate occupation for several weeks ahead. + +When they were quite ready, the now triumphant Toad led his companions +to the paddock and set them to capture the old grey horse, who, without +having been consulted, and to his own extreme annoyance, had been told +off by Toad for the dustiest job in this dusty expedition. He frankly +preferred the paddock, and took a deal of catching. Meantime Toad +packed the lockers still tighter with necessaries, and hung nosebags, +nets of onions, bundles of hay, and baskets from the bottom of the +cart. At last the horse was caught and harnessed, and they set off, all +talking at once, each animal either trudging by the side of the cart or +sitting on the shaft, as the humour took him. It was a golden +afternoon. The smell of the dust they kicked up was rich and +satisfying; out of thick orchards on either side the road, birds called +and whistled to them cheerily; good-natured wayfarers, passing them, +gave them “Good-day,” or stopped to say nice things about their +beautiful cart; and rabbits, sitting at their front doors in the +hedgerows, held up their fore-paws, and said, “O my! O my! O my!” + +Late in the evening, tired and happy and miles from home, they drew up +on a remote common far from habitations, turned the horse loose to +graze, and ate their simple supper sitting on the grass by the side of +the cart. Toad talked big about all he was going to do in the days to +come, while stars grew fuller and larger all around them, and a yellow +moon, appearing suddenly and silently from nowhere in particular, came +to keep them company and listen to their talk. At last they turned in +to their little bunks in the cart; and Toad, kicking out his legs, +sleepily said, “Well, good night, you fellows! This is the real life +for a gentleman! Talk about your old river!” + +“I _don’t_ talk about my river,” replied the patient Rat. “You _know_ I +don’t, Toad. But I _think_ about it,” he added pathetically, in a lower +tone: “I think about it—all the time!” + +The Mole reached out from under his blanket, felt for the Rat’s paw in +the darkness, and gave it a squeeze. “I’ll do whatever you like, +Ratty,” he whispered. “Shall we run away to-morrow morning, quite +early—_very_ early—and go back to our dear old hole on the river?” + +“No, no, we’ll see it out,” whispered back the Rat. “Thanks awfully, +but I ought to stick by Toad till this trip is ended. It wouldn’t be +safe for him to be left to himself. It won’t take very long. His fads +never do. Good night!” + +The end was indeed nearer than even the Rat suspected. + +After so much open air and excitement the Toad slept very soundly, and +no amount of shaking could rouse him out of bed next morning. So the +Mole and Rat turned to, quietly and manfully, and while the Rat saw to +the horse, and lit a fire, and cleaned last night’s cups and platters, +and got things ready for breakfast, the Mole trudged off to the nearest +village, a long way off, for milk and eggs and various necessaries the +Toad had, of course, forgotten to provide. The hard work had all been +done, and the two animals were resting, thoroughly exhausted, by the +time Toad appeared on the scene, fresh and gay, remarking what a +pleasant easy life it was they were all leading now, after the cares +and worries and fatigues of housekeeping at home. + +They had a pleasant ramble that day over grassy downs and along narrow +by-lanes, and camped as before, on a common, only this time the two +guests took care that Toad should do his fair share of work. In +consequence, when the time came for starting next morning, Toad was by +no means so rapturous about the simplicity of the primitive life, and +indeed attempted to resume his place in his bunk, whence he was hauled +by force. Their way lay, as before, across country by narrow lanes, and +it was not till the afternoon that they came out on the high-road, +their first high-road; and there disaster, fleet and unforeseen, sprang +out on them—disaster momentous indeed to their expedition, but simply +overwhelming in its effect on the after-career of Toad. + +They were strolling along the high-road easily, the Mole by the horse’s +head, talking to him, since the horse had complained that he was being +frightfully left out of it, and nobody considered him in the least; the +Toad and the Water Rat walking behind the cart talking together—at +least Toad was talking, and Rat was saying at intervals, “Yes, +precisely; and what did _you_ say to _him?_”—and thinking all the time +of something very different, when far behind them they heard a faint +warning hum; like the drone of a distant bee. Glancing back, they saw a +small cloud of dust, with a dark centre of energy, advancing on them at +incredible speed, while from out the dust a faint “Poop-poop!” wailed +like an uneasy animal in pain. Hardly regarding it, they turned to +resume their conversation, when in an instant (as it seemed) the +peaceful scene was changed, and with a blast of wind and a whirl of +sound that made them jump for the nearest ditch, It was on them! The +“Poop-poop” rang with a brazen shout in their ears, they had a moment’s +glimpse of an interior of glittering plate-glass and rich morocco, and +the magnificent motor-car, immense, breath-snatching, passionate, with +its pilot tense and hugging his wheel, possessed all earth and air for +the fraction of a second, flung an enveloping cloud of dust that +blinded and enwrapped them utterly, and then dwindled to a speck in the +far distance, changed back into a droning bee once more. + +The old grey horse, dreaming, as he plodded along, of his quiet +paddock, in a new raw situation such as this simply abandoned himself +to his natural emotions. Rearing, plunging, backing steadily, in spite +of all the Mole’s efforts at his head, and all the Mole’s lively +language directed at his better feelings, he drove the cart backwards +towards the deep ditch at the side of the road. It wavered an +instant—then there was a heartrending crash—and the canary-coloured +cart, their pride and their joy, lay on its side in the ditch, an +irredeemable wreck. + +The Rat danced up and down in the road, simply transported with +passion. “You villains!” he shouted, shaking both fists, “You +scoundrels, you highwaymen, you—you—roadhogs!—I’ll have the law of you! +I’ll report you! I’ll take you through all the Courts!” His +home-sickness had quite slipped away from him, and for the moment he +was the skipper of the canary-coloured vessel driven on a shoal by the +reckless jockeying of rival mariners, and he was trying to recollect +all the fine and biting things he used to say to masters of +steam-launches when their wash, as they drove too near the bank, used +to flood his parlour-carpet at home. + +Toad sat straight down in the middle of the dusty road, his legs +stretched out before him, and stared fixedly in the direction of the +disappearing motor-car. He breathed short, his face wore a placid +satisfied expression, and at intervals he faintly murmured “Poop-poop!” + +The Mole was busy trying to quiet the horse, which he succeeded in +doing after a time. Then he went to look at the cart, on its side in +the ditch. It was indeed a sorry sight. Panels and windows smashed, +axles hopelessly bent, one wheel off, sardine-tins scattered over the +wide world, and the bird in the bird-cage sobbing pitifully and calling +to be let out. + +The Rat came to help him, but their united efforts were not sufficient +to right the cart. “Hi! Toad!” they cried. “Come and bear a hand, can’t +you!” + +The Toad never answered a word, or budged from his seat in the road; so +they went to see what was the matter with him. They found him in a sort +of a trance, a happy smile on his face, his eyes still fixed on the +dusty wake of their destroyer. At intervals he was still heard to +murmur “Poop-poop!” + +The Rat shook him by the shoulder. “Are you coming to help us, Toad?” +he demanded sternly. + +“Glorious, stirring sight!” murmured Toad, never offering to move. “The +poetry of motion! The _real_ way to travel! The _only_ way to travel! +Here to-day—in next week to-morrow! Villages skipped, towns and cities +jumped—always somebody else’s horizon! O bliss! O poop-poop! O my! O +my!” + +“O _stop_ being an ass, Toad!” cried the Mole despairingly. + +“And to think I never _knew!_” went on the Toad in a dreamy monotone. +“All those wasted years that lie behind me, I never knew, never even +_dreamt!_ But _now_—but now that I know, now that I fully realise! O +what a flowery track lies spread before me, henceforth! What +dust-clouds shall spring up behind me as I speed on my reckless way! +What carts I shall fling carelessly into the ditch in the wake of my +magnificent onset! Horrid little carts—common carts—canary-coloured +carts!” + +“What are we to do with him?” asked the Mole of the Water Rat. + +“Nothing at all,” replied the Rat firmly. “Because there is really +nothing to be done. You see, I know him from of old. He is now +possessed. He has got a new craze, and it always takes him that way, in +its first stage. He’ll continue like that for days now, like an animal +walking in a happy dream, quite useless for all practical purposes. +Never mind him. Let’s go and see what there is to be done about the +cart.” + +A careful inspection showed them that, even if they succeeded in +righting it by themselves, the cart would travel no longer. The axles +were in a hopeless state, and the missing wheel was shattered into +pieces. + +The Rat knotted the horse’s reins over his back and took him by the +head, carrying the bird cage and its hysterical occupant in the other +hand. “Come on!” he said grimly to the Mole. “It’s five or six miles to +the nearest town, and we shall just have to walk it. The sooner we make +a start the better.” + +“But what about Toad?” asked the Mole anxiously, as they set off +together. “We can’t leave him here, sitting in the middle of the road +by himself, in the distracted state he’s in! It’s not safe. Supposing +another Thing were to come along?” + +“O, _bother_ Toad,” said the Rat savagely; “I’ve done with him!” + +They had not proceeded very far on their way, however, when there was a +pattering of feet behind them, and Toad caught them up and thrust a paw +inside the elbow of each of them; still breathing short and staring +into vacancy. + +“Now, look here, Toad!” said the Rat sharply: “as soon as we get to the +town, you’ll have to go straight to the police-station, and see if they +know anything about that motor-car and who it belongs to, and lodge a +complaint against it. And then you’ll have to go to a blacksmith’s or a +wheelwright’s and arrange for the cart to be fetched and mended and put +to rights. It’ll take time, but it’s not quite a hopeless smash. +Meanwhile, the Mole and I will go to an inn and find comfortable rooms +where we can stay till the cart’s ready, and till your nerves have +recovered their shock.” + +“Police-station! Complaint!” murmured Toad dreamily. “Me _complain_ of +that beautiful, that heavenly vision that has been vouchsafed me! +_Mend_ the _cart!_ I’ve done with carts for ever. I never want to see +the cart, or to hear of it, again. O, Ratty! You can’t think how +obliged I am to you for consenting to come on this trip! I wouldn’t +have gone without you, and then I might never have seen that—that swan, +that sunbeam, that thunderbolt! I might never have heard that +entrancing sound, or smelt that bewitching smell! I owe it all to you, +my best of friends!” + +The Rat turned from him in despair. “You see what it is?” he said to +the Mole, addressing him across Toad’s head: “He’s quite hopeless. I +give it up—when we get to the town we’ll go to the railway station, and +with luck we may pick up a train there that’ll get us back to riverbank +to-night. And if ever you catch me going a-pleasuring with this +provoking animal again!”—He snorted, and during the rest of that weary +trudge addressed his remarks exclusively to Mole. + +On reaching the town they went straight to the station and deposited +Toad in the second-class waiting-room, giving a porter twopence to keep +a strict eye on him. They then left the horse at an inn stable, and +gave what directions they could about the cart and its contents. +Eventually, a slow train having landed them at a station not very far +from Toad Hall, they escorted the spell-bound, sleep-walking Toad to +his door, put him inside it, and instructed his housekeeper to feed +him, undress him, and put him to bed. Then they got out their boat from +the boat-house, sculled down the river home, and at a very late hour +sat down to supper in their own cosy riverside parlour, to the Rat’s +great joy and contentment. + +The following evening the Mole, who had risen late and taken things +very easy all day, was sitting on the bank fishing, when the Rat, who +had been looking up his friends and gossiping, came strolling along to +find him. “Heard the news?” he said. “There’s nothing else being talked +about, all along the river bank. Toad went up to Town by an early train +this morning. And he has ordered a large and very expensive motor-car.” + + + +*** END OF THE PROJECT GUTENBERG EBOOK THE WIND IN THE WILLOWS *** + +***** This file should be named 289-0.txt or 289-0.zip ***** +This and all associated files of various formats will be found in: + https://www.gutenberg.org/2/8/289/ + +Updated editions will replace the previous one--the old editions will +be renamed. + +Creating the works from print editions not protected by U.S. copyright +law means that no one owns a United States copyright in these works, +so the Foundation (and you!) can copy and distribute it in the +United States without permission and without paying copyright +royalties. Special rules, set forth in the General Terms of Use part +of this license, apply to copying and distributing Project +Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm +concept and trademark. Project Gutenberg is a registered trademark, +and may not be used if you charge for an eBook, except by following +the terms of the trademark license, including paying royalties for use +of the Project Gutenberg trademark. If you do not charge anything for +copies of this eBook, complying with the trademark license is very +easy. You may use this eBook for nearly any purpose such as creation +of derivative works, reports, performances and research. Project +Gutenberg eBooks may be modified and printed and given away--you may +do practically ANYTHING in the United States with eBooks not protected +by U.S. copyright law. Redistribution is subject to the trademark +license, especially commercial redistribution. + +START: FULL LICENSE + +THE FULL PROJECT GUTENBERG LICENSE +PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK + +To protect the Project Gutenberg-tm mission of promoting the free +distribution of electronic works, by using or distributing this work +(or any other work associated in any way with the phrase "Project +Gutenberg"), you agree to comply with all the terms of the Full +Project Gutenberg-tm License available with this file or online at +www.gutenberg.org/license. + +Section 1. General Terms of Use and Redistributing Project +Gutenberg-tm electronic works + +1.A. By reading or using any part of this Project Gutenberg-tm +electronic work, you indicate that you have read, understand, agree to +and accept all the terms of this license and intellectual property +(trademark/copyright) agreement. If you do not agree to abide by all +the terms of this agreement, you must cease using and return or +destroy all copies of Project Gutenberg-tm electronic works in your +possession. If you paid a fee for obtaining a copy of or access to a +Project Gutenberg-tm electronic work and you do not agree to be bound +by the terms of this agreement, you may obtain a refund from the +person or entity to whom you paid the fee as set forth in paragraph +1.E.8. + +1.B. "Project Gutenberg" is a registered trademark. It may only be +used on or associated in any way with an electronic work by people who +agree to be bound by the terms of this agreement. There are a few +things that you can do with most Project Gutenberg-tm electronic works +even without complying with the full terms of this agreement. See +paragraph 1.C below. There are a lot of things you can do with Project +Gutenberg-tm electronic works if you follow the terms of this +agreement and help preserve free future access to Project Gutenberg-tm +electronic works. See paragraph 1.E below. + +1.C. The Project Gutenberg Literary Archive Foundation ("the +Foundation" or PGLAF), owns a compilation copyright in the collection +of Project Gutenberg-tm electronic works. Nearly all the individual +works in the collection are in the public domain in the United +States. If an individual work is unprotected by copyright law in the +United States and you are located in the United States, we do not +claim a right to prevent you from copying, distributing, performing, +displaying or creating derivative works based on the work as long as +all references to Project Gutenberg are removed. Of course, we hope +that you will support the Project Gutenberg-tm mission of promoting +free access to electronic works by freely sharing Project Gutenberg-tm +works in compliance with the terms of this agreement for keeping the +Project Gutenberg-tm name associated with the work. You can easily +comply with the terms of this agreement by keeping this work in the +same format with its attached full Project Gutenberg-tm License when +you share it without charge with others. + +1.D. The copyright laws of the place where you are located also govern +what you can do with this work. Copyright laws in most countries are +in a constant state of change. If you are outside the United States, +check the laws of your country in addition to the terms of this +agreement before downloading, copying, displaying, performing, +distributing or creating derivative works based on this work or any +other Project Gutenberg-tm work. The Foundation makes no +representations concerning the copyright status of any work in any +country other than the United States. + +1.E. Unless you have removed all references to Project Gutenberg: + +1.E.1. The following sentence, with active links to, or other +immediate access to, the full Project Gutenberg-tm License must appear +prominently whenever any copy of a Project Gutenberg-tm work (any work +on which the phrase "Project Gutenberg" appears, or with which the +phrase "Project Gutenberg" is associated) is accessed, displayed, +performed, viewed, copied or distributed: + + This eBook is for the use of anyone anywhere in the United States and + most other parts of the world at no cost and with almost no + restrictions whatsoever. You may copy it, give it away or re-use it + under the terms of the Project Gutenberg License included with this + eBook or online at www.gutenberg.org. If you are not located in the + United States, you will have to check the laws of the country where + you are located before using this eBook. + +1.E.2. If an individual Project Gutenberg-tm electronic work is +derived from texts not protected by U.S. copyright law (does not +contain a notice indicating that it is posted with permission of the +copyright holder), the work can be copied and distributed to anyone in +the United States without paying any fees or charges. If you are +redistributing or providing access to a work with the phrase "Project +Gutenberg" associated with or appearing on the work, you must comply +either with the requirements of paragraphs 1.E.1 through 1.E.7 or +obtain permission for the use of the work and the Project Gutenberg-tm +trademark as set forth in paragraphs 1.E.8 or 1.E.9. + +1.E.3. If an individual Project Gutenberg-tm electronic work is posted +with the permission of the copyright holder, your use and distribution +must comply with both paragraphs 1.E.1 through 1.E.7 and any +additional terms imposed by the copyright holder. Additional terms +will be linked to the Project Gutenberg-tm License for all works +posted with the permission of the copyright holder found at the +beginning of this work. + +1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm +License terms from this work, or any files containing a part of this +work or any other work associated with Project Gutenberg-tm. + +1.E.5. Do not copy, display, perform, distribute or redistribute this +electronic work, or any part of this electronic work, without +prominently displaying the sentence set forth in paragraph 1.E.1 with +active links or immediate access to the full terms of the Project +Gutenberg-tm License. + +1.E.6. You may convert to and distribute this work in any binary, +compressed, marked up, nonproprietary or proprietary form, including +any word processing or hypertext form. However, if you provide access +to or distribute copies of a Project Gutenberg-tm work in a format +other than "Plain Vanilla ASCII" or other format used in the official +version posted on the official Project Gutenberg-tm website +(www.gutenberg.org), you must, at no additional cost, fee or expense +to the user, provide a copy, a means of exporting a copy, or a means +of obtaining a copy upon request, of the work in its original "Plain +Vanilla ASCII" or other form. Any alternate format must include the +full Project Gutenberg-tm License as specified in paragraph 1.E.1. + +1.E.7. Do not charge a fee for access to, viewing, displaying, +performing, copying or distributing any Project Gutenberg-tm works +unless you comply with paragraph 1.E.8 or 1.E.9. + +1.E.8. You may charge a reasonable fee for copies of or providing +access to or distributing Project Gutenberg-tm electronic works +provided that: + +* You pay a royalty fee of 20% of the gross profits you derive from + the use of Project Gutenberg-tm works calculated using the method + you already use to calculate your applicable taxes. The fee is owed + to the owner of the Project Gutenberg-tm trademark, but he has + agreed to donate royalties under this paragraph to the Project + Gutenberg Literary Archive Foundation. Royalty payments must be paid + within 60 days following each date on which you prepare (or are + legally required to prepare) your periodic tax returns. Royalty + payments should be clearly marked as such and sent to the Project + Gutenberg Literary Archive Foundation at the address specified in + Section 4, "Information about donations to the Project Gutenberg + Literary Archive Foundation." + +* You provide a full refund of any money paid by a user who notifies + you in writing (or by e-mail) within 30 days of receipt that s/he + does not agree to the terms of the full Project Gutenberg-tm + License. You must require such a user to return or destroy all + copies of the works possessed in a physical medium and discontinue + all use of and all access to other copies of Project Gutenberg-tm + works. + +* You provide, in accordance with paragraph 1.F.3, a full refund of + any money paid for a work or a replacement copy, if a defect in the + electronic work is discovered and reported to you within 90 days of + receipt of the work. + +* You comply with all other terms of this agreement for free + distribution of Project Gutenberg-tm works. + +1.E.9. If you wish to charge a fee or distribute a Project +Gutenberg-tm electronic work or group of works on different terms than +are set forth in this agreement, you must obtain permission in writing +from the Project Gutenberg Literary Archive Foundation, the manager of +the Project Gutenberg-tm trademark. Contact the Foundation as set +forth in Section 3 below. + +1.F. + +1.F.1. Project Gutenberg volunteers and employees expend considerable +effort to identify, do copyright research on, transcribe and proofread +works not protected by U.S. copyright law in creating the Project +Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm +electronic works, and the medium on which they may be stored, may +contain "Defects," such as, but not limited to, incomplete, inaccurate +or corrupt data, transcription errors, a copyright or other +intellectual property infringement, a defective or damaged disk or +other medium, a computer virus, or computer codes that damage or +cannot be read by your equipment. + +1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right +of Replacement or Refund" described in paragraph 1.F.3, the Project +Gutenberg Literary Archive Foundation, the owner of the Project +Gutenberg-tm trademark, and any other party distributing a Project +Gutenberg-tm electronic work under this agreement, disclaim all +liability to you for damages, costs and expenses, including legal +fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT +LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE +PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE +TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE +LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR +INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH +DAMAGE. + +1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a +defect in this electronic work within 90 days of receiving it, you can +receive a refund of the money (if any) you paid for it by sending a +written explanation to the person you received the work from. If you +received the work on a physical medium, you must return the medium +with your written explanation. The person or entity that provided you +with the defective work may elect to provide a replacement copy in +lieu of a refund. If you received the work electronically, the person +or entity providing it to you may choose to give you a second +opportunity to receive the work electronically in lieu of a refund. If +the second copy is also defective, you may demand a refund in writing +without further opportunities to fix the problem. + +1.F.4. Except for the limited right of replacement or refund set forth +in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO +OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE. + +1.F.5. Some states do not allow disclaimers of certain implied +warranties or the exclusion or limitation of certain types of +damages. If any disclaimer or limitation set forth in this agreement +violates the law of the state applicable to this agreement, the +agreement shall be interpreted to make the maximum disclaimer or +limitation permitted by the applicable state law. The invalidity or +unenforceability of any provision of this agreement shall not void the +remaining provisions. + +1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the +trademark owner, any agent or employee of the Foundation, anyone +providing copies of Project Gutenberg-tm electronic works in +accordance with this agreement, and any volunteers associated with the +production, promotion and distribution of Project Gutenberg-tm +electronic works, harmless from all liability, costs and expenses, +including legal fees, that arise directly or indirectly from any of +the following which you do or cause to occur: (a) distribution of this +or any Project Gutenberg-tm work, (b) alteration, modification, or +additions or deletions to any Project Gutenberg-tm work, and (c) any +Defect you cause. + +Section 2. Information about the Mission of Project Gutenberg-tm + +Project Gutenberg-tm is synonymous with the free distribution of +electronic works in formats readable by the widest variety of +computers including obsolete, old, middle-aged and new computers. It +exists because of the efforts of hundreds of volunteers and donations +from people in all walks of life. + +Volunteers and financial support to provide volunteers with the +assistance they need are critical to reaching Project Gutenberg-tm's +goals and ensuring that the Project Gutenberg-tm collection will +remain freely available for generations to come. In 2001, the Project +Gutenberg Literary Archive Foundation was created to provide a secure +and permanent future for Project Gutenberg-tm and future +generations. To learn more about the Project Gutenberg Literary +Archive Foundation and how your efforts and donations can help, see +Sections 3 and 4 and the Foundation information page at +www.gutenberg.org + +Section 3. Information about the Project Gutenberg Literary +Archive Foundation + +The Project Gutenberg Literary Archive Foundation is a non-profit +501(c)(3) educational corporation organized under the laws of the +state of Mississippi and granted tax exempt status by the Internal +Revenue Service. The Foundation's EIN or federal tax identification +number is 64-6221541. Contributions to the Project Gutenberg Literary +Archive Foundation are tax deductible to the full extent permitted by +U.S. federal laws and your state's laws. + +The Foundation's business office is located at 809 North 1500 West, +Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up +to date contact information can be found at the Foundation's website +and official page at www.gutenberg.org/contact + +Section 4. Information about Donations to the Project Gutenberg +Literary Archive Foundation + +Project Gutenberg-tm depends upon and cannot survive without +widespread public support and donations to carry out its mission of +increasing the number of public domain and licensed works that can be +freely distributed in machine-readable form accessible by the widest +array of equipment including outdated equipment. Many small donations +($1 to $5,000) are particularly important to maintaining tax exempt +status with the IRS. + +The Foundation is committed to complying with the laws regulating +charities and charitable donations in all 50 states of the United +States. Compliance requirements are not uniform and it takes a +considerable effort, much paperwork and many fees to meet and keep up +with these requirements. We do not solicit donations in locations +where we have not received written confirmation of compliance. To SEND +DONATIONS or determine the status of compliance for any particular +state visit www.gutenberg.org/donate + +While we cannot and do not solicit contributions from states where we +have not met the solicitation requirements, we know of no prohibition +against accepting unsolicited donations from donors in such states who +approach us with offers to donate. + +International donations are gratefully accepted, but we cannot make +any statements concerning tax treatment of donations received from +outside the United States. U.S. laws alone swamp our small staff. + +Please check the Project Gutenberg web pages for current donation +methods and addresses. Donations are accepted in a number of other +ways including checks, online payments and credit card donations. To +donate, please visit: www.gutenberg.org/donate + +Section 5. General Information About Project Gutenberg-tm electronic works + +Professor Michael S. Hart was the originator of the Project +Gutenberg-tm concept of a library of electronic works that could be +freely shared with anyone. For forty years, he produced and +distributed Project Gutenberg-tm eBooks with only a loose network of +volunteer support. + +Project Gutenberg-tm eBooks are often created from several printed +editions, all of which are confirmed as not protected by copyright in +the U.S. unless a copyright notice is included. Thus, we do not +necessarily keep eBooks in compliance with any particular paper +edition. + +Most people start at our website which has the main PG search +facility: www.gutenberg.org + +This website includes information about Project Gutenberg-tm, +including how to make donations to the Project Gutenberg Literary +Archive Foundation, how to help produce our new eBooks, and how to +subscribe to our email newsletter to hear about new eBooks. + + diff --git a/micropython/modules/badger2040/assets/badge_image.png b/micropython/modules/badger2040/assets/badge_image.png new file mode 100644 index 0000000000000000000000000000000000000000..b5147dc73af9e358ed42403bcb3a2d275e05c253 GIT binary patch literal 3498 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 Y2k?WF#JYsI@&Et;07*qoM6N<$g5A!R4FCWD literal 0 HcmV?d00001 diff --git a/micropython/modules/badger2040/assets/badgerpunk.png b/micropython/modules/badger2040/assets/badgerpunk.png new file mode 100644 index 0000000000000000000000000000000000000000..f7568a2ee3f5066b3759d9df0a3289a4110d2dfc GIT binary patch literal 36468 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 JD^(pL{|9$>F(m*1 literal 0 HcmV?d00001 diff --git a/micropython/modules/badger2040/micropython-builtins.cmake b/micropython/modules/badger2040/micropython-builtins.cmake new file mode 100644 index 00000000..3e245943 --- /dev/null +++ b/micropython/modules/badger2040/micropython-builtins.cmake @@ -0,0 +1,53 @@ +function (convert_image TARGET IMAGE) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${IMAGE}.py + + COMMAND + cd ${CMAKE_CURRENT_LIST_DIR}/assets && python3 ../../../../examples/badger2040/image_converter/convert.py --out_dir ${CMAKE_CURRENT_BINARY_DIR}/../modules --py ${IMAGE}.png + + DEPENDS ${CMAKE_CURRENT_LIST_DIR}/assets/${IMAGE}.png + ) + target_sources(${TARGET} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${IMAGE}.py) +endfunction() + +function (convert_raw TARGET SRC DST) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + COMMAND + cd ${CMAKE_CURRENT_LIST_DIR}/assets && python3 ../../../../examples/badger2040/image_converter/data_to_py.py ${CMAKE_CURRENT_LIST_DIR}/assets/${SRC} ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + DEPENDS ${CMAKE_CURRENT_LIST_DIR}/assets/${SRC} + ) + target_sources(${TARGET} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py) +endfunction() + +function (copy_module TARGET SRC DST) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + COMMAND + cp ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + DEPENDS ${src} + ) + + target_sources(${TARGET} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py) +endfunction() + +convert_image(usermod_badger2040 badge_image) +convert_image(usermod_badger2040 badgerpunk) +convert_image(usermod_badger2040 launchericons) + +convert_raw(usermod_badger2040 289-0-wind-in-the-willows-abridged.txt witw) + +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../badger2040_modules_py/boot.py boot) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/launcher.py _launcher) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/clock.py _clock) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/fonts.py _fonts) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/e-reader.py _ebook) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/image.py _image) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/checklist.py _list) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/badge.py _badge) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/help.py _help) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/../../examples/badger2040/info.py _info) \ No newline at end of file