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