1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 Author: 1986 Wayne A. Christopher, U. C. Berkeley CAD Group
4 Modified: 1999 Paolo Nenzi - 2000 AlansFixes
5 **********/
6 
7 /*
8  * Definitions for all external symbols in FTE.
9  */
10 
11 #ifndef ngspice_FTEEXT_H
12 #define ngspice_FTEEXT_H
13 
14 #include "ngspice/config.h"
15 
16 /* needed to find out what the interface structures look like */
17 #include "ngspice/typedefs.h"
18 #include "ngspice/ifsim.h"
19 #include "ngspice/dvec.h"
20 #include "ngspice/plot.h"
21 #include "ngspice/cpdefs.h"
22 #include "ngspice/ftedefs.h"
23 #include "ngspice/fteinp.h"
24 
25 /* aspice.c */
26 
27 extern void ft_checkkids(void);
28 
29 /* breakpoint.c */
30 
31 extern bool ft_bpcheck(struct plot *runplot, int iteration);
32 extern void dbfree(struct dbcomm *db);
33 extern void dbfree1(struct dbcomm *db);
34 
35 
36 /* breakp2.c */
37 
38 extern int ft_getSaves(struct save_info **);
39 
40 
41 /* circuits.c */
42 
43 extern struct circ *ft_curckt;
44 extern struct circ *ft_circuits;
45 extern struct subcirc *ft_subcircuits;
46 extern void ft_newcirc(struct circ *ci);
47 
48 /* clip.c */
49 
50 extern bool clip_line(int *pX1, int *pY1, int *pX2, int *pY2, int l, int b, int r, int t);
51 extern bool clip_to_circle(int *x1, int *y1, int *x2, int *y2, int cx, int cy, int rad);
52 
53 /* cmath1.c */
54 
55 extern bool cx_degrees;
56 extern void *cx_mag(void *, short int , int , int *, short int *);
57 extern void *cx_ph(void *, short int , int , int *, short int *);
58 extern void *cx_cph(void *, short int , int , int *, short int *);
59 extern void *cx_unwrap(void *, short int , int , int *, short int *);
60 extern void *cx_j(void *, short int , int , int *, short int *);
61 extern void *cx_real(void *, short int , int , int *, short int *);
62 extern void *cx_imag(void *, short int , int , int *, short int *);
63 extern void *cx_conj(void *, short int , int , int *, short int *);
64 extern void *cx_pos(void *, short int , int , int *, short int *);
65 extern void *cx_db(void *, short int , int , int *, short int *);
66 extern void *cx_log10(void *, short int , int , int *, short int *);
67 extern void *cx_log(void *, short int , int , int *, short int *);
68 extern void *cx_exp(void *, short int , int , int *, short int *);
69 extern void *cx_sqrt(void *, short int , int , int *, short int *);
70 extern void *cx_sin(void *, short int , int , int *, short int *);
71 extern void *cx_sinh(void *, short int , int , int *, short int *);
72 extern void *cx_cos(void *, short int , int , int *, short int *);
73 extern void *cx_cosh(void *, short int , int , int *, short int *);
74 extern void *cx_tan(void *, short int , int , int *, short int *);
75 extern void *cx_tanh(void *, short int , int , int *, short int *);
76 extern void *cx_atan(void *, short int , int , int *, short int *);
77 extern void *cx_floor(void *, short int , int , int *, short int *);
78 extern void *cx_ceil(void *, short int , int , int *, short int *);
79 extern void *cx_nint(void *, short int , int , int *, short int *);
80 extern void *cx_sortorder(void *, short int , int , int *, short int *);
81 
82 /* cmath2.c */
83 
84 extern void *cx_norm(void *, short int , int , int *, short int *);
85 extern void *cx_uminus(void *, short int , int , int *, short int *);
86 extern void *cx_rnd(void *, short int , int , int *, short int *);
87 extern void *cx_sunif(void *, short int , int , int *, short int *);
88 extern void *cx_sgauss(void *, short int , int , int *, short int *);
89 extern void *cx_poisson(void *, short int , int , int *, short int *);
90 extern void *cx_exponential(void *, short int , int , int *, short int *);
91 extern void *cx_mean(void *, short int , int , int *, short int *);
92 extern void *cx_stddev(void *, short int , int , int *, short int *);
93 extern void *cx_length(void *, short int , int , int *, short int *);
94 extern void *cx_vector(void *, short int , int , int *, short int *);
95 extern void *cx_unitvec(void *, short int , int , int *, short int *);
96 extern void *cx_plus(void *, void *, short int , short int , int );
97 extern void *cx_minus(void *, void *, short int , short int , int );
98 extern void *cx_times(void *, void *, short int , short int , int );
99 extern void *cx_mod(void *, void *, short int , short int , int );
100 extern void *cx_max(void *, short int , int , int *, short int *);
101 extern void *cx_min(void *, short int , int , int *, short int *);
102 extern void *cx_d(void *, short int , int , int *, short int *);
103 extern void *cx_avg(void *, short int , int , int *, short int *);
104 
105 
106 /* cmath3.c */
107 
108 extern void *cx_divide(void *, void *, short int , short int , int);
109 extern void *cx_comma(void *, void *, short int , short int , int);
110 extern void *cx_power(void *, void *, short int , short int , int);
111 extern void *cx_eq(void *, void *, short int , short int , int);
112 extern void *cx_gt(void *, void *, short int , short int , int);
113 extern void *cx_lt(void *, void *, short int , short int , int);
114 extern void *cx_ge(void *, void *, short int , short int , int);
115 extern void *cx_le(void *, void *, short int , short int , int);
116 extern void *cx_ne(void *, void *, short int , short int , int);
117 
118 /* cmath4.c */
119 
120 extern void *cx_and(void *, void *, short int , short int , int);
121 extern void *cx_or(void *, void *, short int , short int , int);
122 extern void *cx_not(void *, short int , int , int *, short int *);
123 
124 extern void *cx_interpolate(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
125 extern void *cx_deriv(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
126 extern void *cx_group_delay(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
127 extern void *cx_fft(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
128 extern void *cx_ifft(void *, short int , int , int *, short int *, struct plot *, struct plot *, int );
129 
130 /* define.c */
131 
132 extern struct pnode *ft_substdef(const char *name, struct pnode *args);
133 extern void ft_pnode(struct pnode *pn);
134 
135 /* DEVHELP*/
136 extern void com_devhelp(wordlist *wl);
137 extern void com_inventory(wordlist *wl);
138 
139 /* dotcards.c */
140 
141 extern bool ft_acctprint;
142 extern bool ft_noacctprint;
143 extern bool ft_noinitprint;
144 extern bool ft_norefprint;
145 extern bool ft_listprint;
146 extern bool ft_nopage;
147 extern bool ft_nomod;
148 extern bool ft_nodesprint;
149 extern bool ft_optsprint;
150 extern int ft_cktcoms(bool terse);
151 extern void ft_dotsaves(void);
152 extern int ft_savedotargs(void);
153 
154 /* error.c */
155 
156 extern void fperror(char *mess, int code);
157 extern void ft_sperror(int code, char *mess);
158 extern char ErrorMessage[];
159 extern void internalerror(char *);
160 extern void externalerror(char *);
161 extern bool ft_pipemode;
162 
163 
164 
165 /* evaluate.c */
166 
167 extern struct dvec *ft_evaluate(struct pnode *node);
168 
169 /* ftesopt.c */
170 extern struct variable *ft_getstat(struct circ *, char *);
171 
172 /* ginterface.c
173 
174    extern bool gi_init();
175    extern bool gi_endpause;
176    extern bool gi_rottext;
177    extern int gi_fntheight;
178    extern int gi_fntwidth;
179    extern int gi_maxx;
180    extern int gi_maxy;
181    extern int gi_nolst;
182    extern int gi_nocolors;
183    extern int gi_package;
184    extern void gi_arc();
185    extern void gi_clearscreen();
186    extern void gi_close();
187    extern void gi_drawline();
188    extern void gi_redraw();
189    extern void gi_setcolor();
190    extern void gi_resetcolor();
191    extern void gi_setlinestyle();
192    extern void gi_text();
193    extern void gi_update();
194 */
195 
196 /* graf.c */
197 
198 extern bool gr_gmode;
199 extern bool gr_hmode;
200 extern double gr_xrange[2];
201 extern double gr_yrange[2];
202 extern int gr_xmargin;
203 extern int gr_ymargin;
204 extern int gr_xcenter;
205 extern int gr_ycenter;
206 extern int gr_radius;
207 extern bool gr_circular;
208 
209 /* inp.c */
210 
211 int inp_dodeck(struct card *deck, char *tt, wordlist *end, bool reuse,
212                 struct card *options, char *filename);
213 extern void inp_source(const char *file);
214 int inp_spsource(FILE *fp, bool comfile, char *filename, bool intfile);
215 extern void inp_casefix(char *string);
216 extern void inp_list(FILE *file, struct card *deck, struct card *extras, int type);
217 struct card *inp_readall(FILE *fp, const char *dir_name,
218         bool comfile, bool intfile, bool *expr_w_temper_p);
219 extern FILE *inp_pathopen(const char *name, const char *mode);
220 extern char *search_identifier(char *str, const char *identifier, char *str_begin);
221 extern char *find_assignment(const char *s);
222 extern char *find_back_assignment(const char *s, const char *start);
223 
224 extern struct card *line_nconc(struct card *head, struct card *rest);
225 extern struct card *line_reverse(struct card *head);
226 extern void inp_mc_free(void);
227 extern void inp_source_recent(void);
228 extern void inp_remove_recent(void);
229 
230 extern char **circarray;
231 extern void rem_tlist(struct pt_temper *p);
232 
233 /* nutinp.c */
234 
235 void inp_nutsource(FILE *fp, bool comfile, char *filename);
236 void nutinp_dodeck(struct card *deck, char *tt, wordlist *end, bool reuse,
237                    struct card *options, char *filename);
238 extern void nutcom_source(wordlist *wl);
239 
240 /* interpolate.c */
241 
242 extern bool ft_interpolate(double *data, double *ndata, double *oscale, int olen, double *nscale, int nlen, int degree);
243 extern bool ft_polyfit(double *xdata, double *ydata, double *result, int degree, double *scratch);
244 extern double ft_peval(double x, double *coeffs, int degree);
245 extern void ft_polyderiv(double *coeffs, int degree);
246 
247 /* numparse.c */
248 
249 extern bool ft_strictnumparse;
250 int ft_numparse(char **s, bool whole, double *p_val);
251 
252 /* options.c */
253 
254 extern bool ft_simdb;
255 extern bool ft_parsedb;
256 extern bool ft_evdb;
257 extern bool ft_vecdb;
258 extern bool ft_grdb;
259 extern bool ft_gidb;
260 extern bool ft_controldb;
261 extern bool ft_asyncdb;
262 extern char *ft_setkwords[];
263 extern struct card *inp_getopts(struct card *deck);
264 extern struct card *inp_getoptsc(char *line, struct card *options);
265 extern bool ft_ngdebug;
266 extern bool ft_stricterror;
267 
268 /* parse.c */
269 
270 extern struct func ft_funcs[];
271 extern struct func func_not;
272 extern struct func func_uminus;
273 extern struct pnode *ft_getpnames(const wordlist *wl, bool check);
274 struct pnode *ft_getpnames_from_string(const char *sz, bool check);
275 extern struct pnode *alloc_pnode(void);
276 #define free_pnode(ptr)                         \
277     do {                                        \
278         free_pnode_x(ptr);                      \
279         ptr = NULL;                             \
280     } while(0)
281 extern void free_pnode_x(struct pnode *t);
282 
283 /* plotcurve.c */
284 
285 extern int ft_findpoint(double pt, double *lims, int maxp, int minp, bool islog);
286 extern double *ft_minmax(struct dvec *v, bool real);
287 extern void ft_graf(struct dvec *v, struct dvec *xs, bool nostart);
288 
289 /* rawfile.c */
290 extern int raw_prec;
291 extern void raw_write(char *name, struct plot *pl, bool app, bool binary);
292 extern void spar_write(char *name, struct plot *pl, double val);
293 extern struct plot *raw_read(char *name);
294 
295 /* meas.c */
296 extern bool do_measure(char *what, bool chk_only);
297 extern bool check_autostop(char *what);
298 
299 /* resource.c */
300 
301 extern void ft_ckspace(void);
302 
303 /* runcoms.c */
304 
305 extern int ft_dorun(char *file);
306 
307 extern bool ft_getOutReq(FILE **, struct plot **, bool *, char *, char *);
308 
309 /* spice.c & nutmeg.c */
310 
311 extern const bool ft_nutmeg;
312 extern IFsimulator *ft_sim;
313 extern char *ft_rawfile;
314 extern int main(int argc, char **argv);
315 
316 /* spiceif.c & nutmegif.c */
317 
318 extern bool if_tranparams(struct circ *ci, double *start, double *stop, double *step);
319 extern char *if_errstring(int code);
320 extern int if_sens_run(CKTcircuit *t, wordlist *args, INPtables *tab);
321 extern struct variable *(*if_getparam)(CKTcircuit *ckt, char **name, char *param, int ind, int do_model);
322 extern struct variable *nutif_getparam(CKTcircuit *ckt, char **name, char *param, int ind, int do_model);
323 extern struct variable *spif_getparam(CKTcircuit *ckt, char **name, char *param, int ind, int do_model);
324 extern struct variable *spif_getparam_special(CKTcircuit *ckt, char **name, char *param, int ind, int do_model);
325 extern void if_setndnames(char *line);
326 extern void if_setparam_model(CKTcircuit *ckt, char **name, char *val );
327 extern void if_setparam(CKTcircuit *ckt, char **name, char *param, struct dvec *val, int do_model);
328 extern struct variable *if_getstat(CKTcircuit *ckt, char *name);
329 extern int ft_find_analysis(char *name);
330 extern IFparm *ft_find_analysis_parm(int which, char *name);
331 
332 /* typesdef.c */
333 
334 extern char *ft_typabbrev(int);
335 extern char *ft_typenames(int);
336 extern char *ft_plotabbrev(char *);
337 extern int ft_typnum(char *);
338 
339 /* vectors.c */
340 
341 extern bool vec_iszero(const struct dvec *v);
342 extern bool vec_eq(struct dvec *v1, struct dvec *v2);
343 extern int plot_num;
344 extern struct dvec *vec_fromplot(char *word, struct plot *plot);
345 extern struct dvec *vec_copy(struct dvec *v);
346 extern struct dvec *vec_get(const char *word);
347 extern struct dvec *vec_mkfamily(struct dvec *v);
348 extern struct plot *plot_cur;
349 extern struct plot *plot_alloc(char *name);
350 extern struct plot *plot_list;
351 extern int plotl_changed;
352 extern void plot_add(struct plot *pl);
353 #define vec_free(ptr)                           \
354     do {                                        \
355         vec_free_x(ptr);                        \
356         ptr = NULL;                             \
357     } while(0)
358 extern void vec_free_x(struct dvec *v);
359 extern void vec_gc(void);
360 extern void ft_loadfile(char *file);
361 extern void vec_new(struct dvec *d);
362 extern void plot_docoms(wordlist *wl);
363 extern void vec_remove(const char *name);
364 extern void plot_setcur(const char *name);
365 extern struct plot *get_plot(const char *name);
366 extern void plot_new(struct plot *pl);
367 extern char *vec_basename(struct dvec *v);
368 extern void vec_transpose(struct dvec *v);
369 extern struct dvec* copycut(struct dvec* ov, struct dvec* newscalevec, int istart, int istop);
370 
371 /* main.c */
372 extern bool ft_intrpt;
373 extern bool ft_setflag;
374 
375 /* error.c */
376 
377 #endif
378