Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / api / stm / stm_API.c
1 #include ELP_H
2 #include STM_H
3 #define API_USE_REAL_TYPES
4 #include "stm_API.h"
5
6 //_____________________________________________________________________________
7
8 void *stm_AddCell (char *cellname)
9 {
10 return (timing_cell*)stm_addcell (cellname);
11 }
12
13 //_____________________________________________________________________________
14
15 void *stm_ModCreateTable (char *name, int nx, int ny, char xtype, char ytype)
16 {
17 return (timing_model*)stm_mod_create_table (name,nx,ny,xtype,ytype);
18 }
19
20 //_____________________________________________________________________________
21
22 void stm_ModTblSetXrangeVal (void *model, int xpos, double value)
23 {
24 timing_table *table;
25
26 table = ((timing_model*)model)->UMODEL.TABLE;
27 stm_modtbl_setXrangeval (table, xpos, value);
28 }
29
30 //_____________________________________________________________________________
31
32 void stm_ModTblSetYrangeVal (void *model, int ypos, double value)
33 {
34 timing_table *table;
35
36 table = ((timing_model*)model)->UMODEL.TABLE;
37 stm_modtbl_setYrangeval (table, ypos, value);
38 }
39
40 //_____________________________________________________________________________
41
42 void stm_ModTblSetXrange (void *model, chain_list *xrange)
43 {
44 timing_table *table;
45
46 table = ((timing_model*)model)->UMODEL.TABLE;
47 stm_modtbl_setXrange (table, (chain_list*)xrange, 1.0);
48 }
49
50 //_____________________________________________________________________________
51
52 void stm_ModTblSetYrange (void *model, chain_list *yrange)
53 {
54 timing_table *table;
55
56 table = ((timing_model*)model)->UMODEL.TABLE;
57 stm_modtbl_setXrange (table, (chain_list*)yrange, 1.0);
58 }
59
60 //_____________________________________________________________________________
61
62 void stm_ModTblSet2Dval (void *model, int xpos, int ypos, double value)
63 {
64 timing_table *table;
65
66 table = ((timing_model*)model)->UMODEL.TABLE;
67 stm_modtbl_set2Dval (table, xpos, ypos, value);
68 }
69
70 //_____________________________________________________________________________
71
72 char *stm_CellAddModel (void *cell, void *model, int noshare)
73 {
74 return stm_cell_addmodel ((timing_cell*)cell, (timing_model*)model, noshare);
75 }
76
77 //_____________________________________________________________________________
78
79 void stm_DriveCell (char *cellname)
80 {
81 stm_drivecell (cellname);
82 }
83
84 //_____________________________________________________________________________
85
86 chain_list *stm_ModTblAddRangeVal (chain_list *range, double value)
87 {
88 double *ptval;
89
90 ptval = (double*) malloc (sizeof (double));
91 *ptval = value;
92
93 range = addchain (range,ptval);
94 return (chain_list*)range;
95 }
96
97 //_____________________________________________________________________________
98
99 chain_list *stm_ModTblCreateRange (char *rangevalues)
100 {
101 double *ptval;
102 char separ = ':';
103 char *val;
104 char buf[2048];
105 chain_list *range = NULL;
106
107 if (!rangevalues) return NULL;
108 sprintf (buf,rangevalues);
109 val = strtok (buf,&separ);
110 if (val) {
111 ptval = (double*) malloc (sizeof (double));
112 *ptval = (double) atof (val);
113 range = addchain (range,ptval);
114 while ((val = strtok(NULL,&separ))) {
115 ptval = (double*) malloc (sizeof (double));
116 *ptval = (double) atof (val);
117 range = addchain (range,ptval);
118 }
119
120 }
121 return range;
122 }
123
124 //_____________________________________________________________________________
125
126 void stm_FreeTblRange (chain_list *range)
127 {
128 chain_list *chain = (chain_list*)range;
129 chain_list *chain2free;
130
131 if (!chain) return;
132
133 while (chain->NEXT) {
134 chain2free = chain;
135 chain = chain->NEXT;
136 free (chain2free->DATA);
137 }
138 freechain ((chain_list*)range);
139 }
140
141
142 // METHO
143
144 void SET_DELAY(double value)
145 {
146 stm_set_computed_delay(value);
147 }
148
149 double GET_DELAY()
150 {
151 return stm_get_computed_delay();
152 }
153
154 void SET_SLOPE(double value)
155 {
156 stm_set_computed_slope(value);
157 }
158
159 double GET_SLOPE()
160 {
161 return stm_get_computed_slope();
162 }
163
164 double GET_OUTPUT_CAPA()
165 {
166 return stm_get_output_load();
167 }
168
169 double GET_INPUT_SLOPE()
170 {
171 return stm_get_input_slope();
172 }
173
174 double GET_COMMAND_INPUT_SLOPE()
175 {
176 return stm_get_command_slope();
177 }
178
179 void CALL_SIMULATION()
180 {
181 stm_call_simulation();
182 }
183
184 void CALL_SIMULATION_ENV()
185 {
186 stm_call_simulation_env();
187 }
188
189 void CALL_CTK_ENV()
190 {
191 stm_call_ctk_env();
192 }
193
194