*** empty log message ***
[h316.git] / pc-tools / ldc2 / src / silent_code.cpp
1 /******************************************************************************
2 *
3 * LDC2 source code
4 *
5 * $Date: 2007/03/26 01:00:40 $
6 * $Author: hachti $
7 *
8 * $Log: silent_code.cpp,v $
9 * Revision 2.0 2007/03/26 01:00:40 hachti
10 * *** empty log message ***
11 *
12 *
13 ******************************************************************************/
14
15 #include "silent_code.hh"
16
17 //#include <stdio.h>
18
19 unsigned char silent_demangle (unsigned char in)
20 {
21 if (in & 64)
22 switch (in) {
23 case 0174:
24 return 05;
25 break;
26 case 0374:
27 return 045;
28 break;
29 case 0175:
30 return 012;
31 break;
32 case 0375:
33 return 052;
34 break;
35 case 0176:
36 return 021;
37 break;
38 case 0376:
39 return 061;
40 break;
41 case 0177:
42 return 023;
43 break;
44 case 0377:
45 return 063;
46 break;
47 default: // Illegal branch
48 return 0;
49 break;
50 } else {
51 if (in & 128)
52 in |= 32;
53 return in;
54 }
55 return 0; // Never executed
56 }
57
58 unsigned short combine466 (unsigned char *raw) {
59 unsigned short r1, r2, r3;
60 unsigned short result=0;
61 r1 = silent_demangle ((raw)[0]) & 017;
62 r2 = silent_demangle ((raw)[1]) & 077;
63 r3 = silent_demangle ((raw)[2]) & 077;
64
65 result=r3;
66 result|=r2<<6;
67 result|=r1<<12;
68 // printf ("data: %02x %02x %02x %04x \n",r1,r2,r3,result);
69 return result;
70 }
71