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