1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3# 4# Copyright (c) 2010 Kungliga Tekniska Högskolan 5# (Royal Institute of Technology, Stockholm, Sweden). 6# All rights reserved. 7# 8# Redistribution and use in source and binary forms, with or without 9# modification, are permitted provided that the following conditions 10# are met: 11# 12# 1. Redistributions of source code must retain the above copyright 13# notice, this list of conditions and the following disclaimer. 14# 15# 2. Redistributions in binary form must reproduce the above copyright 16# notice, this list of conditions and the following disclaimer in the 17# documentation and/or other materials provided with the distribution. 18# 19# 3. Neither the name of the Institute nor the names of its contributors 20# may be used to endorse or promote products derived from this software 21# without specific prior written permission. 22# 23# THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 24# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26# ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 27# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33# SUCH DAMAGE. 34# 35 36CONTROL_CHAR = 1 37PRINTABLE = 2 38RFC2253_QUOTE_FIRST = 4 39RFC2253_QUOTE_LAST = 8 40RFC2253_QUOTE = 16 41RFC2253_HEX = 32 42 43chars = [] 44 45for i in range(0, 256): 46 chars.append(0); 47 48for i in range(0, 256): 49 if (i < 32 or i > 126): 50 chars[i] |= CONTROL_CHAR | RFC2253_HEX; 51 52for i in range(ord("A"), ord("Z") + 1): 53 chars[i] |= PRINTABLE 54for i in range(ord("a"), ord("z") + 1): 55 chars[i] |= PRINTABLE 56for i in range(ord("0"), ord("9") + 1): 57 chars[i] |= PRINTABLE 58 59chars[ord(' ')] |= PRINTABLE 60chars[ord('+')] |= PRINTABLE 61chars[ord(',')] |= PRINTABLE 62chars[ord('-')] |= PRINTABLE 63chars[ord('.')] |= PRINTABLE 64chars[ord('/')] |= PRINTABLE 65chars[ord(':')] |= PRINTABLE 66chars[ord('=')] |= PRINTABLE 67chars[ord('?')] |= PRINTABLE 68 69chars[ord(' ')] |= RFC2253_QUOTE_FIRST | RFC2253_QUOTE_FIRST 70 71chars[ord(',')] |= RFC2253_QUOTE 72chars[ord('=')] |= RFC2253_QUOTE 73chars[ord('+')] |= RFC2253_QUOTE 74chars[ord('<')] |= RFC2253_QUOTE 75chars[ord('>')] |= RFC2253_QUOTE 76chars[ord('#')] |= RFC2253_QUOTE 77chars[ord(';')] |= RFC2253_QUOTE 78 79print "#define Q_CONTROL_CHAR 1" 80print "#define Q_PRINTABLE 2" 81print "#define Q_RFC2253_QUOTE_FIRST 4" 82print "#define Q_RFC2253_QUOTE_LAST 8" 83print "#define Q_RFC2253_QUOTE 16" 84print "#define Q_RFC2253_HEX 32" 85print "" 86print "#define Q_RFC2253 (Q_RFC2253_QUOTE_FIRST|Q_RFC2253_QUOTE_LAST|Q_RFC2253_QUOTE|Q_RFC2253_HEX)" 87print "\n" * 2 88 89 90 91 92print "unsigned char char_map[] = {\n\t", 93for x in range(0, 256): 94 if (x % 8) == 0 and x != 0: 95 print "\n\t", 96 print "0x%(char)02x" % { 'char' : chars[x] }, 97 if x < 255: 98 print ", ", 99 else: 100 print "" 101print "};" 102