Pristine Ack-5.5
[Ack-5.5.git] / util / ceg / ce_back / obj_back / extnd.c
1 #include <system.h>
2 #include <out.h>
3 #include <em.h>
4 #include "header.h"
5 #include "back.h"
6 #include "mach.h"
7 #if __STDC__
8 #include <stdarg.h>
9 #else
10 #include <varargs.h>
11 #endif
12
13 /* Mysprint() stores the string directly in the string_arae. This saves
14  * a copy action. It is assumed that the strings stored in the string-table
15  * are never longer than MAXSTRLEN bytes.
16  */
17
18 #define MAXSTRLEN       1024
19
20 #if __STDC__
21 /*VARARGS*/
22 static int mysprint(char *fmt, ...)
23 {
24         va_list args;
25         int retval;
26
27         va_start(args, fmt);
28         while (string + MAXSTRLEN - string_area > size_string)
29                 mem_string();
30         retval = _format(string, fmt, args);
31         string[retval] = '\0';
32         va_end(args);
33         return retval;
34 }
35 #else
36 /*VARARGS*/
37 static int mysprint(va_alist)
38         va_dcl
39 {
40         char *fmt;
41         va_list args;
42         int retval;
43
44         va_start(args);
45         fmt = va_arg(args, char *);
46         while (string + MAXSTRLEN - string_area > size_string)
47                 mem_string();
48         retval = _format(string, fmt, args);
49         string[retval] = '\0';
50         va_end(args);
51         return retval;
52 }
53 #endif
54
55 /* The extnd_*()s make a name unique. The resulting string is directly stored
56  * in the symbol_table (by mysprint()). Later additional fields in the 
57  * symbol_table are filled. For these actions the values of the index in
58  * the symbol_table and the length of the string are stored.
59  */
60
61 extern int      string_lengte, index_symbol_table;
62
63
64 char *extnd_pro( prcno)
65 int prcno;
66 {
67         string_lengte = mysprint( "%cprc%d", GENLAB, prcno);
68         index_symbol_table = find_sym( string, STORE_STRING);
69         return( symbol_table[ index_symbol_table].on_foff + string_area);
70 }
71
72
73 char *extnd_start( prcno)
74 int prcno;
75 {
76         string_lengte = mysprint( "%cstrt%d", GENLAB, prcno);
77         index_symbol_table = find_sym( string, STORE_STRING);
78         return( symbol_table[ index_symbol_table].on_foff + string_area);
79 }
80
81
82 char *extnd_name( s)
83 char *s;
84 {
85         string_lengte = mysprint( NAME_FMT, s);
86         index_symbol_table = find_sym( string, STORE_STRING);
87         return( string_area + symbol_table[ index_symbol_table].on_foff);
88 }
89
90
91 char *extnd_dnam( s)
92 char *s;
93 {
94         string_lengte = mysprint( DNAM_FMT, s);
95         index_symbol_table = find_sym( string, STORE_STRING);
96         return( symbol_table[ index_symbol_table].on_foff + string_area);
97 }
98
99
100 char *extnd_dlb( g)
101 label g;
102 {
103         string_lengte = mysprint( DLB_FMT, (long)g);
104         index_symbol_table = find_sym( string, STORE_STRING);
105         return( symbol_table[ index_symbol_table].on_foff + string_area);
106 }
107
108
109 char *extnd_ilb( l, prcno)
110 arith l;
111 {
112         string_lengte = mysprint( ILB_FMT, prcno, (long) l);
113         index_symbol_table = find_sym( string, STORE_STRING);
114         return( symbol_table[ index_symbol_table].on_foff + string_area);
115 }
116
117
118 char *extnd_hol( hol)
119 int hol;
120 {
121         string_lengte = mysprint( HOL_FMT, hol);
122         index_symbol_table = find_sym( string, STORE_STRING);
123         return( symbol_table[ index_symbol_table].on_foff + string_area);
124 }
125
126
127 char *extnd_part( d)
128 int d;
129 {
130         string_lengte = mysprint( "%cprt%x", GENLAB, d);
131         index_symbol_table = find_sym( string, STORE_STRING);
132         return( symbol_table[ index_symbol_table].on_foff + string_area);
133 }
134
135
136 char *extnd_cont( d)
137 int d;
138 {
139         string_lengte = mysprint( "%ccnt%x", GENLAB, d);
140         index_symbol_table = find_sym( string, STORE_STRING);
141         return( symbol_table[ index_symbol_table].on_foff + string_area);
142 }
143
144
145 char *extnd_main( d)
146 int d;
147 {
148         string_lengte = mysprint( "%cmcnt%x", GENLAB, d);
149         index_symbol_table = find_sym( string, STORE_STRING);
150         return( symbol_table[ index_symbol_table].on_foff + string_area);
151 }