+#include "silent_code.hh"
+
+//#include <stdio.h>
+
+unsigned char silent_demangle (unsigned char in)
+{
+ if (in & 64)
+ switch (in) {
+ case 0174:
+ return 05;
+ break;
+ case 0374:
+ return 045;
+ break;
+ case 0175:
+ return 012;
+ break;
+ case 0375:
+ return 052;
+ break;
+ case 0176:
+ return 021;
+ break;
+ case 0376:
+ return 061;
+ break;
+ case 0177:
+ return 023;
+ break;
+ case 0377:
+ return 063;
+ break;
+ default: // Illegal branch
+ return 0;
+ break;
+ } else {
+ if (in & 128)
+ in |= 32;
+ return in;
+ }
+ return 0; // Never executed
+}
+
+unsigned short combine466 (unsigned char *raw) {
+ unsigned short r1, r2, r3;
+ unsigned short result=0;
+ r1 = silent_demangle ((raw)[0]) & 017;
+ r2 = silent_demangle ((raw)[1]) & 077;
+ r3 = silent_demangle ((raw)[2]) & 077;
+
+ result=r3;
+ result|=r2<<6;
+ result|=r1<<12;
+ // printf ("data: %02x %02x %02x %04x \n",r1,r2,r3,result);
+ return result;
+}
+