Compare commits
11 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
c0c9993980 | |
|
|
8a20b90074 | |
|
|
3392159243 | |
|
|
24c6eb4cb9 | |
|
|
9048191486 | |
|
|
72d7d55bbe | |
|
|
04163aedcc | |
|
|
f7d35f9cca | |
|
|
601277e539 | |
|
|
73344329f8 | |
|
|
08485d28a7 |
|
|
@ -22,6 +22,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#ifdef IBMPC
|
#ifdef IBMPC
|
||||||
#include <stdlib.h> /* for strtol on PC */
|
#include <stdlib.h> /* for strtol on PC */
|
||||||
|
|
|
||||||
|
|
@ -300,8 +300,6 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Placeholder cells must not be flattened */
|
|
||||||
if (ThisCell->flags & CELL_PLACEHOLDER) return 0;
|
|
||||||
|
|
||||||
FreeNodeNames(ThisCell);
|
FreeNodeNames(ThisCell);
|
||||||
|
|
||||||
|
|
@ -339,6 +337,10 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
|
||||||
LastObj = ParentParams;
|
LastObj = ParentParams;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (ChildCell->flags & CELL_PLACEHOLDER) {
|
||||||
|
LastObj = ParentParams;
|
||||||
|
continue; // Placeholder cells must not be flattened
|
||||||
|
}
|
||||||
if (ChildCell == ThisCell) {
|
if (ChildCell == ThisCell) {
|
||||||
LastObj = ParentParams;
|
LastObj = ParentParams;
|
||||||
continue; // Avoid infinite loop
|
continue; // Avoid infinite loop
|
||||||
|
|
@ -1753,8 +1755,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell1->name,
|
" makes a better match\n", ecomp->cell1->name,
|
||||||
name1, file1);
|
name1, file1);
|
||||||
flattenInstancesOf(name1, file1, ecomp->cell1->name);
|
if (flattenInstancesOf(name1, file1, ecomp->cell1->name) > 0)
|
||||||
modified1++;
|
modified1++;
|
||||||
}
|
}
|
||||||
else if (ecomp->cell1 && (ecomp->num1 > 0)) {
|
else if (ecomp->cell1 && (ecomp->num1 > 0)) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
|
|
@ -1766,8 +1768,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell2->name,
|
" makes a better match\n", ecomp->cell2->name,
|
||||||
name2, file2);
|
name2, file2);
|
||||||
flattenInstancesOf(name2, file2, ecomp->cell2->name);
|
if (flattenInstancesOf(name2, file2, ecomp->cell2->name) > 0)
|
||||||
modified2++;
|
modified2++;
|
||||||
}
|
}
|
||||||
else if (ecomp->cell2 && (ecomp->num2 > 0)) {
|
else if (ecomp->cell2 && (ecomp->num2 > 0)) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
|
|
@ -1861,8 +1863,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell2->name,
|
" makes a better match\n", ecomp->cell2->name,
|
||||||
name2, file2);
|
name2, file2);
|
||||||
flattenInstancesOf(name2, file2, ecomp->cell2->name);
|
if (flattenInstancesOf(name2, file2, ecomp->cell2->name) > 0)
|
||||||
modified2++;
|
modified2++;
|
||||||
}
|
}
|
||||||
else if (ecomp->cell2) {
|
else if (ecomp->cell2) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
|
|
@ -1932,8 +1934,8 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
" makes a better match\n", ecomp->cell1->name,
|
" makes a better match\n", ecomp->cell1->name,
|
||||||
name1, file1);
|
name1, file1);
|
||||||
flattenInstancesOf(name1, file1, ecomp->cell1->name);
|
if (flattenInstancesOf(name1, file1, ecomp->cell1->name) > 0)
|
||||||
modified1++;
|
modified1++;
|
||||||
}
|
}
|
||||||
else if (ecomp->cell1) {
|
else if (ecomp->cell1) {
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
Fprintf(stdout, "Flattening instances of %s in cell %s (%d)"
|
||||||
|
|
@ -2295,11 +2297,12 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell"
|
Fprintf(stdout, "Flattening instances of %s in cell"
|
||||||
" %s (%d) makes a better match\n",
|
" %s (%d) makes a better match\n",
|
||||||
ecompX0->cell1->name, name1, file1);
|
ecompX0->cell1->name, name1, file1);
|
||||||
flattenInstancesOf(name1, file1,
|
if (flattenInstancesOf(name1, file1,
|
||||||
ecompX0->cell1->name);
|
ecompX0->cell1->name) > 0) {
|
||||||
ecompX0->num1 = 0;
|
ecompX0->num1 = 0;
|
||||||
ecomp0X->num1 += ecompX0->num1;
|
ecomp0X->num1 += ecompX0->num1;
|
||||||
modified1++;
|
modified1++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2331,11 +2334,12 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
|
||||||
Fprintf(stdout, "Flattening instances of %s in cell"
|
Fprintf(stdout, "Flattening instances of %s in cell"
|
||||||
" %s (%d) makes a better match\n",
|
" %s (%d) makes a better match\n",
|
||||||
ecomp0X->cell2->name, name2, file2);
|
ecomp0X->cell2->name, name2, file2);
|
||||||
flattenInstancesOf(name2, file2,
|
if (flattenInstancesOf(name2, file2,
|
||||||
ecomp0X->cell2->name);
|
ecomp0X->cell2->name) > 0) {
|
||||||
ecomp0X->num2 = 0;
|
ecomp0X->num2 = 0;
|
||||||
ecompX0->num2 += ecomp0X->num2;
|
ecompX0->num2 += ecomp0X->num2;
|
||||||
modified2++;
|
modified2++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Fprintf(stdout, "Flattening instances of %s in "
|
Fprintf(stdout, "Flattening instances of %s in "
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <strings.h> /* for strncasecmp() */
|
||||||
#include <time.h> /* for time() as a seed for random number generator */
|
#include <time.h> /* for time() as a seed for random number generator */
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <math.h> /* for fabs() */
|
#include <math.h> /* for fabs() */
|
||||||
|
|
@ -3581,7 +3582,7 @@ int FlattenUnmatched(struct nlist *tc, char *parent, int stoplevel, int loclevel
|
||||||
tc->name, parent, tc->file);
|
tc->name, parent, tc->file);
|
||||||
changed = flattenInstancesOf(parent, tc->file, tc->name);
|
changed = flattenInstancesOf(parent, tc->file, tc->name);
|
||||||
Fprintf(stdout, "(%d instance%s)\n", changed, ((changed == 1) ? "" : "s"));
|
Fprintf(stdout, "(%d instance%s)\n", changed, ((changed == 1) ? "" : "s"));
|
||||||
return 1;
|
return (changed != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tc->cell == NULL) return 0;
|
if (tc->cell == NULL) return 0;
|
||||||
|
|
@ -7543,6 +7544,11 @@ struct nlist *addproxies(struct hashlist *p, void *clientdata)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lob = ob;
|
lob = ob;
|
||||||
|
if (ob == NULL) {
|
||||||
|
Fprintf(stdout, "Error: Premature end of pin list on "
|
||||||
|
"instance %s.\n", firstpin->instance.name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
ob->type = i++;
|
ob->type = i++;
|
||||||
ob = ob->next;
|
ob = ob->next;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h> /* for strtof() */
|
#include <stdlib.h> /* for strtof() */
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <ctype.h> /* toupper() */
|
#include <ctype.h> /* toupper() */
|
||||||
#ifdef IBMPC
|
#ifdef IBMPC
|
||||||
#include <alloc.h>
|
#include <alloc.h>
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <ctype.h>
|
||||||
#if 0
|
#if 0
|
||||||
#include <stdarg.h> /* what about varargs, like in pdutils.c ??? */
|
#include <stdarg.h> /* what about varargs, like in pdutils.c ??? */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
199
base/verilog.c
199
base/verilog.c
|
|
@ -76,7 +76,8 @@ struct hashdict verilogparams;
|
||||||
// Global storage for verilog definitions
|
// Global storage for verilog definitions
|
||||||
struct hashdict verilogdefs;
|
struct hashdict verilogdefs;
|
||||||
// Record file pointer that is associated with the hash tables
|
// Record file pointer that is associated with the hash tables
|
||||||
int hashfile = -1;
|
int hashfilep = -1; /* for parameters */
|
||||||
|
int hashfiled = -1; /* for definitions */
|
||||||
|
|
||||||
// Global storage for wire buses
|
// Global storage for wire buses
|
||||||
struct hashdict buses;
|
struct hashdict buses;
|
||||||
|
|
@ -156,7 +157,8 @@ struct expr_stack {
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Evaluate an expression for an array bound. This is much like
|
// Evaluate an expression for an array bound. This is much like
|
||||||
// ReduceOneExpression() in netgen.c, but only handles basic integer
|
// ReduceOneExpression() in netgen.c, but only handles basic integer
|
||||||
// arithmetic (+,-,*,/) and grouping by parentheses.
|
// arithmetic (+,-,*,/), grouping by parentheses, bit shifts, and
|
||||||
|
// if-else operators.
|
||||||
//
|
//
|
||||||
// Returns 1 if successful, 0 on error.
|
// Returns 1 if successful, 0 on error.
|
||||||
// Evaluated result is placed in the integer pointed to by "valptr".
|
// Evaluated result is placed in the integer pointed to by "valptr".
|
||||||
|
|
@ -220,6 +222,39 @@ int EvalExpr(struct expr_stack **stackptr, int *valptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reduce (a << b) and (a >> b) */
|
||||||
|
|
||||||
|
for (texp = start; texp; texp = texp->next) {
|
||||||
|
if ((texp->last != NULL) && (texp->next != NULL) && (texp->oper != '\0')) {
|
||||||
|
if ((texp->last->oper == '\0') && (texp->next->oper == '\0')) {
|
||||||
|
if (texp->oper == '<') {
|
||||||
|
/* Left shift */
|
||||||
|
texp->last->value <<= texp->next->value;
|
||||||
|
/* Remove two items from the stack */
|
||||||
|
tmp = texp;
|
||||||
|
texp = texp->last;
|
||||||
|
texp->next = tmp->next->next;
|
||||||
|
if (tmp->next->next) tmp->next->next->last = texp;
|
||||||
|
FREE(tmp->next);
|
||||||
|
FREE(tmp);
|
||||||
|
modified = TRUE;
|
||||||
|
}
|
||||||
|
if (texp->oper == '>') {
|
||||||
|
/* Right shift */
|
||||||
|
texp->last->value >>= texp->next->value;
|
||||||
|
/* Remove two items from the stack */
|
||||||
|
tmp = texp;
|
||||||
|
texp = texp->last;
|
||||||
|
texp->next = tmp->next->next;
|
||||||
|
if (tmp->next->next) tmp->next->next->last = texp;
|
||||||
|
FREE(tmp->next);
|
||||||
|
FREE(tmp);
|
||||||
|
modified = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Reduce (a * b) and (a / b) */
|
/* Reduce (a * b) and (a / b) */
|
||||||
|
|
||||||
for (texp = start; texp; texp = texp->next) {
|
for (texp = start; texp; texp = texp->next) {
|
||||||
|
|
@ -295,6 +330,39 @@ int EvalExpr(struct expr_stack **stackptr, int *valptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reduce (a ? b : c) */
|
||||||
|
|
||||||
|
for (texp = start; texp; texp = texp->next) {
|
||||||
|
/* There must be at least five objects on the stack */
|
||||||
|
if ((texp->last != NULL) && (texp->next != NULL) && (texp->oper != '\0')
|
||||||
|
&& (texp->next->next != NULL)
|
||||||
|
&& (texp->next->next->next != NULL)) {
|
||||||
|
if ((texp->last->oper == '\0') && (texp->next->oper == '\0')
|
||||||
|
&& (texp->next->next->next->oper == '\0')) {
|
||||||
|
if ((texp->oper == '?') && (texp->next->next->oper == ':')) {
|
||||||
|
/* If-Else conditional */
|
||||||
|
if (texp->last->value)
|
||||||
|
texp->last->value = texp->next->value;
|
||||||
|
else
|
||||||
|
texp->last->value = texp->next->next->next->value;
|
||||||
|
|
||||||
|
/* Remove four items from the stack */
|
||||||
|
tmp = texp;
|
||||||
|
texp = texp->last;
|
||||||
|
texp->next = tmp->next->next->next->next;
|
||||||
|
if (tmp->next->next->next->next)
|
||||||
|
tmp->next->next->next->next->last = texp;
|
||||||
|
FREE(tmp->next->next->next);
|
||||||
|
FREE(tmp->next->next);
|
||||||
|
FREE(tmp->next);
|
||||||
|
FREE(tmp);
|
||||||
|
|
||||||
|
modified = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Reduce (a) */
|
/* Reduce (a) */
|
||||||
|
|
||||||
for (texp = start; texp; texp = texp->next) {
|
for (texp = start; texp; texp = texp->next) {
|
||||||
|
|
@ -373,8 +441,15 @@ int ParseIntegerExpression(char *expr, int *iptr)
|
||||||
|
|
||||||
if (match(sptr, "+") || match(sptr, "-")
|
if (match(sptr, "+") || match(sptr, "-")
|
||||||
|| match(sptr, "*") || match(sptr, "/")
|
|| match(sptr, "*") || match(sptr, "/")
|
||||||
|| match(sptr, "(") || match(sptr, ")")) {
|
|| match(sptr, "(") || match(sptr, ")")
|
||||||
|
|| match(sptr, "<<") || match(sptr, ">>")
|
||||||
|
|| match(sptr, "?") || match(sptr, ":")) {
|
||||||
newexp = (struct expr_stack *)MALLOC(sizeof(struct expr_stack));
|
newexp = (struct expr_stack *)MALLOC(sizeof(struct expr_stack));
|
||||||
|
/* Note that "oper" is one character and that "<<" and ">>"
|
||||||
|
* become '<' and '>', respectively. The less-than and greater-
|
||||||
|
* than operators are not (yet) handled but will need to be
|
||||||
|
* recast to some other character in "oper".
|
||||||
|
*/
|
||||||
newexp->oper = *sptr;
|
newexp->oper = *sptr;
|
||||||
newexp->value = 0;
|
newexp->value = 0;
|
||||||
newexp->next = NULL;
|
newexp->next = NULL;
|
||||||
|
|
@ -389,7 +464,7 @@ int ParseIntegerExpression(char *expr, int *iptr)
|
||||||
if ((result = sscanf(sptr, "%d", &value)) != 1) {
|
if ((result = sscanf(sptr, "%d", &value)) != 1) {
|
||||||
|
|
||||||
// Is name in the parameter list?
|
// Is name in the parameter list?
|
||||||
kl = (struct property *)HashLookup(nexttok, &verilogparams);
|
kl = (struct property *)HashLookup(sptr, &verilogparams);
|
||||||
if (kl == NULL) {
|
if (kl == NULL) {
|
||||||
Printf("Value %s in expression is not a number or a parameter.\n",
|
Printf("Value %s in expression is not a number or a parameter.\n",
|
||||||
sptr);
|
sptr);
|
||||||
|
|
@ -402,27 +477,29 @@ int ParseIntegerExpression(char *expr, int *iptr)
|
||||||
if (result != 1) {
|
if (result != 1) {
|
||||||
Printf("Parameter %s has value %s that cannot be parsed"
|
Printf("Parameter %s has value %s that cannot be parsed"
|
||||||
" as an integer.\n",
|
" as an integer.\n",
|
||||||
nexttok, kl->pdefault.string);
|
sptr, kl->pdefault.string);
|
||||||
value = 0;
|
value = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (kl->type == PROP_INTEGER) {
|
else if (kl->type == PROP_INTEGER) {
|
||||||
value = kl->pdefault.ival;
|
value = kl->pdefault.ival;
|
||||||
|
result = 1; // Assert valid result
|
||||||
}
|
}
|
||||||
else if (kl->type == PROP_DOUBLE) {
|
else if (kl->type == PROP_DOUBLE) {
|
||||||
value = (int)kl->pdefault.dval;
|
value = (int)kl->pdefault.dval;
|
||||||
if ((double)value != kl->pdefault.dval) {
|
if ((double)value != kl->pdefault.dval) {
|
||||||
Printf("Parameter %s has value %g that cannot be parsed"
|
Printf("Parameter %s has value %g that cannot be parsed"
|
||||||
" as an integer.\n",
|
" as an integer.\n",
|
||||||
nexttok, kl->pdefault.dval);
|
sptr, kl->pdefault.dval);
|
||||||
value = 0;
|
value = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
result = 1; // Assert valid result
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Printf("Parameter %s has unknown type; don't know how"
|
Printf("Parameter %s has unknown type; don't know how"
|
||||||
" to parse.\n", nexttok);
|
" to parse.\n", sptr);
|
||||||
value = 0;
|
value = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -516,7 +593,8 @@ int GetBusTok(struct bus *wb)
|
||||||
}
|
}
|
||||||
else if (match(nexttok, "+") || match(nexttok, "-")
|
else if (match(nexttok, "+") || match(nexttok, "-")
|
||||||
|| match(nexttok, "*") || match(nexttok, "/")
|
|| match(nexttok, "*") || match(nexttok, "/")
|
||||||
|| match(nexttok, "(") || match(nexttok, ")")) {
|
|| match(nexttok, "(") || match(nexttok, ")")
|
||||||
|
|| match(nexttok, "<<") || match(nexttok, ">>")) {
|
||||||
newexp = (struct expr_stack *)MALLOC(sizeof(struct expr_stack));
|
newexp = (struct expr_stack *)MALLOC(sizeof(struct expr_stack));
|
||||||
newexp->oper = *nexttok;
|
newexp->oper = *nexttok;
|
||||||
newexp->value = 0;
|
newexp->value = 0;
|
||||||
|
|
@ -1879,7 +1957,8 @@ skip_endmodule:
|
||||||
// Allowed uses of "assign" for netlists:
|
// Allowed uses of "assign" for netlists:
|
||||||
// "assign a = b" joins two nets.
|
// "assign a = b" joins two nets.
|
||||||
// "assign a = {b, c, ...}" creates a bus from components.
|
// "assign a = {b, c, ...}" creates a bus from components.
|
||||||
// "assign" using any boolean arithmetic is not structural verilog.
|
// "assign" using if-else constructs or bit shifts.
|
||||||
|
// ("assign" using any other boolean arithmetic is not structural verilog.)
|
||||||
// "assign a = {x{b}}" creates a bus by repeating a component.
|
// "assign a = {x{b}}" creates a bus by repeating a component.
|
||||||
|
|
||||||
if (nexttok && match(nexttok, "=")) {
|
if (nexttok && match(nexttok, "=")) {
|
||||||
|
|
@ -2140,6 +2219,19 @@ nextinst:
|
||||||
}
|
}
|
||||||
SkipTokComments(VLOG_DELIMITERS);
|
SkipTokComments(VLOG_DELIMITERS);
|
||||||
}
|
}
|
||||||
|
else if (loop.loopvar != NULL) {
|
||||||
|
/* Instances created within a generate block for loop have an
|
||||||
|
* implicit array
|
||||||
|
*/
|
||||||
|
int loopval;
|
||||||
|
struct property *klr;
|
||||||
|
|
||||||
|
klr = (struct property *)HashLookup(loop.loopvar, &verilogparams);
|
||||||
|
loopval = klr->pdefault.ival;
|
||||||
|
|
||||||
|
arraystart = arrayend = loopval;
|
||||||
|
sprintf(instancename + strlen(instancename), "[%d]", loopval);
|
||||||
|
}
|
||||||
|
|
||||||
if (match(nexttok, "(")) {
|
if (match(nexttok, "(")) {
|
||||||
char savetok = (char)0;
|
char savetok = (char)0;
|
||||||
|
|
@ -2202,7 +2294,8 @@ nextinst:
|
||||||
strcat(new_wire_bundle, nexttok);
|
strcat(new_wire_bundle, nexttok);
|
||||||
FREE(wire_bundle);
|
FREE(wire_bundle);
|
||||||
wire_bundle = new_wire_bundle;
|
wire_bundle = new_wire_bundle;
|
||||||
if (!strcmp(nexttok, "}")) break;
|
if (!strcmp(nexttok, "}"))
|
||||||
|
break;
|
||||||
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
|
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
|
||||||
}
|
}
|
||||||
if (!nexttok) {
|
if (!nexttok) {
|
||||||
|
|
@ -2578,6 +2671,7 @@ nextinst:
|
||||||
char *brackptr;
|
char *brackptr;
|
||||||
int j;
|
int j;
|
||||||
char locinst[MAX_STR_LEN];
|
char locinst[MAX_STR_LEN];
|
||||||
|
int arraypos = (arraystart > arrayend) ? arraymax - i : i;
|
||||||
|
|
||||||
if (i != -1)
|
if (i != -1)
|
||||||
sprintf(locinst, "%s[%d]", instancename, i);
|
sprintf(locinst, "%s[%d]", instancename, i);
|
||||||
|
|
@ -2627,7 +2721,14 @@ nextinst:
|
||||||
else if (GetBus(scan->net, &wb) == 0) {
|
else if (GetBus(scan->net, &wb) == 0) {
|
||||||
char *bptr2;
|
char *bptr2;
|
||||||
char *scanroot;
|
char *scanroot;
|
||||||
scanroot = strsave(scan->net);
|
int isbundle = FALSE;
|
||||||
|
/* Skip over a bundle delimiter */
|
||||||
|
if (*scan->net == '{') {
|
||||||
|
scanroot = strsave(scan->net + 1);
|
||||||
|
isbundle = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
scanroot = strsave(scan->net);
|
||||||
brackptr = strvchr(scanroot, '[');
|
brackptr = strvchr(scanroot, '[');
|
||||||
if (brackptr) *brackptr = '\0';
|
if (brackptr) *brackptr = '\0';
|
||||||
|
|
||||||
|
|
@ -2660,6 +2761,7 @@ nextinst:
|
||||||
else {
|
else {
|
||||||
// Instance must be an array
|
// Instance must be an array
|
||||||
char netname[MAX_STR_LEN];
|
char netname[MAX_STR_LEN];
|
||||||
|
char *spos = scanroot;
|
||||||
int slice, portlen, siglen;
|
int slice, portlen, siglen;
|
||||||
|
|
||||||
/* Get the array size of the port for bit slicing */
|
/* Get the array size of the port for bit slicing */
|
||||||
|
|
@ -2671,27 +2773,49 @@ nextinst:
|
||||||
if (siglen < 0) siglen = -siglen;
|
if (siglen < 0) siglen = -siglen;
|
||||||
siglen++;
|
siglen++;
|
||||||
|
|
||||||
// If signal array is smaller than the portlength *
|
// If this is a bundle, then count out to the current
|
||||||
// length of instance array, then the signal wraps.
|
// slice and read off the index. NOTE: Need to
|
||||||
|
// handle multiple bits per bundle entry!
|
||||||
|
if (isbundle) {
|
||||||
|
int j;
|
||||||
|
if (brackptr) *brackptr = '[';
|
||||||
|
for (j = 0; j < arraypos * portlen; j++) {
|
||||||
|
spos = strvchr(spos, ',');
|
||||||
|
if (spos == NULL) break;
|
||||||
|
spos++;
|
||||||
|
}
|
||||||
|
if (spos != NULL) {
|
||||||
|
brackptr = strvchr(spos, '[');
|
||||||
|
*brackptr = '\0';
|
||||||
|
sscanf(brackptr + 1, "%d", &slice);
|
||||||
|
}
|
||||||
|
else spos = scanroot; /* should emit an error here */
|
||||||
|
}
|
||||||
|
else { /* not a bundle */
|
||||||
|
|
||||||
if (wb2.start >= wb2.end && arraystart >= arrayend) {
|
// If signal array is smaller than the portlength *
|
||||||
slice = wb.start - (arraystart - i) * portlen;
|
// length of instance array, then the signal wraps.
|
||||||
while (slice < wb2.end) slice += siglen;
|
|
||||||
}
|
if (wb2.start >= wb2.end && arraystart >= arrayend) {
|
||||||
else if (wb2.start < wb2.end && arraystart > arrayend) {
|
slice = wb.start - (arraystart - i) * portlen;
|
||||||
slice = wb.start + (arraystart - i) * portlen;
|
while (slice < wb2.end) slice += siglen;
|
||||||
while (slice > wb2.end) slice -= siglen;
|
}
|
||||||
}
|
else if (wb2.start < wb2.end && arraystart > arrayend) {
|
||||||
else if (wb2.start > wb2.end && arraystart < arrayend) {
|
slice = wb.start + (arraystart - i) * portlen;
|
||||||
slice = wb.start - (arraystart + i) * portlen;
|
while (slice > wb2.end) slice -= siglen;
|
||||||
while (slice < wb2.end) slice += siglen;
|
}
|
||||||
}
|
else if (wb2.start > wb2.end && arraystart < arrayend) {
|
||||||
else { // (wb2.start < wb2.end && arraystart < arrayend)
|
slice = wb.start - (arraystart + i) * portlen;
|
||||||
slice = wb.start + (arraystart + i) * portlen;
|
while (slice < wb2.end) slice += siglen;
|
||||||
while (slice > wb2.end) slice -= siglen;
|
}
|
||||||
|
else { // (wb2.start < wb2.end && arraystart < arrayend)
|
||||||
|
slice = wb.start + (arraystart + i) * portlen;
|
||||||
|
while (slice > wb2.end) slice -= siglen;
|
||||||
|
}
|
||||||
|
spos = scanroot;
|
||||||
}
|
}
|
||||||
|
|
||||||
sprintf(netname, "%s[%d]", scanroot, slice);
|
sprintf(netname, "%s[%d]", spos, slice);
|
||||||
if (LookupObject(netname, CurrentCell) == NULL) Node(netname);
|
if (LookupObject(netname, CurrentCell) == NULL) Node(netname);
|
||||||
join(netname, obptr->name);
|
join(netname, obptr->name);
|
||||||
}
|
}
|
||||||
|
|
@ -2876,18 +3000,25 @@ char *ReadVerilogTop(char *fname, int *fnum, int blackbox)
|
||||||
hashfunc = hashcase;
|
hashfunc = hashcase;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((hashfile != -1) && (hashfile != *fnum)) {
|
if ((hashfilep != -1) && (hashfilep != *fnum)) {
|
||||||
/* Started a new file, so remove all the parameters and definitions */
|
/* Started a new file, so remove all the parameters */
|
||||||
RecurseHashTable(&verilogparams, freeprop);
|
RecurseHashTable(&verilogparams, freeprop);
|
||||||
HashKill(&verilogparams);
|
HashKill(&verilogparams);
|
||||||
|
hashfilep = -1;
|
||||||
|
}
|
||||||
|
if ((hashfiled != -1) && (hashfiled != *fnum)) {
|
||||||
|
/* Started a new file, so remove all the definitions */
|
||||||
RecurseHashTable(&verilogdefs, freeprop);
|
RecurseHashTable(&verilogdefs, freeprop);
|
||||||
HashKill(&verilogdefs);
|
HashKill(&verilogdefs);
|
||||||
hashfile = -1;
|
hashfiled = -1;
|
||||||
}
|
}
|
||||||
if (hashfile == -1) {
|
if (hashfilep == -1) {
|
||||||
InitializeHashTable(&verilogparams, OBJHASHSIZE);
|
InitializeHashTable(&verilogparams, OBJHASHSIZE);
|
||||||
|
hashfilep = filenum;
|
||||||
|
}
|
||||||
|
if (hashfiled == -1) {
|
||||||
InitializeHashTable(&verilogdefs, OBJHASHSIZE);
|
InitializeHashTable(&verilogdefs, OBJHASHSIZE);
|
||||||
hashfile = *fnum;
|
hashfiled = filenum;
|
||||||
}
|
}
|
||||||
definitions = &verilogdefs;
|
definitions = &verilogdefs;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,7 @@ LIB_SPECS = @LIB_SPECS@
|
||||||
LIB_SPECS_NOSTUB = @LIB_SPECS_NOSTUB@
|
LIB_SPECS_NOSTUB = @LIB_SPECS_NOSTUB@
|
||||||
WISH_EXE = @WISH_EXE@
|
WISH_EXE = @WISH_EXE@
|
||||||
TCL_LIB_DIR = @TCL_LIB_DIR@
|
TCL_LIB_DIR = @TCL_LIB_DIR@
|
||||||
|
EXTRA_CFLAGS =
|
||||||
|
|
||||||
CC = @CC@
|
CC = @CC@
|
||||||
CPP = @CPP@
|
CPP = @CPP@
|
||||||
|
|
@ -76,7 +77,7 @@ CXX = @CXX@
|
||||||
CPPFLAGS = -I. -I${NETGENDIR} @CPPFLAGS@
|
CPPFLAGS = -I. -I${NETGENDIR} @CPPFLAGS@
|
||||||
DFLAGS = @extra_defs@ @stub_defs@ @DEFS@ -DSHDLIB_EXT=\"@SHDLIB_EXT@\" -DNDEBUG
|
DFLAGS = @extra_defs@ @stub_defs@ @DEFS@ -DSHDLIB_EXT=\"@SHDLIB_EXT@\" -DNDEBUG
|
||||||
DFLAGS_NOSTUB = @extra_defs@ @DEFS@ -DSHDLIB_EXT=\"@SHDLIB_EXT@\" -DNDEBUG
|
DFLAGS_NOSTUB = @extra_defs@ @DEFS@ -DSHDLIB_EXT=\"@SHDLIB_EXT@\" -DNDEBUG
|
||||||
CFLAGS = @CFLAGS@ @SHLIB_CFLAGS@ @INC_SPECS@
|
CFLAGS = @CFLAGS@ @SHLIB_CFLAGS@ @INC_SPECS@ ${EXTRA_CFLAGS}
|
||||||
|
|
||||||
DEPEND_FILE = Depend
|
DEPEND_FILE = Depend
|
||||||
DEPEND_FLAG = @DEPEND_FLAG@
|
DEPEND_FLAG = @DEPEND_FLAG@
|
||||||
|
|
|
||||||
|
|
@ -429,7 +429,7 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
|
||||||
set file1 $name1
|
set file1 $name1
|
||||||
set cell1 $name1
|
set cell1 $name1
|
||||||
}
|
}
|
||||||
puts stdout "Reading netlist file $file1"
|
puts stdout "Reading netlist file $file1 for $name1"
|
||||||
set fnum1 [netgen::readnet $file1]
|
set fnum1 [netgen::readnet $file1]
|
||||||
} else {
|
} else {
|
||||||
set cell1 [lindex $flist1 0]
|
set cell1 [lindex $flist1 0]
|
||||||
|
|
@ -446,7 +446,7 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
|
||||||
set file2 $name2
|
set file2 $name2
|
||||||
set cell2 $name2
|
set cell2 $name2
|
||||||
}
|
}
|
||||||
puts stdout "Reading netlist file $file2"
|
puts stdout "Reading netlist file $file2 for $name2"
|
||||||
set fnum2 [netgen::readnet $file2]
|
set fnum2 [netgen::readnet $file2]
|
||||||
} else {
|
} else {
|
||||||
set cell2 [lindex $flist2 0]
|
set cell2 [lindex $flist2 0]
|
||||||
|
|
@ -461,7 +461,7 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
|
||||||
}
|
}
|
||||||
|
|
||||||
set clist1 [cells list $fnum1]
|
set clist1 [cells list $fnum1]
|
||||||
set cidx [lsearch -regexp $clist1 ^$cell1$]
|
set cidx [lsearch -exact $clist1 $cell1]
|
||||||
if {$cidx < 0} {
|
if {$cidx < 0} {
|
||||||
puts stderr "Cannot find cell $cell1 in file $file1"
|
puts stderr "Cannot find cell $cell1 in file $file1"
|
||||||
return
|
return
|
||||||
|
|
@ -469,7 +469,7 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
|
||||||
set cell1 [lindex $clist1 $cidx]
|
set cell1 [lindex $clist1 $cidx]
|
||||||
}
|
}
|
||||||
set clist2 [cells list $fnum2]
|
set clist2 [cells list $fnum2]
|
||||||
set cidx [lsearch -regexp $clist2 ^$cell2$]
|
set cidx [lsearch -exact $clist2 $cell2]
|
||||||
if {$cidx < 0} {
|
if {$cidx < 0} {
|
||||||
puts stderr "Cannot find cell $cell2 in file $file2"
|
puts stderr "Cannot find cell $cell2 in file $file2"
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h> /* for getenv */
|
#include <stdlib.h> /* for getenv */
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <strings.h>
|
||||||
|
#include <stdarg.h> /* for va_list */
|
||||||
|
|
||||||
#include <tcl.h>
|
#include <tcl.h>
|
||||||
|
|
||||||
|
|
@ -43,14 +45,14 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if TCL_MAJOR_VERSION < 9
|
||||||
|
typedef int Tcl_Size;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*-----------------------*/
|
/*-----------------------*/
|
||||||
/* Tcl 8.4 compatibility */
|
/* Tcl 8.4 compatibility */
|
||||||
/*-----------------------*/
|
/*-----------------------*/
|
||||||
|
|
||||||
#ifndef CONST84
|
|
||||||
#define CONST84
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Tcl_Interp *netgeninterp;
|
Tcl_Interp *netgeninterp;
|
||||||
Tcl_Interp *consoleinterp;
|
Tcl_Interp *consoleinterp;
|
||||||
int ColumnBase = 0;
|
int ColumnBase = 0;
|
||||||
|
|
@ -60,47 +62,47 @@ extern int PropertyErrorDetected;
|
||||||
|
|
||||||
/* Function prototypes for all Tcl command callbacks */
|
/* Function prototypes for all Tcl command callbacks */
|
||||||
|
|
||||||
int _netgen_readnet(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_readnet(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_readlib(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_readlib(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_canonical(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_canonical(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_writenet(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_writenet(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_flatten(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_flatten(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_nodes(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_nodes(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_elements(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_elements(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_debug(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_debug(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_protochip(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_protochip(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_instances(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_instances(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_contents(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_contents(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_describe(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_describe(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_cells(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_cells(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_ports(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_ports(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_model(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_model(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_leaves(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_leaves(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_quit(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_quit(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_reinit(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_reinit(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netgen_log(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_log(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
#ifdef HAVE_MALLINFO
|
#ifdef HAVE_MALLINFO
|
||||||
int _netgen_printmem(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_printmem(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
#endif
|
#endif
|
||||||
int _netgen_help(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netgen_help(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_matching(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_matching(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_compare(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_compare(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_iterate(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_iterate(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_summary(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_summary(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_print(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_print(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_format(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_format(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_run(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_run(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_verify(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_verify(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_automorphs(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_automorphs(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_equate(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_equate(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_ignore(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_ignore(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_permute(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_permute(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_property(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_property(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_exhaustive(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_exhaustive(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_symmetry(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_symmetry(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_restart(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_restart(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_global(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_global(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
int _netcmp_convert(ClientData, Tcl_Interp *, int, Tcl_Obj *CONST objv[]);
|
int _netcmp_convert(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
|
||||||
|
|
||||||
typedef struct _Cmd {
|
typedef struct _Cmd {
|
||||||
char *name;
|
char *name;
|
||||||
|
|
@ -287,7 +289,7 @@ GetTopCell(int fnum)
|
||||||
int
|
int
|
||||||
CommonGetFilenameOrFile(Tcl_Interp *interp, Tcl_Obj *fobj, int *fnumptr)
|
CommonGetFilenameOrFile(Tcl_Interp *interp, Tcl_Obj *fobj, int *fnumptr)
|
||||||
{
|
{
|
||||||
int result, llen;
|
int result;
|
||||||
int fnum, ftest;
|
int fnum, ftest;
|
||||||
char *filename;
|
char *filename;
|
||||||
struct nlist *tp;
|
struct nlist *tp;
|
||||||
|
|
@ -370,7 +372,8 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
|
||||||
struct nlist **tpr, int *fnumptr)
|
struct nlist **tpr, int *fnumptr)
|
||||||
{
|
{
|
||||||
Tcl_Obj *tobj, *fobj;
|
Tcl_Obj *tobj, *fobj;
|
||||||
int result, llen;
|
int result;
|
||||||
|
Tcl_Size llen;
|
||||||
int fnum, ftest, index;
|
int fnum, ftest, index;
|
||||||
char *filename, *cellname;
|
char *filename, *cellname;
|
||||||
struct nlist *tp, *tp2;
|
struct nlist *tp, *tp2;
|
||||||
|
|
@ -399,7 +402,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
|
||||||
Tcl_ResetResult(interp);
|
Tcl_ResetResult(interp);
|
||||||
|
|
||||||
/* Is 1st argument a special keyword? */
|
/* Is 1st argument a special keyword? */
|
||||||
if (Tcl_GetIndexFromObj(interp, tobj, (CONST84 char **)suboptions,
|
if (Tcl_GetIndexFromObj(interp, tobj, (const char **)suboptions,
|
||||||
"special", 0, &index) == TCL_OK) {
|
"special", 0, &index) == TCL_OK) {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case CIRCUIT1_IDX:
|
case CIRCUIT1_IDX:
|
||||||
|
|
@ -455,7 +458,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
|
||||||
|
|
||||||
/* Check if 2nd item is a reserved keyword */
|
/* Check if 2nd item is a reserved keyword */
|
||||||
if (Tcl_GetIndexFromObj(interp, fobj,
|
if (Tcl_GetIndexFromObj(interp, fobj,
|
||||||
(CONST84 char **)suboptions,
|
(const char **)suboptions,
|
||||||
"special", 0, &index) == TCL_OK) {
|
"special", 0, &index) == TCL_OK) {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case CIRCUIT1_IDX:
|
case CIRCUIT1_IDX:
|
||||||
|
|
@ -580,7 +583,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
|
||||||
} else {
|
} else {
|
||||||
/* Only one name given; check if it matches subOption */
|
/* Only one name given; check if it matches subOption */
|
||||||
|
|
||||||
if (Tcl_GetIndexFromObj(interp, objv, (CONST84 char **)suboptions,
|
if (Tcl_GetIndexFromObj(interp, objv, (const char **)suboptions,
|
||||||
"special", 0, &index) == TCL_OK) {
|
"special", 0, &index) == TCL_OK) {
|
||||||
|
|
||||||
switch (index) {
|
switch (index) {
|
||||||
|
|
@ -665,7 +668,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_canonical(ClientData clientData,
|
_netgen_canonical(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
struct nlist *np;
|
struct nlist *np;
|
||||||
|
|
@ -704,7 +707,7 @@ _netgen_canonical(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_readnet(ClientData clientData,
|
_netgen_readnet(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *formats[] = {
|
char *formats[] = {
|
||||||
"automatic", "ext", "extflat", "sim", "prm", "ntk", "spice",
|
"automatic", "ext", "extflat", "sim", "prm", "ntk", "spice",
|
||||||
|
|
@ -741,7 +744,7 @@ _netgen_readnet(ClientData clientData,
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
else if (objc > 1) {
|
else if (objc > 1) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)formats,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)formats,
|
||||||
"format", 0, &index) != TCL_OK) {
|
"format", 0, &index) != TCL_OK) {
|
||||||
if (objc == 3)
|
if (objc == 3)
|
||||||
|
|
||||||
|
|
@ -850,7 +853,7 @@ _netgen_readnet(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_readlib(ClientData clientData,
|
_netgen_readlib(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *formats[] = {
|
char *formats[] = {
|
||||||
"actel", "spice", "xilinx", NULL
|
"actel", "spice", "xilinx", NULL
|
||||||
|
|
@ -883,7 +886,7 @@ _netgen_readlib(ClientData clientData,
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "format [file]");
|
Tcl_WrongNumArgs(interp, 1, objv, "format [file]");
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)formats,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)formats,
|
||||||
"format", 0, &index) != TCL_OK) {
|
"format", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -930,7 +933,7 @@ _netgen_readlib(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_writenet(ClientData clientData,
|
_netgen_writenet(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *formats[] = {
|
char *formats[] = {
|
||||||
"ext", "sim", "ntk", "actel",
|
"ext", "sim", "ntk", "actel",
|
||||||
|
|
@ -949,7 +952,7 @@ _netgen_writenet(ClientData clientData,
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "format file");
|
Tcl_WrongNumArgs(interp, 1, objv, "format file");
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)formats,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)formats,
|
||||||
"format", 0, &index) != TCL_OK) {
|
"format", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -1017,10 +1020,10 @@ _netgen_writenet(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_flatten(ClientData clientData,
|
_netgen_flatten(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr, *file;
|
char *repstr, *file;
|
||||||
int result, llen, filenum;
|
int result, filenum;
|
||||||
struct nlist *tp, *tp2, *tptop;
|
struct nlist *tp, *tp2, *tptop;
|
||||||
|
|
||||||
if ((objc < 2) || (objc > 4)) {
|
if ((objc < 2) || (objc > 4)) {
|
||||||
|
|
@ -1091,7 +1094,7 @@ _netgen_flatten(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_nodes(ClientData clientData,
|
_netgen_nodes(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *estr = NULL, *istr = NULL, *cstr, *fstr;
|
char *estr = NULL, *istr = NULL, *cstr, *fstr;
|
||||||
char *optstart;
|
char *optstart;
|
||||||
|
|
@ -1209,7 +1212,7 @@ _netgen_nodes(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_elements(ClientData clientData,
|
_netgen_elements(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *nstr = NULL, *cstr;
|
char *nstr = NULL, *cstr;
|
||||||
struct objlist * (*ListSave)();
|
struct objlist * (*ListSave)();
|
||||||
|
|
@ -1304,7 +1307,7 @@ _netgen_elements(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_debug(ClientData clientData,
|
_netgen_debug(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *yesno[] = {
|
char *yesno[] = {
|
||||||
"on", "off", NULL
|
"on", "off", NULL
|
||||||
|
|
@ -1318,7 +1321,7 @@ _netgen_debug(ClientData clientData,
|
||||||
if (objc == 1)
|
if (objc == 1)
|
||||||
index = YES_IDX;
|
index = YES_IDX;
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)yesno,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)yesno,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
index = CMD_IDX;
|
index = CMD_IDX;
|
||||||
}
|
}
|
||||||
|
|
@ -1353,7 +1356,7 @@ _netgen_debug(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_protochip(ClientData clientData,
|
_netgen_protochip(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -1373,7 +1376,7 @@ _netgen_protochip(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_instances(ClientData clientData,
|
_netgen_instances(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr;
|
char *repstr;
|
||||||
int result;
|
int result;
|
||||||
|
|
@ -1403,7 +1406,7 @@ _netgen_instances(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_contents(ClientData clientData,
|
_netgen_contents(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr;
|
char *repstr;
|
||||||
int result;
|
int result;
|
||||||
|
|
@ -1432,7 +1435,7 @@ _netgen_contents(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_describe(ClientData clientData,
|
_netgen_describe(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr;
|
char *repstr;
|
||||||
int file = -1;
|
int file = -1;
|
||||||
|
|
@ -1462,7 +1465,7 @@ _netgen_describe(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_cells(ClientData clientData,
|
_netgen_cells(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr, *filename = NULL;
|
char *repstr, *filename = NULL;
|
||||||
char *optstart;
|
char *optstart;
|
||||||
|
|
@ -1549,7 +1552,7 @@ _netgen_cells(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_model(ClientData clientData,
|
_netgen_model(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
struct nlist *tp, *tp2;
|
struct nlist *tp, *tp2;
|
||||||
char *model, *retclass;
|
char *model, *retclass;
|
||||||
|
|
@ -1601,7 +1604,7 @@ _netgen_model(ClientData clientData,
|
||||||
if (objc == 3) {
|
if (objc == 3) {
|
||||||
nports = NumberOfPorts(tp->name, fnum);
|
nports = NumberOfPorts(tp->name, fnum);
|
||||||
|
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[2], (CONST84 char **)modelclasses,
|
if (Tcl_GetIndexFromObj(interp, objv[2], (const char **)modelclasses,
|
||||||
"class", 0, &index) != TCL_OK) {
|
"class", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -1771,7 +1774,7 @@ wrongNumPorts:
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_ports(ClientData clientData,
|
_netgen_ports(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr;
|
char *repstr;
|
||||||
int result;
|
int result;
|
||||||
|
|
@ -1801,7 +1804,7 @@ _netgen_ports(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_leaves(ClientData clientData,
|
_netgen_leaves(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *repstr;
|
char *repstr;
|
||||||
int result;
|
int result;
|
||||||
|
|
@ -1837,7 +1840,7 @@ _netgen_leaves(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_quit(ClientData clientData,
|
_netgen_quit(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -1865,7 +1868,7 @@ _netgen_quit(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_reinit(ClientData clientData,
|
_netgen_reinit(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -1885,7 +1888,7 @@ _netgen_reinit(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_log(ClientData clientData,
|
_netgen_log(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *yesno[] = {
|
char *yesno[] = {
|
||||||
"start", "end", "reset", "suspend", "resume", "file", "echo", "put", NULL
|
"start", "end", "reset", "suspend", "resume", "file", "echo", "put", NULL
|
||||||
|
|
@ -1902,7 +1905,7 @@ _netgen_log(ClientData clientData,
|
||||||
index = (LoggingFile) ? RESUME_IDX : START_IDX;
|
index = (LoggingFile) ? RESUME_IDX : START_IDX;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)yesno,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)yesno,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -2029,7 +2032,7 @@ _netgen_log(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_printmem(ClientData clientData,
|
_netgen_printmem(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -2051,7 +2054,7 @@ _netgen_printmem(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_format(ClientData clientData,
|
_netcmp_format(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
int col1_width = 41, col2_width = 41;
|
int col1_width = 41, col2_width = 41;
|
||||||
|
|
||||||
|
|
@ -2112,13 +2115,13 @@ _netcmp_format(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_compare(ClientData clientData,
|
_netcmp_compare(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *name1, *name2, *file1, *file2, *optstart;
|
char *name1, *name2, *file1, *file2, *optstart;
|
||||||
int fnum1, fnum2, dolist = 0;
|
int fnum1, fnum2, dolist = 0;
|
||||||
int dohierarchy = FALSE;
|
int dohierarchy = FALSE;
|
||||||
int assignonly = FALSE;
|
int assignonly = FALSE;
|
||||||
int argstart = 1, qresult, llen, result;
|
int argstart = 1, qresult, result;
|
||||||
int hascontents1, hascontents2;
|
int hascontents1, hascontents2;
|
||||||
struct Correspond *nextcomp;
|
struct Correspond *nextcomp;
|
||||||
struct nlist *tp1 = NULL, *tp2 = NULL;
|
struct nlist *tp1 = NULL, *tp2 = NULL;
|
||||||
|
|
@ -2289,7 +2292,7 @@ _netcmp_compare(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_iterate(ClientData clientData,
|
_netcmp_iterate(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -2313,7 +2316,7 @@ _netcmp_iterate(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_summary(ClientData clientData,
|
_netcmp_summary(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"nodes", "elements", NULL
|
"nodes", "elements", NULL
|
||||||
|
|
@ -2328,7 +2331,7 @@ _netcmp_summary(ClientData clientData,
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
if (objc == 2) {
|
if (objc == 2) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -2354,7 +2357,7 @@ _netcmp_summary(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_print(ClientData clientData,
|
_netcmp_print(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"nodes", "elements", "queue", NULL
|
"nodes", "elements", "queue", NULL
|
||||||
|
|
@ -2392,16 +2395,16 @@ _netcmp_print(ClientData clientData,
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
if (objc >= 2) {
|
if (objc >= 2) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
if ((objc == 2) && (Tcl_GetIndexFromObj(interp, objv[1],
|
if ((objc == 2) && (Tcl_GetIndexFromObj(interp, objv[1],
|
||||||
(CONST84 char **)classes, "class", 0, &class) != TCL_OK)) {
|
(const char **)classes, "class", 0, &class) != TCL_OK)) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (objc == 3 && index != QUEUE_IDX) {
|
if (objc == 3 && index != QUEUE_IDX) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[2], (CONST84 char **)classes,
|
if (Tcl_GetIndexFromObj(interp, objv[2], (const char **)classes,
|
||||||
"class", 0, &class) != TCL_OK) {
|
"class", 0, &class) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -2445,7 +2448,7 @@ _netcmp_print(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_run(ClientData clientData,
|
_netcmp_run(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"converge", "resolve", NULL
|
"converge", "resolve", NULL
|
||||||
|
|
@ -2472,7 +2475,7 @@ _netcmp_run(ClientData clientData,
|
||||||
if (objc == 1)
|
if (objc == 1)
|
||||||
index = RESOLVE_IDX;
|
index = RESOLVE_IDX;
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -2589,7 +2592,7 @@ _netcmp_run(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_verify(ClientData clientData,
|
_netcmp_verify(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"nodes", "elements", "properties", "only", "all", "equivalent", "unique", NULL
|
"nodes", "elements", "properties", "only", "all", "equivalent", "unique", NULL
|
||||||
|
|
@ -2621,7 +2624,7 @@ _netcmp_verify(ClientData clientData,
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
if (objc == 2) {
|
if (objc == 2) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -2778,7 +2781,7 @@ _netcmp_verify(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_automorphs(ClientData clientData,
|
_netcmp_automorphs(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -2799,7 +2802,7 @@ _netcmp_automorphs(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_convert(ClientData clientData,
|
_netcmp_convert(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *cellname;
|
char *cellname;
|
||||||
int filenum = -1;
|
int filenum = -1;
|
||||||
|
|
@ -2829,10 +2832,10 @@ _netcmp_convert(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_global(ClientData clientData,
|
_netcmp_global(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *filename, *cellname, *pattern;
|
char *filename, *cellname, *pattern;
|
||||||
int numchanged = 0, p, fnum, llen, result;
|
int numchanged = 0, p, fnum, result;
|
||||||
struct nlist *tp;
|
struct nlist *tp;
|
||||||
|
|
||||||
if (objc < 2) {
|
if (objc < 2) {
|
||||||
|
|
@ -2866,7 +2869,7 @@ _netcmp_global(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_ignore(ClientData clientData,
|
_netcmp_ignore(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"class", "shorted", NULL
|
"class", "shorted", NULL
|
||||||
|
|
@ -2880,7 +2883,7 @@ _netcmp_ignore(ClientData clientData,
|
||||||
char *name = NULL, *name2 = NULL;
|
char *name = NULL, *name2 = NULL;
|
||||||
|
|
||||||
if (objc >= 3) {
|
if (objc >= 3) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) == TCL_OK) {
|
"option", 0, &index) == TCL_OK) {
|
||||||
objc--;
|
objc--;
|
||||||
objv++;
|
objv++;
|
||||||
|
|
@ -2914,7 +2917,7 @@ _netcmp_ignore(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_equate(ClientData clientData,
|
_netcmp_equate(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"nodes", "elements", "classes", "pins", NULL
|
"nodes", "elements", "classes", "pins", NULL
|
||||||
|
|
@ -2929,7 +2932,8 @@ _netcmp_equate(ClientData clientData,
|
||||||
struct ElementClass *saveEclass = NULL;
|
struct ElementClass *saveEclass = NULL;
|
||||||
struct NodeClass *saveNclass = NULL;
|
struct NodeClass *saveNclass = NULL;
|
||||||
int file1, file2;
|
int file1, file2;
|
||||||
int i, l1, l2, ltest, lent, dolist = 0, doforce = 0, dounique = 0;
|
int i, dolist = 0, doforce = 0, dounique = 0;
|
||||||
|
Tcl_Size l1, l2, lent, ltest;
|
||||||
Tcl_Obj *tobj1, *tobj2, *tobj3;
|
Tcl_Obj *tobj1, *tobj2, *tobj3;
|
||||||
|
|
||||||
while (objc > 1) {
|
while (objc > 1) {
|
||||||
|
|
@ -2959,7 +2963,7 @@ _netcmp_equate(ClientData clientData,
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -3428,12 +3432,13 @@ _netcmp_equate(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_property(ClientData clientData,
|
_netcmp_property(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
int fnum, i, llen;
|
int fnum, i;
|
||||||
struct nlist *tp;
|
struct nlist *tp;
|
||||||
struct property *kl, *kllast, *klnext;
|
struct property *kl, *kllast, *klnext;
|
||||||
Tcl_Obj *tobj1, *tobj2, *tobj3;
|
Tcl_Obj *tobj1, *tobj2, *tobj3;
|
||||||
|
Tcl_Size llen;
|
||||||
double dval;
|
double dval;
|
||||||
int ival, argstart;
|
int ival, argstart;
|
||||||
|
|
||||||
|
|
@ -3510,7 +3515,7 @@ _netcmp_property(ClientData clientData,
|
||||||
|
|
||||||
/* Don't need to check return value */
|
/* Don't need to check return value */
|
||||||
index = -1;
|
index = -1;
|
||||||
Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)topoptions,
|
Tcl_GetIndexFromObj(interp, objv[1], (const char **)topoptions,
|
||||||
"option", 0, &index);
|
"option", 0, &index);
|
||||||
|
|
||||||
/* Check for special command "property default" */
|
/* Check for special command "property default" */
|
||||||
|
|
@ -3608,7 +3613,7 @@ _netcmp_property(ClientData clientData,
|
||||||
}
|
}
|
||||||
else if (objc == 3) {
|
else if (objc == 3) {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[2],
|
if (Tcl_GetIndexFromObj(interp, objv[2],
|
||||||
(CONST84 char **)topo,
|
(const char **)topo,
|
||||||
"topology", 0, &idx2) == TCL_OK) {
|
"topology", 0, &idx2) == TCL_OK) {
|
||||||
if (idx2 == 0)
|
if (idx2 == 0)
|
||||||
ExactTopology = TRUE;
|
ExactTopology = TRUE;
|
||||||
|
|
@ -3667,7 +3672,7 @@ _netcmp_property(ClientData clientData,
|
||||||
Tcl_SetObjResult(interp, tobj1);
|
Tcl_SetObjResult(interp, tobj1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[2], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[2], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
index = ADD_IDX;
|
index = ADD_IDX;
|
||||||
argstart = 2;
|
argstart = 2;
|
||||||
|
|
@ -3700,7 +3705,7 @@ _netcmp_property(ClientData clientData,
|
||||||
// Each value must be a list of two, or a yes/no answer.
|
// Each value must be a list of two, or a yes/no answer.
|
||||||
|
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[i],
|
if (Tcl_GetIndexFromObj(interp, objv[i],
|
||||||
(CONST84 char **)yesno,
|
(const char **)yesno,
|
||||||
"combine", 0, &idx2) == TCL_OK) {
|
"combine", 0, &idx2) == TCL_OK) {
|
||||||
if (idx2 <= 4) { /* true, enable, etc. */
|
if (idx2 <= 4) { /* true, enable, etc. */
|
||||||
if (index == SERIAL_IDX || index == SERIES_IDX)
|
if (index == SERIAL_IDX || index == SERIES_IDX)
|
||||||
|
|
@ -3732,7 +3737,7 @@ _netcmp_property(ClientData clientData,
|
||||||
if (result != TCL_OK) return result;
|
if (result != TCL_OK) return result;
|
||||||
|
|
||||||
result = Tcl_GetIndexFromObj(interp, tobj2,
|
result = Tcl_GetIndexFromObj(interp, tobj2,
|
||||||
(CONST84 char **)combineoptions,
|
(const char **)combineoptions,
|
||||||
"combine_type", 0, &idx2);
|
"combine_type", 0, &idx2);
|
||||||
if (result != TCL_OK) return result;
|
if (result != TCL_OK) return result;
|
||||||
|
|
||||||
|
|
@ -3817,7 +3822,7 @@ _netcmp_property(ClientData clientData,
|
||||||
/* {key, type} or {key, tolerance} duplet */
|
/* {key, type} or {key, tolerance} duplet */
|
||||||
|
|
||||||
if (Tcl_GetIndexFromObj(interp, tobj2,
|
if (Tcl_GetIndexFromObj(interp, tobj2,
|
||||||
(CONST84 char **)suboptions,
|
(const char **)suboptions,
|
||||||
"type", 0, &idx2) != TCL_OK) {
|
"type", 0, &idx2) != TCL_OK) {
|
||||||
Tcl_ResetResult(interp);
|
Tcl_ResetResult(interp);
|
||||||
if (Tcl_GetDoubleFromObj(interp, tobj2, &dval)
|
if (Tcl_GetDoubleFromObj(interp, tobj2, &dval)
|
||||||
|
|
@ -3861,7 +3866,7 @@ _netcmp_property(ClientData clientData,
|
||||||
/* {key, type, tolerance} triplet */
|
/* {key, type, tolerance} triplet */
|
||||||
|
|
||||||
if (Tcl_GetIndexFromObj(interp, tobj2,
|
if (Tcl_GetIndexFromObj(interp, tobj2,
|
||||||
(CONST84 char **)suboptions,
|
(const char **)suboptions,
|
||||||
"type", 0, &idx2) != TCL_OK)
|
"type", 0, &idx2) != TCL_OK)
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
|
|
||||||
|
|
@ -4004,7 +4009,7 @@ _netcmp_property(ClientData clientData,
|
||||||
if (result != TCL_OK) return result;
|
if (result != TCL_OK) return result;
|
||||||
|
|
||||||
result = Tcl_GetIndexFromObj(interp, tobj2,
|
result = Tcl_GetIndexFromObj(interp, tobj2,
|
||||||
(CONST84 char **)mergeoptions,
|
(const char **)mergeoptions,
|
||||||
"merge_type", 0, &idx2);
|
"merge_type", 0, &idx2);
|
||||||
if (result != TCL_OK) return result;
|
if (result != TCL_OK) return result;
|
||||||
|
|
||||||
|
|
@ -4056,7 +4061,7 @@ _netcmp_property(ClientData clientData,
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
result = Tcl_GetIndexFromObj(interp, objv[3],
|
result = Tcl_GetIndexFromObj(interp, objv[3],
|
||||||
(CONST84 char **)deriveoptions,
|
(const char **)deriveoptions,
|
||||||
"area|perimeter", 0, &idx2);
|
"area|perimeter", 0, &idx2);
|
||||||
if (result != TCL_OK) return result;
|
if (result != TCL_OK) return result;
|
||||||
switch (idx2) {
|
switch (idx2) {
|
||||||
|
|
@ -4088,7 +4093,7 @@ _netcmp_property(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_permute(ClientData clientData,
|
_netcmp_permute(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *model, *pin1, *pin2;
|
char *model, *pin1, *pin2;
|
||||||
char *permuteclass[] = {
|
char *permuteclass[] = {
|
||||||
|
|
@ -4109,7 +4114,7 @@ _netcmp_permute(ClientData clientData,
|
||||||
index = DEFLT_IDX;
|
index = DEFLT_IDX;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)permuteclass,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)permuteclass,
|
||||||
"permute class", 0, &index) != TCL_OK) {
|
"permute class", 0, &index) != TCL_OK) {
|
||||||
if (objc != 4) {
|
if (objc != 4) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "?valid_cellname pin1 pin2?");
|
Tcl_WrongNumArgs(interp, 1, objv, "?valid_cellname pin1 pin2?");
|
||||||
|
|
@ -4229,7 +4234,7 @@ _netcmp_permute(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_symmetry(ClientData clientData,
|
_netcmp_symmetry(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
Printf("Symmetry breaking method has been deprecated.\n");
|
Printf("Symmetry breaking method has been deprecated.\n");
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
|
|
@ -4245,7 +4250,7 @@ _netcmp_symmetry(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_exhaustive(ClientData clientData,
|
_netcmp_exhaustive(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *yesno[] = {
|
char *yesno[] = {
|
||||||
"on", "off", NULL
|
"on", "off", NULL
|
||||||
|
|
@ -4258,7 +4263,7 @@ _netcmp_exhaustive(ClientData clientData,
|
||||||
if (objc == 1)
|
if (objc == 1)
|
||||||
index = -1;
|
index = -1;
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)yesno,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)yesno,
|
||||||
"option", 0, &index) != TCL_OK)
|
"option", 0, &index) != TCL_OK)
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -4287,7 +4292,7 @@ _netcmp_exhaustive(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_restart(ClientData clientData,
|
_netcmp_restart(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
if (objc != 1) {
|
if (objc != 1) {
|
||||||
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
|
||||||
|
|
@ -4307,7 +4312,7 @@ _netcmp_restart(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netgen_help(ClientData clientData,
|
_netgen_help(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
|
|
@ -4338,7 +4343,7 @@ _netgen_help(ClientData clientData,
|
||||||
|
|
||||||
int
|
int
|
||||||
_netcmp_matching(ClientData clientData,
|
_netcmp_matching(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
char *options[] = {
|
char *options[] = {
|
||||||
"nodes", "elements", NULL
|
"nodes", "elements", NULL
|
||||||
|
|
@ -4360,7 +4365,7 @@ _netcmp_matching(ClientData clientData,
|
||||||
name = Tcl_GetString(objv[1]);
|
name = Tcl_GetString(objv[1]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
|
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
|
||||||
"option", 0, &index) != TCL_OK) {
|
"option", 0, &index) != TCL_OK) {
|
||||||
return TCL_ERROR;
|
return TCL_ERROR;
|
||||||
}
|
}
|
||||||
|
|
@ -4489,14 +4494,14 @@ void tcl_vprintf(FILE *f, const char *fmt, va_list args_in)
|
||||||
|
|
||||||
void tcl_stdflush(FILE *f)
|
void tcl_stdflush(FILE *f)
|
||||||
{
|
{
|
||||||
Tcl_SavedResult state;
|
Tcl_InterpState state;
|
||||||
static char stdstr[] = "::flush stdxxx";
|
static char stdstr[] = "::flush stdxxx";
|
||||||
char *stdptr = stdstr + 11;
|
char *stdptr = stdstr + 11;
|
||||||
|
|
||||||
Tcl_SaveResult(netgeninterp, &state);
|
state = Tcl_SaveInterpState(netgeninterp, TCL_OK);
|
||||||
strcpy(stdptr, (f == stderr) ? "err" : "out");
|
strcpy(stdptr, (f == stderr) ? "err" : "out");
|
||||||
Tcl_Eval(netgeninterp, stdstr);
|
Tcl_Eval(netgeninterp, stdstr);
|
||||||
Tcl_RestoreResult(netgeninterp, &state);
|
Tcl_RestoreInterpState(netgeninterp, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------*/
|
/*------------------------------------------------------*/
|
||||||
|
|
@ -4526,7 +4531,7 @@ char *Tcl_Strdup(const char *s)
|
||||||
/*------------------------------------------------------*/
|
/*------------------------------------------------------*/
|
||||||
|
|
||||||
int _tkcon_interrupt(ClientData clientData,
|
int _tkcon_interrupt(ClientData clientData,
|
||||||
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
|
||||||
{
|
{
|
||||||
InterruptPending = 1;
|
InterruptPending = 1;
|
||||||
return TCL_OK;
|
return TCL_OK;
|
||||||
|
|
@ -4565,7 +4570,7 @@ int Tclnetgen_Init(Tcl_Interp *interp)
|
||||||
/* Remember the interpreter */
|
/* Remember the interpreter */
|
||||||
netgeninterp = interp;
|
netgeninterp = interp;
|
||||||
|
|
||||||
if (Tcl_InitStubs(interp, "8.5", 0) == NULL) return TCL_ERROR;
|
if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) return TCL_ERROR;
|
||||||
|
|
||||||
for (n = 0; netgen_cmds[n].name != NULL; n++) {
|
for (n = 0; netgen_cmds[n].name != NULL; n++) {
|
||||||
sprintf(keyword, "netgen::%s", netgen_cmds[n].name);
|
sprintf(keyword, "netgen::%s", netgen_cmds[n].name);
|
||||||
|
|
@ -4574,7 +4579,8 @@ int Tclnetgen_Init(Tcl_Interp *interp)
|
||||||
}
|
}
|
||||||
for (n = 0; netcmp_cmds[n].name != NULL; n++) {
|
for (n = 0; netcmp_cmds[n].name != NULL; n++) {
|
||||||
sprintf(keyword, "netgen::%s", netcmp_cmds[n].name);
|
sprintf(keyword, "netgen::%s", netcmp_cmds[n].name);
|
||||||
Tcl_CreateObjCommand(interp, keyword, netcmp_cmds[n].handler,
|
Tcl_CreateObjCommand(interp, keyword,
|
||||||
|
(Tcl_ObjCmdProc *)netcmp_cmds[n].handler,
|
||||||
(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
|
(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue