docs: def add(self, entry):
          """Add an ENTRY to the CArchive.
  
             ENTRY must have:
               entry[0] is name (under which it will be saved).
               entry[1] is fullpathname of the file.
               entry[2] is a flag for it's storage format (0==uncompressed,
               1==compressed)
               entry[3] is the entry's type code.
               Version 5:
                 If the type code is 'o':
                   entry[0] is the runtime option
                   eg: v  (meaning verbose imports)
                       u  (menaing unbuffered)
                       W arg (warning option arg)
                       s  (meaning do site.py processing."""
          (nm, pathnm, flag, typcd) = entry[:4]
          # version 5 - allow type 'o' = runtime option
          try:
              if typcd in ('o', 'd'):
                  s = ''
                  flag = 0
              elif typcd == 's':
                  # If it's a source code file, add \0 terminator as it will be
                  # executed as-is by the bootloader.
                  s = open(pathnm, 'rU').read()
                  s = s + '\n\0'
              else:
                  s = open(pathnm, 'rb').read()
          except IOError:
              print "Cannot find ('%s', '%s', %s, '%s')" % (nm, pathnm, flag, typcd)
              raise
          ulen = len(s)
          assert flag in range(3)
          if flag == 1 or flag == 2:
              s = zlib.compress(s, self.LEVEL)
          if flag == 2:
              global AES
              import AES, Crypt
              key = Crypt.gen_random_key(32)
              # Note: keep this in sync with bootloader's code
              s = key + AES.new(key, AES.MODE_CFB, "\0"*AES.block_size).encrypt(s)
          dlen = len(s)
          where = self.lib.tell()
          if typcd == 'm':
              if pathnm.find('.__init__.py') > -1:
                  typcd = 'M'
          self.toc.add(where, dlen, ulen, flag, typcd, nm)
          self.lib.write(s)