NEURON
axis.cpp
Go to the documentation of this file.
1 #include <../../nrnconf.h>
2 /* /local/src/master/nrn/src/oc/axis.cpp,v 1.2 1999/01/04 13:04:55 hines Exp */
3 /*
4 axis.cpp,v
5  * Revision 1.2 1999/01/04 13:04:55 hines
6  * fabs now from include math.h
7  *
8  * Revision 1.1.1.1 1994/10/12 17:22:06 hines
9  * NEURON 3.0 distribution
10  *
11  * Revision 2.63 1993/11/04 15:55:48 hines
12  * port to solaris2 (no more warnings)
13  *
14  * Revision 2.19 1993/02/02 10:34:03 hines
15  * static functions declared before used
16  *
17  * Revision 1.9 92/10/29 09:19:17 hines
18  * some errors in freeing objects fixed and replace usage of getarg for
19  * non numbers.
20  *
21  * Revision 1.8 92/10/14 10:07:55 hines
22  * move oc specific stuff out of axis.cpp and into code2.cpp
23  * new argument function hoc_pgetarg checks for double pointer on stack
24  * and returns it.
25  * hoc_val_pointer(string) returns a pointer to the variable resulting
26  * from parsing the string.
27  *
28  * Revision 1.7 92/10/09 12:13:51 hines
29  * remove old style point process syntax
30  * make hoc_run_expr(sym) much more general
31  * added hoc_run_stmt(sym) as well
32  * create them with hoc_parse_expr(char*, Symlist**) and
33  * hoc_parse_stmt(char*, Symlist**)
34  *
35  * Revision 1.6 92/07/31 08:54:52 hines
36  * following merged from hoc to oc
37  * Stewart Jasloves contribution to axis labels. This can be invoked by
38  * setting #define Jaslove 1. It is 0 by default. The 3rd and 6th arguments
39  * of axis() may have a precision which specifies the number of digits
40  * after the decimal point for axis labels. eg. 5.3 denotes 5 tic marks with
41  * 3 digits after the decimal point for each tic label
42  *
43  *
44  * Revision 1.5 92/04/15 11:22:16 hines
45  * double hoc_run_expr(sym) returns value of expresssion in sym made by
46  * hoc_parse_exper()
47  *
48  * Revision 1.4 92/04/09 12:39:52 hines
49  * ready to add idplot usage with newgraph(), addgraph(), initgraph(), xgraph()
50  * flushgraph().
51  * A facilitating function exists called
52  * Symbol* hoc_parse_expr(char* str, Symlist** psymlist) which
53  * return a procedure symbol which can be used as
54  * hoc_execute(sym->u.u_proc->defn.in);
55  * val = hoc_xpop();
56  *
57  * Revision 1.3 92/03/19 08:57:01 hines
58  * axis labels close to origin set to 0 so label not strange looking.
59  *
60  * Revision 1.2 91/10/18 14:39:40 hines
61  * symbol tables now are type Symlist containing pointers to first and last
62  * symbols. New symbols get added onto the end.
63  *
64  * Revision 1.1 91/10/11 11:11:28 hines
65  * Initial revision
66  *
67  * Revision 4.17 91/03/18 10:38:43 hines
68  * some builtin functions take address of varname. eg. regraph(&name)
69  * regraph saves list of addresses for fast plotting
70  *
71  * Revision 4.11 91/01/23 17:54:20 hines
72  * use emalloc
73  *
74  * Revision 3.99 90/09/18 13:14:31 hines
75  * plotx() and ploty() functions added so that we can hang absolute
76  * location stuff around a scaled point.
77  *
78  * Revision 3.96 90/09/04 08:30:55 hines
79  * try to get dos and unix together again in one RCS directory
80  *
81  * Revision 3.93 90/08/09 09:19:21 hines
82  * axis.cpp placement of labels slightly lowered to look good with FIG
83  *
84  * Revision 3.83 90/07/25 10:39:56 hines
85  * almost lint free on sparc 1+ under sunos 4.1
86  *
87  * Revision 3.82 90/07/25 08:51:10 hines
88  * sun uses color in graph
89  *
90  * Revision 3.53 90/03/22 16:22:18 jamie
91  * correct error with checkin
92  *
93  * Revision 3.47 90/03/22 15:22:18 jamie
94  * Jamie's Additions stopwatch and settext.
95  *
96  * Revision 3.46 90/01/24 06:35:48 mlh
97  * emalloc() and ecalloc() are macros which return null if out of space
98  * and then call execerror. This ensures that pointers are set to null.
99  * If more cleanup necessary then use hoc_Emalloc() followed by hoc_malchk()
100  *
101  * Revision 3.29 89/10/19 06:54:44 mlh
102  * printing directed through plprint(string) instead
103  * of detailed routing at each place
104  *
105  * Revision 3.7 89/07/13 08:20:25 mlh
106  * stack functions involve specific types instead of Datum
107  *
108  * Revision 3.4 89/07/12 10:25:54 mlh
109  * Lint free
110  *
111  * Revision 3.3 89/07/10 15:44:02 mlh
112  * Lint pass1 is silent. Inst structure changed to union.
113  *
114  * Revision 2.0 89/07/07 16:01:42 mlh
115  * ready to add cable stuff
116  *
117 */
118 /* version 7.1.1 12/8/88
119  change graph to not interact with plot. Adding graphmode(mode).
120  */
121 /* version 7.1.2 12/20/88
122  ordinate labels not positioned correctly on laser writer because
123  leading spaces not printed
124  */
125 /* version 7.1.3 12/29/88
126  sometimes doesn't return to last point after flushing
127  because call to axis from setup can destroy xsav and ysav
128  */
129 /* version 7.2.1 2-jan-89
130  make sure graph(t) and graphmode dont try to do anything when graph list is
131  empty. Replace onerr with static badgraph which is one when graph is empty.
132  */
133 
134 #include <stdio.h>
135 #include <stdlib.h>
136 #include <math.h>
137 #include "gui-redirect.h"
138 
139 #include "utils/logger.hpp"
140 
141 #define CLIP 1e9
142 #define XS 500.
143 #define YS 400.
144 #define XO 100.
145 #define YO 100.
146 #define Ret(a) \
147  hoc_ret(); \
148  hoc_pushx(a);
149 
150 /* This makes it easier to save and restore the 8 plot scale parameters*/
151 #define NPARAM 10
152 static double param[NPARAM] = {XO, YO, XS, YS, -1e9, -1e9, 1e9, 1e9, 0.0, 0.0};
153 #define xorg param[0]
154 #define yorg param[1]
155 #define xscale param[2]
156 #define yscale param[3]
157 #define xlow param[4]
158 #define ylow param[5]
159 #define xhigh param[6]
160 #define yhigh param[7]
161 #define xsav param[8]
162 #define ysav param[9]
163 
164 static double XSIZE = XS, YSIZE = YS, XORG = XO, YORG = YO;
165 static double xstart = 0., xstop = 1., ystart = 0., ystop = 1.;
166 static double xinc = 1., yinc = 1.;
167 static double lastmode = 1;
168 static double clip = CLIP;
169 static int grphing = 0; /* flag true if multiple graphs */
170 
171 static int SaveForRegraph = 0;
172 static int regraph_index;
173 static int max_regraph_index = 1000;
174 static int regraph_narg[1000];
175 static int regraph_mode[1000];
176 static int regraph_color[1000];
177 static double regraph_x[1000];
178 static double* regraph_y[1000];
179 
180 static int PLOT(int, int, double, double);
181 static void free_graph(void);
182 static void plotstream(int, int, double);
183 static void plotflush(int);
184 static void do_setup(void);
185 
186 void hoc_regraph(void) {
187  TRY_GUI_REDIRECT_DOUBLE("regraph", NULL);
188 
191  regraph_index++;
192  }
193  Ret(1.)
194 }
195 static void open_regraph(void) {
196  SaveForRegraph = 1;
197  regraph_index = 0;
198 }
199 static void close_regraph(void) {
200  SaveForRegraph = 0;
201 }
202 static void do_regraph(void) {
203  int i;
204  for (i = 0; i < regraph_index; i++) {
205  if (regraph_color[i] != hoc_color) {
207  }
209  }
210 }
211 static void save_regraph_item(int narg, int mode, double x) {
213  regraph_mode[regraph_index] = mode;
216  if (narg == 1 && regraph_index < max_regraph_index) {
218  regraph_index++;
219  }
220 }
221 
222 void hoc_Plot(void) {
223  TRY_GUI_REDIRECT_DOUBLE("plot", NULL);
224 
225  double ok;
226  int narg, mode;
227 
228  if (ifarg(3)) {
229  narg = 3;
230  mode = (int) *getarg(1);
231  xsav = *getarg(2);
232  ysav = *getarg(3);
233  } else if (ifarg(2)) {
234  narg = 2;
235  mode = 0;
236  xsav = *getarg(1);
237  ysav = *getarg(2);
238  } else if (ifarg(1)) {
239  narg = 1;
240  mode = (int) *getarg(1);
241  if (mode == -10) {
242  open_regraph();
243  Ret(1.);
244  return;
245  } else if (mode == -11) {
246  close_regraph();
247  Ret(1.);
248  return;
249  } else if (mode == -12) {
250  do_regraph();
251  Ret(1.);
252  return;
253  }
254  } else {
255  Printf("plot(mode)\nplot(x, y)\nplot(mode, x, y\n");
256  Printf("axis()\naxis(clip)\naxis(xorg, xsize, yorg, ysize)\n");
257  Printf("axis(xstart, xstop, ntic, ystart, ystop, ntic)\n");
258  Ret(1.);
259  return;
260  }
261  ok = PLOT(narg, mode, xsav, ysav);
262  Ret(ok);
263 }
264 
265 static int PLOT(int narg, int mode, double x, double y) {
266  int ok;
267 
268  ok = 1;
269  if (SaveForRegraph) {
270  save_regraph_item(narg, mode, x);
271  }
272  if (narg == 1) {
273  lastmode = mode;
274  return ok;
275  } else if (narg == 2) {
276  if ((mode = lastmode) == 1)
277  lastmode = 2;
278  } else {
279  lastmode = mode;
280  if ((mode = lastmode) == 1)
281  lastmode = 2;
282  }
283  x = xorg + xscale * x;
284  y = yorg + yscale * y;
285  if (x <= xhigh && x >= xlow && y <= yhigh && y >= ylow) {
286  hoc_plt(mode, x, y);
287  } else if (mode > 0) {
288  lastmode = 1;
289  ok = 0;
290  }
291  return ok;
292 }
293 void hoc_plotx(void) {
294  double val;
295  val = xorg + *getarg(1) * xscale;
296  Ret(val);
297 }
298 void hoc_ploty(void) {
299  double val;
300  val = yorg + *getarg(1) * yscale;
301  Ret(val);
302 }
303 
304 #define WIDTH 10.
305 #define HEIGHT 10.
306 void hoc_axis(void) {
307  TRY_GUI_REDIRECT_DOUBLE("axis", NULL);
308 
309  int width, height;
310  double x, y;
311  double i, j, offset;
312  char s[200];
313  double x0, y0;
314  if (ifarg(6)) {
315  xstart = *getarg(1);
316  xstop = *getarg(2);
317  xinc = *getarg(3);
318  ystart = *getarg(4);
319  ystop = *getarg(5);
320  yinc = *getarg(6);
321  xinc = floor(xinc);
322  yinc = floor(yinc);
323  } else if (ifarg(4)) {
324  XORG = *getarg(1);
325  XSIZE = *getarg(2);
326  YORG = *getarg(3);
327  YSIZE = *getarg(4);
328  } else if (ifarg(1)) {
329  clip = *getarg(1);
330  }
331  xscale = XSIZE / (xstop - xstart);
332  yscale = YSIZE / (ystop - ystart);
333  xorg = XORG - xstart * xscale;
334  yorg = YORG - ystart * yscale;
335  xlow = xstop - clip * (xstop - xstart);
336  xlow = xorg + xscale * xlow;
337  xhigh = xstart + clip * (xstop - xstart);
338  xhigh = xorg + xscale * xhigh;
339  ylow = ystop - clip * (ystop - ystart);
340  ylow = yorg + yscale * ylow;
341  yhigh = ystart + clip * (ystop - ystart);
342  yhigh = yorg + yscale * yhigh;
343  if (xorg < XORG || xorg > XORG + XSIZE)
344  x0 = XORG;
345  else
346  x0 = xorg;
347  if (yorg < YORG || yorg > YORG + YSIZE)
348  y0 = YORG;
349  else
350  y0 = yorg;
351 
352  if (!ifarg(1)) {
353  hoc_plt(1, XORG, y0);
354  for (x = xstart; x <= xstop + 1e-10; x = x + (xstop - xstart) / xinc) {
355  i = xorg + xscale * x;
356  hoc_plt(2, i, y0);
357  hoc_plt(2, i, y0 + 10.);
358  hoc_plt(1, i, y0);
359  }
360  hoc_plt(1, x0, YORG);
361  for (y = ystart; y <= ystop + 1e-10; y = y + (ystop - ystart) / yinc) {
362  j = yorg + yscale * y;
363  hoc_plt(2, x0, j);
364  hoc_plt(2, x0 + 10., j);
365  hoc_plt(1, x0, j);
366  }
367 
368  width = WIDTH;
369  height = HEIGHT;
370 
371  for (x = xstart; x <= xstop + 1e-10; x = x + (xstop - xstart) / xinc) {
372  i = xorg + xscale * x;
373  if (fabs(x) < 1e-10) {
374  x = 0.;
375  }
376  Sprintf(s, "%g", x);
377  offset = width * (int) strlen(s) / 2;
378  if (i == x0 && y0 != YORG)
379  offset = -width / 2;
380  hoc_plt(1, i - offset, y0 - 1.5 * height);
381  hoc_plt(-2, 0., 0.);
382  hoc_plprint(s);
383  }
384 
385  for (y = ystart; y <= ystop + 1e-10; y = y + (ystop - ystart) / yinc) {
386  if (fabs(y) < 1e-10) {
387  y = 0.;
388  }
389  Sprintf(s, "%g", y);
390  offset = width * (int) strlen(s) + width;
391  j = yorg + yscale * y;
392  if (j == y0 && x0 != XORG)
393  hoc_plt(1, x0 - offset, j + 2.);
394  else
395  hoc_plt(1, x0 - offset, j - 6.);
396  hoc_plt(-2, 0., 0.);
397  hoc_plprint(s);
398  }
399  hoc_plt(-1, 0., 0.);
400  }
401  Ret(1.);
402 }
403 
404 /* prior to version 7.1.1
405 graph connects with the plot functions in such a way that multiple
406 line graphs can be generated by using the plot function in the same way
407 that one creates a single plot.
408 
409 graph() starts a new list of expressions and setup statements
410 graph("expr", "setup") adds this spec to the list
411 graph(1) executes the setup statements
412 graph(-1) flushes remaining part of graph
413  version 7.1.1
414  graph(t) accumulates a point with this abscissa for all expr in list.
415  graphmode(1) executes setup statements
416  graphmode(-1) flushes remaining part of graph, next graphs with start
417  new lines
418  graphmode(2...) flushes, but next graphs don't start new lines
419 */
420 
421 /* local info for graph */
422 static int initialized; /* true if the setup statements have been executed*/
423 static Symlist* graph_sym_list; /*list of expressions and setup statements*/
424 #define MAXCNT 50
425 static int pcnt; /* points per plot already stored */
426 static int badgraph = 1; /* graph data structure is no good or empty */
427 static double* lx; /* points to array which holds abscissa values */
428 
429 typedef struct Grph { /* holds info for graphing */
430  struct Grph* g_next; /*next one in the queue*/
431  Symbol* g_sexp; /* symbol for the expression */
432  Symbol* g_setup; /* symbol for the setup statement */
433  int g_color;
434  double g_param[NPARAM]; /* holds plot scale factors, etc. */
435  double g_val[MAXCNT]; /* y value buffer to plot */
437 
438 static Grph *glist_head, *glist_tail; /* access for the queue */
439 
440 void hoc_Graph(void) {
441  TRY_GUI_REDIRECT_DOUBLE("graph", NULL);
442 
443  Grph* g;
444 
445  if (ifarg(2)) {
446  if (badgraph) {
447  free_graph();
448  }
449  badgraph = 1; /* if this is not reset at end then we had an execerror*/
450  initialized = pcnt = 0;
451  if (glist_head == (Grph*) 0) {
452  lx = (double*) emalloc(sizeof(double) * MAXCNT);
453  }
454  g = (Grph*) emalloc(sizeof(Grph));
455  g->g_next = (Grph*) 0;
456  g->g_sexp = g->g_setup = (Symbol*) 0;
457  if (glist_tail != (Grph*) 0) {
458  glist_tail->g_next = g;
459  } else {
460  glist_head = g;
461  }
462  glist_tail = g;
463 
466  badgraph = 0; /* successful */
467  grphing = 1;
468 
469  } else if (ifarg(1) && !badgraph) {
470  plotstream(2, 2, *getarg(1));
471  } else {
472  free_graph();
473  badgraph = 1;
474  }
475  Ret(0.);
476 }
477 
478 void hoc_Graphmode(void) {
479  TRY_GUI_REDIRECT_DOUBLE("graphmode", NULL);
480  int mode;
481  if (!badgraph) {
482  mode = *getarg(1);
483  if (mode == 1) {
484  do_setup();
485  }
486  if (mode == -1) {
487  plotflush(1);
488  }
489  if (mode > 1 && pcnt > 0) {
490  plotflush(2);
491  }
492  }
493  Ret(0.);
494 }
495 
496 static void free_graph(void) {
497  Grph *g, *gnext;
498  /* free all graph space and reinitialize */
500  for (g = glist_head; g != (Grph*) 0; g = gnext) {
501  gnext = g->g_next;
502  free((char*) g);
503  }
504  if (lx) {
505  free((char*) lx);
506  lx = (double*) 0;
507  }
508  glist_head = glist_tail = (Grph*) 0;
509  grphing = initialized = pcnt = 0;
510 }
511 
512 static void plotstream(int narg, int mode, double x) {
513  Grph* g;
514 
515  if (narg == 1 || narg == 3) {
516  plotflush(1);
517  IGNORE(PLOT(narg, mode, xsav, ysav));
518  }
519  if (pcnt >= MAXCNT) {
520  plotflush(2);
521  }
522  if (narg == 2 || narg == 3) {
523  lx[pcnt] = x;
524  for (g = glist_head; g != (Grph*) 0; g = g->g_next) {
525  g->g_val[pcnt] = hoc_run_expr(g->g_sexp);
526  }
527  pcnt++;
528  }
529 }
530 
531 static void plotflush(int contin) {
532  /* contin = 1 then flush after this will start with new points
533  contin = 2 then it will start with last points of this flush
534  */
535  int savcolor;
536  int i, savmode;
537  double parsav[NPARAM];
538  Grph* g;
539 
540  savmode = lastmode;
541  if (!initialized) {
542  do_setup();
543  }
544  for (i = 0; i < NPARAM; i++) {
545  parsav[i] = param[i];
546  }
547  savcolor = hoc_color;
548  for (g = glist_head; g != (Grph*) 0; g = g->g_next) {
549  for (i = 0; i < NPARAM; i++) {
550  param[i] = g->g_param[i];
551  }
552  if (hoc_color != g->g_color) {
554  }
555  IGNORE(PLOT(1, 1, 0., 0.));
556  for (i = 0; i < pcnt; i++) {
557  IGNORE(PLOT(2, 0, lx[i], g->g_val[i]));
558  }
559  if (contin == 2) {
560  g->g_val[0] = g->g_val[pcnt - 1];
561  }
562  }
563  for (i = 0; i < NPARAM; i++) {
564  param[i] = parsav[i];
565  }
566  if (savcolor != hoc_color) {
567  IGNORE(hoc_set_color(savcolor));
568  }
569  if (contin == 2 && pcnt > 0) {
570  lx[0] = lx[pcnt - 1];
571  pcnt = 1;
572  IGNORE(PLOT(3, 1, xsav, ysav)); /* last point of explicit plot */
573  }
574  lastmode = savmode;
575  if (contin == 1) {
576  pcnt = 0;
577  }
578 }
579 
580 static void do_setup(void) {
581  Grph* g;
582  double parsav[NPARAM];
583  int i;
584  int savcolor;
585 
586  for (i = 0; i < NPARAM; i++) {
587  parsav[i] = param[i];
588  }
589  savcolor = hoc_color;
590  for (g = glist_head; g != (Grph*) 0; g = g->g_next) {
591  hoc_run_stmt(g->g_setup);
592  for (i = 0; i < NPARAM; i++) {
593  g->g_param[i] = param[i];
594  }
595  g->g_color = hoc_color;
596  }
597  for (i = 0; i < NPARAM; i++) {
598  param[i] = parsav[i];
599  }
600  if (savcolor != hoc_color) {
601  IGNORE(hoc_set_color(savcolor));
602  }
603  initialized = 1;
604 }
char * gargstr(int narg)
Definition: code2.cpp:227
#define i
Definition: md1redef.h:19
void hoc_plprint(const char *)
Definition: plot.cpp:97
void hoc_run_stmt(Symbol *sym)
Definition: code2.cpp:672
int hoc_set_color(int)
Definition: plot.cpp:549
void hoc_plt(int, double, double)
Definition: plot.cpp:188
Symbol * hoc_parse_expr(const char *str, Symlist **psymlist)
Definition: code2.cpp:646
double hoc_run_expr(Symbol *sym)
Definition: code2.cpp:638
void hoc_free_list(Symlist **)
Definition: symbol.cpp:254
double * hoc_pgetarg(int narg)
Definition: oc_ansi.h:253
int hoc_color
Definition: plot.cpp:85
Symbol * hoc_parse_stmt(const char *str, Symlist **psymlist)
Definition: code2.cpp:679
#define TRY_GUI_REDIRECT_DOUBLE(name, obj)
Definition: gui-redirect.h:47
#define getarg
Definition: hocdec.h:17
static int narg()
Definition: ivocvect.cpp:121
#define IGNORE(arg)
Definition: model.h:224
floor
Definition: extdef.h:4
fabs
Definition: extdef.h:3
static void * emalloc(size_t size)
Definition: mpispike.cpp:30
int Sprintf(char(&buf)[N], const char *fmt, Args &&... args)
Redirect sprintf to snprintf if the buffer size can be deduced.
Definition: wrap_sprintf.h:14
size_t j
s
Definition: multisend.cpp:521
int ifarg(int)
Definition: code.cpp:1607
static Symlist * graph_sym_list
Definition: axis.cpp:423
#define YO
Definition: axis.cpp:145
#define Ret(a)
Definition: axis.cpp:146
#define xlow
Definition: axis.cpp:157
static int PLOT(int, int, double, double)
Definition: axis.cpp:265
static int regraph_mode[1000]
Definition: axis.cpp:175
void hoc_regraph(void)
Definition: axis.cpp:186
#define WIDTH
Definition: axis.cpp:304
static int grphing
Definition: axis.cpp:169
void hoc_Plot(void)
Definition: axis.cpp:222
static double param[NPARAM]
Definition: axis.cpp:152
#define xorg
Definition: axis.cpp:153
static double regraph_x[1000]
Definition: axis.cpp:177
static double lastmode
Definition: axis.cpp:167
#define yorg
Definition: axis.cpp:154
#define XS
Definition: axis.cpp:142
static double ystart
Definition: axis.cpp:165
void hoc_ploty(void)
Definition: axis.cpp:298
static double xstart
Definition: axis.cpp:165
#define XO
Definition: axis.cpp:144
static int regraph_index
Definition: axis.cpp:172
static void open_regraph(void)
Definition: axis.cpp:195
static double XORG
Definition: axis.cpp:164
struct Grph Grph
static double clip
Definition: axis.cpp:168
static int max_regraph_index
Definition: axis.cpp:173
static int SaveForRegraph
Definition: axis.cpp:171
void hoc_Graphmode(void)
Definition: axis.cpp:478
void hoc_axis(void)
Definition: axis.cpp:306
#define xscale
Definition: axis.cpp:155
#define ylow
Definition: axis.cpp:158
static void free_graph(void)
Definition: axis.cpp:496
static double YSIZE
Definition: axis.cpp:164
#define NPARAM
Definition: axis.cpp:151
static void plotstream(int, int, double)
Definition: axis.cpp:512
static int pcnt
Definition: axis.cpp:425
static void save_regraph_item(int narg, int mode, double x)
Definition: axis.cpp:211
static double YORG
Definition: axis.cpp:164
static void do_regraph(void)
Definition: axis.cpp:202
static double xinc
Definition: axis.cpp:166
static void close_regraph(void)
Definition: axis.cpp:199
static double XSIZE
Definition: axis.cpp:164
static double ystop
Definition: axis.cpp:165
static Grph * glist_head
Definition: axis.cpp:438
static double yinc
Definition: axis.cpp:166
#define yhigh
Definition: axis.cpp:160
static int regraph_color[1000]
Definition: axis.cpp:176
#define yscale
Definition: axis.cpp:156
static void plotflush(int)
Definition: axis.cpp:531
void hoc_Graph(void)
Definition: axis.cpp:440
static int regraph_narg[1000]
Definition: axis.cpp:174
static void do_setup(void)
Definition: axis.cpp:580
#define YS
Definition: axis.cpp:143
static double * lx
Definition: axis.cpp:427
static double * regraph_y[1000]
Definition: axis.cpp:178
static int initialized
Definition: axis.cpp:422
static int badgraph
Definition: axis.cpp:426
#define xhigh
Definition: axis.cpp:159
#define CLIP
Definition: axis.cpp:141
void hoc_plotx(void)
Definition: axis.cpp:293
#define HEIGHT
Definition: axis.cpp:305
#define ysav
Definition: axis.cpp:162
#define xsav
Definition: axis.cpp:161
static double xstop
Definition: axis.cpp:165
static Grph * glist_tail
Definition: axis.cpp:438
#define MAXCNT
Definition: axis.cpp:424
#define NULL
Definition: spdefs.h:105
Definition: axis.cpp:429
int g_color
Definition: axis.cpp:433
Symbol * g_setup
Definition: axis.cpp:432
double g_param[NPARAM]
Definition: axis.cpp:434
struct Grph * g_next
Definition: axis.cpp:430
Symbol * g_sexp
Definition: axis.cpp:431
double g_val[MAXCNT]
Definition: axis.cpp:435
Definition: model.h:47
Definition: hocdec.h:75
int Printf(const char *fmt, Args... args)
Definition: logger.hpp:18