Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102/c068/interf.lis
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

109 lines
2.9 KiB
Plaintext

1File: INTERF.C Page 1
1 /*
2 Copyright 1982
3 Alcyon Corporation
4 8716 Production Ave.
5 San Diego, Ca. 92121
6 */
7
8 #include "parser.h"
9 int bol;
10
11 outinit(tp,type) /* returns - none*/
12 struct tnode *tp;
13 {
14 outexpr(tnalloc(INIT,type,0,0,tp));
15 }
16
17 outcforreg(tp)
18 struct tnode *tp;
19 {
20 outexpr(tnalloc(CFORREG,tp->t_type,0,0,tp));
21 }
22
23 outifgoto(tp,dir,lab)
24 struct tnode *tp;
25 int dir;
26 int lab;
27 {
28 outexpr(tnalloc(IFGOTO,dir,lab,0,tp));
29 }
30
31 outexpr(tp)
32 struct tnode *tp;
33 {
34 if( !bol )
35 putchar('\n');
36 printf(".%x\n",lineno);
37 outtree(tp);
38 }
39
40 outtree(tp)
41 struct tnode *tp;
42 {
43 if( !tp )
44 return;
45 printf("%x.%x",tp->t_op,tp->t_type);
46 switch( tp->t_op ) {
47
48 case CINT:
49 printf(".%x\n",tp->t_value);
50 break;
51
52 case CLONG:
53 printf(".%x.%x\n",tp->t_lvalue.hiword,tp->t_lvalue.loword);
54 break;
55
56 case CFLOAT: /*[vlh] 3.4*/
57 printf(".%x.%x\n",tp->t_lvalue.hiword,tp->t_lvalue.loword);
58 break;
59
1File: INTERF.C Page 2
60 case SYMBOL:
61 printf(".%x",tp->t_sc);
62 if( tp->t_sc == EXTERNAL )
63 printf(".%.8s\n",tp->t_symbol);
64 else
65 printf(".%x\n",tp->t_offset);
66 break;
67
68 case 0:
69 putchar('\n');
70 break;
71
72 case IFGOTO:
73 case BFIELD:
74 printf(".%x\n",tp->t_dp);
75 outtree(tp->t_left);
76 break;
77
78 default:
79 putchar('\n');
80 outtree(tp->t_left);
81 if( binop(tp->t_op) )
82 outtree(tp->t_right);
83 break;
84 }
85 }
86
87 /* snalloc - symbol node allocation*/
88 /* Allocates a tree symbol node and sets the info in it*/
89 char *snalloc(type,sc,off,dp,ssp) /* returns pointer to node alloc'ed*/
90 int type; /* symbol type*/
91 int sc; /* storage class*/
92 int off; /* offset*/
93 int dp; /* dimension pointer or other info*/
94 int ssp; /* structure size pointer*/
95 {
96 register struct symnode *snp;
97
98 snp = talloc(sizeof(*snp));
99 snp->t_op = SYMBOL;
100 snp->t_sc = sc;
101 snp->t_type = type;
102 snp->t_dp = dp;
103 snp->t_ssp = ssp;
104 snp->t_offset = off;
105 return(snp);
106 }