Compare commits

...

9 Commits

Author SHA1 Message Date
R. Timothy Edwards 3392159243 Added some extra code to the verilog parser. It now handles some
additional syntax for wire bundles specified as a pin connection
on an array of instances, and a few other things.  These are not
exhaustive but are solving an immediate problem.  I will go back
and clean up the code to make it work for more general cases
later.
2025-11-29 11:55:26 -05:00
R. Timothy Edwards 24c6eb4cb9 Updated the version to go along with the merge of pull request 2025-11-24 12:26:57 -05:00
Mitch Bailey 9048191486 Allow processing of cellnames with $.
When loading a file, also print cellname on errors

Signed-off-by: Mitch Bailey <d.mitch.bailey@gmail.com>
2025-11-24 12:26:30 -05:00
R. Timothy Edwards 72d7d55bbe Corrected an issue with the "-noflatten" switch to "lvs", which is
also a problem with the underlying "flatten prohibit" command
option;  in one place, the cell's subcircuits were being prohibited
from being flattened, causing issues including a potential infinite
loop.
2025-11-21 15:52:14 -05:00
R. Timothy Edwards 04163aedcc One hopefully final modification to ensure that Tcl_InitStubs()
uses the Tcl version that the program has been compiled to.  This
should work with both Tcl 8.X and Tcl 9.X.
2025-11-12 11:32:18 -05:00
R. Timothy Edwards f7d35f9cca Accidentally changed a file in the last commit which gets
overwritten by "configure".  Moved the modification to the source
file that doesn't get overwritten.
2025-11-12 09:55:29 -05:00
R. Timothy Edwards 601277e539 Updated the revision number for the last set of changes. 2025-11-12 09:19:52 -05:00
R. Timothy Edwards 73344329f8 Made some updates for Tcl 9 compatibility; also changed the
Makefile to pass EXTRA_CFLAGS for testing with "-std=c99" and
"-std=gnu99".  Made some additional corrections to ensure a
clean compile using -std=gnu99.
2025-11-12 09:17:46 -05:00
R. Timothy Edwards 08485d28a7 Changed CONST and CONST84 everywhere in tclnetgen.c to "const".
The capitalized version of this got removed from the Tcl headers
as some point and is no longer valid.  Added an include of
"strings.h" to base/actel.c, which was missing it (uses
strcasecmp() in the code, and needs the function declaration).
2025-11-11 09:59:14 -05:00
10 changed files with 320 additions and 179 deletions

View File

@ -1 +1 @@
1.5.306
1.5.311

View File

@ -22,6 +22,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include <stdarg.h>
#include <strings.h>
#include <ctype.h>
#ifdef IBMPC
#include <stdlib.h> /* for strtol on PC */

View File

