1 /* -*- tab-width: 4 -*-
2 *
3 * Electric(tm) VLSI Design System
4 *
5 * File: usrcom.c
6 * User interface tool: parameter parsing routines
7 * Written by: Steven M. Rubin, Static Free Software
8 *
9 * Copyright (c) 2000 Static Free Software.
10 *
11 * Electric(tm) is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
15 *
16 * Electric(tm) is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with Electric(tm); see the file COPYING. If not, write to
23 * the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
24 * Boston, Mass 02111-1307, USA.
25 *
26 * Static Free Software
27 * 4119 Alpine Road
28 * Portola Valley, California 94028
29 * info@staticfreesoft.com
30 */
31
32 #include "global.h"
33 #include "efunction.h"
34 #include "usr.h"
35 #include "drc.h"
36 #include "usredtec.h"
37 #include "tecart.h"
38
39 /****************************** PARSING CODE ******************************/
40
41 #define COMMANDS 01 /* user commands */
42 #define MACROS 02 /* macro names */
43 #define PORTS 04 /* ports names on a cell */
44 #define EXPORTS 010 /* exported ports on the node */
45 #define WINDOWS 020 /* window names */
46 #define HIGHLIGHTS 040 /* highlight names */
47 #define ARCS 0100 /* arc prototype names */
48
49 #define CELLS 0400 /* cell names */
50 #define PRIMS 01000 /* primitive node prototype names */
51 #define PURES 02000 /* pure-layer node prototype names */
52 #define LIBS 04000 /* library names */
53 #define LAYERS 010000 /* layer names */
54 #define POPUPS 020000 /* popup menu names */
55 #define CONSTRAINTS 040000 /* constraint solver names */
56 #define MBUTTONS 0100000 /* mouse button names */
57 #define VIEWS 0200000 /* view names (including "unknown") */
58 #define NODEFUN 0400000 /* node functions */
59 #define ARCFUN 01000000 /* arc functions */
60 #define EDTECSTUFF 036000000 /* technology edit parsing */
61 #define EDTECPORT 02000000 /* port connections in technology edit */
62 #define EDTECLAY 04000000 /* layer names from technology edit */
63 #define EDTECARC 06000000 /* arc names from technology edit */
64 #define EDTECNODE 010000000 /* node names from technology edit */
65 #define EDTECTECH 012000000 /* editable technologies for tech edit */
66 #define NETWORKS 0100000000 /* network names */
67 #define WORDSET 0200000000 /* the word "SET-MINIMUM-SIZE" */
68 #define WORDCLEAR 0400000000 /* the word "CLEAR-MINIMUM-SIZE" */
69 #define WORDNODE 01000000000 /* the word "NODE" */
70 #define WORDARC 02000000000 /* the word "ARC" */
71 #define WORDNEXT 04000000000 /* the word "NEXT-PROTO" */
72 #define WORDPREV 010000000000 /* the word "PREV-PROTO" */
73 #define WORDTHIS 020000000000 /* the word "THIS-PROTO" */
74
75 static INTBIG us_posbits, us_posswitch, us_possearch;
76 static INTBIG us_poslcommands; /* COMMANDS */
77 static INTBIG us_posmacrovar; /* MACROS */
78 static PORTPROTO *us_posports; /* PORTS */
79 static PORTEXPINST *us_posexports; /* EXPORTS */
80 static WINDOWPART *us_poswindow; /* WINDOWPARTS */
81 static INTBIG us_poshigh; /* HIGHLIGHTS */
82 static ARCPROTO *us_posarcs; /* ARCS */
83 static NODEPROTO *us_posnodeprotos; /* CELLS */
84 static NODEPROTO *us_posprims; /* PRIMS */
85 static LIBRARY *us_poslibs; /* LIBS */
86 static INTBIG us_poslayers; /* LAYERS */
87 static POPUPMENU *us_pospopupmenu; /* POPUPS */
88 static INTBIG us_posconstraint; /* CONSTRAINTS */
89 static INTBIG us_posmbuttons; /* MBUTTONS */
90 static VIEW *us_posviews; /* VIEWS */
91 static INTBIG us_posfunction; /* NODEFUN/ARCFUN */
92 static INTBIG us_posspecial; /* EDTECPORT */
93 static TECHNOLOGY *us_postechs; /* EDTECTECH */
94 static INTBIG us_postecedsequencepos; /* EDTECLAY */
95 static INTBIG us_postecedsequencecount; /* EDTECLAY */
96 static NODEPROTO **us_postecedsequence; /* EDTECLAY */
97
98 /* prototypes for local routines */
99 static INTBIG us_paramcommands(CHAR*, COMCOMP*[], CHAR);
100 static BOOLEAN us_topofgetproto(CHAR**);
101 static BOOLEAN us_topofarcs(CHAR**);
102 static BOOLEAN us_topofpures(CHAR**);
103 static BOOLEAN us_topofnodefun(CHAR**);
104 static BOOLEAN us_topofarcfun(CHAR**);
105 static BOOLEAN us_topofedtecport(CHAR**);
106 static BOOLEAN us_topofedtecslay(CHAR**);
107 static BOOLEAN us_topofedtecclay(CHAR**);
108 static BOOLEAN us_topofedtectech(CHAR**);
109 static BOOLEAN us_topofeditor(CHAR**);
110 static CHAR *us_nextparse(void);
111 static CHAR *us_nexteditor(void);
112 static INTBIG us_parambind(CHAR*, COMCOMP*[], CHAR);
113 static INTBIG us_parambindpop(CHAR*, COMCOMP*[], CHAR);
114 static INTBIG us_paramconstraintb(CHAR*, COMCOMP*[], CHAR);
115 static INTBIG us_paramconstrainta(CHAR*, COMCOMP*[], CHAR);
116 static INTBIG us_nextecho(CHAR*, COMCOMP*[], CHAR);
117 static INTBIG us_parammenusbp(CHAR*, COMCOMP*[], CHAR);
118 static INTBIG us_paramportep(CHAR*, COMCOMP*[], CHAR);
119 static INTBIG us_paramsize(CHAR*, COMCOMP*[], CHAR);
120 static INTBIG us_paramsedtecport(CHAR*, COMCOMP*[], CHAR);
121 static INTBIG us_nexttechnologyedlp(CHAR*, COMCOMP*[], CHAR);
122 static INTBIG us_paramtechnology(CHAR*, COMCOMP*[], CHAR);
123 static INTBIG us_paramtechnologyb(CHAR*, COMCOMP*[], CHAR);
124 static INTBIG us_paramtechnologya(CHAR*, COMCOMP*[], CHAR);
125 static INTBIG us_paramtelltoolb(CHAR*, COMCOMP*[], CHAR);
126 static INTBIG us_paramtelltoola(CHAR*, COMCOMP*[], CHAR);
127 static INTBIG us_paramvisiblelayers(CHAR*, COMCOMP*[], CHAR);
128 static INTBIG us_paramsedtecpcol(CHAR*, COMCOMP*[], CHAR);
129
130 /* parsing routines for a command or macro */
us_topofcommands(CHAR ** c)131 BOOLEAN us_topofcommands(CHAR **c)
132 {
133 us_poslcommands = 0;
134 us_posmacrovar = 0;
135 us_pospopupmenu = us_firstpopupmenu;
136 us_posbits = COMMANDS | MACROS | POPUPS;
137 return(TRUE);
138 }
139
us_paramcommands(CHAR * word,COMCOMP * arr[],CHAR breakc)140 INTBIG us_paramcommands(CHAR *word, COMCOMP *arr[], CHAR breakc)
141 {
142 REGISTER INTBIG i, count, ind;
143 CHAR *build[MAXPARS];
144 REGISTER VARIABLE *var;
145
146 if (*word == 0) return(0);
147
148 /* see if it is a normal command */
149 for(ind=0; us_lcommand[ind].name != 0; ind++)
150 if (namesame(word, us_lcommand[ind].name) == 0)
151 {
152 count = us_lcommand[ind].params;
153 for(i=0; i<count; i++) arr[i] = us_lcommand[ind].par[i];
154 return(count);
155 }
156
157 /* see if it is a macro */
158 var = us_getmacro(word);
159 if (var != NOVARIABLE && getlength(var) >= 3)
160 {
161 count = us_parsecommand(((CHAR **)var->addr)[2], build);
162 for(i=0; i<count; i++) arr[i] = (COMCOMP *)myatoi(build[i]);
163 return(count);
164 }
165 return(0);
166 }
167
168 /* parsing routines for a macro */
us_topofmacros(CHAR ** c)169 BOOLEAN us_topofmacros(CHAR **c)
170 {
171 us_posmacrovar = 0;
172 us_posbits = MACROS;
173 return(TRUE);
174 }
175
176 /* parsing routines for a popup menu */
us_topofpopupmenu(CHAR ** c)177 BOOLEAN us_topofpopupmenu(CHAR **c)
178 {
179 us_pospopupmenu = us_firstpopupmenu;
180 us_posbits = POPUPS;
181 return(TRUE);
182 }
183
184 /* parsing routines for a port on the current node */
us_topofports(CHAR ** c)185 BOOLEAN us_topofports(CHAR **c)
186 {
187 HIGHLIGHT high;
188 REGISTER VARIABLE *var;
189
190 us_posbits = PORTS;
191 var = getvalkey((INTBIG)us_tool, VTOOL, VSTRING|VISARRAY, us_highlightedkey);
192 if (var == NOVARIABLE) return(FALSE);
193 (void)us_makehighlight(((CHAR **)var->addr)[0], &high);
194
195 if ((high.status&HIGHFROM) != 0 && high.fromgeom != NOGEOM &&
196 high.fromgeom->entryisnode)
197 us_posports = high.fromgeom->entryaddr.ni->proto->firstportproto; else
198 us_posports = NOPORTPROTO;
199 if (us_posports == NOPORTPROTO) return(FALSE);
200 return(TRUE);
201 }
202
203 /* parsing routines for an export on the current cell */
us_topofcports(CHAR ** c)204 BOOLEAN us_topofcports(CHAR **c)
205 {
206 REGISTER NODEPROTO *np;
207
208 np = getcurcell();
209 us_posbits = PORTS;
210 if (np == NONODEPROTO) us_posports = NOPORTPROTO; else
211 us_posports = np->firstportproto;
212 if (us_posports == NOPORTPROTO) return(FALSE);
213 return(TRUE);
214 }
215
216 /* parsing routines for an export on the current node */
us_topofexpports(CHAR ** c)217 BOOLEAN us_topofexpports(CHAR **c)
218 {
219 HIGHLIGHT high;
220 REGISTER VARIABLE *var;
221
222 us_posbits = EXPORTS;
223 var = getvalkey((INTBIG)us_tool, VTOOL, VSTRING|VISARRAY, us_highlightedkey);
224 if (var == NOVARIABLE) return(FALSE);
225 (void)us_makehighlight(((CHAR **)var->addr)[0], &high);
226 us_posexports = NOPORTEXPINST;
227 if ((high.status&HIGHFROM) != 0 && high.fromgeom != NOGEOM &&
228 high.fromgeom->entryisnode)
229 us_posexports = high.fromgeom->entryaddr.ni->firstportexpinst;
230 if (us_posexports == NOPORTEXPINST) return(FALSE);
231 return(TRUE);
232 }
233
234 /* parsing routines for a window */
us_topofwindows(CHAR ** c)235 BOOLEAN us_topofwindows(CHAR **c)
236 {
237 us_posbits = WINDOWS;
238 us_poswindow = el_topwindowpart;
239 return(TRUE);
240 }
241
242 /* parsing routines for a layer name */
us_topoflayers(CHAR ** c)243 BOOLEAN us_topoflayers(CHAR **c)
244 {
245 us_posbits = LAYERS;
246 us_poslayers = el_curtech->layercount - 1;
247 return(TRUE);
248 }
249
250 /* parsing routines for a highlight */
us_topofhighlight(CHAR ** c)251 BOOLEAN us_topofhighlight(CHAR **c)
252 {
253 us_posbits = HIGHLIGHTS;
254 us_poshigh = 0;
255 return(TRUE);
256 }
257
258 /* parsing routines for a node or arc prototype */
us_topofarcnodes(CHAR ** c)259 BOOLEAN us_topofarcnodes(CHAR **c)
260 {
261 REGISTER CHAR *pt;
262 REGISTER TECHNOLOGY *t;
263
264 us_posbits = ARCS | CELLS | PRIMS;
265 us_posnodeprotos = el_curlib->firstnodeproto;
266 us_posprims = el_curtech->firstnodeproto;
267 us_posarcs = el_curtech->firstarcproto;
268
269 /* see if a technology specification was given */
270 for(pt = *c; *pt != 0; pt++) if (*pt == ':') break;
271 if (*pt == ':')
272 {
273 *pt = 0;
274 t = gettechnology(*c);
275 *pt++ = ':';
276 if (t != NOTECHNOLOGY)
277 {
278 *c = pt;
279 us_posbits = ARCS | PRIMS;
280 us_posprims = t->firstnodeproto;
281 us_posarcs = t->firstarcproto;
282 }
283 }
284 return(TRUE);
285 }
286
287 /* parsing routines for a "getproto" command */
us_topofgetproto(CHAR ** c)288 BOOLEAN us_topofgetproto(CHAR **c)
289 {
290 (void)us_topofarcnodes(c);
291 us_posbits |= WORDNODE | WORDARC | WORDNEXT | WORDPREV | WORDTHIS;
292 return(TRUE);
293 }
294
295 /* parsing routines for a node prototype */
us_topofnodes(CHAR ** c)296 BOOLEAN us_topofnodes(CHAR **c)
297 {
298 REGISTER BOOLEAN i;
299
300 i = us_topofarcnodes(c);
301 us_posbits &= ~ARCS;
302 return(i);
303 }
304
305 /* parsing routines for a cell */
us_topofcells(CHAR ** c)306 BOOLEAN us_topofcells(CHAR **c)
307 {
308 REGISTER CHAR *pt;
309 REGISTER LIBRARY *lib;
310
311 /* by default, assume the current library */
312 us_posbits = CELLS;
313 us_posnodeprotos = el_curlib->firstnodeproto;
314
315 /* see if a library specification was given */
316 for(pt = *c; *pt != 0; pt++) if (*pt == ':') break;
317 if (*pt == ':')
318 {
319 *pt = 0;
320 lib = getlibrary(*c);
321 *pt++ = ':';
322 if (lib != NOLIBRARY)
323 {
324 *c = pt;
325 us_posnodeprotos = lib->firstnodeproto;
326 }
327 }
328 return(TRUE);
329 }
330
331 /* parsing routines for a primitives nodeproto */
us_topofprims(CHAR ** c)332 BOOLEAN us_topofprims(CHAR **c)
333 {
334 REGISTER CHAR *pt;
335 REGISTER TECHNOLOGY *t;
336
337 /* by default, assume the current technology */
338 us_posbits = PRIMS;
339 us_posprims = el_curtech->firstnodeproto;
340
341 /* see if a technology specification was given */
342 for(pt = *c; *pt != 0; pt++) if (*pt == ':') break;
343 if (*pt == ':')
344 {
345 *pt = 0;
346 t = gettechnology(*c);
347 *pt++ = ':';
348 if (t != NOTECHNOLOGY)
349 {
350 *c = pt;
351 us_posprims = t->firstnodeproto;
352 }
353 }
354 return(TRUE);
355 }
356
357 /* parsing routines for a pure-layer nodeproto */
us_topofpures(CHAR ** c)358 BOOLEAN us_topofpures(CHAR **c)
359 {
360 us_posbits = PURES;
361 us_posprims = el_curtech->firstnodeproto;
362 return(TRUE);
363 }
364
365 /* parsing routines for an arc prototype */
us_topofarcs(CHAR ** c)366 BOOLEAN us_topofarcs(CHAR **c)
367 {
368 REGISTER CHAR *pt;
369 REGISTER TECHNOLOGY *t;
370
371 /* by default, assume the current technology */
372 us_posbits = ARCS;
373 us_posarcs = el_curtech->firstarcproto;
374
375 /* see if a technology specification was given */
376 for(pt = *c; *pt != 0; pt++) if (*pt == ':') break;
377 if (*pt == ':')
378 {
379 *pt = 0;
380 t = gettechnology(*c);
381 *pt++ = ':';
382 if (t != NOTECHNOLOGY)
383 {
384 *c = pt;
385 us_posarcs = t->firstarcproto;
386 }
387 }
388 return(TRUE);
389 }
390
391 /* parsing routines for a constraint solver */
us_topofconstraints(CHAR ** c)392 BOOLEAN us_topofconstraints(CHAR **c)
393 {
394 us_posbits = CONSTRAINTS;
395 us_posconstraint = 0;
396 return(TRUE);
397 }
398
399 /* parsing routines for a mouse button */
us_topofmbuttons(CHAR ** c)400 BOOLEAN us_topofmbuttons(CHAR **c)
401 {
402 us_posbits = MBUTTONS;
403 us_posmbuttons = 0;
404 return(TRUE);
405 }
406
407 /* parsing routines for a node function name */
us_topofnodefun(CHAR ** c)408 BOOLEAN us_topofnodefun(CHAR **c)
409 {
410 us_posbits = NODEFUN;
411 us_posfunction = 0;
412 return(TRUE);
413 }
414
415 /* parsing routines for an arc function name */
us_topofarcfun(CHAR ** c)416 BOOLEAN us_topofarcfun(CHAR **c)
417 {
418 us_posbits = ARCFUN;
419 us_posfunction = 0;
420 return(TRUE);
421 }
422
423 /* parsing routines for port information when technology editing */
us_topofedtecport(CHAR ** c)424 BOOLEAN us_topofedtecport(CHAR **c)
425 {
426 us_posbits = EDTECPORT;
427 us_posnodeprotos = el_curlib->firstnodeproto;
428 us_posspecial = 0;
429 return(TRUE);
430 }
431
432 /* parsing routines for a layer name when technology editing */
us_topofedteclay(CHAR ** c)433 BOOLEAN us_topofedteclay(CHAR **c)
434 {
435 LIBRARY *liblist[1];
436
437 us_posbits = EDTECLAY;
438 us_postecedsequencepos = 0;
439 liblist[0] = el_curlib;
440 us_postecedsequencecount = us_teceditfindsequence(liblist, 1, x_("layer-"),
441 x_("EDTEC_layersequence"), &us_postecedsequence);
442 return(TRUE);
443 }
444
445 /*
446 * parsing routines for a layer name or "SET-MINIMUM-SIZE",
447 * when technology editing
448 */
us_topofedtecslay(CHAR ** c)449 BOOLEAN us_topofedtecslay(CHAR **c)
450 {
451 LIBRARY *liblist[1];
452
453 us_posbits = EDTECLAY|WORDSET;
454 us_postecedsequencepos = 0;
455 liblist[0] = el_curlib;
456 us_postecedsequencecount = us_teceditfindsequence(liblist, 1, x_("layer-"),
457 x_("EDTEC_layersequence"), &us_postecedsequence);
458 return(TRUE);
459 }
460
461 /*
462 * parsing routines for a layer name or "CLEAR-MINIMUM-SIZE",
463 * when technology editing
464 */
us_topofedtecclay(CHAR ** c)465 BOOLEAN us_topofedtecclay(CHAR **c)
466 {
467 LIBRARY *liblist[1];
468
469 us_posbits = EDTECLAY|WORDCLEAR;
470 us_postecedsequencepos = 0;
471 liblist[0] = el_curlib;
472 us_postecedsequencecount = us_teceditfindsequence(liblist, 1, x_("layer-"),
473 x_("EDTEC_layersequence"), &us_postecedsequence);
474 return(TRUE);
475 }
476
477 /* parsing routines for an arc name when technology editing */
us_topofedtecarc(CHAR ** c)478 BOOLEAN us_topofedtecarc(CHAR **c)
479 {
480 us_posbits = EDTECARC;
481 us_posnodeprotos = el_curlib->firstnodeproto;
482 return(TRUE);
483 }
484
485 /* parsing routines for a node name when technology editing */
us_topofedtecnode(CHAR ** c)486 BOOLEAN us_topofedtecnode(CHAR **c)
487 {
488 us_posbits = EDTECNODE;
489 us_posnodeprotos = el_curlib->firstnodeproto;
490 return(TRUE);
491 }
492
493 /* parsing routines for editable technology name when tech editing */
us_topofedtectech(CHAR ** c)494 BOOLEAN us_topofedtectech(CHAR **c)
495 {
496 us_posbits = EDTECTECH;
497 us_postechs = el_technologies;
498 return(TRUE);
499 }
500
501 /* parsing routines for a nodeproto/arcproto/library/macro/portproto */
us_topofallthings(CHAR ** c)502 BOOLEAN us_topofallthings(CHAR **c)
503 {
504 REGISTER NODEPROTO *np;
505 REGISTER CHAR *pt;
506 REGISTER LIBRARY *lib;
507
508 us_posbits = PRIMS | CELLS | ARCS | LIBS | MACROS | PORTS | POPUPS | CONSTRAINTS | NETWORKS;
509 us_posprims = el_curtech->firstnodeproto;
510 us_posnodeprotos = el_curlib->firstnodeproto;
511 us_posarcs = el_curtech->firstarcproto;
512 us_poslibs = el_curlib;
513 us_posmacrovar = 0;
514 us_pospopupmenu = us_firstpopupmenu;
515 us_posconstraint = 0;
516 np = getcurcell();
517 if (np != NONODEPROTO) us_posports = np->firstportproto; else
518 {
519 us_posports = NOPORTPROTO;
520 us_posbits &= ~PORTS;
521 }
522 (void)topofnets(c);
523
524 /* see if a library specification was given */
525 for(pt = *c; *pt != 0; pt++) if (*pt == ':') break;
526 if (*pt == ':')
527 {
528 *pt = 0;
529 lib = getlibrary(*c);
530 *pt++ = ':';
531 if (lib != NOLIBRARY)
532 {
533 *c = pt;
534 us_posnodeprotos = lib->firstnodeproto;
535 }
536 }
537 return(TRUE);
538 }
539
us_nextparse(void)540 CHAR *us_nextparse(void)
541 {
542 CHAR *nextname;
543 INTBIG unimportant, funct;
544 INTBIG bits;
545 REGISTER TECHNOLOGY *tech;
546 REGISTER void *infstr;
547
548 if ((us_posbits&COMMANDS) != 0)
549 {
550 if (us_poslcommands < us_longcount) return(us_lcommand[us_poslcommands++].name);
551 us_posbits &= ~COMMANDS;
552 }
553 if ((us_posbits&MACROS) != 0)
554 {
555 while (us_posmacrovar < us_tool->numvar)
556 {
557 nextname = makename(us_tool->firstvar[us_posmacrovar].key);
558 us_posmacrovar++;
559 if (namesamen(nextname, x_("USER_macro_"), 11) == 0) return(&nextname[11]);
560 }
561 us_posbits &= ~MACROS;
562 }
563 if ((us_posbits&PORTS) != 0)
564 {
565 if (us_posports != NOPORTPROTO)
566 {
567 nextname = us_posports->protoname;
568 us_posports = us_posports->nextportproto;
569 return(nextname);
570 }
571 us_posbits &= ~PORTS;
572 }
573 if ((us_posbits&EXPORTS) != 0)
574 {
575 if (us_posexports != NOPORTEXPINST)
576 {
577 nextname = us_posexports->exportproto->protoname;
578 us_posexports = us_posexports->nextportexpinst;
579 return(nextname);
580 }
581 us_posbits &= ~EXPORTS;
582 }
583 if ((us_posbits&WINDOWS) != 0)
584 {
585 if (us_poswindow != NOWINDOWPART)
586 {
587 infstr = initinfstr();
588 addstringtoinfstr(infstr, describenodeproto(us_poswindow->curnodeproto));
589 addtoinfstr(infstr, '(');
590 addstringtoinfstr(infstr, us_poswindow->location);
591 addtoinfstr(infstr, ')');
592 us_poswindow = us_poswindow->nextwindowpart;
593 return(returninfstr(infstr));
594 }
595 us_posbits &= ~WINDOWS;
596 }
597 if ((us_posbits&HIGHLIGHTS) != 0)
598 {
599 while (us_poshigh < us_tool->numvar)
600 {
601 nextname = (CHAR *)us_tool->firstvar[us_poshigh].key;
602 us_poshigh++;
603 if (namesamen(nextname, x_("USER_highlight_"), 15) == 0) return(&nextname[15]);
604 }
605 us_posbits &= ~HIGHLIGHTS;
606 }
607 if ((us_posbits&ARCS) != 0)
608 {
609 if (us_posarcs != NOARCPROTO)
610 {
611 nextname = describearcproto(us_posarcs);
612 us_posarcs = us_posarcs->nextarcproto;
613 return(nextname);
614 }
615 us_posbits &= ~ARCS;
616 }
617 if ((us_posbits&CELLS) != 0)
618 {
619 if (us_posnodeprotos != NONODEPROTO)
620 {
621 nextname = describenodeproto(us_posnodeprotos);
622 us_posnodeprotos = us_posnodeprotos->nextnodeproto;
623 return(nextname);
624 }
625 us_posbits &= ~CELLS;
626 }
627 if ((us_posbits&PRIMS) != 0)
628 {
629 if (us_posprims != NONODEPROTO)
630 {
631 nextname = us_posprims->protoname;
632 us_posprims = us_posprims->nextnodeproto;
633 return(nextname);
634 }
635 us_posbits &= ~PRIMS;
636 }
637 if ((us_posbits&PURES) != 0)
638 {
639 while (us_posprims != NONODEPROTO)
640 {
641 nextname = us_posprims->protoname;
642 funct = (us_posprims->userbits&NFUNCTION)>>NFUNCTIONSH;
643 bits = us_posprims->userbits & NNOTUSED;
644 us_posprims = us_posprims->nextnodeproto;
645 if (bits != 0) continue;
646 if (funct == NPNODE) return(nextname);
647 }
648 us_posbits &= ~PURES;
649 }
650 if ((us_posbits&LIBS) != 0)
651 {
652 if (us_poslibs != NOLIBRARY)
653 {
654 nextname = us_poslibs->libname;
655 us_poslibs = us_poslibs->nextlibrary;
656 return(nextname);
657 }
658 us_posbits &= ~LIBS;
659 }
660 if ((us_posbits&LAYERS) != 0)
661 {
662 if (us_poslayers >= 0)
663 {
664 infstr = initinfstr();
665 addstringtoinfstr(infstr, us_layerletters(el_curtech, us_poslayers));
666 addtoinfstr(infstr, '(');
667 addstringtoinfstr(infstr, layername(el_curtech, us_poslayers));
668 addtoinfstr(infstr, ')');
669 us_poslayers--;
670 return(returninfstr(infstr));
671 }
672 us_posbits &= ~LAYERS;
673 }
674 if ((us_posbits&POPUPS) != 0)
675 {
676 if (us_pospopupmenu != NOPOPUPMENU)
677 {
678 nextname = us_pospopupmenu->name;
679 us_pospopupmenu = us_pospopupmenu->nextpopupmenu;
680 return(nextname);
681 }
682 us_posbits &= ~POPUPS;
683 }
684 if ((us_posbits&CONSTRAINTS) != 0)
685 {
686 if (el_constraints[us_posconstraint].conname != 0)
687 {
688 nextname = el_constraints[us_posconstraint].conname;
689 us_posconstraint++;
690 return(nextname);
691 }
692 us_posbits &= ~CONSTRAINTS;
693 }
694 if ((us_posbits&MBUTTONS) != 0)
695 {
696 if (us_posmbuttons < buttoncount())
697 {
698 nextname = buttonname(us_posmbuttons, &unimportant);
699 us_posmbuttons++;
700 return(nextname);
701 }
702 us_posbits &= ~MBUTTONS;
703 }
704 if ((us_posbits&VIEWS) != 0)
705 {
706 if (us_posviews == (VIEW *)0)
707 {
708 us_posviews = el_views;
709 return(x_("unknown"));
710 }
711 if (us_posviews != NOVIEW)
712 {
713 nextname = us_posviews->viewname;
714 us_posviews = us_posviews->nextview;
715 return(nextname);
716 }
717 us_posbits &= ~VIEWS;
718 }
719 if ((us_posbits&NODEFUN) != 0)
720 {
721 nextname = nodefunctionname(us_posfunction, NONODEINST);
722 us_posfunction++;
723 if (*nextname != 0) return(nextname);
724 us_posbits &= ~NODEFUN;
725 }
726 if ((us_posbits&ARCFUN) != 0)
727 {
728 nextname = arcfunctionname(us_posfunction);
729 us_posfunction++;
730 if (*nextname != 0) return(nextname);
731 us_posbits &= ~ARCFUN;
732 }
733 if ((us_posbits&EDTECSTUFF) == EDTECPORT)
734 {
735 while (us_posnodeprotos != NONODEPROTO)
736 {
737 nextname = us_posnodeprotos->protoname;
738 us_posnodeprotos = us_posnodeprotos->nextnodeproto;
739 if (namesamen(nextname, x_("arc-"), 4) == 0) return(&nextname[4]);
740 }
741 switch (us_posspecial++)
742 {
743 case 0: return(x_("PORT-ANGLE"));
744 case 1: return(x_("PORT-ANGLE-RANGE"));
745 }
746 us_posbits &= ~EDTECSTUFF;
747 }
748 if ((us_posbits&EDTECSTUFF) == EDTECLAY)
749 {
750 if (us_postecedsequencepos < us_postecedsequencecount)
751 {
752 nextname = us_postecedsequence[us_postecedsequencepos]->protoname;
753 us_postecedsequencepos++;
754 return(&nextname[6]);
755 }
756 efree((CHAR *)us_postecedsequence);
757 us_posbits &= ~EDTECSTUFF;
758 }
759 if ((us_posbits&EDTECSTUFF) == EDTECARC)
760 {
761 while (us_posnodeprotos != NONODEPROTO)
762 {
763 nextname = us_posnodeprotos->protoname;
764 us_posnodeprotos = us_posnodeprotos->nextnodeproto;
765 if (namesamen(nextname, x_("arc-"), 4) == 0) return(&nextname[4]);
766 }
767 us_posbits &= ~EDTECSTUFF;
768 }
769 if ((us_posbits&EDTECSTUFF) == EDTECNODE)
770 {
771 while (us_posnodeprotos != NONODEPROTO)
772 {
773 nextname = us_posnodeprotos->protoname;
774 us_posnodeprotos = us_posnodeprotos->nextnodeproto;
775 if (namesamen(nextname, x_("node-"), 5) == 0) return(&nextname[5]);
776 }
777 us_posbits &= ~EDTECSTUFF;
778 }
779 if ((us_posbits&EDTECSTUFF) == EDTECTECH)
780 {
781 while (us_postechs != NOTECHNOLOGY)
782 {
783 tech = us_postechs;
784 us_postechs = us_postechs->nexttechnology;
785 if ((tech->userbits&NONSTANDARD) == 0) return(tech->techname);
786 }
787 us_posbits &= ~EDTECSTUFF;
788 }
789 if ((us_posbits&NETWORKS) != 0)
790 {
791 nextname = nextnets();
792 if (nextname != 0) return(nextname);
793 us_posbits &= ~NETWORKS;
794 }
795 if ((us_posbits&WORDSET) != 0)
796 {
797 us_posbits &= ~WORDSET;
798 return(x_("SET-MINIMUM-SIZE"));
799 }
800 if ((us_posbits&WORDCLEAR) != 0)
801 {
802 us_posbits &= ~WORDCLEAR;
803 return(x_("CLEAR-MINIMUM-SIZE"));
804 }
805 if ((us_posbits&WORDNODE) != 0)
806 {
807 us_posbits &= ~WORDNODE;
808 return(x_("NODE"));
809 }
810 if ((us_posbits&WORDARC) != 0)
811 {
812 us_posbits &= ~WORDARC;
813 return(x_("ARC"));
814 }
815 if ((us_posbits&WORDNEXT) != 0)
816 {
817 us_posbits &= ~WORDNEXT;
818 return(x_("NEXT-PROTO"));
819 }
820 if ((us_posbits&WORDPREV) != 0)
821 {
822 us_posbits &= ~WORDPREV;
823 return(x_("PREV-PROTO"));
824 }
825 if ((us_posbits&WORDTHIS) != 0)
826 {
827 us_posbits &= ~WORDTHIS;
828 return(x_("THIS-PROTO"));
829 }
830 return(0);
831 }
832
833 /* parsing routines for a var */
us_topofvars(CHAR ** c)834 BOOLEAN us_topofvars(CHAR **c)
835 {
836 REGISTER CHAR *pp, save, *zap;
837 REGISTER INTBIG i, j;
838 BOOLEAN res;
839 CHAR *qual;
840 INTBIG objaddr, objtype;
841 REGISTER VARIABLE *var;
842
843 /* ignore any "$" at the start of the variable */
844 pp = *c;
845 for(i = estrlen(pp)-1; i >= 0; i--) if (pp[i] == '$') break;
846 if (pp[i] == '$')
847 {
848 /* see if the variable is in parenthesis (and is complete) */
849 if (pp[++i] == '(')
850 {
851 i++;
852 for(j=i; pp[j] != 0; j++) if (pp[j] == ')') return(FALSE);
853 }
854 pp = &pp[i];
855 }
856
857 /* look for point where ambiguity may exist */
858 zap = pp;
859 for(i = estrlen(pp)-1; i >= 0; i--) if (pp[i] == '.' || pp[i] == ':')
860 {
861 *c = &pp[i+1];
862 zap = &pp[i];
863
864 /* if this is a ":" construct, special case it */
865 if (*zap == ':')
866 {
867 if (namesamen(pp, x_("technology"), i) == 0 && i >= 1)
868 {
869 us_posswitch = -2; return(topoftechs(c));
870 }
871 if (namesamen(pp, x_("library"), i) == 0 && i >= 1)
872 {
873 us_posswitch = -3; return(topoflibs(c));
874 }
875 if (namesamen(pp, x_("tool"), i) == 0 && i >= 2)
876 {
877 us_posswitch = -4; return(topoftools(c));
878 }
879 if (namesamen(pp, x_("arc"), i) == 0 && i >= 2)
880 {
881 us_posswitch = -5; return(us_topofarcs(c));
882 }
883 if (namesamen(pp, x_("node"), i) == 0 && i >= 1)
884 {
885 us_posswitch = -6; return(us_topofnodes(c));
886 }
887 if (namesamen(pp, x_("primitive"), i) == 0 && i >= 1)
888 {
889 us_posswitch = -7; return(us_topofprims(c));
890 }
891 if (namesamen(pp, x_("cell"), i) == 0 && i >= 1)
892 {
893 us_posswitch = -8; return(us_topofcells(c));
894 }
895 if (namesamen(pp, x_("view"), i) == 0 && i >= 1)
896 {
897 us_posswitch = -10; return(topofviews(c));
898 }
899 if (namesamen(pp, x_("net"), i) == 0 && i >= 2)
900 {
901 us_posswitch = -11; return(topofnets(c));
902 }
903 if (namesamen(pp, x_("window"), i) == 0 && i >= 1)
904 {
905 us_posswitch = -12; return(us_topofwindows(c));
906 }
907 }
908 break;
909 }
910
911 /* now determine the context of this point */
912 save = *zap; *zap = 0;
913 res = us_evaluatevariable(pp, &objaddr, &objtype, &qual);
914 if (!res && *qual != 0)
915 {
916 var = getval(objaddr, objtype, -1, qual);
917 if (var != NOVARIABLE)
918 {
919 objaddr = var->addr; objtype = var->type;
920 } else res = TRUE;
921 }
922 *zap = save;
923
924 /* initialize lists and return the description */
925 if (res) us_posswitch = VINTEGER; else
926 {
927 us_posswitch = objtype & VTYPE;
928 if (us_posswitch != VUNKNOWN && us_posswitch != VINTEGER &&
929 us_posswitch != VADDRESS && us_posswitch != VCHAR &&
930 us_posswitch != VSTRING && us_posswitch != VFLOAT &&
931 us_posswitch != VDOUBLE && us_posswitch != VFRACT &&
932 us_posswitch != VSHORT && us_posswitch != VBOOLEAN &&
933 us_posswitch != VGENERAL)
934 us_possearch = initobjlist(objaddr, objtype, FALSE);
935 }
936 return(TRUE);
937 }
us_nextvars(void)938 CHAR *us_nextvars(void)
939 {
940 VARIABLE *var;
941
942 switch (us_posswitch)
943 {
944 case -2: return(nexttechs());
945 case -3: return(nextlibs());
946 case -4: return(nexttools());
947 case -10: return(nextviews());
948 case -11: return(nextnets());
949 case -5:
950 case -6:
951 case -7:
952 case -8:
953 case -12: return(us_nextparse());
954 case VNODEINST:
955 case VNODEPROTO:
956 case VPORTARCINST:
957 case VPORTEXPINST:
958 case VPORTPROTO:
959 case VARCINST:
960 case VARCPROTO:
961 case VGEOM:
962 case VLIBRARY:
963 case VTECHNOLOGY:
964 case VTOOL:
965 case VRTNODE:
966 case VNETWORK:
967 case VVIEW:
968 case VWINDOWPART:
969 case VGRAPHICS:
970 case VCONSTRAINT:
971 case VWINDOWFRAME:
972 case VPOLYGON:
973 return(nextobjectlist(&var, us_possearch));
974 }
975 return(0);
976 }
977
us_topofeditor(CHAR ** c)978 BOOLEAN us_topofeditor(CHAR **c)
979 {
980 us_possearch = 0;
981 return(TRUE);
982 }
983
us_nexteditor(void)984 CHAR *us_nexteditor(void)
985 {
986 REGISTER CHAR *nextname;
987
988 nextname = us_editortable[us_possearch].editorname;
989 us_possearch++;
990 return(nextname);
991 }
992
993 /****************************** PARSING TABLES ******************************/
994
995 /* common parsing tables */
996 static KEYWORD onoffopt[] =
997 {
998 {x_("on"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
999 {x_("off"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1000 TERMKEY
1001 };
1002 static KEYWORD yesnoopt[] =
1003 {
1004 {x_("yes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1005 {x_("no"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1006 TERMKEY
1007 };
1008 static KEYWORD yesnoalwaysopt[] =
1009 {
1010 {x_("yes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1011 {x_("no"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1012 {x_("always"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1013 TERMKEY
1014 };
1015 COMCOMP us_yesnop = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1016 0, x_(" \t"), M_("yes or no"), 0};
1017 COMCOMP us_noyesp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1018 0, x_(" \t"), M_("yes or no"), 0};
1019 COMCOMP us_noyesalwaysp = {yesnoalwaysopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1020 0, x_(" \t"), M_("yes or no"), 0};
1021 COMCOMP us_artlookp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1022 0, x_(" \t"), M_("artwork look"), 0};
1023 COMCOMP us_purelayerp = {NOKEYWORD, us_topofpures, us_nextparse, NOPARAMS,
1024 0, x_(" \t"), M_("primitive name"), 0};
1025
1026 /* for "arc" command */
1027 COMCOMP us_arcnamep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1028 INPUTOPT, x_(" \t"), M_("local arc name"), 0};
1029 static COMCOMP arcpropp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1030 INPUTOPT, x_(" \t"), M_("arc constraints"), 0};
1031 static KEYWORD arcpropaopt[] =
1032 {
1033 {x_("add"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1034 TERMKEY
1035 };
1036 static COMCOMP arcpropap = {arcpropaopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1037 0, x_(" \t"), M_("should this constraint replace or augment others"), 0};
1038 static KEYWORD arccurveiopt[] =
1039 {
1040 {x_("interactive"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1041 TERMKEY
1042 };
1043 static COMCOMP arccurveip = {arccurveiopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1044 0, x_(" \t"), M_("should this curvature be done interactively"), 0};
1045 static KEYWORD arcnotopt[] =
1046 {
1047 {x_("manhattan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1048 {x_("fixed-angle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1049 {x_("rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1050 {x_("slide"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1051 {x_("temp-rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1052 {x_("directional"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1053 {x_("negated"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1054 {x_("ends-extend"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1055 {x_("center"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1056 {x_("curve"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1057 {x_("constraint"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1058 {x_("skip-tail"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1059 {x_("skip-head"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1060 {x_("name"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1061 TERMKEY
1062 };
1063 COMCOMP us_arcnotp = {arcnotopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1064 INPUTOPT, x_(" \t"), M_("arc style parameter to negate"), 0};
1065 static KEYWORD arctogopt[] =
1066 {
1067 {x_("fixed-angle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1068 {x_("rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1069 {x_("slide"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1070 {x_("directional"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1071 {x_("negated"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1072 {x_("ends-extend"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1073 {x_("skip-tail"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1074 {x_("skip-head"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1075 TERMKEY
1076 };
1077 COMCOMP us_arctogp = {arctogopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1078 INPUTOPT, x_(" \t"), M_("arc style parameter to toggle"), 0};
1079 static KEYWORD arcopt[] =
1080 {
1081 {x_("manhattan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1082 {x_("fixed-angle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1083 {x_("rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1084 {x_("slide"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1085 {x_("temp-rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1086 {x_("directional"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1087 {x_("negated"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1088 {x_("ends-extend"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1089 {x_("skip-head"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1090 {x_("skip-tail"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1091 {x_("center"), 1,{&arccurveip,NOKEY,NOKEY,NOKEY,NOKEY}},
1092 {x_("curve"), 1,{&arccurveip,NOKEY,NOKEY,NOKEY,NOKEY}},
1093 {x_("constraint"), 2,{&arcpropp,&arcpropap,NOKEY,NOKEY,NOKEY}},
1094 {x_("name"), 1,{&us_arcnamep,NOKEY,NOKEY,NOKEY,NOKEY}},
1095 {x_("not"), 1,{&us_arcnotp,NOKEY,NOKEY,NOKEY,NOKEY}},
1096 {x_("toggle"), 1,{&us_arctogp,NOKEY,NOKEY,NOKEY,NOKEY}},
1097 {x_("reverse"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1098 {x_("shorten"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1099 TERMKEY
1100 };
1101 COMCOMP us_arcp = {arcopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1102 0, x_(" \t"), M_("arc style argument"), 0};
1103
1104 /* for "array" command */
1105 COMCOMP us_arrayxp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1106 0, x_(" \t"), M_("X array extent (or 'file' for array file)"), 0};
1107 static COMCOMP arrayyp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1108 0, x_(" \t"), M_("Y array extent"), 0};
1109 static COMCOMP arrayxop = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1110 0, x_(" \t"), M_("X overlap distance"), 0};
1111 static COMCOMP arrayyop = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1112 0, x_(" \t"), M_("Y overlap distance"), 0};
1113 static KEYWORD arrayswitchopt[] =
1114 {
1115 {x_("no-names"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1116 {x_("diagonal"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1117 {x_("only-drc-valid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1118 TERMKEY
1119 };
1120 static COMCOMP arrayswitchp = {arrayswitchopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1121 0, x_(" \t"), M_("array option switch"), M_("use names")};
1122
1123 /* for "bind" command */
1124 extern COMCOMP us_userp;
us_parambind(CHAR * i,COMCOMP * j[],CHAR c)1125 INTBIG us_parambind(CHAR *i, COMCOMP *j[], CHAR c)
1126 { j[0] = &us_userp; return(1);}
1127 COMCOMP us_bindkeyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, us_parambind,
1128 INPUTOPT, x_(" \t"), M_("key to bind"), 0};
1129 static COMCOMP bindmenugp = {NOKEYWORD, us_topofnodes, us_nextparse, NOPARAMS,
1130 INPUTOPT, x_(" \t"), M_("glyph to use for menu display"), 0};
1131 static COMCOMP bindmenump = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1132 INPUTOPT, x_(" \t"), M_("message to place in menu display"), 0};
1133 COMCOMP us_bindmenuxp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,us_parambind,
1134 0, x_(" \t"), M_("column of menu to bind"), 0};
1135 COMCOMP us_bindmenuryp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1136 0, x_(" \t"), M_("row of menu to bind"), 0};
1137 static KEYWORD bindmenuxpopt[] =
1138 {
1139 {x_("glyph"), 2,{&bindmenugp,&us_bindmenuryp,NOKEY,NOKEY,NOKEY}},
1140 {x_("message"), 2,{&bindmenump,&us_bindmenuryp,NOKEY,NOKEY,NOKEY}},
1141 {x_("background"), 2,{&bindmenump,&us_bindmenuryp,NOKEY,NOKEY,NOKEY}},
1142 TERMKEY
1143 };
1144 static COMCOMP bindmenuyp = {bindmenuxpopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1145 INPUTOPT, x_(" \t"), M_("row of menu to bind or 'glyph/message' specification"), 0};
1146 COMCOMP us_bindbuttonp = {NOKEYWORD,us_topofmbuttons,us_nextparse,us_parambind,
1147 INPUTOPT, x_(" \t"), M_("mouse button to bind"), 0};
1148 COMCOMP us_bindpoprep = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1149 0, x_(" \t"), M_("entry in popup menu to bind"), 0};
1150 static KEYWORD bindpopepopt[] =
1151 {
1152 {x_("message"), 2,{&bindmenump,&us_bindpoprep,NOKEY,NOKEY,NOKEY}},
1153 TERMKEY
1154 };
1155 static COMCOMP bindpopep = {bindpopepopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1156 0, x_(" \t"), M_("entry in popup menu to bind or 'message' specification"), 0};
us_parambindpop(CHAR * i,COMCOMP * j[],CHAR c)1157 INTBIG us_parambindpop(CHAR *i, COMCOMP *j[], CHAR c)
1158 { j[0] = &bindpopep; j[1] = &us_userp; return(2);}
1159 COMCOMP us_bindpopnp = {NOKEYWORD, us_topofpopupmenu, us_nextparse,
1160 us_parambindpop, INPUTOPT, x_(" \t"), M_("popup menu to bind"), 0};
1161 static KEYWORD bindsetopt[] =
1162 {
1163 {x_("button"), 1,{&us_bindbuttonp,NOKEY,NOKEY,NOKEY,NOKEY}},
1164 {x_("key"), 1,{&us_bindkeyp,NOKEY,NOKEY,NOKEY,NOKEY}},
1165 {x_("menu"), 2,{&bindmenuyp,&us_bindmenuxp,NOKEY,NOKEY,NOKEY}},
1166 {x_("popup"), 1,{&us_bindpopnp,NOKEY,NOKEY,NOKEY,NOKEY}},
1167 {x_("input-popup"), 1,{&us_bindpopnp,NOKEY,NOKEY,NOKEY,NOKEY}},
1168 TERMKEY
1169 };
1170 COMCOMP us_bindsetp = {bindsetopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1171 INPUTOPT, x_(" \t"), M_("what would you like to bind"), 0};
1172 static KEYWORD bindnotopt[] =
1173 {
1174 {x_("verbose"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1175 TERMKEY
1176 };
1177 static COMCOMP bindnotp = {bindnotopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1178 INPUTOPT, x_(" \t"), M_("what binding condition would you like to negate"), 0};
1179 static COMCOMP bindgbuttonp = {NOKEYWORD, us_topofmbuttons, us_nextparse,
1180 NOPARAMS, INPUTOPT, x_(" \t"), M_("mouse button to get"), 0};
1181 COMCOMP us_bindgkeyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1182 INPUTOPT, x_(" \t"), M_("key to get"), 0};
1183 static COMCOMP bindgmenuxp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1184 0, x_(" \t"), M_("column of menu to get"), 0};
1185 static COMCOMP bindgmenuyp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1186 0, x_(" \t"), M_("row of menu to get"), 0};
1187 static COMCOMP bindgpopnp = {NOKEYWORD, us_topofpopupmenu, us_nextparse,
1188 NOPARAMS, INPUTOPT, x_(" \t"), M_("popup menu to get"), 0};
1189 static COMCOMP bindgpopip = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1190 INPUTOPT, x_(" \t"), M_("index of popup menu to get"), 0};
1191 static KEYWORD bindgetopt[] =
1192 {
1193 {x_("button"), 1,{&bindgbuttonp,NOKEY,NOKEY,NOKEY,NOKEY}},
1194 {x_("key"), 1,{&us_bindgkeyp,NOKEY,NOKEY,NOKEY,NOKEY}},
1195 {x_("menu"), 2,{&bindgmenuyp,&bindgmenuxp,NOKEY,NOKEY,NOKEY}},
1196 {x_("popup"), 2,{&bindgpopnp,&bindgpopip,NOKEY,NOKEY,NOKEY}},
1197 TERMKEY
1198 };
1199 static COMCOMP bindgetp = {bindgetopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1200 INPUTOPT, x_(" \t"), M_("what binding would you like to obtain"), 0};
1201 static COMCOMP bindgetlp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1202 INPUTOPT, x_(" \t"), M_("command-interpreter letter to hold the binding"), 0};
1203 static KEYWORD bindopt[] =
1204 {
1205 {x_("verbose"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1206 {x_("not"), 1,{&bindnotp,NOKEY,NOKEY,NOKEY,NOKEY}},
1207 {x_("set"), 1,{&us_bindsetp,NOKEY,NOKEY,NOKEY,NOKEY}},
1208 {x_("get"), 2,{&bindgetlp,&bindgetp,NOKEY,NOKEY,NOKEY}},
1209 TERMKEY
1210 };
1211 COMCOMP us_bindp = {bindopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1212 0, x_(" \t"), M_("binding option"), 0};
1213
1214 /* the "color" command */
1215 COMCOMP us_colorentryp = {NOKEYWORD, us_topoflayers, us_nextparse, NOPARAMS,
1216 NOFILL|INPUTOPT, x_(" \t"), M_("table index or layer letter(s)"), 0};
1217 static COMCOMP colorrvaluep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1218 0, x_(" \t"), M_("new value for red colormap entry"), 0};
1219 static COMCOMP colorgvaluep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1220 0, x_(" \t"), M_("new value for green colormap entry"), 0};
1221 static COMCOMP colorbvaluep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1222 0, x_(" \t"), M_("new value for blue colormap entry"), 0};
1223 COMCOMP us_colorpvaluep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1224 0, x_(" \t"), M_("new value for raster pattern"), 0};
1225 static COMCOMP colorhighap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1226 INPUTOPT, x_(" \t"), M_("amount to highlight (0 to 1)"), x_("0.5")};
1227 COMCOMP us_colorhighp = {NOKEYWORD,us_topoflayers,us_nextparse,NOPARAMS,
1228 INPUTOPT, x_(" \t"), M_("overlappable layer letter(s) to highlight"), 0};
1229 COMCOMP us_colorreadp = {NOKEYWORD, topoffile, nextfile, NOPARAMS,
1230 NOFILL|INPUTOPT, x_(" \t"), M_("colormap file name"), 0};
1231 COMCOMP us_colorwritep = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1232 INPUTOPT, x_(" \t"), M_("colormap output file name"), 0};
1233 static KEYWORD coloropt[] =
1234 {
1235 {x_("default"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1236 {x_("black-background"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1237 {x_("white-background"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1238 {x_("entry"), 4,{&us_colorentryp,&colorrvaluep,&colorgvaluep,&colorbvaluep,NOKEY}},
1239 {x_("pattern"), 2,{&us_colorentryp,&us_colorpvaluep,NOKEY,NOKEY,NOKEY}},
1240 {x_("mix"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1241 {x_("highlight"), 2,{&us_colorhighp,&colorhighap,NOKEY,NOKEY,NOKEY}},
1242 {x_("read"), 1,{&us_colorreadp,NOKEY,NOKEY,NOKEY,NOKEY}},
1243 {x_("write"), 1,{&us_colorwritep,NOKEY,NOKEY,NOKEY,NOKEY}},
1244 TERMKEY
1245 };
1246 COMCOMP us_colorp = {coloropt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1247 0, x_(" \t"), M_("colormap option"), 0};
1248
1249 /* the "commandfile" command */
1250 static KEYWORD commandfileswitchopt[] =
1251 {
1252 {x_("verbose"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1253 TERMKEY
1254 };
1255 static COMCOMP commandfileswitchp = {commandfileswitchopt, NOTOPLIST,
1256 NONEXTLIST, NOPARAMS, 0, x_(" \t"), M_("command file switch"), 0};
1257 static COMCOMP commandfilep = {NOKEYWORD, topoffile, nextfile, NOPARAMS,
1258 NOFILL|INPUTOPT, x_(" \t"), M_("command file name"), 0};
1259
1260 /* the "constraint" command */
1261 static COMCOMP constraintup = {NOKEYWORD, us_topofconstraints, us_nextparse,
1262 NOPARAMS, INPUTOPT, x_(" \t"), M_("constraint solver to use"), 0};
1263 static COMCOMP constraintap = {NOKEYWORD, NOTOPLIST, NONEXTLIST,
1264 us_paramconstraintb, 0, x_(" \t"), M_("message for constraint solver"), 0};
us_paramconstraintb(CHAR * i,COMCOMP * j[],CHAR c)1265 INTBIG us_paramconstraintb(CHAR *i, COMCOMP *j[], CHAR c)
1266 { j[0]= &constraintap; return(1);}
us_paramconstrainta(CHAR * pt,COMCOMP * j[],CHAR c)1267 INTBIG us_paramconstrainta(CHAR *pt, COMCOMP *j[], CHAR c)
1268 {
1269 REGISTER INTBIG i;
1270
1271 i = parse(pt, &constraintup, FALSE);
1272 if (i >= 0)
1273 {
1274 j[0] = el_constraints[i].parse;
1275 if (j[0] != NOCOMCOMP) return(1);
1276 }
1277 return(us_paramconstraintb(pt, j, c));
1278 }
1279 static COMCOMP constrainttp = {NOKEYWORD, us_topofconstraints, us_nextparse,
1280 us_paramconstrainta, INPUTOPT, x_(" \t"), M_("constraint to direct"), 0};
1281 static KEYWORD constraintopt[] =
1282 {
1283 {x_("tell"), 1,{&constrainttp,NOKEY,NOKEY,NOKEY,NOKEY}},
1284 {x_("use"), 1,{&constraintup,NOKEY,NOKEY,NOKEY,NOKEY}},
1285 TERMKEY
1286 };
1287 static COMCOMP constraintp = {constraintopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1288 0, x_(" \t"), M_("constraint solver action"), 0};
1289
1290 /* the "copycell" command */
1291 COMCOMP us_copycellp = {NOKEYWORD, us_topofcells, us_nextparse, NOPARAMS,
1292 INPUTOPT, x_(" \t"), M_("source cell name (or library:cell)"), 0};
1293 COMCOMP us_copycelldp = {NOKEYWORD,us_topofcells,us_nextparse,NOPARAMS,
1294 NOFILL|INCLUDENOISE, x_(" \t"), M_("destination cell name"), M_("same cell name")};
1295 extern COMCOMP copycellqp;
1296 static KEYWORD copycellqopt[] =
1297 {
1298 {x_("quiet"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1299 {x_("move"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1300 {x_("show-copy"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1301 {x_("replace-copy"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1302 {x_("no-related-views"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1303 {x_("no-subcells"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1304 {x_("use-existing-subcells"), 1,{©cellqp,NOKEY,NOKEY,NOKEY,NOKEY}},
1305 TERMKEY
1306 };
1307 COMCOMP copycellqp = {copycellqopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1308 0, x_(" \t"), M_("options"), 0};
1309
1310 /* the "create" command */
1311 static COMCOMP createap = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1312 INPUTOPT, x_(" \t"), M_("angle increment from current object"), 0};
1313 static COMCOMP createjp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1314 INPUTOPT, x_(" \t"), M_("angle increment from current object to other object"), 0};
1315 static COMCOMP createxp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1316 INPUTOPT, x_(" \t"), M_("X coordinate of object"), 0};
1317 static COMCOMP createyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1318 0, x_(" \t"), M_("Y coordinate of object"), 0};
1319 static KEYWORD createopt[] =
1320 {
1321 {x_("remain-highlighted"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1322 {x_("wait-for-down"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1323 {x_("contents"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1324 {x_("insert"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1325 {x_("icon"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1326 {x_("breakpoint"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1327 {x_("angle"), 1,{&createap,NOKEY,NOKEY,NOKEY,NOKEY}},
1328 {x_("join-angle"), 1,{&createjp,NOKEY,NOKEY,NOKEY,NOKEY}},
1329 {x_("to"), 2,{&createxp,&createyp,NOKEY,NOKEY,NOKEY}},
1330 TERMKEY
1331 };
1332 static COMCOMP createp = {createopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1333 0, x_(" \t"), M_("creation option"), 0};
1334
1335 /* the "debug" command */
1336 static KEYWORD debugcopt[] =
1337 {
1338 {x_("verbose"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1339 TERMKEY
1340 };
1341 COMCOMP us_debugcp = {debugcopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1342 INPUTOPT, x_(" \t"), M_("database checking option"), 0};
1343 static COMCOMP debugap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1344 INPUTOPT, x_(" \t"), M_("arena name to map"), 0};
1345 static KEYWORD debugopt[] =
1346 {
1347 /* standard */
1348 {x_("arena"), 1,{&debugap,NOKEY,NOKEY,NOKEY,NOKEY}},
1349 {x_("check-database"), 1,{&us_debugcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1350 {x_("dialog-edit"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1351 {x_("examine-options"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1352 {x_("freeze-user-interface"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1353 {x_("internal-errors"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1354 {x_("namespace"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1355 {x_("options-changed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1356 {x_("rtree"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1357 {x_("translate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1358 {x_("undo"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1359 /* special case */
1360 {x_("erase-bits"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1361 {x_("prepare-tsmc-io"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1362 {x_("label-cell"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1363 {x_("make-parameters-visible"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1364 {x_("postscript-schematics"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1365 TERMKEY
1366 };
1367 static COMCOMP debugp = {debugopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1368 0, x_(" \t"), M_("debugging option"), 0};
1369
1370 /* the "defarc" command */
1371 COMCOMP us_defarcwidp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1372 INPUTOPT, x_(" \t"), M_("default arc width"), 0};
1373 COMCOMP us_defarcangp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1374 INPUTOPT, x_(" \t"), M_("default arc angle increment"), 0};
1375 COMCOMP us_defarcpinp = {NOKEYWORD, us_topofprims, us_nextparse, NOPARAMS,
1376 INPUTOPT, x_(" \t"), M_("default pin to use for this arc"), 0};
1377 static KEYWORD defarcnotopt[] =
1378 {
1379 {x_("manhattan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1380 {x_("fixed-angle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1381 {x_("slide"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1382 {x_("rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1383 {x_("directional"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1384 {x_("negated"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1385 {x_("ends-extend"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1386 TERMKEY
1387 };
1388 COMCOMP us_defarcnotp = {defarcnotopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1389 INPUTOPT, x_(" \t"), M_("default arc setting"), 0};
1390 static KEYWORD defarcopt[] =
1391 {
1392 {x_("not"), 1,{&us_defarcnotp,NOKEY,NOKEY,NOKEY,NOKEY}},
1393 {x_("default"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1394 {x_("angle"), 1,{&us_defarcangp,NOKEY,NOKEY,NOKEY,NOKEY}},
1395 {x_("pin"), 1,{&us_defarcpinp,NOKEY,NOKEY,NOKEY,NOKEY}},
1396 {x_("width"), 1,{&us_defarcwidp,NOKEY,NOKEY,NOKEY,NOKEY}},
1397 {x_("manhattan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1398 {x_("fixed-angle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1399 {x_("slide"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1400 {x_("rigid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1401 {x_("directional"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1402 {x_("negated"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1403 {x_("ends-extend"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1404 TERMKEY
1405 };
1406 static COMCOMP defarcp = {defarcopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1407 0, x_(" \t"), M_("default arc setting"), M_("describe current")};
1408 COMCOMP us_defarcsp = {NOKEYWORD,topofarcs,nextarcs,NOPARAMS,
1409 INPUTOPT, x_(" \t"), M_("arc prototype to set defaults (* for all)"), 0};
1410
1411 /* the "defnode" command */
1412 COMCOMP us_defnodexsp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1413 INPUTOPT, x_(" \t"), M_("default node X size"), 0};
1414 COMCOMP us_defnodeysp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1415 0, x_(" \t"), M_("default node Y size"), 0};
1416 static COMCOMP defnodepp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1417 INPUTOPT, x_(" \t"), M_("default node placement"), M_("90 degrees more")};
1418 static KEYWORD defnodenotopt[] =
1419 {
1420 {x_("alterable"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1421 {x_("centered-primitives"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1422 {x_("check-dates"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1423 {x_("copy-ports"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1424 {x_("expanded"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1425 {x_("from-cell-library"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1426 {x_("instances-locked"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1427 {x_("locked-primitives"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1428 TERMKEY
1429 };
1430 COMCOMP us_defnodenotp = {defnodenotopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1431 INPUTOPT, x_(" \t"), M_("default node NOT setting"), 0};
1432 static KEYWORD defnodeopt[] =
1433 {
1434 {x_("alterable"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1435 {x_("centered-primitives"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1436 {x_("check-dates"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1437 {x_("copy-ports"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1438 {x_("expanded"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1439 {x_("from-cell-library"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1440 {x_("instances-locked"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1441 {x_("locked-primitives"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1442 {x_("not"), 1,{&us_defnodenotp,NOKEY,NOKEY,NOKEY,NOKEY}},
1443 {x_("placement"), 1,{&defnodepp,NOKEY,NOKEY,NOKEY,NOKEY}},
1444 {x_("size"), 2,{&us_defnodexsp,&us_defnodeysp,NOKEY,NOKEY,NOKEY}},
1445 TERMKEY
1446 };
1447 COMCOMP us_defnodep = {defnodeopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1448 0, x_(" \t"), M_("default node setting"), M_("describe current")};
1449 COMCOMP us_defnodesp = {NOKEYWORD, us_topofnodes, us_nextparse, NOPARAMS,
1450 INPUTOPT, x_(" \t"), M_("node prototype to set defaults (* for all)"), 0};
1451
1452 /* the "echo" command */
1453 static COMCOMP echop = {NOKEYWORD,NOTOPLIST,NONEXTLIST,us_nextecho,
1454 0, x_(" \t"), M_("argument to be echoed"), 0};
us_nextecho(CHAR * i,COMCOMP * j[],CHAR c)1455 INTBIG us_nextecho(CHAR *i, COMCOMP *j[], CHAR c)
1456 { j[0] = &echop; return(1); }
1457
1458 /* the "editcell" command */
1459 extern COMCOMP editcellwindowp;
1460 static KEYWORD editcellwindowopt[] =
1461 {
1462 {x_("non-redundant"), 1,{&editcellwindowp,NOKEY,NOKEY,NOKEY,NOKEY}},
1463 {x_("new-window"), 1,{&editcellwindowp,NOKEY,NOKEY,NOKEY,NOKEY}},
1464 {x_("in-place"), 1,{&editcellwindowp,NOKEY,NOKEY,NOKEY,NOKEY}},
1465 TERMKEY
1466 };
1467 COMCOMP editcellwindowp = {editcellwindowopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1468 0, x_(" \t"), M_("option to display in a new window"), 0};
1469 COMCOMP us_editcellp = {NOKEYWORD,us_topofcells,us_nextparse,NOPARAMS,
1470 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("cell cell to be edited ('-' to follow ports)"), 0};
1471
1472 /* the "erase" command */
1473 static KEYWORD eraseopt[] =
1474 {
1475 {x_("geometry"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1476 {x_("clean-up"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1477 {x_("clean-up-all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1478 {x_("pass-through"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1479 TERMKEY
1480 };
1481 static COMCOMP erasep = {eraseopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1482 0, x_(" \t"), M_("erase option"), 0};
1483
1484 /* the "find" command */
1485 COMCOMP us_findnamep = {NOKEYWORD, us_topofhighlight, us_nextparse,
1486 NOPARAMS, INPUTOPT, x_(" \t"), M_("highlight name"), 0};
1487 COMCOMP us_findnnamep = {NOKEYWORD, us_topofhighlight, us_nextparse,
1488 NOPARAMS, NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("highlight name"), 0};
1489 COMCOMP us_findnodep = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1490 INPUTOPT, x_(" \t"), M_("name of node to highlight"), 0};
1491 COMCOMP us_findexportp = {NOKEYWORD, us_topofcports, us_nextparse, NOPARAMS,
1492 INPUTOPT, x_(" \t"), M_("name of export to highlight"), 0};
1493 COMCOMP us_findarcp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1494 INPUTOPT, x_(" \t"), M_("name of arc/network to highlight"), 0};
1495 COMCOMP us_findintp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1496 INPUTOPT, x_(" \t"), M_("angle increment from current position"), 0};
1497 COMCOMP us_findobjap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1498 INPUTOPT, x_(" \t"), M_("address of object being selected"), 0};
1499 static COMCOMP findvp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1500 INPUTOPT, x_(" \t"), M_("displayable variable name to select"), 0};
1501 static KEYWORD findsnapopt[] =
1502 {
1503 {x_("none"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1504 {x_("center"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1505 {x_("midpoint"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1506 {x_("endpoint"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1507 {x_("tangent"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1508 {x_("perpendicular"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1509 {x_("quadrant"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1510 {x_("intersection"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1511 TERMKEY
1512 };
1513 static COMCOMP findsnapp = {findsnapopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1514 INPUTOPT, x_(" \t"), M_("vertex snapping mode"), 0};
1515 static KEYWORD findallopt[] =
1516 {
1517 {x_("easy"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1518 {x_("hard"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1519 TERMKEY
1520 };
1521 static COMCOMP findallp = {findallopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1522 INPUTOPT, x_(" \t"), M_("select-all option"), 0};
1523 static KEYWORD finddropt[] =
1524 {
1525 {x_("any-touching"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1526 {x_("only-enclosed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1527 TERMKEY
1528 };
1529 static COMCOMP finddrp = {finddropt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1530 INPUTOPT, x_(" \t"), M_("what dragging selects"), 0};
1531 static KEYWORD findardopt[] =
1532 {
1533 {x_("wait"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1534 TERMKEY
1535 };
1536 static COMCOMP findardp = {findardopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1537 INPUTOPT, x_(" \t"), M_("whether to wait for a push"), 0};
1538 extern COMCOMP findp, us_varbs2typ;
1539 static KEYWORD findopt[] =
1540 {
1541 {x_("all"), 1,{&findallp,NOKEY,NOKEY,NOKEY,NOKEY}},
1542 {x_("another"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1543 {x_("arc"), 1,{&us_findarcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1544 {x_("area-move"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1545 {x_("area-define"), 1,{&findardp,NOKEY,NOKEY,NOKEY,NOKEY}},
1546 {x_("area-size"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1547 {x_("clear"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1548 {x_("comp-interactive"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1549 {x_("constraint-angle"), 1,{&us_findintp,NOKEY,NOKEY,NOKEY,NOKEY}},
1550 {x_("deselect-arcs"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1551 {x_("down-stack"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1552 {x_("dragging-selects"), 1,{&finddrp,NOKEY,NOKEY,NOKEY,NOKEY}},
1553 {x_("exclusively"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1554 {x_("export"), 1,{&us_findexportp,NOKEY,NOKEY,NOKEY,NOKEY}},
1555 {x_("extra-info"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1556 {x_("interactive"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1557 {x_("just-objects"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1558 {x_("more"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1559 {x_("name"), 1,{&us_findnamep,NOKEY,NOKEY,NOKEY,NOKEY}},
1560 {x_("no-box"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1561 {x_("node"), 1,{&us_findnodep,NOKEY,NOKEY,NOKEY,NOKEY}},
1562 {x_("nonmanhattan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1563 {x_("object"), 2,{&us_varbs2typ,&us_findobjap,NOKEY,NOKEY,NOKEY}},
1564 {x_("port"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1565 {x_("save"), 1,{&us_findnnamep,NOKEY,NOKEY,NOKEY,NOKEY}},
1566 {x_("set-easy-selection"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1567 {x_("set-hard-selection"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1568 {x_("similar"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1569 {x_("snap-mode"), 1,{&findsnapp,NOKEY,NOKEY,NOKEY,NOKEY}},
1570 {x_("special"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1571 {x_("still"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1572 {x_("up-stack"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1573 {x_("variable"), 1,{&findvp,NOKEY,NOKEY,NOKEY,NOKEY}},
1574 {x_("vertex"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1575 {x_("within"), 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
1576 TERMKEY
1577 };
1578 COMCOMP findp = {findopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1579 0, x_(" \t"), M_("selection option"), 0};
1580
1581 /* the "getproto" command */
1582 COMCOMP us_getproto1p = {NOKEYWORD, us_topofgetproto, us_nextparse, NOPARAMS,
1583 INPUTOPT, x_(" \t"), M_("arc or node prototype"), 0};
1584 static COMCOMP getproto2p = {NOKEYWORD, us_topofarcnodes, us_nextparse,
1585 NOPARAMS, 0, x_(" \t"), M_("arc or node prototype"), 0};
1586
1587 /* the "grid" command */
1588 COMCOMP us_gridalip = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1589 INPUTOPT, x_(" \t"), M_("grid cursor alignment value"), 0};
1590 static COMCOMP gridedgesp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1591 INPUTOPT, x_(" \t"), M_("grid edge alignment value"), 0};
1592 static COMCOMP gridxp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1593 INPUTOPT, x_(" \t"), M_("grid spacing in X"), 0};
1594 static COMCOMP gridyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1595 0, x_(" \t"), M_("grid spacing in Y"), M_("same as X")};
1596 static KEYWORD gridopt[] =
1597 {
1598 {x_("alignment"), 1,{&us_gridalip,NOKEY,NOKEY,NOKEY,NOKEY}},
1599 {x_("edges"), 1,{&gridedgesp,NOKEY,NOKEY,NOKEY,NOKEY}},
1600 {x_("size"), 2,{&gridxp,&gridyp,NOKEY,NOKEY,NOKEY}},
1601 TERMKEY
1602 };
1603 COMCOMP us_gridp = {gridopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1604 0, x_(" \t"), M_("grid option"), M_("toggle grid")};
1605
1606 /* the "help" command */
1607 static KEYWORD helpopt[] =
1608 {
1609 {x_("manual"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1610 {x_("news"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1611 {x_("illustrate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1612 {x_("pulldowns"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1613 TERMKEY
1614 };
1615 COMCOMP us_helpp = {helpopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1616 0, x_(" \t"), M_("news, manual, pulldowns, or illustrate"), M_("command-line help")};
1617
1618 /* the "if" command */
1619 static KEYWORD ifropt[] =
1620 {
1621 {x_("=="), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1622 {x_("!="), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1623 {x_("<"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1624 {x_("<="), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1625 {x_(">"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1626 {x_(">="), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1627 TERMKEY
1628 };
1629 static COMCOMP ifrp = {ifropt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1630 0, x_(" \t"), M_("conditional relationship"), 0};
1631 static COMCOMP iftp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1632 INPUTOPT, x_(" \t"), M_("value to be compared"), 0};
1633
1634 /* the "interpret" command */
1635 static COMCOMP interpretfip = {NOKEYWORD,topoffile, nextfile,NOPARAMS,
1636 INPUTOPT, x_(" \t"), M_("file with code to execute"), 0};
1637 static KEYWORD interpretfopt[] =
1638 {
1639 {x_("lisp"), 1,{&interpretfip,NOKEY,NOKEY,NOKEY,NOKEY}},
1640 {x_("tcl"), 1,{&interpretfip,NOKEY,NOKEY,NOKEY,NOKEY}},
1641 {x_("java"), 1,{&interpretfip,NOKEY,NOKEY,NOKEY,NOKEY}},
1642 TERMKEY
1643 };
1644 static COMCOMP interpretfp = {interpretfopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1645 INPUTOPT, x_(" \t"), M_("language to execute"), 0};
1646 COMCOMP us_interpretcp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1647 INPUTOPT, x_(" \t"), M_("code to execute"), M_("invoke interpreter")};
1648 static KEYWORD interpretopt[] =
1649 {
1650 {x_("lisp"), 1,{&us_interpretcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1651 {x_("tcl"), 1,{&us_interpretcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1652 {x_("java"), 1,{&us_interpretcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1653 {x_("file"), 1,{&interpretfp,NOKEY,NOKEY,NOKEY,NOKEY}},
1654 TERMKEY
1655 };
1656 static COMCOMP interpretp = {interpretopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1657 INPUTOPT, x_(" \t"), M_("language or code to execute"), M_("invoke interpreter")};
1658
1659 /* the "iterate" command */
1660 static COMCOMP iteratemp = {NOKEYWORD, us_topofmacros, us_nextparse, NOPARAMS,
1661 INPUTOPT, x_(" \t"), M_("macro to execute"), 0};
1662 static COMCOMP iteratep = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
1663 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("number of times to repeat last command, or array variable to iterate"), x_("1")};
1664
1665 /* the "killcell" command */
1666 static COMCOMP killcellp = {NOKEYWORD, topofcells, nextcells, NOPARAMS,
1667 INPUTOPT, x_(" \t"), M_("name of cell cell to delete"), 0};
1668
1669 /* the "lambda" command */
1670 COMCOMP us_lambdachp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1671 INPUTOPT, x_(" \t"), M_("new value for lambda"), 0};
1672 static KEYWORD lambdadunopt[] =
1673 {
1674 {x_("lambda"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1675 {x_("inch"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1676 {x_("centimeter"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1677 {x_("millimeter"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1678 {x_("mil"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1679 {x_("micron"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1680 {x_("centimicron"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1681 {x_("nanometer"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1682 TERMKEY
1683 };
1684 static COMCOMP lambdadunp = {lambdadunopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1685 INPUTOPT, x_(" \t"), M_("units to use when displaying distance"), 0};
1686 static KEYWORD lambdaiunopt[] =
1687 {
1688 {x_("half-decimicron"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1689 {x_("half-nanometer"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1690 TERMKEY
1691 };
1692 static COMCOMP lambdaiunp = {lambdaiunopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1693 INPUTOPT, x_(" \t"), M_("smallest internal unit"), 0};
1694 static KEYWORD lambdaopt[] =
1695 {
1696 {x_("change-tech"), 1,{&us_lambdachp,NOKEY,NOKEY,NOKEY,NOKEY}},
1697 {x_("change-lib"), 1,{&us_lambdachp,NOKEY,NOKEY,NOKEY,NOKEY}},
1698 {x_("change-all-libs"), 1,{&us_lambdachp,NOKEY,NOKEY,NOKEY,NOKEY}},
1699 {x_("display-units"), 1,{&lambdadunp,NOKEY,NOKEY,NOKEY,NOKEY}},
1700 {x_("internal-units"), 1,{&lambdaiunp,NOKEY,NOKEY,NOKEY,NOKEY}},
1701 TERMKEY
1702 };
1703 static COMCOMP lambdap = {lambdaopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1704 0, x_(" \t"), M_("lambda changing option"), M_("print current values")};
1705
1706 /* the "library" command */
1707 COMCOMP us_libraryup = {NOKEYWORD, topoflibs, nextlibs, NOPARAMS,
1708 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("name of library to use"), 0};
1709 COMCOMP us_librarynp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1710 INPUTOPT, x_(" \t"), M_("name of new library to create"), 0};
1711 COMCOMP us_libraryrp = {NOKEYWORD,topoflibfile,nextfile,NOPARAMS,
1712 NOFILL|INPUTOPT, x_(" \t"), M_("name of library file to read"), 0};
1713 COMCOMP us_librarywp = {NOKEYWORD, topoflibs, nextlibs, NOPARAMS,
1714 INPUTOPT, x_(" \t"), M_("name of library to write"), 0};
1715 static KEYWORD librarymcopt[] =
1716 {
1717 {x_("make-current"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1718 {x_("merge"), 1,{&us_libraryup,NOKEY,NOKEY,NOKEY,NOKEY}},
1719 TERMKEY
1720 };
1721 static COMCOMP libraryreadmcp = {librarymcopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1722 INPUTOPT, x_(" \t"), M_("option to library input"), 0};
1723 static KEYWORD libraryreadformatopt[] =
1724 {
1725 {x_("binary"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1726 {x_("cif"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1727 {x_("def"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1728 {x_("dxf"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1729 {x_("edif"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1730 {x_("gds"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1731 {x_("lef"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1732 {x_("sue"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1733 {x_("text"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1734 {x_("vhdl"), 1,{&libraryreadmcp,NOKEY,NOKEY,NOKEY,NOKEY}},
1735 {x_("make-current"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1736 {x_("merge"), 1,{&us_libraryup,NOKEY,NOKEY,NOKEY,NOKEY}},
1737 TERMKEY
1738 };
1739 static COMCOMP libraryreadformatp = {libraryreadformatopt, NOTOPLIST,
1740 NONEXTLIST, NOPARAMS, 0, x_(" \t"), M_("library read option"), x_("binary")};
1741 static KEYWORD librarywriteformatopt[] =
1742 {
1743 {x_("binary"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1744 {x_("cif"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1745 {x_("dxf"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1746 {x_("eagle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1747 {x_("ecad"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1748 {x_("edif"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1749 {x_("gds"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1750 {x_("hpgl"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1751 {x_("l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1752 {x_("lef"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1753 {x_("pads"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1754 {x_("postscript"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1755 {x_("quickdraw"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1756 {x_("skill"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1757 {x_("text"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1758 TERMKEY
1759 };
1760 COMCOMP us_librarywriteformatp = {librarywriteformatopt,NOTOPLIST,
1761 NONEXTLIST,NOPARAMS, 0, x_(" \t"), M_("library write option"), x_("binary")};
1762 static KEYWORD libraryksopt[] =
1763 {
1764 {x_("safe"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1765 TERMKEY
1766 };
1767 static COMCOMP libraryksp = {libraryksopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1768 INPUTOPT, x_(" \t"), M_("option to kill without saving"), M_("check first")};
1769 COMCOMP us_librarykp = {NOKEYWORD, topoflibs, nextlibs, NOPARAMS,
1770 INPUTOPT, x_(" \t"), M_("name of library to erase"), M_("current")};
1771 COMCOMP us_librarydp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1772 INPUTOPT, x_(" \t"), M_("default path for system libraries"), 0};
1773 static KEYWORD libraryopt[] =
1774 {
1775 {x_("use"), 1,{&us_libraryup,NOKEY,NOKEY,NOKEY,NOKEY}},
1776 {x_("new"), 1,{&us_librarynp,NOKEY,NOKEY,NOKEY,NOKEY}},
1777 {x_("read"), 2,{&us_libraryrp,&libraryreadformatp,NOKEY,NOKEY,NOKEY}},
1778 {x_("write"), 2,{&us_librarywp,&us_librarywriteformatp,NOKEY,NOKEY,NOKEY}},
1779 {x_("save"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1780 {x_("purge"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1781 {x_("touch"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1782 {x_("kill"), 2,{&us_librarykp,&libraryksp,NOKEY,NOKEY,NOKEY}},
1783 {x_("default-path"), 1,{&us_librarydp,NOKEY,NOKEY,NOKEY,NOKEY}},
1784 TERMKEY
1785 };
1786 COMCOMP us_libraryp = {libraryopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1787 0, x_(" \t"), M_("library control option"), 0};
1788
1789 /* the "macbegin" command */
1790 COMCOMP us_macparamp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1791 0, x_(" \t"), M_("parameter to macro"), 0};
1792 COMCOMP us_macbeginnp = {NOKEYWORD, us_topofmacros, us_nextparse, NOPARAMS,
1793 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("macro to be defined"), 0};
1794 extern COMCOMP macbeginop;
1795 static KEYWORD macbeginopt[] =
1796 {
1797 {x_("verbose"), 1,{&macbeginop,NOKEY,NOKEY,NOKEY,NOKEY}},
1798 {x_("no-execute"), 1,{&macbeginop,NOKEY,NOKEY,NOKEY,NOKEY}},
1799 TERMKEY
1800 };
1801 COMCOMP macbeginop = {macbeginopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1802 INPUTOPT, x_(" \t"), M_("macro definition option"), 0};
1803
1804 /* the "menu" command */
1805 static KEYWORD menuxopt[] =
1806 {
1807 {x_("auto"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1808 TERMKEY
1809 };
1810 static COMCOMP menuxp = {menuxopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1811 INPUTOPT, x_(" \t"), M_("number of columns in menu (or 'auto')"), 0};
1812 static COMCOMP menuyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1813 0, x_(" \t"), M_("number of rows in menu"), 0};
1814 static KEYWORD menusizeopt[] =
1815 {
1816 {x_("size"), 2,{&menuxp,&menuyp,NOKEY,NOKEY,NOKEY}},
1817 TERMKEY
1818 };
1819 static COMCOMP menusizep = {menusizeopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1820 0, x_(" \t"), M_("menu size option"), 0};
1821 static COMCOMP menupopsp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1822 INPUTOPT, x_(" \t"), M_("number of entries in popup menu"), 0};
1823 static COMCOMP menupophp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1824 INPUTOPT, x_(" \t"), M_("header for popup menu"), 0};
1825 static KEYWORD menupopopt[] =
1826 {
1827 {x_("size"), 1,{&menupopsp,NOKEY,NOKEY,NOKEY,NOKEY}},
1828 {x_("header"), 1,{&menupophp,NOKEY,NOKEY,NOKEY,NOKEY}},
1829 TERMKEY
1830 };
1831 static COMCOMP menupopp = {menupopopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1832 0, x_(" \t"), M_("pop-up menu option"), 0};
1833 static COMCOMP menupopnp = {NOKEYWORD, us_topofpopupmenu, us_nextparse, NOPARAMS,
1834 INPUTOPT|INCLUDENOISE, x_(" \t"), M_("name of popup menu"), 0};
1835 extern COMCOMP us_userp, menusbp;
us_parammenusbp(CHAR * i,COMCOMP * j[],CHAR c)1836 INTBIG us_parammenusbp(CHAR *i, COMCOMP *j[], CHAR c)
1837 { j[0] = &menusbp; return(1); }
1838 COMCOMP menusbp = {NOKEYWORD, us_topofpopupmenu, us_nextparse, us_parammenusbp,
1839 INPUTOPT, x_(" \t"), M_("popup menu name for menu bar"), 0};
1840 static KEYWORD menuopt[] =
1841 {
1842 {x_("on"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1843 {x_("off"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1844 {x_("popup"), 2,{&menupopnp,&menupopp,NOKEY,NOKEY,NOKEY}},
1845 {x_("dopopup"), 1,{&us_userp,NOKEY,NOKEY,NOKEY,NOKEY}},
1846 {x_("setmenubar"), 1,{&menusbp,NOKEY,NOKEY,NOKEY,NOKEY}},
1847 {x_("top"), 1,{&menusizep,NOKEY,NOKEY,NOKEY,NOKEY}},
1848 {x_("bottom"), 1,{&menusizep,NOKEY,NOKEY,NOKEY,NOKEY}},
1849 {x_("left"), 1,{&menusizep,NOKEY,NOKEY,NOKEY,NOKEY}},
1850 {x_("right"), 1,{&menusizep,NOKEY,NOKEY,NOKEY,NOKEY}},
1851 {x_("size"), 2,{&menuxp,&menuyp,NOKEY,NOKEY,NOKEY}},
1852 TERMKEY
1853 };
1854 COMCOMP us_menup = {menuopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1855 0, x_(" \t"), M_("menu control option"), 0};
1856
1857 /* the "mirror" command */
1858 static KEYWORD mirrorgopt[] =
1859 {
1860 {x_("about-grab-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1861 {x_("about-trace-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1862 {x_("sensibly"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1863 TERMKEY
1864 };
1865 static COMCOMP mirrorgp = {mirrorgopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1866 INPUTOPT, x_(" \t"), M_("option to mirror about grab-point"), 0};
1867 static KEYWORD mirroropt[] =
1868 {
1869 {x_("horizontal"), 1,{&mirrorgp,NOKEY,NOKEY,NOKEY,NOKEY}},
1870 {x_("vertical"), 1,{&mirrorgp,NOKEY,NOKEY,NOKEY,NOKEY}},
1871 TERMKEY
1872 };
1873 COMCOMP us_mirrorp = {mirroropt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1874 INPUTOPT, x_(" \t"), M_("direction of mirroring"), 0};
1875
1876 /* the "move" command */
1877 static KEYWORD movevaopt[] =
1878 {
1879 {x_("top"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1880 {x_("bottom"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1881 {x_("center"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1882 TERMKEY
1883 };
1884 static COMCOMP movevap = {movevaopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1885 INPUTOPT, x_(" \t"), M_("direction of vertical alignment"), 0};
1886 static KEYWORD movehaopt[] =
1887 {
1888 {x_("left"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1889 {x_("right"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1890 {x_("center"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1891 TERMKEY
1892 };
1893 static COMCOMP movehap = {movehaopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1894 INPUTOPT, x_(" \t"), M_("direction of horizontal alignment"), 0};
1895 static COMCOMP moveap = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1896 INPUTOPT, x_(" \t"), M_("amount to move"), 0};
1897 static COMCOMP movexp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1898 INPUTOPT, x_(" \t"), M_("X position or offset (or 'dialog')"), 0};
1899 static COMCOMP moveyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1900 0, x_(" \t"), M_("Y position or offset"), 0};
1901 static COMCOMP moverap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1902 INPUTOPT, x_(" \t"), M_("angle increment from current position"), 0};
1903 static KEYWORD moveopt[] =
1904 {
1905 {x_("left"), 1,{&moveap,NOKEY,NOKEY,NOKEY,NOKEY}},
1906 {x_("right"), 1,{&moveap,NOKEY,NOKEY,NOKEY,NOKEY}},
1907 {x_("up"), 1,{&moveap,NOKEY,NOKEY,NOKEY,NOKEY}},
1908 {x_("down"), 1,{&moveap,NOKEY,NOKEY,NOKEY,NOKEY}},
1909 {x_("to"), 2,{&movexp,&moveyp,NOKEY,NOKEY,NOKEY}},
1910 {x_("by"), 2,{&movexp,&moveyp,NOKEY,NOKEY,NOKEY}},
1911 {x_("angle"), 1,{&moverap,NOKEY,NOKEY,NOKEY,NOKEY}},
1912 {x_("valign"), 1,{&movevap,NOKEY,NOKEY,NOKEY,NOKEY}},
1913 {x_("halign"), 1,{&movehap,NOKEY,NOKEY,NOKEY,NOKEY}},
1914 TERMKEY
1915 };
1916 static COMCOMP movep = {moveopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1917 0, x_(" \t"), M_("object motion options"), 0};
1918
1919 /* the "node" command */
1920 static COMCOMP nodeexpp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1921 INPUTOPT, x_(" \t"), M_("number of levels of depth to expand"), M_("infinite")};
1922 static COMCOMP nodeuexpp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
1923 INPUTOPT, x_(" \t"), M_("number of levels of depth to un-expand"), M_("infinite")};
1924 static COMCOMP nodenp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1925 INPUTOPT, x_(" \t"), M_("local name to give node"), 0};
1926 static COMCOMP nodetaxp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1927 INPUTOPT, x_(" \t"), M_("X coordinate of trace point"), 0};
1928 static COMCOMP nodetayp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1929 INPUTOPT, x_(" \t"), M_("Y coordinate of trace point"), 0};
1930 static COMCOMP nodetcadp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1931 INPUTOPT, x_(" \t"), M_("Degrees of circle (default is 360)"), 0};
1932 static COMCOMP nodetcarp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1933 INPUTOPT, x_(" \t"), M_("Resolution of annulus (number of segments to use)"), 0};
1934 static COMCOMP nodetcaop = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1935 INPUTOPT, x_(" \t"), M_("Outer radius of annulus"), 0};
1936 COMCOMP us_nodetcaip = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1937 INPUTOPT, x_(" \t"), M_("Inner radius of annulus"), 0};
1938 COMCOMP us_nodetptmp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1939 INPUTOPT, x_(" \t"), M_("Message to place"), 0};
1940 static COMCOMP nodetptsp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1941 INPUTOPT, x_(" \t"), M_("Size of text"), 0};
1942 COMCOMP us_nodetptlp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
1943 INPUTOPT, x_(" \t"), M_("Layer of text"), 0};
1944 extern COMCOMP us_nodetp;
1945 static KEYWORD nodetopt[] =
1946 {
1947 {x_("store-trace"), 1,{&us_nodetp,NOKEY,NOKEY,NOKEY,NOKEY}},
1948 {x_("add-point"), 2,{&nodetaxp,&nodetayp,NOKEY,NOKEY,NOKEY}},
1949 {x_("move-point"), 2,{&nodetaxp,&nodetayp,NOKEY,NOKEY,NOKEY}},
1950 {x_("delete-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1951 {x_("wait-for-down"), 1,{&us_nodetp,NOKEY,NOKEY,NOKEY,NOKEY}},
1952 {x_("construct-annulus"), 4,{&us_nodetcaip,&nodetcaop,&nodetcarp,&nodetcadp,NOKEY}},
1953 {x_("place-text"), 3,{&us_nodetptlp,&nodetptsp,&us_nodetptmp,NOKEY,NOKEY}},
1954 {x_("fillet"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1955 {x_("next-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1956 {x_("prev-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1957 {x_("init-points"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1958 TERMKEY
1959 };
1960 COMCOMP us_nodetp = {nodetopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1961 INPUTOPT, x_(" \t"), M_("cursor trace option"), 0};
1962 static KEYWORD nodenotopt[] =
1963 {
1964 {x_("expand"), 1,{&nodeuexpp,NOKEY,NOKEY,NOKEY,NOKEY}},
1965 {x_("name"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1966 TERMKEY
1967 };
1968 static COMCOMP nodenotp = {nodenotopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
1969 INPUTOPT, x_(" \t"), M_("node state NOT options"), 0};
1970 static KEYWORD nodeopt[] =
1971 {
1972 {x_("cover-implant"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1973 {x_("regrid-cell"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1974 {x_("expand"), 1,{&nodeexpp,NOKEY,NOKEY,NOKEY,NOKEY}},
1975 {x_("name"), 1,{&nodenp,NOKEY,NOKEY,NOKEY,NOKEY}},
1976 {x_("trace"), 1,{&us_nodetp,NOKEY,NOKEY,NOKEY,NOKEY}},
1977 {x_("not"), 1,{&nodenotp,NOKEY,NOKEY,NOKEY,NOKEY}},
1978 TERMKEY
1979 };
1980 COMCOMP us_nodep = {nodeopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1981 0, x_(" \t"), M_("node state options"), 0};
1982
1983 /* the "offtool" command */
1984 static KEYWORD offtooleopt[] =
1985 {
1986 {x_("permanently"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
1987 TERMKEY
1988 };
1989 static COMCOMP offtoolep = {offtooleopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
1990 0, x_(" \t"), M_("option to make this change nonundoable"), 0};
1991 static COMCOMP offtoolp = {NOKEYWORD, topoftools, nexttools, NOPARAMS,
1992 INPUTOPT, x_(" \t"), M_("tool to turn off"), 0};
1993
1994 /* the "ontool" command */
1995 static COMCOMP ontoolp = {NOKEYWORD, topoftools, nexttools, NOPARAMS,
1996 INPUTOPT, x_(" \t"), M_("tool to turn on"), 0};
1997 COMCOMP us_onofftoolp = {NOKEYWORD, topoftools, nexttools, NOPARAMS,
1998 0, x_(" \t"), M_("tool to control"), 0};
1999
2000 /* the "outhier" command */
2001 static COMCOMP outhierp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2002 INPUTOPT, x_(" \t"), M_("number of levels to pop out"), x_("1")};
2003
2004 /* the "package" command */
2005 COMCOMP us_packagep = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2006 INPUTOPT, x_(" \t"), M_("name of new cell in which to package this circuitry"), 0};
2007
2008 /* the "port" command */
2009 static COMCOMP portunp = {NOKEYWORD, us_topofexpports, us_nextparse, NOPARAMS,
2010 INPUTOPT, x_(" \t"), M_("name of existing export"), 0};
2011 extern COMCOMP us_portcp;
2012 static KEYWORD portmodopt[] =
2013 {
2014 {x_("input"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2015 {x_("output"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2016 {x_("bidirectional"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2017 {x_("power"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2018 {x_("ground"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2019 {x_("clock"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2020 {x_("clock1"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2021 {x_("clock2"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2022 {x_("clock3"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2023 {x_("clock4"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2024 {x_("clock5"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2025 {x_("clock6"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2026 {x_("refin"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2027 {x_("refout"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2028 {x_("refbase"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2029 {x_("none"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2030 {x_("always-drawn"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2031 {x_("body-only"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2032 {x_("specify"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2033 {x_("use"), 2,{&portunp,&us_portcp,NOKEY,NOKEY,NOKEY}},
2034 TERMKEY
2035 };
2036 COMCOMP us_portcp = {portmodopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
2037 INPUTOPT, x_(" \t"), M_("port specification and characteristics"), 0};
2038 static COMCOMP portecup = {NOKEYWORD, us_topofports, us_nextparse, NOPARAMS,
2039 INPUTOPT, x_(" \t"), M_("name of port to export"), 0};
2040 extern COMCOMP portecp;
2041 static COMCOMP porterp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2042 INPUTOPT, x_(" \t"), M_("reference port name"), 0};
2043 static KEYWORD portmodeopt[] =
2044 {
2045 {x_("input"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2046 {x_("output"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2047 {x_("bidirectional"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2048 {x_("power"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2049 {x_("ground"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2050 {x_("clock"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2051 {x_("clock1"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2052 {x_("clock2"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2053 {x_("clock3"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2054 {x_("clock4"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2055 {x_("clock5"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2056 {x_("clock6"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2057 {x_("refin"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2058 {x_("refout"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2059 {x_("refname"), 2,{&porterp,&portecp,NOKEY,NOKEY,NOKEY}},
2060 {x_("refbase"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2061 {x_("always-drawn"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2062 {x_("body-only"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2063 {x_("specify"), 1,{&portecp,NOKEY,NOKEY,NOKEY,NOKEY}},
2064 {x_("use"), 2,{&portecup,&portecp,NOKEY,NOKEY,NOKEY}},
2065 TERMKEY
2066 };
2067 COMCOMP portecp = {portmodeopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
2068 INPUTOPT, x_(" \t"), M_("port specification and characteristics"), 0};
us_paramportep(CHAR * i,COMCOMP * j[],CHAR c)2069 INTBIG us_paramportep(CHAR *i, COMCOMP *j[], CHAR c)
2070 { j[0] = &portecp; return(1); }
2071 COMCOMP us_portep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, us_paramportep,
2072 INPUTOPT, x_(" \t"), M_("export name"), 0};
2073 static KEYWORD portuopt[] =
2074 {
2075 {x_("all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2076 {x_("geometry"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2077 {x_("specify"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2078 {x_("use"), 1,{&portunp,NOKEY,NOKEY,NOKEY,NOKEY}},
2079 TERMKEY
2080 };
2081 static COMCOMP portup = {portuopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2082 INPUTOPT, x_(" \t"), M_("port specification"), 0};
2083 static KEYWORD portnopt[] =
2084 {
2085 {x_("export"), 1,{&portup,NOKEY,NOKEY,NOKEY,NOKEY}},
2086 TERMKEY
2087 };
2088 static COMCOMP portnp = {portnopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2089 INPUTOPT, x_(" \t"), M_("port un-request"), 0};
2090 static KEYWORD portlopt[] =
2091 {
2092 {x_("short"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2093 {x_("long"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2094 {x_("crosses"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2095 TERMKEY
2096 };
2097 COMCOMP us_portlp = {portlopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
2098 INPUTOPT, x_(" \t"), M_("port/export label display option"), 0};
2099 static KEYWORD portmopt[] =
2100 {
2101 {x_("remain-highlighted"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2102 TERMKEY
2103 };
2104 static COMCOMP portmp = {portmopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
2105 INPUTOPT, x_(" \t"), M_("port move highlighting option"), 0};
2106 static COMCOMP portsp = {NOKEYWORD,topoflibs,nextlibs,NOPARAMS,
2107 INPUTOPT, x_(" \t"), M_("library to synchronize with this"), 0};
2108 static KEYWORD portopt[] =
2109 {
2110 {x_("export"), 1,{&us_portep,NOKEY,NOKEY,NOKEY,NOKEY}},
2111 {x_("not"), 1,{&portnp,NOKEY,NOKEY,NOKEY,NOKEY}},
2112 {x_("re-export-all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2113 {x_("highlighted-re-export"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2114 {x_("power-ground-re-export"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2115 {x_("synchronize-library"), 1,{&portsp,NOKEY,NOKEY,NOKEY,NOKEY}},
2116 {x_("move"), 1,{&portmp,NOKEY,NOKEY,NOKEY,NOKEY}},
2117 {x_("change"), 1,{&us_portcp,NOKEY,NOKEY,NOKEY,NOKEY}},
2118 {x_("labels"), 1,{&us_portlp,NOKEY,NOKEY,NOKEY,NOKEY}},
2119 {x_("export-labels"), 1,{&us_portlp,NOKEY,NOKEY,NOKEY,NOKEY}},
2120 {x_("identify-cell"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2121 {x_("identify-node"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2122 TERMKEY
2123 };
2124 COMCOMP us_portp = {portopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2125 0, x_(" \t"), M_("control of ports"), 0};
2126
2127 /* the "quit" command */
2128 static COMCOMP quitp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2129 INPUTOPT, x_(" \t"), M_("exit the program"), 0};
2130
2131 /* the "rename" command */
2132 COMCOMP us_renameop = {NOKEYWORD, us_topofallthings, us_nextparse, NOPARAMS,
2133 NOFILL|INPUTOPT, x_(" \t"), M_("name of object to be renamed"), 0};
2134 COMCOMP us_renamenp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2135 0, x_(" \t"), M_("new name for object"), 0};
2136 COMCOMP us_renamecp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2137 0, x_(" \t"), M_("which type of object(s) do you want renamed"), 0};
2138
2139 /* the "replace" command */
2140 extern COMCOMP replacesp;
2141 static KEYWORD replacesopt[] =
2142 {
2143 {x_("universally"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2144 {x_("this-cell"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2145 {x_("this-library"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2146 {x_("connected"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2147 {x_("nodes-too"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2148 {x_("ignore-port-names"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2149 {x_("allow-missing-ports"), 1,{&replacesp,NOKEY,NOKEY,NOKEY,NOKEY}},
2150 TERMKEY
2151 };
2152 COMCOMP replacesp = {replacesopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2153 0, x_(" \t"), M_("replacement option"), 0};
2154 COMCOMP us_replacep = {NOKEYWORD, us_topofarcnodes, us_nextparse, NOPARAMS,
2155 INPUTOPT, x_(" \t"), M_("new prototype to use instead of this"), 0};
2156
2157 /* the "rotate" command */
2158 static KEYWORD rotatemopt[] =
2159 {
2160 {x_("sensibly"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2161 {x_("about-grab-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2162 {x_("about-trace-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2163 TERMKEY
2164 };
2165 static COMCOMP rotatemp = {rotatemopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2166 INPUTOPT, x_(" \t"), M_("rotation option"), 0};
2167 static KEYWORD rotateopt[] =
2168 {
2169 {x_("sensibly"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2170 {x_("about-grab-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2171 {x_("about-trace-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2172 {x_("more"), 1,{&rotatemp,NOKEY,NOKEY,NOKEY,NOKEY}},
2173 TERMKEY
2174 };
2175 static COMCOMP rotatep = {rotateopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2176 INPUTOPT, x_(" \t"), M_("rotation option"), 0};
2177 static KEYWORD rotateaopt[] =
2178 {
2179 {x_("interactively"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2180 TERMKEY
2181 };
2182 static COMCOMP rotateap = {rotateaopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2183 INPUTOPT, x_(" \t"), M_("new angle or angle increment"), 0};
2184
2185 /* the "show" command */
2186 static COMCOMP showbpp = {NOKEYWORD, us_topofpopupmenu, us_nextparse, NOPARAMS,
2187 INPUTOPT, x_(" \t"), M_("Popup menu to display"), 0};
2188 static KEYWORD showbopt[] =
2189 {
2190 {x_("short"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2191 {x_("all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2192 {x_("key"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2193 {x_("menu"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2194 {x_("button"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2195 {x_("popup"), 1,{&showbpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2196 TERMKEY
2197 };
2198 static COMCOMP showbp = {showbopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2199 INPUTOPT, x_(" \t"), M_("binding information to show"), 0};
2200 static KEYWORD showeopt[] =
2201 {
2202 {x_("authors"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2203 TERMKEY
2204 };
2205 COMCOMP us_showep = {showeopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2206 INPUTOPT, x_(" \t"), M_("option to list authors"), 0};
2207 static KEYWORD showropt[] =
2208 {
2209 {x_("current"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2210 {x_("next"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2211 {x_("last"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2212 TERMKEY
2213 };
2214 COMCOMP us_showrp = {showropt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2215 INPUTOPT, x_(" \t"), M_("error to show"), 0};
2216 static COMCOMP showclp = {NOKEYWORD, topoflibs, nextlibs, NOPARAMS,
2217 INPUTOPT, x_(" \t"), M_("library to show"), 0};
2218 static COMCOMP showcmp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2219 INPUTOPT, x_(" \t"), M_("cell names to show (with wildcards)"), 0};
2220 extern COMCOMP showcp;
2221 static KEYWORD showcopt[] =
2222 {
2223 {x_("library"), 2,{&showclp,&showcp,NOKEY,NOKEY,NOKEY}},
2224 {x_("matching"), 2,{&showcmp,&showcp,NOKEY,NOKEY,NOKEY}},
2225 TERMKEY
2226 };
2227 COMCOMP showcp = {showcopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2228 INPUTOPT, x_(" \t"), M_("cell listing option"), 0};
2229 COMCOMP us_showdp = {NOKEYWORD, topofcells, nextcells, NOPARAMS,
2230 INPUTOPT, x_(" \t"), M_("name of cell to show dates"), 0};
2231 static COMCOMP showfmp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2232 INPUTOPT, x_(" \t"), M_("cell names to show (with wildcards)"), 0};
2233 static COMCOMP showfdp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2234 INPUTOPT, x_(" \t"), M_("file to create with cell information"), 0};
2235 extern COMCOMP showfep;
2236 static KEYWORD showfeopt[] =
2237 {
2238 {x_("dates"), 1,{&showfep,NOKEY,NOKEY,NOKEY,NOKEY}},
2239 {x_("library"), 2,{&showclp,&showfep,NOKEY,NOKEY,NOKEY}},
2240 {x_("edit"), 1,{&showfep,NOKEY,NOKEY,NOKEY,NOKEY}},
2241 {x_("matching"), 2,{&showfmp,&showfep,NOKEY,NOKEY,NOKEY}},
2242 TERMKEY
2243 };
2244 COMCOMP showfep = {showfeopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2245 INPUTOPT, x_(" \t"), M_("cell listing"), 0};
2246 static KEYWORD showfopt[] =
2247 {
2248 {x_("placeholders"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2249 {x_("graphically"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2250 {x_("from-here-graphically"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2251 {x_("contained-in-this"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2252 {x_("recursive-nodes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2253 {x_("not-below"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2254 {x_("dates"), 1,{&showfep,NOKEY,NOKEY,NOKEY,NOKEY}},
2255 {x_("file"), 2,{&showfdp,&showfep,NOKEY,NOKEY,NOKEY}},
2256 {x_("library"), 2,{&showclp,&showfep,NOKEY,NOKEY,NOKEY}},
2257 {x_("edit"), 1,{&showfep,NOKEY,NOKEY,NOKEY,NOKEY}},
2258 {x_("matching"), 2,{&showfmp,&showfep,NOKEY,NOKEY,NOKEY}},
2259 TERMKEY
2260 };
2261 COMCOMP us_showfp = {showfopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2262 INPUTOPT, x_(" \t"), M_("cell listing option"), 0};
2263 static COMCOMP showmp = {NOKEYWORD, us_topofmacros, us_nextparse, NOPARAMS,
2264 INPUTOPT, x_(" \t"), M_("macro to show"), 0};
2265 static KEYWORD showoopt[] =
2266 {
2267 {x_("short"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2268 {x_("long"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2269 TERMKEY
2270 };
2271 COMCOMP us_showop = {showoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2272 INPUTOPT, x_(" \t"), M_("amount of information to describe about found object(s)"), 0};
2273 extern COMCOMP showpp;
2274 static KEYWORD showpopt[] =
2275 {
2276 {x_("clock"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2277 {x_("input"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2278 {x_("output"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2279 {x_("bidirectional"),1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2280 {x_("power"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2281 {x_("ground"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2282 {x_("generic"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2283 {x_("reference"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2284 {x_("all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2285 TERMKEY
2286 };
2287 COMCOMP showpp = {showpopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2288 INPUTOPT, x_(" \t"), M_("port type to be shown"), 0};
2289 static COMCOMP showhp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2290 INPUTOPT, x_(" \t"), M_("which batch do you wish to examine"), M_("all")};
2291 COMCOMP us_showup = {NOKEYWORD, topofcells, nextcells, NOPARAMS,
2292 INPUTOPT, x_(" \t"), M_("name of cell to show usage"), 0};
2293 static COMCOMP showvp = {NOKEYWORD, topofcells, nextcells, NOPARAMS,
2294 INPUTOPT, x_(" \t"), M_("cell whose views are to be shown"), 0};
2295 static KEYWORD showopt[] =
2296 {
2297 {x_("tools"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2298 {x_("bindings"), 1,{&showbp,NOKEY,NOKEY,NOKEY,NOKEY}},
2299 {x_("cells"), 1,{&us_showfp,NOKEY,NOKEY,NOKEY,NOKEY}},
2300 {x_("coverage"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2301 {x_("dates"), 1,{&us_showdp,NOKEY,NOKEY,NOKEY,NOKEY}},
2302 {x_("environment"), 1,{&us_showep,NOKEY,NOKEY,NOKEY,NOKEY}},
2303 {x_("error"), 1,{&us_showrp,NOKEY,NOKEY,NOKEY,NOKEY}},
2304 {x_("history"), 1,{&showhp,NOKEY,NOKEY,NOKEY,NOKEY}},
2305 {x_("libraries"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2306 {x_("macros"), 1,{&showmp,NOKEY,NOKEY,NOKEY,NOKEY}},
2307 {x_("networks"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2308 {x_("object"), 1,{&us_showop,NOKEY,NOKEY,NOKEY,NOKEY}},
2309 {x_("ports"), 1,{&showpp,NOKEY,NOKEY,NOKEY,NOKEY}},
2310 {x_("primitives"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2311 {x_("solvers"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2312 {x_("technologies"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2313 {x_("usage"), 1,{&us_showup,NOKEY,NOKEY,NOKEY,NOKEY}},
2314 {x_("views"), 1,{&showvp,NOKEY,NOKEY,NOKEY,NOKEY}},
2315 TERMKEY
2316 };
2317 COMCOMP us_showp = {showopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2318 0, x_(" \t"), M_("information to show"), 0};
2319
2320 /* the "size" command */
2321 COMCOMP us_sizeyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2322 0, x_(" \t"), M_("new Y size of node"), 0};
2323 COMCOMP us_sizewp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2324 0, x_(" \t"), M_("new width of arc"), 0};
us_paramsize(CHAR * word,COMCOMP * arr[],CHAR breakc)2325 INTBIG us_paramsize(CHAR *word, COMCOMP *arr[], CHAR breakc)
2326 {
2327 REGISTER GEOM **list;
2328 REGISTER INTBIG i;
2329
2330 if (*word == 0) return(0);
2331
2332 /* if known keywords are used, no more parsing */
2333 if (namesame(word, x_("corner-fixed")) == 0 || namesame(word, x_("center-fixed")) == 0 ||
2334 namesame(word, x_("grab-point-fixed")) == 0 || namesame(word, x_("nodes")) == 0 ||
2335 namesame(word, x_("arcs")) == 0 || namesame(word, x_("use-transformation")) == 0) return(0);
2336
2337 /* get list of highlighted objects */
2338 list = us_gethighlighted(WANTARCINST|WANTNODEINST, 0, 0);
2339 if (list[0] == NOGEOM) return(0);
2340 for(i=0; list[i] != NOGEOM; i++) if (list[i]->entryisnode)
2341 {
2342 /* node found: get Y size too */
2343 arr[0] = &us_sizeyp;
2344 return(1);
2345 }
2346 return(0);
2347 }
2348 static KEYWORD sizexopt[] =
2349 {
2350 {x_("corner-fixed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2351 {x_("center-fixed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2352 {x_("grab-point-fixed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2353 {x_("nodes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2354 {x_("arcs"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2355 {x_("use-transformation"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2356 TERMKEY
2357 };
2358 COMCOMP us_sizep = {sizexopt, NOTOPLIST, NONEXTLIST, us_paramsize,
2359 INPUTOPT, x_(" \t"), M_("new width of arc, new X size of node, or option"), 0};
2360
2361 /* the "spread" command */
2362 static KEYWORD spreaddopt[] =
2363 {
2364 {x_("left"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2365 {x_("right"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2366 {x_("up"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2367 {x_("down"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2368 TERMKEY
2369 };
2370 COMCOMP us_spreaddp = {spreaddopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
2371 INPUTOPT, x_(" \t"), M_("direction in which to spread open layout"), 0};
2372 static COMCOMP spreadap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2373 0, x_(" \t"), M_("distance to spread open layout"), M_("design-rule spacing")};
2374
2375 /* the "system" command */
2376 static KEYWORD systemopt[] =
2377 {
2378 {x_("setstatusfont"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2379 #ifdef WIN32
2380 {x_("print"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2381 #endif
2382 TERMKEY
2383 };
2384 static COMCOMP systemp = {systemopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2385 0, x_(" \t"), M_("special system-dependent option"), 0};
2386
2387 /* the "technology" command */
2388 COMCOMP us_technologycnnp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2389 INPUTOPT, x_(" \t"), M_("new technology name"), 0};
2390 static COMCOMP technologyetlp = {NOKEYWORD, us_topofedtectech, us_nextparse,
2391 NOPARAMS, INPUTOPT, x_(" \t"), M_("technology to edit"), 0};
2392 static COMCOMP technologyeppp = {NOKEYWORD, NOTOPLIST, NONEXTLIST,
2393 NOPARAMS, INPUTOPT, x_(" \t"), M_("name of this port"), 0};
2394 static KEYWORD technologyepopt[] =
2395 {
2396 {x_("port"), 1,{&technologyeppp,NOKEY,NOKEY,NOKEY,NOKEY}},
2397 {x_("highlight"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2398 {x_("rectangle-filled"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2399 {x_("rectangle-outline"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2400 {x_("rectangle-crossed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2401 {x_("polygon-filled"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2402 {x_("polygon-outline"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2403 {x_("lines-solid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2404 {x_("lines-dotted"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2405 {x_("lines-dashed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2406 {x_("lines-thicker"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2407 {x_("circle-outline"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2408 {x_("circle-filled"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2409 {x_("circle-half"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2410 {x_("circle-arc"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2411 {x_("text"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2412 TERMKEY
2413 };
2414 static COMCOMP technologyepp = {technologyepopt, NOTOPLIST, NONEXTLIST,
2415 NOPARAMS, INPUTOPT, x_(" \t"), M_("shape/type of layer to create"), 0};
2416 static KEYWORD technologyclcopt[] =
2417 {
2418 {x_("none"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2419 {x_("transparent-1"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2420 {x_("transparent-2"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2421 {x_("transparent-3"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2422 {x_("transparent-4"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2423 {x_("transparent-5"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2424 {x_("white"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2425 {x_("black"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2426 {x_("red"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2427 {x_("blue"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2428 {x_("green"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2429 {x_("cyan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2430 {x_("magenta"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2431 {x_("yellow"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2432 {x_("gray"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2433 {x_("orange"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2434 {x_("purple"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2435 {x_("brown"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2436 {x_("light-gray"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2437 {x_("dark-gray"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2438 {x_("light-red"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2439 {x_("dark-red"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2440 {x_("light-green"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2441 {x_("dark-green"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2442 {x_("light-blue"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2443 {x_("dark-blue"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2444 TERMKEY
2445 };
2446 static COMCOMP technologyclcp = {technologyclcopt, NOTOPLIST, NONEXTLIST,
2447 NOPARAMS, INPUTOPT, x_(" \t"), M_("New color for this layer"), 0};
2448 static KEYWORD technologyclsopt[] =
2449 {
2450 {x_("solid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2451 {x_("patterned"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2452 {x_("patterned/outlined"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2453 TERMKEY
2454 };
2455 static COMCOMP technologyclsp = {technologyclsopt, NOTOPLIST, NONEXTLIST,
2456 NOPARAMS, INPUTOPT, x_(" \t"), M_("New style for this layer"), 0};
2457 static COMCOMP technologyclip = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2458 INPUTOPT, x_(" \t"), M_("CIF symbol for this layer"), 0};
2459 static COMCOMP technologycldp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2460 INPUTOPT, x_(" \t"), M_("DXF name(s) for this layer"), 0};
2461 static COMCOMP technologyclgp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2462 INPUTOPT, x_(" \t"), M_("GDS-II numbers for this layer"), 0};
2463 static COMCOMP technologyclsrp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2464 INPUTOPT, x_(" \t"), M_("SPICE resistance for this layer"), 0};
2465 static COMCOMP technologyclscp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2466 INPUTOPT, x_(" \t"), M_("SPICE capacitance for this layer"), 0};
2467 static COMCOMP technologyclsecp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2468 INPUTOPT, x_(" \t"), M_("SPICE edge capacitance for this layer"), 0};
2469 static COMCOMP technologycldmw = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2470 INPUTOPT, x_(" \t"), M_("DRC minimum width for this layer"), 0};
2471 static COMCOMP technologycl3dh = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2472 INPUTOPT, x_(" \t"), M_("3D height for this layer"), 0};
2473 static COMCOMP technologycl3dt = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2474 INPUTOPT, x_(" \t"), M_("3D thickness for this layer"), 0};
2475 static COMCOMP technologyclpcrp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2476 INPUTOPT, x_(" \t"), M_("red value"), x_("")};
2477 static COMCOMP technologyclpcgp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2478 INPUTOPT, x_(" \t"), M_("green value"), x_("")};
2479 static COMCOMP technologyclpcbp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2480 INPUTOPT, x_(" \t"), M_("blue value"), x_("")};
2481 static COMCOMP technologyclpcop = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2482 INPUTOPT, x_(" \t"), M_("opacity value"), x_("")};
2483 static KEYWORD technologyclpcfopt[] =
2484 {
2485 {x_("on"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2486 {x_("off"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2487 TERMKEY
2488 };
2489 static COMCOMP technologyclpcfp = {technologyclpcfopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2490 INPUTOPT, x_(" \t"), M_("foreground value"), x_("")};
2491 static KEYWORD technologyclpcopt[] =
2492 {
2493 {x_("red"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2494 {x_("green"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2495 {x_("blue"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2496 {x_("opacity"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2497 {x_("foreground"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2498 TERMKEY
2499 };
us_paramsedtecpcol(CHAR * word,COMCOMP * arr[],CHAR breakc)2500 INTBIG us_paramsedtecpcol(CHAR *word, COMCOMP *arr[], CHAR breakc)
2501 {
2502 REGISTER NODEINST *ni;
2503 REGISTER VARIABLE *var;
2504 INTBIG r, g, b, o, f;
2505 HIGHLIGHT high;
2506 static CHAR technologycpbpdef[20];
2507
2508 if (*word == 0) return(0);
2509
2510 /* get the currently highlighted node */
2511 var = getvalkey((INTBIG)us_tool, VTOOL, VSTRING|VISARRAY, us_highlightedkey);
2512 if (var == NOVARIABLE) return(0);
2513 if (getlength(var) != 1) return(0);
2514 (void)us_makehighlight(((CHAR **)var->addr)[0], &high);
2515 if (((high.status&HIGHTYPE) != HIGHFROM && (high.status&HIGHTYPE) != HIGHTEXT)) return(0);
2516 if (!high.fromgeom->entryisnode) return(0);
2517 ni = high.fromgeom->entryaddr.ni;
2518 var = getvalkey((INTBIG)ni, VNODEINST, VSTRING, art_messagekey);
2519 us_teceditgetprintcol(var, &r, &g, &b, &o, &f);
2520
2521 if (namesame(word, x_("red")) == 0)
2522 {
2523 arr[0] = &technologyclpcrp;
2524 technologyclpcrp.def = technologycpbpdef;
2525 (void)esnprintf(technologycpbpdef, 20, x_("%ld"), r);
2526 return(1);
2527 }
2528
2529 if (namesame(word, x_("green")) == 0)
2530 {
2531 arr[0] = &technologyclpcgp;
2532 technologyclpcgp.def = technologycpbpdef;
2533 (void)esnprintf(technologycpbpdef, 20, x_("%ld"), g);
2534 return(1);
2535 }
2536
2537 if (namesame(word, x_("blue")) == 0)
2538 {
2539 arr[0] = &technologyclpcbp;
2540 technologyclpcbp.def = technologycpbpdef;
2541 (void)esnprintf(technologycpbpdef, 20, x_("%ld"), b);
2542 return(1);
2543 }
2544
2545 if (namesame(word, x_("opacity")) == 0)
2546 {
2547 arr[0] = &technologyclpcop;
2548 technologyclpcop.def = technologycpbpdef;
2549 (void)esnprintf(technologycpbpdef, 20, x_("%ld"), o);
2550 return(1);
2551 }
2552
2553 if (namesame(word, x_("foreground")) == 0)
2554 {
2555 arr[0] = &technologyclpcfp;
2556 technologyclpcfp.def = technologycpbpdef;
2557 if (f == 0) estrcpy(technologycpbpdef, x_("off")); else
2558 estrcpy(technologycpbpdef, x_("on"));
2559 return(1);
2560 }
2561 return(0);
2562 }
2563 static COMCOMP technologyclpct = {technologyclpcopt, NOTOPLIST, NONEXTLIST, us_paramsedtecpcol,
2564 INPUTOPT, x_(" \t"), M_("Print colors for this layer"), 0};
2565
2566 static KEYWORD technologyclfopt[] =
2567 {
2568 {x_("unknown"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2569 {x_("metal-1"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2570 {x_("metal-2"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2571 {x_("metal-3"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2572 {x_("metal-4"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2573 {x_("metal-5"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2574 {x_("metal-6"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2575 {x_("metal-7"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2576 {x_("metal-8"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2577 {x_("metal-9"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2578 {x_("metal-10"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2579 {x_("metal-11"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2580 {x_("metal-12"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2581 {x_("poly-1"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2582 {x_("poly-2"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2583 {x_("poly-3"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2584 {x_("gate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2585 {x_("diffusion"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2586 {x_("implant"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2587 {x_("contact-1"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2588 {x_("contact-2"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2589 {x_("contact-3"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2590 {x_("contact-4"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2591 {x_("contact-5"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2592 {x_("contact-6"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2593 {x_("contact-7"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2594 {x_("contact-8"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2595 {x_("contact-9"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2596 {x_("contact-10"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2597 {x_("contact-11"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2598 {x_("contact-12"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2599 {x_("plug"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2600 {x_("overglass"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2601 {x_("resistor"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2602 {x_("capacitor"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2603 {x_("transistor"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2604 {x_("emitter"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2605 {x_("base"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2606 {x_("collector"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2607 {x_("substrate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2608 {x_("well"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2609 {x_("guard"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2610 {x_("isolation"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2611 {x_("bus"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2612 {x_("art"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2613 {x_("control"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2614 {x_("p-type"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2615 {x_("n-type"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2616 {x_("depletion"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2617 {x_("enhancement"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2618 {x_("light"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2619 {x_("heavy"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2620 {x_("pseudo"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2621 {x_("nonelectrical"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2622 {x_("connects-metal"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2623 {x_("connects-poly"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2624 {x_("connects-diff"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2625 {x_("inside-transistor"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2626 TERMKEY
2627 };
2628 static COMCOMP technologyclfp = {technologyclfopt, NOTOPLIST, NONEXTLIST,
2629 NOPARAMS, INPUTOPT, x_(" \t"), M_("New function for this layer"), 0};
2630 static COMCOMP technologycllp = {NOKEYWORD, NOTOPLIST, NONEXTLIST,
2631 NOPARAMS, INPUTOPT, x_(" \t"), M_("Letter to identify this layer"), 0};
2632 static KEYWORD technologyclropt[] =
2633 {
2634 {x_("Clear Pattern"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2635 {x_("Invert Pattern"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2636 {x_("Copy Pattern"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2637 {x_("Paste Pattern"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2638 TERMKEY
2639 };
2640 static COMCOMP technologyclrp = {technologyclropt, NOTOPLIST, NONEXTLIST,
2641 NOPARAMS, INPUTOPT, x_(" \t"), M_("control of the layer pattern"), 0};
2642 static COMCOMP technologyclasp = {NOKEYWORD, us_topofedtecslay, us_nextparse,
2643 NOPARAMS, INPUTOPT, x_(" \t"), M_("new layer for this patch"), 0};
2644 static COMCOMP technologyclacp = {NOKEYWORD, us_topofedtecclay, us_nextparse,
2645 NOPARAMS, INPUTOPT, x_(" \t"), M_("new layer for this patch"), 0};
2646 static COMCOMP technologycafp = {NOKEYWORD, us_topofarcfun, us_nextparse,
2647 NOPARAMS, INPUTOPT, x_(" \t"), M_("New function for this arc"), 0};
2648 static COMCOMP technologycamp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2649 INPUTOPT, x_(" \t"), M_("Is this arc fixed-angle by default"), 0};
2650 static COMCOMP technologycawp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2651 INPUTOPT, x_(" \t"), M_("Does this arc erase connecting pins"), 0};
2652 static COMCOMP technologycanp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2653 INPUTOPT, x_(" \t"), M_("Does this arc extend beyond its endpoints"), 0};
2654 static COMCOMP technologycaip = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2655 INPUTOPT, x_(" \t"), M_("Prefered angle increment for this arc"), 0};
2656 static COMCOMP technologycnfp = {NOKEYWORD, us_topofnodefun, us_nextparse,
2657 NOPARAMS, INPUTOPT, x_(" \t"), M_("New function for this node"), 0};
2658 static COMCOMP technologycnsp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2659 INPUTOPT, x_(" \t"), M_("Is this node a serpentine transistor"), 0};
2660 static COMCOMP technologycnsqp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2661 INPUTOPT, x_(" \t"), M_("Is this node square"), 0};
2662 static COMCOMP technologycnwp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2663 INPUTOPT, x_(" \t"), M_("Is this node invisible with 1 or 2 arcs"), 0};
2664 static COMCOMP technologycnlp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2665 INPUTOPT, x_(" \t"), M_("Can this node be locked"), 0};
2666 static COMCOMP technologycnmp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2667 INPUTOPT, x_(" \t"), M_("Separation of multiple cuts for this node"), 0};
2668 static COMCOMP technologyctlp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2669 INPUTOPT, x_(" \t"), M_("New value of Lambda for this technology"), 0};
2670 COMCOMP us_technologyctdp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2671 INPUTOPT, x_(" \t"), M_("New description of this technology"), 0};
2672 static COMCOMP technologycpynp = {yesnoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2673 INPUTOPT, x_(" \t"), M_("new value"), M_("yes")};
2674 static COMCOMP technologycpbp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2675 INPUTOPT, x_(" \t"), M_("new value"), x_(" ")};
us_paramsedtecport(CHAR * word,COMCOMP * arr[],CHAR breakc)2676 INTBIG us_paramsedtecport(CHAR *word, COMCOMP *arr[], CHAR breakc)
2677 {
2678 REGISTER NODEINST *ni;
2679 REGISTER NODEPROTO *np;
2680 REGISTER VARIABLE *var;
2681 REGISTER INTBIG len, j;
2682 HIGHLIGHT high;
2683 static CHAR technologycpynpdef[4];
2684 static CHAR technologycpbpdef[20];
2685
2686 if (*word == 0) return(0);
2687
2688 /* get the currently highlighted node */
2689 var = getvalkey((INTBIG)us_tool, VTOOL, VSTRING|VISARRAY, us_highlightedkey);
2690 if (var == NOVARIABLE) return(0);
2691 if (getlength(var) != 1) return(0);
2692 (void)us_makehighlight(((CHAR **)var->addr)[0], &high);
2693 if (((high.status&HIGHTYPE) != HIGHFROM && (high.status&HIGHTYPE) != HIGHTEXT)) return(0);
2694 if (!high.fromgeom->entryisnode) return(0);
2695 ni = high.fromgeom->entryaddr.ni;
2696
2697 if (namesame(word, x_("PORT-ANGLE")) == 0)
2698 {
2699 technologycpbp.def = technologycpbpdef;
2700 var = getval((INTBIG)ni, VNODEINST, VINTEGER, x_("EDTEC_portangle"));
2701 if (var != NOVARIABLE) (void)esnprintf(technologycpbp.def, 7, x_("%ld"), var->addr); else
2702 (void)estrcpy(technologycpbp.def, x_("0"));
2703 arr[0] = &technologycpbp;
2704 return(1);
2705 }
2706
2707 if (namesame(word, x_("PORT-ANGLE-RANGE")) == 0)
2708 {
2709 technologycpbp.def = technologycpbpdef;
2710 var = getval((INTBIG)ni, VNODEINST, VINTEGER, x_("EDTEC_portrange"));
2711 if (var != NOVARIABLE) (void)esnprintf(technologycpbp.def, 7, x_("%ld"), var->addr); else
2712 (void)estrcpy(technologycpbp.def, x_("180"));
2713 arr[0] = &technologycpbp;
2714 return(1);
2715 }
2716
2717 /* see if this is an arc that was named */
2718 for(np = el_curlib->firstnodeproto; np != NONODEPROTO; np = np->nextnodeproto)
2719 if (namesamen(np->protoname, x_("arc-"), 4) == 0 &&
2720 namesame(&np->protoname[4], word) == 0) break;
2721 if (np == NONODEPROTO) return(0);
2722
2723 /* get information about this node */
2724 technologycpynp.def = technologycpynpdef;
2725 (void)estrcpy(technologycpynp.def, x_("no"));
2726 arr[0] = &technologycpynp;
2727 var = getval((INTBIG)ni, VNODEINST, VNODEPROTO|VISARRAY, x_("EDTEC_connects"));
2728 if (var != NOVARIABLE)
2729 {
2730 len = getlength(var);
2731 for(j=0; j<len; j++) if (((NODEPROTO **)var->addr)[j] == np)
2732 {
2733 (void)estrcpy(technologycpynp.def, x_("yes"));
2734 break;
2735 }
2736 }
2737 return(1);
2738 }
2739 static COMCOMP technologycpp = {NOKEYWORD, us_topofedtecport, us_nextparse,
2740 us_paramsedtecport, INPUTOPT|MULTIOPT, x_(" \t"), M_("options for this port"), 0};
2741 COMCOMP us_technologyeenp = {NOKEYWORD, us_topofedtecnode, us_nextparse,
2742 NOPARAMS, INPUTOPT|INCLUDENOISE, x_(" \t"), M_("node in technology to edit"), 0};
2743 COMCOMP us_technologyeeap = {NOKEYWORD, us_topofedtecarc, us_nextparse,
2744 NOPARAMS, INPUTOPT|INCLUDENOISE, x_(" \t"), M_("arc in technology to edit"), 0};
2745 COMCOMP us_technologyeelp = {NOKEYWORD, us_topofedteclay, us_nextparse,
2746 NOPARAMS, INPUTOPT|INCLUDENOISE, x_(" \t"), M_("layer in technology to edit"), 0};
2747 COMCOMP us_technologyedlp = {NOKEYWORD,topoflibs,nextlibs,us_nexttechnologyedlp,
2748 0, x_(" \t"), M_("argument to be echoed"), 0};
us_nexttechnologyedlp(CHAR * i,COMCOMP * j[],CHAR c)2749 INTBIG us_nexttechnologyedlp(CHAR *i, COMCOMP *j[], CHAR c)
2750 { j[0] = &us_technologyedlp; return(1); }
2751 static KEYWORD technologyeopt[] =
2752 {
2753 {x_("library-to-tech-and-C"), 1,{&us_technologycnnp,NOKEY,NOKEY,NOKEY,NOKEY}},
2754 {x_("library-to-tech-and-Java"), 1,{&us_technologycnnp,NOKEY,NOKEY,NOKEY,NOKEY}},
2755 {x_("library-to-tech"), 1,{&us_technologycnnp,NOKEY,NOKEY,NOKEY,NOKEY}},
2756 {x_("tech-to-library"), 1,{&technologyetlp,NOKEY,NOKEY,NOKEY,NOKEY}},
2757 {x_("inquire-layer"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2758 {x_("place-layer"), 1,{&technologyepp,NOKEY,NOKEY,NOKEY,NOKEY}},
2759 {x_("change"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2760 {x_("compact-current-cell"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2761 {x_("edit-node"), 1,{&us_technologyeenp,NOKEY,NOKEY,NOKEY,NOKEY}},
2762 {x_("edit-arc"), 1,{&us_technologyeeap,NOKEY,NOKEY,NOKEY,NOKEY}},
2763 {x_("edit-layer"), 1,{&us_technologyeelp,NOKEY,NOKEY,NOKEY,NOKEY}},
2764 {x_("edit-subsequent"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2765 {x_("edit-colors"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2766 {x_("edit-design-rules"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2767 {x_("edit-misc-information"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2768 {x_("identify-layers"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2769 {x_("identify-ports"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2770 {x_("dependent-libraries"), 1,{&us_technologyedlp,NOKEY,NOKEY,NOKEY,NOKEY}},
2771 {x_("reorder-arcs"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2772 {x_("reorder-nodes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2773 {x_("reorder-layers"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2774 TERMKEY
2775 };
us_paramtechnology(CHAR * word,COMCOMP * arr[],CHAR breakc)2776 INTBIG us_paramtechnology(CHAR *word, COMCOMP *arr[], CHAR breakc)
2777 {
2778 REGISTER NODEINST *ni;
2779 REGISTER INTBIG ind, i, count;
2780 HIGHLIGHT high;
2781 REGISTER VARIABLE *var;
2782
2783 if (*word == 0) return(0);
2784 if (namesame(word, x_("change")) != 0)
2785 {
2786 /* handle normal parameter addition if not the "change" option */
2787 for(ind=0; technologyeopt[ind].name != 0; ind++)
2788 if (namesame(word, technologyeopt[ind].name) == 0) break;
2789 if (technologyeopt[ind].name == 0) return(0);
2790 count = technologyeopt[ind].params;
2791 for(i=0; i<count; i++) arr[i] = technologyeopt[ind].par[i];
2792 return(count);
2793 }
2794
2795 /* "change": get the currently highlighted node */
2796 if ((el_curwindowpart->state&WINDOWOUTLINEEDMODE) != 0) return(0);
2797 var = getvalkey((INTBIG)us_tool, VTOOL, VSTRING|VISARRAY, us_highlightedkey);
2798 if (var == NOVARIABLE) return(0);
2799 if (getlength(var) != 1) return(0);
2800 (void)us_makehighlight(((CHAR **)var->addr)[0], &high);
2801 if (((high.status&HIGHTYPE) != HIGHFROM && (high.status&HIGHTYPE) != HIGHTEXT)) return(0);
2802 if (!high.fromgeom->entryisnode) return(0);
2803 ni = high.fromgeom->entryaddr.ni;
2804 switch (us_tecedgetoption(ni))
2805 {
2806 case ARCFIXANG: arr[0] = &technologycamp; return(1);
2807 case ARCFUNCTION: arr[0] = &technologycafp; return(1);
2808 case ARCINC: arr[0] = &technologycaip; return(1);
2809 case ARCNOEXTEND: arr[0] = &technologycanp; return(1);
2810 case ARCWIPESPINS: arr[0] = &technologycawp; return(1);
2811 case LAYER3DHEIGHT: arr[0] = &technologycl3dh; return(1);
2812 case LAYER3DTHICK: arr[0] = &technologycl3dt; return(1);
2813 case LAYERPRINTCOL: arr[0] = &technologyclpct; return(1);
2814 case LAYERCIF: arr[0] = &technologyclip; return(1);
2815 case LAYERCOLOR: arr[0] = &technologyclcp; return(1);
2816 case LAYERDXF: arr[0] = &technologycldp; return(1);
2817 case LAYERDRCMINWID: arr[0] = &technologycldmw; return(1);
2818 case LAYERFUNCTION: arr[0] = &technologyclfp; return(1);
2819 case LAYERGDS: arr[0] = &technologyclgp; return(1);
2820 case LAYERLETTERS: arr[0] = &technologycllp; return(1);
2821 case LAYERPATCONT: arr[0] = &technologyclrp; return(1);
2822 case LAYERPATCH:
2823 var = getval((INTBIG)ni, VNODEINST, VSTRING, x_("EDTEC_minbox"));
2824 if (var == NOVARIABLE) arr[0] = &technologyclasp; else
2825 arr[0] = &technologyclacp;
2826 return(1);
2827 case LAYERSPICAP: arr[0] = &technologyclscp; return(1);
2828 case LAYERSPIECAP: arr[0] = &technologyclsecp; return(1);
2829 case LAYERSPIRES: arr[0] = &technologyclsrp; return(1);
2830 case LAYERSTYLE: arr[0] = &technologyclsp; return(1);
2831 case NODEFUNCTION: arr[0] = &technologycnfp; return(1);
2832 case NODELOCKABLE: arr[0] = &technologycnlp; return(1);
2833 case NODEMULTICUT: arr[0] = &technologycnmp; return(1);
2834 case NODESERPENTINE: arr[0] = &technologycnsp; return(1);
2835 case NODESQUARE: arr[0] = &technologycnsqp; return(1);
2836 case NODEWIPES: arr[0] = &technologycnwp; return(1);
2837 case PORTOBJ: arr[0] = &technologycpp; return(1);
2838 case TECHDESCRIPT: arr[0] = &us_technologyctdp; return(1);
2839 case TECHLAMBDA: arr[0] = &technologyctlp; return(1);
2840 }
2841 return(0);
2842 }
2843 static COMCOMP technologyep = {technologyeopt, NOTOPLIST, NONEXTLIST,
2844 us_paramtechnology, INPUTOPT, x_(" \t"), M_("technology editing option"), 0};
2845 COMCOMP us_technologyup = {NOKEYWORD, topoftechs, nexttechs, NOPARAMS,
2846 INPUTOPT, x_(" \t"), M_("new technology to use"), 0};
2847 static COMCOMP technologykp = {NOKEYWORD, topoftechs, nexttechs, NOPARAMS,
2848 INPUTOPT, x_(" \t"), M_("technology to kill"), 0};
2849 static COMCOMP technologycp = {NOKEYWORD, topoftechs, nexttechs, NOPARAMS,
2850 0, x_(" \t"), M_("technology to which conversion is desired"), 0};
2851 static COMCOMP technologyap = {NOKEYWORD, NOTOPLIST, NONEXTLIST,
2852 us_paramtechnologyb, 0, x_(" \t"), M_("message for technology"), 0};
us_paramtechnologyb(CHAR * i,COMCOMP * j[],CHAR c)2853 INTBIG us_paramtechnologyb(CHAR *i, COMCOMP *j[], CHAR c)
2854 { j[0]= &technologyap; return(1); }
us_paramtechnologya(CHAR * pt,COMCOMP * j[],CHAR c)2855 INTBIG us_paramtechnologya(CHAR *pt, COMCOMP *j[], CHAR c)
2856 {
2857 REGISTER TECHNOLOGY *t;
2858
2859 t = gettechnology(pt);
2860 if (t != NOTECHNOLOGY)
2861 {
2862 j[0] = t->parse;
2863 if (j[0] != NOCOMCOMP) return(1);
2864 }
2865 return(us_paramtechnologyb(pt, j, c));
2866 }
2867 COMCOMP us_technologytp = {NOKEYWORD, topoftechs, nexttechs,
2868 us_paramtechnologya, INPUTOPT, x_(" \t"), M_("technology to direct"), 0};
2869 static COMCOMP technologydp = {NOKEYWORD, topoftechs, nexttechs,
2870 NOPARAMS, INPUTOPT, x_(" \t"), M_("technology to document"), 0};
2871 static KEYWORD technologyasopt[] =
2872 {
2873 {x_("on"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2874 {x_("off"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2875 TERMKEY
2876 };
2877 static COMCOMP technologyasp = {technologyasopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2878 INPUTOPT, x_(" \t"), M_("technology auto-switching option"), 0};
2879 static KEYWORD technologyopt[] =
2880 {
2881 {x_("use"), 1,{&us_technologyup,NOKEY,NOKEY,NOKEY,NOKEY}},
2882 {x_("convert"), 1,{&technologycp,NOKEY,NOKEY,NOKEY,NOKEY}},
2883 {x_("tell"), 1,{&us_technologytp,NOKEY,NOKEY,NOKEY,NOKEY}},
2884 {x_("edit"), 1,{&technologyep,NOKEY,NOKEY,NOKEY,NOKEY}},
2885 {x_("kill"), 1,{&technologykp,NOKEY,NOKEY,NOKEY,NOKEY}},
2886 {x_("document"), 1,{&technologydp,NOKEY,NOKEY,NOKEY,NOKEY}},
2887 {x_("autoswitch"), 1,{&technologyasp,NOKEY,NOKEY,NOKEY,NOKEY}},
2888 TERMKEY
2889 };
2890 COMCOMP us_technologyp = {technologyopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
2891 0, x_(" \t"), M_("technology option"), 0};
2892
2893 /* the "telltool" command */
2894 static COMCOMP telltoolap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,us_paramtelltoolb,
2895 0, x_(" \t"), M_("message to be sent to tool"), 0};
us_paramtelltoolb(CHAR * i,COMCOMP * j[],CHAR c)2896 INTBIG us_paramtelltoolb(CHAR *i, COMCOMP *j[], CHAR c)
2897 { j[0]= &telltoolap; return(1); }
us_paramtelltoola(CHAR * pt,COMCOMP * j[],CHAR c)2898 INTBIG us_paramtelltoola(CHAR *pt, COMCOMP *j[], CHAR c)
2899 {
2900 REGISTER INTBIG i;
2901
2902 i = parse(pt, &offtoolp, FALSE);
2903 if (i >= 0)
2904 {
2905 j[0] = el_tools[i].parse;
2906 if (j[0] != NOCOMCOMP) return(1);
2907 }
2908 return(us_paramtelltoolb(pt, j, c));
2909 }
2910 COMCOMP us_telltoolp = {NOKEYWORD, topoftools, nexttools, us_paramtelltoola,
2911 INPUTOPT, x_(" \t"), M_("tool to instruct"), 0};
2912 COMCOMP us_userp = {NOKEYWORD, us_topofcommands, us_nextparse, us_paramcommands,
2913 0, x_(" \t"), M_("Full Electric command"), 0};
2914
2915 /* the "terminal" command */
2916 static COMCOMP terminalvp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2917 INPUTOPT, x_(" \t"), M_("variable letter to fill"), 0};
2918 static COMCOMP terminalpp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2919 0, x_(" \t"), M_("prompt message"), 0};
2920 static COMCOMP terminaltp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
2921 0, x_(" \t"), M_("type of input ('cell', etc.)"), 0};
2922 static COMCOMP terminalsfp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
2923 INPUTOPT, x_(" \t"), M_("number of keystrokes between recording checkpoints"), 0};
2924 static COMCOMP terminalspp = {NOKEYWORD, topoffile, nextfile, NOPARAMS,
2925 INPUTOPT, x_(" \t"), M_("session playback file"), 0};
2926 static KEYWORD terminalspaopt[] =
2927 {
2928 {x_("all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2929 TERMKEY
2930 };
2931 static COMCOMP terminalspap = {terminalspaopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2932 INPUTOPT, x_(" \t"), M_("session playback option"), 0};
2933 static KEYWORD terminalsopt[] =
2934 {
2935 {x_("playback"), 2,{&terminalspp,&terminalspap,NOKEY,NOKEY,NOKEY}},
2936 {x_("begin-record"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2937 {x_("end-record"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2938 {x_("rewind-record"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2939 {x_("checkpoint-frequency"), 1,{&terminalsfp,NOKEY,NOKEY,NOKEY,NOKEY}},
2940 TERMKEY
2941 };
2942 static COMCOMP terminalsp = {terminalsopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2943 INPUTOPT, x_(" \t"), M_("session logging option"), 0};
2944 static KEYWORD terminalnopt[] =
2945 {
2946 {x_("lock-keys-on-error"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2947 {x_("only-informative-messages"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2948 {x_("use-electric-commands"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2949 {x_("display-dialogs"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2950 {x_("permanent-menu-highlighting"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2951 {x_("track-cursor-coordinates"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2952 {x_("audit"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2953 {x_("enable-interrupts"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2954 {x_("beep"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2955 TERMKEY
2956 };
2957 static COMCOMP terminalnp = {terminalnopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2958 INPUTOPT, x_(" \t"), M_("terminal option to turn off"), 0};
2959 static KEYWORD terminalopt[] =
2960 {
2961 {x_("input"), 3,{&terminalvp,&terminalpp,&terminaltp,NOKEY,NOKEY}},
2962 {x_("session"), 1,{&terminalsp,NOKEY,NOKEY,NOKEY,NOKEY}},
2963 {x_("not"), 1,{&terminalnp,NOKEY,NOKEY,NOKEY,NOKEY}},
2964 {x_("lock-keys-on-error"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2965 {x_("only-informative-messages"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2966 {x_("use-electric-commands"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2967 {x_("display-dialogs"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2968 {x_("permanent-menu-highlighting"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2969 {x_("track-cursor-coordinates"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2970 {x_("get-location"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2971 {x_("audit"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2972 {x_("enable-interrupts"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2973 {x_("beep"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2974 {x_("clear"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2975 TERMKEY
2976 };
2977 static COMCOMP terminalp = {terminalopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
2978 0, x_(" \t"), M_("terminal control option"), 0};
2979
2980 /* the "text" command */
2981 static KEYWORD textsopt[] =
2982 {
2983 {x_("4p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2984 {x_("6p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2985 {x_("8p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2986 {x_("10p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2987 {x_("12p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2988 {x_("14p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2989 {x_("16p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2990 {x_("18p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2991 {x_("20p"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2992 {x_("hl"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2993 {x_("1l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2994 {x_("2l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2995 {x_("3l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2996 {x_("4l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2997 {x_("5l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2998 {x_("6l"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
2999 {x_("up"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3000 {x_("down"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3001 TERMKEY
3002 };
3003 COMCOMP us_textsp = {textsopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3004 INPUTOPT, x_(" \t"), M_("New size for highlighted text"), 0};
3005 COMCOMP us_textdsp = {textsopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3006 INPUTOPT, x_(" \t"), M_("Size for new text"), 0};
3007 KEYWORD us_texttopt[] =
3008 {
3009 {x_("centered"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3010 {x_("boxed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3011 {x_("up"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3012 {x_("down"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3013 {x_("left"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3014 {x_("right"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3015 {x_("up-left"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3016 {x_("up-right"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3017 {x_("down-left"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3018 {x_("down-right"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3019 TERMKEY
3020 };
3021 static KEYWORD textssopt[] =
3022 {
3023 {x_("none"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3024 {x_("inside"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3025 {x_("outside"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3026 TERMKEY
3027 };
3028 static COMCOMP texttp = {us_texttopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3029 INPUTOPT, x_(" \t"), M_("New style for highlighted text"), 0};
3030 static COMCOMP textdtp = {us_texttopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3031 INPUTOPT, x_(" \t"), M_("Style for new text"), 0};
3032 static COMCOMP textdhp = {textssopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3033 INPUTOPT, x_(" \t"), M_("Horizontal style for new text"), 0};
3034 static COMCOMP textdvp = {textssopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3035 INPUTOPT, x_(" \t"), M_("Vertical style for new text"), 0};
3036 static COMCOMP textep = {NOKEYWORD, us_topofeditor, us_nexteditor, NOPARAMS,
3037 INPUTOPT, x_(" \t"), M_("Editor to use for text"), 0};
3038 static COMCOMP textrp = {NOKEYWORD, topoffile, nextfile, NOPARAMS,
3039 INPUTOPT, x_(" \t"), M_("File to read into this cell"), 0};
3040 static COMCOMP textwp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3041 INPUTOPT, x_(" \t"), M_("File to write with this cell"), 0};
3042 COMCOMP us_textfp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3043 INPUTOPT, x_(" \t"), M_("String to find in text window"), 0};
3044 static KEYWORD textopt[] =
3045 {
3046 {x_("style"), 1,{&texttp,NOKEY,NOKEY,NOKEY,NOKEY}},
3047 {x_("size"), 1,{&us_textsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3048 {x_("default-style"), 1,{&textdtp,NOKEY,NOKEY,NOKEY,NOKEY}},
3049 {x_("default-horizontal-style"), 1,{&textdhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3050 {x_("default-vertical-style"), 1,{&textdvp,NOKEY,NOKEY,NOKEY,NOKEY}},
3051 {x_("default-node-size"), 1,{&us_textdsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3052 {x_("default-arc-size"), 1,{&us_textdsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3053 {x_("default-export-size"), 1,{&us_textdsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3054 {x_("default-nonlayout-text-size"), 1,{&us_textdsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3055 {x_("default-instance-size"), 1,{&us_textdsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3056 {x_("default-cell-size"), 1,{&us_textdsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3057 {x_("default-interior-only"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3058 {x_("default-exterior"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3059 {x_("editor"), 1,{&textep,NOKEY,NOKEY,NOKEY,NOKEY}},
3060 {x_("write"), 1,{&textwp,NOKEY,NOKEY,NOKEY,NOKEY}},
3061 {x_("read"), 1,{&textrp,NOKEY,NOKEY,NOKEY,NOKEY}},
3062 {x_("cut"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3063 {x_("copy"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3064 {x_("paste"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3065 {x_("find"), 1,{&us_textfp,NOKEY,NOKEY,NOKEY,NOKEY}},
3066 {x_("easy-text-selection"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3067 {x_("hard-text-selection"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3068 {x_("interior-only"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3069 {x_("exterior"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3070 TERMKEY
3071 };
3072 static COMCOMP textp = {textopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3073 0, x_(" \t"), M_("text manipulation option"), 0};
3074
3075 /* the "undo" command */
3076 static COMCOMP undorp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3077 INPUTOPT, x_(" \t"), M_("number of changes to redo"), M_("redo 1 major change")};
3078 static COMCOMP undosp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3079 INPUTOPT, x_(" \t"), M_("number of changes to save"), 0};
3080 static KEYWORD undoopt[] =
3081 {
3082 {x_("redo"), 1,{&undorp,NOKEY,NOKEY,NOKEY,NOKEY}},
3083 {x_("save"), 1,{&undosp,NOKEY,NOKEY,NOKEY,NOKEY}},
3084 {x_("clear"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3085 TERMKEY
3086 };
3087 static COMCOMP undop = {undoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3088 INPUTOPT, x_(" \t"), M_("number of changes to undo, or undo control option"),
3089 M_("undo 1 major change")};
3090
3091 /* the "var" command */
3092 static COMCOMP varmoddxp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3093 INPUTOPT, x_(" \t"), M_("X offset of variable"), 0};
3094 static COMCOMP varmoddyp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3095 0, x_(" \t"), M_("Y offset of variable"), 0};
3096 static COMCOMP varmoddsp = {us_texttopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
3097 0, x_(" \t"), M_("Text style of variable"), 0};
3098 static KEYWORD varmodopt[] =
3099 {
3100 {x_("lisp"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3101 {x_("tcl"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3102 {x_("java"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3103 {x_("display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3104 {x_("na-va-display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3105 {x_("in-na-va-display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3106 {x_("inall-na-va-display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3107 {x_("temporary"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3108 {x_("fractional"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3109 {x_("float"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3110 {x_("cannot-change"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3111 TERMKEY
3112 };
3113 static COMCOMP varmodp = {varmodopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
3114 0, x_(" \t"), M_("modifier to the variable"), 0};
3115 static KEYWORD varhcnopt[] =
3116 {
3117 {x_("language"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3118 {x_("display"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3119 {x_("temporary"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3120 {x_("cannot-change"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3121 {x_("interior-only"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3122 TERMKEY
3123 };
3124 static COMCOMP varhcnp = {varhcnopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
3125 INPUTOPT, x_(" \t"), M_("how to unchange the variable"), 0};
3126 static KEYWORD varhcopt[] =
3127 {
3128 {x_("not"), 1,{&varhcnp,NOKEY,NOKEY,NOKEY,NOKEY}},
3129 {x_("lisp"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3130 {x_("tcl"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3131 {x_("java"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3132 {x_("display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3133 {x_("na-va-display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3134 {x_("in-na-va-display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3135 {x_("inall-na-va-display"), 3,{&varmoddxp,&varmoddyp,&varmoddsp,NOKEY,NOKEY}},
3136 {x_("temporary"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3137 {x_("cannot-change"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3138 {x_("interior-only"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3139 TERMKEY
3140 };
3141 static COMCOMP varhcp = {varhcopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
3142 0, x_(" \t"), M_("how to change the variable"), 0};
3143 COMCOMP us_varvalp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3144 0, x_(" \t"), M_("new value of variable"), 0};
3145 COMCOMP us_varvalcp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3146 0, x_(" \t"), M_("this variable cannot be set!"), 0};
3147 static COMCOMP varupdp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
3148 0, x_(" \t"), M_("modification to variable"), 0};
3149 COMCOMP us_varvsp = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3150 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("variable name to set"), 0};
3151 COMCOMP us_varvep = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3152 NOFILL|INPUTOPT, x_(" \t"), M_("variable name to examine"), 0};
3153 static COMCOMP varvcp = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3154 NOFILL|INPUTOPT, x_(" \t"), M_("variable name to change"), 0};
3155 static COMCOMP varvpp = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3156 INPUTOPT, x_(" \t"), M_("variable to pick in menu"), 0};
3157 static COMCOMP varvtp = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3158 INPUTOPT|INCLUDENOISE, x_(" \t"), M_("variable to edit in window"), 0};
3159 static COMCOMP varqhp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
3160 0, x_(" \t"), M_("header string for edit window"), 0};
3161 static KEYWORD varqopt[] =
3162 {
3163 {x_("in-place"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3164 {x_("header"), 1,{&varqhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3165 TERMKEY
3166 };
3167 COMCOMP us_varqp = {varqopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3168 0, x_(" \t"), M_("text editing option"), 0};
3169 COMCOMP us_varvdp = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3170 NOFILL, x_(" \t"), M_("variable name to delete"), 0};
3171 COMCOMP us_varvmp = {NOKEYWORD,us_topofvars,us_nextvars,NOPARAMS,
3172 NOFILL|INPUTOPT, x_(" \t"), M_("variable name to modify"), 0};
3173 COMCOMP us_varbdp = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3174 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("variable name to set"), 0};
3175 COMCOMP us_varbs1p = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3176 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("first operand variable name"), 0};
3177 static COMCOMP varbs2p = {NOKEYWORD, us_topofvars, us_nextvars, NOPARAMS,
3178 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("second operand variable name"), 0};
3179 static COMCOMP varbs2tp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3180 NOFILL|INPUTOPT, x_(" \t"), M_("pattern matching string"), 0};
3181 static KEYWORD varbs2tyopt[] =
3182 {
3183 {x_("unknown"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3184 {x_("integer"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3185 {x_("short"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3186 {x_("fixed-point"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3187 {x_("address"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3188 {x_("character"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3189 {x_("string"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3190 {x_("float"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3191 {x_("double"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3192 {x_("nodeinst"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3193 {x_("nodeproto"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3194 {x_("cell"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3195 {x_("portarcinst"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3196 {x_("portexpinst"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3197 {x_("portproto"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3198 {x_("arcinst"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3199 {x_("arcproto"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3200 {x_("geometry"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3201 {x_("r-tree"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3202 {x_("library"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3203 {x_("technology"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3204 {x_("tool"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3205 {x_("network"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3206 {x_("view"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3207 {x_("window"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3208 {x_("graphics"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3209 {x_("constraint"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3210 {x_("general"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3211 TERMKEY
3212 };
3213 COMCOMP us_varbs2typ = {varbs2tyopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3214 NOFILL|INPUTOPT, x_(" \t"), M_("type to request"), 0};
3215 static KEYWORD varbopt[] =
3216 {
3217 {x_("set"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3218 {x_("concat"), 1,{&varbs2p,NOKEY,NOKEY,NOKEY,NOKEY}},
3219 {x_("type"), 1,{&us_varbs2typ,NOKEY,NOKEY,NOKEY,NOKEY}},
3220 {x_("select"), 1,{&varbs2p,NOKEY,NOKEY,NOKEY,NOKEY}},
3221 {x_("pattern"), 1,{&varbs2tp,NOKEY,NOKEY,NOKEY,NOKEY}},
3222 TERMKEY
3223 };
3224 COMCOMP varbop = {varbopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3225 0, x_(" \t"), M_("operator to perform on variables"), 0};
3226 static KEYWORD varoopt[] =
3227 {
3228 {x_("ignore"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3229 {x_("track"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3230 {x_("save"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3231 TERMKEY
3232 };
3233 COMCOMP us_varop = {varoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3234 0, x_(" \t"), M_("options control"), 0};
3235 static KEYWORD varopt[] =
3236 {
3237 {x_("options"), 1,{&us_varop,NOKEY,NOKEY,NOKEY,NOKEY}},
3238 {x_("set"), 3,{&us_varvsp,&us_varvalp,&varmodp,NOKEY,NOKEY}},
3239 {x_("examine"), 1,{&us_varvep,NOKEY,NOKEY,NOKEY,NOKEY}},
3240 {x_("change"), 2,{&varvcp,&varhcp,NOKEY,NOKEY,NOKEY}},
3241 {x_("delete"), 1,{&us_varvdp,NOKEY,NOKEY,NOKEY,NOKEY}},
3242 {x_("pick"), 1,{&varvpp,NOKEY,NOKEY,NOKEY,NOKEY}},
3243 {x_("textedit"), 2,{&varvtp,&us_varqp,NOKEY,NOKEY,NOKEY}},
3244 {x_("vector"), 3,{&us_varbdp,&us_varbs1p,&varbop,NOKEY,NOKEY}},
3245 {x_("+"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3246 {x_("-"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3247 {x_("*"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3248 {x_("/"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3249 {x_("mod"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3250 {x_("and"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3251 {x_("or"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3252 {x_("|"), 3,{&us_varvmp,&varupdp,&varmodp,NOKEY,NOKEY}},
3253 {x_("reinherit"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3254 {x_("total-reinherit"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3255 {x_("relocate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3256 {x_("total-relocate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3257 {x_("visible-all"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3258 {x_("visible-none"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3259 {x_("visible-default"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3260 TERMKEY
3261 };
3262 COMCOMP us_varp = {varopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3263 0, x_(" \t"), M_("option for manipulating variables"), 0};
3264
3265 /* the "view" command */
3266 COMCOMP us_viewc1p = {NOKEYWORD, topofcells, nextcells, NOPARAMS,
3267 INPUTOPT, x_(" \t"), M_("cell name whose view is to be changed"), 0};
3268 COMCOMP us_viewc2p = {NOKEYWORD, topofviews, nextviews, NOPARAMS,
3269 0, x_(" \t"), M_("new view for the cell"), 0};
3270 COMCOMP us_viewdp = {NOKEYWORD, topofviews, nextviews, NOPARAMS,
3271 INPUTOPT, x_(" \t"), M_("view name to delete"), 0};
3272 extern COMCOMP viewvhp;
3273 static KEYWORD viewvhopt[] =
3274 {
3275 {x_("vertical"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3276 {x_("no-title"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3277 TERMKEY
3278 };
3279 COMCOMP viewvhp = {viewvhopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3280 INPUTOPT, x_(" \t"), M_("option to rotate frame"), 0};
3281 static KEYWORD viewfopt[] =
3282 {
3283 {x_("A"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3284 {x_("B"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3285 {x_("C"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3286 {x_("D"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3287 {x_("E"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3288 {x_("Half-A"), 1,{&viewvhp,NOKEY,NOKEY,NOKEY,NOKEY}},
3289 {x_("none"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3290 {x_("title-only"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3291 TERMKEY
3292 };
3293 COMCOMP us_viewfp = {viewfopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3294 INPUTOPT, x_(" \t"), M_("frame size to use for this cell"), 0};
3295 COMCOMP us_viewn1p = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3296 INPUTOPT, x_(" \t"), M_("new view name"), 0};
3297 static COMCOMP viewn2p = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3298 0, x_(" \t"), M_("abbreviation for new view name"), 0};
3299 static KEYWORD viewtopt[] =
3300 {
3301 {x_("text"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3302 TERMKEY
3303 };
3304 static COMCOMP viewn3p = {viewtopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3305 0, x_(" \t"), M_("type of view (graphical)"), 0};
3306 static KEYWORD viewopt[] =
3307 {
3308 {x_("new"), 3,{&us_viewn1p,&viewn2p,&viewn3p,NOKEY,NOKEY}},
3309 {x_("delete"), 1,{&us_viewdp,NOKEY,NOKEY,NOKEY,NOKEY}},
3310 {x_("change"), 2,{&us_viewc1p,&us_viewc2p,NOKEY,NOKEY,NOKEY}},
3311 {x_("frame"), 1,{&us_viewfp,NOKEY,NOKEY,NOKEY,NOKEY}},
3312 TERMKEY
3313 };
3314 COMCOMP us_viewp = {viewopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3315 0, x_(" \t"), M_("option for manipulating cell views"), 0};
3316
3317 /* the "visiblelayers" command */
3318 static KEYWORD visiblelayersnoptp[] =
3319 {
3320 {x_("no-list"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3321 TERMKEY
3322 };
3323 static COMCOMP visiblelayersnp = {visiblelayersnoptp, NOTOPLIST, NONEXTLIST, NOPARAMS,
3324 0, x_(" \t"), M_("option to supress layer listing"), 0};
us_paramvisiblelayers(CHAR * i,COMCOMP * j[],CHAR c)3325 INTBIG us_paramvisiblelayers(CHAR *i, COMCOMP *j[], CHAR c)
3326 { j[0] = &visiblelayersnp; return(1);}
3327 COMCOMP us_visiblelayersp = {NOKEYWORD, us_topoflayers, us_nextparse,
3328 us_paramvisiblelayers, NOFILL|INPUTOPT, x_(" \t"),
3329 M_("layers to be made visible (* for all)"), M_("show layers")};
3330
3331 /* the "window" command */
3332 static KEYWORD windowspopt[] =
3333 {
3334 {x_("horizontal"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3335 {x_("vertical"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3336 TERMKEY
3337 };
3338 static COMCOMP windowspp = {windowspopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
3339 INPUTOPT, x_(" \t"), M_("way to split the window"), 0};
3340 COMCOMP us_windowmp = {NOKEYWORD, us_topofwindows, us_nextparse, NOPARAMS,
3341 INPUTOPT, x_(" \t"), M_("other window whose scale to match"), 0};
3342 COMCOMP us_windowup = {NOKEYWORD, us_topofwindows, us_nextparse, NOPARAMS,
3343 INPUTOPT, x_(" \t"), M_("window to use"), 0};
3344 static COMCOMP windowap = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
3345 INPUTOPT, x_(" \t"), M_("amount to move window"), 0};
3346 static COMCOMP windowsp = {NOKEYWORD,NOTOPLIST,NONEXTLIST,NOPARAMS,
3347 INPUTOPT, x_(" \t"), M_("amount to scale"), 0};
3348 static KEYWORD windowzopt[] =
3349 {
3350 {x_("integral"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3351 {x_("nonintegral"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3352 TERMKEY
3353 };
3354 static COMCOMP windowzp = {windowzopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3355 INPUTOPT, x_(" \t"), M_("option to force window scale to align with pixels"),
3356 M_("show current state")};
3357 static KEYWORD windownopt[] =
3358 {
3359 {x_("standard"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3360 {x_("pen"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3361 {x_("tee"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3362 TERMKEY
3363 };
3364 static COMCOMP windownp = {windownopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3365 INPUTOPT, x_(" \t"), M_("default cursor to use in window"), 0};
3366 static KEYWORD windowtopt[] =
3367 {
3368 {x_("draw"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3369 {x_("hash-out"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3370 TERMKEY
3371 };
3372 static COMCOMP windowtp = {windowtopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3373 INPUTOPT, x_(" \t"), M_("how to draw tiny cells in window"), 0};
3374 static COMCOMP windowdp = {onoffopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3375 INPUTOPT, x_(" \t"), M_("mode in which cursor-based operations drag objects"),
3376 M_("show current state")};
3377 COMCOMP us_windowrnamep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3378 INPUTOPT, x_(" \t"), M_("view name"), 0};
3379 static COMCOMP windowsnamep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3380 NOFILL|INPUTOPT|INCLUDENOISE, x_(" \t"), M_("view name"), 0};
3381 static KEYWORD windowoopt[] =
3382 {
3383 {x_("on"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3384 {x_("off"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3385 TERMKEY
3386 };
3387 static COMCOMP windowop = {windowoopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3388 INPUTOPT, x_(" \t"), M_("whether to allow overlappable layers"), 0};
3389 static KEYWORD windowsbaopt[] =
3390 {
3391 {x_("align"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3392 {x_("angle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3393 {x_("arc"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3394 {x_("cell"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3395 {x_("grid"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3396 {x_("lambda"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3397 {x_("network"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3398 {x_("node"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3399 {x_("package"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3400 {x_("part"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3401 {x_("project"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3402 {x_("root"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3403 {x_("selection"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3404 {x_("size"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3405 {x_("technology"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3406 {x_("x"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3407 {x_("y"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3408 TERMKEY
3409 };
3410 static COMCOMP windowsbap = {windowsbaopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3411 INPUTOPT, x_(" \t"), M_("area in status bar"), 0};
3412 static COMCOMP windowsblp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3413 INPUTOPT, x_(" \t"), M_("line number (1-based)"), 0};
3414 static COMCOMP windowsbsp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3415 INPUTOPT, x_(" \t"), M_("starting percentage of position on line"), 0};
3416 static COMCOMP windowsbep = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3417 INPUTOPT, x_(" \t"), M_("ending percentage of position on line"), 0};
3418 static COMCOMP windowsbtp = {NOKEYWORD, NOTOPLIST, NONEXTLIST, NOPARAMS,
3419 INPUTOPT, x_(" \t"), M_("title of status field"), 0};
3420 static KEYWORD windowsbcopt[] =
3421 {
3422 {x_("persistent"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3423 {x_("temporary"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3424 TERMKEY
3425 };
3426 static COMCOMP windowsbcp = {windowsbcopt,NOTOPLIST,NONEXTLIST,NOPARAMS,
3427 INPUTOPT, x_(" \t"), M_("persistence of current node in status bar"), 0};
3428 static KEYWORD windowsbopt[] =
3429 {
3430 {x_("add"), 5,{&windowsbap,&windowsblp,&windowsbsp,&windowsbep,&windowsbtp}},
3431 {x_("delete"), 1,{&windowsbap,NOKEY,NOKEY,NOKEY,NOKEY}},
3432 {x_("current-node"), 1,{&windowsbcp,NOKEY,NOKEY,NOKEY,NOKEY}},
3433 TERMKEY
3434 };
3435 static COMCOMP windowsbp = {windowsbopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3436 INPUTOPT, x_(" \t"), M_("commands for status bar"), 0};
3437 static KEYWORD window3dopt[] =
3438 {
3439 {x_("begin"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3440 {x_("end"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3441 {x_("rotate"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3442 {x_("zoom"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3443 {x_("pan"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3444 {x_("twist"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3445 TERMKEY
3446 };
3447 COMCOMP us_window3dp = {window3dopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3448 INPUTOPT, x_(" \t"), M_("commands for 3D display"), 0};
3449 static KEYWORD windowadopt[] =
3450 {
3451 {x_("horizontal-tile"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3452 {x_("vertical-tile"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3453 {x_("cascade"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3454 TERMKEY
3455 };
3456 COMCOMP windowadp = {windowadopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3457 INPUTOPT, x_(" \t"), M_("commands for adjusting windows"), 0};
3458 static KEYWORD windowopt[] =
3459 {
3460 {x_("1-window"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3461 {x_("3-dimensional"), 1,{&us_window3dp,NOKEY,NOKEY,NOKEY,NOKEY}},
3462 {x_("all-displayed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3463 {x_("adjust"), 1,{&windowadp,NOKEY,NOKEY,NOKEY,NOKEY}},
3464 {x_("center-highlight"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3465 {x_("cursor-centered"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3466 {x_("delete"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3467 {x_("down"), 1,{&windowap,NOKEY,NOKEY,NOKEY,NOKEY}},
3468 {x_("dragging"), 1,{&windowdp,NOKEY,NOKEY,NOKEY,NOKEY}},
3469 {x_("explore"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3470 {x_("grid-zoom"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3471 {x_("hide-attributes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3472 {x_("highlight-displayed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3473 {x_("in-zoom"), 1,{&windowsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3474 {x_("join"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3475 {x_("kill"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3476 {x_("left"), 1,{&windowap,NOKEY,NOKEY,NOKEY,NOKEY}},
3477 {x_("match"), 1,{&us_windowmp,NOKEY,NOKEY,NOKEY,NOKEY}},
3478 {x_("measure"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3479 {x_("move-display"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3480 {x_("name"), 1,{&windowsnamep,NOKEY,NOKEY,NOKEY,NOKEY}},
3481 {x_("new"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3482 {x_("normal-cursor"), 2,{&windownp,NOKEY,NOKEY,NOKEY,NOKEY}},
3483 {x_("out-zoom"), 1,{&windowsp,NOKEY,NOKEY,NOKEY,NOKEY}},
3484 {x_("outline-edit-toggle"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3485 {x_("overlappable-display"),1,{&windowop,NOKEY,NOKEY,NOKEY,NOKEY}},
3486 {x_("overview"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3487 {x_("peek"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3488 {x_("right"), 1,{&windowap,NOKEY,NOKEY,NOKEY,NOKEY}},
3489 {x_("save"), 1,{&us_windowrnamep,NOKEY,NOKEY,NOKEY,NOKEY}},
3490 {x_("show-attributes"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3491 {x_("split"), 1,{&windowspp,NOKEY,NOKEY,NOKEY,NOKEY}},
3492 {x_("status-bar"), 1,{&windowsbp,NOKEY,NOKEY,NOKEY,NOKEY}},
3493 {x_("tiny-cells"), 1,{&windowtp,NOKEY,NOKEY,NOKEY,NOKEY}},
3494 {x_("trace-displayed"), 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3495 {x_("use"), 1,{&us_windowup,NOKEY,NOKEY,NOKEY,NOKEY}},
3496 {x_("up"), 1,{&windowap,NOKEY,NOKEY,NOKEY,NOKEY}},
3497 {x_("zoom-scale"), 1,{&windowzp,NOKEY,NOKEY,NOKEY,NOKEY}},
3498 TERMKEY
3499 };
3500 COMCOMP us_windowp = {windowopt, NOTOPLIST, NONEXTLIST, NOPARAMS,
3501 0, x_(" \t"), M_("window display control option"), 0};
3502
3503 /* table of commands with routines */
3504 struct commandinfo us_lcommand[] =
3505 {
3506 {x_("arc"), us_arc, 1,{&us_arcp,NOKEY,NOKEY,NOKEY,NOKEY}},
3507 {x_("array"), us_array, 5,{&us_arrayxp,&arrayyp,&arrayxop,&arrayyop, &arrayswitchp}},
3508 {x_("bind"), us_bind, 1,{&us_bindp,NOKEY,NOKEY,NOKEY,NOKEY}},
3509 {x_("color"), us_color, 1,{&us_colorp,NOKEY,NOKEY,NOKEY,NOKEY}},
3510 {x_("commandfile"), us_commandfile, 2,{&commandfilep,&commandfileswitchp,NOKEY,NOKEY,NOKEY}},
3511 {x_("constraint"), us_constraint, 1,{&constraintp,NOKEY,NOKEY,NOKEY,NOKEY}},
3512 {x_("copycell"), us_copycell, 3,{&us_copycellp,&us_copycelldp,©cellqp,NOKEY,NOKEY}},
3513 {x_("create"), us_create, 1,{&createp,NOKEY,NOKEY,NOKEY,NOKEY}},
3514 {x_("debug"), us_debug, 1,{&debugp,NOKEY,NOKEY,NOKEY,NOKEY}},
3515 {x_("defarc"), us_defarc, 2,{&us_defarcsp,&defarcp,NOKEY,NOKEY,NOKEY}},
3516 {x_("defnode"), us_defnode, 2,{&us_defnodesp,&us_defnodep,NOKEY,NOKEY,NOKEY}},
3517 {x_("duplicate"), us_duplicate, 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3518 {x_("echo"), us_echo, 1,{&echop,NOKEY,NOKEY,NOKEY,NOKEY}},
3519 {x_("editcell"), us_editcell, 2,{&us_editcellp,&editcellwindowp,NOKEY,NOKEY,NOKEY}},
3520 {x_("erase"), us_erase, 1,{&erasep,NOKEY,NOKEY,NOKEY,NOKEY}},
3521 {x_("find"), us_find, 1,{&findp,NOKEY,NOKEY,NOKEY,NOKEY}},
3522 {x_("getproto"), us_getproto, 2,{&us_getproto1p,&getproto2p,NOKEY,NOKEY,NOKEY}},
3523 {x_("grid"), us_grid, 1,{&us_gridp,NOKEY,NOKEY,NOKEY,NOKEY}},
3524 {x_("help"), us_help, 1,{&us_helpp,NOKEY,NOKEY,NOKEY,NOKEY}},
3525 {x_("if"), us_if, 4,{&iftp,&ifrp,&iftp,&us_userp,NOKEY}},
3526 {x_("interpret"), us_interpret, 1,{&interpretp,NOKEY,NOKEY,NOKEY,NOKEY}},
3527 {x_("iterate"), us_iterate, 2,{&iteratep,&iteratemp,NOKEY,NOKEY,NOKEY}},
3528 {x_("killcell"), us_killcell, 1,{&killcellp,NOKEY,NOKEY,NOKEY,NOKEY}},
3529 {x_("lambda"), us_lambda, 1,{&lambdap,NOKEY,NOKEY,NOKEY,NOKEY}},
3530 {x_("library"), us_library, 1,{&us_libraryp,NOKEY,NOKEY,NOKEY,NOKEY}},
3531 {x_("macbegin"), us_macbegin, 2,{&us_macbeginnp,&macbeginop,NOKEY,NOKEY,NOKEY}},
3532 {x_("macdone"), us_macdone, 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3533 {x_("macend"), us_macend, 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3534 {x_("menu"), us_menu, 1,{&us_menup,NOKEY,NOKEY,NOKEY,NOKEY}},
3535 {x_("mirror"), us_mirror, 1,{&us_mirrorp,NOKEY,NOKEY,NOKEY,NOKEY}},
3536 {x_("move"), us_move, 1,{&movep,NOKEY,NOKEY,NOKEY,NOKEY}},
3537 {x_("node"), us_node, 1,{&us_nodep,NOKEY,NOKEY,NOKEY,NOKEY}},
3538 {x_("offtool"), us_offtool, 2,{&offtoolp,&offtoolep,NOKEY,NOKEY,NOKEY}},
3539 {x_("ontool"), us_ontool, 2,{&ontoolp,NOKEY,NOKEY,NOKEY,NOKEY}},
3540 {x_("outhier"), us_outhier, 1,{&outhierp,NOKEY,NOKEY,NOKEY,NOKEY}},
3541 {x_("package"), us_package, 1,{&us_packagep,NOKEY,NOKEY,NOKEY,NOKEY}},
3542 {x_("port"), us_port, 1,{&us_portp,NOKEY,NOKEY,NOKEY,NOKEY}},
3543 {x_("quit"), us_quit, 1,{&quitp,NOKEY,NOKEY,NOKEY,NOKEY}},
3544 {x_("redraw"), us_redraw, 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3545 {x_("remember"), us_remember, 1,{&us_userp,NOKEY,NOKEY,NOKEY,NOKEY}},
3546 {x_("rename"), us_rename, 3,{&us_renameop,&us_renamenp,&us_renamecp,NOKEY,NOKEY}},
3547 {x_("replace"), us_replace, 2,{&us_replacep,&replacesp,NOKEY,NOKEY,NOKEY}},
3548 {x_("rotate"), us_rotate, 2,{&rotateap,&rotatep,NOKEY,NOKEY,NOKEY}},
3549 {x_("show"), us_show, 1,{&us_showp,NOKEY,NOKEY,NOKEY,NOKEY}},
3550 {x_("size"), us_size, 1,{&us_sizep,NOKEY,NOKEY,NOKEY,NOKEY}},
3551 {x_("spread"), us_spread, 2,{&us_spreaddp,&spreadap,NOKEY,NOKEY,NOKEY}},
3552 {x_("system"), us_system, 1,{&systemp,NOKEY,NOKEY,NOKEY,NOKEY}},
3553 {x_("technology"), us_technology, 1,{&us_technologyp,NOKEY,NOKEY,NOKEY,NOKEY}},
3554 {x_("telltool"), us_telltool, 1,{&us_telltoolp,NOKEY,NOKEY,NOKEY,NOKEY}},
3555 {x_("terminal"), us_terminal, 1,{&terminalp,NOKEY,NOKEY,NOKEY,NOKEY}},
3556 {x_("text"), us_text, 1,{&textp,NOKEY,NOKEY,NOKEY,NOKEY}},
3557 {x_("undo"), us_undo, 1,{&undop,NOKEY,NOKEY,NOKEY,NOKEY}},
3558 {x_("var"), us_var, 1,{&us_varp,NOKEY,NOKEY,NOKEY,NOKEY}},
3559 {x_("view"), us_view, 1,{&us_viewp,NOKEY,NOKEY,NOKEY,NOKEY}},
3560 {x_("visiblelayers"),us_visiblelayers, 1,{&us_visiblelayersp,NOKEY,NOKEY,NOKEY,NOKEY}},
3561 {x_("window"), us_window, 1,{&us_windowp,NOKEY,NOKEY,NOKEY,NOKEY}},
3562 {x_("yanknode"), us_yanknode, 0,{NOKEY,NOKEY,NOKEY,NOKEY,NOKEY}},
3563 {NULL, NULL, 0, {NULL, NULL, NULL, NULL, NULL}} /* 0 */
3564 };
3565