annotate UNPA @ 4492:02775a0b8839

<ion> sed -i -re \'s/echo ("?)\\$[@*]\\1 /print_args_or_input "$@" /g\' bin/complain bin/ord bin/ordu
author HackBot
date Sat, 22 Feb 2014 02:38:07 +0000
parents 5fddb59b5d15
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4273
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
1 /*
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
2 UTF-to-VLQ
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
3 Public domain
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
4 */
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
5
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
6 #include <stdio.h>
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
7 #include <stdlib.h>
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
8
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
9 #ifdef _WIN32
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
10 #include <fcntl.h>
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
11 #endif
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
12
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
13 typedef unsigned char byte;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
14 typedef unsigned long long ULL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
15
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
16 typedef ULL(*in_func_t)(void);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
17 typedef void(*out_func_t)(ULL);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
18
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
19 char in_mode;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
20 char out_mode;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
21 int options[128];
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
22 ULL translation[256];
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
23
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
24 #define conv_lf options['L']
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
25 #define conv_cr options['c']
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
26 #define bom_in options['b']
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
27 #define bom_out options['B']
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
28 #define trans_le options['t']
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
29
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
30 byte getb(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
31 int x=fgetc(stdin);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
32 if(x==EOF) exit(0);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
33 return x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
34 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
35
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
36 inline ULL sign_extend(ULL x,int y) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
37 return x|((x&(1LL<<y))?-1LL<<y:0);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
38 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
39
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
40 ULL read_8bit_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
41 return getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
42 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
43
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
44 ULL read_16bit_le_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
45 ULL x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
46 return x|(getb()<<8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
47 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
48
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
49 ULL read_16bit_be_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
50 ULL x=getb()<<8;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
51 return x|getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
52 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
53
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
54 ULL read_32bit_le_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
55 ULL x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
56 x|=getb()<<8;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
57 x|=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
58 return x|(getb()<<24);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
59 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
60
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
61 ULL read_32bit_be_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
62 ULL x=getb()<<24;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
63 x|=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
64 x|=getb()<<8;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
65 return x|getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
66 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
67
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
68 ULL read_64bit_le_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
69 ULL x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
70 x|=getb()<<8;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
71 x|=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
72 x|=((ULL)getb())<<24;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
73 x|=((ULL)getb())<<32;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
74 x|=((ULL)getb())<<40;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
75 x|=((ULL)getb())<<48;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
76 x|=((ULL)getb())<<56;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
77 return x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
78 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
79
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
80 ULL read_64bit_be_raw(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
81 ULL x=((ULL)getb())<<56;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
82 x|=((ULL)getb())<<48;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
83 x|=((ULL)getb())<<40;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
84 x|=((ULL)getb())<<32;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
85 x|=((ULL)getb())<<24;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
86 x|=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
87 x|=getb()<<8;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
88 return x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
89 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
90
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
91 ULL read_utf8(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
92 ULL x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
93 if((x&0xE0)==0xC0) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
94 x=((x&0x1F)<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
95 } else if((x&0xF0)==0xE0) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
96 x=((x&0x0F)<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
97 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
98 } else if((x&0xF8)==0xF0) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
99 x=((x&0x07)<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
100 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
101 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
102 } else if((x&0xFC)==0xF8) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
103 x=((x&0x03)<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
104 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
105 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
106 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
107 } else if((x&0xFE)==0xFC) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
108 x=((x&0x01)<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
109 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
110 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
111 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
112 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
113 } else if(x==0xFE || x==0xFF) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
114 x=((x&0x01)<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
115 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
116 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
117 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
118 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
119 x=(x<<6)|(getb()&0x3F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
120 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
121 return x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
122 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
123
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
124 ULL read_vlq8(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
125 byte x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
126 ULL r=0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
127 while(x&0x80) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
128 r=(r<<7)|(x&0x7F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
129 x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
130 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
131 return r|x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
132 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
133
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
134 ULL read_leb128(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
135 byte x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
136 int i=0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
137 ULL r=0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
138 while(x&0x80) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
139 r|=(x&0x7F)<<(7*(i++));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
140 x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
141 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
142 return r|(x<<(7*i));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
143 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
144
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
145 ULL read_utf16_le(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
146 ULL r=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
147 r|=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
148 if(r>=0xD800 && r<0xDC00) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
149 int x=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
150 x|=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
151 return (((r&0x3FF)<<10)|(x&0x3FF))+0x10000ULL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
152 } else {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
153 return r;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
154 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
155 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
156
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
157 ULL read_utf16_be(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
158 ULL r=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
159 r|=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
160 if(r>=0xD800 && r<0xDC00) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
161 int x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
162 x|=getb()<<16;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
163 return (((r&0x3FF)<<10)|(x&0x3FF))+0x10000ULL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
164 } else {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
165 return r;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
166 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
167 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
168
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
169 ULL read_translate(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
170 return translation[getb()];
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
171 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
172
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
173 ULL read_messagepack(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
174 byte x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
175 ULL s;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
176 float f;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
177 double d;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
178 for(;;) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
179 x=getb();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
180 switch(x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
181 case 0x00 ... 0x7F: return x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
182 case 0x80 ... 0x9F: continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
183 case 0xA0 ... 0xBF:
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
184 while(x-->0xA0) putchar(getb());
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
185 continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
186 case 0xC0: continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
187 case 0xC2: return 0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
188 case 0xC3: return -1LL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
189 case 0xCA:
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
190 *(short*)&f=read_16bit_be_raw(); // Not completely portable
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
191 return (ULL)f;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
192 case 0xCB:
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
193 *(int*)&d=read_32bit_be_raw(); // Not completely portable
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
194 return (ULL)f;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
195 case 0xCC: return read_8bit_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
196 case 0xCD: return read_16bit_be_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
197 case 0xCE: return read_32bit_be_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
198 case 0xCF: return read_64bit_be_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
199 case 0xD0: return sign_extend(read_8bit_raw(),7);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
200 case 0xD1: return sign_extend(read_16bit_be_raw(),15);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
201 case 0xD2: return sign_extend(read_32bit_be_raw(),31);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
202 case 0xD3: return read_64bit_be_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
203 case 0xDA:
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
204 s=read_16bit_be_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
205 while(s--) putchar(getb());
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
206 continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
207 case 0xDB:
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
208 s=read_32bit_be_raw();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
209 while(s--) putchar(getb());
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
210 continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
211 case 0xDC: read_16bit_be_raw(); continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
212 case 0xDD: read_32bit_be_raw(); continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
213 case 0xDE: read_16bit_be_raw(); continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
214 case 0xDF: read_32bit_be_raw(); continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
215 case 0xE0 ... 0xFF: return x|~31LL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
216 default: exit(1);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
217 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
218 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
219 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
220
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
221 ULL read_hex(void) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
222 char a,b;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
223 do a=getb(); while(a<=' ');
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
224 do b=getb(); while(b<=' ');
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
225 return (((a&15)+(a>='A'?9:0))<<4)|((b&15)+(b>='A'?9:0));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
226 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
227
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
228 void write_8bit_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
229 putchar(x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
230 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
231
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
232 void write_16bit_le_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
233 putchar(x&255);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
234 putchar(x>>8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
235 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
236
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
237 void write_16bit_be_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
238 putchar(x>>8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
239 putchar(x&255);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
240 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
241
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
242 void write_32bit_le_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
243 putchar(x&255);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
244 putchar(x>>8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
245 putchar(x>>16);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
246 putchar(x>>24);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
247 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
248
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
249 void write_32bit_be_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
250 putchar(x>>24);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
251 putchar(x>>16);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
252 putchar(x>>8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
253 putchar(x&255);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
254 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
255
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
256 void write_64bit_le_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
257 putchar(x&255);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
258 putchar(x>>8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
259 putchar(x>>16);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
260 putchar(x>>24);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
261 putchar(x>>32);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
262 putchar(x>>40);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
263 putchar(x>>48);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
264 putchar(x>>56);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
265 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
266
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
267 void write_64bit_be_raw(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
268 putchar(x>>56);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
269 putchar(x>>48);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
270 putchar(x>>40);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
271 putchar(x>>32);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
272 putchar(x>>24);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
273 putchar(x>>16);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
274 putchar(x>>8);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
275 putchar(x&255);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
276 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
277
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
278 void write_utf8(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
279 if(out_mode=='0' && !x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
280 putchar(0xC0);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
281 putchar(0x80);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
282 } else if(x<0x80ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
283 putchar(x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
284 } else if(x<0x800ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
285 putchar(0xC0|(x>>6));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
286 putchar(0x80|(x)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
287 } else if(x<0x10000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
288 putchar(0xE0|(x>>12));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
289 putchar(0x80|(x>>6)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
290 putchar(0x80|(x)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
291 } else if(x<0x200000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
292 putchar(0xF0|(x>>18));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
293 putchar(0x80|(x>>12)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
294 putchar(0x80|(x>>6)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
295 putchar(0x80|(x)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
296 } else if(x<0x4000000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
297 putchar(0xF8|(x>>24));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
298 putchar(0x80|(x>>18)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
299 putchar(0x80|(x>>12)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
300 putchar(0x80|(x>>6)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
301 putchar(0x80|(x)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
302 } else if(x<0x80000000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
303 putchar(0xFC|(x>>30));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
304 putchar(0x80|(x>>24)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
305 putchar(0x80|(x>>18)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
306 putchar(0x80|(x>>12)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
307 putchar(0x80|(x>>6)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
308 putchar(0x80|(x)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
309 } else if(x<0x1000000000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
310 putchar(0xFE|(x>>36));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
311 putchar(0x80|(x>>30)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
312 putchar(0x80|(x>>24)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
313 putchar(0x80|(x>>18)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
314 putchar(0x80|(x>>12)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
315 putchar(0x80|(x>>6)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
316 putchar(0x80|(x)&0xBF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
317 } else {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
318 exit(1);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
319 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
320 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
321
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
322 void write_vlq8(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
323 int i;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
324 for(i=63;i;i-=7) if(x&-(1LL<<i)) putchar(0x80|(x>>i)&0xFF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
325 putchar(x&0x7F);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
326 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
327
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
328 void write_leb128(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
329 while(x&~0x7FULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
330 putchar(0x80|x&0xFF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
331 x>>=7;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
332 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
333 putchar(x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
334 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
335
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
336 void write_utf16_le(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
337 if(x>0x10FFFFULL) exit(1);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
338 if(x&0x1F0000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
339 x-=0x10000ULL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
340 write_16bit_le_raw((x>>10)|0xD800);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
341 write_16bit_le_raw((x&0x3FF)|0xDC00);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
342 } else {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
343 write_16bit_le_raw(x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
344 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
345 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
346
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
347 void write_utf16_be(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
348 if(x>0x10FFFFULL) exit(1);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
349 if(x&0x1F0000ULL) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
350 x-=0x10000ULL;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
351 write_16bit_be_raw((x>>10)|0xD800);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
352 write_16bit_be_raw((x&0x3FF)|0xDC00);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
353 } else {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
354 write_16bit_be_raw(x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
355 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
356 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
357
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
358 void write_translate(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
359 int i;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
360 for(i=0;i<256;i++) if(translation[i]==x) putchar(i);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
361 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
362
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
363 void write_hex(ULL x) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
364 printf("%02X",(int)x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
365 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
366
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
367 const in_func_t in_func[128]={
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
368 ['8']=read_8bit_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
369 ['w']=read_16bit_le_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
370 ['W']=read_16bit_be_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
371 ['d']=read_32bit_le_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
372 ['D']=read_32bit_be_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
373 ['q']=read_64bit_le_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
374 ['Q']=read_64bit_be_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
375 ['1']=read_utf8,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
376 ['0']=read_utf8,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
377 ['V']=read_vlq8,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
378 ['v']=read_leb128,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
379 ['u']=read_utf16_le,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
380 ['U']=read_utf16_be,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
381 ['T']=read_translate,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
382 ['M']=read_messagepack,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
383 ['4']=read_hex,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
384 [0]=0
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
385 };
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
386
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
387 const out_func_t out_func[128]={
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
388 ['8']=write_8bit_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
389 ['w']=write_16bit_le_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
390 ['W']=write_16bit_be_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
391 ['d']=write_32bit_le_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
392 ['D']=write_32bit_be_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
393 ['q']=write_64bit_le_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
394 ['Q']=write_64bit_be_raw,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
395 ['1']=write_utf8,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
396 ['0']=write_utf8,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
397 ['V']=write_vlq8,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
398 ['v']=write_leb128,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
399 ['u']=write_utf16_le,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
400 ['U']=write_utf16_be,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
401 ['T']=write_translate,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
402 ['4']=write_hex,
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
403 [0]=0
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
404 };
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
405
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
406 int main(int argc,char**argv) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
407 int b;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
408 int is_lf=0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
409 ULL x;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
410 #ifdef _WIN32
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
411 _setmode(_fileno(stdin),_O_BINARY);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
412 _setmode(_fileno(stdout),_O_BINARY);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
413 #endif
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
414 if(argc<2 || !argv[1][0] || !in_func[argv[1][0]] || !out_func[argv[1][1]]) return 1;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
415 in_mode=argv[1][0];
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
416 out_mode=argv[1][1];
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
417 for(b=2;argv[1][b];b++) options[argv[1][b]&127]=1;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
418 if(argc>2) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
419 FILE*fp=fopen(argv[2],"rb");
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
420 int i;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
421 if(!fp) return 1;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
422 fseek(fp,0,SEEK_END);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
423 b=ftell(fp)>>8;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
424 rewind(fp);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
425 for(i=0;i<255;i++) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
426 translation[i]=fgetc(fp);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
427 if(b>1) translation[i]=trans_le?(translation[i]|(fgetc(fp)<<8)):((translation[i]<<8)|fgetc(fp));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
428 if(b>2) translation[i]=trans_le?(translation[i]|(fgetc(fp)<<16)):((translation[i]<<8)|fgetc(fp));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
429 if(b>3) translation[i]=trans_le?(translation[i]|(fgetc(fp)<<24)):((translation[i]<<8)|fgetc(fp));
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
430 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
431 fclose(fp);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
432 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
433 if(bom_out) out_func[out_mode&127](0xFEFF);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
434 while(!feof(stdin)) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
435 x=in_func[in_mode&127]();
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
436 if(bom_in && x!=0xFEFF) return 1;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
437 if(is_lf && x==10) {
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
438 is_lf=0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
439 continue;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
440 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
441 if(is_lf=(conv_lf && x==13)) x=10;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
442 if(conv_cr && x==10) out_func[out_mode&127](13);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
443 if(!bom_in) out_func[out_mode&127](x);
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
444 bom_in=0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
445 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
446 return 0;
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
447 }
5fddb59b5d15 <zzo38> fetch http://sprunge.us/UNPA
HackBot
parents:
diff changeset
448