#!/usr/bin/python
"""
$Id$
Purpose:
Demonstrate the way the struct module works.
Description:
One can access substrings of a string in a arbitrary manner while using the
struct module. This is mostly useful when dealing with byte level
programming required in embedded systems or while using sockets.
Source:
Python cookbook perhaps.
"""
import struct
theline = "The quick brown fox jumped over the lazy dog."
# Get a 5-byte string, skip 3, get two 8-byte string, then all the rest:
baseformat = '5s 3x 8s 8s'
# by how many bytes does theline exceed the length implied by this
# base-format ( 24 bytes in this, but struct.calcsize is general)
numremain = len(theline) - struct.calcsize(baseformat)
# complete the format with the appropriate 's' field, then unpack
format = '%s %ds' % (baseformat, numremain)
l, s1, s2, t = struct.unpack(format, theline)
print l
print s1
print s2
print t# your code goes here
IyEvdXNyL2Jpbi9weXRob24KIiIiCiRJZCQKClB1cnBvc2U6CiAgICBEZW1vbnN0cmF0ZSB0aGUgd2F5IHRoZSBzdHJ1Y3QgbW9kdWxlIHdvcmtzLgoKRGVzY3JpcHRpb246CiAgIE9uZSBjYW4gYWNjZXNzIHN1YnN0cmluZ3Mgb2YgYSBzdHJpbmcgaW4gYSBhcmJpdHJhcnkgbWFubmVyIHdoaWxlIHVzaW5nIHRoZQogICBzdHJ1Y3QgbW9kdWxlLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggYnl0ZSBsZXZlbAogICBwcm9ncmFtbWluZyByZXF1aXJlZCBpbiBlbWJlZGRlZCBzeXN0ZW1zIG9yIHdoaWxlIHVzaW5nIHNvY2tldHMuCgpTb3VyY2U6CiAgIFB5dGhvbiBjb29rYm9vayBwZXJoYXBzLgoiIiIKaW1wb3J0IHN0cnVjdAp0aGVsaW5lID0gIlRoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgdGhlIGxhenkgZG9nLiIKIyBHZXQgYSA1LWJ5dGUgc3RyaW5nLCBza2lwIDMsIGdldCB0d28gOC1ieXRlIHN0cmluZywgdGhlbiBhbGwgdGhlIHJlc3Q6CmJhc2Vmb3JtYXQgPSAnNXMgM3ggOHMgOHMnCiMgYnkgaG93IG1hbnkgYnl0ZXMgZG9lcyB0aGVsaW5lIGV4Y2VlZCB0aGUgbGVuZ3RoIGltcGxpZWQgYnkgdGhpcwojIGJhc2UtZm9ybWF0ICggMjQgYnl0ZXMgaW4gdGhpcywgYnV0IHN0cnVjdC5jYWxjc2l6ZSBpcyBnZW5lcmFsKQpudW1yZW1haW4gPSBsZW4odGhlbGluZSkgLSBzdHJ1Y3QuY2FsY3NpemUoYmFzZWZvcm1hdCkKIyBjb21wbGV0ZSB0aGUgZm9ybWF0IHdpdGggdGhlIGFwcHJvcHJpYXRlICdzJyBmaWVsZCwgdGhlbiB1bnBhY2sKZm9ybWF0ID0gJyVzICVkcycgJSAoYmFzZWZvcm1hdCwgbnVtcmVtYWluKQpsLCBzMSwgczIsIHQgPSBzdHJ1Y3QudW5wYWNrKGZvcm1hdCwgdGhlbGluZSkKcHJpbnQgbApwcmludCBzMQpwcmludCBzMgpwcmludCB0IyB5b3VyIGNvZGUgZ29lcyBoZXJl