Add -m32 and -x c to Makefile for 64-bit Snow Leopard.
[pforth] / fth / utils / dump_struct.fth
CommitLineData
bb6b2dcd 1\ @(#) dump_struct.fth 97/12/10 1.1\r
2\ Dump contents of structure showing values and member names.\r
3\\r
4\ Author: Phil Burk\r
5\ Copyright 1987 Phil Burk\r
6\ All Rights Reserved.\r
7\\r
8\ MOD: PLB 9/4/88 Print size too.\r
9\ MOD: PLB 9/9/88 Print U/S , add ADST\r
10\ MOD: PLB 12/6/90 Modified to work with H4th\r
11\ 941109 PLB Converted to pforth. Added RP detection.\r
970d32b5 12\ 090609 PLB Convert >rel to use->rel and ..! to s!\r
bb6b2dcd 13\r
970d32b5 14include? task-member.fth member.fth\r
bb6b2dcd 15include? task-c_struct c_struct.fth\r
16\r
17ANEW TASK-DUMP_STRUCT\r
18\r
19: EMIT-TO-COLUMN ( char col -- )\r
20 out @ - 0 max 80 min 0\r
21 DO dup emit\r
22 LOOP drop\r
23;\r
24\r
25VARIABLE SN-FENCE\r
26: STACK.NFAS ( fencenfa topnfa -- 0 nfa0 nfa1 ... )\r
27\ Fill stack with nfas of words until fence hit.\r
28 >r sn-fence !\r
29 0 r> ( set terminator )\r
30 BEGIN ( -- 0 n0 n1 ... top )\r
31 dup sn-fence @ >\r
32 WHILE\r
33\ dup n>link @ \ JForth\r
34 dup prevname \ HForth\r
35 REPEAT\r
36 drop\r
37;\r
38\r
39: DST.DUMP.TYPE ( +-size -- , dump data type, 941109)\r
40 dup abs 4 =\r
41 IF\r
42 0<\r
43 IF ." RP"\r
44 ELSE ." U4"\r
45 THEN\r
46 ELSE\r
47 dup 0<\r
48 IF ascii U\r
49 ELSE ascii S\r
50 THEN emit abs 1 .r\r
51 THEN\r
52;\r
53\r
54: DUMP.MEMBER ( addr member-pfa -- , dump member of structure)\r
55 ob.stats ( -- addr offset size )\r
56 >r + r> ( -- addr' size )\r
57 dup ABS 4 > ( -- addr' size flag )\r
58 IF cr 2dup swap . . ABS dump\r
59 ELSE tuck @bytes 10 .r ( -- size )\r
60 3 spaces dst.dump.type\r
61 THEN\r
62;\r
63\r
64VARIABLE DS-ADDR\r
65: DUMP.STRUCT ( addr-data addr-structure -- )\r
66 >newline swap >r ( -- as , save addr-data for dumping )\r
67\ dup cell+ @ over + \ JForth\r
68 dup code> >name swap cell+ @ over + \ HForth\r
69 stack.nfas ( fill stack with nfas of members )\r
70 BEGIN\r
71 dup\r
72 WHILE ( continue until non-zero )\r
73 dup name> >body r@ swap dump.member\r
74 bl 18 emit-to-column id. cr\r
75 ?pause\r
76 REPEAT drop rdrop\r
77;\r
78\r
79: DST ( addr <name> -- , dump contents of structure )\r
80 ob.findit\r
81 state @\r
82 IF [compile] literal compile dump.struct\r
83 ELSE dump.struct\r
84 THEN\r
85; immediate\r
86\r
87: ADST ( absolute_address -- , dump structure )\r
970d32b5 88 use->rel [compile] dst \ mod 090609\r
bb6b2dcd 89; immediate\r
90\r
91\ For Testing Purposes\r
970d32b5 92false [IF]\r
bb6b2dcd 93:STRUCT GOO\r
94 LONG DATAPTR\r
95 SHORT GOO_WIDTH\r
96 USHORT GOO_HEIGHT\r
97;STRUCT\r
98\r
99:STRUCT FOO\r
100 LONG ALONG1\r
101 STRUCT GOO AGOO\r
102 SHORT ASHORT1\r
103 BYTE ABYTE\r
104 BYTE ABYTE2\r
105;STRUCT\r
106\r
107FOO AFOO\r
108: AFOO.INIT\r
970d32b5 109 $ 12345678 afoo s! along1\r
110 $ -665 afoo s! ashort1\r
111 $ 21 afoo s! abyte\r
112 $ 43 afoo s! abyte2\r
113 -234 afoo .. agoo s! goo_height\r
bb6b2dcd 114;\r
115afoo.init\r
116\r
117: TDS ( afoo -- )\r
118 dst foo\r
119;\r
120\r
970d32b5 121[THEN]\r
122\r