source: proto/u8u16/u8u16_pablo_straight.py @ 1814

Last change on this file since 1814 was 1814, checked in by cameron, 7 years ago

Update: bitutil. => pablo.

File size: 3.9 KB
Line 
1# -*- coding: utf-8 -*-
2
3class u8 ():
4  unibyte = 0
5  prefix = 0
6  prefix2 = 0
7  prefix3 = 0
8  prefix4 = 0
9  suffix = 0
10  badprefix = 0
11  xE0 = 0
12  xED = 0
13  xF0 = 0
14  xF4 = 0
15  xA0_xBF = 0
16  x80_x9F = 0
17  x90_xBF = 0
18  x80_x8F = 0
19  xEF = 0
20  xBF = 0
21  xBE = 0
22  scope22 = 0
23  scope32 = 0
24  scope33 = 0
25  scope42 = 0
26  scope43 = 0
27  scope44 = 0
28  xE0_scope = 0
29  xED_scope = 0
30  xF0_scope = 0
31  xF4_scope = 0
32  xEF_scope = 0
33  error = 0
34
35
36def main(u8, mask):
37        u8.unibyte = (~bit[0]);
38        u8.prefix = (bit[0] & bit[1]);
39        u8.prefix2 = (u8.prefix &~ bit[2]);
40        temp1 = (bit[2] &~ bit[3]);
41        u8.prefix3 = (u8.prefix & temp1);
42        temp2 = (bit[2] & bit[3]);
43        u8.prefix4 = (u8.prefix & temp2);
44        u8.suffix = (bit[0] &~ bit[1]);
45        temp3 = (bit[2] | bit[3]);
46        temp4 = (u8.prefix &~ temp3);
47        temp5 = (bit[4] | bit[5]);
48        temp6 = (temp5 | bit[6]);
49        temp7 = (temp4 &~ temp6);
50        temp8 = (bit[6] | bit[7]);
51        temp9 = (bit[5] & temp8);
52        temp10 = (bit[4] | temp9);
53        temp11 = (u8.prefix4 & temp10);
54        u8.badprefix = (temp7 | temp11);
55        temp12 = (temp5 | temp8);
56        xE0 = (u8.prefix3 &~ temp12);
57        temp13 = (bit[4] & bit[5]);
58        temp14 = (bit[7] &~ bit[6]);
59        temp15 = (temp13 & temp14);
60        xED = (u8.prefix3 & temp15);
61        xF0 = (u8.prefix4 &~ temp12);
62        temp16 = (bit[5] &~ bit[4]);
63        temp17 = (temp16 &~ temp8);
64        xF4 = (u8.prefix4 & temp17);
65        xA0_xBF = (u8.suffix & bit[2]);
66        x80_x9F = (u8.suffix &~ bit[2]);
67        x90_xBF = (u8.suffix & temp3);
68        x80_x8F = (u8.suffix &~ temp3);
69
70      #
71        u8.scope22 = pablo.Advance(u8.prefix2)
72        u8.scope32 = pablo.Advance(u8.prefix3)
73        u8.scope33 = pablo.Advance(u8.scope32)
74        u8.scope42 = pablo.Advance(u8.prefix4)
75        u8.scope43 = pablo.Advance(u8.scope42)
76        u8.scope44 = pablo.Advance(u8.scope43)
77        u8lastscope = u8.scope22 | u8.scope33 | u8.scope44
78        u8anyscope = u8lastscope | u8.scope32 | u8.scope42 | u8.scope43
79
80        adv_bit2 = pablo.Advance(bit[2])
81        adv_bit3 = pablo.Advance(bit[3])
82        adv_bit4 = pablo.Advance(bit[4])
83        adv_bit5 = pablo.Advance(bit[5])
84        adv_bit6 = pablo.Advance(bit[6])
85        adv_bit7 = pablo.Advance(bit[7])
86             
87        # C0-C1 and F5-FF are illegal
88        error_mask = u8.badprefix
89             
90        error_mask |= pablo.Advance(xE0) & x80_x9F
91        error_mask |= pablo.Advance(xED) & xA0_xBF
92        error_mask |= pablo.Advance(xF0) & x80_x8F
93        error_mask |= pablo.Advance(xF4) & x90_xBF
94             
95        error_mask |= u8anyscope ^ u8.suffix
96        u8.error = error_mask
97        u8lastbyte = u8.unibyte | u8lastscope
98        u16lo[2] = u8lastbyte & bit[2]
99        u16lo[3] = u8lastbyte & bit[3]
100        u16lo[4] = u8lastbyte & bit[4]
101        u16lo[5] = u8lastbyte & bit[5]
102        u16lo[6] = u8lastbyte & bit[6]
103        u16lo[7] = u8lastbyte & bit[7]
104        u16lo[1] = (u8.unibyte & bit[1]) | (u8lastscope & adv_bit7)
105        u16lo[0] = u8lastscope & adv_bit6
106       
107        u16hi[5] = u8lastscope & adv_bit3
108        u16hi[6] = u8lastscope & adv_bit4
109        u16hi[7] = u8lastscope & adv_bit5
110        advadv_bit6 = pablo.Advance(adv_bit6)
111        advadv_bit7 = pablo.Advance(adv_bit7)
112        u16hi[0] = u8.scope33 & pablo.Advance(adv_bit4)
113        u16hi[1] = u8.scope33 & pablo.Advance(adv_bit5)
114        u16hi[2] = u8.scope33 & pablo.Advance(adv_bit6)
115        u16hi[3] = u8.scope33 & pablo.Advance(adv_bit7)
116        u16hi[4] = u8.scope33 & adv_bit2
117
118        u8surrogate = u8.scope43 | u8.scope44
119        u16hi[0] = u16hi[0] | u8surrogate       
120        u16hi[1] = u16hi[1] | u8surrogate       
121        u16hi[3] = u16hi[3] | u8surrogate       
122        u16hi[4] = u16hi[4] | u8surrogate       
123        u16hi[5] = u16hi[5] | u8.scope44
124
125
126        s43lo1 = ~adv_bit3 # subtract 1
127        u16lo[1] = u16lo[1] | u8.scope43 & s43lo1
128        s43lo0 = adv_bit2 ^ s43lo1 # borrow *
129        u16lo[0] = u16lo[0] | u8.scope43 & s43lo0
130        s43borrow1 = s43lo1 & ~adv_bit2
131        s43hi7 = advadv_bit7 ^ s43borrow1
132        s43borrow2 = s43borrow1 & ~advadv_bit7
133        s43hi6 = advadv_bit6 ^ s43borrow2
134
135
136
137
138        u16hi[7]= u16hi[7] | (u8.scope43 & s43hi7)
139        u16hi[6] = u16hi[6] | (u8.scope43 & s43hi6)
140
141        u16lo[2] = u16lo[2] | (u8.scope43 & adv_bit4)
142        u16lo[3] = u16lo[3] | (u8.scope43 & adv_bit5)
143        u16lo[4] = u16lo[4] | (u8.scope43 & adv_bit6)
144        u16lo[5] = u16lo[5] | (u8.scope43 & adv_bit7)
145        u16lo[6] = u16lo[6] | (u8.scope43 & bit[2])
146        u16lo[7] = u16lo[7] | (u8.scope43 & bit[3])
147
148        delmask = u8.prefix | u8.scope32 | u8.scope42
149
Note: See TracBrowser for help on using the repository browser.