@ -300,8 +300,6 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
return 0;
}
}
/* Placeholder cells must not be flattened */
if (ThisCell->flags & CELL_PLACEHOLDER) return 0;
FreeNodeNames(ThisCell);
@ -339,6 +337,10 @@ int flattenInstancesOf(char *name, int fnum, char *instance)
LastObj = ParentParams;
continue;
}
if (ChildCell->flags & CELL_PLACEHOLDER) {
LastObj = ParentParams;
continue; // Placeholder cells must not be flattened
}
if (ChildCell == ThisCell) {
LastObj = ParentParams;
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)"
" makes a better match\n", ecomp->cell1->name,
name1, file1);
flattenInstancesOf(name1, file1, ecomp->cell1->name);
modified1++;
if (flattenInstancesOf(name1, file1, ecomp->cell1->name) > 0)
modified1++;
}
else if (ecomp->cell1 && (ecomp->num1 > 0)) {
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)"
" makes a better match\n", ecomp->cell2->name,
name2, file2);
flattenInstancesOf(name2, file2, ecomp->cell2->name);
modified2++;
if (flattenInstancesOf(name2, file2, ecomp->cell2->name) > 0)
modified2++;
}
else if (ecomp->cell2 && (ecomp->num2 > 0)) {
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)"
" makes a better match\n", ecomp->cell2->name,
name2, file2);
flattenInstancesOf(name2, file2, ecomp->cell2->name);
modified2++;
if (flattenInstancesOf(name2, file2, ecomp->cell2->name) > 0)
modified2++;
}
else if (ecomp->cell2) {
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)"
" makes a better match\n", ecomp->cell1->name,
name1, file1);
flattenInstancesOf(name1, file1, ecomp->cell1->name);
modified1++;
if (flattenInstancesOf(name1, file1, ecomp->cell1->name) > 0)
modified1++;
}
else if (ecomp->cell1) {
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"
" %s (%d) makes a better match\n",
ecompX0->cell1->name, name1, file1);
flattenInstancesOf(name1, file1,
ecompX0->cell1->name);
ecompX0->num1 = 0;
ecomp0X->num1 += ecompX0->num1;
modified1++;
if (flattenInstancesOf(name1, file1,
ecompX0->cell1->name) > 0) {
ecompX0->num1 = 0;
ecomp0X->num1 += ecompX0->num1;
modified1++;
}
}
else
{
@ -2331,11 +2334,12 @@ PrematchLists(char *name1, int file1, char *name2, int file2)
Fprintf(stdout, "Flattening instances of %s in cell"
" %s (%d) makes a better match\n",
ecomp0X->cell2->name, name2, file2);
flattenInstancesOf(name2, file2,
ecomp0X->cell2->name);
ecomp0X->num2 = 0;
ecompX0->num2 += ecomp0X->num2;
modified2++;
if (flattenInstancesOf(name2, file2,
ecomp0X->cell2->name) > 0) {
ecomp0X->num2 = 0;
ecompX0->num2 += ecomp0X->num2;
modified2++;
}
}
else {
Fprintf(stdout, "Flattening instances of %s in "

View File

@ -24,6 +24,7 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdarg.h>
#include <setjmp.h>
#include <signal.h>
#include <strings.h> /* for strncasecmp() */
#include <time.h> /* for time() as a seed for random number generator */
#include <limits.h>
#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);
changed = flattenInstancesOf(parent, tc->file, tc->name);
Fprintf(stdout, "(%d instance%s)\n", changed, ((changed == 1) ? "" : "s"));
return 1;
return (changed != 0);
}
if (tc->cell == NULL) return 0;

View File

@ -25,6 +25,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include <stdlib.h> /* for strtof() */
#include <stdarg.h>
#include <string.h>
#include <strings.h>
#include <ctype.h> /* toupper() */
#ifdef IBMPC
#include <alloc.h>

View File

@ -21,6 +21,9 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "config.h"
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>
#if 0
#include <stdarg.h> /* what about varargs, like in pdutils.c ??? */
#endif

View File

@ -156,7 +156,8 @@ struct expr_stack {
//-------------------------------------------------------------------------
// Evaluate an expression for an array bound. This is much like
// 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.
// Evaluated result is placed in the integer pointed to by "valptr".
@ -220,6 +221,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) */
for (texp = start; texp; texp = texp->next) {
@ -295,6 +329,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) */
for (texp = start; texp; texp = texp->next) {
@ -373,8 +440,15 @@ int ParseIntegerExpression(char *expr, int *iptr)
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, ":")) {
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->value = 0;
newexp->next = NULL;
@ -389,7 +463,7 @@ int ParseIntegerExpression(char *expr, int *iptr)
if ((result = sscanf(sptr, "%d", &value)) != 1) {
// Is name in the parameter list?
kl = (struct property *)HashLookup(nexttok, &verilogparams);
kl = (struct property *)HashLookup(sptr, &verilogparams);
if (kl == NULL) {
Printf("Value %s in expression is not a number or a parameter.\n",
sptr);
@ -402,27 +476,29 @@ int ParseIntegerExpression(char *expr, int *iptr)
if (result != 1) {
Printf("Parameter %s has value %s that cannot be parsed"
" as an integer.\n",
nexttok, kl->pdefault.string);
sptr, kl->pdefault.string);
value = 0;
break;
}
}
else if (kl->type == PROP_INTEGER) {
value = kl->pdefault.ival;
result = 1; // Assert valid result
}
else if (kl->type == PROP_DOUBLE) {
value = (int)kl->pdefault.dval;
if ((double)value != kl->pdefault.dval) {
Printf("Parameter %s has value %g that cannot be parsed"
" as an integer.\n",
nexttok, kl->pdefault.dval);
sptr, kl->pdefault.dval);
value = 0;
break;
}
result = 1; // Assert valid result
}
else {
Printf("Parameter %s has unknown type; don't know how"
" to parse.\n", nexttok);
" to parse.\n", sptr);
value = 0;
break;
}
@ -516,7 +592,8 @@ int GetBusTok(struct bus *wb)
}
else if (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->oper = *nexttok;
newexp->value = 0;
@ -1879,7 +1956,8 @@ skip_endmodule:
// Allowed uses of "assign" for netlists:
// "assign a = b" joins two nets.
// "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.
if (nexttok && match(nexttok, "=")) {
@ -2140,6 +2218,19 @@ nextinst:
}
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, "(")) {
char savetok = (char)0;
@ -2202,7 +2293,8 @@ nextinst:
strcat(new_wire_bundle, nexttok);
FREE(wire_bundle);
wire_bundle = new_wire_bundle;
if (!strcmp(nexttok, "}")) break;
if (!strcmp(nexttok, "}"))
break;
SkipTokComments(VLOG_PIN_CHECK_DELIMITERS);
}
if (!nexttok) {
@ -2578,6 +2670,7 @@ nextinst:
char *brackptr;
int j;
char locinst[MAX_STR_LEN];
int arraypos = (arraystart > arrayend) ? arraymax - i : i;
if (i != -1)
sprintf(locinst, "%s[%d]", instancename, i);
@ -2627,7 +2720,14 @@ nextinst:
else if (GetBus(scan->net, &wb) == 0) {
char *bptr2;
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, '[');
if (brackptr) *brackptr = '\0';
@ -2660,6 +2760,7 @@ nextinst:
else {
// Instance must be an array
char netname[MAX_STR_LEN];
char *spos = scanroot;
int slice, portlen, siglen;
/* Get the array size of the port for bit slicing */
@ -2671,27 +2772,49 @@ nextinst:
if (siglen < 0) siglen = -siglen;
siglen++;
// If signal array is smaller than the portlength *
// length of instance array, then the signal wraps.
// If this is a bundle, then count out to the current
// 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) {
slice = wb.start - (arraystart - i) * portlen;
while (slice < wb2.end) slice += siglen;
}
else if (wb2.start < wb2.end && arraystart > arrayend) {
slice = wb.start + (arraystart - i) * portlen;
while (slice > wb2.end) slice -= siglen;
}
else if (wb2.start > wb2.end && arraystart < arrayend) {
slice = wb.start - (arraystart + i) * portlen;
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;
// If signal array is smaller than the portlength *
// length of instance array, then the signal wraps.
if (wb2.start >= wb2.end && arraystart >= arrayend) {
slice = wb.start - (arraystart - i) * portlen;
while (slice < wb2.end) slice += siglen;
}
else if (wb2.start < wb2.end && arraystart > arrayend) {
slice = wb.start + (arraystart - i) * portlen;
while (slice > wb2.end) slice -= siglen;
}
else if (wb2.start > wb2.end && arraystart < arrayend) {
slice = wb.start - (arraystart + i) * portlen;
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);
join(netname, obptr->name);
}

View File

@ -68,6 +68,7 @@ LIB_SPECS = @LIB_SPECS@
LIB_SPECS_NOSTUB = @LIB_SPECS_NOSTUB@
WISH_EXE = @WISH_EXE@
TCL_LIB_DIR = @TCL_LIB_DIR@
EXTRA_CFLAGS =
CC = @CC@
CPP = @CPP@
@ -76,7 +77,7 @@ CXX = @CXX@
CPPFLAGS = -I. -I${NETGENDIR} @CPPFLAGS@
DFLAGS = @extra_defs@ @stub_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_FLAG = @DEPEND_FLAG@

View File

@ -429,7 +429,7 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
set file1 $name1
set cell1 $name1
}
puts stdout "Reading netlist file $file1"
puts stdout "Reading netlist file $file1 for $name1"
set fnum1 [netgen::readnet $file1]
} else {
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 cell2 $name2
}
puts stdout "Reading netlist file $file2"
puts stdout "Reading netlist file $file2 for $name2"
set fnum2 [netgen::readnet $file2]
} else {
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 cidx [lsearch -regexp $clist1 ^$cell1$]
set cidx [lsearch -exact $clist1 $cell1]
if {$cidx < 0} {
puts stderr "Cannot find cell $cell1 in file $file1"
return
@ -469,7 +469,7 @@ proc netgen::lvs { name1 name2 {setupfile setup.tcl} {logfile comp.out} args} {
set cell1 [lindex $clist1 $cidx]
}
set clist2 [cells list $fnum2]
set cidx [lsearch -regexp $clist2 ^$cell2$]
set cidx [lsearch -exact $clist2 $cell2]
if {$cidx < 0} {
puts stderr "Cannot find cell $cell2 in file $file2"
return

View File

@ -21,6 +21,8 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include <stdlib.h> /* for getenv */
#include <string.h>
#include <strings.h>
#include <stdarg.h> /* for va_list */
#include <tcl.h>
@ -43,14 +45,14 @@ the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define FALSE 0
#endif
#if TCL_MAJOR_VERSION < 9
typedef int Tcl_Size;
#endif
/*-----------------------*/
/* Tcl 8.4 compatibility */
/*-----------------------*/
#ifndef CONST84
#define CONST84
#endif
Tcl_Interp *netgeninterp;
Tcl_Interp *consoleinterp;
int ColumnBase = 0;
@ -60,47 +62,47 @@ extern int PropertyErrorDetected;
/* Function prototypes for all Tcl command callbacks */
int _netgen_readnet(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_writenet(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_elements(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_instances(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_cells(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_leaves(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_log(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_canonical(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_nodes(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_protochip(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_describe(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_model(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_reinit(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
int _netgen_log(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
#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
int _netgen_help(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_iterate(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_format(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_automorphs(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_permute(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_symmetry(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_convert(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_compare(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_print(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_verify(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_ignore(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_exhaustive(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_global(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
int _netcmp_convert(ClientData, Tcl_Interp *, int, Tcl_Obj *const objv[]);
typedef struct _Cmd {
char *name;
@ -287,7 +289,7 @@ GetTopCell(int fnum)
int
CommonGetFilenameOrFile(Tcl_Interp *interp, Tcl_Obj *fobj, int *fnumptr)
{
int result, llen;
int result;
int fnum, ftest;
char *filename;
struct nlist *tp;
@ -370,7 +372,8 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
struct nlist **tpr, int *fnumptr)
{
Tcl_Obj *tobj, *fobj;
int result, llen;
int result;
Tcl_Size llen;
int fnum, ftest, index;
char *filename, *cellname;
struct nlist *tp, *tp2;
@ -399,7 +402,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
Tcl_ResetResult(interp);
/* 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) {
switch (index) {
case CIRCUIT1_IDX:
@ -455,7 +458,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
/* Check if 2nd item is a reserved keyword */
if (Tcl_GetIndexFromObj(interp, fobj,
(CONST84 char **)suboptions,
(const char **)suboptions,
"special", 0, &index) == TCL_OK) {
switch (index) {
case CIRCUIT1_IDX:
@ -580,7 +583,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
} else {
/* 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) {
switch (index) {
@ -665,7 +668,7 @@ CommonParseCell(Tcl_Interp *interp, Tcl_Obj *objv,
int
_netgen_canonical(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
int result;
struct nlist *np;
@ -704,7 +707,7 @@ _netgen_canonical(ClientData clientData,
int
_netgen_readnet(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *formats[] = {
"automatic", "ext", "extflat", "sim", "prm", "ntk", "spice",
@ -741,7 +744,7 @@ _netgen_readnet(ClientData clientData,
return TCL_ERROR;
}
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) {
if (objc == 3)
@ -850,7 +853,7 @@ _netgen_readnet(ClientData clientData,
int
_netgen_readlib(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *formats[] = {
"actel", "spice", "xilinx", NULL
@ -883,7 +886,7 @@ _netgen_readlib(ClientData clientData,
Tcl_WrongNumArgs(interp, 1, objv, "format [file]");
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) {
return TCL_ERROR;
}
@ -930,7 +933,7 @@ _netgen_readlib(ClientData clientData,
int
_netgen_writenet(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *formats[] = {
"ext", "sim", "ntk", "actel",
@ -949,7 +952,7 @@ _netgen_writenet(ClientData clientData,
Tcl_WrongNumArgs(interp, 1, objv, "format file");
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) {
return TCL_ERROR;
}
@ -1017,10 +1020,10 @@ _netgen_writenet(ClientData clientData,
int
_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;
int result, llen, filenum;
int result, filenum;
struct nlist *tp, *tp2, *tptop;
if ((objc < 2) || (objc > 4)) {
@ -1091,7 +1094,7 @@ _netgen_flatten(ClientData clientData,
int
_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 *optstart;
@ -1209,7 +1212,7 @@ _netgen_nodes(ClientData clientData,
int
_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;
struct objlist * (*ListSave)();
@ -1304,7 +1307,7 @@ _netgen_elements(ClientData clientData,
int
_netgen_debug(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *yesno[] = {
"on", "off", NULL
@ -1318,7 +1321,7 @@ _netgen_debug(ClientData clientData,
if (objc == 1)
index = YES_IDX;
else {
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)yesno,
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)yesno,
"option", 0, &index) != TCL_OK) {
index = CMD_IDX;
}
@ -1353,7 +1356,7 @@ _netgen_debug(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -1373,7 +1376,7 @@ _netgen_protochip(ClientData clientData,
int
_netgen_instances(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *repstr;
int result;
@ -1403,7 +1406,7 @@ _netgen_instances(ClientData clientData,
int
_netgen_contents(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *repstr;
int result;
@ -1432,7 +1435,7 @@ _netgen_contents(ClientData clientData,
int
_netgen_describe(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *repstr;
int file = -1;
@ -1462,7 +1465,7 @@ _netgen_describe(ClientData clientData,
int
_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 *optstart;
@ -1549,7 +1552,7 @@ _netgen_cells(ClientData clientData,
int
_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;
char *model, *retclass;
@ -1601,7 +1604,7 @@ _netgen_model(ClientData clientData,
if (objc == 3) {
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) {
return TCL_ERROR;
}
@ -1771,7 +1774,7 @@ wrongNumPorts:
int
_netgen_ports(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *repstr;
int result;
@ -1801,7 +1804,7 @@ _netgen_ports(ClientData clientData,
int
_netgen_leaves(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *repstr;
int result;
@ -1837,7 +1840,7 @@ _netgen_leaves(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -1865,7 +1868,7 @@ _netgen_quit(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -1885,7 +1888,7 @@ _netgen_reinit(ClientData clientData,
int
_netgen_log(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *yesno[] = {
"start", "end", "reset", "suspend", "resume", "file", "echo", "put", NULL
@ -1902,7 +1905,7 @@ _netgen_log(ClientData clientData,
index = (LoggingFile) ? RESUME_IDX : START_IDX;
}
else {
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)yesno,
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)yesno,
"option", 0, &index) != TCL_OK) {
return TCL_ERROR;
}
@ -2029,7 +2032,7 @@ _netgen_log(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -2051,7 +2054,7 @@ _netgen_printmem(ClientData clientData,
int
_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;
@ -2112,13 +2115,13 @@ _netcmp_format(ClientData clientData,
int
_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;
int fnum1, fnum2, dolist = 0;
int dohierarchy = FALSE;
int assignonly = FALSE;
int argstart = 1, qresult, llen, result;
int argstart = 1, qresult, result;
int hascontents1, hascontents2;
struct Correspond *nextcomp;
struct nlist *tp1 = NULL, *tp2 = NULL;
@ -2289,7 +2292,7 @@ _netcmp_compare(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -2313,7 +2316,7 @@ _netcmp_iterate(ClientData clientData,
int
_netcmp_summary(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"nodes", "elements", NULL
@ -2328,7 +2331,7 @@ _netcmp_summary(ClientData clientData,
return TCL_ERROR;
}
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) {
return TCL_ERROR;
}
@ -2354,7 +2357,7 @@ _netcmp_summary(ClientData clientData,
int
_netcmp_print(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"nodes", "elements", "queue", NULL
@ -2392,16 +2395,16 @@ _netcmp_print(ClientData clientData,
return TCL_ERROR;
}
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) {
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;
}
}
}
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) {
return TCL_ERROR;
}
@ -2445,7 +2448,7 @@ _netcmp_print(ClientData clientData,
int
_netcmp_run(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"converge", "resolve", NULL
@ -2472,7 +2475,7 @@ _netcmp_run(ClientData clientData,
if (objc == 1)
index = RESOLVE_IDX;
else {
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
"option", 0, &index) != TCL_OK) {
return TCL_ERROR;
}
@ -2589,7 +2592,7 @@ _netcmp_run(ClientData clientData,
int
_netcmp_verify(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"nodes", "elements", "properties", "only", "all", "equivalent", "unique", NULL
@ -2621,7 +2624,7 @@ _netcmp_verify(ClientData clientData,
return TCL_ERROR;
}
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) {
return TCL_ERROR;
}
@ -2778,7 +2781,7 @@ _netcmp_verify(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -2799,7 +2802,7 @@ _netcmp_automorphs(ClientData clientData,
int
_netcmp_convert(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *cellname;
int filenum = -1;
@ -2829,10 +2832,10 @@ _netcmp_convert(ClientData clientData,
int
_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;
int numchanged = 0, p, fnum, llen, result;
int numchanged = 0, p, fnum, result;
struct nlist *tp;
if (objc < 2) {
@ -2866,7 +2869,7 @@ _netcmp_global(ClientData clientData,
int
_netcmp_ignore(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"class", "shorted", NULL
@ -2880,7 +2883,7 @@ _netcmp_ignore(ClientData clientData,
char *name = NULL, *name2 = NULL;
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) {
objc--;
objv++;
@ -2914,7 +2917,7 @@ _netcmp_ignore(ClientData clientData,
int
_netcmp_equate(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"nodes", "elements", "classes", "pins", NULL
@ -2929,7 +2932,8 @@ _netcmp_equate(ClientData clientData,
struct ElementClass *saveEclass = NULL;
struct NodeClass *saveNclass = NULL;
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;
while (objc > 1) {
@ -2959,7 +2963,7 @@ _netcmp_equate(ClientData clientData,
return TCL_ERROR;
}
else {
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
"option", 0, &index) != TCL_OK) {
return TCL_ERROR;
}
@ -3428,12 +3432,13 @@ _netcmp_equate(ClientData clientData,
int
_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 property *kl, *kllast, *klnext;
Tcl_Obj *tobj1, *tobj2, *tobj3;
Tcl_Size llen;
double dval;
int ival, argstart;
@ -3510,7 +3515,7 @@ _netcmp_property(ClientData clientData,
/* Don't need to check return value */
index = -1;
Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)topoptions,
Tcl_GetIndexFromObj(interp, objv[1], (const char **)topoptions,
"option", 0, &index);
/* Check for special command "property default" */
@ -3608,7 +3613,7 @@ _netcmp_property(ClientData clientData,
}
else if (objc == 3) {
if (Tcl_GetIndexFromObj(interp, objv[2],
(CONST84 char **)topo,
(const char **)topo,
"topology", 0, &idx2) == TCL_OK) {
if (idx2 == 0)
ExactTopology = TRUE;
@ -3667,7 +3672,7 @@ _netcmp_property(ClientData clientData,
Tcl_SetObjResult(interp, tobj1);
}
else {
if (Tcl_GetIndexFromObj(interp, objv[2], (CONST84 char **)options,
if (Tcl_GetIndexFromObj(interp, objv[2], (const char **)options,
"option", 0, &index) != TCL_OK) {
index = ADD_IDX;
argstart = 2;
@ -3700,7 +3705,7 @@ _netcmp_property(ClientData clientData,
// Each value must be a list of two, or a yes/no answer.
if (Tcl_GetIndexFromObj(interp, objv[i],
(CONST84 char **)yesno,
(const char **)yesno,
"combine", 0, &idx2) == TCL_OK) {
if (idx2 <= 4) { /* true, enable, etc. */
if (index == SERIAL_IDX || index == SERIES_IDX)
@ -3732,7 +3737,7 @@ _netcmp_property(ClientData clientData,
if (result != TCL_OK) return result;
result = Tcl_GetIndexFromObj(interp, tobj2,
(CONST84 char **)combineoptions,
(const char **)combineoptions,
"combine_type", 0, &idx2);
if (result != TCL_OK) return result;
@ -3817,7 +3822,7 @@ _netcmp_property(ClientData clientData,
/* {key, type} or {key, tolerance} duplet */
if (Tcl_GetIndexFromObj(interp, tobj2,
(CONST84 char **)suboptions,
(const char **)suboptions,
"type", 0, &idx2) != TCL_OK) {
Tcl_ResetResult(interp);
if (Tcl_GetDoubleFromObj(interp, tobj2, &dval)
@ -3861,7 +3866,7 @@ _netcmp_property(ClientData clientData,
/* {key, type, tolerance} triplet */
if (Tcl_GetIndexFromObj(interp, tobj2,
(CONST84 char **)suboptions,
(const char **)suboptions,
"type", 0, &idx2) != TCL_OK)
return TCL_ERROR;
@ -4004,7 +4009,7 @@ _netcmp_property(ClientData clientData,
if (result != TCL_OK) return result;
result = Tcl_GetIndexFromObj(interp, tobj2,
(CONST84 char **)mergeoptions,
(const char **)mergeoptions,
"merge_type", 0, &idx2);
if (result != TCL_OK) return result;
@ -4056,7 +4061,7 @@ _netcmp_property(ClientData clientData,
return TCL_ERROR;
}
result = Tcl_GetIndexFromObj(interp, objv[3],
(CONST84 char **)deriveoptions,
(const char **)deriveoptions,
"area|perimeter", 0, &idx2);
if (result != TCL_OK) return result;
switch (idx2) {
@ -4088,7 +4093,7 @@ _netcmp_property(ClientData clientData,
int
_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 *permuteclass[] = {
@ -4109,7 +4114,7 @@ _netcmp_permute(ClientData clientData,
index = DEFLT_IDX;
}
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) {
if (objc != 4) {
Tcl_WrongNumArgs(interp, 1, objv, "?valid_cellname pin1 pin2?");
@ -4229,7 +4234,7 @@ _netcmp_permute(ClientData clientData,
int
_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");
return TCL_OK;
@ -4245,7 +4250,7 @@ _netcmp_symmetry(ClientData clientData,
int
_netcmp_exhaustive(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *yesno[] = {
"on", "off", NULL
@ -4258,7 +4263,7 @@ _netcmp_exhaustive(ClientData clientData,
if (objc == 1)
index = -1;
else {
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)yesno,
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)yesno,
"option", 0, &index) != TCL_OK)
return TCL_ERROR;
}
@ -4287,7 +4292,7 @@ _netcmp_exhaustive(ClientData clientData,
int
_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) {
Tcl_WrongNumArgs(interp, 1, objv, "(no arguments)");
@ -4307,7 +4312,7 @@ _netcmp_restart(ClientData clientData,
int
_netgen_help(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
int n;
@ -4338,7 +4343,7 @@ _netgen_help(ClientData clientData,
int
_netcmp_matching(ClientData clientData,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
char *options[] = {
"nodes", "elements", NULL
@ -4360,7 +4365,7 @@ _netcmp_matching(ClientData clientData,
name = Tcl_GetString(objv[1]);
}
else {
if (Tcl_GetIndexFromObj(interp, objv[1], (CONST84 char **)options,
if (Tcl_GetIndexFromObj(interp, objv[1], (const char **)options,
"option", 0, &index) != TCL_OK) {
return TCL_ERROR;
}
@ -4489,14 +4494,14 @@ void tcl_vprintf(FILE *f, const char *fmt, va_list args_in)
void tcl_stdflush(FILE *f)
{
Tcl_SavedResult state;
Tcl_InterpState state;
static char stdstr[] = "::flush stdxxx";
char *stdptr = stdstr + 11;
Tcl_SaveResult(netgeninterp, &state);
state = Tcl_SaveInterpState(netgeninterp, TCL_OK);
strcpy(stdptr, (f == stderr) ? "err" : "out");
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,
Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
Tcl_Interp *interp, int objc, Tcl_Obj *const objv[])
{
InterruptPending = 1;
return TCL_OK;
@ -4565,7 +4570,7 @@ int Tclnetgen_Init(Tcl_Interp *interp)
/* Remember the interpreter */
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++) {
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++) {
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);
}