1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 # 4 # Copyright (c) 2010 Kungliga Tekniska Hgskolan 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 36 CONTROL_CHAR = 1 37 PRINTABLE = 2 38 RFC2253_QUOTE_FIRST = 4 39 RFC2253_QUOTE_LAST = 8 40 RFC2253_QUOTE = 16 41 RFC2253_HEX = 32 42 43 chars = [] 44 45 for i in range(0, 256): 46 chars.append(0); 47 48 for i in range(0, 256): 49 if (i < 32 or i > 126): 50 chars[i] |= CONTROL_CHAR | RFC2253_HEX; 51 52 for i in range(ord("A"), ord("Z") + 1): 53 chars[i] |= PRINTABLE 54 for i in range(ord("a"), ord("z") + 1): 55 chars[i] |= PRINTABLE 56 for i in range(ord("0"), ord("9") + 1): 57 chars[i] |= PRINTABLE 58 59 chars[ord(' ')] |= PRINTABLE 60 chars[ord('+')] |= PRINTABLE 61 chars[ord(',')] |= PRINTABLE 62 chars[ord('-')] |= PRINTABLE 63 chars[ord('.')] |= PRINTABLE 64 chars[ord('/')] |= PRINTABLE 65 chars[ord(':')] |= PRINTABLE 66 chars[ord('=')] |= PRINTABLE 67 chars[ord('?')] |= PRINTABLE 68 69 chars[ord(' ')] |= RFC2253_QUOTE_FIRST | RFC2253_QUOTE_FIRST 70 71 chars[ord(',')] |= RFC2253_QUOTE 72 chars[ord('=')] |= RFC2253_QUOTE 73 chars[ord('+')] |= RFC2253_QUOTE 74 chars[ord('<')] |= RFC2253_QUOTE 75 chars[ord('>')] |= RFC2253_QUOTE 76 chars[ord('#')] |= RFC2253_QUOTE 77 chars[ord(';')] |= RFC2253_QUOTE 78 79 print "#define Q_CONTROL_CHAR 1" 80 print "#define Q_PRINTABLE 2" 81 print "#define Q_RFC2253_QUOTE_FIRST 4" 82 print "#define Q_RFC2253_QUOTE_LAST 8" 83 print "#define Q_RFC2253_QUOTE 16" 84 print "#define Q_RFC2253_HEX 32" 85 print "" 86 print "#define Q_RFC2253 (Q_RFC2253_QUOTE_FIRST|Q_RFC2253_QUOTE_LAST|Q_RFC2253_QUOTE|Q_RFC2253_HEX)" 87 print "\n" * 2 88 89 90 91 92 print "unsigned char char_map[] = {\n\t", 93 for 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 "" 101 print "};" 102