comparison decode-mixed-mode.c @ 129:8c39820da60a default tip

add decode-mixed-mode.c this decodes macintosh mixed-mode procedure types. It currently only supports stack-based procedures :)
author Paper <paper@tflc.us>
date Sun, 19 Oct 2025 22:48:24 -0400
parents
children
comparison
equal deleted inserted replaced
128:1a83948b7f80 129:8c39820da60a
1 #include <stdint.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <inttypes.h>
5
6 static void decode_size(unsigned long x)
7 {
8 const char *lut[] = {"No", "One", "Two", "Four"};
9
10 printf("k%sByteCode", lut[x & 3]);
11 }
12
13 int main(int argc, char *argv[])
14 {
15 unsigned long x;
16
17 if (argc < 2) {
18 fprintf(stderr, "usage: decrypt-mixed-call <param>\n");
19 return 1;
20 }
21
22 x = strtoul(argv[1], NULL, 0);
23
24 switch (x & 15) {
25 case 0:
26 printf("kPascalStackBased");
27 break;
28 case 1:
29 printf("kCStackBased");
30 break;
31 case 2:
32 printf("I'm too lazy for this!");
33 return 1;
34 case 5:
35 printf("kThinkCStackBased");
36 break;
37 case 8:
38 printf("kD0DispatchedPascalStackBased");
39 break;
40 case 9:
41 printf("kD0DispatchedCStackBased");
42 break;
43 case 12:
44 printf("kD1DispatchedPascalStackBased");
45 break;
46 case 14:
47 printf("kStackDispatchedPascalStackBased");
48 break;
49 default:
50 /* Invalid */
51 return 1;
52 }
53
54 x >>= 4;
55
56 printf(" | RESULT_SIZE(");
57 decode_size(x);
58 printf(")");
59
60 /* trim the fat */
61 x >>= 2;
62
63 /* hopefully we're using stack, since that's the ONLY thing i'm handling */
64 for (uint32_t i = 1; i < 13 && x; i++, x >>= 2) {
65 printf(" | STACK_ROUTINE_PARAMETER(%" PRIu32 ", ", i);
66 decode_size(x);
67 printf(")");
68 }
69
70 puts("");
71
72 return 0;
73 }