NEURON
fmenu.cpp
Go to the documentation of this file.
1 #include <../../nrnconf.h>
2 /* /local/src/master/nrn/src/oc/fmenu.c,v 1.4 1996/02/16 16:19:25 hines Exp */
3 /*
4 fmenu.c,v
5  * Revision 1.4 1996/02/16 16:19:25 hines
6  * OCSMALL used to throw out things not needed by teaching programs
7  *
8  * Revision 1.3 1995/07/22 13:01:47 hines
9  * avoid unhandled exceptions in mswindows due to some function stubs
10  *
11  * Revision 1.2 1994/11/23 19:52:57 hines
12  * all nrnoc works in dos with go32
13  *
14  * Revision 1.1.1.1 1994/10/12 17:22:08 hines
15  * NEURON 3.0 distribution
16  *
17  * Revision 2.19 93/02/02 10:34:25 hines
18  * static functions declared before used
19  *
20  * Revision 1.3 92/08/18 07:31:36 hines
21  * arrays in different objects can have different sizes.
22  * Now one uses araypt(symbol, SYMBOL) or araypt(symbol, OBJECTVAR) to
23  * return index of an array variable.
24  *
25  * Revision 1.2 91/10/14 17:36:08 hines
26  * scaffolding for oop in place. Syntax about right. No action yet.
27  *
28  * Revision 1.1 91/10/11 11:12:01 hines
29  * Initial revision
30  *
31  * Revision 4.20 91/04/03 16:01:33 hines
32  * mistyped ||
33  *
34  * Revision 4.9 91/01/04 09:51:08 hines
35  * turboc++ sometimes fails with __TURBOC__ but succeeds with
36  * #if defined(__TURBOC__)
37  *
38  * Revision 3.77 90/07/20 09:45:49 hines
39  * case 3 allows actions to be executed when variable is changed
40  *
41  * Revision 3.50 90/02/17 10:12:25 mlh
42  * lint free on sparc and makfile good for sparc
43  *
44  * Revision 3.44 90/01/05 14:57:24 mlh
45  * min and max along with Jamie's changes that allow person to match
46  * upper char by typing lower char (works only with turboc)
47  *
48  * Revision 3.41 89/12/08 15:34:47 mlh
49  * infinite loop when searching for non-existent character starting
50  * at first menu item.
51  * Corrected with do{}while control structure.
52  *
53  * Revision 3.20 89/08/15 08:29:42 mlh
54  * compiles under turbo-c 1.5 -- some significant bugs found
55  *
56  * Revision 3.7 89/07/13 08:21:26 mlh
57  * stack functions involve specific types instead of Datum
58  *
59  * Revision 3.4 89/07/12 10:26:55 mlh
60  * Lint free
61  *
62  * Revision 3.3 89/07/10 15:45:56 mlh
63  * Lint pass1 is silent. Inst structure changed to union.
64  *
65  * Revision 2.0 89/07/07 11:36:43 mlh
66  * *** empty log message ***
67  *
68  * Revision 1.1 89/07/07 11:15:57 mlh
69  * Initial revision
70  *
71 */
72 
73 /* Copyright 1989,88,87- M.L. Hines, Neurobiology Dept.,DUMC, Durham, NC
74  *
75  * REVISION HISTORY:
76  *
77  * 5-19-89 let return start entry of number
78  * 5-04-89 Get it going on the SUN.
79  * 4-17-89 Added if HOC if FOCEXT statements to distinguish between FOCAL
80  * and HOC versions.
81  *
82  * Synopsis fmenu is a FOCAL menu management function
83  *
84  * x fmenu(args) where the following options are available:
85  *
86  * fmenu(nmenu,-1) allocates space for nmenu number of menus
87  * Menu identifier numbers start at 0,1,...nmenu-1
88  * fmenu(imenu,0) erase previous menu identified by imenu.
89  *
90  * fmenu(imenu,1,var list) add variables specified in list
91  * to imenu. The variable names will
92  * be added sequentially in the order
93  * specified.
94  *
95  * fmenu(imenu,2,"prompt","command") add the executable command
96  * specified by a prompt,command pair
97  * to imenu.
98  *
99  * fmenu(imenu) executes menu imenu, displays,
100  * navigates through imenu.
101  *
102  *
103  * Version 1.0 written by M.V. Evans and M.L. Hines 4-12-89
104  */
105 
106 #include <stdlib.h>
107 
108 #if defined(__GO32__)
109 #define G32 1
110 #include <dos.h>
111 #include <gppconio.h>
112 extern int egagrph; /* detect if in graphics mode */
113 #endif
114 
115 #if DOS
116 #include <dos.h>
117 #include <io.h>
118 union REGS regs;
119 extern int egagrph; /* detect if in graphics mode */
120 #else
121 #if !G32
122 static int egagrph = 0;
123 #endif
124 #endif
125 #include "hoc.h"
126 #include <ctype.h>
127 #if HOC | OOP
128 #define Ret(a) \
129  hoc_ret(); \
130  hoc_pushx(a)
131 #endif
132 #define NUL 0
133 #define SPACE '\040'
134 #define BEEP Printf("\007")
135 /* structure and functions from getsym.c */
136 #include "hocgetsym.h"
137 
138 /* Structure for single menu list */
139 typedef struct Menuitem {
140  struct Menuitem* pprevious; /* Pointer to a previous item */
141  short row, col; /* Coordinates of each menu item */
142  short type;
143  char* prompt; /* prompt, command used for actions */
144  char* command;
146  double symmin; /* min and max value for sym */
147  double symmax;
148  struct Menuitem* nextitem; /* Pointer to next menu item */
150 
151 /* menu types */
152 #define MENU_VAR 1
153 #define MENU_ACTION 2
154 
155 /* Summary of menu functions :
156  insert_menu(int r, int c, sym *sp ) - Stores row and col coordinates, and the symbol pointer
157 specified in fcursor() as an item in a structure list. Successive items are appended at the end of
158 the list. This function returns the pointer for the beginning of the list. display_menu(Menuitem
159 *menu) - Displays the whole menu as specified by successive calls to fcursor. Recovers information
160 stored for each menu item and prints the corresponding item variable name and value at its specified
161 position. destroy_menu(Menuitem *menu) - Frees the space allocated for the whole menu list.
162  navigate_menu(Menuitem *menu) - Allows user to move around the displayed menu by making use of
163 the arrow keys. erase_item(Menuitem *pnow) - Erases second line contents in menu
164 */
165 
166 
167 static int cexecute(const char*);
168 static char* navigate(int);
169 static Menuitem* append(); /*common code for appendsym,appendaction*/
170 static void appendvar(int, const char*, const char*);
171 static void appendaction(int, const char*, const char*);
172 static void destroy(int);
173 static double enter(int, int, double, int, Menuitem*);
174 static void prval(int, int, int, double);
175 static void prs(int, int, int, const char*);
176 static void undisplay(int);
177 
178 /* Structure pointer summary:
179  *pprev - pointer to previous item structure
180  *pnow - pointer to current item structure
181  *nextitem - pointer to next item - forward link
182  *pprevious - pointer to previous item - reverse link
183  */
184 
185 static int current_menu = -1; /* current menu number */
186 static int maxmenus;
187 static Menuitem** menusfirst; /* pointers to first menuitem in list*/
188 static Menuitem** menuslast; /* pointers to last menuitem in list*/
189 static Menuitem** menuscurrent; /* pointers to where navigate starts*/
190 static int first = 1; /* emacs_term has not been opened */
191 
192 #define diag(s) hoc_execerror(s, (char*) 0);
193 #define chk(i) \
194  { \
195  if (i < 0 || i >= maxmenus) \
196  diag("menu number out of range"); \
197  }
198 static void menu_manager(int nmenu) {
199  int previous;
200  char* command;
201  previous = current_menu;
202  current_menu = nmenu;
203  if (previous >= 0) {
204  undisplay(previous);
205  } else {
207  }
208  while ((command = navigate(current_menu)) != (char*) 0) {
209  if (cexecute(command) == 4) { /* 4 means stop was executed */
210  break;
211  }
212  }
213  if (previous >= 0) {
215  }
216  current_menu = previous;
217 }
218 
219 void hoc_fmenu(void) {
220  int imenu, flag, i, narg;
221 #ifdef WIN32
222  hoc_execerror("fmenu not available under mswindows.", "Use xpanel series");
223 #endif
224  imenu = *getarg(1);
225  if (!ifarg(2)) { /* navigate the menu */
226  chk(imenu);
227  menu_manager(imenu);
228  Ret(0.);
229  return;
230  }
231  flag = *getarg(2);
232  narg = 2;
233  switch (flag) {
234  case -1:
235  if (current_menu != -1) {
236  diag("can't destroy current menu");
237  }
238  if (maxmenus) {
239  for (i = 0; i < maxmenus; i++) {
240  destroy(i);
241  }
242  free((char*) menusfirst);
243  free((char*) menuslast);
244  }
245  maxmenus = 0;
246  menusfirst = (Menuitem**) emalloc((unsigned) (imenu * sizeof(Menuitem*)));
247  menuslast = (Menuitem**) emalloc((unsigned) (imenu * sizeof(Menuitem*)));
248  menuscurrent = (Menuitem**) emalloc((unsigned) (imenu * sizeof(Menuitem*)));
249 
250  maxmenus = imenu;
251  for (i = 0; i < maxmenus; i++) {
252  menusfirst[i] = menuslast[i] = menuscurrent[i] = (Menuitem*) 0;
253  }
254  break;
255  case 0:
256  chk(imenu);
257  if (current_menu == imenu) {
258  diag(" can't destroy current menu");
259  }
260  destroy(imenu);
261  appendaction(imenu, "Exit", "stop");
262  break;
263  case 1:
264  while (ifarg(narg = narg + 1)) {
265  appendvar(imenu, gargstr(narg), (char*) 0);
266  menuslast[imenu]->symmin = *getarg(narg = narg + 1);
267  menuslast[imenu]->symmax = *getarg(narg = narg + 1);
268  }
269  break;
270  case 2:
271  while (ifarg(narg = narg + 1)) {
272  char *prompt, *command;
273  prompt = gargstr(narg);
274  command = gargstr(narg = narg + 1);
275  appendaction(imenu, prompt, command);
276  }
277  break;
278  case 3:
279  while (ifarg(narg = narg + 1)) {
280  appendvar(imenu, gargstr(narg), gargstr(narg + 1));
281  menuslast[imenu]->symmin = *getarg(narg = narg + 2);
282  menuslast[imenu]->symmax = *getarg(narg = narg + 1);
283  }
284  break;
285  default:
286  diag("illegal argument flag");
287  break;
288  }
289  Ret(0.);
290 }
291 
292 static void xcursor(int r, int c) {
293 #if DOS
294  _BH = 0;
295  _DH = r;
296  _DL = c;
297  _AH = 2;
298  geninterrupt(0x10);
299 #elif G32
300  union REGS regs;
301  regs.h.ah = 0x02;
302  regs.h.bh = 0;
303  regs.h.dh = r;
304  regs.h.dl = c;
305  if (egagrph) {
306  grx_move(r, c);
307  } else {
308  int86(0x10, &regs, &regs);
309  }
310 #endif
311 }
312 
313 static int ibmgetc(void) { /* Copied from ibm.c file in memacs */
314 #if DOS
315  regs.h.ah = 7;
316  intdos(&regs, &regs);
317  return (int) regs.h.al;
318 #elif G32
319  union REGS regs;
320  regs.h.ah = 7;
321  intdos(&regs, &regs);
322  return (int) regs.h.al;
323 #else
324  return 0;
325 #endif
326 }
327 
328 static Menuitem* append(int imenu) {
329  Menuitem *last, *pnow;
330 
331  if (imenu < 0 || imenu >= maxmenus) {
332  diag("menu number out of range");
333  }
334  last = menuslast[imenu];
335  pnow = (Menuitem*) emalloc(sizeof(Menuitem));
336 
337  pnow->pprevious = last;
338  pnow->nextitem = (Menuitem*) 0;
339  menuslast[imenu] = pnow;
340 
341  if (last) {
342  int col = last->col, row = last->row;
343  last->nextitem = pnow;
344  col += 13;
345  if (col > 77) {
346  row += 2;
347  col = 0;
348  }
349  pnow->row = row;
350  pnow->col = col;
351  } else {
352  menusfirst[imenu] = pnow;
353  pnow->row = 0;
354  pnow->col = 0;
355  menuscurrent[imenu] = pnow;
356  }
357 
358  pnow->type = 0;
359  pnow->prompt = (char*) 0;
360  pnow->command = (char*) 0;
361  pnow->psym = (Psym*) 0;
362  return (pnow);
363 }
364 
365 static void appendvar(int imenu, const char* variable, const char* command) {
366  Menuitem* item;
367  int i, len;
368  char buf[256];
369  Psym* p;
370 
371  item = append(imenu);
372  item->type = MENU_VAR;
373  item->psym = p = hoc_getsym(variable);
374  if (command) {
375  item->command = (char*) emalloc((unsigned) (strlen(command) + 1));
376  Strcpy(item->command, command);
377  } else {
378  item->command = (char*) 0;
379  }
380  Sprintf(buf, "%s", p->sym->name);
381  len = strlen(buf);
382  for (i = 0; i < p->nsub; i++) {
383  Sprintf(buf + len, "[%d]", p->sub[i]);
384  len = strlen(buf);
385  }
386  item->prompt = (char*) emalloc((unsigned) (len + 1));
387  Strcpy(item->prompt, buf);
388 }
389 
390 static void appendaction(int imenu, const char* prompt, const char* command) {
391  Menuitem* item;
392  item = append(imenu);
393  item->type = MENU_ACTION;
394  item->prompt = (char*) emalloc((unsigned) (strlen(prompt) + 1));
395  Strcpy(item->prompt, prompt);
396  item->command = (char*) emalloc((unsigned) (strlen(command) + 1));
397  Strcpy(item->command, command);
398 }
399 
400 static void display(int imenu) {
401  Menuitem *menu, *pnow;
402  int row, col;
403 
404  chk(imenu);
405  menu = menusfirst[imenu];
406  for (pnow = menu; pnow; pnow = pnow->nextitem) {
407  row = pnow->row;
408  col = pnow->col;
409  prs(0, row, col, pnow->prompt);
410  switch (pnow->type) {
411  case MENU_VAR:
412  prval(0, row + 1, col, hoc_getsymval(pnow->psym));
413  break;
414  }
415  }
416  xcursor(menuslast[imenu]->row + 2, 0);
417 }
418 
419 
420 static void destroy(int imenu) {
421  Menuitem* menu;
422  Menuitem *pnow, *nextitem;
423 
424  menu = menusfirst[imenu];
425  menusfirst[imenu] = (Menuitem*) 0;
426  menuslast[imenu] = (Menuitem*) 0;
427  menuscurrent[imenu] = (Menuitem*) 0;
428  for (pnow = menu; pnow; pnow = nextitem) {
429  nextitem = pnow->nextitem;
430  if (pnow->prompt) {
431  free(pnow->prompt);
432  }
433  if (pnow->command) {
434  free((char*) pnow->command);
435  }
436  if (pnow->psym) {
437  free_arrayinfo(pnow->psym->arayinfo);
438  free((char*) pnow->psym);
439  }
440  free((char*) pnow);
441  }
442 }
443 
444 static char* navigate(int imenu) {
445  Menuitem* menu;
446  Menuitem *pcur, *pnow;
447  int row, col, key, current_col;
448  double val;
449 
450  menu = menusfirst[imenu];
451  if (menu == (Menuitem*) 0) {
452  return (char*) 0;
453  }
454  display(imenu);
455  pcur = menuscurrent[imenu];
456  key = 0;
457  while (key != 27) {
458  pnow = pcur; /* pnow is fixed hereafter */
459  row = pnow->row + 1;
460  col = pnow->col;
461  switch (pnow->type) {
462  case MENU_VAR:
463  val = hoc_getsymval(pnow->psym);
464  prval(1, row, col, val);
465  break;
466  case MENU_ACTION:
467  prs(1, row, col, "execute");
468  break;
469  }
470 
471  key = ibmgetc();
472  if (key == 27 || key == 3)
473  goto label;
474  if (key == 5) {
475  return "plt(-5)";
476  }
477  if (key == 0) { /* arrow key pressed */
478  key = ibmgetc();
479  switch (key) {
480  case 77: /* Right arrow key */
481  pcur = pcur->nextitem;
482  if (pcur == NUL)
483  pcur = menu;
484  break;
485  case 75: /* Left arrow key */
486  pcur = pcur->pprevious;
487  if (pcur == (Menuitem*) 0) {
488  pcur = menuslast[imenu];
489  }
490  break;
491  case 80: /* Down key */
492  current_col = pnow->col;
493  do {
494  pcur = pcur->nextitem;
495  if (pcur == (Menuitem*) 0) {
496  pcur = menu;
497  }
498  } while (pcur->col != current_col);
499  break;
500  case 72: /* Up key*/
501  current_col = pnow->col;
502  do {
503  pcur = pcur->pprevious;
504  if (pcur == (Menuitem*) 0) {
505  pcur = menuslast[imenu];
506  }
507  } while (pcur->col != current_col);
508  break;
509  default:
510  BEEP;
511  break;
512  }
513  } else if (pnow->type == MENU_VAR &&
514  ((isdigit(key) || key == '-' || key == '+' || key == 015 || key == '.'))) {
515  prs(0, row, col, "");
516  val = enter(row, col, val, key, pnow);
517  hoc_assignsym(pnow->psym, val);
518  if (pnow->command) {
519  prs(0, pnow->row + 1, pnow->col, "executing");
520  xcursor(menuslast[imenu]->row + 2, 0);
521 
522  return pnow->command;
523  }
524  prval(1, row, col, val);
525  } else if (key == 015 && pnow->type == MENU_ACTION) {
526  prs(0, pnow->row + 1, pnow->col, "executing");
527  xcursor(menuslast[imenu]->row + 2, 0);
528 
529  return pnow->command;
530  } else if (isalpha(key)) {
531  pcur = pnow;
532  do {
533  pcur = pcur->nextitem;
534  if (pcur == (Menuitem*) 0) {
535  pcur = menusfirst[imenu];
536  }
537  if (toupper(pcur->prompt[0]) == toupper(key))
538  break;
539  } while (pcur != pnow);
540  } else {
541  BEEP;
542  }
543  menuscurrent[imenu] = pcur;
544 
545  switch (pnow->type) { /* the old one */
546  case MENU_VAR:
547  prval(0, row, col, val);
548  break;
549  case MENU_ACTION:
550  prs(0, row, col, "");
551  break;
552  }
553  }
554 label:
555  xcursor(menuslast[imenu]->row + 2, 0);
556  return (char*) 0;
557 }
558 
559 static double enter(int row, int col, double defalt, int frstch, Menuitem* pnow) {
560  char istr[80], *istrptr;
561  int key;
562  double input;
563  char buf[10];
564 
565  istrptr = &istr[0];
566  xcursor(row, ++col);
567  if (frstch != 13) {
568  *istrptr++ = frstch;
569  sprintf(buf, "%c", istr[0]);
570  plprint(buf);
571  }
572  for (;;) {
573  key = ibmgetc();
574  if (isdigit(key) || key == '.' || key == 'e' || key == '-' || key == '+') {
575  sprintf(buf, "%c", key);
576  plprint(buf);
577  *istrptr++ = key;
578  continue;
579  } else if (key == 27) {
580  return (defalt);
581  } else if (key == '\b') {
582  if (istrptr > istr) {
583 #if G32
584  if (egagrph) {
585  grx_backspace(1);
586  hoc_outtext(" ");
587  grx_backspace(1);
588  } else
589 #endif
590  Printf("\b \b");
591  *(--istrptr) = '\0';
592  }
593  } else if (key == 13) { /*return*/
594  *istrptr = '\0';
595  if (sscanf(istr, "%lf", &input) == 1)
596  if (input >= pnow->symmin && input <= pnow->symmax) {
597  return (input);
598  } else { /* input out of range */
599  BEEP;
600  Sprintf(istr, "Range %-5g", pnow->symmin);
601  prs(0, pnow->row, pnow->col, istr);
602  Sprintf(istr, "To %-5g ", pnow->symmax);
603  prs(0, pnow->row + 1, pnow->col, istr);
604  key = ibmgetc();
605  BEEP;
606  prs(0, pnow->row, pnow->col, pnow->prompt);
607 
608  return (defalt);
609  }
610  else {
611  return (defalt);
612  }
613  } else {
614  BEEP;
615  continue;
616  }
617  }
618 } /* end of function enter */
619 
620 static void prval(int oldnew, int row, int col, double val) {
621  char string[100];
622  Sprintf(string, "%g", val);
623  prs(oldnew, row, col, string);
624 }
625 
626 static void prs(int oldnew, int row, int col, const char* string) {
627  char buf[100];
628  xcursor(row, col);
629  if (oldnew == 0) {
630  sprintf(buf, "%-13s", string);
631  plprint(buf);
632  } else {
633  sprintf(buf, "%13c", SPACE);
634  plprint(buf);
635  xcursor(row, col);
636  snprintf(buf, 100, "<%s>", string);
637  plprint(buf);
638  }
639 }
640 
641 static int cexecute(const char* command) {
642  int i;
643  hoc_returning = 0;
644  hoc_execstr(command);
645  i = hoc_returning;
646  hoc_returning = 0;
647  return i;
648 }
649 
650 #if DOS || G32
651 #else
652 static void clrscr(void) {}
653 #endif
654 
655 static void undisplay(int imenu) {
656  int i;
657  if (egagrph != 0) {
658 #if GRX
659  grx_txt_clear();
660 #else
661  xcursor(menusfirst[imenu]->row, 0);
662  for (i = menuslast[imenu]->row - menusfirst[imenu]->row + 2; i; i--) {
663  Printf("%80c\n", SPACE);
664  }
665 #endif
666  } else {
667  clrscr();
668  }
669 }
670 
671 void hoc_menu_cleanup(void) {
672  current_menu = -1;
673 }
sprintf(buf, " if (secondorder) {\n" " int _i;\n" " for (_i = 0; _i < %d; ++_i) {\n" " _p[_slist%d[_i]] += dt*_p[_dlist%d[_i]];\n" " }}\n", numeqn, listnum, listnum)
#define c
#define Ret(a)
Definition: fmenu.cpp:128
static Menuitem ** menuscurrent
Definition: fmenu.cpp:189
#define BEEP
Definition: fmenu.cpp:134
#define chk(i)
Definition: fmenu.cpp:193
static void undisplay(int)
Definition: fmenu.cpp:655
static void menu_manager(int nmenu)
Definition: fmenu.cpp:198
#define MENU_ACTION
Definition: fmenu.cpp:153
#define SPACE
Definition: fmenu.cpp:133
static void display(int imenu)
Definition: fmenu.cpp:400
static Menuitem ** menusfirst
Definition: fmenu.cpp:187
static int first
Definition: fmenu.cpp:190
static char * navigate(int)
Definition: fmenu.cpp:444
static int current_menu
Definition: fmenu.cpp:185
static Menuitem ** menuslast
Definition: fmenu.cpp:188
#define MENU_VAR
Definition: fmenu.cpp:152
static void appendaction(int, const char *, const char *)
Definition: fmenu.cpp:390
static void prval(int, int, int, double)
Definition: fmenu.cpp:620
static void prs(int, int, int, const char *)
Definition: fmenu.cpp:626
static double enter(int, int, double, int, Menuitem *)
Definition: fmenu.cpp:559
void hoc_fmenu(void)
Definition: fmenu.cpp:219
static void destroy(int)
Definition: fmenu.cpp:420
static int egagrph
Definition: fmenu.cpp:122
static void xcursor(int r, int c)
Definition: fmenu.cpp:292
static int maxmenus
Definition: fmenu.cpp:186
#define diag(s)
Definition: fmenu.cpp:192
static int cexecute(const char *)
Definition: fmenu.cpp:641
static Menuitem * append()
static int ibmgetc(void)
Definition: fmenu.cpp:313
struct Menuitem Menuitem
#define NUL
Definition: fmenu.cpp:132
static void appendvar(int, const char *, const char *)
Definition: fmenu.cpp:365
static void clrscr(void)
Definition: fmenu.cpp:652
void hoc_execerror(const char *, const char *)
Definition: hoc.cpp:754
double hoc_getsymval(Psym *p)
Definition: getsym.cpp:143
void hoc_assignsym(Psym *p, double val)
Definition: getsym.cpp:150
void hoc_execstr(const char *cp)
Definition: getsym.cpp:158
Psym * hoc_getsym(const char *cp)
Definition: getsym.cpp:70
char buf[512]
Definition: init.cpp:13
void hoc_menu_cleanup(void)
Definition: fmenu.cpp:671
void free_arrayinfo(Arrayinfo *a)
Definition: hoc.cpp:652
#define getarg
Definition: hocdec.h:15
#define gargstr
Definition: hocdec.h:14
int ifarg(int)
Definition: code.cpp:1581
static int narg()
Definition: ivocvect.cpp:150
#define input(prompt, fmt, var)
Definition: matrix.h:368
#define i
Definition: md1redef.h:12
#define Sprintf
Definition: model.h:233
#define Strcpy
Definition: model.h:238
#define Printf
Definition: model.h:237
char * emalloc(unsigned n)
Definition: list.cpp:166
static unsigned row
Definition: nonlin.cpp:85
size_t p
#define plprint
Definition: redef.h:110
int hoc_returning
Definition: code.cpp:148
#define key
Definition: spt2queue.cpp:20
double symmin
Definition: fmenu.cpp:146
struct Menuitem * nextitem
Definition: fmenu.cpp:148
short type
Definition: fmenu.cpp:142
char * command
Definition: fmenu.cpp:144
double symmax
Definition: fmenu.cpp:147
Psym * psym
Definition: fmenu.cpp:145
short row
Definition: fmenu.cpp:141
char * prompt
Definition: fmenu.cpp:143
short col
Definition: fmenu.cpp:141
struct Menuitem * pprevious
Definition: fmenu.cpp:140
Definition: hocgetsym.h:6
Arrayinfo * arayinfo
Definition: hocgetsym.h:8